Repository created to be equivalent of Optimism SuperchainOps, but for Celo Mainnet
For a detailed explanation of the purpose of this tool, the smart contracts involved, and the upgrade process, please see PURPOSE.md.
This repository uses Mise to manage dependencies (forge, just, go, etc.) without affecting your system installations.
# 1. Install and activate Mise
./scripts/install-mise.sh
# Follow the output instructions to activate mise in your shell, then restart terminal
# 2. Install dependencies
mise trust
mise install
just install-eip712sign
# 3. Configure environment
cp .env.sample .env
# Edit .env and set RPC_URL to an Ethereum mainnet RPC endpointDetailed Mise Setup Instructions
After running ./scripts/install-mise.sh, you'll see instructions like:
echo "eval \"\$(~/.local/bin/mise activate zsh)\"" >> ~/.zshrcFollow these instructions for your shell, then restart your terminal or run source ~/.zshrc.
The Jovian upgrade (v4 + v5 + succ-v2) has been executed on mainnet. The next standalone proposal re-registers a new OPSuccinctFaultDisputeGame implementation for game type 42.
| Version | Description | Source |
|---|---|---|
| succ-v201 | Register new OPSuccinctFaultDisputeGame on DisputeGameFactory (game type 42) | Currently in a private repository for a GHSA, contact us to get added to that repository. |
Previous upgrades (executed): v2, v3 (Isthmus), succ-v1 (OpSuccinct v1.0.0), succ-v102 (OpSuccinct v1.0.2), v4, v5, and succ-v2.
A single governance proposal executed via the parent multisig:
- succ-v201: Multicall3 batch that calls
setImplementation(42, impl)on DisputeGameFactory — registers the newOPSuccinctFaultDisputeGameat0xA35d2A7F365b42EcFCB7Db9240c3973Fc8e65139.
See addresses/mainnet/09-succ-v201.json for the deployed contract address and upgrades/mainnet/09-succ-v201.json for the calldata.
Sign with sign_ledger:
just sign_ledger succ-v201 <team> <ledger_app> [account_index] [grand_child]This produces out.json — send it to the facilitator.
# Council team, Ethereum app, default account
just sign_ledger succ-v201 council eth
# cLabs team, Ethereum app, account index 1
just sign_ledger succ-v201 clabs eth 1
# Council team with nested multisig (e.g. Mento)
just sign_ledger succ-v201 council eth 0 0xMentoMultisigAddress# Show all simulation links
just simulate
# Show a specific version
just simulate succ-v201| Version | Tenderly Simulation |
|---|---|
| succ-v201 | View on Tenderly |
Historical executed-upgrade simulations (v4, v5, succ-v2) remain registered in justfile for reference.
# Decode succ-v201 calldata (Multicall3 aggregate3)
cast calldata-decode "aggregate3((address,bool,bytes)[])" \
$(jq -r '.calldata' upgrades/mainnet/09-succ-v201.json)succ-v201 should be verified on Sepolia prior to mainnet signing.
The Celo Ledger app does not support signing EIP-712 typed data. Use the "Eth Recovery" app instead:
- Open Ledger Live → Settings → Experimental Features → Developer Mode
- My Ledger → Search "Eth Recovery" → Install
- Open the Eth Recovery app on your Ledger before signing
just sign_ledger succ-v201 clabs celo 1sign_ledger - Sign a single version
just sign_ledger <version> <team> <ledger_app> [account_index] [grand_child]| Parameter | Options | Default | Description |
|---|---|---|---|
version |
v2, v3, v4, v5, succ-v1, succ-v102, succ-v2, succ-v201 |
- | Upgrade version |
team |
clabs, council |
- | Your team |
ledger_app |
eth, celo |
- | Ledger app |
account_index |
0, 1, 2... |
0 |
Account index |
grand_child |
0x... |
- | Nested multisig address |
Derivation paths:
eth:m/44'/60'/<index>'/0/0celo:m/44'/52752'/<index>'/0/0
sign - Custom HD path variant
just sign <version> <team> [hd_path] [grand_child]For advanced users needing non-standard derivation paths.
- Signers → Run
just sign_ledger succ-v201 <team> <ledger_app>and sendout.jsonto the facilitator - Facilitator → Collects signatures and performs child multisig approvals (cLabs + Security Council)
- Child Multisigs → Approve execution on the parent multisig
- Parent Multisig → Executes the succ-v201 transaction