前震速报
已执行的冻结,以及重算每一条所需的全部信息
一份免费公开的记录,只收录已经生效的稳定币执法动作。每一条都附上执行它的那笔交易、计算时所用的口径版本,以及你能在自己节点上复现的摘要。公报只发已执行的动作;尚未执行的动作永远不会出现在这里,任何延迟都不会。
前置条件
第一条条目之前必须先存在什么
- 口径冻结到 v1.0
- 测量口径达到 v1.0 并停止变动。各部分分开标版本,端点定义与震级现在都已冻结在 v1.0。内容 schema 仍会拒绝任何引用候选(未冻结)版本的条目,因此这条前置条件依然由构建执行、不靠编辑记得——用未冻结口径算出的数字与下一个不可比,那正是这个项目想解决的问题。
- 验证器发布到可锁定的 tag
- 开源验证器发布到一个你能锁定并运行的 tag。复现某条条目的程序公开之前,那条条目不发布——这个顺序是刻意的,也不可颠倒。
- 一次执行达到终局并被独立重算
- 一次执法动作在其所在链声明的终局规则下达到终局,且它的重算结果在两个独立运营的节点上一致。一个节点上一致是结果,两个节点上一致才是测量。
发布政策
是约束,不是承诺
承诺是我们可以悄悄不再遵守的东西。下面每一条都被落实在编辑自觉之外的地方——内容 schema 里、构建里,或者数据本身的形状里。
- 只发已执行,由构建强制
- 一条条目只能描述已经在链上生效的动作。内容 schema 对阶段字段只接受一个取值,因此处于其他状态的条目在构建期就被拒绝,而不是等着某个人复核时发现。
- 尚未执行的事不做延迟发布
- 尚未执行的动作永远不在这里发布——延迟十分钟不行,延迟十天也不行。延迟不是缓解措施,它只是同一次发布加了一个计时器。动作一旦执行,就没有什么可逃的了,这正是回溯的这一侧可以公开、而另一侧不能公开的全部理由。
- 每条条目自带口径版本
- 条目会写明自己是在哪个口径版本下算出来的。改口径永远不会重写已发布的条目;重算后的数字作为一条新条目发布,并引用旧的那条。
- 更正是发布,不是删除
- 条目错了就原地更正为一个新修订,写明改了什么、为什么改,被取代的文本仍然可读。撤稿本身也是一条记录。没有任何东西会悄悄消失——会悄悄消失的记录不是记录。
- 24 小时冷却期,从我方复算时点起算
- 一条条目在我方完成复算之后至少 24 小时才发布——不是动作执行后 24 小时。计时从复算完成的那一刻开始,让口径、摘要与复核在被固定进记录之前有一段固定的沉淀期。schema 强制 recomputed_at 与 published 之间的间隔,处于冷却期内的条目会让构建失败。
条目格式
一条已发布条目携带的全部字段
这是完整字段集,不是它的摘要。这张表就是内容 schema:一个字段不出现在这里就不可能出现在条目里,而缺少必填字段的条目会让构建失败。
| 字段 | 类型 | 含义 |
|---|---|---|
| entry | FS-YYYY-NNNN | 条目编号。稳定、不重用,同一记录的两种语言版本使用同一个编号。 |
| lang | en | zh | 本文件是哪个语言版本。两个版本描述同一事件,携带同样的数字。 |
| title | string | 一句话说明生效了什么。仅作描述——公报不评价一次动作是否正当。 |
| stage | EXECUTED | 唯一允许的取值。不存在表示其他状态的字段,因此也就没有可以设错的地方。 |
| executed_at | date-time | 目标此后无法再转移该资产的那笔交易的区块时间戳。这是链上时间,不是我们的观测时间。 |
| initiated_at | date-time | null | verification.precursor_tx_ref 那笔交易所在区块的时间戳——同一条链上、指向同一目标的最早前置交易。它不是我们的观测时间:在任意节点上取回那笔交易、读它所在区块的时间,就得到这个字段。条目不带前置引用时该字段为 null,此时两者一同缺席:schema 拒收没有引用撑着的 initiated_at,也就不发布间隔。null 按 null 发布,既不省略,也不当作零。 |
| interval | derived | 派生字段,不入库:executed_at 减 initiated_at,取整到分钟。仅在两端都存在时给出。两端都是本条目所指名交易的区块时间戳,这个减法你自己就能重做,我们自己的时延不进入这个数字。 |
| magnitude | number 0–10 | null | 被冻结量占该资产自身链上供应量的对数刻度——是份额刻度,不是绝对规模。一位小数,落在 0–10 区间;测不到时为 null(非 EVM 链,或异常读取),绝不 clamp。因为它是「一条链上一个合约」的份额,取值受冻结机制粒度影响——按账户拆分的机制会把一次动作拆成好几条较低的记录。请连同旁边的绝对量一起看。已冻结 v1.0,定义见方法论页。 |
| immobilised | { units, decimals } | null | 被冻结的绝对数量,以 base units 加该资产的 decimals 表示——它就是震级所占份额的那个分子,也是份额刻度给不出的「有多少」。与震级并列展示。若该链的标准节点只提供最新态,这个数量就不是在执行区块读出的,而是由该资产合约自身的转账日志(历史可查)重算出来的;验证器会打印它重算出的数值,以及不得不重算的原因。两种读法都拿不到时记为 null。 |
| chain | string | 该动作执行所在的结算层。 |
| asset | string | 被冻结的资产。震级是被冻结量占该资产自身链上供应量的份额,两者都读自链上状态,因此核对它不需要任何价格来源。 |
| defs_version | { endpoints, magnitude } | 条目计算所用的定义版本,端点与震级分开标记。schema 会拒绝引用候选(未冻结)版本的条目,因此不会有任何东西在尚未冻结的定义下发布。 |
| verification.tx_ref | string | 执行交易的链上引用。它是条目里其他一切的锚点;只要你能取到它,就能不依赖我们把整条条目重建出来。 |
| verification.precursor_tx_ref | string | absent | 前置交易的链上引用,与 tx_ref 是同一种引用形态。initiated_at 能被核对、间隔能够发布,靠的就是它:这笔交易所在区块的时间戳即 initiated_at,两个区块时间戳之差即间隔。验证器会核对它确实在执行交易之前的区块里,并且带着同一个目标。条目不发布发起端时,该字段整个缺席。 |
| verification.verifier | tag | 能复现本条目的验证器发布 tag。该 tag 在后续版本发布后仍可运行,旧条目因而始终可核。 |
| verification.digest | sha256 | 验证器对本条目输出的摘要。逐字节比对。不一致意味着条目是错的,而报告不一致正是这个字段的用途。 |
| sources[] | { label, url } | 条目中每一项外部说法的标签与链接,取用日期写在标签里。没有来源的条目建不出来。 |
| recomputed_at | date-time | 我方完成复算的那一刻(与区块无关)。24 小时冷却期从这里起算,而不是从 executed_at。schema 要求它不早于 executed_at,且比 published 早至少 24 小时。 |
| published | date | 条目进入公报的时点。与 executed_at 不同,且比 recomputed_at 晚至少 24 小时——条目先等终局,再等冷却期。 |
| reviewed_by | enum | 哪几个复核台放行了这条条目,按角色记录。任何条目上都不会出现个人姓名,这是设计如此。 |
entry: FS-0000-0000
lang: en
title: "<title>"
stage: EXECUTED
executed_at: 0000-00-00T00:00:00Z
initiated_at: null
magnitude: 0.0 # null when unmeasurable (non-EVM / anomaly)
immobilised:
units: "0"
decimals: 0
chain: "<chain>"
asset: "<asset>"
defs_version:
endpoints: "1.0"
magnitude: "1.0"
verification:
tx_ref: "0xdddd…dddd"
precursor_tx_ref: "0xdddd…dddd" # absent when initiated_at is null
verifier: "v0.0.0"
digest: "sha256:dddd…dddd"
sources:
- label: "<label> (retrieved 0000-00-00)"
url: "https://example.org/"
recomputed_at: 0000-00-00T00:00:00Z
published: 0000-00-00
reviewed_by: editorial+disclosure 验证
任何一个数字,你都不需要相信我们
每一条已发布条目都是关于公开链上状态的一个断言,因此每一条都能被任何拥有节点和口径的人核对。下面的流程就是全部。它不需要我们发的任何凭证,我们自己的服务宕机时它照样跑得通。
- 01 从条目里取出 tx_ref,用所述链的任意全节点或公开浏览器取回那笔交易。这一步没有任何东西来自我们。
- 02 按方法论页为该链声明的终局规则确认这笔交易已终局,然后读出它的区块时间戳。那就是 executed_at。
- 03 按冻结类型读出 U 与 T:就地冻结型取执行区块末该目标的余额与总供应量;销毁 / 回收型取该笔交易事件日志里的销毁金额与前一区块末的总供应量。若该链的标准节点只提供最新态,这两个值在那个区块上都读不出来:改按方法论页所述,用该合约的转账日志把 U 重算出来,并预期 T 连同震级仍为 null。把手上的 U 与 immobilised 字段比对,对 U / T 套用已公开的震级函数,取一位小数,与 magnitude 字段比对。对于 magnitude 为 null 的条目,改为核对其所述的盲区原因。
- 04 若条目带有 precursor_tx_ref,同样取回那笔交易,核对它确实在执行交易之前的区块里、并且带着同一个目标,再取它所在区块的时间戳:那就是 initiated_at,executed_at 减去它就是间隔。若没有 precursor_tx_ref,initiated_at 即为 null,本次事件不存在间隔,也就不发布间隔。
- 05 在条目声明的 tag 上运行验证器,指向你自己的节点。它读取条目与公开链上状态,输出一个摘要。
- 06 把这个摘要与 digest 字段比对。要么逐字节相等,要么条目是错的,没有部分通过。
- 07 对不上就告诉我们。收到的不一致会被公开答复;若条目确实错了,就更正为一个写明改动内容的新修订。
边界
公报不会携带什么——写满之后也一样
- 任何按发行方拆分的时间数字
- 间隔跨发行方、跨链聚合。按发行方拆分的间隔表不是研究发现,而是一张作业地图,而最有能力那样使用它的人也一定会那样读它。
- 覆盖表或支持的发行方清单
- 哪些执法面被观测、观测得多好,不公开。这样一张表里,空格子携带的信息比填满的格子更多,而且是携带给不该拿到它的人。
- 被引用为典型值的提前量
- 任何间隔都不会被表述为典型值、预期值或合同值。存在多少间隔,是发行方治理结构的副产品,发行方随时可以把它降到零,而且不必通知任何人——包括我们。
- 署名
- 条目以公司名义发布,仅此而已。不存在一个需要你衡量其信誉的作者;你要核对的是验证区块。
- 排行、名录或批量导出
- 公报是已执行动作的记录,不是当事方的名单。条目按时间排列,也不提供任何能把它们变成某人数据集的导出。
前震速报
记录是公开的,只是没人在读。
每一次已执行的冻结、它的震级,以及当时的间隔究竟有多长——跨发行方、跨链。免费,无需账号,一键退订。如果你运营 OTC 台或金库并需要机构级接入,选择类型,我们会单独对接。
公报免费。机构级接入单独开通。