4.6 KiB
CCIP Receiver Requirements Documentation
Date: 2025-01-12
Network: ChainID 138
Overview
This document describes the requirements for receivers in CCIP (Cross-Chain Interoperability Protocol) transactions.
Receiver Types
EOA (Externally Owned Account)
Description: Standard Ethereum address controlled by a private key.
Requirements:
- ✅ No special interface required
- ✅ Can receive tokens directly
- ✅ Can receive native ETH
- ✅ Can receive ERC-20 tokens
Use Case: Simple token transfers to user wallets.
Example:
Receiver: 0x4A666F96fC8764181194447A7dFdb7d471b301C8
Type: EOA
Status: ✅ Ready
Contract Receiver
Description: Smart contract that receives CCIP messages.
Requirements:
- ⚠️ Must implement
ccipReceive()function - ⚠️ Must handle message data
- ⚠️ Must handle token transfers
- ⚠️ Must handle errors gracefully
Use Case: Automated processing of cross-chain messages.
EOA Receiver Requirements
Basic Requirements
- Valid Address: Must be a valid Ethereum address (20 bytes)
- No Code: Address must not have deployed bytecode (for EOA)
- Accessible: Address must be accessible on destination chain
Token Receipt
EOA receivers can receive:
- ✅ Native tokens (ETH, BNB, etc.)
- ✅ ERC-20 tokens (WETH9, WETH10, etc.)
- ✅ NFTs (if supported)
No Special Interface Required
EOA receivers do not need to implement any special interface. Tokens are transferred directly to the address.
Contract Receiver Requirements
Required Interface
Contract receivers must implement the ccipReceive() function:
function ccipReceive(
Client.Any2EVMMessage calldata message
) external {
// Process message
// Handle tokens
// Handle errors
}
Message Structure
struct Any2EVMMessage {
bytes32 messageId;
uint64 sourceChainSelector;
bytes sender;
bytes data;
EVMTokenAmount[] tokenAmounts;
}
Token Handling
Contract receivers must:
- Accept token transfers
- Process token amounts
- Handle multiple tokens (if applicable)
- Handle errors gracefully
Receiver Validation
Address Validation
Before bridging, validate receiver address:
- Format Check: Verify address is valid (20 bytes, hex format)
- Chain Check: Verify address exists on destination chain
- Type Check: Determine if EOA or contract
Validation Script
# Check if address is valid
cast --to-checksum-address <address>
# Check if address has code (contract)
cast code <address> --rpc-url <rpc_url>
# Check balance
cast balance <address> --rpc-url <rpc_url>
Current Receiver Configuration
Receiver Address
- Address:
0x4A666F96fC8764181194447A7dFdb7d471b301C8 - Type: EOA (Externally Owned Account)
- Status: ✅ Ready
Verification
Status: ✅ Complete (Task 68)
The receiver address has been verified as:
- Valid Ethereum address
- EOA (no contract code)
- Accessible on destination chains
Testing
Test Receiver with Small Amount
Status: ⏳ Pending (Task 69)
Procedure:
- Send small test amount (0.001 ETH or less)
- Verify receiver receives tokens
- Verify tokens are correct amount
- Verify tokens are correct type
Script: scripts/wrap-and-bridge-to-ethereum.sh 0.001
Best Practices
For EOA Receivers
- Verify Address: Double-check address before bridging
- Test First: Send small test amount first
- Keep Private Key Safe: Protect private key for receiver
For Contract Receivers
- Implement Interface: Ensure
ccipReceive()is implemented - Handle Errors: Implement error handling
- Test Thoroughly: Test with various message types
- Gas Optimization: Optimize gas usage
Troubleshooting
Receiver Not Receiving Tokens
Possible Causes:
- Invalid receiver address
- Receiver contract not implementing interface
- Message execution failed
- Network issues
Solutions:
- Verify receiver address
- Check message execution status
- Verify receiver contract (if applicable)
- Check network connectivity
Receiver Contract Errors
Possible Causes:
- Missing
ccipReceive()function - Incorrect function signature
- Insufficient gas
- Logic errors
Solutions:
- Verify interface implementation
- Check function signature
- Increase gas limit
- Review contract logic
Related Documentation
Last Updated: 2025-01-12