As everyone knows now, Ethereum 2 phase 0 is imminent. One key step for this to happen is for the community to agree upon a canonical deposit contract address to kickstart the Genesis process.
In order to agree upon this, it requires numerous third parties to check the contract and confirm approval that everything is correct. The more third parties carry out this validation, the greater the confidence instilled in the community that the address is valid and correct.
This article represents Ankr’s approval of the contract address, resulting from our own verification carried out in accordance with the steps described by other community members.
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.0 deposit contract address for the genesis process and beyond.
In accordance with the same steps described by the Status and Nimbus teams in their own declaration of support, Ankr carried out these same steps for our validation process. Thanks to the Status and Nimbus projects for documenting the validation steps described below:
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.
- 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 and found them to be the same.
The critical Ethereum 2.0 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.