从 Polymarket 预言机操纵案看 AI 预言机的价值所在
UMA 的隐私投票和安全假设存在巨大漏洞,AI 预言机才是解决问题的最佳方案
作者:DeepSafe Research
2025 年 3 月 25 日,一则关于 PolyMarket 遭预言机操纵攻击的新闻受到了广泛关注。此前该平台上关于“乌克兰是否会在 4 月前与特朗普签署矿产协议”的对赌池吸引了约 700 万美元押注,截至 3 月 25 日前夕,所谓的矿产协议未被签署,然而一位鲸鱼操纵了 PolyMarket 接入的 UMA 预言机,导致合约判定矿产协议已签署,让许多人蒙受损失。这件事经过舆论发酵后被争相报道,引发了热烈讨论。

这次典型的预言机操纵攻击案中,由于UMA 预言机允许持币人对现实事件的结果进行投票,如果更多代币投给了“Yes”,预言机就会判定这件事已发生。持有巨量 UMA 代币的鲸鱼在 3 月 25 日通过多个地址,投下总计约 500 万枚 UMA 代币,以此强行让“Yes”的结果通过判定,可谓颠倒黑白。
值得注意的是,这并非 PolyMarket 第一次出现类似的预言机操控案,此前就曾将委内瑞拉应届总统错判为 Edmundo González,以及错判以太坊 ETF 将在 2024 年 5 月 31 日前被批准,而乌克兰矿产协议对赌结果一事是其中影响最大的。
在矿产协议错判案发生后,虽然利益相关者表达了强烈不满,但 Polymarket 官方在 Discord 上回应称,这件事不是因 PolyMarket 的系统技术故障而导致,因此不会向受损用户退款,只承诺将与 UMA 团队协作优化机制设计、加强风控。这一回应被很多人认定是“不作为”,同时也让人们对 UMA 的可靠性产生怀疑。
与 Chainlink 等针对量化数据的预言机不同,UMA 主要用于对任意类型的链下事件进行结果推送,其中很多是无法量化、只能定性的真实事件,比如前文提及的矿产协议是否被签署。若要判定此类复杂事件,不但要有可靠信息源,还要理解相应内容并进行推理,传统预言机显然无法做到。UMA 直接通过人为干预的方式判定复杂事件,这种简单粗暴的方法虽然有效,但存在巨大作恶空间。
目前 Story Protocol、PolyMarket、Across、Snapshot、Sherlock 等多个大项目方均采用 UMA 预言机作为重要数据源,一旦再遭治理攻击,背后牵涉的损失将非同小可。然而,如果要用技术手段解决 UMA 的问题,该怎么做呢?

曾有人认为,UMA 对恶意投票者的惩罚过轻,如果加大惩处力度,可以防止恶意投票,但这种思路是把权力转交给所谓的“惩罚者”,而惩罚流程或许会比前文中的对赌投票更中心化,本质上是引虎驱狼。
在现实世界中,地方政府与中央政府间的权力平衡和作恶惩罚机制尚且差强人意,在腐败和黑幕遍地的 Web3 中,我们更不能对“人治”寄以厚望。依赖人治来解决人治本身的问题,很容易陷入“自举”(自己把自己举起来)。只有通过合理的技术手段才能寻找到正确出路。
在本文中,DeepSafe Research 对 UMA 预言机的合约代码进行了解析,结合其相关文档提出了其问题所在。同时,我们构想了一种结合 AI Agent 与 DeepSafe 已有技术的方案,尝试利用大语言模型判断现实中的复杂事件。
我们认为,只要将乐观 / 挑战模式与 AI Agent 的强大能力相结合,完全有可能打造出新一代的智能预言机,如果这种能验证并推送任意链下消息的设施成功投入生产,届时极有可能实现智能合约和链下世界间的高效交互,开辟前所未有的场景与广阔市场。
UMA 乐观预言机的工作流程与代码解析
为了更好的理解智能化预言机的实现思路,让我们先对 UMA 预言机展开深入探讨。UMA的全称是Universal Market Access,它通过一种名为“Optimistic Oracle”的预言机服务为 DAPP 提供任意事件的数据。其简要原理如下:
假如你要让 UMA 判断特朗普是否当选总统,你可以发布一个问题 / 请求,并提供奖金作为报酬,之后由“断言者 / 提议者”和“质疑者”针对问题答案进行争议。
UMA 设置了名为 DVM 的仲裁模块,断言者 / 提议者发布答案后,质疑者可发起质疑,之后会进入投票判决,让 UMA 持币人判决谁对谁错。如果投票判决认为断言者作恶,系统会惩罚他,并奖励质疑者,反之亦然。而正确投票者们也可获得奖励。

(UMA 乐观预言机 V3 版本的工作流程示意图)
上述模式下预言机会乐观的假设断言者 / 提议者诚实,如果不诚实就惩罚,所以这种模式被称为“乐观预言机”。上图是乐观预言机 V3 版的工作流程,也是网上各类资料中主要提及的版本。
目前PolyMarket 采用的是更早的 Optimistic Oracle(OO)V2 版本。OOV2 和 OOV3 虽然大体原理一致,但实现细节有很多差异。鉴于 PolyMarket 采用的是 OOV2,下面我们将主要对 V2 的实现细节展开解析。
Requester 发布问题
在 OOV2 中,假如你要让预言机回答一个问题,要先调用 requestPrice() 函数给出相关参数,问题发布后,让第三方提议者给出答案,再进入挑战期。如果挑战期结束而无人质疑,默认提议者的答案正确。
而在 V3 版本中,发布问题的人会同时充当提议者,用“自问自答”的方式把问题和答案同时发出,直接进入挑战期。

前面提到,OOV2 中用户要先调用 requsetPrice() 函数给出问题信息,其中最重要的参数包括 identifier( 标识符 ) 和 ancillaryData( 辅助信息 ) 等。
identifier 用于声明问题类型,典型的二元问题可以用“YES_OR_NO_QUERY”为标识符,量化数据类问题用其他标识符。而 ancillaryData 里的辅助信息会以自然语言详述问题内容,比如“特朗普是否在 2024 年当选美国总统”。
除了标识符和辅助信息外,你还要声明提交问题时的时间戳、愿意付出的奖励代币、奖励数额等,这些参数会一并提交给预言机合约。

OOV2 合约收到上述数据后,会调用_getId() 函数,用“提问者地址、标识符、辅助信息、时间戳”这 4 个参数计算出一个 hash 值,作为该问题的 ID 号,记录在链上。

之后合约会抛出名为 RequestPrice 的事件,让链下的监听者知道有人发布了新的问题请求。目前 UMA 官方也有配套的前端 UI 展示这些等待答案的问题。


Proposer 提交答案
如果一个问题被发布且无人给出答案,此时任何人都可以调用 proposePriceFor() 或 proposePrice() 函数给出答案,答案据对应的问题 ID 号存至链上。
这里要注意,发布答案的提议者要质押保证金,且一个问题只会接收第一个提议者的答案,然后立刻变更至 Proposed 状态 ( 已被提议 )。其他提议者只要慢一步,答案都会被拒收。

之后 OOV2 合约会抛出名为 ProposePrice 的链上事件,告知外界有提议者向一个问题提交了答案。而 UMA 官方 UI 会将该问题归入“Verify”一栏,公示问题的详细信息并吸引社区成员检查答案。


不同的是,OOV2 采用“任何人皆可提交答案”且“任何人均可质疑”的无许可制,而OOV3 版本增设了 Escalation Managers 模块,允许项目方预先设置白名单,切换至许可制。
Disputer 质疑答案
让我们继续解读 OOV2 的工作流程。假如有人对某个问题的答案有异议,便可调用 disputePriceFor() 函数发起质疑,之后该问题会切换至 disputed 状态 ( 被质疑 )。质疑者要质押保证金,如果后面的投票判决认为质疑者有错,会对其进行惩罚。
需要注意,一个问题只能被质疑一次,也就是说只有第一个质疑者的动作会成功。

之后,合约会将有争议的问题移交给 DVM 仲裁模块,调用名为 requestPrice() 的函数,向 VotingV2 也就是 DVM 模块的主合约传入问题信息,启动投票判决流程。


DVM 仲裁模块与“Commit-Reveal”隐私投票
VotingV2 合约会将等待投票判决的问题插入 PendingPriceRequsetIds 队列,然后合约会抛出一个事件,告知外界又有新问题需要投票。之后 UMA 官方 UI 会对外公示,指出该问题的答案已被人质疑,需要投票表决。


根据 UMA 官方的要求,投票人要先质押 UMA 代币,然后针对待解决的问题给出投票。UMA 质押者可获得的 APY 目前最高约 20%,UMA 会持续增发来维持高 APY,吸引用户质押代币并参与投票。
为了防止质押者不作为,如果质押者不投票,每错过一个问题就罚没 0.1% 的质押代币,与最终答案不符也会罚没 0.1%(过去是 0.05%,2024 年下半年惩罚比例被上调至 0.1%)。
而为了防止有人故意影响别人的投票倾向,UMA 采用了“Commit-Reveal”两阶段的隐私投票制。在 Commit 阶段,投票人会向链上提交一个 hash,不直接暴露自己的投票意向。Commit 阶段结束后,投票停止并进入 Reveal 阶段,此时投票人会解密自己的投票信息,证明该信息与之前提交的 hash 相关联。
换言之,投票时你并不能直接看到别人的投票意向,投票窗口期结束后才能看到。
据 UMA 代码所示,Commit 阶段,投票人要通过 commitVote() 函数将 hash 上传至链上,这个 hash 在链下通过 keccak256 算法生成,input 中包含一个名为 price 的参数,这个 price 就是你认为正确的问题答案。
在二元定性的场景中,price 可以有 True/False 两种可能,而在喂价等场景中,price 可以是一个数字。
此外,生成 hash 值的 input 中还包含一个链下随机数 salt,可以防止别人观测到 hash 值后根据生成算法反推出你的 input。只要别人无法在 Commit 阶段推测出你的 input,也就不知道你的 price 是什么。

在之后的 Reveal 阶段,投票人需要调用 revealVote 函数 (),将生成 hash 时用到的 input 一一给出,其中就包含投票信息 price。合约会验证你的 input 能否与你之前提交的 hash 对应。若通过验证,便会计票。

Reveal 窗口期关闭后,计票会自动结束,照理来说整个工作流程也接近收尾。但要注意,EVM 体系内的智能合约无法主动发起动作,必须有外部力量调用合约才行,所以,收尾阶段需要有人调用 settle() 和 settleAndGetPrice() 函数,将 Requester 发布的问题变更为“settled”(已解决)状态,问题答案也会传回给函数调用人。
当然在 settle 之前,智能合约会根据链上的计票结果判定正确答案是什么。前面有提到,Voter 会在投票判决阶段提交一个 price,这个 price 是自定义的。智能合约会统计哪个 price 得到的票数最多,然后以这个 price 为有效答案。
而在具体计票时,单纯统计参与投票者质押的代币量,1 枚 UMA 代币计 1 票,要收集到足够的票数才行(目前的默认条件是,参与的总票数超 500 万,且超 65% 的质押态 UMA 都支持同一个答案才行)。
之后合约可根据投票结果奖励或惩罚 Proposer/Disputer,以及 Voters,这需要有人调用 updateTrackers() 函数,一般情况下会有专门的 Keeper 节点来触发这个操作。

此外,若无人针对 Proposer 进行质疑,投票判决无需进行,OOV2 合约可以独自承担从问题发布到敲定答案的整个流程,无需 VotingV2 合约的介入,这是 UMA 在设计上的简洁之处。
UMA 的问题有哪些?
1.UMA 的安全模型显然不符合其官方陈词
在 UMA 白皮书和 Medium 文档中,UMA 官方曾宣称,安全前提是作恶成本>作恶利润,并举了这样 1 个例子:
假设投票投纵攻击的总利润为 1 亿美元,若要保证安全,要让获取 51% 投票的成本长期保持在 1 亿美元以上。然而根据现实情况来看,UMA 代币最高时达 40 多美元,而当前币价仅 1.3 美元,跌超 95%,项目方显然没有进行有效护盘。
其次,由于 UMA 对错误投票的惩罚力度极低(当前的罚金仅 0.1%),投票人总可以递交与事实不符的结果,若攻击成功又可以事后把币卖掉,所以其实际作恶成本并不遵循前述安全模型。
理论上攻击者可通过类似租赁的手段拉拢投票人(类似于在比特币靠贿赂或租赁矿机发动 51% 攻击),而无需直接买币,其获取超 50% 质押代币的成本肯定比 UMA 官方估算的低得多。
再者,根据 2025 年 5 月的数据,UMA 官方将投票阈值上调至 65%,而处于质押状态的可投票 UMA 不到 2400 万枚,攻击者控制约 1560 万枚代币便可操纵预言机,以当前 UMA 单价 1.3 计算,这些代币价值约 2000 万美元。
而根据 UMA 官网的自我宣传,UMA 预言机接入的多个平台上总计有超 14 亿美元资产,显然潜在的作恶利润显然要远大于作恶成本。

2.UMA 的隐私投票效果有限
UMA 的“Commit-Reveal 双阶段隐私投票”照搬了 Gitcoin 上一个叫 Austin Thomas Griffith 的人的想法。照理来说这种方法会在投票时加密,投票结束后解密,的确可以保护隐私,但 UMA 为防止票数不足,添加了“Roll( 滚动)”机制。
假如这一轮收集到的票数不足,就要再加一轮投票,此时新进投票人可以看到前一轮已解密的投票结果,这时有明确的作恶空间存在。
这里我们可以设想一种场景:假设当前质押态 UMA 总计 2000 万枚,一个答案凑齐 1000 万票便可敲定(1 枚质押态 UMA 为 1 票),而问题是“马斯克是否会在 2025 年被刺杀”。
第一轮投票结束后,有 800 万票认为 yes,800 万票认为 no,此时没有一个答案满足 1000 万票的阈值,自动进入第二轮投票。如果这时剩下的 400 万票被鲸鱼控制,他完全可以出于自身利益投任何一个答案,而非出于对事实的尊重。
很显然,隐私投票能生效的前提是,在第一轮投票周期内便收集到足够的票数,如果不能满足这个要求,就没有什么隐私保护可言。
此外,虽然第一轮投票时不能在链上观测别人的意向,但操纵者完全可以在社交媒体上宣布把大量代币投给某个结果,在社区情绪层面煽风点火,亦或私下里勾结其他大户。
在乌克兰矿场协议对赌案中,虽然媒体普遍认为是一位叫 borntoolate 的鲸鱼用 500 万枚 UMA(约占质押态 UMA 的 25%)决定了最终答案,但实际上这背后可能还存在私下里的串谋。所以,UMA 的隐私投票治标不治本,无法高效率的反作恶。

而如果让官方介入惩治恶意投票人,只是在自举漩涡中越陷越深。在本文开篇我们曾指出,如果由人工介入的形式惩处恶意投票者,是在用人治的方式解决人治的问题,这里涉及到大量的权力来源与分配困境,最后还不如直接放弃。
解决方案:用 AI Agent 替代人类
针对以上痛点,业内开始设想引入 AI Agent 来执行预言机裁定工作,减少对人为投票治理的依赖。但 AI Agent 主要的缺点在于容易出现幻觉,根据 Chainlink 官方的测试结果,采用 GPT-4o 的 AI 预言机在判断复杂政治事件时,正确率约 84%,还无法做到极高的准确度。虽然这一数值会随着大模型迭代而提升,但仍可能出现错误。

对此,DeepSafe团队认为,可以利用去中心化验证来防止单个 AI Agent 出错。结合 DeepSafe 已有的去中心化验证网络 CRVA,我们可以让每个 CRVA 节点与 AI 大模型惯用的深度搜索功能结合。
比如说 CRVA1 节点集成 deepseek,CRVA2 节点集成 chatgpt,CRVA3 节点集成 grok,这样每个 CRVA 节点都成了一个独立的 AI Agent,最终我们对每个 AI Agent 提交的问题答案进行加权平均,作为去中心化验证的结果。

具体而言,CRVA 网络会通过加密的抽签算法,随机抽选几个节点组件提议者群体,这些提议者在提交结果时,必须给出足够的推理过程、上下文与中间证据,这些信息称为“可验证推理路径”。CRVA 网络内的其他节点可依据这些信息,调用本地的 AI 模型自行审查推理过程。最后全体节点可以就提议者发布的答案进行签名,以此实现去中心化验证。
(关于 CRVA 的介绍资料:从 unibtc 冻结事件看免信任托管的重要性)
此外,我们也可以结合前述 UMA 预言机的设计,在正常情况下由人来投票,CRVA 不介入,但如果有人认为投票结果被操纵,AI 和 CRVA 可以介入检查投票结果,并对错误投票者进行重罚。
惧于 AI 的判断能力以及潜在的巨额罚金,投票人应该不敢再投票给错误答案。由于 CRVA 网络本身高度去中心化,比人为治理更为中立,可以很大程度上抵消中心化作恶的风险。
在下一篇文章中,我们将对 AI 预言机的实现思路与涉及的具体问题展开更详实的讨论。欢迎大家对我们保持关注!
免责声明:文章中的所有内容仅代表作者的观点,与本平台无关。用户不应以本文作为投资决策的参考。
你也可能喜欢
PoS质押解除监管枷锁,美国SEC声明这三类活动不构成证券交易
Pocket Network (POKT) 即将上线 Bitget 创新区、公链区和Web3区
加密货币价格
更多








