跳到正文
← 使用教程

CCIP源交易成功但目标未完成:核消息状态与手工执行前提

链小知 · 进阶 · 核验 · 依官方文档整理

从已有CCIP 2.0消息回执定位验证、索引或执行阶段,区分外层交易成功与消息SUCCESS。

开始前准备

  • 准备已有脱敏配置、错误或回执记录,保留网络、对象身份、版本及时间;缺项标待核。
  • 仅阅读公开文档和已有记录,不登录、安装、调用RPC/API、获取报价、签名、部署、转账或重试业务。

1. 把源链发送与目标交付分开

CCIP 2.0依次发送、验证、索引和目标执行。原CCIPMessageSent与源交易成功仅证明发送阶段,不能据此把目标Token到账或接收回调记为完成。

源交易可能包含多个消息,需保留原日志所对应messageId、目标链及OffRamp,避免拿同一交易hash下另一条消息的状态对账。

检查结果:有具体messageId对应的源事件和目标状态记录。

2. 区分未执行与已失败

UNTOUCHED表示目标链尚未执行,可来自未选执行器、Indexer缺数据或服务重试窗口结束等;FAILURE表示执行尝试在OffRamp保护路径内失败,原因需要读错误。

手工执行在2.0不要求原发送者/接收者身份,但仍须正确encodedMessage、所有必需证明及目标链Gas。本教程只核前提,不提交手工执行。

检查结果:未执行/已尝试失败/成功分列,未把UNTOUCHED当资产丢失。

3. 按错误定位验证、Token处理或回调

RequiredCCVMissing或版本解析失败属证明/配置层;TokenHandlingError可能是Token Pool、代币条件或rate limit,不能靠提高回调Gas修复。

ReceiverError空数据可能是回调Gas不足,非空数据常指接收逻辑错误,仍需原trace证实。NotEnoughGasForCall等可能需要外层交易Gas;gasLimitOverride只改变ccipReceive预算,不等于整笔交易预算。

检查结果:错误层级与已有trace对应,未把所有失败归为Gas不足。

4. 拆开已付服务费与再次执行Gas

CCIP费用可包含执行器、CCV、Token Pool和网络费;源链收费可能有在feeToken上追加与从转移代币中扣除两种方式,不能仅看净到账相差就认定少币。

原用户指定回调gasLimit按预算收费,未用Gas不退;手工执行目标链Gas由提交账户支付,文档明确不由Chainlink Labs报销。没有当次费记录时不填固定费用或退款金额。

检查结果:服务费组成、附加/扣减方式和目标手工Gas付款方分列。

5. 以消息执行状态及目标效果核完成

外层交易receipt status=1仍可能在OffRamp记录FAILURE;要对照已有getExecutionState/ExecutionStateChanged记录。SUCCESS后消息不能再执行;再次失败可能以NoStateProgressMade外层回滚,原消息仍为FAILURE。

将消息成功、目标Token余额变化和接收合约业务完成各列证据;只完成其中一层时不推广为全部业务完成,也不为补证重新广播。

检查结果:外层回执、消息状态和最终业务效果分开,重复执行风险可识别。

怎样确认完成

  • 形成条件、费用、执行阶段与未证实项的核对记录。
  • 本教程仅documentation;未验收实际配置、服务可用性或资金交付。

常见错误与边界

  • 本教程仅覆盖CCIP 2.0的EVM目标OffRamp路径,不套用其他目标链或旧版手工证明。
  • SUCCESS不可重执行;外层交易成功不代表消息成功。

本教程根据官方资料整理,尚未完成逐步操作验收。界面、支持范围及费用变化时,先核对官方说明。 纯文本版 · 提交纠错依据