Skip to main content
Version: 1.0.0

manual-exec

Supported chain families:
EVM iconEVMSolana iconSolanaAptos iconAptos

Manually execute pending or failed CCIP messages on the destination chain.

Synopsis

Bash
ccip-cli manual-exec <tx-hash-or-id> [options]

Aliases: manualExec

Description

The manual-exec command allows you to manually trigger the execution of a CCIP message that is stuck or has failed. It accepts either a source transaction hash or a CCIP message ID (32-byte hex). When given a transaction hash, it retrieves the original request from the source chain, calculates the merkle proof, and fetches any required offchain data. When given a message ID (with --api enabled, the default), it fetches execution inputs directly from the CCIP API, removing the need for source chain RPC access. In both cases, it submits the execution transaction to the destination chain.

Arguments

ArgumentTypeRequiredDescription
<tx-hash-or-id>stringYesTransaction hash of the original CCIP request, or a CCIP message ID (32-byte hex)

Options

Message Selection

OptionTypeDefaultDescription
--log-indexnumber-Select a specific message by log index when multiple messages exist in one transaction

Gas Options

OptionAliasTypeDefaultDescription
--gas-limit-L, --compute-unitsnumber-Override gas limit for receiver callback. 0 keeps the original request value.
--tokens-gas-limit-number-Override gas limit for token pool releaseOrMint calls. 0 keeps original.
--estimate-gas-limit-number-Estimate gas limit with percentage margin (e.g., 10 for +10%). Conflicts with --gas-limit.

Wallet

OptionAliasTypeDescription
--wallet-wstringWallet for signing transactions. See Configuration.

Solana-Specific Options

OptionTypeDefaultDescription
--force-bufferboolean-Use buffer for messages too large for a single transaction.
--force-lookup-tableboolean-Create a lookup table for accounts to fit in transaction.
--clear-leftover-accountsboolean-Clear buffers or lookup tables from previous attempts.

Sui-Specific Options

OptionTypeDefaultDescription
--receiver-object-idsstring[]-Receiver object IDs for Sui execution (e.g., 0xabc...).

See Configuration for global options (--rpcs, --format, etc.).

Command Builder

Build your manual-exec command interactively:

Unknown command: manual-exec

Available commands: send, show, manual-exec

When to Use

Manual execution is needed when:

ScenarioDescription
Message stuck pendingDON hasn't executed it within expected timeframe
Previous execution failedNeed to retry with different gas parameters
Out-of-order execution blockedEarlier message in sender queue failed

Examples

Execute by transaction hash

Bash
ccip-cli manual-exec 0xafd36a0b99d5457e403c918194cb69cd070d991dcbadc99576acfce5020c0b6b \
--rpc https://eth-sepolia.example.com \
--rpc https://arb-sepolia.example.com \
--wallet ledger

Execute by message ID

When the CCIP API is available (default), you can pass a message ID instead of a transaction hash. This only requires a destination chain RPC:

Bash
ccip-cli manual-exec 0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef \
--rpc https://arb-sepolia.example.com \
--wallet ledger

Override gas limit

Bash
ccip-cli manual-exec 0xabc123... \
--gas-limit 500000 \
--wallet ledger

Estimate and apply gas limit with margin

Bash
ccip-cli manual-exec 0xabc123... \
--estimate-gas-limit 15 \
--wallet ledger

Solana execution with buffer

For large messages on Solana:

Bash
ccip-cli manual-exec 0xabc123... \
--wallet ledger \
--gas-limit 500000 \
--force-buffer \
--clear-leftover-accounts

Sui execution with receiver objects

For Sui destinations that require receiver object IDs:

Bash
ccip-cli manual-exec 0xabc123... \
--wallet ledger \
--receiver-object-ids 0xabc... 0xdef...

Execution Flow

When given a transaction hash:

  1. Fetches the original request from the source chain
  2. Retrieves the commit report (verifications) from the destination chain
  3. Optionally estimates gas limit (when --estimate-gas-limit is used)
  4. Builds execution input (calculates merkle proof, fetches offchain token data like CCTP attestations)
  5. Loads wallet and submits the execution transaction to the destination chain

When given a message ID (with --api enabled, the default):

  1. Fetches execution inputs (proofs, verifications, offchain token data) from the CCIP API
  2. Optionally estimates gas limit (when --estimate-gas-limit is used)
  3. Loads wallet and submits the execution transaction to the destination chain

The message ID path is simpler because it delegates proof calculation to the API, removing the need for source chain RPC access.

Solana Considerations

Solana transactions have size limits. For large messages:

StepOptionDescription
1--force-bufferSends report in chunks
2--force-lookup-tableCreates address lookup table for accounts
3--clear-leftover-accountsCleans up from aborted attempts

After successful execution, buffers auto-clear. Lookup tables require a grace period before deletion.

See Also

Exit Codes

CodeMeaning
0Success - execution transaction submitted
1Error (network failure, execution failed, invalid arguments)

Use in scripts:

Bash
ccip-cli manual-exec $TX_HASH --wallet ledger --format json || exit $?