# T1.2 Bridge Resolution - Phase 3 Execution Plan **Last Updated:** 2026-01-31 **Document Version:** 1.0 **Status:** Active Documentation --- **Date**: 2026-01-18 **Status**: 📋 **READY FOR EXECUTION** **Prerequisites**: Admin private key, Foundry installed, RPC access --- ## 📊 Extracted State (Phase 3.1 & 3.3 Complete) ### Bridge Configuration Parameters **Common Values** (both bridges): - **Admin**: `0x4A666F96fC8764181194447A7dFdb7d471b301C8` - **CCIP Router**: `0x99b3511a2d315a497c8112c1fdd8d508d4b1e506` - **Fee Token (LINK)**: `0x514910771AF9Ca656af840dff83E8264EcF986CA` (expected - verify) **WETH9 Bridge**: - **WETH9 Token**: `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` **WETH10 Bridge**: - **WETH10 Token**: `0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f` ### Mainnet Bridge Addresses (for configuration) - **WETH9 Bridge (Mainnet)**: `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` - **WETH10 Bridge (Mainnet)**: `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` --- ## 🚀 Phase 3 Execution Steps ### Step 1: Prepare Deployment Environment ```bash # Set environment variables export RPC_URL="http://192.168.11.211:8545" # or http://192.168.11.250:8545 export PRIVATE_KEY="0x..." # Admin private key export CCIP_ROUTER="0x99b3511a2d315a497c8112c1fdd8d508d4b1e506" export CCIP_FEE_TOKEN="0x514910771AF9Ca656af840dff83E8264EcF986CA" # Verify this # Verify access cast wallet address "$PRIVATE_KEY" # Should output: 0x4A666F96fC8764181194447A7dFdb7d471b301C8 ``` ### Step 2: Deploy WETH9 Bridge (Phase 3.2) ```bash cd smom-dbis-138 # Set bridge-specific variables export WETH9_ADDRESS="0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # Deploy using Foundry script forge script script/DeployCCIPWETH9Bridge.s.sol:DeployCCIPWETH9Bridge \ --rpc-url "$RPC_URL" \ --broadcast \ --private-key "$PRIVATE_KEY" \ -vvvv # Save new bridge address (will be printed) # Example: NEW_WETH9_BRIDGE="0x..." # Save this! ``` **Verification**: ```bash # Check code size (should be ~15,041 bytes, similar to Mainnet) cast code "$NEW_WETH9_BRIDGE" --rpc-url "$RPC_URL" | wc -c # Verify admin cast call "$NEW_WETH9_BRIDGE" "admin()(address)" --rpc-url "$RPC_URL" # Should return: 0x4A666F96fC8764181194447A7dFdb7d471b301C8 # Verify functions exist cast 4byte "addDestination(uint64,address)" # Should return selector cast 4byte "getDestinationChains()(uint64[])" # Should return selector ``` ### Step 3: Deploy WETH10 Bridge (Phase 3.2) ```bash # Set bridge-specific variables export WETH10_ADDRESS="0xf4BB2e28688e89fCcE3c0580D37d36A7672E8A9f" # Deploy using Foundry script forge script script/DeployCCIPWETH10Bridge.s.sol:DeployCCIPWETH10Bridge \ --rpc-url "$RPC_URL" \ --broadcast \ --private-key "$PRIVATE_KEY" \ -vvvv # Save new bridge address (will be printed) # Example: NEW_WETH10_BRIDGE="0x..." # Save this! ``` **Verification**: Same as WETH9 bridge above ### Step 4: Configure WETH9 Bridge Destination (Phase 3.4) ```bash # Add Mainnet as destination cast send "$NEW_WETH9_BRIDGE" \ "addDestination(uint64,address)" \ 5009297550715157269 \ 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 \ --rpc-url "$RPC_URL" \ --private-key "$PRIVATE_KEY" # Verify configuration cast call "$NEW_WETH9_BRIDGE" \ "getDestinationChains()(uint64[])" \ --rpc-url "$RPC_URL" # Expected: [5009297550715157269] ``` ### Step 5: Configure WETH10 Bridge Destination (Phase 3.4) ```bash # Add Mainnet as destination cast send "$NEW_WETH10_BRIDGE" \ "addDestination(uint64,address)" \ 5009297550715157269 \ 0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e \ --rpc-url "$RPC_URL" \ --private-key "$PRIVATE_KEY" # Verify configuration cast call "$NEW_WETH10_BRIDGE" \ "getDestinationChains()(uint64[])" \ --rpc-url "$RPC_URL" # Expected: [5009297550715157269] ``` ### Step 6: Test Bidirectional Configuration (Phase 3.5) #### Test Mainnet → ChainID 138 (should already work) ```bash # On Mainnet cast call 0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6 \ "getDestinationChains()(uint64[])" \ --rpc-url https://eth.llamarpc.com # Should show ChainID 138 selector if configured ``` #### Test ChainID 138 → Mainnet (newly enabled) ```bash # Use wrap-and-bridge script with new bridge address # Update bridge address in script to $NEW_WETH9_BRIDGE ./scripts/wrap-and-bridge-weth9-to-mainnet.sh 0.001 # Monitor transaction and CCIP message processing ``` ### Step 7: Update All References (Phase 3.6) **Files to Update**: 1. Environment files (`.env`) 2. Deployment documentation 3. Configuration scripts 4. Integration code **Old Addresses**: - WETH9 Bridge: `0x3304b747E565a97ec8AC220b0B6A1f6ffDB837e6` - WETH10 Bridge: `0x8078A09637e47Fa5Ed34F626046Ea2094a5CDE5e` **New Addresses**: (will be populated after deployment) - WETH9 Bridge: `TBD` - WETH10 Bridge: `TBD` --- ## 📋 Quick Reference Commands ### State Extraction ```bash ./scripts/phase3-extract-bridge-state.sh ``` ### Complete Deployment Script ```bash # Create and run comprehensive deployment script # (See scripts/phase3-deploy-bridges-complete.sh) ``` --- ## ⚠️ Important Notes 1. **Router Address**: `0x99b3511a2d315a497c8112c1fdd8d508d4b1e506` extracted from storage - **VERIFY** this is correct CCIP router 2. **Fee Token**: LINK address needs verification - check with CCIP router deployment records 3. **Old vs New Addresses**: Old bridges cannot be removed (deployed contracts), new addresses must be used going forward 4. **State Migration**: No state migration needed - old contracts had no destinations configured 5. **Breaking Change**: All integrations using old bridge addresses must be updated --- ## ✅ Success Criteria - [x] State extraction complete - [ ] New WETH9 bridge deployed with full interface - [ ] New WETH10 bridge deployed with full interface - [ ] Both bridges configured with Mainnet destination - [ ] Bidirectional tests pass - [ ] All references updated --- **Status**: 📋 **EXECUTION PLAN READY - AWAITING DEPLOYMENT** **Last Updated**: 2026-01-18