Files
proxmox/docs/07-ccip/CONFIG_READY_CHAINS_COMPLETION_RUNBOOK.md

238 lines
10 KiB
Markdown
Raw Normal View History

# 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 chains 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)