Skip to main content
This guide walks through verifying Celo L1 (Ethereum) smart contracts deployment. It contains steps to verify contracts in the packages/contracts-bedrock folder. L2 (Celo) contracts became available with the transition.

1. Prerequisites

  • Foundry Installed: Ensure you have Foundry installed and updated (via foundryup).
  • JQ Installed: jq cli tool for handling json files is required later.
  • API Key: Obtain an Etherscan (or corresponding block explorer) API key.

2. Verify Smart Contracts bytecode

Check that on chain bytecode correspond to compiled bytecode from smart contract release. Smart contract release is: https://github.com/celo-org/optimism/releases/tag/celo-contracts.L1%2Fv1.8.0—1 Clone the celo-org/optimism repository and checkout release tag
Enter the contract folder & compile contracts Navigate to the Contracts Folder
To verify contract, will compare onchain bytecode with compiled one using a script. For that, create scripts/compare_bytecode.sh with following content:
And make sure can be executed:
Then to verify each contract:

3. Verify Contract are correctly configured

Preliminary. On a terminal set up RPC and Etherscan variables:

3.1 ProxyAdmin is owned by SystemOwnerSafe

This mean every proxy is indirectly owned by SystemOwnerSafe

3.2 Check SystemConfigProxy is correctly configured

SystemConfigProxy is 0x89E31965D844a309231B1f17759Ccaf1b7c09861

3.3 Check SuperChainConfig correctly configured

CeloSuperChainConfig is 0xa440975E5A6BB19Bc3Bee901d909BB24b0f43D33

3.4 Bridge Contracts are correctly configured

Bridge Contracts:
  • L1CrossDomainMessengerProxy 0x1AC1181fc4e4F877963680587AEAa2C90D7EbB95
  • L1ERC721BridgeProxy 0x3C519816C5BdC0a0199147594F83feD4F5847f13
  • L1StandardBridgeProxy 0x9C4955b92F34148dbcfDCD82e9c9eCe5CF2badfe
  • OptimismPortalProxy 0xc5c5D157928BDBD2ACf6d0777626b6C75a9EAEDC
  • OptimismPortal2 0x3Da872782f9fB696fD72Af2ec9313a56bDA6f06d
Note: L1CrossDomainMessengerProxy is old kind of proxy that depends on AddressManager, it does not have an owner that can be queried.

4 Verify CELO L1 Token is correctly deployed

Start by checking on SystemConfig that customGasToken is enabled and pointing to CELO ERC20
Check the ERC20 has correct ownership and all supply is locked on the bridge

5. Verifying SecurityCouncil Configuration

Based on this forum post, tied to CGP-171; the security council is a 2/2 multisig whose members are a cLabsMultisig and “Celo Community Security Council”

5.1 Verify the SystemOwnerSafe multisig

During migration, this will be a 1/3 multisig, later becomes a 2/2. The third member is a cLabs managed account used during migraiton

5.2 Verify the cLabs Multisig

cLabs Multisig is a 6/8 multisig, and is a member of the SystemOwnerSafe multisig

5.3 Verify the Celo Community Security Council

Celo Community Security Council is a 6/8 multisig, and is a member of the SystemOwnerSafe multisig