Transfer Data
Send arbitrary data (messages) cross-chain: estimate fees, send, and track.
| Step | Command | Purpose |
|---|---|---|
| 1. Estimate | send --only-get-fee | Get fee quote |
| 2. Send | send --data | Send the message |
| 3. Track | show | Monitor execution |
You need RPC endpoints and a wallet configured. See Configuration.
Step 1: Estimate Fee
ccip-cli send \
-s ethereum-testnet-sepolia \
-r 0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59 \
-d ethereum-testnet-sepolia-arbitrum-1 \
--to 0xReceiverContract \
--data "hello world" \
--only-get-fee
Add --fee-token LINK to get the fee in LINK instead of native token.
Step 2: Send Message
EVM to EVM
ccip-cli send \
-s ethereum-testnet-sepolia \
-r 0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59 \
-d ethereum-testnet-sepolia-arbitrum-1 \
--to 0xReceiverContract \
--data "hello world" \
--wallet ledger
To process the message and act on the data, the receiver must implement ccipReceive(Client.Any2EVMMessage). EOAs can also be receivers: the OffRamp detects the EOA and skips the ccipReceive callback entirely, marking the message as executed. The sent data can still be queried via the CCIP API or explorer.
EVM to Solana
ccip-cli send \
-s ethereum-testnet-sepolia \
-r 0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59 \
-d solana-devnet \
--to <SOLANA_PROGRAM_ADDRESS> \
--account <ACCOUNT_1> \
--account <ACCOUNT_2>=rw \
--data "hello solana" \
--wallet ledger
EVM to Sui
ccip-cli send \
-s ethereum-testnet-sepolia \
-r 0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59 \
-d sui-testnet \
--to 0xSuiReceiverAddress \
--account 0xObjectId1 \
--data "hello sui" \
--wallet ledger
Solana to EVM
ccip-cli send \
-s solana-devnet \
-r <SOLANA_ROUTER> \
-d ethereum-testnet-sepolia \
--to 0xReceiverContract \
--data "hello evm" \
--wallet ledger
See the send command reference for all options: gas limit behavior, lane-specific parameters, and extra args. Extra args like blockConfirmations and ccvs (encoded as GenericExtraArgsV3) require CCIP v2+ lanes — check your lane version in the CCIP Directory.
Step 3: Track Message
ccip-cli show 0xTransactionHash
Add --wait to block until execution completes. You can also include --wait in the send command itself.
Troubleshooting
| Issue | Solution |
|---|---|
| Execution failed | Increase gas with manual-exec --gas-limit |
| Receiver reverts | Fix receiver contract, then re-execute with manual-exec |
See Debugging Failed Messages for the full debugging workflow.
Related
- send — Full command reference
- Token Transfer — Transfer tokens
- Transfer Tokens and Data — Programmable token transfers