Skip to main content
Version: 0.96.0

Debugging Failed Messages

Debug failed or stuck CCIP messages using a three-step workflow: track the message status, diagnose the error, and manually execute with corrected parameters.

Workflow

StepCommandPurpose
1. Trackccip-cli showCheck message status and identify failures
2. Diagnoseccip-cli parseDecode error data
3. Executeccip-cli manualExecRetry with corrected parameters

Prerequisites

Configure RPC endpoints for both source and destination chains:

Bash
.env
RPC_SEPOLIA=https://ethereum-sepolia-rpc.publicnode.com
RPC_ARB_SEPOLIA=https://arbitrum-sepolia-rpc.publicnode.com
USER_KEY=0xYourPrivateKeyHere

Step 1: Track the Message

Check message status with the transaction hash from the source chain:

Bash
ccip-cli show 0xYourTransactionHash

Output Interpretation

The output contains three sections: Request, Commit, and Receipts.

═══ Request ═══
Source: ethereum-testnet-sepolia
Destination: ethereum-testnet-sepolia-arbitrum-1
Message ID: 0xabc123...
Sender: 0x1234...
Receiver: 0x5678...

═══ Commit ═══
Commit Tx: 0xdef456...
Block: 12345678

═══ Receipts ═══
State: SUCCESS
Exec Tx: 0xghi789...
Gas Used: 150000

No action required.

Message States

StateDescriptionAction
UNTOUCHEDCommitted, not executedWait or manual execute
IN_PROGRESSExecution in progressWait
SUCCESSExecutedNone
FAILUREExecution failedDiagnose and retry

Step 2: Diagnose the Failure

Decode the error data from the Receipts section:

Bash
ccip-cli parse 0x08c379a0000000000000000000000000...

Common Errors

Error output:

Panic: 0x11 (Arithmetic overflow/underflow)

Or execution fails with empty return data.

Cause: Receiver contract exceeded gas limit.

Fix: Increase gas limit in manual execution:

Bash
ccip-cli manualExec 0xTxHash --gas-limit 500000 --wallet ledger

Step 3: Manual Execution

Execute the message manually after identifying and addressing the failure cause.

Basic execution

Bash
ccip-cli manualExec 0xYourTxHash --wallet ledger

With increased gas limit

Bash
ccip-cli manualExec 0xYourTxHash \
--gas-limit 500000 \
--wallet ledger

With auto-estimated gas

Estimate gas and add a percentage margin:

Bash
ccip-cli manualExec 0xYourTxHash \
--estimate-gas-limit 20 \
--wallet ledger

Execute sender queue

Process all pending messages from a sender in order:

Bash
ccip-cli manualExec 0xFirstTxHash \
--sender-queue \
--exec-failed \
--wallet ledger

Chain-Specific Behavior

Gas:

  • Default gas limit (~200k) may be insufficient for complex receivers
  • Use --estimate-gas-limit for automatic estimation
  • Token transfers require additional gas for pool operations

Finality:

  • Execution requires commit finalization
  • Finality times vary by chain

Example

Bash
# Check message status
ccip-cli show 0xafd36a0b99d5457e403c918194cb69cd070d991dcbadc99576acfce5020c0b6b

# Output shows State: FAILURE with Return Data: 0x08c379a0000000...

# Decode the error
ccip-cli parse 0x08c379a0000000...

# Output: Error: "Insufficient gas for receiver"

# Retry with higher gas limit
ccip-cli manualExec 0xafd36a0b99d5457e403c918194cb69cd070d991dcbadc99576acfce5020c0b6b \
--gas-limit 500000 \
--wallet ledger

# Verify execution
ccip-cli show 0xafd36a0b99d5457e403c918194cb69cd070d991dcbadc99576acfce5020c0b6b
# State: SUCCESS

Common Issues

IssueSolution
No RPC configured for chain XAdd RPC endpoint via --rpcs or .env
Message not foundVerify transaction hash and source chain RPC
Message not committed yetWait for DON to commit
Already executedMessage succeeded; no action needed
Wallet not configuredSet USER_KEY in .env or use --wallet