Files
proxmox/docs/07-ccip/CCIP_SENDER_CONTRACT_REFERENCE.md
defiQUG 2a6d3cfc7f
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
Update submodule references and improve CI workflow
- 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
2026-03-24 22:50:52 -07:00

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.


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

  1. Access Control: Only authorized addresses can send messages
  2. Fee Management: Ensure sufficient LINK tokens for fees
  3. Destination Validation: Verify destination chain selectors are correct
  4. Message Validation: Validate message data before sending


  • 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