ICEVM - EVM support on the IC

I was a bit distracted during the presentation and had to drop due to another meeting, so I need to watch the replay. Dieter did an amazing job of showing the whole ecosystem of things that could be done and he eventually distilled it down to the least common implementation, but I think that it would be easy to miss the forest for the trees if this was your first time thinking about the problems.

I think there is a minimum viable implementation that gets you 80% of the way to a great solution and 100% to a ‘good enough’ solution. And by good enough here I mean giving the thousands of available solidity contracts in the public domain a place to run on the IC and the attention of 100x developers.

What is missing from the following list:

  1. Build the yellow paper opcodes into a canister. (it was mentioned that rust would be more performant, but I actually thought that motoko was faster for a number of things…I’d be interested in the comparison and performance concerns here).
  2. Save the state into a canister (ICDevs is sponsoring a bounty to build some of the necessary tools Bounty - EVM Witness Library) in eth format.
  3. Build an archive scheme similar to the ledger canister that pushes old state to archive canisters. (This could get a bit chippy with the need to update Merkle trees across canisters, but not an impossible thing to do.
  4. Add an endpoint to ICX proxy that will convert whatever the ETH rpc scheme is into canister calls.

I think the above gets you a deployable evm that can load and run existing smart contracts running on top of the IC security model instead of the PoW or upcoming PoS security model. It will be faster than Ethereum by a couple of orders of magnitude and really useful for a number of defi applications that interact with other evm chains.

I have been asked multiple times if projects could port their Solidity-based NFT project to the IC without making changes. This would enable that…and while it doesn’t use the full power of the IC it at least proves the use case.

To be blunt I was shocked that this functionality wasn’t available on day 1 the network was released. It would have made quite a splash.

If the community needs a way to make this profitable and attractive to devs to work on I think that Bounty - Bitcoin on the IC Reference Implementation may have some potential strategies on how to do so.


Even a MVP is a huge task and it’d take ~1 year according to previous Dfinity’s estimates, the complexity, time and cost required to build it are just one of the reason i’m skeptic about it: incentivizing newcomers to stick with what they know or straight up port over existing code might seem compelling but imo it would only hinder interoperability and create more problems to be solved down the line, which based on who you ask might be worth the increased adoption, something I also have doubts about as explained in my 3rd point, Polygon’s zkEVM is supposed to have 2k tps, which is more than 2x the current capacity of a subnet, while still benefitting from ETH’s decentralization and security.


IC EVM is here with