比特幣和區塊鏈的學(xué)術(shù)譜系
溫斯頓·邱吉爾說(shuō)過(guò)一句名言,大概意思是:你回首看得越遠,你向前也會(huì )看得越遠。比特幣印證了這句話(huà):比特幣的非凡和成功之處不在于它處于任何組件研究的前沿,而在于它整合了許多不相關(guān)領(lǐng)域的舊創(chuàng )意。
本文引用地址:http://dyxdggzs.com/article/201802/375814.htm本文回顧了比特幣和區塊鏈的學(xué)術(shù)譜系,展示了其組合創(chuàng )新的典范。文章雖然很長(cháng),但著(zhù)墨之處,句句都切中技術(shù)演進(jìn)中的關(guān)鍵點(diǎn)??v觀(guān)全文,如下圖目錄所示,讀者很容易建立比特幣技術(shù)路線(xiàn)的整體圖景。文章分別梳理總賬本,貨幣,礦工的技術(shù)路線(xiàn),層層遞進(jìn),闡述這三個(gè)不同領(lǐng)域的技術(shù)積累如何匯集于比特幣這一神奇的創(chuàng )意。
值得一提的是,關(guān)于分布式一致性和共識機制,目前主流的分布式技術(shù),包括各種云計算解決方案,都沒(méi)有直面拜占庭故障,那么基于大規模P2P網(wǎng)絡(luò )結構的比特幣是如何解決這些問(wèn)題呢?以及又是如何激勵節點(diǎn)參與共識呢?相信本文會(huì )給你精彩的答案!

如果你已經(jīng)在媒體上看到過(guò)比特幣,并且對密碼學(xué)領(lǐng)域的學(xué)術(shù)研究有一定的了解,那么你可能會(huì )有如下的印象:從David Chaum開(kāi)始(文獻10,12),幾十年來(lái)很多人對數字現金(digital cash)的努力研究,最終都沒(méi)有獲得商業(yè)上的成功。因為這些工作需要一個(gè)集中的銀行服務(wù)器來(lái)控制系統,而沒(méi)有任何一家銀行愿意為其背書(shū)。隨著(zhù)比特幣的出現,提出了一種不需要銀行的去中心化加密貨幣(cryptocurrency)方案,數字現金(digital cash)終于大獲成功。比特幣的發(fā)明者,神秘的中本聰,并不是一個(gè)學(xué)術(shù)界的人,比特幣與早期的學(xué)術(shù)方案并無(wú)相似之處。

*譯注:David Chaum,數字現金之父,早在1983年,在比特幣出現的25年前,David Chaum發(fā)明了數字現金(digital cash)。
本文認為,幾乎所有比特幣的技術(shù)組件都起源于20世紀80年代和90年代的學(xué)術(shù)文獻(見(jiàn)圖1)。 這并不是為了削弱中本聰的成就,而是指出他站在巨人的肩膀上。 事實(shí)上,通過(guò)追溯比特幣思想的起源,我們可以將中本聰洞察力的真正飛躍歸結為一個(gè)特定的,復雜的方式——一種組合創(chuàng )新(把底層組件整合在一起)的方式。這有助于解釋為什么比特幣花了這么長(cháng)時(shí)間才被發(fā)明。已經(jīng)熟悉比特幣工作原理的讀者可以從這個(gè)歷史回溯中獲得更深入的了解(更多介紹,參考Arvind和Narayanan等人的Bitcoinand Cryptocurrency Technologies(文獻36)。 比特幣的思想文化史也可以作為一個(gè)展示學(xué)術(shù)界、外部研究者和從業(yè)者之間合作關(guān)系的研究案例,并且為這些不同的群體之間如何彼此合作獲益提供經(jīng)驗教訓。
*譯注:比特幣可謂組合式創(chuàng )新的典范。

1 總賬本(The Ledger)
如果你擁有安全的總賬本,那么將其用于數字支付系統的過(guò)程很簡(jiǎn)單。例如,如果Alice通過(guò)PayPal給Bob 100美元,則PayPal從Alice的賬戶(hù)中扣除100美元,并將100美元存入Bob的賬戶(hù)。這大體上和傳統銀行業(yè)務(wù)中發(fā)生的事情差不多,雖然銀行的復雜業(yè)務(wù)之間并沒(méi)有一個(gè)共享的總賬本。
總賬本的概念是理解比特幣的起點(diǎn)。它記錄了系統發(fā)生的所有事務(wù),并且對系統的所有參與者開(kāi)放,并被他們信賴(lài)。比特幣將系統的支付記錄轉換為貨幣記錄。在銀行業(yè)務(wù)中,賬戶(hù)余額代表可以從銀行取出來(lái)的現金,但一個(gè)比特幣代表什么?就目前而言,比特幣代表包含固定價(jià)值的一次買(mǎi)賣(mài)(交易)。
在互聯(lián)網(wǎng)這樣參與者之間可能互不信任的環(huán)境中,怎樣才能如何建立一個(gè)總賬本?讓我們從簡(jiǎn)單的部分開(kāi)始:數據結構的選擇。這個(gè)數據結構必須滿(mǎn)足一定的屬性要求——總賬本應該是不可變的。更準確地說(shuō),只能增加:可以添加新的交易,但不能刪除、修改或對已有交易重新排序。除此之外,還需要一種方法來(lái)獲得總賬本狀態(tài)的密碼摘要。摘要是一個(gè)簡(jiǎn)短的字符串,可以避免存儲整個(gè)總賬本。如果總賬本被篡改,所產(chǎn)生的摘要必然會(huì )發(fā)生變化,從而可以檢測到篡改。 需要這些屬性的原因是:與存儲在單個(gè)機器上的常規數據結構不同,總賬本是由相互不信任的一組參與者共同維護的全局數據結構。 這與去中心化數字總賬本(decentralizing digital ledgers, 文獻7,13,21)的方法是不同的,在分布式數字總賬本中,參與者維護本地總賬本,并且由用戶(hù)查詢(xún)這些總賬本來(lái)解決沖突。
1.1鏈式時(shí)間戳(Linked timestamping)
比特幣的總賬本數據結構有修改的借用了從1990年到1997年間由Stuart Haber和Scott Stornetta撰寫(xiě)的一系列論文(他們1991年的論文還有另一個(gè)合著(zhù)作者Dave Bayer,文獻5,22,23)。我們能夠知道這些歷史淵源是因為中本聰在他的比特幣白皮書(shū)(文獻34)中如此提及的。Stuart Haber和Scott Stornetta的主要工作是處理時(shí)間戳的文檔化——他們的目的是建立一個(gè)“數字公證”的服務(wù)。對于專(zhuān)利,商業(yè)合同和其他文件,人們可能希望確定該文件是在或不遲于某個(gè)時(shí)間點(diǎn)創(chuàng )建的。Stuart Haber和Scott Stornetta的文檔概念是非常泛化的,可以是任何類(lèi)型的數據。他們確實(shí)提到金融交易是潛在的應用,但這不是他們關(guān)注的焦點(diǎn)。
Stuart Haber和Scott Stornetta方案的簡(jiǎn)化版本中,文檔被不斷創(chuàng )建和廣播。每個(gè)文檔的創(chuàng )建者聲明一個(gè)創(chuàng )建時(shí)間(并簽名文檔)、文檔的時(shí)間戳和前一個(gè)廣播文檔。前一個(gè)廣播文檔已經(jīng)簽署了自己的前任,所以文檔形成了一個(gè)很長(cháng)的倒退鏈。外部用戶(hù)不能改變時(shí)間戳的信息,因為它由創(chuàng )建者簽名;創(chuàng )建者也不能在不改變整個(gè)跟隨信息鏈的情況下改變時(shí)間戳的信息。因此,如果通過(guò)可信來(lái)源(例如,另一個(gè)用戶(hù)或專(zhuān)門(mén)的時(shí)間戳服務(wù))獲得鏈中的單個(gè)項目,那么該時(shí)刻之前的整個(gè)鏈是鎖定的,不可變,并且在時(shí)間上有序。進(jìn)一步,如果你認為系統拒絕錯誤創(chuàng )建時(shí)間的文檔,則可以合理地保證文檔至少與其聲明一樣久遠。Further, if you assume that the system rejects documents with incorrect creation times, you can be reasonably assured that documents are at least as old as they claim to be.無(wú)論如何,比特幣只是借用Stuart Haber和Scott Stornetta工作的數據結構,然后重新設計了安全屬性(通過(guò)增加工作量證明,本文稍后介紹)。
*譯注:進(jìn)一步,如果你認為系統拒絕錯誤創(chuàng )建時(shí)間的文檔,則可以合理地保證文檔至少與其聲明一樣久遠。原文:Further, if you assume that the system rejects documents with incorrect creation times, you can be reasonably assured that documents are at least as old as they claim to be.
在Stuart Haber和Scott Stornetta的后續文獻中,他們介紹了使這個(gè)數據結構更加有效和高效的其他方案(其中一些在第一篇論文中有暗示)。首先,可以使用哈希而不是簽名來(lái)創(chuàng )建文檔之間的鏈接;因為哈希更簡(jiǎn)單,計算速度更快。這樣的鏈接被稱(chēng)為哈希指針。其次,不是單獨對文檔進(jìn)行線(xiàn)程化處理(如果幾乎同時(shí)創(chuàng )建多個(gè)文檔,效率可能會(huì )很低),它們可以分為批處理組或區塊,每個(gè)區塊中的文檔具有基本相同的時(shí)間戳。第三,在每個(gè)區塊內,文檔可以用一個(gè)哈希指針的二叉樹(shù)連接在一起,稱(chēng)為Merkle樹(shù),而不是一個(gè)線(xiàn)性鏈。順便提一下,在Stuart Haber和Scott Stornetta的第一篇論文發(fā)表的6年之后,即1991年,Josh Benaloh和Michael de Mare獨立地提出了這三個(gè)方案。
1.2梅克爾樹(shù)(Merkle trees)

比特幣本質(zhì)上使用Josh Benaloh和Michael de Mare在1991年和1997年提出的數據結構(中本聰大概不了解Josh Benaloh和Michael de Mare的工作),圖2以簡(jiǎn)化的形式表示。當然,在比特幣中,交易取代了文檔。在每個(gè)塊的Merkle樹(shù)中,葉節點(diǎn)是交易,每個(gè)內部節點(diǎn)由兩個(gè)指針組成。這個(gè)數據結構有兩個(gè)重要的屬性。首先,最新塊的哈希作為摘要。對任何交易(葉節點(diǎn))的更改都需要將更改一直傳播到塊根,以及所有后續塊的根。因此, 如果你知道最新的哈希值,你可以從不受信任的來(lái)源下載余下的總賬本,并驗證是否改 變。 類(lèi)似的觀(guān)點(diǎn)建立了數據結構的第二個(gè)重要屬性 ——也就是說(shuō), 某人可以簡(jiǎn)單有效地向你證明某個(gè)特定的交易包含在總賬本中。 這個(gè)用戶(hù)只須向你發(fā)送該交易塊中的少量節點(diǎn)(這是Merkle樹(shù)的特點(diǎn)),以及每個(gè)后續塊的少量信息。高效地證明事務(wù)的包含能力對于性能和可伸縮性是非常需要的。

*譯注:Ralph Merkle,生于美國,計算機科學(xué)家,對于公開(kāi)密鑰加密技術(shù)有重大貢獻。后來(lái)研究方向轉至于納米科技以及人體冷凍技術(shù)。
便說(shuō)一下,Merkle樹(shù)是由對稱(chēng)密碼學(xué)的先驅Ralph Merkle命名。Ralph Merkle在1980年的論文(文獻33)中提出了這個(gè)想法。他的目標應用是生產(chǎn)數字簽名證書(shū)的公共目錄摘要。例如,當一個(gè)網(wǎng)站向你提供一個(gè)證書(shū)時(shí),它也可以提供證書(shū)顯示在全局目錄中的簡(jiǎn)短證明。只要你知道證書(shū)目錄中Merkle樹(shù)的根哈希,就可以高效地驗證證明。 這個(gè)想法在密碼標準中是古老的,但它的力量只有在最近才被認可。 它是最近實(shí)施的證書(shū)透明系統(文獻30)的核心。2015年的一篇論文提出了CONIKS,將Merkle樹(shù)應用于端到端加密電子郵件的公鑰目錄(文獻32)。 對全局狀態(tài)的部分進(jìn)行高效的驗證是總賬本在新的加密貨幣(cryptocurrency) “以太坊(Ethereum)”中提供的關(guān)鍵功能之一。

比特幣可能是Josh Benaloh和Michael de Mare數據結構在真實(shí)世界中最著(zhù)名的應用實(shí)例,但它并不是第一個(gè)。至少有兩家公司 ——從90年代中期開(kāi)始的Surety,從2007年開(kāi)始的Guardtime ——用到了文檔時(shí)間戳服務(wù)。這些服務(wù)都有一個(gè)有趣的交集(An interesting twist)是Bayer, Haber, and Stornetta(文獻5)提到的一個(gè)想法,這個(gè)想法是在報紙上以廣告的形式定期刊登Merkle根。圖3顯示了由Guardtime發(fā)布的Merkle根。
1.3拜占庭容錯(Byzantine fault tolerance)
當然,沒(méi)有中心權威的互聯(lián)網(wǎng)貨幣的要求更為嚴格。分布式賬本將不可避免地存在分叉,這意味著(zhù)一些節點(diǎn)會(huì )認為A塊是最新的塊,而其他節點(diǎn)會(huì )認為B塊是最新的塊。這可能是因為攻擊者試圖破壞總賬本的操作;也可能僅僅是因為網(wǎng)絡(luò )延遲,不同的節點(diǎn)不知道對方的塊,偶爾會(huì )在同時(shí)產(chǎn)生塊。僅僅依靠鏈式時(shí)間戳解決分叉是不夠的,這由Mike在1998年的文章中證明(文獻26)。
一個(gè)不同的研究領(lǐng)域——容錯分布式計算——已經(jīng)研究了這個(gè)問(wèn)題,其中包括狀態(tài)復制(state replication)在內的不同名稱(chēng)。解決這個(gè)問(wèn)題的方法是使一組節點(diǎn)以相同的順序應用相同的狀態(tài)轉換——通常,精確的順序無(wú)關(guān)緊要,只要所有的節點(diǎn)都是一致的。對于數字貨幣(digital currency),要復制的狀態(tài)是一組余額,交易是狀態(tài)轉換。早期的解決方案,包括由圖靈獎得主Leslie Lamport于1989年(文獻28,29)提出的Paxos——當通信信道不可靠時(shí),少數節點(diǎn)可能會(huì )出現某些“realistic”的故障,例如永遠離線(xiàn)或重新啟動(dòng),收到最初離線(xiàn)時(shí)發(fā)送的過(guò)時(shí)消息等——會(huì )考慮狀態(tài)復制。隨后,產(chǎn)生了大量的文獻,主要是應對更為復雜(敵對/不利)環(huán)境和針對效率的權衡(tradeoff)。
一系列相關(guān)的工作研究了網(wǎng)絡(luò )大多可靠的情況(消息以有限的延遲傳遞),但是“錯誤”的定義被擴展為處理與協(xié)議的任何偏離(any deviation)。這種拜占庭式的錯誤包括自然發(fā)生的錯誤以及惡意制造的行為。早在1982年(文獻27),Lamport與Robert Shostak和Marshall Pease發(fā)表了一篇論文:《拜占庭將軍問(wèn)題》。之后在1999年,Miguel Castro和Barbara Liskov發(fā)表了一篇里程碑式的論文引入了PBFT(practical Byzantine fault tolerance)同時(shí)容納了拜占庭故障和不可靠的網(wǎng)絡(luò )(文獻8)。 與鏈式時(shí)間戳相比,有關(guān)容錯文獻的數量是巨大的,包括Paxos,PBFT和其他重要協(xié)議的數百種變體和優(yōu)化。
中本聰在他最初的白皮書(shū)中沒(méi)有引用BFT的文獻或者使用它的語(yǔ)言。他使用了一些概念,將協(xié)議作為一種共識機制,并以攻擊者的形式以及節點(diǎn)加入和離開(kāi)網(wǎng)絡(luò )的方式來(lái)考慮故障問(wèn)題。 這與他明確聲明參考鏈式時(shí)間戳的文獻(包括工作量證明,下文討論)形成鮮明對比。 當被問(wèn)及關(guān)于比特幣與拜占庭將軍問(wèn)題(一個(gè)需要BFT解決的思想實(shí)驗的關(guān)系)的郵件列表討論時(shí),中本聰聲稱(chēng)工作量證明鏈解決了這個(gè)問(wèn)題(文獻35)。
在接下來(lái)的幾年中,其他學(xué)者從分布式系統的角度研究了中本聰的共識機制——這仍然是一個(gè)正在進(jìn)行的工作。有些人表示,比特幣的屬性是相當弱的(文獻43);而另外一些人則認為,對于比特幣的一致性屬性來(lái)說(shuō)(文獻40),BFT的觀(guān)點(diǎn)并不公平。另一種方法是定義已經(jīng)充分研究的性質(zhì)變體,并證明比特幣滿(mǎn)足它們(文獻19)。最近,這些定義大大加強了,以提供一個(gè)更為標準的一致性定義,且該定義為消息傳遞保留更多現實(shí)性假設(文獻37)。然而,所有這些工作都假設部分參與者的行為是“誠實(shí)”(例如,協(xié)議兼容)的,而中本聰則認為,沒(méi)有必要盲目地假設行為是誠實(shí)的,因為行為是被激勵的。 對中本聰的激勵共識機制的全面分析并不適合過(guò)去的容錯系統模型。
2 工作量證明(Proof of Work)
幾乎所有的容錯系統都假定系統中的大多數或絕大多數(如超過(guò)一半或三分之二)的節點(diǎn)都是誠實(shí)和可靠的。在一個(gè)開(kāi)放的對等網(wǎng)絡(luò )中,沒(méi)有節點(diǎn)的注冊,節點(diǎn)可以自由地加入和離開(kāi)。因此,攻擊者可以創(chuàng )建足夠多的Sybils或sockpuppet節點(diǎn)來(lái)打破系統的一致性保證。Sybil攻擊是由John Douceur在2002年正式形式化,并借助于密碼學(xué)基礎設施——工作量證明——來(lái)化解它。
2.1起源(The origins)
為了理解工作量證明,我們來(lái)看看它的起源。今天被稱(chēng)為工作量證明的第一次提出是由Cynthia Dwork和Moni Naor于1992年創(chuàng )建的。他們的目標是阻止垃圾郵件。請注意,垃圾郵件,Sybil攻擊和拒絕服務(wù)都是大致類(lèi)似的問(wèn)題:與常規用戶(hù)相比,攻擊者通過(guò)網(wǎng)絡(luò )增大其影響力。工作量證明適用于三方防御。在Cynthia Dwork和Moni Naor的設計中, 電子郵件收件人只會(huì )處理那些附帶有證明——發(fā)件人執行了適量計算工作——的電子郵件,即“工作量證明”。 計算工作量證明在普通計算機上可能需要幾秒鐘的時(shí)間。因此,對普通用戶(hù)來(lái)說(shuō)不會(huì )造成任何困難,但是對于垃圾郵件發(fā)送者,在使用等效硬件的條件下,希望發(fā)送一百萬(wàn)封電子郵件則需要幾周的時(shí)間,
請注意, 工作量證明(也稱(chēng)為難題解決)必須特定于電子郵件以及收件人。 否則,垃圾郵件發(fā)送者將能夠向同一個(gè)收件人發(fā)送多個(gè)郵件(或者向多個(gè)收件人發(fā)送相同的郵件),而成本和一對一發(fā)送是一樣的。第二個(gè)重要的特點(diǎn)是它應該給收件人僅造成最小的計算負擔;難題解決方案應該是易于驗證的 ,無(wú)論他們計算多么困難。此外,Cynthia Dwork和Moni Naor認為帶有后門(mén)的功能——這是中心權威機構所知道的一個(gè)秘密——可以讓權威機構在不做工作量證明的情況下解決問(wèn)題。一個(gè)可能的應用程序后門(mén)是為權威機構開(kāi)放一個(gè)發(fā)送郵件不產(chǎn)生成本的郵件列表。Cynthia Dwork和Moni Naor的提案包含三個(gè)滿(mǎn)足其性質(zhì)的候選難題,并啟動(dòng)了整個(gè)研究領(lǐng)域,我們將再次回到這個(gè)主題。
2.2哈?,F金(Hashcash)
一個(gè)非常類(lèi)似的名為hashcash的想法是在1997年由當時(shí)是cypherpunk社區的博士后研究員Adam Back獨立發(fā)明的。Cypherpunk社員是反政府和反中心機構力量的活動(dòng)家,并致力于通過(guò)密碼學(xué)推動(dòng)社會(huì )和政治變革。Adam Back是注重實(shí)踐的人:他首先發(fā)布的是hashcash軟件,五年后的2002年才發(fā)布Internet草案(標準化文件)和論文(文獻4)。
Hashcash比Cynthia Dwork和Moni Naor的想法簡(jiǎn)單得多:它沒(méi)有后門(mén),也不需要中心權威,它只使用哈希函數而不是數字簽名。 Hashcash基于一個(gè)簡(jiǎn)單的原理:哈希函數在某些實(shí)際用途中表現為隨機函數,這意味著(zhù)找到哈希到特定輸出的輸入的唯一方法是嘗試各種輸入,直到產(chǎn)生期望的輸出為止。而且,找到哈希到任意一組輸出的輸入的唯一方法是再次逐個(gè)嘗試對不同的輸入進(jìn)行哈希。 所以,如果讓你嘗試找到一個(gè)輸出哈希值以10個(gè)零開(kāi)始的輸入(二進(jìn)制),你將不得不嘗試大量的輸入,你會(huì )發(fā)現每個(gè)輸出從10個(gè)零開(kāi)始的機會(huì )都是(1/2)^10,這意味著(zhù)你將不得不嘗試(2)^10個(gè)輸入的順序,或大約1000個(gè)哈希計算。
顧名思義,在hashcash中,Adam Back把工作量證明看作一種貨幣形式。在他的網(wǎng)站上,他把這種貨幣定位為David Chaum的DigiCash實(shí)現選擇之一——一個(gè)由銀行向用戶(hù)發(fā)放無(wú)法追蹤的數字現金(digital cash)的系統。他甚至在技術(shù)設計上做了一些權衡設計,使其顯得更像一種貨幣。后來(lái),Adam Back評論認為比特幣就是hashcash的直接擴展。但是,hashcash并不是現金,因為它沒(méi)有防止雙重支出(雙花)的保護。Hashcash的令牌不能在對等同伴之間交換。
同時(shí),在學(xué)術(shù)領(lǐng)域中,研究人員發(fā)現,除了垃圾郵件之外, 工作量證明還有很多應用場(chǎng)景 ,例如防止拒絕服務(wù)攻擊(文獻25),確保網(wǎng)絡(luò )分析的真實(shí)性(文獻17),速率限制密碼在線(xiàn)猜測(文獻38)等。順便說(shuō)一句,工作量證明這個(gè)詞是有由Markus Jakobsson和Ari Juels在1999年撰寫(xiě)的一篇論文中首次提出來(lái)的,這篇論文也是到那時(shí)為止對這一研究的很好綜述(文獻24)。值得注意的是,這些研究人員似乎并不知道到hashcash,各自獨立地朝著(zhù)基于哈希的工作量證明的方向匯集,這在Eran Gabber等人的論文以及Juels(文獻18)和Brainard(文獻25)的論文中都有提及(本文中使用的許多術(shù)語(yǔ)是在有關(guān)論文發(fā)表后很長(cháng)時(shí)間才成為標準術(shù)語(yǔ)的)。
側邊欄:Sybil-對抗網(wǎng)絡(luò )(Sybil-resistant networks)
John Douceur在他關(guān)于Sybil攻擊的論文中提出,所有參與BFT協(xié)議的節點(diǎn)都需要解決hashcash難題。如果一個(gè)節點(diǎn)偽裝成N個(gè)身份,將無(wú)法及時(shí)解決N個(gè)難題,其偽造的身份將被清除。然而,惡意節點(diǎn)仍然可以獲得比只聲稱(chēng)單一身份的誠實(shí)節點(diǎn)有更多的優(yōu)勢。2005年發(fā)布的后續文章(文獻1)中提出,誠實(shí)的節點(diǎn)應該反過(guò)來(lái)模仿惡意節點(diǎn)的行為,并聲稱(chēng)其計算能力能夠承擔的盡可能多的虛擬身份。 利 用這些虛擬身份執行BFT協(xié)議,原來(lái)的假設“最多只有部分f節點(diǎn)故障”可以用“由故障節點(diǎn)控制的總計算能力的分數至多為f ”來(lái)代替。 因此,不再需要驗證身份,并且開(kāi)放的對等網(wǎng)絡(luò )可以運行BFT協(xié)議,比特幣恰好使用了這個(gè)想法,但中本聰提出了一個(gè)進(jìn)一步的問(wèn)題:什么激勵節點(diǎn)執行昂貴的工作量證明計算呢?答案需要進(jìn)一步的飛躍:數字貨幣(digital currency)。
2.3工作量證明和數字現金:雙環(huán)困境(Proof of work and digital cash: A catch-22)
你可能知道,作為反垃圾郵件措施, 工作量證明沒(méi)有成功應用于其發(fā)源的應用。 一個(gè)可能的原因是不同設備解決難題的速度有巨大差異。這意味著(zhù)垃圾郵件發(fā)送者可以用小額的投資來(lái)定制硬件,就可以將濫發(fā)垃圾郵件的速率提高幾個(gè)數量級。 在經(jīng)濟學(xué)中,對生產(chǎn)成本不對稱(chēng)的自然反應是進(jìn)行貿易——即,工作量證明的交易市場(chǎng)。 但是,這里就是一個(gè) 雙環(huán)困境 (catch-22),因為這將需要一個(gè)可以工作的數字貨幣(digital currency)。事實(shí)上,正是因為缺乏這樣的貨幣,導致了工作量證明使用的最大動(dòng)機不足。這個(gè)問(wèn)題的一個(gè)粗暴的解決辦法是宣布難題解決方案是現金,正如hashcash試圖做的那樣。

*譯注:雙環(huán)困境,一般指互相抵觸之規律或條件所造成的無(wú)法脫身的困窘;或者是不合邏輯的或矛盾的問(wèn)題。例如這就是一個(gè)相互矛盾的困窘:沒(méi)有人想要支持你除非你已經(jīng)成功了,但是如果沒(méi)有人支持,你怎么可能成功呢?
在比特幣之前的兩篇文章中發(fā)現了更為清晰的方案來(lái)將難題解決作為現金來(lái)處理,文章分別描述了b-money(文獻13)和bit gold(文獻42)。這些方案提供時(shí)間戳服務(wù),用來(lái)簽署錢(qián)的創(chuàng )建(通過(guò)工作量證明),并且一旦創(chuàng )建了錢(qián),就可以簽署轉賬。但是,如果服務(wù)器或節點(diǎn)之間出現總賬本不一致的情況,文章則沒(méi)有給出明確的解決辦法。依靠多數原則來(lái)決定似乎是兩位作者的文章的隱含之意,但是由于Sybil問(wèn)題,這些機制并不是很安全,除非有一個(gè)gatekeeper控制網(wǎng)絡(luò )的進(jìn)入,或者Sybil對抗本身是通過(guò)工作量證明來(lái)實(shí)現的。
3 組合創(chuàng )新(Putting it all together)
通過(guò)了解所有這些貢獻了比特幣各種設計細節的前輩,你會(huì )體會(huì )到中本聰真正天才般的創(chuàng )新。在比特幣中,難題解決方案不能自我構建成為現金,相反,他們只是用來(lái)保護總賬本。而工量作證明的解決是由專(zhuān)門(mén)的實(shí)體稱(chēng)為礦工來(lái)完成的(雖然中本聰低估了專(zhuān)業(yè)采礦將如何實(shí)現)。
礦工們需要不斷地相互競爭,尋找下一個(gè)難題解決方案。每個(gè)礦工都要解決這個(gè)難題的一個(gè)稍微不同的變體,因此成功的機會(huì )與礦工控制的全球采礦能力的一部分成正比。解決難題的礦工貢獻了基于鏈式時(shí)間戳的總賬本的下一個(gè)批次,或者區塊(即下一個(gè)交易)。通過(guò)維護和交換總賬本,貢獻一個(gè)區塊的礦工將會(huì )獲得一個(gè)新挖到貨幣的一份獎勵。很有可能的是,如果一名礦工貢獻了一個(gè)無(wú)效的區塊或交易,將會(huì )被大多數其他貢獻下一區塊的礦工拒絕,從而使無(wú)效區塊的獎勵失效。這樣,由于金錢(qián)上的激勵,礦工們確保了彼此都遵循同樣的協(xié)議。
比特幣巧妙地避免了困擾“工作量即現金(proof-of-work-as-cash)”機制的雙重支出(double-spending,雙花)問(wèn)題,因為它避開(kāi)了難題解決方案本身的價(jià)值。 事實(shí)上,比特幣實(shí)現了難題解決方案與經(jīng)濟價(jià)值的兩倍脫鉤:生產(chǎn)一個(gè)區塊所需的工作量是一個(gè)浮動(dòng)參數(與全球采礦能力成正比),而且更進(jìn)一步每個(gè)區塊發(fā)放的比特幣數也不是固定的。 區塊獎勵(也就是新的比特幣是如何挖出的)每四年設定一半(在2017年,獎勵是12.5比特幣/塊,從最初50比特幣/塊減半而來(lái))。比特幣包含了一個(gè)額外的獎勵計劃——即交易發(fā)起者向具有包含該交易的區塊的礦工支付交易費用,并且期望由市場(chǎng)決定交易費用和礦工的報酬。
那么, 中本聰的天才并不是比特幣的任何單個(gè)組成部分,而是創(chuàng )造了一種復雜方式——把各種技術(shù)融合在一起為整個(gè)系統注入生命活力。 客觀(guān)的說(shuō), 時(shí)間戳和拜占庭協(xié)議的研究人員沒(méi)有觸及節點(diǎn)激勵問(wèn)題,直到2005年,也沒(méi)有使用工作量證明來(lái)消除節點(diǎn)身份問(wèn)題 。 反過(guò)來(lái)說(shuō), hashcash,b-money和bit gold的作者并沒(méi)有吸收共識/一致性算法的思想來(lái)解決雙重支出(雙花)問(wèn)題 。在比特幣中,一個(gè)安全的總賬本才能防止雙重支出(雙花)問(wèn)題,從而確保貨幣有價(jià)值。有價(jià)值的貨幣才能獎勵礦工,然后保證采礦力量的強度才能保證總賬本的安全。如果沒(méi)有足夠采礦力量,一個(gè)對手可能會(huì )占據全球50%以上的采礦能力,從而能夠比網(wǎng)絡(luò )的其他部分更快地生成數據塊,然后雙重支付交易,并有效地重寫(xiě)歷史記錄,使得整個(gè)系統赤字。因此, 比特幣是自舉的,在總賬本,貨幣,礦工這三個(gè)組件之間有一個(gè)閉環(huán)的依賴(lài)關(guān)系。 中本聰面臨的挑戰不僅僅在于設計,而是能夠說(shuō)服最初的用戶(hù)和礦工社區一起,面向未知的時(shí)代,縱身一躍:那個(gè)時(shí)候比薩的價(jià)格超過(guò)了10000比特幣,網(wǎng)絡(luò )的采礦能力還不到今天的萬(wàn)億分之一。
側邊欄:智能合約(Smart contracts)
一個(gè)智能合約就是把數據放在一個(gè)安全的總賬本中,并將智能合約擴展到計算。換句話(huà)說(shuō),它是一個(gè)公開(kāi)指定程序正確執行的共識協(xié)議。用戶(hù)可以調用智能合約程序中的功能,并服從程序指定的任何限制,并且功能代碼由礦工串聯(lián)執行。用戶(hù)可以信任輸出而不必重做計算,并可以編寫(xiě)自己的程序來(lái)處理其他程序的輸出。通過(guò)與加密貨幣(cryptocurrency)平臺相結合,智能合約尤其強大,因為上述程序可以處理資金——擁有,轉讓?zhuān)N(xiāo)毀,在某些情況下甚至可以打印。
比特幣實(shí)現一種限制性編程語(yǔ)言作為智能合約。一個(gè)“標準”交易(即將貨幣從一個(gè)地址轉賬另一個(gè)地址的交易)就是用這種語(yǔ)言實(shí)現的簡(jiǎn)短腳本。以太坊(Ethereum)提供更寬容和強大的語(yǔ)言。
智能合約的想法是由Nick Szabo在1994年提出的(文獻41),因為可以類(lèi)比于法律合同(智能合約比法律合同多了自動(dòng)執行的功能),所以命名為智能合約。Nick Szabo早就預見(jiàn)性(這個(gè)觀(guān)點(diǎn)已經(jīng)被Karen Levy (文獻31)和Ed Felten 所批評(文獻16))的提出了 智能合約作為數字現金協(xié)議的擴展,并且認識到拜占庭協(xié)議和數字簽名(等等)可以作為構建模塊。 加密貨幣的成功使智能合約成為現實(shí),對這個(gè)話(huà)題的研究也開(kāi)始興起。例如,編程語(yǔ)言研究人員已經(jīng)調整了他們的方法和工具,以自動(dòng)發(fā)現智能合同中的錯誤并寫(xiě)出可校驗正確的智能合約。
3.1公鑰即身份(Public keys as identities)
本文基于這樣一個(gè)理解:一個(gè)安全的總賬本使創(chuàng )建數字貨幣(digital currency)更加容易。讓我們再回顧這個(gè)斷言。當Alice希望支付Bob時(shí),她將交易廣播給所有的比特幣節點(diǎn)。一個(gè)交易只不過(guò)是一個(gè)字符串:一個(gè)聲明“Alice希望支付給Bob一些錢(qián)”并由Alice簽名。最終,這個(gè)聲明被礦工記入總賬本,交易即成為現實(shí)。請注意,這個(gè)過(guò)程中并不要求Bob以任何方式參與。但是讓我們把注意力放在這次交易的缺席者:顯然缺席的是Alice和Bob的身份;相反,交易只包含他們各自的公鑰。 這就是比特幣的一個(gè)重要的概念:公鑰是系統中唯一的身份。 交易向公鑰傳入或者傳出價(jià)值,這個(gè)公約就稱(chēng)為地址。
*譯者注:從這個(gè)地址概念的引入,對比傳統的分布式系統,中本聰的創(chuàng )新很巧妙。
為了能夠“說(shuō)出”一個(gè)身份,你必須知道相應的密鑰。你可以隨時(shí)創(chuàng )建一個(gè)新的身份——方法是生成一個(gè)新的密鑰對——而不需要中心機構或注冊機構。你不需要申請用戶(hù)名或通知其他人你已選擇了特定的名稱(chēng)——這是去中心化身份管理的概念——比特幣沒(méi)有指定Alice如何告訴Bob她的化名(Pseudonyms)是什么,這是系統外部的。
與當今大多數其他支付系統截然不同,這些想法相當“古老”,可以追溯到數字現金(digital cash)之父David Chaum。實(shí)際上,David Chaum也對匿名網(wǎng)絡(luò )做了開(kāi)創(chuàng )性的貢獻,正是在這個(gè)背景下,他發(fā)明了這個(gè)“數字化名”( Digital Pseudonyms)這個(gè)創(chuàng )意。在他1981年的論文“Untraceable Electronic Mail, Return Addresses, and Digital Pseudonyms(文獻9)” 他說(shuō):“數字化名”是一個(gè)公鑰,用來(lái)驗證由相應私鑰的匿名持有者是否取得簽名。
現在, 只有通過(guò)公鑰才知道收件人是一個(gè)明顯的問(wèn)題:無(wú)法將郵件路由到正確的計算機。 這導致了David Chaum方案的效率極低:匿名交易,不能消除。與集中支付系統相比,比特幣同樣效率極低:包含每個(gè)交易的總賬由系統中的每個(gè)節點(diǎn)維護。無(wú)論如何,比特幣選擇了安全而同時(shí)選擇了低效率,從而實(shí)現了“免費”的匿名性(即公鑰作為身份)。David Chaum在1985年的論文(文獻11),把這些想法推進(jìn)了一步,他提出了一種基于普遍“化名”隱私保護電子商務(wù)愿景,以及數字現金(digital cash)背后的關(guān)鍵思想——“盲簽名(blind signatures)”。
“公鑰即身份”的思想也存在于前面討論過(guò)的比特幣的先驅性質(zhì)的文獻中:b-money 和 bit gold。但是,大部分工作都建立在David Chaum的基礎上,而David Chaum自己后來(lái)的工作(包括電子現金)都偏離了這個(gè)想法。Cypherpunk社區對隱私保護的通訊和商務(wù)有濃厚的興趣,他們擁抱了他們稱(chēng)之為nyms的“化名”。但對他們來(lái)說(shuō),nyms不僅僅是密碼身份(即公鑰),而是通常與公鑰相關(guān)的電子郵件地址。同樣,伊恩·戈德堡(Ian Goldberg)的論文——后續匿名通訊工作的基礎——贊成David Chaum的觀(guān)點(diǎn),但是認為“化名”nyms應該是人們容易記住的用證書(shū)綁定的綽號。因此,比特幣被證明是David Chaum思想最成功的例子。
4 區塊鏈(The Blockchain)
到目前為止,本文沒(méi)有提到區塊鏈。如果你相信炒作,區塊鏈是比特幣的主要發(fā)明??赡軙?huì )讓你大吃一驚的是,中本聰壓根沒(méi)有提到這個(gè)詞。實(shí)際上,區塊鏈這個(gè)技術(shù)術(shù)語(yǔ)沒(méi)有標準的技術(shù)定義,但是被各方用來(lái)指稱(chēng)與比特幣和總賬本有不同程度相似的系統。
討論受益于區塊鏈的示例應用程序將有助于澄清該術(shù)語(yǔ)的不同用途。首先,考慮一個(gè)銀行財團之間交易的數據庫后端,交易在每天結束時(shí)呈網(wǎng)狀結構,賬戶(hù)由中央銀行結算。這樣一個(gè)體系有少數的明確的各方,所以中本聰的共識將是矯枉過(guò)正的。也不需要區塊鏈上的貨幣,因為賬戶(hù)是以傳統貨幣計價(jià)的。另一方面,鏈式時(shí)間戳顯然是有用的,至少可以確保在網(wǎng)絡(luò )延遲的情況下實(shí)現一致的全局事務(wù)排序。狀態(tài)復制也是有用的:一家銀行會(huì )知道,其本地數據副本與中央銀行用來(lái)結算賬戶(hù)的數據是一樣的。這使銀行擺脫了目前必須執行的代價(jià)高昂的協(xié)調過(guò)程。
其次,考慮一個(gè)資產(chǎn)管理應用程序,例如追蹤金融證券,房地產(chǎn)或任何其他資產(chǎn)所有權的文檔登記冊。使用區塊鏈可以提高互操作性,降低進(jìn)入門(mén)檻。我們希望有一個(gè)安全的全球文檔登記冊,最好能讓公眾參與。這本質(zhì)上是20世紀90年代和新千年時(shí)代的時(shí)間戳服務(wù)所提供的。公共區塊鏈提供了一個(gè)特別有效的方法來(lái)實(shí)現這一點(diǎn)(數據本身可能被存儲在鏈外,只有元數據存儲在鏈上)。其他應用程序也受益于時(shí)間戳或“公告板”抽象,最顯著(zhù)的是電子投票。
讓我們繼續資產(chǎn)管理的例子。假設你想通過(guò)區塊鏈執行資產(chǎn)交易,而不是僅僅保存交易記錄。如果資產(chǎn)本身在區塊鏈以數字形式發(fā)行,并且區塊鏈支持智能合約,則可以進(jìn)行交易。在這種情況下, 智能合約解決了確保只有在資產(chǎn)轉移時(shí)才進(jìn)行支付的“公平交換”問(wèn)題。 更一般地說(shuō),智能合約可以對復雜的業(yè)務(wù)邏輯進(jìn)行編碼,只要所有必要的輸入數據(資產(chǎn),價(jià)格等)都在區塊鏈上表示出來(lái)。
這種區塊鏈屬性與應用程序的映射使我們不僅能夠欣賞其潛力,而且還能夠使我們注入極為需要的懷疑態(tài)度。首先,很多提議的區塊鏈應用,特別是在銀行業(yè),并沒(méi)有使用中本聰的共識機制。相反,他們使用總賬本數據結構和拜占庭協(xié)議(這些技術(shù),如前文所述,可以追溯到上個(gè)世紀90年代)。這就暗示了區塊鏈是一種新的革命性技術(shù)。相反,圍繞區塊鏈的嗡嗡聲(buzz)已經(jīng)幫助銀行發(fā)起集體行動(dòng)來(lái)部署共享總賬本技術(shù), 正如“石頭湯(stone soup)”的隱喻。 比特幣也是分散式賬本工作的一個(gè)非常明顯的概念證明,并且比特幣核心項目提供了一個(gè)便利的代碼庫,可以根據需要進(jìn)行調整。

*譯注: 《石頭湯》是一本根據法國民間故事改寫(xiě)的作品,但瓊·穆特把故事的場(chǎng)景設定在古代中國。三個(gè)和尚來(lái)到一個(gè)飽經(jīng)苦難的村莊,村民們長(cháng)年在艱難歲月中煎熬,心腸變得堅硬,不愿接納任何人??墒?,和尚們用煮石頭湯的方法,讓村民們不知不覺(jué)地付出了很多,明白了分享與幸福在真諦。
瓊·穆特,美國圖畫(huà)書(shū)作家和畫(huà)家曾在日本學(xué)習,醉心于日本和中國傳統文化。創(chuàng )作了很多具有東方哲學(xué)智慧的圖畫(huà)書(shū),比如《禪的故事》。
其次,有一個(gè)誤導性的說(shuō)法:區塊鏈通常比傳統的文檔登記更安全。要明白為什么,必須把系統或平臺的整體穩定性與終端安全(即用戶(hù)和設備的安全性)分開(kāi)。誠然,區塊鏈的系統性風(fēng)險可能低于許多中心機構,但區塊鏈的端點(diǎn)安全風(fēng)險遠遠高于傳統機構相應的風(fēng)險。區塊鏈交易幾乎是即時(shí)的,不可逆轉的,而且在公共區塊鏈中,設計為匿名交易。在基于區塊鏈的股票登記中,如果用戶(hù)(經(jīng)紀人或代理人)失去對其私人密鑰的控制權——只要手機丟失或在計算機上安裝了惡意軟件——則用戶(hù)將喪失其資產(chǎn)。比特幣黑客、盜竊和詐騙的非凡歷史并不會(huì )給人們帶來(lái)多大的信心,據估計,至少有6%的比特幣在流通中被盜過(guò)一次(文獻39)。
側邊欄:許可區塊鏈(Permissioned blockchains)
雖然這篇文章強調私人和許可區塊鏈并沒(méi)有使用比特幣的大部分創(chuàng )新,但這并不意味著(zhù)這個(gè)領(lǐng)域發(fā)生的有趣工作就很少。許可區塊鏈限制誰(shuí)可以加入網(wǎng)絡(luò ),寫(xiě)交易或挖礦(區塊)。特別是, 如果礦工被限制在一個(gè)值得信賴(lài)的參與者名單,則可以放棄工作量證明,以利于更傳統的BFT方法。 因此,大部分的研究都是BFT算法的重生,并且可以提出如下問(wèn)題:我們可以使用哈希樹(shù)來(lái)簡(jiǎn)化共識算法嗎?如果網(wǎng)絡(luò )只能以某種方式出現故障呢?
此外,圍繞身份和公共密鑰基礎設施,訪(fǎng)問(wèn)控制以及存儲在區塊鏈上的數據的機密性等話(huà)題,還有一些重要的考慮因素。這些問(wèn)題很大程度上不在公共區塊鏈中出現,也沒(méi)有被傳統的BFT文獻所研究。
最后,還有一項工程性工作是提高區塊鏈的吞吐量,并將其應用于各種業(yè)務(wù):比如供應鏈管理和金融技術(shù)。
5 經(jīng)驗總結(Concluding Lessons)
這里描述的歷史為從業(yè)人員和專(zhuān)業(yè)學(xué)者提供了豐富(和互補)的經(jīng)驗教訓。從業(yè)者應該對革命性技術(shù)的主張持懷疑態(tài)度。如前文所示,比特幣中那些引起企業(yè)興奮的大多數想法,例如分布式賬本和拜占庭協(xié)議,可以追溯到20年以上。 認識到你的問(wèn)題可能不需要任何突破性創(chuàng )新——在研究論文中可以找到那些長(cháng)期被遺忘的解決方案。
學(xué)術(shù)界似乎有相反的問(wèn)題,至少在這種情形下:抵制激進(jìn)的,外來(lái)的想法。比特幣白皮書(shū)的很多想法盡管都可以回溯其譜系,但比大多數學(xué)術(shù)研究更新穎。而且,中本聰不關(guān)心學(xué)術(shù)同行評議,也沒(méi)有完全把它與學(xué)術(shù)歷史聯(lián)系起來(lái)。因此在數年里,學(xué)術(shù)界幾乎完全忽視比特幣。許多學(xué)術(shù)團體非正式地認為,盡管比特幣事實(shí)上在實(shí)踐中運行的很好,但比特幣不可能基于過(guò)去系統的理論模型和經(jīng)驗的來(lái)運行。
我們一再看到,研究文獻中的創(chuàng )意可能會(huì )逐漸被遺忘或被忽略,特別是如果這些想法是超越它們的時(shí)代,甚至在流行的研究領(lǐng)域之外。 從業(yè)者和專(zhuān)業(yè)學(xué)者都應該回顧舊的創(chuàng )意,收集當前系統的見(jiàn)解。 比特幣的非凡和成功之處不在于它處于任何組件研究的前沿,而在于它整合了許多不相關(guān)領(lǐng)域的舊創(chuàng )意。 要做到這一點(diǎn)并不容易,因為它需要彌合不同的術(shù)語(yǔ),假設等,但這是創(chuàng )新的寶貴藍圖。
從業(yè)者應該能夠識別過(guò)度炒作的技術(shù)并因此受益。 識別技術(shù)炒作有一些指標:難以確定其技術(shù)創(chuàng )新;由于企業(yè)急于把自己的產(chǎn)品附加到流行趨勢上,所以難以確定所謂技術(shù)術(shù)語(yǔ)的含義;難以確定正在解決的問(wèn)題;最后,要求技術(shù)解決社會(huì )問(wèn)題或者制造經(jīng)濟/政治動(dòng)蕩。
相反,學(xué)術(shù)界卻難以推銷(xiāo)其發(fā)明。例如,不幸的是,最初的工作量證明研究人員沒(méi)有得到比特幣的信貸(credit for bitcoin),可能是因為這項工作在學(xué)術(shù)界以外并不為人所知。在學(xué)術(shù)界,諸如發(fā)布代碼和與從業(yè)者合作等活動(dòng)沒(méi)有得到充分的獎勵。事實(shí)上, 迄今為止,學(xué)術(shù)工作量證明的原始分支仍然不承認比特幣的存在! 與現實(shí)世界接觸不僅有助于獲得信貸(credit),而且還會(huì )減少輪子再造,并且是找到新創(chuàng )意。
評論