所有語言
分享
作者: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網絡本身高度去中心化,比人為治理更為中立,可以很大程度上抵消中心化作惡的風險。