2026-02-10 11:32:49 -08:00
|
|
|
# CCIP Router Native ETH Support Check
|
|
|
|
|
|
|
|
|
|
**Date**: 2025-01-12
|
2026-03-24 22:49:29 -07:00
|
|
|
**Router**: `0x42DAb7b888Dd382bD5Adcf9E038dBF1fD03b4817`
|
2026-02-10 11:32:49 -08:00
|
|
|
**ChainID**: 138
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Summary
|
|
|
|
|
|
|
|
|
|
Comprehensive check to determine if the CCIP Router supports native ETH for fees instead of requiring LINK tokens.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Methods Tested
|
|
|
|
|
|
|
|
|
|
### Method 1: Fee Token Query
|
|
|
|
|
- **Method**: `getFeeToken()` / `feeToken()`
|
|
|
|
|
- **Result**: Returns `0x000000000000000000000000514910771af9ca65...`
|
|
|
|
|
- **Finding**: Router references Ethereum Mainnet LINK address, but contract doesn't exist on ChainID 138
|
|
|
|
|
|
|
|
|
|
### Method 2: getFee with address(0)
|
|
|
|
|
- **Method**: `getFee(uint64, bytes, address)` with `address(0)`
|
|
|
|
|
- **Result**: Method may not exist or doesn't accept address(0)
|
|
|
|
|
- **Finding**: Router may require explicit fee token parameter
|
|
|
|
|
|
|
|
|
|
### Method 3: Bytecode Analysis
|
|
|
|
|
- **Method**: Check router bytecode for payable functions
|
|
|
|
|
- **Result**: Router has payable functions (can accept ETH via msg.value)
|
|
|
|
|
- **Finding**: Router can receive native ETH, but may still require LINK for fees
|
|
|
|
|
|
|
|
|
|
### Method 4: Standard CCIP Behavior
|
|
|
|
|
- **Method**: Reference Chainlink CCIP documentation
|
|
|
|
|
- **Result**: Standard CCIP Routers typically support:
|
|
|
|
|
- LINK token for fees (preferred)
|
|
|
|
|
- Native ETH for fees (if configured)
|
|
|
|
|
- Both methods may be available
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Key Findings
|
|
|
|
|
|
|
|
|
|
### Router Configuration
|
|
|
|
|
- **Fee Token Reference**: `0x514910771AF9Ca656af840dff83E8264EcF986CA` (Ethereum Mainnet LINK)
|
|
|
|
|
- **Contract Status**: Token does NOT exist on ChainID 138
|
|
|
|
|
- **Router Status**: Operational, but cannot process fees without LINK token
|
|
|
|
|
|
|
|
|
|
### Native ETH Support
|
|
|
|
|
- **Payable Functions**: ✅ Router has payable functions (can receive ETH)
|
|
|
|
|
- **Fee Token Parameter**: Router expects fee token address
|
|
|
|
|
- **Native ETH via msg.value**: ⚠️ May be supported, but requires testing
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Standard CCIP Router Behavior
|
|
|
|
|
|
|
|
|
|
According to Chainlink CCIP documentation:
|
|
|
|
|
|
|
|
|
|
1. **LINK Token Fees** (Primary)
|
|
|
|
|
- Router uses LINK token for fees
|
|
|
|
|
- Fee token address configured in router
|
|
|
|
|
- Preferred method for cross-chain fees
|
|
|
|
|
|
|
|
|
|
2. **Native ETH Fees** (Alternative)
|
|
|
|
|
- Some routers support native ETH via `msg.value`
|
|
|
|
|
- Requires router configuration
|
|
|
|
|
- May be chain-specific
|
|
|
|
|
|
|
|
|
|
3. **Hybrid Support**
|
|
|
|
|
- Router may accept both LINK and native ETH
|
|
|
|
|
- Depends on router implementation
|
|
|
|
|
- Configuration determines which is used
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Testing Results
|
|
|
|
|
|
|
|
|
|
### Test 1: getFee() Default
|
|
|
|
|
```bash
|
|
|
|
|
cast call <ROUTER> "getFee(uint64,bytes)" <DEST_CHAIN> "0x" --rpc-url <RPC>
|
|
|
|
|
```
|
|
|
|
|
- **Result**: May return fee in default token (LINK or native)
|
|
|
|
|
|
|
|
|
|
### Test 2: getFee() with address(0)
|
|
|
|
|
```bash
|
|
|
|
|
cast call <ROUTER> "getFee(uint64,bytes,address)" <DEST_CHAIN> "0x" "0x0000..." --rpc-url <RPC>
|
|
|
|
|
```
|
|
|
|
|
- **Result**: Tests if router accepts address(0) as fee token
|
|
|
|
|
|
|
|
|
|
### Test 3: ccipSend() with msg.value
|
|
|
|
|
```bash
|
|
|
|
|
cast send <ROUTER> "ccipSend(...)" --value <amount> --rpc-url <RPC>
|
|
|
|
|
```
|
|
|
|
|
- **Result**: Tests if router accepts native ETH for fees
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Recommendations
|
|
|
|
|
|
|
|
|
|
### Option 1: Deploy LINK Token (Recommended)
|
|
|
|
|
- Deploy LINK token to ChainID 138
|
|
|
|
|
- Matches router configuration
|
|
|
|
|
- Standard CCIP approach
|
|
|
|
|
- Most compatible with CCIP infrastructure
|
|
|
|
|
|
|
|
|
|
### Option 2: Test Native ETH Support
|
|
|
|
|
- Attempt to send CCIP message with native ETH
|
|
|
|
|
- Use `msg.value` instead of LINK token
|
|
|
|
|
- May work if router is configured for native ETH
|
|
|
|
|
- Less standard but avoids LINK deployment
|
|
|
|
|
|
|
|
|
|
### Option 3: Update Router Configuration
|
|
|
|
|
- If router admin access available
|
|
|
|
|
- Update fee token to address(0) for native ETH
|
|
|
|
|
- Or deploy LINK and update router to use it
|
|
|
|
|
- Requires admin privileges
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Next Steps
|
|
|
|
|
|
|
|
|
|
1. **Test Native ETH**: Attempt a test CCIP send with native ETH
|
|
|
|
|
2. **Deploy LINK**: If native ETH doesn't work, deploy LINK token
|
|
|
|
|
3. **Check Router Admin**: See if router configuration can be updated
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
**Last Updated**: 2025-01-12
|
|
|
|
|
**Status**: ⚠️ Router configured for LINK, but token not deployed. Native ETH support uncertain.
|