NONDUBITO

凿构周期律 · 区块链系列 10 / 21

预言机

预言机让链接受外部价格,却无法让多数等于真实;数据源、节点与付费关系,把信任搬到了新的层次。

一 一致不等于真

预言机这个问题,最好从状态机复制讲起,而不是从区块链与现实世界隔绝这个比喻讲起。

以太坊的官方开发文档把技术边界写得很清楚:智能合约默认不能访问区块链之外的信息;而执行要求确定性,也就是同一个初始状态加同一笔交易输入,应当在每一个执行节点上产生同样的状态结果。

假如验证节点在执行合约的时候,各自去请求一个交易所的接口,一个网页,一个天气服务或者一家银行的服务器,它们可能得到不同的答案。原因可以是请求的时刻不同,地理位置不同,网络延迟不同,接口临时故障,缓存,访问权限,乃至服务器主动对不同的来访者返回不同内容。

这些不同的答案如果直接参与执行,节点就不能仅凭区块里那些相同的输入,重演出同一个结果。

所以这不是网络请求在区块链上没法实现的工程限制。

也不是有哪一条密码学定理说链外的事实不可知。

它是确定性的状态机复制,与非确定性的外部输入之间的接口限制。

预言机的作用,是先把某一个外部信息变成一个可以被共识处理的链上输入;之后节点才可以对它进行确定性的计算。

这一层区分,直接改写了一句几乎所有人都在用的话。

链上知道 BTC 是 65,000 美元,严格说不成立。

链上真正知道的是:某一个地址,或者某一组地址,按照某一套协议,在某一个时刻,向链上提交了表示 65,000 的数据;并且这次提交通过了该协议规定的签名,聚合,时效和权限检查。

至于 65,000 是不是真的是市场价格,那属于链外的语义问题。

链上不知道 65,000。

链上知道的是,有人说了 65,000。

这两句话之间的距离,决定了后面七节要处理的所有事情。

它们在绝大多数时候是重合的:说的人有理由说真话,数据是从真实成交里算出来的,而聚合和检查都做过了。而它们只要有一次不重合,下游那些按这个数执行的合约,就会照常执行。

这也解释了为什么预言机问题和区块链自身的容错不是同一个问题。

共识可以回答:多数验证者,或者达到规定阈值的验证者,对这一段链上状态是否达成一致。

它本身不能回答纽约昨天下了多少毫米雨,某家公司今晚收盘价是多少,或者某个航班是不是真的取消了。

即使一万个验证节点都一致接受了一个错误的报价,一致性也没有自动变成真实性。

一致不等于真。

而这一句在这个系列里的位置很特别。

第五篇里,构遇到了一个在逻辑上不可判定的问题,它的办法是给这个问题定价:算不出它什么时候停,那就让它买多少跑多少。

这一次没有东西可以定价。

因为要办成的那件事,不属于共识做得到的范围。

余项因此有一个前面九篇都没有出现过的位置。

它不在被压进尺子的那些东西里,也不在溢出尺子的那些东西里。它在尺子和被量的对象之间那个交接的地方。

二 换了位置

早期的方案大致把这个无法消失的信任,放在四个不同的地方。

一台服务器查询接口之后写链,信任落在运营方和它的数据源上,而控制那台服务器就可以改变输入。

由第三方证明某台服务器确实返回过这段内容,能提高来源和传输的可验证性,而证明不了源头所说的东西本身是真的,信任落在数据源加那套证明系统上。

由交易所或者数据商自己签发数据,链上验签,来源认证很强,而它要求原始数据商改变自己的发布基础设施,信任仍然落在那个源头上。

由多个人提交事实再投票或者仲裁,灵活,而慢,贵,不适合高频价格,还要解决参与者的激励与串谋。

这四条局限不是后来的项目为了竞争而做的营销总结。

Chainlink 最早的设计材料里就已经逐项讨论过:中心化的预言机是单点控制;人工预言机资源密集,不适合实时数据;由数据源签名可以增强来源认证,而要求数据提供方改变基础设施。

所以后来的设计并没有真正删除链外的信任。

更准确地说,它们回答的是三个更窄的问题:由谁观察,怎样把多个观察合成一个结果,以及观察错了的时候谁有经济动机去纠正或者承担成本。

Chainlink 当前公开的数据 feed 架构是两级聚合。上游通常先有专业的市场数据提供方,它们从多个交易场所取得原始报价,清洗异常值,形成自己的数据产品;多个独立的节点再分别向这些供应商或者别的接口取数;节点之间交换并签名各自的观察值,联署成一份满足规定人数的报价;最终只由一个节点把聚合后的结果写到链上,链上的合约验证签名和配置。

这样避免了让每一个节点每一轮都单独发一笔昂贵的链上交易。

而这里有一个容易被宣传材料模糊的层次,值得完整写出来。

交易所的成交数据,到专业数据商的清洗与聚合,到节点各自取数,到预言机网络联署出一份签名报价,到链上的聚合合约,再到借贷或者衍生品协议。

所以有很多节点,不等于有很多完全独立的经济事实来源。

几个节点完全可能购买同一家数据商的服务;而几家数据商又可能大量依赖同样那几个交易场所。

Chainlink 自己关于数据质量的说明里也写过:节点可以订阅高级数据商的接口;而数据商既可以把数据卖给节点,也可以自己去运行一个节点。

更新也不是市场价格每动一次就上链。

推送模式通常有两个触发器:价格相对上一次链上更新超过了设定的偏离阈值,或者即使偏离不大也已经过了最长允许的时间,也就是心跳。不同资产,不同链上的这两个参数可以不同。

所以行情平稳时是心跳决定最大更新间隔,剧烈行情时可能由偏离阈值提前触发。把某一条 feed 的某个百分比或者某个小时数写成全网统一参数,不正确。

这又意味着最新报价等于当前市场价这句话也需要改写。

准确的说法是:它是最近一次达到偏离阈值或者心跳条件之后,被该网络接受并写入链上的参考值。使用方还应当自己检查更新时间这一类新鲜度信息。

管理面同样不能漏掉。文档本身提醒集成者检查 feed 合约的拥有者;某些聚合器或者代理合约的拥有者是多签,拥有改变某些变量或者函数配置的能力。

于是报价者去中心化,与配置和升级权去中心化,是两个不同的问题。不能从前者推出后者。

Pyth 走的是另一条路。它对自己的区别描述得很明确:只有拥有一手数据的提供方才允许作为发布者,文档举的类别是交易所,做市商和交易公司;当前官方文档称整个网络有 120 家以上的一手提供方。

而这个数是全网络的发布者总数,不是每一条 feed 都有 120 个发布者。

它的聚合也不是谁声音大听谁:发布者对价格和置信区间投票,网络使用中位数和分位数信息构造聚合价格与置信度,离群者对最终值的影响因此受到限制。

而这里的信任只是换了位置。

它降低的是中间转述层的来源不透明,而把更多信任放到了发布者的身份选择,发布者自己的交易账本与定价系统,以及多个发布者之间是否真正独立。

它的发布者不是任意匿名地址自动加入的,申请需要获得接纳。

把这两条路线并排,信任的落点是这样的。

Chainlink 的剩余信任在数据商的相关性,网络成员,配置,以及管理多签上。

Pyth 在发布者的身份,他们内部的市场数据,以及发布者集合的独立性上。

还有两条路线走得更远,把信任整个挪到了别的地方去,那两条放在第七节和准入权一起看。

而这里没有一条可以写成无须信任。

差别只在于:要攻击它,必须控制哪一层,付出什么成本,以及错误多久之后还能被纠正。

三 五个来源

下面六起事故来自五个不同年份。金额故意保留互相冲突的口径,因为攻击者的利润,被借走的资产,产生的坏账,以及按事件时点价格折算的名义损失,不是同一回事。

2020 年 bZx 的第二次攻击。攻击者闪电借入 7,500 枚 ETH,其中约 900 枚经由一个路由在流动性很薄的市场里大幅扭曲报价,再以约 110 万的被高估资产作抵押借走 6,796 枚 ETH。金额有三个数:约 64 万美元被取走,约 63.3 万的攻击收益,约 80 万的资不抵债。三者量的是不同概念,不能混成一个损失。

弱点不是闪电贷本身。是可以由单笔资本冲击的薄市场现货,被当作了抵押定价的输入。

2021 年 C.R.E.A.M. 那一次的性质不同。攻击者向一个金库捐赠资产,在份额总量很低的时候,把每一份份额的账面价值近乎翻倍;而借贷协议读取的正是这个可以在同一笔交易里被改变的份额价格。

协议事后称总影响 1.3 亿美元;一家分析机构按其取价时点逐资产折算得到超过 1.36 亿;另一家被同期媒体引用的攻击者净收益估计约 1.17 亿。三者分别是协议影响额,事后资产估值和攻击净收益。

它暴露的是:可被操纵的衍生资产净值与份额会计,被当成了预言机。而不是简单地把某个交易所的现货价拉高。

2022 年4 月的 Inverse Finance。攻击者先在流动性很薄的池子里推高代币价格;而该协议使用的价格路径含有时间加权平均,攻击者通过资本投入和跨区块的操作,把被操纵的状态维持到了可以被采纳的程度。

这个案子的会计表达尤其干净:后续的坏账文件不用美元估算,而是列明实际被拿走的 1,594.44 枚 ETH,94.95 枚 WBTC,38.93 枚 YFI;同期按当日价格的二手估值约 1,560 万美元。

它说明时间加权平均不是对低流动性池的数学免疫:窗口越短越容易推,越长则越滞后,而攻击者可以跨区块维持价格。

2022 年10 月的 Mango Markets。两个账户建立相反的永续合约头寸;随后在给预言机供价的三个市场大量买入流动性很薄的代币,抬高报价;膨胀出来的未实现收益被当作抵押能力,再借走其他资产。

金额有三个口径:法院意见只作较稳妥的超过一亿美元;监管机构 2023 年的起诉材料称约 1.16 亿;司法部 2024 年的审判公告称约 1.1 亿。差异来自估值方式和法律案件的口径,不宜选一个当唯一真值。

而这个案子的法律状态必须写准。

法院意见把技术事实写得很清楚:三个给预言机喂价的市场被交易抬高,抵押估值随之增加。

而 2024 年陪审团的定罪不是当前的最终状态。2025 年5 月23 日,地区法院撤销了两项商品相关的定罪,并对电汇欺诈那一项作出无罪判定。

所以今天不能写成法院已经最终认定其犯有市场操纵罪。

而法院也并没有否定他做了那些交易。它处理的是管辖地与刑事构成要件。

2023 年的 BonqDAO。问题出在该协议自己连接数据源的那段实现:攻击者能够向一个脆弱的价格更新路径注入异常报价,先抬价铸出巨量稳定币,再压价触发其他仓位的清算。

一家机构用大约 1.2 亿美元的资金来描述名义影响;另一家显示攻击者铸出了 1 亿枚,而只在尚有流动性的时候兑换了约 200 万枚,其追踪到已经洗出的资产约 1,105 枚 ETH,约 180 万美元;还有一家给出的已转换损失约 120 万美元。

所以说它被预言机操纵损失 1.2 亿美元,过宽。

较窄的说法是:它的集成合约存在使用者可利用的价格更新漏洞,造成约 1.2 亿美元量级的名义资产与抵押影响;而攻击者可以兑现的金额远低于这个数。

2024 年6 月的 UwU Lend,是这一节的枢纽。

大额闪电流动性改变了多个池的状态。而该协议的预言机对 11 个来源取中位数。

其中 5 个来源,来自可以被同一组操作相关操纵的路径。

于是 11 个来源并不等于 11 个独立的风险因子。

金额同样有三个数:一家估算首轮超过 1,889 万美元;另一家为 1,940 万;同期媒体引用约 2,000 万。而 6 月13 日又发生了约 370 万的第二轮资产流出,不能简单加进首轮的口径,因为第二轮的机制有所不同。

它暴露的是:表面上多源,而多个来源共享同一个可被操纵的市场状态,形成相关的失败。

这几个案子里最容易被写错的是闪电贷攻击这个说法。

闪电贷通常不是预言机的漏洞。它提供的是在一笔原子交易里临时获得巨大资产负债表的能力。

真正决定能不能获利的,是下游协议是否把攻击者能够以低成本改变的状态,当作了可抵押的真实价值。薄池的现货价,金库的份额价格,流动性余额,若干高度相关的路径,都属于这一类。

2020 年关于闪电贷攻击的学术研究,已经把无抵押且可在一笔交易里使用整个可用池,视为一个资本放大器,而不是价格预言机本身的问题。

时间加权平均也不构成从不安全到安全的二元转换。

有分析在以太坊转向权益证明之后专门讨论过:验证者可以预先知道自己是否连续控制后续的区块,这消除了此前一部分由未知的下一个出块者提供的保护;多区块操纵在技术上并非不可能,只是成本和概率取决于流动性,窗口和连续出块权。

而 2024 年的研究指出另一个基本权衡:延长窗口提高了操纵者必须维持异常价格的时间,却会增加滞后和价格误差。

所以从这些事故能够支持的说法,不是去中心化交易所的价格不安全,也不是时间加权平均已经失效。

能够支持的是:预言机的操纵成本,必须相对于协议可被借走或者清算的风险敞口来衡量。

一个需要五万美元经济成本才能显著改变的价格,对一个只有一万美元敞口的协议也许足够贵;而对一个允许立即借走一亿美元资产的协议,则完全是另一回事。

四 沉默

2022 年 Terra 崩溃期间还有一类事故,值得与上面那些攻击分开。

Venus 当时公开表示,数据提供方因为极端市场情况暂停了 LUNA 的 feed 之后,该协议继续看到最后那个约 0.107 美元的报价,而外部市场已经跌到约 0.01。

随后两个地址存入约 2.3 亿枚 LUNA,借出约 1,350 万美元的资产;协议估计造成约 1,120 万美元的缺口,并表示由风险基金覆盖。

这几个数字的口径分别是:存入的币量,借出资产的名义价值,以及扣除剩余抵押之后的估计坏账。

而暂停这个动作本身,在设计上是保护性的。数据商停更,是因为极端行情下它对自己的报价没有把握;继续报一个自己都不确定的数,后果可能更坏。

于是就出现了这一节真正要说的那件事:上游按自己的职责做了一个谨慎的决定,而下游按自己的逻辑照常运行,两边都没有做错,而中间那一段没有人负责。

这也是预言机这件事在制度上最难安排的地方。

上游是一家数据公司,它对自己的客户负责,而它的客户是节点,不是那个借贷池里的存款人。中间是一个网络,它按协议规定把数据写上链,而它承诺的是按规则报价,不是承诺那个价格是对的。下游是一份合约,它按代码执行,而代码里有没有一句检查更新时间,取决于三年前写它的那个人有没有想到。

这条链上的每一环都在履行自己那一环的职责。而没有一环的职责是替最后那个人看住这件事。

这说明预言机停止更新,和预言机给出一个新的错误值,在工程上是两件不同的事。

而对一个没有做新鲜度检查或者断路器的合约,它们可以产生近似的结果。

同期另一个协议的第一方复盘同样记录:极端波动触发了最低价格或者断路器条件之后,依赖那条 feed 的应用受到了影响。

所以这一类事件暴露的是:使用方必须处理停更或者暂停的 feed,而不是仅仅验证数据来自一个可信的合约地址。

预言机的失败不必是被攻击。

它可以只是不说话。

这一类失效比被攻击更难防,原因也很朴素。

一个协议如果被喂了错误的价格,至少还有可能通过多源交叉检查发现异常。而一个协议如果继续读到最后那个正确过的价格,它看到的一切都是正常的:签名有效,数值合理,格式正确,没有任何一项检查会失败。

它唯一能发现的办法,是自己去问一句这个数是什么时候写的。而这一句要写在使用方的合约里,不写就没有。

所以这一类事故的责任位置,和上一节那几起完全不同。

上一节里,是有人主动去改变了一个可以被改变的数。这一节里,没有人做错任何事,而钱一样地流走了。

这两类失效应当分开叫。前一类是有人说了假话,后一类是没有人再说话,而听的人以为上一句还算数。

而后一类在设计上更难防,因为它不触发任何一项检查。

五 谁付钱给谁

这个产业的资金流不是简单的使用者拿代币买报价。

对一条典型的高级价格 feed,至少有三层可能发生付款:应用与链生态,到预言机网络,到节点运营商,再到上游数据商。

Chainlink 自己对数据供应链的描述尤其关键:专业数据商可以把接口数据卖给节点运营商;另一种模式是数据商自己运行节点,直接把数据卖给智能合约。

所以数据源本身是付费给预言机网络,还是反过来,一手材料能支持的较窄回答是这样的:

在典型的专业市场数据许可模式里,是节点或者数据消费方向上游支付或者获得许可,而不是那些交易所和数据商因为给预言机喂数据,就普遍向预言机网络交钱。

而数据商也可能为了发行,战略合作或者扩展分发,主动成为发布者或者节点。个别合作合同里的补贴与分成没有统一的公开口径,不能从合作伙伴这三个字推断现金的方向。

另一端则可以由使用该 feed 的协议,赞助方,乃至区块链生态本身承担。Chainlink 把价格 feed 描述为共担成本的模式:多个使用方共同资助一条 feed,费用用于补偿节点的数据获取和上链运营成本;另有一种安排允许某些链的生态在一定时期内承担预言机网络的 gas 和运行成本。

可以核到的部分相当具体。不少聚合器合约公开了计费状态:每次观察,每次传输的报酬参数,某个传输者尚未领取的余额,待补偿的观察次数,以及合约中可用于支付的余额。

也就是说,单条 feed,单个聚合器,单个传输者层面的付款义务,原则上可以直接从链上核验。

而这不能直接变成节点的年收入。

原因是聚合器会升级和更换;同一个运营商有多个传输地址;同一个运营商可以服务多个网络和多条链;费用还可能由生态计划,合同订阅和链下的数据许可承担。

本次查阅的一手材料里,没有发现一份经过审计,把所有这些收入合并披露的全网节点收入表。

而实际的合同与预算反而能显示商业价格的形状,同时也留下了一处必须原样保留的东西。

Inverse Finance 的治理提案在 2025 年讨论一条 feed 时披露,此前已批准 32,800 美元与额外 12,800 美元,同时明确写着两次批准合计 44,800 美元。

而 32,800 加 12,800 等于 45,600。

原文自身存在 800 美元的内部不一致,不能替原文悄悄修正。

它又说这笔预算足以为两条 feed 提供一年资金,发票以稳定币支付。因为提案没有把两家供应商单独拆价,这个数字只能标成两类服务的合并预算上限,不能写成某一条 feed 每年收费 44,800。

同一份提案还写明,此前批准的另一笔预算至今没有实际支出过。

所以预算不等于发票,不等于实际支付,不等于节点收入。

付款方式本身也已经变了。2025 年上线的付款抽象机制中,某些服务的使用方可以先用别的资产付费,费用经系统归集后再在链上兑换成协议代币,进入储备并用于服务提供者的经济体系。

所以必须先买某种代币才能使用数据,已经不是准确的描述。

其中一项与借贷协议的合作还披露了一个具体的分成口径:最初六个月采用折扣安排,相关收入按 65% 给协议社区,35% 给预言机生态分配。

而这是那一项特定收入的分成比例,不是价格 feed 的通用收费率。

代币在这几套系统里扮演的角色也不是一种。

一种同时承担支付结算和经济质押;而付款抽象的方向恰恰表明,使用方支付的资产和网络最终用于经济结算的资产可以不同。

一种更直接地参与最终争议的投票,承载的是争议解决与治理的安全。

一种既是报价者的质押物,也是争议与治理经济的一部分;错误提交可能导致质押被罚没。

还有一种当前已经同时有面向链上生态的产品和面向机构的订阅制数据服务,并直接用把你的市场数据变现来向发布者描述其路线。

所以不能把它概括成发布者免费贡献,使用者永久免费消费。

而公开材料同样不足以把每一个发布者当前实际收到多少现金或者激励逐项还原。

六 承担顺序

预言机事故最容易被丢掉的,是这一层。

一条 feed 报错本身并不烧钱。

只有当某个协议把这个报价用于允许借款,计算抵押率,触发清算,铸造稳定币或者结算衍生品的时候,它才会改变资产的所有权。

2021 年那一次最清楚。被操纵的抵押品账面价值上升之后,攻击者不是从预言机那里拿到钱,而是从借贷市场借出了原本由其他人存入的真实资产。

攻击者一侧增加了可以提现的资产;攻击地址留下的是价值不足以覆盖债务的抵押和坏账。

所以协议所说的总影响 1.3 亿美元,不是预言机提供方自动欠了协议 1.3 亿,而是这个协议的资产负债表出现了缺口。

2022 年 Inverse 的会计表达更直接:被取走的那些币被记为坏账,并通过治理决策逐步偿还。到当年8 月的提案时,已经偿还了 95.25 枚 ETH,5.54 枚 WBTC,2.71 枚 YFI。

这些都是币量,不是按今天价格回算的美元损失。

而资金的两头是:攻击地址获得借出的资产,原来的借贷池少了资产;随后治理用未来的收入和预算偿债,于是本来可以属于协议利益相关者的资金,被转去弥补此前存款人的缺口。

Bonq 的第二阶段特别说明了另一件事。

攻击者不仅把报价抬高以铸出稳定币,之后还把报价压到极低水平,从而触发了三十多个抵押不足的仓位被清算。

这里并非所有损失都由协议金库承担。被错误定价并遭到清算的仓位持有人,会失去自己的抵押品;而清算方或者攻击者可以获得相应的经济利益。

这也是为什么那个 1.2 亿的数字尤其需要谨慎。攻击者并没有把 1.2 亿美元可自由兑换的资产全部装进钱包。那 1 亿枚在攻击当时并不存在足够的市场深度让它按面值全额兑现;追踪到的实际兑换与洗出规模是百万美元级。

名义上被创造或者被重新估值的债权,与攻击者真正卖进市场之后得到的资产,是两种口径。

而 Mango 的法院记录提供了一处罕见的现实细节。

法院认定的审判证据显示,那个预言机由三个市场输入;攻击者在这些市场大量买卖,使抵押价值增大,并在大约半小时之内借出并快速提走超过一亿美元的资产。

法院还记录了一位位于纽约州的使用者。他看到异常波动之后,尝试提取自己的资产,而没有成功。

这是这几起事故的公开材料里,唯一能落到一个具体自然人的记录。

所以资金的两头很具体:被借走的稳定币和其他资产,原本位于那个共享的流动性池;攻击账户增加资产,而剩下的人面对资产短缺和无法提现。

后来又通过治理与攻击者之间的安排返还了一部分,所以被抽走的金额和最终未追回的净损失,同样不是一个数字。

把这几起合起来,一次预言机事故的承担顺序通常是这样的。

攻击者或者错误受益的账户增加资产。

借贷池或者被清算的账户减少资产。

如果协议选择补偿,再由金库,风险基金或者未来收入承担。

如果仍然不足,剩余的损失最终表现为存款人的不可兑付,或者治理资产的经济稀释。

而节点,上游交易所和数据商,往往并不与下游的风险敞口一比一共同承担损失。

这是预言机的经济安全,与协议的经济敞口之间,最重要的一处不对称。

一个报错的价格,可以让一个协议损失一亿美元。

而报出这个价格的人,收的是一笔按次计算的服务费。

七 六层

去中心化预言机这个描述本身不算错误,而它作为一个可检验的命题还缺少分母。

至少有六层需要分别测量。

第一层是单条 feed 的报价者数量。聚合器合约公开传输者名单,因此对某一个具体的合约,在某一个具体的区块高度上到底允许哪些地址提交报价,是链上可核的。而不同的 feed 可以拥有不同的网络,所以不存在一个自动适用于全网的单一节点数。

Chainlink 在 2022 年的公司材料里,曾把某些旗舰 feed 描述为由约 31 个独立节点运营商支持。这个数字的证据性质必须保留:它是特定历史时期的公司自述,不是今天全网络的实时节点数,也不是每一条 feed 都等于 31。

第二层是地址是否等于独立的运营实体。

单纯计算 31 个传输地址,不能证明存在 31 个在公司所有权,云服务商,密钥管理,上游数据供应商和控制人员方面都独立的实体。

要计算运营方的集中度,至少需要把地址做实体归并,再统计各运营商横跨多少条 feed,多少价值敞口。本次查阅没有找到官方持续发布的,可以复算的全网运营方集中度时间序列。

所以 31 个节点等于 31 个独立失效域,不能从节点数本身推出来。

第三层是数据源的相关性。

上一节那个 11 取中位数而其中 5 个可被同一组操作相关操纵的案子,就是最好的反例。

数学上的多取几个,只有在失效模式足够不相关的时候,才真正增加安全性。

第四层是准入权。

那 120 家以上的一手发布者是全网规模的公司口径,而发布者必须申请并获得接纳。这是一个有身份筛选的一手数据网络,不是任何匿名节点都自动进入生产环境。

另外两条路线一个把报价者准入做得更无许可,而把安全假设转移到质押与事后争议;一个更进一步,许多答案根本不需要一个预先选定的报价者集合,而依赖乐观的挑战。

它们因此不能仅按节点数在同一张排行榜上比较。

这两条路线值得在这里展开,因为它们把准入这件事推到了两个相反的极端。

UMA 采取的是完全不同的一类机制。提出者提交一个断言并缴纳保证金;在存活窗口内没有人提出争议,它就被视为正确;如果有人挑战,争议进入验证机制,由代币投票根据指定的方法作出解决。当前文档举例的默认存活窗口是 2 小时;而争议解决通常需要 48 到 96 小时。

这两个数字量的是挑战窗口和争议解决时间,不是价格更新频率。

它因此把信任放在一套完全不同的条件上:错误的断言必须值钱到让至少一个诚实的观察者愿意监控并拿出资本来挑战;保证金要足够大,使伪造的成本高于收益;最终还要信任那套投票与解析规则。

如果无人注意,或者挑战成本过高,这套机制可以在不经过任何积极确认的情况下接受错误数据。而它自己也提醒过:较高的保证金增加攻击成本,同时也提高了挑战者所需的资本。

Tellor 更接近一个无许可的报价者市场。报价者质押之后提交数据并可获得奖励;其他持币人可以发起争议。当前的规则按不同严重度规定可以罚没部分乃至全部质押,投票之后还有挑战阶段。它的争议流程包括 48 小时投票加 24 小时挑战,也就是通常 72 小时才能完成一次结算。

第五层是客户端与实现的多样性。

这一部分的公开可核数据,明显弱于底层区块链的执行与共识客户端。

官方的节点运维材料围绕官方软件及其部署方式展开;本次审阅的材料里,没有给出那种彼此独立实现,协议兼容的生产环境客户端市场份额表。

所以更准确的写法不是客户端高度集中已经被证明,而是:截至本次审阅,独立实现的市场份额缺少公开,版本化,可复核的数据;而不能用底层链的客户端多样性指标去替代它。

第六层是管理权。

即使某条 feed 的报价由几十个地址联署,代理与聚合合约的所有权,配置权限和紧急程序,仍然是另外一个控制面。

官方文档自己就要求开发者检查合约的拥有者,并说明某些拥有者或者多签可以更改变量,调用管理函数。

所以一份报价不能由一个节点单独伪造,与没有少数管理者能够改变 feed 配置,不是同义命题。

而真正尚缺公开测量的,不是有没有足够多的项目宣称自己去中心化,是几组更难看的数字:

单条 feed 在任一时点的实体级报价者集中度;多个报价者共同的云服务商与共同的数据商暴露;同一家数据商内部又依赖哪些共同的交易场所;客户端软件的实现份额;管理多签与配置权限的实体集中度;以及节点运营商在扣除上游数据许可,gas 和基础设施之后的真实净收入。

当前的材料能把链上的传输者,计费义务,发布者总数和部分治理权限核到相当细,而尚不足以把这些维度合成为一个可信的去中心化分数。

这部分缺失本身,比一个未经定义的节点总数更接近目前可以从原始材料得到的研究边界。

八 那道缝

把预言机网络叫成数据源,容易掩盖真正的数据生成链。

对加密货币的现货,一个典型的末端是几家中心化交易所的订单簿和成交,加上若干链上交易所;专业的数据商再做场所选择,成交量与质量过滤,异常值处理和汇率转换。节点取得的是这些数据商整理之后的接口,而不是区块链通过某种密码学手段直接观察到了市场。

对传统资产,这条链更明显。

近年的数据合作里,有交易所把自己的合并 feed 内容提供到链上,而公告称那条 feed 本身汇集了 300 多个交易场所的数据。这个 300 多量的是那条 feed 的上游场所覆盖数,不是有 300 个预言机节点。

有机构通过链上分发渠道发布国债基准收盘价格,而链上看到的那个基准,已经是在传统市场数据与基准体系内形成的结果。

还有交易所把自己旗下几个市场的数据引入这套分发体系。

所以取代传统数据商这个说法,与材料并不相符。

更贴近实际的是:预言机网络增加了从传统与加密市场数据基础设施,到区块链智能合约之间的一层签名,聚合和链上分发。

它可能改变分发的渠道,而不自动取代最上游的交易所,做市商,基准管理人或者数据清洗商。

监管也主要沿着这些上游角色发生,而不是沿着预言机这个词发生。

在美国的全国市场系统里,相关规则要求交易所提供规定的市场数据,由指定的处理机构进行汇集和传播。所以如果一条链上报价最终引用的是美国上市股票行情,这条链的上游有一部分处在证券市场监管制度之内。

而数据商受监管这句话则需要大幅收窄。

出售一条数据接口本身,并不自动使一家公司成为受监管的交易所或者基准管理人。

英国的监管机构明确指出:向一个基准管理人贡献输入数据,本身不是一项受监管的活动;尽管受监管的贡献者仍然可能受到基准条例中治理与行为义务的约束。

如果某个产品本身属于受基准条例管辖的基准,那又不同。那种监管身份来自基准管理这个法律角色,而不是因为它最后被某个预言机引用了。

所以那个问题应当拆成两句话。

对传统股票,固定收益和外汇基准这一类受许可的高质量机构数据,不少链上产品确实重新连接到了既有的数据生产与许可体系,这有一手的合作公告可以证明。

而整个行业最终只依赖几家公司,需要市场份额,数据授权和上游场所重叠的系统测量,本次查阅的一手材料不足以支持。

现实世界影响的缺口也应当明确记录。

对上面那几起事故,公开的技术复盘十分丰富,可以量到代币流动,坏账,清算和金库。

而本次检索没有发现可靠的一手研究,进一步测量这些事故造成了多少就业损失,地区物价变化或者金融服务可及性的变化。

能够落到自然人的那一点材料,是法院卷宗里的一次失败的提款尝试。

除此之外,把链上的坏账推演成就业或者消费者物价的损失,会超出证据。

回到第一节。

一致不等于真。

前面九篇里,构遇到不好办的东西,总能找到一个办法:改名,不问,折算,给它一条轨道,要它出示凭据,或者干脆给它定价。

这一次没有办法。

因为要办成的那件事,让链知道链外发生了什么,不属于共识做得到的范围。

于是所有的设计最后都变成了同一类动作:不是让它知道,是让说错话变贵,让说话的人变多,让说错话之后有人能够把它指出来。

余项在这里的位置因此很清楚。

它不在链上。链上每一次提交都签得好好的,任何人都可以去验。

它也不在链外。外面那个价格是真实存在的,交易所里每一秒都在成交。

它在那道缝上。

在有人说了 65,000,和它就是 65,000 之间。

而这道缝没有任何协议可以关上,因为关上它需要的那样东西,不属于共识做得到的范围。

所有的设计做的都是同一件事:把这道缝变窄,让跨过它去说假话变贵,让说完假话之后有人能把它指出来。

而缝一直在。

链每一次都验得很仔细:签名对不对,人数够不够,时间新不新。

它验的是有没有人按规矩说过这句话。

它不验这句话是不是真的。

链还在结算,而结算什么还没有共识。

资料说明

本文依据公开协议文档、链上记录、法院文书、监管文件与同行评议研究写成;文中的数字均保留其统计口径。系列资料截至 2026 年 8 月。

Where next

沿着问题继续读