Foreshock
EN 订阅
文档

概念

信号的生命周期

三个进行中的状态、三个终态,以及最常被误读成「没事了」的那两个终态。

更新于
2026-08-24

一条执法事件与你某个地址之间的匹配带有状态。调用方要据以行动的就是这个状态。

进行中的状态

出现在每条匹配的 stage 上,以及 exposure.match webhook 里。

状态对调用方意味着什么
PROPOSED事件存在且尚未执行。视为进行中,开始对该匹配地址拒收入金。
CONFIRMING事件正在向执行推进。
EXECUTED事件已被执行。

PROPOSED 不是传闻,也不是预测,它是对链上确实存在之物的观测。它不附带的,是关于你还有多少时间的任何承诺:从提出到执行的间隔是发行方治理结构的副产品,不是 Foreshock 提供的服务,发行方随时可以改变执行方式。把工作流设计成即使这个间隔为零也正确。

终态

离开活跃集的匹配,会通过 exposure.revoked webhook 以一个 RevocationStage 宣告,并从 GET /v1/exposure 的后续页中消失。

状态含义
REVOKED底层事件被撤回。
EXPIRED事件未在其配置窗口内执行。
STALE底层数据已不可信。

REVOKED 不等于无风险

撤销只陈述一件事:这条匹配不再在你的活跃匹配集里。它不陈述这个地址是安全的。被撤回的事件可以被重新提出。

移除永远作为独立事件宣告,绝不静默。这是刻意的,也正是这个 webhook 存在的理由:如果移除是静默的,你的本地名单会与我们的不一致,而你不会知道。把 exposure.revoked 当作一次要记录的状态变化,而不是当作释放你出于其他原因扣住的资金的许可。

STALE 不等于安全

STALE 意味着这条匹配背后的数据已经不可信——不是风险消失了。把受影响的作用域视为盲区而不是全清,并回退到更保守的策略,直到它恢复。

同一个读法适用于这个词出现的每一处。LIST_STALE 与 REGISTRY_ENTRY_STALE 是裁决路径上的降级 reason code,两者都产生 HOLD。陈旧的输入永远不会产生 CREDIT。

对账靠变更流,不靠 webhook

Webhook 投递是至少一次,一次投递可以失败重试 24 小时才进死信队列。你没收到的事件,不等于没发生的事件。

带上你最后一个游标调 GET /v1/exposure,才是权威的对账路径。不论 webhook 是否健康都按计划跑它,接收端有过宕机之后也再跑一遍。