4.7 KiB
CCIP Chain Selector Calculation for ChainID 138
Date: 2025-01-27
Chain ID: 138
Network: DeFi Oracle Meta Mainnet
Automation: Run
scripts/ccip/calculate-chain-selector.shto compute or verify the Chain 138 selector.
Overview
CCIP chain selectors are unique identifiers used to route messages between chains in the Chainlink CCIP network. For ChainID 138, we need to calculate or define a chain selector that is consistent and unique.
Calculation Methods
Method 1: Simple ChainID (Recommended for Custom CCIP)
For custom CCIP router implementations, the simplest approach is to use the chain ID directly as the selector:
Chain Selector = Chain ID (as uint64)
Chain Selector = 138
Hex Format: 0x000000000000008a
Advantages:
- Simple and deterministic
- Easy to remember and verify
- Compatible with custom CCIP implementations
- No calculation required
Usage:
uint64 chainSelector = 138; // or 0x000000000000008a
Method 2: Chainlink Official Format
If integrating with Chainlink's official CCIP network, chain selectors are calculated using a deterministic hash-based method. The exact formula used by Chainlink is:
uint64(uint256(keccak256(abi.encodePacked(chainId, "CCIP"))) >> 192)
However, for custom chains not yet registered with Chainlink, you may need to:
- Register the chain with Chainlink
- Use Chainlink's assigned selector
- Or use a custom format for your implementation
Method 3: Deterministic Hash-Based
For a deterministic but more complex selector, you can use:
# Using cast (Foundry)
cast keccak "$(printf '0x%064x' 138)CCIP"
# Extract first 8 bytes (uint64) from the hash
Recommended Selector for ChainID 138
Selected Method: Method 1 (Simple ChainID)
Selector Value:
- Decimal:
138 - Hex:
0x000000000000008a - Type:
uint64
Rationale:
- Simple and deterministic
- Easy to verify and document
- Compatible with custom CCIP router implementation
- No external dependencies or calculations
Implementation
Environment Variable
CHAIN138_SELECTOR=0x000000000000008a
# Or simply:
CHAIN138_SELECTOR=138
In Solidity
uint64 constant CHAIN138_SELECTOR = 138;
// Or
uint64 constant CHAIN138_SELECTOR = 0x000000000000008a;
In Scripts
# Use the calculated selector
CHAIN138_SELECTOR=138
# Or hex format
CHAIN138_SELECTOR=0x000000000000008a
Usage in CCIP Configuration
Router Configuration
When configuring the CCIP Router to support ChainID 138:
router.addSupportedChain(138); // or 0x000000000000008a
Bridge Configuration
When configuring bridges to send to ChainID 138:
bridge.addDestination(138, receiverBridgeAddress);
Message Sending
When sending CCIP messages to ChainID 138:
router.ccipSend(138, message);
Verification
To verify the selector is correct:
- Uniqueness: Ensure no other chain uses selector
138 - Consistency: Use the same selector across all configurations
- Documentation: Document the selector in all relevant files
Verification Script
Run the calculation script to verify:
./scripts/ccip/calculate-chain-selector.sh
Integration with Other Chains
When configuring bidirectional bridges, ensure:
-
ChainID 138 → Ethereum Mainnet:
- Source selector:
138 - Destination selector:
5009297550715157269(Ethereum Mainnet)
- Source selector:
-
Ethereum Mainnet → ChainID 138:
- Source selector:
5009297550715157269 - Destination selector:
138
- Source selector:
Chain Selector Reference Table
| Network | Chain ID | CCIP Chain Selector |
|---|---|---|
| Ethereum Mainnet | 1 | 5009297550715157269 |
| BSC | 56 | 11344663589394136015 |
| Polygon | 137 | 4051577828743386545 |
| Avalanche | 43114 | 6433500567565415381 |
| Base | 8453 | 15971525489660198786 |
| Arbitrum | 42161 | 4949039107694359620 |
| Optimism | 10 | 3734403246176062136 |
| ChainID 138 | 138 | 138 (or 0x000000000000008a) |
Notes
- For custom CCIP implementations, you have flexibility in selector format
- The selector must be consistent across all contracts and configurations
- If integrating with Chainlink's official CCIP, you may need to register the chain
- The selector is used in all CCIP message routing and bridge configurations
Related Files
scripts/ccip/calculate-chain-selector.sh- Calculation scriptdocs/ETH_WETH_CHAINLINK_GUIDE.md- Main guide with selector referencedocs/deployment/ENV_EXAMPLE_CONTENT.md- Environment variable examples
Last Updated: 2025-01-27