Skip to main content
Version: 1.1.1

Transfer Data

Send arbitrary data (messages) cross-chain: estimate fees, send, and track.

StepCommandPurpose
1. Estimatesend --only-get-feeGet fee quote
2. Sendsend --dataSend the message
3. TrackshowMonitor execution

You need RPC endpoints and a wallet configured. See Configuration.

Step 1: Estimate Fee

Bash
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

Bash
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

Bash
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

Bash
ccip-cli send \
-s ethereum-testnet-sepolia \
-r 0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59 \
-d sui-testnet \
--to 0xSuiReceiverAddress \
--account 0xObjectId1 \
--data "hello sui" \
--wallet ledger

Solana to EVM

Bash
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

Bash
ccip-cli show 0xTransactionHash

Add --wait to block until execution completes. You can also include --wait in the send command itself.

Troubleshooting

IssueSolution
Execution failedIncrease gas with manual-exec --gas-limit
Receiver revertsFix receiver contract, then re-execute with manual-exec

See Debugging Failed Messages for the full debugging workflow.