@Roman, @dfisher, @lastmjs, all: Thanks a lot for your thoughts, and taking the time to write them down! Apologies for my late response, I am still recovering from a virus infection.
@Roman: My interpretation of your thoughts, at a high level, is that we should do the Ethereum integration diligently, do things properly, and not unnecessarily rush the integration. In other words, repeat the good things of the BTC integration. That’s the high-level semantics I get out of your arguments, abstracting from the concrete ckETH discussion. Please correct me if this interpretation is wrong. I could not agree more to this interpretation actually!
Now let’s discuss the proposal of Phase 1 and Phase 2 of the Ethereum integration. Phase 1 is thought of as an instrument to quickly make a first implementation of the API available to everyone in the community who wants to use it. The integration builds on HTTPS outcalls to one or more Ethereum cloud services like Infura, or QuickNode, thus has clearly a weaker trust model as Phase 2, but still is a solid implementation of an integration — just not trustless. For Phase 1, much of what is needed is there already in the form of the ic-web3 library by Rocklabs, which is already open source. The idea for Phase 1 now is to issue a grant to Rocklabs to retrofit the library to offer the same API, or one the is very close to the one for the Phase-2 integration. People will be able to build already on the API of Phase 1 early on. From this perspective, Phase 1 is analogous to the developer preview of the Bitcoin integration which was launched early on with the API close to the final one so that people could already build on it. The Bitcoin developer preview, however, did not do a real integration yet, so was less powerful than a Phase 1 of the Ethereum integration, which gives people more options on what they can do with it.
Your forum post was focussing on ckETH as application case for Ethereum integration. In my opinion, ckETH is only one use case, granted, a very important one, but there are many more: ckUSDC, ckUSDT, NFTs etc. One of your main assertions is that we should not launch ckETH before Phase 2 is complete. Thus, we should not transition ckETH from a weaker trust model of the integration (Phase 1) to a stronger one (Phase 2), but only launch with the strong one when Phase 2 is available. This definitely has some very valid points, e.g., avoid the reduced trustworthiness of the ckETH state acquired through Phase 1 integration vs Phase 2. From this perspective, your argument makes a lot of sense and ckETH’s strategy needs further discussion.
Continuing the ckETH discussion, a ckETH implementation will not be ready tomorrow: Someone needs to build an ERC-20-based minter, ideally customizable to any ERC-20 token, the code needs to go through a thorough security review, needs to run in beta phase on an Ethereum testnet for a while, and only thereafter can be launched for Ethereum Mainnet. Also, the question is whether DFINITY should build the ckETH minter canister, as it did for ckBTC, or the community should do it? That’s also something that is not yet clear, at least to me. Thus, for me, the ckETH question is not even the most important and most pressing one, it is one use case of many and its own timing dictates in many ways when it can be launched in production. Now to the concrete question: If ready, should it launch before Phase 2 is ready? I don’t know, this is actually a really tough question. Having a clean trust model without a migration to Phase 2 vs. a shorter time to market and our DEXs being able to use it earlier. An alternative is to have a preliminary chain-key Ethereum implementation that can bridge the gap towards the final launch. We had this for Bitcoin also in the form of icBTC by ICLighthouse.
My thinking goes into a direction that a community-launched chain-keyed Eth, lets call it icETH for now, based on Phase 1 might be a great idea. That is, Phase 1 is built and launched quickly so that everyone can start integrating their dapps with Ethereum. The API will stay (almost) the same for the Phase 2 launch. Then a first iteration of chain-key Ethereum in the form of icETH can be started with as well. And dapps can start integrating with icETH already. All of this helps reduce the time to market for the Phase 2 and Phase-2-based ckETH without severe drawbacks. The decisions are left to the individual community members on whether to adopt an early version of chain-key Ethereum as soon as possible and build upon it or whether to wait for the Phase 2 and a final ckETH to be ready. In any case, Phase 1 is an accelerator that does not cost us much, but helps a lot in getting the final API out so that our community can start building upon it. So it’s in many ways the most decentralized approach where everyone can do what they deem best for their projects. No one imposes anything on anyone. All we do now is to work with the community to enable this flexibility and shortening of the time to market.
@Roman, @dfisher, @lastmjs, all, I would really appreciate your feedback on this line of thinking.
I agree to that in that we should repeat everything that was good from the Bitcoin integration, not unnecessarily rush, and do things properly. But not be slower than we could be while doing things properly. Also let’s improve it where possible. E.g., offer people a means to start coding their dapp integrations as soon as we can with a close-to-final interface and also giving people a choice whether to run something in beta or production before Phase 2 is ready. I think there is no drawback of running any dapp, also ckETH, in beta with Phase 1. Also note that Phase 1 is not some insecure mess, but uses well-vetted cloud service providers as integration points to Ethereum. This will give us a lot of advancement in terms of time to market. For this reason, I don’t see a dilemma to start with Phase 1 — it’s a powerful accelerator for the community to build dapps using Ethereum. The question whether to launch the “official” ckETH with Phase 1 is a specific one that needs lots of thought. But considering that building ckETH also takes time, this might not even be a relevant question as ckETH needs time to be built, time to be reviewed, and time to be run in beta with an Ethereum testnet — it might not be ready that long before Phase 2 is ready. Considering this, I would see doing Phase 1 as outlined to be only an advantage to the community.
So, yes, DFINITY needs to take its time to build Phase 2 and ckETH, but we should support the community to start building their dapps as soon as possible. Whether individual dapps are launched in production with Phase 1 or only Phase 2 is up to the discretion of each project — we definitely don’t want to impose anything on anyone here.
@dfisher, I hope this has been answered with the above response. Just note that Phase 2 has started in parallel to the Phase-1 efforts. Phase 2 is not delayed or otherwise impaired by Phase-1 efforts — on the contrary, it benefits from the thinking w.r.t. the concrete API we want to offer.
@jordan, I fully agree that this is technically possible without doubt. @Roman’s main concern is that Phase 1 and Phase 2 have different trust models and switching the main ckETH implementation from one to the other is, at least theoretically, not very clean. It’s definitely something that deserves further discussion. We are currently pursuing Phase 1 and Phase 2 in parallel, according to the approach outlined above.
And, yes, ckETH should definitely be an ICRC1!
I think you have got the general idea correct here.
@lastmjs: For context, you are referring to queries to the Ethereum interface here. In theory, this is possible as an IC node could just query its collocated Ethereum node in Phase 2. However, XNet queries are not available yet, so there are things that would need to be built to have this. And, you are right, query support for Ethereum would be really great, but there are currently still some blockers for it.
@ all: I hope that my argument for doing a Phase 1 now can appeal to everyone, as its adoption is left to the community in a completely decentralized way. We only help the community getting Phase 1 built. This does not dilute our efforts for Phase 2 and it helps a lot in sharpening the final API for Phase 2 as we need to think about it very concretely. Also having dapps build on Phase 1 will help detect any issues, e.g., with the API, early on and reduce delays and time to market for Phase 2.
Looking forward to hearing your opinions!