何蒲 于戈 張巖峰 鮑玉斌
2015年是區(qū)塊鏈元年,F(xiàn)intech上近期出現(xiàn)最頻繁的一個詞語就是“區(qū)塊鏈”。區(qū)塊鏈的出現(xiàn)始于 2008年末一個自稱為中本聰(Satoshi Nakamoto)的人或者團體發(fā)表在比特幣論壇的一篇論文《Bitcoin:A peer-to-peer electronic cash system》。該文指出區(qū)塊鏈技術是構(gòu)建比特幣系統(tǒng)的基礎技術,區(qū)塊鏈記錄著所有元數(shù)據(jù)和加密交易信息,從而建立了一個完全通過點對點(P2P)技術實現(xiàn)的電子現(xiàn)金系統(tǒng),此系統(tǒng)使得在線支付的雙方不用通過第三方金融機構(gòu)而直接進行交易。隨后比特幣系統(tǒng)大行其道,得到越來越多人的關注和研究,區(qū)塊鏈技術作為比特幣系統(tǒng)的底層技術也得以重視,由此拉開了研究區(qū)塊鏈技術的序幕。
區(qū)塊鏈技術是一項新技術,但它不是一種創(chuàng)新技術。它是將許多已有的跨領域的學科整合到一起,從而形成的一種技術,涉及數(shù)學、密碼學、計算機科學等領域。比特幣系統(tǒng)是第一個采用區(qū)塊鏈技術作為底層技術構(gòu)建的系統(tǒng),它是一個實現(xiàn)了去中心化、去信任化、安全、可靠的電子現(xiàn)金系統(tǒng)。
區(qū)塊鏈技術的迅猛發(fā)展引起了政府、金融機構(gòu)的廣泛關注。2016年初,中國央行表態(tài):積極推進官方發(fā)表的數(shù)字貨幣。隨后中國越來越多的金融以及科研機構(gòu)開始關注數(shù)字貨幣背后的創(chuàng)新技術,即區(qū)塊鏈技術;幾乎同一時間,英國政府發(fā)布區(qū)塊鏈專題研究報告,即《分布式賬本技術:超越區(qū)塊鏈》,大力發(fā)展區(qū)塊鏈在政府中的應用;此外,為在區(qū)塊鏈技術發(fā)展進程上占得先機,平安集團、招商銀行、中國外匯交易中心及民生銀行更是加入了R3國際聯(lián)盟(一家為全球金融市場設計和提供先進的分布式賬本技術的金融創(chuàng)新公司)。一切跡象表明區(qū)塊鏈技術正受到政府和金融機構(gòu)的青睞。
據(jù)麥肯錫研究報告指出:區(qū)塊鏈技術,是繼蒸汽機、電力、信息和互聯(lián)網(wǎng)科技之后,目前最有潛力觸發(fā)第5輪顛覆性革命浪潮的核心技術。
目前區(qū)塊鏈技術仍然處于萌芽期,特別是在學術方面的研究相對滯后,以谷歌學術和Web of Science為英文數(shù)據(jù)源的檢索結(jié)果顯示,關于區(qū)塊鏈(blockchain)的相關論文僅有30多篇,本文列舉其中的14篇。
本文將詳細介紹和分析區(qū)塊鏈的運行原理和關鍵技術,并探討區(qū)塊鏈的應用和發(fā)展趨勢。
本節(jié)簡要介紹與構(gòu)建區(qū)塊鏈相關的基礎技術。
哈希(也稱為散列)算法將任意長度的輸入值映射為較短的固定長度的二進制值。例如,SHA256算法就是將任意長度的輸入映射為長度為 256位的固定長度輸出,這個二進制值稱為哈希值(也稱為散列值)。數(shù)據(jù)的哈希值可以檢驗數(shù)據(jù)的完整性,一般用于快速查找和加密算法。
哈希算法廣泛應用于區(qū)塊鏈中,區(qū)塊鏈通常不保存原始數(shù)據(jù),而是保存該數(shù)據(jù)的哈希值,Merkle樹中的節(jié)點信息是兩次 SHA256哈希運算得到的。以太坊賬戶地址,是用Kec-cak-256哈希運算一個公鑰得到的;而比特幣地址,則是通過SHA256和RIPEMD160哈希運算一個公鑰而得到的。此外,簽名頻繁應用于區(qū)塊鏈中,它由私鑰和需要被簽名的數(shù)據(jù)經(jīng)哈希運算而成。著名的工作量證明算法、Merkle樹都是哈希算法的應用。
1.2.1 Merkle樹Merkle樹是由Ralph Merkle發(fā)明的一種基于數(shù)據(jù)哈希構(gòu)建的樹:1)其數(shù)據(jù)結(jié)構(gòu)是一棵樹,一般為二叉樹,也可以為多叉樹;2)其葉子節(jié)點是數(shù)據(jù)塊(如文件或文件集合)的哈希值;3)非葉子節(jié)點是其所有子節(jié)點的哈希值。
Merkle樹在驗證、文件對比中應用較多,特別是在分布式環(huán)境下,Merkle樹會大大減小數(shù)據(jù)的傳輸量和計算的復雜度。
1.2.2 區(qū)塊鏈中的Merkle樹區(qū)塊鏈中的每個區(qū)塊都包含了記錄于該區(qū)塊的所有交易,區(qū)塊鏈系統(tǒng)采用二叉樹型的Merkle樹對這些交易進行歸納表示,同時生成該交易集合的數(shù)字簽名。Merkle樹支持快速地歸納和校驗區(qū)塊中交易的完整性與存在性。
區(qū)塊鏈技術的發(fā)展受到比特幣應用需求的推動。比特幣作為數(shù)字貨幣,首先需要解決“重復支付(double spending)”問題,即一筆貨幣不能被花費兩次或者一筆資金不能出現(xiàn)在兩個交易中。中心化的信用系統(tǒng)(例如銀行)依靠國家機器的強制力來防止偽鈔,而區(qū)塊鏈系統(tǒng)完全依靠技術來解決“重復支付”問題。系統(tǒng)給每一筆交易蓋上正確的時間戳,以此證明在這個時刻這筆交易確實發(fā)生,交易中資金的所屬權(quán)已經(jīng)轉(zhuǎn)移,之前資金所有者再次使用這筆資金時就會報錯,從而解決重復支付問題。另外,每一個區(qū)塊也會蓋上正確的時間戳,從而形成一個按時間順序發(fā)展的正確鏈表。
工作證明(proof of work,POW),也稱為工作量的證明。比特幣系統(tǒng)利用 POW 機制使系統(tǒng)各節(jié)點最終達成共識,進而得到最終區(qū)塊。這里的工作是指找到一個合理的區(qū)塊哈希值,它需要不斷地進行大量的計算,計算時間取決于當前目標的難度和機器的運算速度。當一個節(jié)點找到這個值之后,就說明該節(jié)點確實經(jīng)過了大量的計算,這就是工作量證明。由于驗證只需對結(jié)果值進行一次哈希運算,因此POW的驗證效率很高。
相比POW浪費大量的算力,點權(quán)益證明(proof of stake,POS)僅僅需要少量的計算就能維持區(qū)塊鏈的正常運轉(zhuǎn)。這種機制根據(jù)貨幣持有量和時間來分配相應的利息。但是這種機制存在一點不足,即區(qū)塊的產(chǎn)生沒有消耗大量算力,導致這種機制下的貨幣價值來源難以確定,因為任何區(qū)塊鏈系統(tǒng)都可以實現(xiàn)。
P2P網(wǎng)絡技術又稱為點對點技術,它是一個沒有中心服務器、依靠用戶群交換信息的互聯(lián)網(wǎng)體系。P2P網(wǎng)絡由于沒有中心化服務器,使得它天生具有耐攻擊、高容錯的優(yōu)點;并且各個節(jié)點地位平等,服務分散在各個節(jié)點上進行,因此部分節(jié)點或網(wǎng)絡遭到攻擊對整個系統(tǒng)幾乎沒有影響。比特幣系統(tǒng)應用 P2P技術,使各個節(jié)點獨立地參與系統(tǒng),每個節(jié)點都是一個獨立的個體,單獨節(jié)點宕機或者遭到攻擊都不會對系統(tǒng)造成影響。
非對稱加密需要密鑰對即公鑰和私鑰成對出現(xiàn)。公鑰公開、私鑰保密,私鑰加密的信息只有對應的公鑰才能解開,公鑰加密的信息只有對應的私鑰才能解密,即公鑰加密,私鑰解密;私鑰簽名,公鑰驗證。在比特幣系統(tǒng)中,公鑰由私鑰通過橢圓曲線加密算法生成;交易信息中必須要有正確的數(shù)字簽名才能驗證交易有效。
區(qū)塊鏈這一概念最早是在中本聰?shù)谋忍貛虐灼刑岢龅?,但它不是以區(qū)塊鏈出現(xiàn)的,而是以工作量證明鏈(proof-of-work chain)的形式存在。下面是中本聰對區(qū)塊鏈概念的敘述:時間戳服務就是通過對區(qū)塊中數(shù)據(jù)項加上時間戳進行哈希,并把這一哈希值廣泛地傳播出去,就像是新聞或者在世界性新聞網(wǎng)絡(Usenet)上的發(fā)帖一樣。顯然,要得到這個哈希值,就需證明在過去的某個時刻加上時間戳的數(shù)據(jù)必然存在。每個時間戳包含了先前的時間戳,這樣就形成了一條鏈,并且后面的時間戳都對前一個時間戳進行了增強。
關于區(qū)塊鏈的定義,各個機構(gòu)、權(quán)威都給予了不同的定義。
維基百科中文定義:區(qū)塊鏈是一種分布式數(shù)據(jù)庫,起源自比特幣。區(qū)塊鏈是一串使用密碼學方法相關聯(lián)產(chǎn)生的數(shù)據(jù)塊,每一個數(shù)據(jù)塊中包含了一次比特幣網(wǎng)絡交易的信息,用于驗證其信息的有效性(防偽)和生成下一個區(qū)塊。中本聰創(chuàng)建的第一個區(qū)塊,即為“創(chuàng)世區(qū)塊”。
維基百科英文定義:區(qū)塊鏈由包含一系列加蓋了時間戳的有效交易的區(qū)塊組成。每個區(qū)塊都包含了前一個區(qū)塊的哈希值,這樣就把區(qū)塊連接在了一起。連接在一起的區(qū)塊形成區(qū)塊鏈,并且每一個隨后的區(qū)塊都是對之前一個區(qū)塊的增強,因此給它取了一個數(shù)據(jù)庫類型的名字。
巴比特網(wǎng)站:區(qū)塊鏈是由一串使用密碼學方法產(chǎn)生的數(shù)據(jù)庫組成的,每一個區(qū)塊都包含了上一個區(qū)塊的哈希值,從創(chuàng)世區(qū)塊開始連接到當前區(qū)塊,形成區(qū)塊鏈。每一個區(qū)塊都確保按照時間順序在上一個區(qū)塊之后產(chǎn)生,否則前一個區(qū)塊的哈希值是未知的。這些特征使得比特幣的重復支付(double-spending)變得困難。
以上是不同機構(gòu)、權(quán)威對區(qū)塊鏈的定義,雖然有不同,但本質(zhì)上都一樣,即區(qū)塊鏈擁有去中心化、去信任化、開放、信息不可更改、匿名、自治的特性。下面總結(jié)概括區(qū)塊鏈的概念:區(qū)塊鏈是指一種電子記錄形式的賬簿,其中每一個區(qū)塊是賬簿的一頁,從第一頁“鏈接”到最新一頁。這些區(qū)塊一旦被確認,幾乎不能做修改操作,每個區(qū)塊包含了當前一段時間內(nèi)的所有交易信息和區(qū)塊元數(shù)據(jù)。
自2009年起,各種各樣基于區(qū)塊鏈的類比特幣的數(shù)字貨幣相繼出現(xiàn),常見的有:bitcoin,litecoin,eth,etc,dogecoin及最新的堪比比特幣的零幣Zcash。區(qū)塊鏈除了在貨幣上的應用之外,還有各種衍生應用,如文件存儲系統(tǒng) Storj、預測市場系統(tǒng)Augur、電子商務系統(tǒng)OpenBazaar、智能合約系統(tǒng)等。
區(qū)塊鏈的進化過程如下:
1)區(qū)塊鏈1.0——數(shù)字貨幣;
2)區(qū)塊鏈2.0——數(shù)字資產(chǎn)與智能合約;
3)區(qū)塊鏈3.0——從 DAO,DAC(區(qū)塊鏈自洽組織、區(qū)塊鏈自洽公司)到區(qū)塊鏈社會(科學、醫(yī)療、教育等)。
區(qū)塊鏈分為 3類:公有、私有及行業(yè)區(qū)塊鏈。私有鏈和行業(yè)鏈是廣義的私鏈。
公有區(qū)塊鏈(簡稱公有鏈)是指任何個體或者團體都共用一條區(qū)塊鏈,只要接入此鏈都可以在上面發(fā)送交易,并且交易能夠獲得該區(qū)塊鏈的有效確認,任何團體或個人都可以參與其共識過程。公有區(qū)塊鏈是最先出現(xiàn)的區(qū)塊鏈,也是目前應用最為廣泛的區(qū)塊鏈,這類區(qū)塊鏈被認為是“完全去中心化”的。
行業(yè)區(qū)塊鏈(簡稱行業(yè)鏈)指共識過程受到某些預選節(jié)點控制的區(qū)塊鏈。由該行業(yè)集體內(nèi)部首先指定多個預選節(jié)點為記賬人,每個區(qū)塊的生成是由所有的預選節(jié)點共同決定的(預選節(jié)點決定區(qū)塊鏈的共識),其他節(jié)點只能接入?yún)^(qū)塊鏈負責交易,但不參與共識過程,任何人都可以通過此區(qū)塊鏈對外開放的API進行有限查詢。這類區(qū)塊鏈被認為是“部分去中心化”的。
私有區(qū)塊鏈(簡稱私有鏈)指僅僅使用區(qū)塊鏈這一技術進行記賬操作,但它不對外公開。它的對象可以是一個公司也可以是個人,單獨擁有此區(qū)塊鏈的寫入權(quán)限,或許會對外開放有高度限制的讀取權(quán)限。目前金融巨頭都在探索自己的私有區(qū)塊鏈,既應用到區(qū)塊鏈的特性,又能保證安全。
行業(yè)鏈結(jié)合了公有鏈的完全開放和私有鏈的高度集中,提供了一種混合折中的模式;而私有鏈由于完全限制的寫入權(quán)限和高度受限的讀取權(quán)限,對于保護個人隱私非常合適。
2.4.1 區(qū)塊結(jié)構(gòu)區(qū)塊鏈技術中,區(qū)塊是指一種數(shù)據(jù)結(jié)構(gòu),它包含兩部分:區(qū)塊元數(shù)據(jù)和區(qū)塊體。其中區(qū)塊元數(shù)據(jù)記錄的是區(qū)塊的元數(shù)據(jù)信息,區(qū)塊體記錄的是從上一區(qū)塊產(chǎn)生到此區(qū)塊創(chuàng)建之間所發(fā)生的所有交易。區(qū)塊元數(shù)據(jù)包含區(qū)塊大小、區(qū)塊頭和交易計數(shù)器3部分。
2.4.2 區(qū)塊頭結(jié)構(gòu)區(qū)塊頭由兩組元數(shù)據(jù)組成,一組與挖礦有關,包括時間戳、難度目標及Nonce值;另一組則與區(qū)塊本身有關,包括鏈接父區(qū)塊的字段、版本號及 Merkle樹的根。
將區(qū)塊中所有交易記錄都進行兩次哈希運算之后,將結(jié)果作為Merkle樹的葉子節(jié)點,然后遞歸兩個相鄰節(jié)點的哈希值,直到得到最后一個哈希結(jié)果,此哈希值就是Merkle根。
難度目標 Bits是一種特殊的浮點編碼類型,占4 Byte,首字節(jié)是指數(shù),僅用其中的最低 5位,后3個字節(jié)是尾數(shù),它能夠表示 256位的數(shù)。一個區(qū)塊頭的 SHA256哈希值必須小于或等于 Bits難度目標才能被整個網(wǎng)絡認可,難度目標 Bits值越小,產(chǎn)生一個新區(qū)塊的難度就越大,即目標值越小,得到正確結(jié)果的區(qū)間就越小,難度就越大。
Nonce字段是指隨機數(shù),各個區(qū)塊頭的值往往不同,但它卻是從0開始嚴格按照線性方式增長的隨機數(shù),每次計算都會增長。挖礦就是來尋找一個滿足條件的Nonce值。
2.4.3 區(qū)塊標識符每個區(qū)塊有兩種標識符:區(qū)塊頭哈希值和區(qū)塊高度。這兩個字段都沒有被真正記錄下來,因為這兩個字段可以直接被計算出來。
區(qū)塊的主標識符是它的區(qū)塊頭哈希值,通過對區(qū)塊頭6個字段進行兩次 SHA256哈希計算得到數(shù)字簽名,產(chǎn)生的256位的值被稱為區(qū)塊頭哈希值,簡稱為區(qū)塊哈希值。例如000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f是比特幣創(chuàng)世區(qū)塊的區(qū)塊哈希值。區(qū)塊哈希值可以唯一、確切地標識一個區(qū)塊,并且任何節(jié)點都可以對區(qū)塊頭進行獨立計算從而得到該區(qū)塊的哈希值。但是為了方便從磁盤檢索區(qū)塊,可能會把哈希值作為元數(shù)據(jù)存儲在一個獨立的數(shù)據(jù)庫表中。
區(qū)塊的第2個標識是區(qū)塊高度,創(chuàng)世區(qū)塊的高度為0,通過識別該區(qū)塊在區(qū)塊鏈中的“深度”來確定一個區(qū)塊。每一個之后產(chǎn)生的區(qū)塊都比當前最新的區(qū)塊高出一個位置。2016年11月1日的區(qū)塊高度大約是436867,這說明已經(jīng)有436867個區(qū)塊被堆疊在2009年1月創(chuàng)建的這個區(qū)塊上。
區(qū)塊的第2個標識是區(qū)塊高度,創(chuàng)世區(qū)塊的高度為0,通過識別該區(qū)塊在區(qū)塊鏈中的“深度”來確定一個區(qū)塊。每一個之后產(chǎn)生的區(qū)塊都比當前最新的區(qū)塊高出一個位置。2016年11月1日的區(qū)塊高度大約是436867,這說明已經(jīng)有436867個區(qū)塊被堆疊在2009年1月創(chuàng)建的這個區(qū)塊上。
與區(qū)塊哈希值不同,區(qū)塊高度并不是唯一的標識符。雖然一個區(qū)塊對應著一個確定的高度,反之卻不成立,即一個高度并不總能確定一個區(qū)塊,當區(qū)塊分叉發(fā)生時,兩個或者多個區(qū)塊競爭同一高度。
總之,一個區(qū)塊的區(qū)塊哈希值總是能唯一地識別出一個確切的區(qū)塊。一個區(qū)塊也有唯一的區(qū)塊高度。但是,一個特定的區(qū)塊高度并不是總能唯一地識別出一個特定區(qū)塊。
2.4.4 創(chuàng)世區(qū)塊創(chuàng)世區(qū)塊即區(qū)塊鏈系統(tǒng)中的第一個區(qū)塊,例如比特幣區(qū)塊鏈,它的第一個區(qū)塊創(chuàng)建于2009年,稱之為創(chuàng)世區(qū)塊。它是比特幣系統(tǒng)中所有區(qū)塊的共同祖先,這意味著比特幣區(qū)塊鏈中的任一區(qū)塊都可以回溯到第一個區(qū)塊。
比特幣創(chuàng)世區(qū)塊中包含一個隱藏的信息。在其coinbase中包含這樣一句話“The times 03/Jan/2009 chancellor on brink of second bailout forbanks”,且是泰晤士報當天的頭版頭條標題,且被留在創(chuàng)世區(qū)塊里永遠不可修改。引用這句話說明區(qū)塊鏈的時間戳服務可以用來進行存在性證明,正如上面所說,創(chuàng)世區(qū)塊記錄下了它產(chǎn)生的時間和當時正發(fā)生的事件,并且不能被修改。由此可以得到啟發(fā),區(qū)塊鏈技術將可以用來存儲信息,并且是一個存在性證明的最佳技術。
2.4.5 區(qū)塊的連接區(qū)塊鏈將數(shù)據(jù)庫的架構(gòu)進行了創(chuàng)新,它把數(shù)據(jù)信息分成塊,每個塊通過特定的字段鏈接到上一塊,并按順序連接起來,整個鏈囊括了所有完整的數(shù)據(jù),并且不可更改。從創(chuàng)世區(qū)塊開始,所有區(qū)塊逐個順接串聯(lián)起來就形成了區(qū)塊鏈。
(1)可靠開放性:區(qū)塊鏈的設計使它能夠有效預防故障與攻擊,51%攻擊除外(如果攻擊者擁有網(wǎng)絡中51%的算力,他就可以對區(qū)塊進行偽造,然后自己又最快地計算出正確的解,造成區(qū)塊鏈分叉,達到攻擊的目的)。所有參與系統(tǒng)的用戶共享一個公共區(qū)塊鏈,不會存在因為單點失效而導致系統(tǒng)故障的情況,從而保證了系統(tǒng)的可靠性和數(shù)據(jù)的可獲得性。
(2)信息透明性:網(wǎng)絡上的任何節(jié)點都可以查看整個賬本。由于記錄的交易信息不包含任何隱私,因此任何記錄在冊的信息都可以被查看,保證了數(shù)據(jù)的透明性。
(3)不可更改性:區(qū)塊鏈系統(tǒng)采取的是完全冗余的策略,所有完整節(jié)點都有一份完整數(shù)據(jù),要想更改某一區(qū)塊的數(shù)據(jù),必須保證所有完整節(jié)點數(shù)據(jù)被修改,這個情況幾乎不可能發(fā)生,因此降低了欺詐的風險。
(4)不可逆轉(zhuǎn)性:交易不存在撤銷操作,交易一旦被驗證認可,就不可再逆轉(zhuǎn)。
區(qū)塊鏈技術存在如下瓶頸。
(1)過大的完整賬本的存儲空間。現(xiàn)在,比特幣區(qū)塊鏈的容量達到了80 GB,并且還在逐日增加,對于想要運行完整區(qū)塊鏈的節(jié)點來說這無疑是一個很大的挑戰(zhàn)。
(2)信息分發(fā)采用全網(wǎng)廣播。這是一種洪泛式,要求網(wǎng)絡性能好。
(3)交易效率低下。比特幣交易效率主要受到兩個方面的影響:1)區(qū)塊產(chǎn)生時間;2)區(qū)塊大小?,F(xiàn)在的比特幣交易速度為7筆/秒,不適合處理實時交易。
(4)算力浪費。整個系統(tǒng)中,只有成功得到區(qū)塊合法記賬權(quán)的那部分算力得到了獎勵的回報,其他算力都是做無用功,浪費巨大。
(5)單個節(jié)點獨自升級,升級成本高。
區(qū)塊鏈系統(tǒng)的運行原理區(qū)塊鏈系統(tǒng)運行原理的基本算法如下。
1.節(jié)點發(fā)送交易
2.輸出
·生成{Blocki}
·廣播Blocki
3.刷新節(jié)點
所有節(jié)點接收和驗證交易:
·驗證交易
·If true
加入交易至緩沖區(qū)
4.創(chuàng)建區(qū)塊
所有節(jié)點計算一個哈希值:
·從緩沖區(qū)獲取交易
·構(gòu)建新區(qū)塊
·計算區(qū)塊頭的哈希值
hash{blockheader}
5.循環(huán)
If hash{block header}<Bits
轉(zhuǎn)至步驟2(輸出)
中本聰在其比特幣白皮書中非常詳細地介紹了區(qū)塊鏈系統(tǒng)的建立過程。
第1步新的交易向全網(wǎng)所有節(jié)點廣播;
第2步每個節(jié)點把收到的交易都寫入到一個區(qū)塊中;
第3步每個節(jié)點都在新的區(qū)塊上進行計算,尋找一個工作量證明解;
第4步某個節(jié)點找到工作量證明解時,就把其所在區(qū)塊向全網(wǎng)進行廣播;
第5步其他節(jié)點收到廣播的這個區(qū)塊后對其進行驗證,只有所有交易都被驗證是有效的且未被使用的之后,該區(qū)塊才能被認可;
第6步每個節(jié)點通過將此區(qū)塊的哈希值作為父哈希值來進行下一個區(qū)塊的計算,表示節(jié)點認可了此區(qū)塊有效。
一般情況下,一筆交易必須經(jīng)過至少 6次確認(在此區(qū)塊之后每產(chǎn)生一個區(qū)塊就是1次確認),才能最終在區(qū)塊鏈上被承認是合法交易。若達到 6次確認后要想修改記錄,花費代價太大,得不償失。
所謂“挖礦”,就是競爭區(qū)塊的合法記賬權(quán),在區(qū)塊鏈中,得到區(qū)塊的合法記賬權(quán)只有唯一一個方式,即“工作量證明”。用計算機反復計算區(qū)塊頭,直到得到滿足要求的“解”,即可得到這個區(qū)塊的記賬權(quán),也就是挖到了“礦”。
具體方法:用 SHA256算法不斷地對區(qū)塊頭和一個隨機數(shù)字nonce進行計算,直到計算出一個與預設值 bits相匹配的解,匹配的解指找到一個哈希值要小于或者等于目標哈希值bits。第一個找到這個解的礦工會獲得此區(qū)塊的記賬權(quán),并將此區(qū)塊發(fā)布到系統(tǒng)中讓其他節(jié)點進行驗證。
挖礦難度由比特幣網(wǎng)絡自動調(diào)整,實現(xiàn)平均每10分鐘產(chǎn)生一個區(qū)塊的平衡。平衡情況下每兩周應該產(chǎn)生2016個區(qū)塊(2016=2*7*24*6),兩周進行一次統(tǒng)計,統(tǒng)計出實際區(qū)塊數(shù)量和2016的差值,然后按照一定的百分比調(diào)整難度目標值來增大或減小難度目標 bits,以達到每 10分鐘一個區(qū)塊的平衡。
由于區(qū)塊鏈是去中心化的,沒有協(xié)調(diào)機構(gòu),加之網(wǎng)絡帶寬等不同,使得不同副本之間不能總是保持一致,存在著一定的時延。因此區(qū)塊有可能在不同時間到達不同節(jié)點,導致節(jié)點存在不同的區(qū)塊鏈視圖。區(qū)塊鏈為了達到共識,讓每一個節(jié)點總是選擇并嘗試延長最長的區(qū)塊鏈,最長指其計算難度累計最大。區(qū)塊鏈節(jié)點通過計算所有區(qū)塊頭中的難度總和,來得到建立這條鏈所要付出的工作量證明的總量。只要所有節(jié)點都選擇累計難度最長的區(qū)塊鏈,比特幣網(wǎng)絡最終就會達到共識,收斂到一致。
一般情況,分叉發(fā)生在兩名礦工幾乎在同一時間內(nèi)各自都找到了工作量證明解的時候。它們都向網(wǎng)絡發(fā)送各自的區(qū)塊,由于節(jié)點連接以及時延等原因,總是一部分節(jié)點先收到這個區(qū)塊,另一部分先收到另一個區(qū)塊,此時分叉就產(chǎn)生了。所有節(jié)點都用它們首先收到的區(qū)塊的哈希值進行下一個區(qū)塊的計算,同時保留另外一個區(qū)塊,因為它有可能成為“正確”的區(qū)塊。當下一個區(qū)塊產(chǎn)生時,各個節(jié)點選擇難度最長的鏈作為正確鏈,放棄難度較短的鏈,此時分叉就會消失。
Ethereum(以太坊)是一個平臺和一種編程語言,使開發(fā)人員能夠建立和發(fā)布下一代分布式應用。其在2013年由Vitalik Buterin提出,它的目的是為建立去中心化的應用創(chuàng)建一種可替代的協(xié)議,給一大類的去中心化的應用程序提供一組不同的平衡機制,這對需要快速開發(fā)、安全性要求低、很少使用的應用程序以及在不同應用之間能有效互動很重要。
以太坊是一個編程平臺,它提供了各種模板,用戶只需要把以太坊提供的各種模板鏈接到一起就能搭建自己的應用。因此,在以太坊上創(chuàng)建應用的成本大大減少、速度大大提高,這也造就了以太坊成為區(qū)塊鏈中最好的項目之一。具體來說,以太坊通過一種圖靈完備的腳本語言(ethereum virtual machine code,EVM語言)來創(chuàng)建應用,類似于匯編語言,但編寫以太坊應用并不需要直接使用EVM,而是使用Solidity,Serpent,LLL類編程語言,再通過編譯器轉(zhuǎn)換成 EVM 語言供以太坊平臺使用。
開發(fā)者可以通過以太坊這一平臺創(chuàng)建自己的區(qū)塊鏈應用。一般來講,以太坊上有3種應用:1)金融應用,包括電子貨幣、金融衍生品、對沖交易合約、存儲錢包、遺囑,甚至是一些最終的完善就業(yè)合同;2)半金融應用,這類應用涉及金錢,但不是完全看重金錢,也有重要的非金錢的應用,一個典型的例子就是為解決計算問題的自實施獎勵;3)非金融應用,例如在線投票和去中心化管理。
Hyperledger是Linux基金會于2015年發(fā)起的旨在推進區(qū)塊鏈技術發(fā)展的開源項目。它領導全球各行業(yè),包括金融、銀行、物聯(lián)網(wǎng)、供應鏈、制造以及技術領域等,在區(qū)塊鏈技術上進行合作,建立一個開放平臺,以滿足來自各行各業(yè)的不同需求,并簡化業(yè)務流程。
目前Hyperledger中主要有4個比較成熟的項目:Block-chain Explorer,F(xiàn)abric,Iroha和 Sawtooth Lake,本節(jié)只以Blockchain Explorer為例。
Blockchain Explorer是由Christopher Ferris (IBM),Dan Middleton (Intel)和 Pardha Vishnumolakala(DTCC)提出的孵化項目,旨在為Hyperledger創(chuàng)建一個用戶友好型的Web應用程序,用以查看/查詢區(qū)塊、事務和關聯(lián)數(shù)據(jù)、網(wǎng)絡信息(名稱、狀態(tài)、節(jié)點列表)、鏈碼/事務族(查看/調(diào)用/部署/查詢)以及存儲在賬本中的任何其他相關信息。
智能合約這一理念最早是在1994年出現(xiàn)的,幾乎和互聯(lián)網(wǎng)同時出現(xiàn)。這個術語是由密碼學家 Nick Szabo提出的,定義如下:一個智能合約是計算機協(xié)議,它促進、驗證或者執(zhí)行合約的協(xié)商或履行,或使合約條款不必要。核心上,這些智能合約的工作原理與任何其他編程語言中的 if-then語句類似,當滿足一個預先編好的條件時,智能合約就被觸發(fā)執(zhí)行相應的條款。
區(qū)塊鏈技術的出現(xiàn),使得智能合約再次活躍起來,并被認為是應用在區(qū)塊鏈技術上的又一熱門技術;并且重新定義了智能合約:智能合約是由事件驅(qū)動的、具有狀態(tài)的、運行在一個可復制和共享的賬本上、且能夠保管賬本上資產(chǎn)的程序。
智能合約與以太坊結(jié)合得最好,以太坊中有自己的虛擬機供智能合約使用;Siacoin文件存儲系統(tǒng)采用智能合約來規(guī)范用戶主機之間的存儲協(xié)議;而在Hyperledger中則稱其為chaincode。
智能合約可以應用在很多方面,例如:1)證券。智能合約狀態(tài)可以記錄證券所有權(quán)的所有信息,因此可以用來進行證券的登記和清算。2)智能遺囑?,F(xiàn)今網(wǎng)絡帶來便利的同時也存在弊端,例如個人在網(wǎng)上存有很多錢,但是親屬并不知道密碼,某天這個人去世了,那么他存在網(wǎng)絡賬戶上的錢就不能被提取出來。這時就可以應用智能合約,可以在合約中設定每過一定的時間就必須登錄自己的賬戶確認一次,否則賬戶中的資金就會按照合約中設定的方式轉(zhuǎn)移出去,這樣就能避免前面所說的問題。3)投票、金融衍生品、博彩、預付款等其他方面。
區(qū)塊鏈能夠保存所有完整信息,這是它的優(yōu)勢,并且任何人、任何節(jié)點在任何情況下都可以用加密哈希驗證數(shù)據(jù)塊。區(qū)塊鏈利用序列化鏈路,按照時間順序把所有數(shù)據(jù)區(qū)塊串聯(lián)起來,每個區(qū)塊包含父區(qū)塊的哈希值,由此形成了一個去中心化的數(shù)據(jù)賬本。
作為公有鏈使用,這個賬本可以是公開的,因此可以清楚地了解到整個事件的發(fā)展順序;也可以作為私有鏈或行業(yè)鏈,許可型的,只對外開放一定的接口,嚴格限制其訪問權(quán)限。
但無論這個賬本是公有化的還是私有化的,它都能夠?qū)崿F(xiàn)連貫一致的數(shù)據(jù)存儲;而且去中心化的特性可以防范外部或內(nèi)部的惡意破壞。
更重要的是,區(qū)塊鏈采取高度冗余的存儲策略,可以在大多數(shù)節(jié)點備份數(shù)據(jù);即使在網(wǎng)絡連接不穩(wěn)定或者網(wǎng)絡不安全的情況下也不受影響。至于安全性,區(qū)塊鏈技術本身十分安全,不存在安全缺陷。
Storj云存儲,利用區(qū)塊鏈搭建的去中心化云存儲系統(tǒng)。Storj認為,基于區(qū)塊鏈的云存儲在安全性能和速度方面不輸于現(xiàn)有大企業(yè)的技術,并且成本更低,因為它不需要購買大型存儲設備以及數(shù)據(jù)中心機架,可利用現(xiàn)成的空閑存儲空間。
另外,以太坊合約也考慮到了對去中心化文件存儲生態(tài)系統(tǒng)的開發(fā),在這種系統(tǒng)里個人用戶可以通過出租他們的硬件設備和未用的存儲空間獲得小批量的金錢收益,從而降低文件存儲成本。
區(qū)塊鏈技術,作為數(shù)字貨幣的背后支撐,已經(jīng)引起了金融巨頭們的高度重視,包括花旗銀行、摩根大通、高盛、紐約梅隆銀行、匯豐銀行、巴克萊銀行在內(nèi)的眾多金融巨頭,均與區(qū)塊鏈公司取得合作,研究區(qū)塊鏈技術在金融世界的應用。
麥肯錫研究報告指出了區(qū)塊鏈在金融業(yè)應用的5大場景。
1)數(shù)字貨幣:提高貨幣發(fā)行便利性;
2)跨境支付與結(jié)算:實現(xiàn)點到點交易,減少中間費用;
3)票據(jù)與供應鏈金融業(yè)務:減少人為介入,降低成本及操作風險;
4)證券發(fā)行與交易:實現(xiàn)實時資產(chǎn)轉(zhuǎn)移,加速交易清算速度;
5)客戶征信與反欺詐:降低法律合規(guī)成本,防止金融犯罪。
除了金融業(yè),其他很多地方也能用到區(qū)塊鏈技術。區(qū)塊鏈現(xiàn)有的應用場景基本如下。
1)存在性證明。由于區(qū)塊鏈技術的不可篡改性,可把區(qū)塊鏈技術應用于存在性證明,把過去的某一狀態(tài)存在區(qū)塊鏈上,未來就可以證明在過去確實存在。
2)智能合約。以太坊上的智能合約就是一個最好的例子,把智能合約部署在區(qū)塊鏈上,合約內(nèi)容事先定好,達到合約中的某個條件時合約自動觸發(fā),執(zhí)行合約中的內(nèi)容可以免去現(xiàn)實生活中合約執(zhí)行的一些苛刻條件,能在不信任的環(huán)境下執(zhí)行合約。
3)身份驗證。智能合約可以存儲個人的身份信息,可以保存現(xiàn)有的身份狀態(tài),一旦身份信息被篡改就會觸發(fā)一定的條款,身份所有者就會知曉。
4)預測市場。例如 Augur,它是一個基于區(qū)塊鏈技術的去中心化的預測市場的平臺,任何人都可以隨時隨地地訪問和使用Augur,利用這種技術可以消除中心化服務器的風險。
5)電子商務。把比特幣無監(jiān)管模式應用到電商,應用這一模式不僅能免去中間冗雜的環(huán)節(jié),還能達到市場和諧。例如 OpenBazaar,直接用比特幣進行交易,類似于一個去中心化的淘寶平臺。
6)社交通信。例如去中心化通信平臺Gems,它試圖打破現(xiàn)有的社交媒體的模式,不僅社交公司可以賺錢,用戶也能從中獲利。
7)文件存儲?;趨^(qū)塊鏈的存儲技術將直接沖擊甚至顛覆傳統(tǒng)的云計算架構(gòu)。Storj,Siacoin,F(xiàn)ilecoin等基于區(qū)塊鏈技術的文件存儲系統(tǒng)越來越成熟。
麥肯錫研究報告指出,區(qū)塊鏈技術是繼蒸汽機、電力、信息和互聯(lián)網(wǎng)科技之后,目前最有潛力觸發(fā)第五輪顛覆性革命浪潮的核心技術;該技術正在悄然改變金融領域,并且可能完全改變現(xiàn)有的交易流程和信息保存方式,從而降低成本,提高效率。在過去的兩年中,區(qū)塊鏈技術越來越受到各界人士的青睞,儼然已經(jīng)成為最受關注的話題,各種建立于區(qū)塊鏈上的應用應運而生。國際巨頭尤其是金融巨頭紛紛活躍起來,組建了 R3 CEV和Hyperledger這樣的超級聯(lián)盟來探索未知的區(qū)塊鏈的奧秘。
就區(qū)塊鏈技術帶來的機遇與挑戰(zhàn),各大領先金融機構(gòu)已經(jīng)搶先布局,采取的策略不盡相同,大致可分為3類。
1)組建區(qū)塊鏈大聯(lián)盟,制訂行業(yè)標準。如R3CEV集結(jié)超過40家國際領先銀行建立了行業(yè)監(jiān)管及相應的技術標準。
2)攜手金融科技公司,發(fā)展核心業(yè)務區(qū)塊鏈應用。如 Capital One及 Visa通過戰(zhàn)略投資金融科技公司,緊抓區(qū)塊鏈技術的突破口。
3)銀行內(nèi)部推進局部領域的應用,快速實施試點。如UBS、花旗、德意志及巴克萊都已經(jīng)成立區(qū)塊鏈實驗室,自行研發(fā)或與金融科技公司合作,針對不同的應用場景進行測試。
基于區(qū)塊鏈技術的應用有可能顛覆現(xiàn)有的游戲規(guī)則,并且可能會重塑行業(yè)標準,不僅能降低交易的成本、提高效率,還可能會衍生出許多的商業(yè)模式。
區(qū)塊鏈技術的發(fā)展被業(yè)內(nèi)人士廣泛看好,這個越來越受青睞的趨勢會一直持續(xù),這些趨勢不一定以區(qū)塊鏈的形式直接出現(xiàn),可能會作為區(qū)塊鏈技術的衍生品興起。區(qū)塊鏈應用已經(jīng)從最初單純的數(shù)字貨幣過渡到更廣泛的金融業(yè),并且滲透到社會中的很多領域,比如身份驗證、跨境支付、文件存儲、物聯(lián)網(wǎng)等,其中金融領域是目前最成熟、應用最廣的領域。區(qū)塊鏈技術作為當下最熱門的技術之一,值得我們投入更多的時間與精力進行學習和研究。
(摘自《計算機科學》2017年第4期)