CCIP Manual Execution
CCIP messages are eligible for manual execution if either of these conditions is met:
- Execution of the CCIP message on the destination blockchain has failed.
- The CCIP message timed out, with the current timeout threshold set at 8 hours. This scenario may arise during periods of extreme network congestion when CCIP cannot deliver the message within the allotted time frame.
The flowchart presented below provides a visual guide through the process of a cross-chain transaction, emphasizing the steps involved in the manual execution:
CCIP execution
-
A sender (a contract or EOA) initiates a CCIP message on the source blockchain.
-
CCIP Committing DON awaits finality on the source blockchain.
-
Post finality, the CCIP Committing DON assembles a batch of transactions, computes a Merkle root, and records it to the CommitStore contract on the destination blockchain.
-
Upon successful verification, the Risk Management Network blesses the committed Merkle root.
-
Once the committed Merkle root is blessed, the CCIP Executing DON proceeds with the execution on the destination blockchain:
- If the CCIP message is older than 8 hours (timeout), then the manual execution is enabled (further details are provided below).
- If the CCIP message is within the time frame, the Executing DON assesses and adjusts the gas price to ensure the transaction’s execution on the destination blockchain.
-
The execution on the destination blockchain works as follows:
- The CCIP initially determines whether the message involves token transfers. If affirmative, the tokens are transferred to the receiver to facilitate programmable transfers ahead of contract logic execution.
- For an EOA, the CCIP transaction is completed successfully.
- If the receiver is a contract, its ccipReceive function is invoked.
Note: The transaction is atomic, meaning that it will either fully succeed, with all steps completed, or fail entirely, with none of the steps taking effect. If the transaction fails, the manual execution is enabled (further details are provided below).
Manual execution
In instances where a transaction on the destination blockchain fails or a CCIP message times out, you can refer to procedure below. Note: Any account can manually execute a CCIP message that is eligible for manual execution, but the executing account must have sufficient native gas tokens (such as ETH on Ethereum or MATIC on Polygon) to cover the gas costs associated with the delivery of the CCIP message.
-
Use the CCIP explorer to retry the transaction execution on the destination blockchain manually. Note: Manual execution is expected to be available. If it is unavailable, please get in touch with Chainlink Labs Support for assistance.
-
Manual execution may be helpful under two scenarios:
- Insufficient gas limit: The gas limit set in the CCIP message is insufficient to call the receiver. Then, increase the gas limit.
- Receiver logic error: The failure was due to an implementation error in the receiver contract. Developers must fix the implementation and then deploy a new version. Note: This corrective measure only applies if the receiver contract is upgradeable and uses the proxy pattern. Non-upgradable contracts will not benefit from manual execution in this context.
-
Once the underlying issue has been addressed—such as by adjusting the gas limit—users can trigger the manual execution through the CCIP explorer.