With the much anticipated upcoming launch of Eth2 phase 0, one of the key steps is for the community to decide upon a canonical deposit contract address to kickstart the genesis process. There is currently one instance of the deposit contract bytecode deployed anonymously on the mainnet at address 0x00000000219ab540356cbb839cbe05303d7705fa. Members of the Ethereum community are attempting to reach a social consensus about this contract address being the canonical address for Eth2 phases going forward. To the best of our knowledge, this is the first and only instance of the deposit contract bytecode currently on the Ethereum mainnet.
This article is an announcement of Status and Nimbus teams signaling support for the contract deployed at the above address to be the canonical deposit contract for Eth2. We arrived at this decision after independently verifying that the bytecode deployed at the contract address is exactly the same as what we could reproduce by compiling the contract’s Solidity source code in a local build.
We are publishing this important announcement to notify that we are joining other members of the Ethereum community to support the use of this Eth2 deposit contract address for the genesis process and beyond.
Independent Verification
The contract at the above address was created at timestamp Oct-14-2020 09:22:52 AM +UTC as per Etherscan by a transaction with hash 0xe75fb554e433e03763a1560646ee22dcb74e5274b34c5ad644e7c0f619a7e1d0. The contract source code has been verified on Etherscan where it notes that the contract was compiled using Solidity compiler version v0.6.11+commit.5ef660b1 and optimization enabled with 5000000 runs.
The following steps outline our verification process:
- We obtained the bytecode at this address on the Ethereum blockchain using the eth_getCode method (via Infura).
- We cloned the eth2.0-specs repository from https://github.com/ethereum/eth2.0-specs and followed the compilation instructions for the deposit contract.
- We downloaded Solidity compiler version v0.6.11+commit.5ef660b1 for Linux from here.
- We compiled deposit_contract.sol in the eth2.0-specs repository with this command: solc --optimize --optimize-runs 5000000 --metadata-literal --bin-runtime deposit_contract.sol which gave us the runtime bytecode for this contract.
- We compared the bytecode we obtained in Step (1) to the one in Step (4) and found them to be the same.
Conclusion
The critical Eth2 deposit contract (which was originally written in Vyper) was re-written in Solidity, reviewed by Solidity experts and then formally verified by Runtime Verification as explained in this blog post by Ethereum Foundation. It has now been deployed on the mainnet at address 0x00000000219ab540356cbb839cbe05303d7705fa.
Status and Nimbus teams support the contract deployed at this address to be the canonical deposit contract for Eth2.