Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- MASTER_INDEX: Last Updated 2026-03-06; status 59/59 contracts; add NEXT_STEPS_LIST, CONTRACT_NEXT_STEPS_LIST - docs/README, NEXT_STEPS_INDEX, 06-besu/MASTER_INDEX: Last Updated 2026-03-06 - Contract check script: 59 addresses (PMM, vault/reserve, CompliantFiatTokens); canonical CCIP/router - New docs: EXECUTION_CHECKLIST, NEXT_STEPS_LIST, DOTENV_AUDIT, ADDITIONAL_PATHS, deployer gas runbook, WEMIX_ACQUISITION_TABLED, etc. - Config: deployer-gas-routes, cro-wemix-swap-routes, routing-registry, token-mapping - Scripts: check-contracts-on-chain-138, check-pmm-pool-balances-chain138, deployer-gas-auto-route, acquire-cro-and-wemix-gas - Operator rule: operator-lan-access-check.mdc Made-with: Cursor
238 lines
10 KiB
Markdown
238 lines
10 KiB
Markdown
# Config-Ready Chains Completion Runbook (Gnosis, Cronos, Celo, Wemix)
|
||
|
||
**Last Updated:** 2026-03-06
|
||
**Status:** Active
|
||
**Purpose:** Complete CCIP bridge setup for chains that are "Config ready" so they become fully operational (✅). **Add Cronos and Wemix** by funding deployer gas (CRO, WEMIX), then deploying bridges and running complete-config.
|
||
|
||
---
|
||
|
||
## Overview
|
||
|
||
The following chains have **selectors and frontend config ready** but require deployment and configuration to enable bridging from ChainID 138:
|
||
|
||
| Chain | Chain ID | Selector (decimal) | Gas Token | Status |
|
||
|-------------|----------|------------------------|-----------|-------------|
|
||
| Gnosis Chain| 100 | 465200170687744372 | xDAI (0.1) | Config ready |
|
||
| Cronos | 25 | 1456215246176062136 | CRO (1) | Config ready |
|
||
| Celo | 42220 | 1346049177634351622 | CELO (0.1)| Config ready |
|
||
| Wemix | 1111 | 5142893604156789321 | WEMIX (0.4)| Config ready |
|
||
|
||
**Prerequisite:** Confirm [Chainlink CCIP supports](https://docs.chain.link/ccip/supported-networks) each chain. All four are supported.
|
||
|
||
### Quick: Add Cronos and Wemix
|
||
|
||
1. **Gas:** Deployer needs **~15 CRO** (Cronos) and **~0.4 WEMIX** (Wemix). Run from repo root: `./scripts/deployment/acquire-cro-and-wemix-gas.sh` for instructions and aggregator links.
|
||
2. **Env:** Copy Cronos and Wemix variables from `smom-dbis-138/docs/deployment/ENV_CONFIG_READY_CHAINS.example` into `smom-dbis-138/.env` (RPC, CCIP router, LINK, WETH9/WETH10).
|
||
3. **Deploy:** `cd smom-dbis-138 && ./scripts/deployment/deploy-bridges-config-ready-chains.sh cronos` then `.../deploy-bridges-config-ready-chains.sh wemix`. Set `CCIPWETH9_BRIDGE_CRONOS`, `CCIPWETH10_BRIDGE_CRONOS`, `CCIPWETH9_BRIDGE_WEMIX`, `CCIPWETH10_BRIDGE_WEMIX` in `.env` from script output.
|
||
4. **Complete:** `./scripts/deployment/complete-config-ready-chains.sh` to add 138↔Cronos and 138↔Wemix destinations.
|
||
5. **Fund LINK** on each new bridge (see Step 4 below).
|
||
|
||
---
|
||
|
||
## Preflight (RPC + Gas Balance)
|
||
|
||
Before deploying, ensure RPC URLs are set and deployer has native gas on each chain:
|
||
|
||
```bash
|
||
cd smom-dbis-138
|
||
./scripts/deployment/preflight-config-ready-chains.sh [gnosis|cronos|celo|wemix|all]
|
||
```
|
||
|
||
Fixes any RPC or balance issues before proceeding.
|
||
|
||
---
|
||
|
||
## Completion Steps (per chain)
|
||
|
||
For each of Gnosis, Cronos, Celo, and Wemix:
|
||
|
||
1. **Deploy** CCIPWETH9Bridge and CCIPWETH10Bridge on that chain.
|
||
2. **Configure Chain 138 → destination:** On Chain 138's WETH9/WETH10 bridges, call `addDestination(selector, receiverBridge)`.
|
||
3. **Configure destination → Chain 138:** On the new chain's bridges, call `addDestination(CHAIN138_SELECTOR, chain138Bridge)`.
|
||
4. **Fund** each new bridge with LINK for CCIP fees (recommended: 10 LINK per bridge).
|
||
|
||
---
|
||
|
||
## Step 1: Deploy bridges on Gnosis, Cronos, Celo, Wemix
|
||
|
||
**Operator one-time setup:** Copy the non-secret vars from `smom-dbis-138/docs/deployment/ENV_CONFIG_READY_CHAINS.example` into `smom-dbis-138/.env`. Ensure `PRIVATE_KEY` is set and the deployer has **native gas** on each chain (xDAI, CRO, CELO, WEMIX). Then run:
|
||
|
||
```bash
|
||
cd smom-dbis-138
|
||
# Test first (no on-chain tx)
|
||
DRY_RUN=1 ./scripts/deployment/deploy-bridges-config-ready-chains.sh cronos
|
||
SIMULATE=1 ./scripts/deployment/deploy-bridges-config-ready-chains.sh cronos # forge without --broadcast
|
||
|
||
# Deploy (preflight runs automatically)
|
||
./scripts/deployment/deploy-bridges-config-ready-chains.sh gnosis # or cronos | celo | wemix | all
|
||
```
|
||
|
||
Record the logged bridge addresses and set `CCIPWETH9_BRIDGE_GNOSIS`, `CCIPWETH10_BRIDGE_GNOSIS` (and CELO/WEMIX) in `.env`. Then run `./scripts/deployment/complete-config-ready-chains.sh` to add destinations.
|
||
|
||
For each chain you need:
|
||
|
||
- RPC URL
|
||
- CCIP Router address (from [CCIP directory](https://docs.chain.link/ccip/supported-networks))
|
||
- LINK token address (chain-specific)
|
||
- WETH9 and WETH10 addresses (chain-specific; example has WXDAI, WCELO, WWEMIX)
|
||
- Deployer private key with native gas token (xDAI for Gnosis, CELO for Celo, WEMIX for Wemix)
|
||
|
||
### Deploy command (per chain)
|
||
|
||
From `smom-dbis-138/`:
|
||
|
||
```bash
|
||
# Example: Gnosis Chain
|
||
export RPC_URL="https://rpc.gnosischain.com"
|
||
export CCIP_ROUTER_ADDRESS="<from CCIP directory>"
|
||
export LINK_TOKEN_ADDRESS="<Gnosis LINK address>"
|
||
export WETH9_ADDRESS="<Gnosis WETH9 or 0x0 to skip>"
|
||
export WETH10_ADDRESS="<Gnosis WETH10 or 0x0 to skip>"
|
||
export PRIVATE_KEY="0x..."
|
||
|
||
forge script script/deploy/bridge/DeployWETHBridges.s.sol:DeployWETHBridges \
|
||
--rpc-url "$RPC_URL" \
|
||
--broadcast \
|
||
-vvvv
|
||
```
|
||
|
||
Repeat for Cronos, Celo, and Wemix with their RPCs, routers, and LINK/WETH addresses. Record the deployed bridge addresses for Step 2 and Step 3.
|
||
|
||
### Environment variables (reference)
|
||
|
||
| Variable | Gnosis | Cronos | Celo | Wemix |
|
||
|----------|--------|--------|------|-------|
|
||
| RPC_URL | https://rpc.gnosischain.com | https://evm.cronos.org | https://forno.celo.org | https://api.wemix.com |
|
||
| Chain ID | 100 | 25 | 42220 | 1111 |
|
||
| CCIP Router | See CCIP directory | 0xE26B0A098D861d5C7d9434aD471c0572Ca6EAa67 | See CCIP directory | See CCIP directory |
|
||
| LINK token | See CCIP directory | 0x8c80A01F461f297Df7F9DA3A4f740D7297C8Ac85 | See CCIP directory | See CCIP directory |
|
||
| Gas token | xDAI (0.1) | CRO (1) | CELO (0.1) | WEMIX (0.4) |
|
||
|
||
---
|
||
|
||
## Step 2: Add destinations on Chain 138 bridges
|
||
|
||
On **Chain 138**, add each new chain as a destination so that users can bridge **from** Chain 138 **to** Gnosis/Celo/Wemix.
|
||
|
||
Required in `.env` (in `smom-dbis-138/`):
|
||
|
||
- `CCIPWETH9_BRIDGE_CHAIN138` – Chain 138 WETH9 bridge address
|
||
- `CCIPWETH10_BRIDGE_CHAIN138` – Chain 138 WETH10 bridge address
|
||
- `RPC_URL` or `RPC_URL_138` – Chain 138 RPC
|
||
- `PRIVATE_KEY` – admin key for Chain 138 bridges
|
||
|
||
Run the completion script (see below), or run manually:
|
||
|
||
```bash
|
||
# Decimal selectors (use these in cast)
|
||
GNOSIS_SELECTOR=465200170687744372
|
||
CELO_SELECTOR=1346049177634351622
|
||
WEMIX_SELECTOR=5142893604156789321
|
||
|
||
# Example: Add Gnosis WETH9 as destination on Chain 138 WETH9 bridge
|
||
cast send "$CCIPWETH9_BRIDGE_CHAIN138" "addDestination(uint64,address)" \
|
||
$GNOSIS_SELECTOR "$CCIPWETH9_BRIDGE_GNOSIS" \
|
||
--rpc-url "${RPC_URL_138:-$CHAIN138_RPC}" --private-key "$PRIVATE_KEY" --legacy
|
||
```
|
||
|
||
Repeat for WETH10, and for Celo and Wemix using their bridge addresses and selectors.
|
||
|
||
---
|
||
|
||
## Step 3: Add Chain 138 as destination on Gnosis/Celo/Wemix bridges
|
||
|
||
On **each** of Gnosis, Celo, and Wemix, configure their new bridges to accept messages **from** Chain 138 by adding Chain 138 as a destination.
|
||
|
||
You need the **Chain 138 CCIP chain selector** (from your CCIP Router on Chain 138 or from Chainlink). Set it in `.env` as `CHAIN138_SELECTOR` (decimal).
|
||
|
||
```bash
|
||
# Example: On Gnosis WETH9 bridge, add Chain 138 WETH9 bridge as destination
|
||
cast send "$CCIPWETH9_BRIDGE_GNOSIS" "addDestination(uint64,address)" \
|
||
"$CHAIN138_SELECTOR" "$CCIPWETH9_BRIDGE_CHAIN138" \
|
||
--rpc-url "$GNOSIS_RPC" --private-key "$PRIVATE_KEY" --legacy
|
||
```
|
||
|
||
Repeat for WETH10 on Gnosis, and for both bridges on Celo and Wemix.
|
||
|
||
---
|
||
|
||
## Step 4: Fund bridges with LINK
|
||
|
||
Each bridge on Gnosis, Cronos, Celo, and Wemix must hold LINK to pay CCIP fees. Recommended: **10 LINK per bridge** for initial operations (20 LINK per chain for WETH9 + WETH10).
|
||
|
||
**Prerequisite:** The deployer must have LINK on each chain. Check balances first:
|
||
|
||
```bash
|
||
cd smom-dbis-138
|
||
./scripts/deployment/check-link-balance-config-ready-chains.sh all
|
||
```
|
||
|
||
If balances are insufficient, acquire LINK on each chain (bridge from mainnet or DEX), then run:
|
||
|
||
```bash
|
||
./scripts/deployment/fund-ccip-bridges-with-link.sh
|
||
```
|
||
|
||
Or fund manually per chain:
|
||
|
||
```bash
|
||
# Example: Fund Gnosis WETH9 bridge (amount in 18 decimals, 10 LINK)
|
||
cast send "$LINK_TOKEN_GNOSIS" "transfer(address,uint256)" \
|
||
"$CCIPWETH9_BRIDGE_GNOSIS" "10000000000000000000" \
|
||
--rpc-url "$GNOSIS_RPC" --private-key "$PRIVATE_KEY"
|
||
```
|
||
|
||
Repeat for WETH10 on each chain, and for Cronos, Celo, and Wemix using their LINK and RPC.
|
||
|
||
---
|
||
|
||
## Automated script
|
||
|
||
Use the completion script to add destinations and print exact commands for deployment and funding when addresses are missing.
|
||
|
||
**Deploy bridges first:** `smom-dbis-138/scripts/deployment/deploy-bridges-config-ready-chains.sh [gnosis|celo|wemix|all]` — requires per-chain RPC, CCIP_ROUTER_*, LINK_TOKEN_*, WETH9_*, WETH10_* in .env (see `smom-dbis-138/docs/deployment/ENV_CONFIG_READY_CHAINS.example`).
|
||
|
||
**Then configure destinations:** `smom-dbis-138/scripts/deployment/complete-config-ready-chains.sh`
|
||
|
||
**Usage:**
|
||
|
||
```bash
|
||
cd smom-dbis-138
|
||
source .env 2>/dev/null || true
|
||
|
||
# Configure only (requires bridge addresses in .env)
|
||
./scripts/deployment/complete-config-ready-chains.sh
|
||
|
||
# Dry run (print commands only)
|
||
DRY_RUN=1 ./scripts/deployment/complete-config-ready-chains.sh
|
||
```
|
||
|
||
**Required .env variables for full configuration:**
|
||
|
||
- Chain 138: `CCIPWETH9_BRIDGE_CHAIN138`, `CCIPWETH10_BRIDGE_CHAIN138`, `RPC_URL_138` (or `RPC_URL`/`CHAIN138_RPC` from loader), `PRIVATE_KEY`, `CHAIN138_SELECTOR`
|
||
- Gnosis: `CCIPWETH9_BRIDGE_GNOSIS`, `CCIPWETH10_BRIDGE_GNOSIS`, `GNOSIS_RPC`
|
||
- Celo: `CCIPWETH9_BRIDGE_CELO`, `CCIPWETH10_BRIDGE_CELO`, `CELO_RPC`
|
||
- Wemix: `CCIPWETH9_BRIDGE_WEMIX`, `CCIPWETH10_BRIDGE_WEMIX`, `WEMIX_RPC`
|
||
|
||
See `smom-dbis-138/docs/deployment/ENV_CONFIG_READY_CHAINS.example` for a full example.
|
||
|
||
---
|
||
|
||
## Verification
|
||
|
||
After completing all steps for a chain:
|
||
|
||
1. **Chain 138 → chain:** On Chain 138, call `getDestinationChains()` on WETH9/WETH10 bridges; the chain’s selector should appear.
|
||
2. **Chain → Chain 138:** On the remote chain, call `getDestinationChains()` on its bridges; `CHAIN138_SELECTOR` should appear.
|
||
3. **Test transfer:** Send a small amount (e.g. 0.001 WETH) from Chain 138 to the destination and confirm receipt.
|
||
|
||
---
|
||
|
||
## References
|
||
|
||
- [CCIP Chain Selectors](../../docs/11-references/CCIP_CHAIN_SELECTORS.md)
|
||
- [BRIDGE_CONFIGURATION.md](../../smom-dbis-138/docs/deployment/BRIDGE_CONFIGURATION.md)
|
||
- [BRIDGE_CHAINS_IMPLEMENTATION_COMPLETE.md](../../docs/11-references/BRIDGE_CHAINS_IMPLEMENTATION_COMPLETE.md)
|
||
- [CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md](../../docs/11-references/CHAINS_AND_PROTOCOLS_BRIDGE_INTEGRATION.md)
|
||
- [Chainlink CCIP supported networks](https://docs.chain.link/ccip/supported-networks)
|