- Update submodule references for explorer-monorepo and smom-dbis-138 to latest commits. - Modify CI workflow to include shellcheck installation and enforce error severity for script checks. - Update contract addresses in configuration and documentation to reflect the new canonical addresses for CCIPWETH9Bridge and CCIP Router. - Revise integration test documentation to align with updated contract addresses and deployment statuses. Made-with: Cursor
9.0 KiB
CCIP Sender Contract Reference
Last Updated: 2026-01-31
Document Version: 1.0
Status: Active Documentation
Contract Address: 0x105F8A15b819948a89153505762444Ee9f324684
Network: ChainID 138
RPC Endpoint (admin/deployment): Set RPC_URL_138 (e.g. http://192.168.11.211:8545 or https://rpc-core.d-bis.org)
Block Explorer: https://explorer.d-bis.org (Blockscout)
Contract Type: CCIP Sender (Cross-Chain Interoperability Protocol)
📋 Contract Overview
The CCIP Sender contract is part of the Chainlink CCIP (Cross-Chain Interoperability Protocol) infrastructure deployed on Chain 138. It handles the initiation and submission of cross-chain messages.
Purpose
- Initiates CCIP messages for cross-chain communication
- Handles message preparation and submission to the CCIP Router
- Manages cross-chain message flow from Chain 138 to destination chains
⚠️ Important: Dual Role Across Chains
On Chain 138 (Source Chain):
- Role: CCIP Sender contract
- Function: Initiates cross-chain transfers FROM Chain 138
On Destination Chains (BSC, Avalanche, Base, Arbitrum, Optimism):
- Role: CCIPWETH10Bridge contract
- Function: Receives and processes WETH10 tokens FROM Chain 138
- Address: Same address (
0x105f8a15b819948a89153505762444ee9f324684)
This is why this address appears in CCIP transfers - it's the destination bridge contract that receives tokens when bridging WETH10 from Chain 138 to other chains.
🔗 Related Contracts
CCIP Router
- Address:
0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817 - Relationship: The CCIP Sender interacts with the CCIP Router to send messages
- Fee Token:
0x514910771AF9Ca656af840dff83E8264EcF986CA(LINK) - Base Fee: 1000000000000000 wei
- Data Fee Per Byte: 100000000 wei
Bridge Contracts
- CCIPWETH9Bridge: Use env CCIPWETH9_BRIDGE_CHAIN138 or address
0xcacfd227A040002e49e2e01626363071324f820a. Deprecated (do not use):0x89dd12025bfCD38A168455A44B400e913ED33BE2— old bridge, router mismatch. See CONTRACT_INVENTORY_AND_VERIFICATION.md. - CCIPWETH10Bridge:
0xe0E93247376aa097dB308B92e6Ba36bA015535D0
📊 Contract Status
| Property | Value |
|---|---|
| Status | ✅ Deployed |
| Chain ID | 138 |
| Deployment Block | (Check Blockscout) |
| Verified | ⏳ Pending verification on Blockscout |
| Bytecode | Available (confirmed via RPC) |
⚠️ Important: Ethereum Mainnet Address is NOT Functional
On Ethereum Mainnet: The address 0x105F8A15b819948a89153505762444Ee9f324684 has empty bytecode (0x), meaning:
- ❌ No contract exists at this address on mainnet
- ❌ Not functional - cannot be used for any operations
- ❌ Not relevant for this project - ignore mainnet address entirely
On Chain 138: The same address has deployed contract bytecode (~5KB), meaning:
- ✅ The CCIP Sender contract is actively deployed and operational
- ✅ This is the only relevant address for this project
- ✅ Use this address for all Chain 138 operations
Why mention mainnet?
- The address appears on Etherscan because addresses can exist across all chains
- However, it has no functionality on mainnet - it's just an empty address
- Focus on Chain 138 only - that's where the contract is actually deployed and used
🔧 Configuration
For CCIP Monitor Service (VMID 3501)
The CCIP Sender contract is used by the CCIP Monitor service. Configuration in /opt/ccip-monitor/.env:
CCIP_ROUTER_ADDRESS=0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817
CCIP_SENDER_ADDRESS=0x105F8A15b819948a89153505762444Ee9f324684
RPC_URL_138=http://192.168.11.211:8545
CHAIN_ID=138
LINK_TOKEN_ADDRESS=0x514910771AF9Ca656af840dff83E8264EcF986CA
METRICS_PORT=8000
CHECK_INTERVAL=60
🔍 Contract Verification
Verify on Blockscout
To verify this contract on Blockscout (the explorer for Chain 138):
cd /home/intlc/projects/smom-dbis-138
# Verify using Foundry
forge verify-contract \
0x105F8A15b819948a89153505762444Ee9f324684 \
src/CCIPSender.sol:CCIPSender \
--chain-id 138 \
--verifier blockscout \
--verifier-url https://explorer.d-bis.org/api \
--rpc-url $RPC_URL_138
Contract Source Location
The source code should be in:
/home/intlc/projects/smom-dbis-138/src/CCIPSender.sol- Deployment script:
/home/intlc/projects/smom-dbis-138/script/DeployCCIPSender.s.sol
📡 Querying the Contract
Using Cast (Foundry)
# Get contract bytecode (set RPC_URL_138 in env)
cast code 0x105F8A15b819948a89153505762444Ee9f324684 \
--rpc-url $RPC_URL_138
# Get contract storage (slot 0)
cast storage 0x105F8A15b819948a89153505762444Ee9f324684 0 \
--rpc-url $RPC_URL_138
# Call a function (example - adjust based on actual ABI)
cast call 0x105F8A15b819948a89153505762444Ee9f324684 \
"router()(address)" \
--rpc-url $RPC_URL_138
Using Web3/ethers.js
const { ethers } = require("ethers");
const provider = new ethers.providers.JsonRpcProvider(process.env.RPC_URL_138 || "http://192.168.11.211:8545");
const contractAddress = "0x105F8A15b819948a89153505762444Ee9f324684";
// Example ABI (adjust based on actual contract)
const abi = [
"function router() view returns (address)",
"function sendMessage(uint64 destinationChainSelector, bytes data) payable returns (bytes32)"
];
const contract = new ethers.Contract(contractAddress, abi, provider);
// Call contract functions
const router = await contract.router();
console.log("CCIP Router:", router);
🌐 Cross-Chain Integration
Supported Destination Chains
The CCIP Sender can send messages to the following chains:
| Chain | Chain ID | Chain Selector | Status |
|---|---|---|---|
| BSC | 56 | 11344663589394136015 | ✅ Configured |
| Polygon | 137 | 4051577828743386545 | ✅ Configured |
| Avalanche | 43114 | 6433500567565415381 | ✅ Configured |
| Base | 8453 | 15971525489660198786 | ✅ Configured |
| Arbitrum | 42161 | (Check deployment) | ⏳ Pending |
| Optimism | 10 | (Check deployment) | ⏳ Pending |
Sending Cross-Chain Messages
// Example: Send a message to BSC
uint64 destinationChainSelector = 11344663589394136015; // BSC
bytes memory data = abi.encode(/* your data */);
// Approve LINK tokens for fees (if using LINK)
IERC20 linkToken = IERC20(0x514910771AF9Ca656af840dff83E8264EcF986CA);
linkToken.approve(routerAddress, feeAmount);
// Send message
bytes32 messageId = ccipSender.sendMessage(
destinationChainSelector,
data
);
📝 Events
The CCIP Sender contract emits events for monitoring. Key events include:
MessageSent Event
event MessageSent(
bytes32 indexed messageId,
uint64 indexed sourceChainSelector,
address sender,
bytes data,
address[] tokenAmounts,
address feeToken,
bytes extraArgs
);
Monitoring with CCIP Monitor Service
The CCIP Monitor service (VMID 3501) listens to these events and tracks:
- Message latency
- Message fees
- Success/failure rates
- Cross-chain message flow
🔐 Security Considerations
- Access Control: Only authorized addresses can send messages
- Fee Management: Ensure sufficient LINK tokens for fees
- Destination Validation: Verify destination chain selectors are correct
- Message Validation: Validate message data before sending
📚 Related Documentation
- Contract Addresses Reference — All contract addresses including CCIP and bridges; master list: config/smart-contracts-master.json
🔗 External Links
- Blockscout (Chain 138):
https://explorer.d-bis.org/address/0x105F8A15b819948a89153505762444Ee9f324684✅ Use this - Chainlink CCIP Documentation: https://docs.chain.link/ccip
- Source Project:
/home/intlc/projects/smom-dbis-138
⚠️ Network-Specific Usage
This contract is ONLY functional on Chain 138:
- Chain 138:
0x105F8A15b819948a89153505762444Ee9f324684✅ Deployed and operational - Ethereum Mainnet:
0x105F8A15b819948a89153505762444Ee9f324684❌ Not functional - ignore
Note: While the address exists on mainnet (with empty bytecode), it has no functionality there and is not relevant for this project. Only use this address on Chain 138.
📋 Quick Reference
# Contract Address
CCIP_SENDER=0x105F8A15b819948a89153505762444Ee9f324684
# Related Contracts
CCIP_ROUTER=0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817
LINK_TOKEN=0x514910771AF9Ca656af840dff83E8264EcF986CA
# RPC Endpoint (admin/deployment) — use standard RPC_URL_138
RPC_URL_138=http://192.168.11.211:8545
# or
RPC_URL_138=https://rpc-core.d-bis.org
# Block Explorer
EXPLORER_URL=https://explorer.d-bis.org/address/0x105F8A15b819948a89153505762444Ee9f324684
Last Updated: $(date)
Status: ✅ Contract deployed and operational on Chain 138