公链稳定币生态全景:SUI增长最快,USD
62 2025-05-23
作者: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的全称是Universal Market Access,它通过一种名为“Optimistic Oracle”的预言机服务为DAPP提供任意事件的数据。其简要原理如下:
假如你要让UMA判断特朗普是否当选总统,你可以发布一个问题/请求,并提供奖金作为报酬,之后由“断言者/提议者”和“质疑者”针对问题答案进行争议。
UMA设置了名为DVM的仲裁模块,断言者/提议者发布答案后,质疑者可发起质疑,之后会进入投票判决,让UMA持币人判决谁对谁错。如果投票判决认为断言者作恶,系统会惩罚他,并奖励质疑者,反之亦然。而正确投票者们也可获得奖励。
(UMA乐观预言机V3版本的工作流程示意图)
上述模式下预言机会乐观的假设断言者/提议者诚实,如果不诚实就惩罚,所以这种模式被称为“乐观预言机”。上图是乐观预言机V3版的工作流程,也是网上各类资料中主要提及的版本。
目前PolyMarket采用的是更早的Optimistic Oracle(OO)V2版本。OOV2和OOV3虽然大体原理一致,但实现细节有很多差异。鉴于PolyMarket采用的是OOV2,下面我们将主要对V2的实现细节展开解析。
在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网络本身高度去中心化,比人为治理更为中立,可以很大程度上抵消中心化作恶的风险。