区块链的确定性问题
結(jié)算的確定性問題是最近公有鏈與許可鏈之間的一個(gè)主要戰(zhàn)場(chǎng)。看起來中心化的系統(tǒng)至少有一個(gè)優(yōu)點(diǎn),即所謂的“確定性”("finality"):操作一旦完成,就永遠(yuǎn)完成了,系統(tǒng)永不可能再回退回去撤銷這個(gè)操作。而去中心化的系統(tǒng),根據(jù)設(shè)計(jì)的不同,可能有這個(gè)性質(zhì),也可能只提供在一定激勵(lì)范圍內(nèi)的概率性確定,甚至沒有確定性,在這一點(diǎn)上公有鏈和許可鏈?zhǔn)怯泻艽髤^(qū)別的。
確定性的概念在金融業(yè)中尤其重要,因?yàn)闄C(jī)構(gòu)們需要以最快的速度確認(rèn)資產(chǎn)是否已經(jīng)在法律意義上是“他們的”了。而如果資產(chǎn)是他們的了,那就不能容忍一個(gè)隨機(jī)產(chǎn)生的區(qū)塊鏈分叉能撤銷這筆轉(zhuǎn)讓,使他們又失去對(duì)資產(chǎn)的所有權(quán)。
Tim Swanson(譯注:Director of Market Research at R3)在他最近的一篇文章中寫到:
企業(yè)家,投資者和區(qū)塊鏈的支持者們聲稱公有鏈可以作為金融工具的結(jié)算層。但是公有鏈從設(shè)計(jì)上就無法保證結(jié)算的確定性,因此他們目前無法成為金融工具清算和結(jié)算的可靠選擇。
這樣的說法是正確的嗎?公有鏈真的無法提供任何形式的結(jié)算確定性?還是說像某些工作量證明神教教徒講的那樣,只有工作量證明才有真正的確定性,許可鏈的確定性才是幻象?或者真相比這些說法更為微妙復(fù)雜?為了徹底理解不同區(qū)塊鏈架構(gòu)所提供的確定性,我們需要數(shù)學(xué),計(jì)算機(jī)科學(xué)以及博弈論 - 或者說密碼經(jīng)濟(jì)學(xué)(cryptoeconomics)- 的幫助。
一切確定性都有概率性
首先我們要明確一個(gè)重要概念,這個(gè)世界上沒有一個(gè)系統(tǒng)可以提供100%嚴(yán)格意義上的結(jié)算確定性。如果我們把共有權(quán)利登記在紙上,這個(gè)記錄可能會(huì)被燒掉,或者某天有個(gè)壞人闖入登記機(jī)構(gòu),在每個(gè)數(shù)字1前都畫一筆'c',變成一個(gè)9。即使沒有壞人搗亂,某天所有知道這個(gè)記錄保管地點(diǎn)的人同一時(shí)間都被雷劈死的事情也是有概率發(fā)生的(譯注:不代表譯者觀點(diǎn)...)。因此中心化的登記系統(tǒng)也有同樣的問題(譯注:指finality),甚至可以認(rèn)為此時(shí)攻擊更容易實(shí)施 - 也許前不久的孟加拉國央行風(fēng)波能給我們一些啟示。
對(duì)于完全在鏈上的“不記名數(shù)字資產(chǎn)”,其所有權(quán)完全由區(qū)塊鏈本身決定,因而只能靠社區(qū)驅(qū)動(dòng)的硬分叉來追索。如果只是將區(qū)塊鏈(許可鏈或者公有鏈)用作合法所有資產(chǎn)(土地,股票等等)的登記表,那么對(duì)資產(chǎn)所有權(quán)擁有最終裁決的就是司法系統(tǒng)了。如果這個(gè)登記表出了問題,法院會(huì)面臨兩種情況。第一,如果攻擊者已經(jīng)在司法系統(tǒng)反應(yīng)之前設(shè)法將他們的資產(chǎn)轉(zhuǎn)移走了,那么登記表上記錄的資產(chǎn)數(shù)量和現(xiàn)實(shí)世界中的資產(chǎn)數(shù)量會(huì)產(chǎn)生不一致,因此必然會(huì)有某個(gè)人,雖然他確定性的擁有數(shù)量為x的資產(chǎn),但是必須面對(duì)實(shí)際資產(chǎn)只有y and y < x的現(xiàn)實(shí)。
法院還有另外一個(gè)選擇。他們完全可以無視問題登記表,拒絕以它的字面記載為準(zhǔn);法院的需要做的是查清來龍去脈,以一塊橡皮作為應(yīng)對(duì)1被改寫為9的正確方式,而不是舉手贊同問題數(shù)據(jù)并表示現(xiàn)在所有人都更富有了。此時(shí)我們?cè)僖淮慰吹?#xff0c;確定性并不確定,只不過這一次我們對(duì)確定性的違反是為了社會(huì)福祉。這些觀點(diǎn)可以如數(shù)用到其他所有用于維護(hù)和攻擊登記表的方式上,包括公有鏈和聯(lián)盟鏈上的51%攻擊。
比特幣的經(jīng)驗(yàn)告訴我們“所有的登記表都會(huì)出錯(cuò)”這個(gè)理論觀點(diǎn)可能比想象的更加實(shí)際。在比特幣的歷史中一共出現(xiàn)過三次在足夠長(zhǎng)的時(shí)間之后交易被撤銷的事件:
- 2010年,攻擊者利用一個(gè)整數(shù)溢出缺陷給自己創(chuàng)造了一千八百億的比特幣。這個(gè)問題最終被修復(fù),代價(jià)是大約半天之內(nèi)的交易被撤銷。
- 2013年,由于某個(gè)只在特定版本中存在的bug,比特幣產(chǎn)生了分叉,導(dǎo)致一半網(wǎng)絡(luò)拒絕接受另一半網(wǎng)絡(luò)認(rèn)為正確的鏈。這次分叉持續(xù)了6個(gè)小時(shí)。
- 2015年,因?yàn)榈V池產(chǎn)生了無效區(qū)塊又不進(jìn)行驗(yàn)證,大約6個(gè)塊被撤銷。
在這三次事件中,只有導(dǎo)致第三次的根本原因是公有鏈獨(dú)有的:這些礦池的非正常行為正是由于經(jīng)濟(jì)激勵(lì)設(shè)計(jì)的問題導(dǎo)致的(本質(zhì)上等價(jià)于驗(yàn)證者悖論)。在另外兩次事件中,罪魁則是軟件錯(cuò)誤 - 一個(gè)同樣可以發(fā)生在聯(lián)盟鏈中的問題。有觀點(diǎn)認(rèn)為類似PBFT這樣偏好一致性的共識(shí)算法可以避免第二類事件的發(fā)生,但即便如此,由所有節(jié)點(diǎn)軟件自身溢出缺陷導(dǎo)致的第一類事件依然無解。
因此我們有理由相信,如果你真的希望減少系統(tǒng)故障率,那么一個(gè)比“從公有鏈轉(zhuǎn)向聯(lián)盟鏈”更有價(jià)值的建議是:運(yùn)行多個(gè)版本的共識(shí)協(xié)議實(shí)現(xiàn),當(dāng)且僅當(dāng)一個(gè)交易被所有實(shí)現(xiàn)都接受的時(shí)候才認(rèn)為它被最終確定了(這正是我們給交易所以及其他以太坊上項(xiàng)目的建議)。公有鏈/聯(lián)盟鏈?zhǔn)且粋€(gè)錯(cuò)誤的對(duì)立:如果你想要真正的健壯性,而且認(rèn)同聯(lián)盟鏈支持者所說的聯(lián)盟信任模型更安全的觀點(diǎn),那你應(yīng)該兩者都用。
工作量證明中的確定性
從技術(shù)的觀點(diǎn)看,工作量證明區(qū)塊鏈上的交易永遠(yuǎn)也不會(huì)最終確定,對(duì)于任何一個(gè)區(qū)塊,隨時(shí)都存在著冒出一條更長(zhǎng)的始于它的父塊又不包含它的分叉的可能。然而在現(xiàn)實(shí)中,公有鏈上的金融服務(wù)已經(jīng)演化出了一種非常實(shí)用的方法來判斷一個(gè)交易是否足夠近似確定:等6個(gè)確認(rèn)。
這里的概率計(jì)算很簡(jiǎn)單:如果攻擊者擁有的算力不到25%,我們便可以用隨機(jī)漫步來描述雙花攻擊,隨機(jī)漫步從-6開始(意味著攻擊者的鏈比原來的鏈短了6個(gè)區(qū)塊)。通過公式(0.25 / 0.75)^6 ~= 0.00137,我們可以計(jì)算出這個(gè)隨機(jī)過程達(dá)到0的概率(即攻擊者的鏈超過原來的鏈的概率),小于幾乎所有交易所的手續(xù)費(fèi)率(譯注:攻擊成本)。如果你想要更高的確定性,可以等待13個(gè)確認(rèn)讓攻擊者只有百萬分之一的成功機(jī)會(huì),或者等待162個(gè)確認(rèn)使得攻擊者的機(jī)會(huì)比直接猜出你的私鑰還低。因此,即使在基于工作量證明的區(qū)塊鏈上也存在一定程度的確定性。
問題是,我們的計(jì)算假設(shè)了75%的節(jié)點(diǎn)是靠譜的(對(duì)于更低的比例,例如60%,會(huì)有近似的結(jié)論但是需要更多的確認(rèn)數(shù))。這個(gè)前提能在我們的激勵(lì)模型中成立嗎?攻擊者可以賄賂礦工都選擇攻擊者的鏈(一個(gè)比較實(shí)際的賄賂方式是運(yùn)行一個(gè)負(fù)費(fèi)率的礦池,或者名義上零費(fèi)率另外補(bǔ)貼收益率來避免招人懷疑),P + epsilon attack就是一個(gè)思路。攻擊者還可以嘗試黑進(jìn)礦池或者破壞礦池基礎(chǔ)設(shè)施,這在對(duì)工作量證明的安全保護(hù)缺少激勵(lì)的環(huán)境下實(shí)施成功的概率不小(如果礦工被黑,他們只會(huì)損失一段時(shí)間內(nèi)的獎(jiǎng)勵(lì),本金是安全的)。最后還有Swanson說的所謂的“馬其諾防線”攻擊:投入巨量的金錢制造出比全網(wǎng)更高的算力進(jìn)行簡(jiǎn)單碾壓。
Casper中的確定性
Casper嘗試提供比工作量證明更高的確定性保證。首先Casper對(duì)“經(jīng)濟(jì)上完全確定”(total economic finality)有標(biāo)準(zhǔn)定義:當(dāng)大于等于2/3的驗(yàn)證人以最大概率投注一個(gè)區(qū)塊或者說狀態(tài)會(huì)最終確定的時(shí)候。在這個(gè)定義下驗(yàn)證人有非常強(qiáng)的激勵(lì)不去合謀推翻這個(gè)區(qū)塊:一旦驗(yàn)證人作出了最大概率的投注,在任何一個(gè)不包含這個(gè)區(qū)塊的分叉中驗(yàn)證人都會(huì)失去他們?nèi)康谋WC金。正如Vlad Zamfir指出的,你可以把Casper想象成一個(gè)參與51%的攻擊會(huì)導(dǎo)致你的礦機(jī)被燒毀的工作量證明變種。
其次,由于成為驗(yàn)證人需要事先申請(qǐng),這意味著不可能存在另外的驗(yàn)證人在悄悄的制造另一條更長(zhǎng)的鏈。如果你看到2/3的驗(yàn)證人將他們的全部本錢壓倒了某個(gè)塊上,然后又發(fā)現(xiàn)有2/3的驗(yàn)證人對(duì)另一個(gè)矛盾的塊做了相同的事,那么這只能說明這兩組驗(yàn)證人的交集(即至少1/3的驗(yàn)證人)將失去他們的全部保證金。這便是所謂的“經(jīng)濟(jì)上的確定性”:我們無法保證“X永遠(yuǎn)不會(huì)被撤銷”,但我們可以保證的是一個(gè)稍弱的說法,“X要么永遠(yuǎn)不被撤銷,要么有一大群驗(yàn)證人自愿的銷毀他們自己價(jià)值數(shù)百萬美元的本金”。
最后,即使雙重確定(double-finality)的事件真的發(fā)生了,用戶也無需被迫接受有更多投注支持的分叉。相反,用戶可以自行決定追隨哪個(gè)分叉,一個(gè)完全可行的簡(jiǎn)單策略是接受“先來的那個(gè)”。Casper中的一次成功攻擊更像是一次硬分叉而不是回退,而持有鏈上資產(chǎn)的用戶社區(qū)可以自由的基于常識(shí)選擇那條不是攻擊者制造的,而是包含真正應(yīng)該被確定的交易的分叉。
法律與經(jīng)濟(jì)
可惜這些強(qiáng)有力的保證依然是經(jīng)濟(jì)上的。正如Swanson在他的下一個(gè)觀點(diǎn)中說到的:
因而,如果原生代幣(例如比特幣或是以太幣)的市場(chǎng)價(jià)值上漲或下跌,礦工為競(jìng)爭(zhēng)鑄幣權(quán)和手續(xù)費(fèi)而產(chǎn)生的工作量以及合約的成本價(jià)值也會(huì)隨之變動(dòng)。這就留下了一種可能,在特定的經(jīng)濟(jì)環(huán)境下,惡意節(jié)點(diǎn)可以成功的促成鏈上區(qū)塊的重組。
這個(gè)觀點(diǎn)有兩個(gè)版本。一種來自“極端法律主義者”,他們認(rèn)為“區(qū)區(qū)經(jīng)濟(jì)保證”沒什么價(jià)值,只有理論意義,法律保障才是唯一有效力的保證。這樣的觀點(diǎn)顯然不對(duì):在很多情況下,法律能對(duì)不法行為給予的主要或者唯一懲罰便是罰款,而罰款正是一種“區(qū)區(qū)經(jīng)濟(jì)激勵(lì)”。如果區(qū)區(qū)經(jīng)濟(jì)激勵(lì)能被法律所用,那么至少在某些場(chǎng)合,它們也能被結(jié)算系統(tǒng)所用。
第二個(gè)版本要簡(jiǎn)單和務(wù)實(shí)的多。假設(shè)現(xiàn)在所有以太幣的價(jià)值加起來是7億美元,你發(fā)現(xiàn)進(jìn)行一次成功的51%攻擊需要價(jià)值3千萬美元的算力,而一旦Casper上線你預(yù)計(jì)資本參與率將是30%,因此要撤銷一個(gè)確定交易需要的最低成本是 7億美元 * 30% * 1/3 = 7千萬美元(如果你愿意把對(duì)驗(yàn)證人在線率的容忍度降低到1/4,則可以換來3/4的確定性閾值,從而把作惡資本的交集增加到1/2,使攻擊的最低成本上升為1億500萬美元)。如果你要交易價(jià)值為1億美元的證券,期限是兩個(gè)月,那么不會(huì)有什么大問題;公有鏈的經(jīng)濟(jì)激勵(lì)設(shè)計(jì)可以很好的防止惡意行為,任何的攻擊都不會(huì)劃算。
現(xiàn)在假設(shè)你同樣交易價(jià)值1億美元的證券,但是會(huì)在5年的時(shí)間內(nèi)用以太坊公有鏈作為底層。此時(shí)你擁有的確定性要少得多。以太幣的價(jià)格可能不變,更高,或者歸零。Casper共識(shí)的資本參與率可能上升到50%,也可能掉到10%。因此,發(fā)動(dòng)一次51%攻擊所需的成本完全可能下降到,例如,一百萬美元以下。在那個(gè)時(shí)刻,通過51%攻擊配合一些市場(chǎng)操縱來盈利是完全可行的。
還有一種情況更簡(jiǎn)單:如果你要交易價(jià)值1千億美元的證券呢?此時(shí)攻擊公有鏈的成本想對(duì)于市場(chǎng)操縱可獲得的收益來說可以忽略不計(jì),因此此時(shí)公有鏈完全不適用。
需要指出的是實(shí)際上攻擊成本的計(jì)算比上面的例子要更復(fù)雜。如果你要通過賄賂現(xiàn)有的驗(yàn)證人來發(fā)動(dòng)攻擊,這些計(jì)算沒問題。現(xiàn)實(shí)中更可能發(fā)生的是,你需要購買代幣來發(fā)動(dòng)攻擊,根據(jù)確定性的閾值不同這會(huì)使成本變?yōu)?億500萬或是2億1千萬美元。購買代幣這個(gè)操作本身又會(huì)影響代幣價(jià)格。攻擊本身,如果計(jì)劃得有瑕疵,必然會(huì)使實(shí)際處罰比例大于理論上的最小值1/3或1/2,導(dǎo)致攻擊所能獲得的收益要遠(yuǎn)小于預(yù)期。但基本的原理依然是成立的。
于是我們可以說,這個(gè)觀點(diǎn)的弱化版本,也就是說公有鏈的經(jīng)濟(jì)安全邊界對(duì)于高價(jià)值的資產(chǎn)來說太低了,是完全正確的,金融機(jī)構(gòu)探索在特定場(chǎng)景中使用私有鏈和聯(lián)盟鏈?zhǔn)峭耆侠淼摹?/p>
防審查以及其他考量
對(duì)公有鏈的另一擔(dān)心是其防審查的性質(zhì),即任何人都可以發(fā)起交易,而金融機(jī)構(gòu)總是有需要去限制系統(tǒng)中的參與者或是參與形式。這也是完全正確的。對(duì)此有一種針對(duì)性的觀點(diǎn)是公有鏈尤其是類似以太坊這樣高度通用化的區(qū)塊鏈,可以作為實(shí)現(xiàn)這些限制的系統(tǒng)的底層:例如,你可以創(chuàng)建一個(gè)只允許白名單內(nèi)的賬戶參與或是只有代表某機(jī)構(gòu)的賬戶才有管理權(quán)限的代幣合約。對(duì)此觀點(diǎn)的反駁是這樣的設(shè)計(jì)完全是沒有必要的復(fù)雜,相較于直接在許可鏈上實(shí)現(xiàn)這些機(jī)制,你需要承擔(dān)公有鏈為做到防審查和獨(dú)立于傳統(tǒng)司法體系而付出的成本,同時(shí)放棄其好處。這樣的觀點(diǎn)是合理的,但是需要指出的是這個(gè)關(guān)于效率的反駁,而不是關(guān)于可能性的。所以如果除了防審查之外的好處(例如,更低的協(xié)調(diào)成本,網(wǎng)絡(luò)效應(yīng))足夠大,這個(gè)理由會(huì)變得需要商榷。
除此之外還有另外的效率考量。由于公有鏈必須保持高度的去中心化,節(jié)點(diǎn)軟件必須能夠在標(biāo)準(zhǔn)的消費(fèi)級(jí)電腦上運(yùn)行。這就給交易吞吐量設(shè)置了一個(gè)在許可鏈中不存在的限制,在許可鏈中我們可以輕松要求所有節(jié)點(diǎn)都運(yùn)行在64核相互之間以高速網(wǎng)絡(luò)連接的服務(wù)器上。在未來,我們需要通過諸如分片的創(chuàng)新來緩解公有鏈的這個(gè)問題,如果進(jìn)行順利的話在5年左右的時(shí)間內(nèi)公有鏈的吞吐量將可以無限擴(kuò)充,只要并行程度足夠高,網(wǎng)絡(luò)中有足夠多的節(jié)點(diǎn)。但即使這樣公有鏈和許可鏈之間依然不可避免的會(huì)存在一些效率和成本的差異。
最后一個(gè)技術(shù)考量是時(shí)延。公有鏈運(yùn)行于成千上萬的通過公開網(wǎng)絡(luò)連接的消費(fèi)級(jí)電腦之上,而許可鏈則運(yùn)行在通過高速網(wǎng)絡(luò)相連的數(shù)量少得多的一組節(jié)點(diǎn)上,這些節(jié)點(diǎn)甚至可能物理上非常接近。因此許可鏈的交易時(shí)延,也就是最終確定所需要的時(shí)間,必然低于公有鏈。與效率問題不同,這是一個(gè)永遠(yuǎn)無法通過技術(shù)進(jìn)步解決的問題:與我們希望的相悖,摩爾定律無法讓光速每隔兩年翻倍。無論我們做多少優(yōu)化,一個(gè)節(jié)點(diǎn)位置任意的網(wǎng)絡(luò)和節(jié)點(diǎn)相鄰的網(wǎng)絡(luò)之間終究會(huì)有差異,而且這個(gè)差異基本上是肉眼可見。
與此同時(shí),公有鏈當(dāng)然有它自己的優(yōu)點(diǎn),也許在很多場(chǎng)景下運(yùn)行聯(lián)盟鏈所需的法律,商務(wù)和信任成本會(huì)高到讓人選擇公有鏈。而公有鏈的很大一塊價(jià)值在于任何人,無論擁有什么樣的社會(huì)資源,都能在上面構(gòu)建應(yīng)用:一個(gè)14歲的孩子也可以實(shí)現(xiàn)一個(gè)去中心化的交易所部署到區(qū)塊鏈上,其他人可以評(píng)估這個(gè)應(yīng)用并根據(jù)自己的需求使用。許多開發(fā)者不具備發(fā)起一個(gè)聯(lián)盟的能力,而公有鏈對(duì)于這一類開發(fā)者來說非常關(guān)鍵。公有鏈的另一個(gè)重要優(yōu)點(diǎn)是可以輕松實(shí)現(xiàn)的跨應(yīng)用的協(xié)同。最終,我們將看到這兩種體系隨著時(shí)間進(jìn)化,服務(wù)于不同的人群,而它們也面臨著包括擴(kuò)展性,安全性和隱私保護(hù)在內(nèi)的共有挑戰(zhàn),因此雙方都可以從合作中獲益。
總結(jié)
- 上一篇: 转:MiniGUI编程速查表
- 下一篇: 计算机语言的发展史