- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control. - Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities. - Created .gitmodules to include OpenZeppelin contracts as a submodule. - Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment. - Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks. - Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring. - Created scripts for resource import and usage validation across non-US regions. - Added tests for CCIP error handling and integration to ensure robust functionality. - Included various new files and directories for the orchestration portal and deployment scripts.
3.1 KiB
3.1 KiB
Bridge Configuration Guide
Overview
After deploying CCIP WETH bridges on both Ethereum Mainnet and ChainID 138, you need to configure them to enable cross-chain transfers.
Prerequisites
-
Bridges deployed on both chains:
- Mainnet: CCIPWETH9Bridge and CCIPWETH10Bridge
- ChainID 138: CCIPWETH9Bridge and CCIPWETH10Bridge
-
Chain selectors:
- Ethereum Mainnet:
5009297550715157269 - ChainID 138: (to be determined from CCIP Router)
- Ethereum Mainnet:
-
Admin access to bridge contracts
Configuration Steps
Step 1: Get Chain Selectors
# Get ChainID 138 selector from CCIP Router
cast call $CCIP_ROUTER "getChainSelector()" --rpc-url $RPC_URL
# Ethereum Mainnet selector is known: 5009297550715157269
Step 2: Configure Mainnet Bridges
On Ethereum Mainnet, configure bridges to send to ChainID 138:
# Add ChainID 138 as destination for WETH9 bridge
cast send $MAINNET_WETH9_BRIDGE \
"addDestination(uint64,address)" \
$CHAIN138_SELECTOR \
$CHAIN138_WETH9_BRIDGE \
--rpc-url $MAINNET_RPC \
--private-key $MAINNET_PRIVATE_KEY
# Add ChainID 138 as destination for WETH10 bridge
cast send $MAINNET_WETH10_BRIDGE \
"addDestination(uint64,address)" \
$CHAIN138_SELECTOR \
$CHAIN138_WETH10_BRIDGE \
--rpc-url $MAINNET_RPC \
--private-key $MAINNET_PRIVATE_KEY
Step 3: Configure ChainID 138 Bridges
On ChainID 138, configure bridges to send to Mainnet:
# Add Mainnet as destination for WETH9 bridge
cast send $CHAIN138_WETH9_BRIDGE \
"addDestination(uint64,address)" \
$MAINNET_SELECTOR \
$MAINNET_WETH9_BRIDGE \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY
# Add Mainnet as destination for WETH10 bridge
cast send $CHAIN138_WETH10_BRIDGE \
"addDestination(uint64,address)" \
$MAINNET_SELECTOR \
$MAINNET_WETH10_BRIDGE \
--rpc-url $RPC_URL \
--private-key $PRIVATE_KEY
Step 4: Verify Configuration
# Check destinations on Mainnet bridge
cast call $MAINNET_WETH9_BRIDGE \
"destinations(uint64)" \
$CHAIN138_SELECTOR \
--rpc-url $MAINNET_RPC
# Check destinations on ChainID 138 bridge
cast call $CHAIN138_WETH9_BRIDGE \
"destinations(uint64)" \
$MAINNET_SELECTOR \
--rpc-url $RPC_URL
Gas Costs
Each addDestination call costs approximately:
- Gas: ~50,000 gas
- Cost at 30 gwei:
0.0015 ETH ($3.75) - Total for 4 calls:
0.006 ETH ($15)
Testing Cross-Chain Transfers
After configuration, test a cross-chain transfer:
# On Mainnet: Send WETH9 to ChainID 138
cast send $MAINNET_WETH9_BRIDGE \
"sendCrossChain(uint64,address,uint256)" \
$CHAIN138_SELECTOR \
$RECIPIENT_ADDRESS \
$AMOUNT \
--rpc-url $MAINNET_RPC \
--private-key $MAINNET_PRIVATE_KEY
Troubleshooting
Error: "destination not enabled"
- Ensure
addDestinationwas called successfully - Verify chain selector is correct
- Check bridge addresses are correct
Error: "insufficient fee"
- Ensure LINK token balance is sufficient
- Check fee calculation:
calculateFee(chainSelector, amount)
Error: "transfer failed"
- Ensure WETH balance is sufficient
- Check WETH approval for bridge contract