TrueBit白皮書解讀

以太坊可以被描述爲一個使用區塊鏈的分佈式全球計算機。它允許開發者把代碼上傳到區塊鏈中,礦工共同執行並確保結果的正確性,作爲報酬,開發者需要付出一定量的以太幣,稱爲gas。以太坊通過全網驗證的辦法保證智能合約的正確執行,保證了安全性,作爲代價,需要付出大量的算力,驅動這麼一臺巨型機器,所需gas價值不菲。

TrueBit是區塊鏈鏈外擴容的方案之一,正如它的口號Fuel your imagination一樣,其設計初衷是解決以太坊智能合約的gas限制。

TrueBit基本原理很簡單:

用戶上傳自己所需執行的代碼,某個外包商代爲執行並賺取佣金,其它人監督代碼執行的正確性,以太坊通過智能合約作爲終極仲裁,獎善罰惡。造假者會獲得經濟懲罰,所以在絕大多數情況下,外包商會誠實的執行代碼並提供正確的結果,鏈上節點無需完整驗證,從而大大減輕了鏈上的計算負擔,也就節省了用戶的gas消耗。

流程如下:

  1. 用戶(下文稱爲Task Giver)上傳需要執行的代碼(下文成爲任務),並提供佣金。

2.鏈外第三方(下文稱爲Solver)發現這個任務,認爲佣金可以接受,執行計算任務並答公示運算結果,同時提供一筆保證金。

3.另外的第三方驗證者(下文稱爲Verifier)重新執行任務,如果發現Solver造假,可以發起挑戰,同樣需要提供一筆保證金。

4.通過鏈上的智能合約讓Solver和Verifier玩一個驗證遊戲(verification game),通過Task Giver在鏈上提供的執行代碼驗證答案真僞,提供正確答案的一方獲取佣金,造假的一方從保證金中支付整個驗證過程所需的gas。

5.如果一段時間內沒有人能提供證據證明Solver造假,Solver獲得佣金。

注意在上述過程中,佣金可以設置成比正常在鏈上執行所需的gas少,保證金則至少設置爲足以完整在鏈上執行該智能合約。

如果你只是想了解一下TrueBit,閱讀到這裏就可以結束了。

如果你想知道TrueBit真正精妙之處,現在纔剛剛開始。

在這個系統中,我們仍然需要解決兩個問題。

第一個問題被稱爲驗證者困境,TrueBit設計的目標之一是要解決驗證者困境問題。

我們知道,pow挖礦會對出礦的礦工給予獎勵,而負責校驗的礦工則沒有任何收益。這在一般的交易場景下沒有問題,因爲校驗礦工所付出的算力很有限。但是如果涉及到比較複雜的智能合約,驗證礦工就面臨一個兩難的選擇:

  • 老老實實地完整執行腳本會白白浪費寶貴的算力,在下一區塊的競爭中輸在了起跑線上;

  • 直接通過校驗並加到鏈上,節省了算力,但是有站錯隊的可能,在後續的競爭選擇了一個錯誤的跑道。

上述TrueBit流程裏,當Solver和Verifier發生爭執時,以太坊充當仲裁法庭的角色,鏈上需要重新執行用戶提供的智能合約,此時,驗證礦工同樣面臨上述的兩難困境。

TrueBit採用的方法是計算分段,先把整個計算過程分成t段,定位出Solver和Verifier發生爭議的最早一段代碼,那麼仲裁者只要執行這一段代碼即可判別真僞,鏈上執行的計算可以減少爲原來的1/t。

那麼,接下來的問題就是怎麼找到這段問題代碼。TrueBit採用了分段查找的辦法,我們舉個栗子說明:

1.Solver選擇C,把t段計算均勻分成C份,下圖中我們以C=5作爲例子

2.Solver把參數C和每一段計算後的圖靈狀態哈希後上鏈

3.Verifier根據C執行同樣的過程,比對哈希,找到最早發生不一致的位置,比如說下圖的第四段

4.遞歸上述流程,經過log(t)/log(C)輪協商最終定位出問題點

image

通過上述方法,可以有效的減少發生爭議時的鏈上計算量,也就間接解決了礦工的驗證者困境問題,當然它付出的代價是需要更長的時間解決爭議。

第二個問題涉及到Verifier的生態設計

因爲TrueBit的懲罰機制,絕大多數Solver都會提供正確的執行結果,這樣會導致一個結果就是Verifier無利可圖。Verifier在整個生態裏是保證安全性的重要一環,如果沒有人願意充當這個角色,會破壞整個系統的安全性。

爲了保證生態,TrueBit設計了一個稱爲累積獎金(jackpot)的機制。

基本原理就是,系統隨機選擇部分提案,要求Solver給出錯誤的答案(稱爲forced error),當有Verifier提出挑戰時,Solver不會受到懲罰,而Verifier則會獲得Jackpot作爲獎勵。

這個隨機選擇方法需要滿足下面幾個條件:

1.Task Giver不能在提交任務之前知道選擇的結果,防止人爲刷獎勵

2.Solver不能在提交答案之前知道選擇結果,防止Solver偷懶跳過正確答案的計算

3.Verifier不能在發起挑戰前知道選擇結果,防止Verifier選擇性驗證

TrueBit給出的答案就是通過兩個因子來決定隨機選擇結果,一個因子是Solver選擇的私密隨機數,只有在被挑戰時纔會公示,另一個是Solver提交答案所在區塊的哈希。通過後者,可以保證所有人在Solver提交答案前知道選擇結果,也就是上述1、2點,通過前者,可以保證上述第3點。

整個流程如下:

1.Task Giver創建任務

2.Solver執行計算,同時提供一個正確的答案和一個錯誤的答案,但不展示

3.兩個答案上鍊以後,Solver根據塊哈希和手中的隨機數解籤兩個答案中的一個

3.Verifier校驗Solver提供的答案,並提出挑戰

4.Solver提供手上隨機數證明是系統“Forced error”

5.Verifier獲得Jackpot,Solver免受懲罰

Jackpot的資金來源於任務的佣金,從所有任務的佣金中抽取一部分放到獎金池子中,稱爲稅收,每次中獎的Verifier獲取池子裏部分獎金。合理設置稅收和中獎比例,可以保證Verifier有利可圖,從而維持生態圈健康運作。稅收和中獎比例高,會增加Verifier的數量,提高系統安全性,但相應的,會損害Task Giver的積極性;反之,節省Task Giver成本的同時會降低系統整體安全,最終也是一個trade-off。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章