Choosing the right gas override for a failed CCIP delivery

A CCIP message failed at the destination. Before retrying, distinguish a receiver callback that exhausted its allowance from an outer execution transaction that ran out of gas.

Read the failure at the destination

Inspect the message ID, its destination execution state and the failing frame. For the documented manual execution path, a callback override of zero retains the original allowance. A nonzero override must meet or exceed it. The local fixture uses an original allowance of 180,000 and shows why a request for 150,000 is invalid.

const original = 180000;
for (const override of [0, 150000, 250000])
  console.log(override === 0 ? original : override >= original ? override : "invalid");

Retry the existing message rather than issuing another business request

If the receiver exhausted its gas allowance, estimate the required callback budget against the current destination state. If the entire outer transaction ran out of gas, adjust that transaction’s budget instead. An application revert such as an unauthorized sender needs a different fix. Reconcile the same message ID after the retry; creating a new source message would introduce another operation to reconcile.

docs.chain.link CCIP manual execution