作者:扎克-赫斯, Zack Hess https://github.com/zack-bitcoin/amoveo-docs/blob/master/other_blockchains/witnet.md
維特網評論 Witnet是一個專門從事預言機(oracle)的新區塊鏈。他們使用股權證明的共識機制來創建區塊。本文將不評估他們的共識機制。我們將假設他們的共識機制是有效的,而只是專注於預言機(oracle)。
Witnet是Bitcoin Hivemind的預言機(oracle)的複製,類似於Augur。比特幣Hivemind非常大,很難將其全部裝入區塊鏈,同時保持可擴展性。Augur簡化了Bitcoin Hivemind,擺脫了SVD步驟,多輪投票被結合起來,更準確地知道誰在撒謊。Witnet以2種方式簡化了比特幣Hivemind。
- 對預言機(oracle)問題的結果進行投票是自動的。人類並不參與。
- 它使用隨機抽樣來選擇大約2-6個投票者來決定你的預言機(oracle)的結果。
Witnet的目標是3.2級安全,就像Bitcoin Hivemind和Augur一樣,但正如我們將看到的,Witnet實際上是4.2級安全,它不像Augur或Bitcoin Hivemind那樣安全。 在此瞭解安全級別
爲了在商業上可行,區塊鏈預言機(oracle)系統至少需要達到2.2級安全。Amoveo是迄今爲止唯一實現這一目標的區塊鏈預言機(oracle)。
賄賂投票者 #
引自Witnet白皮書。“如果實體預先宣佈投票給一些虛假的要求,並承諾向投票給同樣要求的人提供賄賂,這種賄賂大於他們從講真話中得到的回報,並且大多數參與者接受賄賂,那麼效果是一樣的。然而,我們的協議不給參與者機會揭示或證明他們投票支持的要求的實際價值,從而使這種賭博完全無用。即使參與者接受了賄賂,它仍然可以對DON說實話,對賄賂者撒謊,並同時獲得獎勵和賄賂。“Witnet是在假設不可能賄賂預言機(oracle)投票者,他們沒有提供任何機制來解釋這如何可能。
我提供了一個可以在witnet做賄賂的機制。我在Amoveo上做了一個智能合約,裏面嵌入了一個witnet light節點,這樣它就可以驗證witnet區塊鏈上任何數據的默克爾證明。我和一個witnet預言機(oracle)者打了一個賭。賭注在1000個區塊內解決,屆時,預言機(oracle)者已經透露了他們的投票情況。賭注說,如果在那個時間點,他們能對他們透露了投票情況的witnet上的tx做一個默克爾證明,如果投票是攻擊者想要的方式,那麼amoveo智能合約中的錢就會給witnet預言機(oracle)者的投票者。否則,攻擊者會拿回他的錢。Amoveo智能合約是用來擺脫信任的。在witnet上行賄似乎只不過是一個信任問題。
我給你一個一般的證明,以表明不可能防止攻擊者賄賂投票者。
- 需要的是,礦工可以選擇包括有效TXS的任何子集,否則區塊鏈可能被拒絕發佈TXS的人停止。
- 礦工在處理完自己的區塊後,需要能夠計算出新的共識狀態。
- 結合1+2,需要礦工在處理任何一組有效的txs後都能計算出共識狀態。
- 它需要的是任何人都可以自由地開始採礦。
- 結合3+4,必然是任何人都可以在包括下一個區塊中的任何一組有效txs後計算出共識狀態。
- 因爲(5),我們一定可以計算出,如果我們不把其中一個txs包含在它的歷史中,區塊鏈的狀態會是什麼。
- 因爲(6),必須總是能夠證明你的tx對預言機(oracle)的結果產生了什麼影響。
- 既然可以證明你的tx對oracle的結果產生了影響,那麼就可以把這個證明作爲證據交給智能合約。
- 既然可以向智能合約證明你參與了攻擊,那麼智能合約就有可能以你是否參與了攻擊爲條件向你釋放賄賂。
這個關於賄賂的錯誤假設導致Witnet在設計上犯了一個錯誤。基於信譽投票的預言機(oracle)系統,如Bitcoin Hivemind、Augur和UMA,對於預言機(oracle)投票者被賄賂的可能性,都非常慎重。他們確保投票幣的價值大於賭注的價值,這樣一來,賄賂投票者就永遠不會有利可圖,這就是3.2和4.2的區別。
Witnet只是假設賄賂是不可能的。所以他們沒有任何保護措施來確保他們的聲譽價值高到足以維持3.2級安全。
有人向我建議,這篇博文將解釋Witnet對賄賂的解決方案。我將表明這不是一個解決方案。https://medium.com/witnet/anonymizing-commit-and-reveal-transactions-in-decentralized-oracle-solutions-e61067833cd9 Witnet有一些不同的計劃,但他們還沒有實施,在我看來,這些計劃都沒有真正解決賄賂的問題。他們可能對防止預言機(oracle)投票者的DOS垃圾信息有幫助。
請記住,如果未來有一天,投票者可以證明他們是如何投票的,那麼這意味着有可能賄賂他們。因此,任何防止賄賂的解決方案,都需要是無法證明你是如何投票的,即使你想這樣做。
在這篇博文中,他們提出用以下方法解決這個問題:環形簽名、時間釋放加密、zk-snarks和蒲公英網絡。 環形簽名只有在參與者想匿名的情況下才有效。它對防止賄賂不起作用,因爲投票者是有目的地想放棄匿名來接受賄賂的。他們可以有目的地透露被組合成環形簽名(ring signature)的簽名數據。 時間釋放不起作用,因爲最終會有這樣的時候:我們知道預言機(oracle)參與者如何投票的結果,那時就可以支付賄賂了。 zk-snark並不能解決這個問題。如果你能做一個zk-snark來證明你是如何參與投票的,那麼你可以做另一個zk-snark來證明你是如何向其他人投票的。
蒲公英只是取消了IP-Pubkey的關係,並沒有防止賄賂。所以它也沒有解決這個問題。
信任單一api的問題。 #
在witnet的一個步驟中,你支付的6臺電腦作爲一個預言機(oracle),它們都會在差不多的時間點上查詢一個API,並將這些數據以tx的形式提供給區塊鏈。例如,如果你在一場足球比賽上下注,witnet投票者節點將同時查詢同一個API,以找出比賽結果。這樣做的問題是,不管是誰在運行你可以查詢足球比賽結果的api,他們可以有選擇地發送不同的數據給聯繫他們服務器的人。他們可以有目的地將錯誤的數據發送給witnet節點,這樣他們就會向witnet區塊鏈提供錯誤的數據,以這種方式,運行足球比賽結果api的人可以從使用witnet來賭博足球比賽結果的人那裏偷竊。
這是Witnet只有4.2而不是像Bitcoin Hivemind那樣3.2的第二個原因。
其他問題 #
即使Witnet的預言機(oracle)在有用,我也不會對他們的區塊鏈有多少信心。預言機(oracle)只是金融衍生品系統的一個部分。你還需要可擴展的市場,保證交易以公平的順序和公平的價格進行匹配。你需要一個可擴展的方式來同時執行大量的這些合同。
witnet對這份文件作出了回應 #
https://gist.github.com/girazoki/98eab6b116fc25e5d4bcd38ee7f0d5f8 看一下賄賂部分,你可以看到他們同意Witnet容易受到賄賂預言機(oracle)投票者的攻擊者的攻擊。這是對Witnet非常負責任的做法。他們承認自己的弱點,這是想出一個計劃來克服這個弱點的第一步。他們暗示,他們將使用一個3.2級的解決方案,就像Augur/比特幣Hivemind/UMA一樣,投票者幣持有者需要在系統中擁有更多的抵押,而不是在一個時刻被保證的投注量。這是令人失望的,我希望他們會使用Amoveo的更便宜和更強大的2.2級解決方案的預言機(oracle)。
看看 “單一來源 “部分,你可以看到他們仍然對一些基本問題感到困惑。只要有一個硬性規定,即哪些公共API將在哪些時間被掃描,那麼攻擊者就有可能在這些時間點上操縱這些API,使攻擊發生。關於我們將在哪些時間使用哪些API的硬規則,正是攻擊者進行有效攻擊所需要的信息,而這些信息是公開的。這就是爲什麼預言機(oracle)需要人類的因素。人類可以意識到來源是否被破壞,他們可以推遲解決預言機(oracle)問題,直到答案明確。
一個Witnet團隊決定忽視的問題,而不是想出一個對策。即使Witnet有一個能用的預言機(oracle),Witnet也缺乏所需的可擴展的市場,這樣我們就可以充分利用預言機(oracle)來進行bet了。如果你不能利用預言機(oracle)進行投注,那就毫無意義。