Token Transfer
Transfer tokens cross-chain in four steps: verify token support, estimate fees, send, and track.
| Step | Command | Purpose |
|---|---|---|
| 1. Verify | get-supported-tokens | Check token support on the lane |
| 2. Estimate | send --only-get-fee | Get fee quote |
| 3. Send | send --transfer-tokens | Execute transfer |
| 4. Track | show | Monitor execution |
You need RPC endpoints and a wallet configured. See Configuration.
Step 1: Verify Token Support
Check that your token is supported on the lane:
ccip-cli get-supported-tokens \
-n ethereum-testnet-sepolia \
-a 0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59
Select a token to see its configuration, including rate limits and available capacity per destination. You can also query a specific token directly with -t <token-address>.
Step 2: Estimate Fee
ccip-cli send \
-s ethereum-testnet-sepolia \
-r 0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59 \
-d ethereum-testnet-sepolia-arbitrum-1 \
--to 0xReceiverAddress \
-t 0xFd57b4ddBf88a4e07fF4e34C487b99af2Fe82a05=1.0 \
--only-get-fee
Add --fee-token LINK to get the fee in LINK instead of native token.
Step 3: Send Transfer
EVM to EVM
ccip-cli send \
-s ethereum-testnet-sepolia \
-r 0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59 \
-d ethereum-testnet-sepolia-arbitrum-1 \
--to 0xReceiverAddress \
-t 0xFd57b4ddBf88a4e07fF4e34C487b99af2Fe82a05=1.0 \
--wallet ledger
EVM to Solana
ccip-cli send \
-s ethereum-testnet-sepolia \
-r 0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59 \
-d solana-devnet \
--to <SOLANA_PROGRAM_ADDRESS> \
--token-receiver <SOLANA_TOKEN_ACCOUNT> \
--account <ACCOUNT_1> \
--account <ACCOUNT_2>=rw \
-t 0xToken=1.0 \
--wallet ledger
Solana to EVM
ccip-cli send \
-s solana-devnet \
-r <SOLANA_ROUTER> \
-d ethereum-testnet-sepolia \
--to 0xEvmAddress \
-t <SPL_TOKEN_MINT>=1.0 \
--wallet ledger
EVM to Sui
ccip-cli send \
-s ethereum-testnet-sepolia \
-r 0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59 \
-d sui-testnet \
--to 0xSuiReceiverAddress \
--account 0xObjectId1 \
--account 0xObjectId2 \
-t 0xToken=1.0 \
--wallet ledger
See the send command reference for all options: token amount format, 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 4: Track Transfer
ccip-cli show 0xTransactionHash
Add --wait to block until execution completes. You can also include --wait in the send command itself.
Troubleshooting
| Issue | Solution |
|---|---|
| Transfer stuck | Rate limiter may be depleted — wait for refill or reduce amount |
| Execution failed | Retry with manual-exec --gas-limit |
| Token not supported | Verify with get-supported-tokens |
See Debugging Failed Messages for the full debugging workflow.
Related
- send — Full command reference
- Transfer Data — Data-only transfers
- Transfer Tokens and Data — Programmable token transfers
- get-supported-tokens — Token discovery command