Chainlink Automation如何避免重复执行? 图 1
Chainlink Automation如何避免重复执行? · 图 1

解释链下模拟checkUpkeep、链上执行performUpkeep、checkData与performData,说明幂等、防抢跑和Gas限制。

Automation的check阶段只负责提出“现在可能需要执行”,真正的安全条件必须在perform阶段重查。

双阶段流程

节点通过eth_call模拟checkUpkeep,输入checkData,返回upkeepNeeded与performData。这个结果不会锁定链上状态,也不是一笔承诺。

先看结论

证据项规范结论
1checkUpkeep通常由Automation节点以eth_call方式链下模拟,返回upkeepNeeded和传给执行阶段的performData。
2performUpkeep是链上交易,必须重新检查关键条件,不能假设checkUpkeep之后状态未变化。
3合约应让performUpkeep幂等或安全失败,并限制performData解码、Gas消耗和可被他人抢先改变的状态。

performData

performUpkeep被发成链上交易时,其他交易可能已经改变余额、时间或任务标记。函数应重新判断,并让重复调用安全退出。

竞态条件

performData来自链下模拟,应限制长度并验证内容。不能让任意bytes直接决定受保护目标、收款人或高权限calldata。

客户端怎样实现

检查层需要留下的证据阻断条件
双阶段流程从Chainlink Documentation确认Chainlink Automation的checkUpkeep的正式定义,并保存网络、地址与读取时间定义或版本对不上时,不继续套用本文步骤
performData在原始返回、签名消息或交易指令中定位对应字段,不用界面缩写代替找不到原始值时,把结果标为未验证
竞态条件用Chainlink Automation Overview复核实现行为,特别记录可选扩展与权限主体实现与规范语义不一致时,按具体部署重新评审
Gas与注册构造一个失败样例,确认客户端会明确拒绝而不是静默修正失败仍被显示为成功时,停止上线并补充状态校验

记录Chainlink Automation upkeep时,把“输入快照”和“判断结果”分开。该主题的快照包含原始bytes、字段单位、对象地址、区块高度与Chainlink Documentation版本;结果注明通过的规则和仍未知的Gas与注册。这样即使Chainlink Automation的checkUpkeep随后变化,也能复现当时的结论。

Chainlink Automation upkeep的测试至少覆盖正常路径、缺少performData、提交前状态改变及客户端不支持当前版本。前几类验证竞态条件边界,最后一类确认产品不会删除字段或改走未经用户确认的回退路径。

规范和实现材料

来源用途
Chainlink Documentation正式接口、字段与规范语义
Chainlink Automation Overview实现路径、兼容性或安全边界

Chainlink Automation upkeep的资料访问口径为2026-07-17;遇到Draft状态、可升级部署或可变网络参数,应在后续复核日重新读取Chainlink Documentation。

Gas与注册

部署前测量最坏路径Gas,注册后监控余额、执行失败和registry版本。时间触发、日志触发与自定义逻辑的check接口并不完全相同。

仍需单独确认

注册类型、计费资产、网络支持与Gas限制会随Automation版本不同,部署前需核对当前registry。 相邻知识可继续对照Chainlink roundDataGas估算边界