王錫亮,劉學(xué)楓,趙淦森,王欣明*,周子衡 ,莫澤楓
(1.華南師范大學(xué) 計算機(jī)學(xué)院,廣東 廣州 510631;2.唯鏈基金會,新加坡 018936;3.華南師范大學(xué) 數(shù)學(xué)學(xué)院,廣東 廣州 510631)
自2008年被首次提出后[1],區(qū)塊鏈的概念從加密數(shù)字貨幣逐漸延伸到各行各業(yè)的創(chuàng)新應(yīng)用里。隨著2016年比特幣在資本市場市值趨于100億美元的規(guī)模[2],大眾對區(qū)塊鏈的認(rèn)識亦從比特幣的底層技術(shù)——一個由對等網(wǎng)絡(luò)中的節(jié)點共同維護(hù)和擴(kuò)展的共享賬本轉(zhuǎn)變成為“區(qū)塊鏈+領(lǐng)域”的應(yīng)用發(fā)展模式。認(rèn)知的轉(zhuǎn)變過程說明了區(qū)塊鏈技術(shù)成為全球技術(shù)創(chuàng)新的競爭高地。
區(qū)塊鏈?zhǔn)且环N集成式創(chuàng)新,其涉及的技術(shù)包括對等網(wǎng)絡(luò)、拜占庭容錯、智能合約以及分布式共識算法等?;谶@種集成式的技術(shù)堆疊,區(qū)塊鏈實現(xiàn)了一個可以在數(shù)字空間里達(dá)成一致信任的去中心化系統(tǒng)。其核心思想是在對等網(wǎng)絡(luò)的去中心化特性下,通過節(jié)點之間達(dá)成一致性共識,并共同維護(hù)一個按時間順序?qū)?shù)據(jù)區(qū)塊以鏈條的方式首尾相連成鏈的數(shù)據(jù)鏈條。數(shù)據(jù)鏈條上的每一個區(qū)塊以數(shù)字簽名[3]等數(shù)據(jù)校驗方式防止數(shù)據(jù)篡改和偽造。由此,區(qū)塊鏈實現(xiàn)了一個去中心化共享賬本。這種新的思路可以解決傳統(tǒng)中心化系統(tǒng)所普遍依賴中央權(quán)威、信任和共識的成本高、可靠性差、安全性低等問題,對于傳統(tǒng)社會組織和運作方式是一種顛覆性的變革和挑戰(zhàn)。
區(qū)塊鏈這種具有普適性的技術(shù)架構(gòu),可以很容易擴(kuò)展延伸到其他應(yīng)用場景里。事實上,根據(jù)目前區(qū)塊鏈的發(fā)展進(jìn)展,區(qū)塊鏈技術(shù)可以分為三個階段[4],即以可編程數(shù)字加密貨幣體系為主要特征的區(qū)塊鏈1.0模式,這個階段的區(qū)塊鏈可擴(kuò)展性稍微欠缺且功能相對單一,主要的能力體現(xiàn)在價值交換上,比如比特幣、數(shù)字資產(chǎn)、在線支付等[5-6]。隨著智能合約的興起,通過在區(qū)塊鏈上運行和存儲計算機(jī)程序代碼,實現(xiàn)了數(shù)字化合約的可信存儲和執(zhí)行,使得區(qū)塊鏈技術(shù)進(jìn)入2.0模式。金融領(lǐng)域的區(qū)塊鏈應(yīng)用層出不窮,標(biāo)志著區(qū)塊鏈技術(shù)從加密數(shù)字貨幣這單一的功能逐漸擴(kuò)展到其他金融領(lǐng)域,進(jìn)而實現(xiàn)了現(xiàn)實世界中業(yè)務(wù)系統(tǒng)數(shù)字化的協(xié)同工作,讓區(qū)塊鏈技術(shù)得以在包括股票、清算、私募股權(quán)等眾多金融領(lǐng)域嶄露頭角[7];區(qū)塊鏈3.0模式則強(qiáng)調(diào)區(qū)塊鏈向行業(yè)的滲透,區(qū)塊鏈技術(shù)陸續(xù)被嘗試應(yīng)用到物聯(lián)網(wǎng)[8]、隱私保護(hù)[9]、商品防偽等其他領(lǐng)域中來,應(yīng)用范圍涵蓋了整個社會的方方面面。區(qū)塊鏈技術(shù)的去中心化、去信任特點,能夠從根本上減少組織形態(tài)的摩擦并且提高協(xié)作效率,從而在大規(guī)模協(xié)作領(lǐng)域里更好地提升個人或組織的工作效率。
區(qū)塊鏈技術(shù)亦有其面臨的局限與問題。首先是區(qū)塊鏈擴(kuò)展性,由于區(qū)塊大小具有容量限制,且共識過程需要一定的時間進(jìn)行,因此交易的吞吐量和區(qū)塊鏈的容量是影響區(qū)塊鏈大規(guī)模應(yīng)用的障礙。其次在安全方面,目前的工作量證明共識算法則需要至少六個區(qū)塊的確認(rèn),才能在概率上確保交易的安全性[1],因此區(qū)塊鏈的實時性較差。另外,如果參與共識的算力聯(lián)合起來超過總算力51%時,可以很容易發(fā)起惡意分叉或者雙重支付的攻擊[10]。在隱私保護(hù)方面,目前可以通過一定的技術(shù)手段獲得網(wǎng)絡(luò)中節(jié)點IP的相關(guān)信息,可以通過追溯交易對其進(jìn)行聚類得到很多有價值的信息,而且由于用戶的使用不當(dāng)也會造成DAPP的隱私泄露,以上種種都反映了區(qū)塊鏈的隱私保護(hù)問題仍亟待加強(qiáng)[11]。
分層系統(tǒng)架構(gòu)的最好例子莫過于互聯(lián)網(wǎng)OSI模型[12],而區(qū)塊鏈系統(tǒng)本身即是一個類似OSI模型的龐大且復(fù)雜的體系結(jié)構(gòu)。從軟件架構(gòu)的角度而言,區(qū)塊鏈系統(tǒng)可以分為數(shù)據(jù)層、網(wǎng)絡(luò)層、共識層、激勵層、合約層以及應(yīng)用層(如圖1所示)。數(shù)據(jù)層是區(qū)塊鏈的數(shù)據(jù)表示及數(shù)據(jù)操作規(guī)則;網(wǎng)絡(luò)層則管理著區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點間的通信聯(lián)系;共識層則是描述節(jié)點間達(dá)成一致性的一組協(xié)議;激勵層掌握著整個系統(tǒng)正常運作的經(jīng)濟(jì)刺激;合約層則通過虛擬機(jī)及可編程語言為區(qū)塊鏈提供開發(fā)環(huán)境;應(yīng)用層則是基于整個區(qū)塊鏈底層體系結(jié)構(gòu)所能實現(xiàn)的功能系統(tǒng)集合。
圖1 區(qū)塊鏈參考架構(gòu)
數(shù)據(jù)層主要負(fù)責(zé)區(qū)塊鏈底層數(shù)據(jù)的結(jié)構(gòu)和存儲模式。區(qū)塊鏈通過鏈?zhǔn)浇Y(jié)構(gòu)按時間戳的先后順序?qū)^(qū)塊關(guān)聯(lián)起來,區(qū)塊之間再通過一個哈希校驗碼來保證鏈上數(shù)據(jù)的完整性和不可篡改性。區(qū)塊結(jié)構(gòu)主要分為區(qū)塊頭和區(qū)塊體,主要用于存儲交易數(shù)據(jù)相關(guān)的哈希值和區(qū)塊鏈網(wǎng)絡(luò)重要參數(shù)。交易數(shù)據(jù)可以通過Merkle樹結(jié)構(gòu)進(jìn)行組織,利用其提供的Merkle證明可以保證交易數(shù)據(jù)的不可篡改性,比特幣中利用Merkle樹結(jié)構(gòu)還提供了簡單支付驗證(SPV)功能[1]。
網(wǎng)絡(luò)層則包括分布式對等網(wǎng)絡(luò)的組網(wǎng)機(jī)制、區(qū)塊廣播機(jī)制和數(shù)據(jù)驗證機(jī)制等部分。網(wǎng)絡(luò)層是區(qū)塊鏈系統(tǒng)節(jié)點發(fā)現(xiàn)、共識及數(shù)據(jù)同步的關(guān)鍵。區(qū)塊鏈通過對等網(wǎng)絡(luò)實現(xiàn)去中心化的分布式自治網(wǎng)絡(luò),網(wǎng)絡(luò)中的每個節(jié)點都需要承擔(dān)網(wǎng)絡(luò)路由、節(jié)點發(fā)現(xiàn)和區(qū)塊數(shù)據(jù)傳輸、驗證的功能。當(dāng)網(wǎng)絡(luò)中有新的區(qū)塊產(chǎn)生時,節(jié)點間會廣播這個新區(qū)塊,除產(chǎn)生該區(qū)塊的節(jié)點外,所有的節(jié)點都需要對該區(qū)塊及其內(nèi)的交易進(jìn)行驗證。
共識層是指區(qū)塊鏈對等網(wǎng)絡(luò)中達(dá)成一致性所運行的算法的集合,主要負(fù)責(zé)實現(xiàn)全網(wǎng)所有節(jié)點對交易和數(shù)據(jù)達(dá)成一致。共識層所使用的算法主要是為了應(yīng)對拜占庭容錯[13]及女巫攻擊[14]。共識算法主要分為概率性算法和確定性算法。確定性算法是指一旦達(dá)成對某個結(jié)果的共識時,該結(jié)果就不可逆轉(zhuǎn),共識即結(jié)果,如PBFT[15];而概率性算法則是指當(dāng)前的共識結(jié)果暫不可靠,需要一定的時間或達(dá)成某種條件后,共識結(jié)果被推翻的概率越來越小,最終在數(shù)學(xué)上成為最終結(jié)果,如PoW。
激勵層主要負(fù)責(zé)區(qū)塊鏈代幣的發(fā)行和分配機(jī)制。區(qū)塊鏈通過將社會生活的經(jīng)濟(jì)因素引入到計算機(jī)技術(shù)體系中,使得區(qū)塊鏈的共識過程和去中心化特性得以實現(xiàn)。因為達(dá)成共識的過程越分散,其效率越低,但安全性和可靠性高,整個系統(tǒng)也越穩(wěn)定;相反,達(dá)成共識的過程越集中,其效率越高,但也越容易出現(xiàn)中心權(quán)威。而通過在區(qū)塊產(chǎn)生時賦予節(jié)點利益,可確保節(jié)點有利可圖,因而能吸引越多的節(jié)點參與到共識的過程里。同樣的,節(jié)點過多時需要考慮激勵的負(fù)反饋調(diào)節(jié),使得節(jié)點的數(shù)量維持在一定的界限里。比如,以太坊里創(chuàng)新地設(shè)計了Gas花費,使得在以太坊上的大部分操作都需要消耗Gas來獲得,這一過程符合現(xiàn)實世界的考慮,會驅(qū)使更多的節(jié)點參與到系統(tǒng)的共識過程中,以獲得利益來支撐在以太坊上的Gas操作[16]。
合約層賦予了區(qū)塊鏈可編程的特性,能夠在數(shù)字空間里實現(xiàn)一定限度內(nèi)的各種應(yīng)用。合約層通過在區(qū)塊鏈系統(tǒng)上搭載的虛擬機(jī)等部件,能夠在其上自動和強(qiáng)制執(zhí)行各類腳本、算法和智能合約[17-18]。合約的執(zhí)行,無需經(jīng)由除區(qū)塊鏈和本身外第三方來激活、管理和干預(yù),是區(qū)塊鏈應(yīng)用去信任的基礎(chǔ)。
應(yīng)用層是基于區(qū)塊鏈整體架構(gòu)發(fā)展而來的區(qū)塊鏈去中心化應(yīng)用的集合,主要涵蓋了區(qū)塊鏈的各種應(yīng)用場景和案例。區(qū)塊鏈的去中心化特性、數(shù)據(jù)的不可篡改性及可追溯性,給予了區(qū)塊鏈作為金融領(lǐng)域、物流領(lǐng)域等需要數(shù)據(jù)安全場景下的生命活力。而智能合約自動執(zhí)行的特性使得區(qū)塊鏈能在更廣泛的商業(yè)邏輯甚至是組織模式下大展拳腳。
區(qū)塊鏈的數(shù)據(jù)架構(gòu)決定了其數(shù)據(jù)的表示方式和組織形式。在數(shù)據(jù)架構(gòu)上,區(qū)塊鏈?zhǔn)褂脜^(qū)塊結(jié)構(gòu)作為數(shù)據(jù)的載體,功能上類似于傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)表,利用哈希算法給予每個區(qū)塊一個哈希標(biāo)示,并將多個區(qū)塊組合形成前后銜接的鏈?zhǔn)浇Y(jié)構(gòu),保證區(qū)塊不可篡改。區(qū)塊鏈的鏈?zhǔn)浇Y(jié)構(gòu)和區(qū)塊結(jié)構(gòu)如圖2所示。
圖2 區(qū)塊鏈參考數(shù)據(jù)架構(gòu)
對于大部分采用工作量證明共識算法的區(qū)塊鏈而言,區(qū)塊頭結(jié)構(gòu)里包含區(qū)塊鏈版本號、父區(qū)塊哈希值(地址)、時間戳、難度系數(shù)、交易哈希根以及當(dāng)前區(qū)塊共識過程中計算難題的解(隨機(jī)數(shù))等信息。區(qū)塊鏈版本號用以跟蹤和識別區(qū)塊鏈所運行的網(wǎng)絡(luò)協(xié)議版本,在對等網(wǎng)絡(luò)里用于節(jié)點的發(fā)現(xiàn)和通信。時間戳則用于記錄區(qū)塊的產(chǎn)生時間,使區(qū)塊能根據(jù)時間戳的先后時間按順序連接在一起。交易哈希根一般是采用Merkle樹結(jié)構(gòu)組織交易后所得的根節(jié)點哈希值,即交易樹里按層逐級兩兩哈希后最終產(chǎn)生的結(jié)果,該值可用于快速檢驗數(shù)據(jù)完整性。交易的數(shù)據(jù)結(jié)構(gòu)因應(yīng)用場景的差異而不同,但交易信息一般是以Merkle樹的組織形式,通過哈希過程生成唯一的Merkle根,Merkle樹能提供數(shù)據(jù)完整性證明,可用于區(qū)塊鏈的零知識證明[19]。
從本質(zhì)上來說,區(qū)塊鏈?zhǔn)且粋€不可篡改的、透明的、可以被信任的分布式數(shù)據(jù)庫。該數(shù)據(jù)庫存儲的是所有節(jié)點共同認(rèn)可的交易數(shù)據(jù),并且依賴這些交易數(shù)據(jù)自動執(zhí)行預(yù)先約定的動作。
區(qū)塊鏈對應(yīng)的系統(tǒng)中有多個核心的參與主體,其中包括有交易方和記賬方。交易方是實際依托區(qū)塊鏈進(jìn)行交易信息記錄、存證和結(jié)算的主體。系統(tǒng)中的交易被廣播到區(qū)塊鏈上。區(qū)塊鏈上的各個記賬節(jié)點需要完成多個交易信息的打包,構(gòu)建一個完整的區(qū)塊,并添加到區(qū)塊鏈上。各個記賬節(jié)點通過共識算法來競爭當(dāng)次記賬的權(quán)利。競爭勝利的節(jié)點打包的區(qū)塊可以被順利通過各節(jié)點的驗證并被添加到區(qū)塊鏈上。通常,記賬節(jié)點還會獲得相應(yīng)的激勵。
對應(yīng)相應(yīng)的交易,區(qū)塊鏈能夠自動執(zhí)行智能合約。智能合約是交易雙方提前約定的可執(zhí)行的代碼,由雙方共同提交到區(qū)塊鏈中。智能合約不可修改,其執(zhí)行自動觸發(fā),不受干擾。每個智能合約都約定對應(yīng)的觸發(fā)信息,明確智能合約觸發(fā)啟動的條件。
區(qū)塊鏈中的每一個區(qū)塊包含有眾多的交易信息。交易信息一般以一個特定的結(jié)構(gòu)進(jìn)行組織,比如Merkle樹,并借助該數(shù)據(jù)結(jié)構(gòu)對交易信息進(jìn)行校驗,如Merkle證明。
由于區(qū)塊鏈自身架構(gòu)的約束,當(dāng)前大部分的區(qū)塊鏈在交易的吞吐率等方面有一定的約束,并且區(qū)塊鏈之間的整合和互動的需求也逐漸涌現(xiàn),因此多條區(qū)塊鏈的跨鏈互動和協(xié)作的能力也逐步成為區(qū)塊鏈的一個主要能力。
2.2.1 工作量證明(PoW)
工作量證明(Proof of Work,PoW)[20]是用來證明完成某項任務(wù)而付出了一定計算量的證明。這里的任務(wù)指的是要計算出一個與密碼學(xué)安全相關(guān)的nonce值,使得加上區(qū)塊中的其他數(shù)據(jù)內(nèi)容的hash值小于給定的上限(與挖礦難度有關(guān))。如果一個節(jié)點成功計算出這一個nonce值,則立即向全網(wǎng)廣播這個新產(chǎn)生的塊,網(wǎng)絡(luò)中的其他節(jié)點收到這個塊后,會立即對這個塊驗證,驗證通過后,會將這個區(qū)塊加入到自己本地節(jié)點維護(hù)的區(qū)塊鏈中,并停止競爭當(dāng)前的區(qū)塊打包,轉(zhuǎn)而進(jìn)行下一個區(qū)塊的競爭。在整個區(qū)塊鏈網(wǎng)絡(luò)中,只有最快計算出nonce的節(jié)點所打包的區(qū)塊才能添加到區(qū)塊鏈上。
2.2.2 權(quán)益證明(PoS)
權(quán)益證明(Proof of Stake,PoS)[20]是根據(jù)用戶所擁有的權(quán)益來決定區(qū)塊鏈中下一個區(qū)塊由誰來構(gòu)造,用戶所擁有的權(quán)益越高,產(chǎn)生下一個區(qū)塊的可能性越大。
如果權(quán)益僅僅是指用戶在網(wǎng)絡(luò)中所擁有幣的數(shù)量,那么這意味著,擁有幣的數(shù)量越多,則其權(quán)益越高,也就越有可能打包下一個區(qū)塊。但是,這會導(dǎo)致網(wǎng)絡(luò)中越富的用戶,擁有更多的記賬權(quán),而擁有很少幣的用戶則幾乎不可能獲得記賬權(quán),從而導(dǎo)致了整個網(wǎng)絡(luò)的中心化。
所以針對這個問題,關(guān)于下一個區(qū)塊的記賬權(quán)的選擇算法衍生出了2個變種,分別是隨機(jī)選擇與基于幣齡的選擇。其中隨機(jī)選擇算法應(yīng)用在BlackCoin項目中,它是采用一個公式來預(yù)測下一個區(qū)塊的產(chǎn)生者,這個公式是通過結(jié)合權(quán)益的大小來尋找最小的hash值,因為權(quán)益是公開的,所以每一個節(jié)點都可以使用這個公式準(zhǔn)確地預(yù)測產(chǎn)生下一個區(qū)塊的節(jié)點;而基于幣齡的選擇則在PeerCoin中得到了應(yīng)用,在這個項目中,持有幣量越多,幣齡越久的用戶就越有可能獲得下一個區(qū)塊的記賬權(quán)。
2.2.3 拜占庭容錯算法(PBFT)
拜占庭容錯算法[21](Practical Byzantine Fault Tolerance,PBFT),本質(zhì)上而言是一種基于狀態(tài)機(jī)的副本復(fù)制算法。它將服務(wù)建模為狀態(tài)機(jī),在分布式網(wǎng)絡(luò)中的不同節(jié)點上進(jìn)行副本復(fù)制,其中,網(wǎng)絡(luò)中的服務(wù)都在這些副本上保存相應(yīng)的狀態(tài)信息并實現(xiàn)相應(yīng)的操作。
PBFT算法是一個循環(huán),在每一輪中,首先會根據(jù)設(shè)定的規(guī)則選出一個主節(jié)點,由其來組織網(wǎng)絡(luò)中的交易,這整個處理過程分為三個階段:分別是預(yù)準(zhǔn)備階段、準(zhǔn)備階段和確認(rèn)階段。在每一個階段中,都會進(jìn)行投票,在本階段中只有超過2/3的投票同意才會進(jìn)入下一個階段,每輪結(jié)束后都會產(chǎn)生一個新區(qū)塊。
智能合約[16]的概念最早是在1995年由Nick Szabo所提出來的,其定義為:“一個智能合約是一套以數(shù)字形式定義的承諾,包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議”[22]。從本質(zhì)上而言,智能合約實際上是計算機(jī)上的可執(zhí)行程序,只要滿足條件,即可被準(zhǔn)確執(zhí)行。但是,其又不僅僅只是一段程序,它本身也是區(qū)塊鏈網(wǎng)絡(luò)的參與者,它對其他用戶發(fā)出的信息進(jìn)行響應(yīng),可以儲存網(wǎng)絡(luò)中的價值單元,也可以自己發(fā)送信息與價值給其他用戶。
從技術(shù)上來說,區(qū)塊鏈上的智能合約包括:用于運行的環(huán)境——完備的狀態(tài)機(jī)[23](例如,以太坊的EVM[16])和事務(wù)的處理與保存機(jī)制。在區(qū)塊鏈中,事務(wù)主要指的是待發(fā)送的數(shù)據(jù),事件則是對事務(wù)動作的記錄與描述。當(dāng)事務(wù)、事件信息傳到智能合約當(dāng)中時,會觸發(fā)智能合約進(jìn)行狀態(tài)機(jī)判斷,如果某個或某幾個方法的觸發(fā)條件滿足,狀態(tài)機(jī)就會依據(jù)合約自動執(zhí)行相應(yīng)的動作。
智能合約存在的根本目的是為了保證在區(qū)塊鏈網(wǎng)絡(luò)中,使一些數(shù)字化的承諾能夠按照約定的條件正確執(zhí)行,它本身并不會生成智能合約,也不會對智能合約的信息進(jìn)行修改。
在比特幣系統(tǒng)中,數(shù)據(jù)是通過Merkle樹[24]來組織的,Merkle樹結(jié)構(gòu)如圖3所示。
圖3 Merkle樹結(jié)構(gòu)
Merkle樹是二叉樹的結(jié)構(gòu),其葉子節(jié)點存儲數(shù)據(jù)塊的hash值,然后其父母節(jié)點為兩兩的哈希,這樣一層層上去,根節(jié)點是其孩子節(jié)點的hash值。Merkle樹可以支持零知識證明。向別人證明自己擁有的某一組數(shù)據(jù)(L1,L2,L3,L4)中包含給定的內(nèi)容L3,同時又不暴露其他數(shù)據(jù)內(nèi)容的證明就叫零知識證明[25]。要實現(xiàn)這個證明,只要構(gòu)造如圖3所示的Merkle樹結(jié)構(gòu),并公布Hash5、Hash0和Root就可以了。
雙花問題[10]是指一筆數(shù)字資產(chǎn)被重復(fù)使用,簡而言之就是一筆錢可以被花兩次甚至多次。雙花攻擊分為0確認(rèn)雙花與已確認(rèn)雙花。目前解決0確認(rèn)雙花的方法,在比特幣系統(tǒng)中使用的是UTXO模型和時間戳來解決,其中,UTXO(Unspent Transaction Output)[1]是比特幣中獨特的價值轉(zhuǎn)移基本單元,當(dāng)一筆交易被雙花時,挖礦節(jié)點在接收到后會選擇先接收到的交易,拋棄另外一個交易;而在以太坊系統(tǒng)中則不建議用戶開啟0確認(rèn)雙花,而對于已確認(rèn)雙花,目前還沒辦法很好地解決。
作為區(qū)塊鏈思想誕生的源頭,比特幣網(wǎng)絡(luò)是首個得到大規(guī)模部署的區(qū)塊鏈技術(shù)應(yīng)用,并且是歷史上首個經(jīng)過大規(guī)模長時間檢驗的數(shù)字貨幣系統(tǒng)。比特幣項目糅合并借鑒了來自數(shù)字貨幣、密碼學(xué)、博弈論、分布式系統(tǒng)等多個領(lǐng)域的技術(shù)成果,這些技術(shù)組合形成的在技術(shù)應(yīng)用和業(yè)務(wù)應(yīng)用均具備強(qiáng)大創(chuàng)新意義的比特幣網(wǎng)絡(luò)。
比特幣網(wǎng)絡(luò)提供的是一個公共可見的記賬本,比特幣網(wǎng)絡(luò)中的用戶沒有單獨的賬戶,每個用戶擁有一個或者多個秘鑰對。秘鑰對中的公鑰作為用戶地址,用于作為交易的發(fā)起方和接收方的身份標(biāo)識。由此,比特幣網(wǎng)絡(luò)的用戶地址并非記錄每個賬戶的余額,而是用戶使用該公鑰作為用戶地址參與交易的交易余額。用戶的真正余額應(yīng)該是用戶擁有的所有的公鑰對應(yīng)的交易的交易余額的總和。比特幣網(wǎng)絡(luò)在每次發(fā)生交易后,將交易記錄通過比特幣點對點網(wǎng)絡(luò)廣播到比特幣網(wǎng)絡(luò)上,并利用網(wǎng)絡(luò)中礦工的挖礦過程來選取當(dāng)前交易記賬的節(jié)點和構(gòu)建當(dāng)前的區(qū)塊,來完成對交易記錄的記賬過程。最后等比特幣網(wǎng)絡(luò)所有節(jié)點完成確認(rèn)后即可認(rèn)為交易完成。
本質(zhì)上來說,以太坊是一個基于交易的狀態(tài)機(jī),支持圖靈完備的應(yīng)用[16]。以太坊延伸了比特幣網(wǎng)絡(luò)的思想,除了具備比特幣網(wǎng)絡(luò)的功能外,還能使得在全球范圍的多個計算機(jī)上運行代碼成為現(xiàn)實。智能合約是以太坊中非常重要的一個概念,即以程序代碼的方式來數(shù)字化和運行各種合約。智能合約運行在太坊虛擬機(jī)里,能按照智能合約的約定邏輯自動執(zhí)行,可以在沒有中心協(xié)調(diào)者的情況下被以太坊網(wǎng)絡(luò)中的計算機(jī)復(fù)制和處理。
以太坊同樣使用工作量證明作為共識算法,但以太坊產(chǎn)生區(qū)塊的時間更短,而且區(qū)塊的容量相對于比特幣網(wǎng)絡(luò)而言更小,這在一定程度上改善了區(qū)塊鏈擴(kuò)展性的問題,但是仍未能達(dá)到傳統(tǒng)中心化應(yīng)用的交易吞吐量。另外,智能合約相比于比特幣原始的腳本語言而言,在以太坊中用來部署代碼以及運行智能合約的語言更高級,而且由于智能合約圖靈完備的特點,在任何其他程序語言中能夠完成的計算都可以利用智能合約實現(xiàn)。
比特幣提供了區(qū)塊鏈技術(shù)的原型,開創(chuàng)了區(qū)塊鏈技術(shù)的浪潮。以太坊則通過智能合約擴(kuò)展并延伸了區(qū)塊鏈技術(shù)的功能,發(fā)展了區(qū)塊鏈應(yīng)用的組織模式。而超級賬本[21](Hyperledger)卻是另辟蹊徑,引入了權(quán)限控制和安全保障,強(qiáng)調(diào)區(qū)塊鏈技術(shù)不需局限在完全開放的模式下。超級賬本是Linux基金會管理下的合作項目,目標(biāo)是建立面向企業(yè)應(yīng)用場景的分布式賬簿平臺的底層構(gòu)架,吸引了許多科技和金融公司參與,包括IBM、Intel、Cisco、摩根大通等。在這個項目下,許多參與的公司都提供各自的區(qū)塊鏈解決方案,比如IBM和Interl公司提供了各自已有的區(qū)塊鏈代碼。目前,在項目中的區(qū)塊鏈解決方案中,以Fabric最為知名。
Hyperledger Fabric是一個提供分布式賬本解決方案的平臺,與其他區(qū)塊鏈系統(tǒng)的差異體現(xiàn)在私有性和許可制上,即維護(hù)著一個需要認(rèn)證接入的網(wǎng)絡(luò)系統(tǒng),嚴(yán)格來說,其是一種部分去中心化的區(qū)塊鏈系統(tǒng)[24]。Hyperledger Fabric優(yōu)點在于支持不同的模塊組件直接拔插啟用,使其能根據(jù)特定的商業(yè)應(yīng)用場景進(jìn)行靈活的組裝。
區(qū)塊鏈當(dāng)前還面臨很多技術(shù)挑戰(zhàn),其中最為受關(guān)注的是跨鏈技術(shù)、隱私保護(hù)以及擴(kuò)展性的技術(shù)。
當(dāng)前的區(qū)塊鏈應(yīng)用越來越豐富,不同的應(yīng)用可能依賴不同的區(qū)塊鏈。長期發(fā)展下去,區(qū)塊鏈的應(yīng)用很有可能變得碎片化,區(qū)塊鏈上的交易、業(yè)務(wù)數(shù)據(jù)和鏈上的共識將被割裂形成區(qū)塊鏈孤島。由此,其中的一個技術(shù)挑戰(zhàn)是為區(qū)塊鏈提供區(qū)塊鏈之間的交互和整合能力,使得區(qū)塊鏈上的交易、價值等能夠跨區(qū)塊鏈進(jìn)行流動和互動??珂溂夹g(shù)[26]就是讓區(qū)塊鏈實現(xiàn)價值互聯(lián)網(wǎng)的關(guān)鍵,它是把區(qū)塊鏈從分散的孤島中拯救出來的良藥,是區(qū)塊鏈向外拓展和連接的橋梁。早在比特幣誕生初期,人們就意識到比特幣在轉(zhuǎn)賬速度、容量以及智能合約等方面的不足,如果說能建立比特幣賬本的一個副本,就像以前許多法定貨幣由黃金擔(dān)保一樣,在需要的時候資產(chǎn)可以在2個區(qū)塊鏈之間相互轉(zhuǎn)換,就可以加速比特幣或者其他數(shù)字資產(chǎn)的流動性。而目前跨鏈技術(shù)主要包括有:① 公證人機(jī)制;② 中繼模式;③ 哈希鎖定;④ 分布式密鑰控制。
在比特幣網(wǎng)絡(luò)或以太坊網(wǎng)絡(luò)中可以通過一些技術(shù)手段獲取網(wǎng)絡(luò)中節(jié)點的IP信息以及一些節(jié)點的拓?fù)潢P(guān)系[11],從而泄露了區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點ip、端口等隱私,甚至泄露了整個網(wǎng)絡(luò)的拓?fù)潆[私。
對網(wǎng)絡(luò)中的節(jié)點信息以及拓?fù)湫畔⒌入[私進(jìn)行保護(hù),對于目前來說仍然是一個挑戰(zhàn)。其中,文獻(xiàn)[9,27]等主要研究區(qū)塊鏈網(wǎng)絡(luò)交易隱私。在比特幣網(wǎng)絡(luò)中,交易是可被追溯的,因為采用UTXO模型,通過查找所有的輸入與輸出信息,對相關(guān)地址進(jìn)行聚類,會得到很多有價值信息,從而造成了隱私泄露問題。目前比特幣的這個隱私泄露問題還沒有得到很好的解決。
目前區(qū)塊鏈技術(shù)的可擴(kuò)展性[28-29]在某些方面受限,特別是,區(qū)塊存儲和交易吞吐量方面。隨著網(wǎng)絡(luò)中交易的不斷產(chǎn)生,區(qū)塊數(shù)量也會不斷增加,隨著時間的增長,其所占用的存儲空間越來越大,直至非常龐大。因此需要提高區(qū)塊存儲的可擴(kuò)展性。交易吞吐量的可擴(kuò)展性指的是針對交易性能而言的,目前區(qū)塊鏈網(wǎng)絡(luò)的交易性能還是不能很好地支持大規(guī)模的交易數(shù)量,目前提出了很多方案來解決這些問題,如閃電網(wǎng)絡(luò)、側(cè)鏈等技術(shù),但是這個問題并沒有真正得到解決。
區(qū)塊鏈技術(shù)綜合了密碼學(xué)、博弈學(xué)、社會學(xué)以及經(jīng)濟(jì)學(xué)等多個學(xué)科的技術(shù),具有去中心、去信任、透明、開放、不可篡改以及可追溯等特性,重塑了社會的信任體系,具有重大的意義。本文介紹了區(qū)塊鏈的相關(guān)背景,闡述了區(qū)塊鏈的參考架構(gòu)、核心技術(shù)與算法;討論了典型的區(qū)塊鏈系統(tǒng)如比特幣、以太坊以及超級賬本,分析了目前區(qū)塊鏈所面臨的重大挑戰(zhàn),希望能夠為相關(guān)研究提供有價值的指導(dǎo)和借鑒。