區塊鏈的確定性問題

以太中文網發表於2018-10-10

 Origin post by Vitalik Buterin on May 9th, 2016

特別感謝Tim Swanson的審閱,以及他關於結算確定性的觀點的進一步討論。

區塊鏈的確定性問題

結算的確定性問題是最近公有鏈與許可鏈之間的一個主要戰場。看起來中心化的系統至少有一個優點,即所謂的“確定性”(”finality”):操作一旦完成,就永遠完成了,系統永不可能再回退回去撤銷這個操作。而去中心化的系統,根據設計的不同,可能有這個性質,也可能只提供在一定激勵範圍內的概率性確定,甚至沒有確定性,在這一點上公有鏈和許可鏈是有很大區別的。

確定性的概念在金融業中尤其重要,因為機構們需要以最快的速度確認資產是否已經在法律意義上是“他們的”了。而如果資產是他們的了,那就不能容忍一個隨機產生的區塊鏈分叉能撤銷這筆轉讓,使他們又失去對資產的所有權。

Tim Swanson(譯註:Director of Market Research at R3)在他最近的一篇文章中寫到:

企業家,投資者和區塊鏈的支持者們聲稱公有鏈可以作為金融工具的結算層。但是公有鏈從設計上就無法保證結算的確定性,因此他們目前無法成為金融工具清算和結算的可靠選擇。

這樣的說法是正確的嗎?公有鏈真的無法提供任何形式的結算確定性?還是說像某些工作量證明神教教徒講的那樣,只有工作量證明才有真正的確定性,許可鏈的確定性才是幻象?或者真相比這些說法更為微妙複雜?為了徹底理解不同區塊鏈架構所提供的確定性,我們需要數學,電腦科學以及博弈論 – 或者說密碼經濟學(cryptoeconomics)- 的幫助。

一切確定性都有概率性

首先我們要明確一個重要概念,這個世界上沒有一個系統可以提供100%嚴格意義上的結算確定性。如果我們把共有權利登記在紙上,這個記錄可能會被燒掉,或者某天有個壞人闖入登記機構,在每個數字1前都畫一筆’c’,變成一個9。即使沒有壞人搗亂,某天所有知道這個記錄保管地點的人同一時間都被雷劈死的事情也是有概率發生的(譯註:不代表譯者觀點…)。因此中心化的登記系統也有同樣的問題(譯註:指finality),甚至可以認為此時攻擊更容易實施 – 也許前不久的孟加拉國央行風波能給我們一些啟示。

對於完全在鏈上的“不記名數字資產”,其所有權完全由區塊鏈本身決定,因而只能靠社群驅動的硬分叉來追索。如果只是將區塊鏈(許可鏈或者公有鏈)用作合法所有資產(土地,股票等等)的登記表,那麼對資產所有權擁有最終裁決的就是司法系統了。如果這個登記表出了問題,法院會面臨兩種情況。第一,如果攻擊者已經在司法系統反應之前設法將他們的資產轉移走了,那麼登記表上記錄的資產數量和現實世界中的資產數量會產生不一致,因此必然會有某個人,雖然他確定性的擁有數量為x的資產,但是必須面對實際資產只有y and y < x的現實。

法院還有另外一個選擇。他們完全可以無視問題登記表,拒絕以它的字面記載為準;法院的需要做的是查清來龍去脈,以一塊橡皮作為應對1被改寫為9的正確方式,而不是舉手贊同問題資料並表示現在所有人都更富有了。此時我們再一次看到,確定性並不確定,只不過這一次我們對確定性的違反是為了社會福祉。這些觀點可以如數用到其他所有用於維護和攻擊登記表的方式上,包括公有鏈和聯盟鏈上的51%攻擊。

比特幣的經驗告訴我們“所有的登記表都會出錯”這個理論觀點可能比想象的更加實際。在比特幣的歷史中一共出現過三次在足夠長的時間之後交易被撤銷的事件:

  • 2010年,攻擊者利用一個整數溢位缺陷給自己創造了一千八百億的比特幣。這個問題最終被修復,代價是大約半天之內的交易被撤銷。
  • 2013年,由於某個只在特定版本中存在的bug,比特幣產生了分叉,導致一半網路拒絕接受另一半網路認為正確的鏈。這次分叉持續了6個小時。
  • 2015年,因為礦池產生了無效區塊又不進行驗證,大約6個塊被撤銷。

在這三次事件中,只有導致第三次的根本原因是公有鏈獨有的:這些礦池的非正常行為正是由於經濟激勵設計的問題導致的(本質上等價於驗證者悖論)。在另外兩次事件中,罪魁則是軟體錯誤 – 一個同樣可以發生在聯盟鏈中的問題。有觀點認為類似PBFT這樣偏好一致性的共識演算法可以避免第二類事件的發生,但即便如此,由所有節點軟體自身溢位缺陷導致的第一類事件依然無解。

因此我們有理由相信,如果你真的希望減少系統故障率,那麼一個比“從公有鏈轉向聯盟鏈”更有價值的建議是:執行多個版本的共識協議實現,當且僅當一個交易被所有實現都接受的時候才認為它被最終確定了(這正是我們給交易所以及其他以太坊上專案的建議)。公有鏈/聯盟鏈是一個錯誤的對立:如果你想要真正的健壯性,而且認同聯盟鏈支持者所說的聯盟信任模型更安全的觀點,那你應該兩者都用。

工作量證明中的確定性

從技術的觀點看,工作量證明區塊鏈上的交易永遠也不會最終確定,對於任何一個區塊,隨時都存在著冒出一條更長的始於它的父塊又不包含它的分叉的可能。然而在現實中,公有鏈上的金融服務已經演化出了一種非常實用的方法來判斷一個交易是否足夠近似確定:等6個確認。

這裡的概率計算很簡單:如果攻擊者擁有的算力不到25%,我們便可以用隨機漫步來描述雙花攻擊,隨機漫步從-6開始(意味著攻擊者的鏈比原來的鏈短了6個區塊)。通過公式(0.25 / 0.75)^6 ~= 0.00137,我們可以計算出這個隨機過程達到0的概率(即攻擊者的鏈超過原來的鏈的概率),小於幾乎所有交易所的手續費率(譯註:攻擊成本)。如果你想要更高的確定性,可以等待13個確認讓攻擊者只有百萬分之一的成功機會,或者等待162個確認使得攻擊者的機會比直接猜出你的私鑰還低。因此,即使在基於工作量證明的區塊鏈上也存在一定程度的確定性。

問題是,我們的計算假設了75%的節點是靠譜的(對於更低的比例,例如60%,會有近似的結論但是需要更多的確認數)。這個前提能在我們的激勵模型中成立嗎?攻擊者可以賄賂礦工都選擇攻擊者的鏈(一個比較實際的賄賂方式是執行一個負費率的礦池,或者名義上零費率另外補貼收益率來避免招人懷疑),P + epsilon attack就是一個思路。攻擊者還可以嘗試黑進礦池或者破壞礦池基礎設施,這在對工作量證明的安全保護缺少激勵的環境下實施成功的概率不小(如果礦工被黑,他們只會損失一段時間內的獎勵,本金是安全的)。最後還有Swanson說的所謂的“馬其諾防線”攻擊:投入巨量的金錢製造出比全網更高的算力進行簡單碾壓。

Casper中的確定性

Casper嘗試提供比工作量證明更高的確定性保證。首先Casper對“經濟上完全確定”(total economic finality)有標準定義:當大於等於2/3的驗證人以最大概率投注一個區塊或者說狀態會最終確定的時候。在這個定義下驗證人有非常強的激勵不去合謀推翻這個區塊:一旦驗證人作出了最大概率的投注,在任何一個不包含這個區塊的分叉中驗證人都會失去他們全部的保證金。正如Vlad Zamfir指出的,你可以把Casper想象成一個參與51%的攻擊會導致你的礦機被燒燬的工作量證明變種。

其次,由於成為驗證人需要事先申請,這意味著不可能存在另外的驗證人在悄悄的製造另一條更長的鏈。如果你看到2/3的驗證人將他們的全部本錢壓倒了某個塊上,然後又發現有2/3的驗證人對另一個矛盾的塊做了相同的事,那麼這隻能說明這兩組驗證人的交集(即至少1/3的驗證人)將失去他們的全部保證金。這便是所謂的“經濟上的確定性”:我們無法保證“X永遠不會被撤銷”,但我們可以保證的是一個稍弱的說法,“X要麼永遠不被撤銷,要麼有一大群驗證人自願的銷燬他們自己價值數百萬美元的本金”。

最後,即使雙重確定(double-finality)的事件真的發生了,使用者也無需被迫接受有更多投注支援的分叉。相反,使用者可以自行決定追隨哪個分叉,一個完全可行的簡單策略是接受“先來的那個”。Casper中的一次成功攻擊更像是一次硬分叉而不是回退,而持有鏈上資產的使用者社群可以自由的基於常識選擇那條不是攻擊者製造的,而是包含真正應該被確定的交易的分叉。

法律與經濟

可惜這些強有力的保證依然是經濟上的。正如Swanson在他的下一個觀點中說到的:

因而,如果原生代幣(例如比特幣或是以太幣)的市場價值上漲或下跌,礦工為競爭鑄幣權和手續費而產生的工作量以及合約的成本價值也會隨之變動。這就留下了一種可能,在特定的經濟環境下,惡意節點可以成功的促成鏈上區塊的重組。

這個觀點有兩個版本。一種來自“極端法律主義者”,他們認為“區區經濟保證”沒什麼價值,只有理論意義,法律保障才是唯一有效力的保證。這樣的觀點顯然不對:在很多情況下,法律能對不法行為給予的主要或者唯一懲罰便是罰款,而罰款正是一種“區區經濟激勵”。如果區區經濟激勵能被法律所用,那麼至少在某些場合,它們也能被結算系統所用。

第二個版本要簡單和務實的多。假設現在所有以太幣的價值加起來是7億美元,你發現進行一次成功的51%攻擊需要價值3千萬美元的算力,而一旦Casper上線你預計資本參與率將是30%,因此要撤銷一個確定交易需要的最低成本是 7億美元 * 30% * 1/3 = 7千萬美元(如果你願意把對驗證人線上率的容忍度降低到1/4,則可以換來3/4的確定性閾值,從而把作惡資本的交集增加到1/2,使攻擊的最低成本上升為1億500萬美元)。如果你要交易價值為1億美元的證券,期限是兩個月,那麼不會有什麼大問題;公有鏈的經濟激勵設計可以很好的防止惡意行為,任何的攻擊都不會划算。

現在假設你同樣交易價值1億美元的證券,但是會在5年的時間內用以太坊公有鏈作為底層。此時你擁有的確定性要少得多。以太幣的價格可能不變,更高,或者歸零。Casper共識的資本參與率可能上升到50%,也可能掉到10%。因此,發動一次51%攻擊所需的成本完全可能下降到,例如,一百萬美元以下。在那個時刻,通過51%攻擊配合一些市場操縱來盈利是完全可行的。

還有一種情況更簡單:如果你要交易價值1千億美元的證券呢?此時攻擊公有鏈的成本想對於市場操縱可獲得的收益來說可以忽略不計,因此此時公有鏈完全不適用。

需要指出的是實際上攻擊成本的計算比上面的例子要更復雜。如果你要通過賄賂現有的驗證人來發動攻擊,這些計算沒問題。現實中更可能發生的是,你需要購買代幣來發動攻擊,根據確定性的閾值不同這會使成本變為1億500萬或是2億1千萬美元。購買代幣這個操作本身又會影響代幣價格。攻擊本身,如果計劃得有瑕疵,必然會使實際處罰比例大於理論上的最小值1/3或1/2,導致攻擊所能獲得的收益要遠小於預期。但基本的原理依然是成立的。

於是我們可以說,這個觀點的弱化版本,也就是說公有鏈的經濟安全邊界對於高價值的資產來說太低了,是完全正確的,金融機構探索在特定場景中使用私有鏈和聯盟鏈是完全合理的。

防審查以及其他考量

對公有鏈的另一擔心是其防審查的性質,即任何人都可以發起交易,而金融機構總是有需要去限制系統中的參與者或是參與形式。這也是完全正確的。對此有一種針對性的觀點是公有鏈尤其是類似以太坊這樣高度通用化的區塊鏈,可以作為實現這些限制的系統的底層:例如,你可以建立一個只允許白名單內的賬戶參與或是隻有代表某機構的賬戶才有管理許可權的代幣合約。對此觀點的反駁是這樣的設計完全是沒有必要的複雜,相較於直接在許可鏈上實現這些機制,你需要承擔公有鏈為做到防審查和獨立於傳統司法體系而付出的成本,同時放棄其好處。這樣的觀點是合理的,但是需要指出的是這個關於效率的反駁,而不是關於可能性的。所以如果除了防審查之外的好處(例如,更低的協調成本,網路效應)足夠大,這個理由會變得需要商榷。

除此之外還有另外的效率考量。由於公有鏈必須保持高度的去中心化,節點軟體必須能夠在標準的消費級電腦上執行。這就給交易吞吐量設定了一個在許可鏈中不存在的限制,在許可鏈中我們可以輕鬆要求所有節點都執行在64核相互之間以高速網路連線的伺服器上。在未來,我們需要通過諸如分片的創新來緩解公有鏈的這個問題,如果進行順利的話在5年左右的時間內公有鏈的吞吐量將可以無限擴充,只要並行程度足夠高,網路中有足夠多的節點。但即使這樣公有鏈和許可鏈之間依然不可避免的會存在一些效率和成本的差異。

最後一個技術考量是時延。公有鏈執行於成千上萬的通過公開網路連線的消費級電腦之上,而許可鏈則執行在通過高速網路相連的數量少得多的一組節點上,這些節點甚至可能物理上非常接近。因此許可鏈的交易時延,也就是最終確定所需要的時間,必然低於公有鏈。與效率問題不同,這是一個永遠無法通過技術進步解決的問題:與我們希望的相悖,摩爾定律無法讓光速每隔兩年翻倍。無論我們做多少優化,一個節點位置任意的網路和節點相鄰的網路之間終究會有差異,而且這個差異基本上是肉眼可見。

與此同時,公有鏈當然有它自己的優點,也許在很多場景下執行聯盟鏈所需的法律,商務和信任成本會高到讓人選擇公有鏈。而公有鏈的很大一塊價值在於任何人,無論擁有什麼樣的社會資源,都能在上面構建應用:一個14歲的孩子也可以實現一個去中心化的交易所部署到區塊鏈上,其他人可以評估這個應用並根據自己的需求使用。許多開發者不具備發起一個聯盟的能力,而公有鏈對於這一類開發者來說非常關鍵。公有鏈的另一個重要優點是可以輕鬆實現的跨應用的協同。最終,我們將看到這兩種體系隨著時間進化,服務於不同的人群,而它們也面臨著包括擴充套件性,安全性和隱私保護在內的共有挑戰,因此雙方都可以從合作中獲益。

譯者: jan

本文轉自以太坊愛好者原文連結:https://ethfans.org/posts/vitalik-on-settlement-finality


相關文章