王啟河
(華北電力大學(xué)控制與計(jì)算機(jī)工程學(xué)院,河北 保定 071003)
區(qū)塊鏈技術(shù)在2008年中本聰發(fā)表比特幣白皮書《比特幣:一種點(diǎn)對點(diǎn)電子現(xiàn)金系統(tǒng)》后引起社各界廣泛關(guān)注。文中提到構(gòu)建比特幣系統(tǒng)的基礎(chǔ)技術(shù)是區(qū)塊鏈技術(shù),區(qū)塊鏈中記錄著所有元數(shù)據(jù)和加密交易信息,從而建立了一個通過點(diǎn)對點(diǎn)技術(shù)實(shí)現(xiàn)的電子現(xiàn)金系統(tǒng),使得在線支付的雙方不用通過第三方金融機(jī)構(gòu)直接進(jìn)行交易。區(qū)塊鏈技術(shù)避免了傳統(tǒng)中心化系統(tǒng)中高度依賴中央權(quán)威機(jī)構(gòu),信任成本高,可靠性和安全性較低等問題。區(qū)塊鏈技術(shù)有去中心化、不可篡改、安全性高、可溯源等特點(diǎn),這些特點(diǎn)使得互聯(lián)網(wǎng)向價值互聯(lián)網(wǎng)的轉(zhuǎn)變成為可能。
2014年Vitalik Buterin發(fā)表以太坊白皮書《下一代智能合約和去中心化應(yīng)用平臺》,文中指出了比特幣在智能合約上的不足,并提出了在以太坊上虛擬機(jī)上運(yùn)行的一種圖靈完備的智能合約。智能合約的不斷完善使得區(qū)塊鏈的使用不再僅僅局限于虛擬貨幣的交易,在醫(yī)療、供應(yīng)鏈、司法、農(nóng)業(yè)、能源等社會各行各業(yè)都起到了關(guān)鍵作用。
從2008年首次進(jìn)入大眾視野以來,區(qū)塊鏈技術(shù)的各個方面都得到了較為迅速的發(fā)展。以區(qū)塊鏈的應(yīng)用范圍和發(fā)展演化來看,區(qū)塊鏈經(jīng)歷了區(qū)塊鏈1.0、區(qū)塊鏈2.0和區(qū)塊鏈3.0三個階段。
區(qū)塊鏈1.0階段實(shí)現(xiàn)了無需第三方機(jī)構(gòu)或組織進(jìn)行監(jiān)督或驗(yàn)證的交易方式,使得跨國交易或跨行交易更容易進(jìn)行,同時使得交易的隱私性更高。在這個階段主要有比特幣和萊特幣兩種數(shù)字貨幣,萊特幣是比特幣的一種代幣。與比特幣相比萊特幣技術(shù)原理上與比特幣基本相同,但萊特幣更輕量,使得普通人無專業(yè)設(shè)備挖礦也成為可能。此階段下,大多數(shù)人關(guān)注區(qū)塊鏈主要是為了對數(shù)字貨幣進(jìn)行投資,并沒有注意到區(qū)塊鏈技術(shù)的價值。
區(qū)塊鏈2.0階段實(shí)現(xiàn)了可編程金融系統(tǒng)。受比特幣交易的啟發(fā),人們開始嘗試將區(qū)塊鏈應(yīng)用到包括股票、清算、私募股權(quán)等其他的金融領(lǐng)域。區(qū)塊鏈2.0的與區(qū)塊鏈1.0最大的區(qū)別就是智能合約的實(shí)現(xiàn)程度不同。在太坊智能合約技術(shù)支持下,區(qū)塊鏈技術(shù)在金融系統(tǒng)方面的應(yīng)用越來越廣。由Linux基金會在2015年12月主導(dǎo)發(fā)起的項(xiàng)目超級賬本Hyperledger Febric也是區(qū)塊鏈2.0時代的區(qū)塊鏈代表之一。
區(qū)塊鏈3.0階段實(shí)現(xiàn)了可編程社會。隨著區(qū)塊鏈技術(shù)的發(fā)展,人們對區(qū)塊鏈技術(shù)的應(yīng)用不再局限于金融領(lǐng)域,而是向社會各個方面擴(kuò)展。區(qū)塊鏈3.0幾乎會影響到我們生活的方方面面,所以有人說區(qū)塊鏈?zhǔn)亲詮恼羝麢C(jī)以來人類最偉大的技術(shù)。這可能是較為夸張的說法,但不可否認(rèn)的是,區(qū)塊鏈技術(shù)將不可避免地對未來的互聯(lián)網(wǎng)以及社會各方面產(chǎn)生巨大影響。
區(qū)塊鏈的共識機(jī)制需要在不同場景下完成共識,不同場景下區(qū)塊鏈中的節(jié)點(diǎn)數(shù)不同,各節(jié)點(diǎn)的權(quán)限也可能不同?;诠?jié)點(diǎn)權(quán)限分類,區(qū)塊鏈則可以分為公有鏈,私有鏈和聯(lián)盟鏈。
公有鏈又稱非許可鏈,是高度去中心化的系統(tǒng)。公有鏈的特點(diǎn)是無需許可任何個人或組織都能自由地進(jìn)出系統(tǒng),并且對區(qū)塊鏈的讀寫權(quán)限都一樣,沒有中心化管理組織;私有鏈通常是單位或組織內(nèi)部使用的區(qū)塊鏈,寫入權(quán)限僅限于組織內(nèi)部,讀取權(quán)限有限制地對外開放;聯(lián)盟連也叫許可鏈,去中心化程度介于公有鏈和私有鏈之間,采用的是“部分去中心化”結(jié)構(gòu),一般是有多個機(jī)構(gòu)或組織共同創(chuàng)建的。因?yàn)橥耆娜ブ行幕蛲耆闹行幕到y(tǒng)對于商業(yè)系統(tǒng)來說都是不太可行的,聯(lián)盟鏈部分去中心化的特點(diǎn)更加符合商業(yè)系統(tǒng)所需的提高合作效率的需求。所以聯(lián)盟鏈未來在商業(yè)領(lǐng)域?qū)玫礁斓陌l(fā)展。
區(qū)塊鏈經(jīng)歷了十幾年的發(fā)展,雖然目前沒有一種標(biāo)準(zhǔn)化的開發(fā)形式,但我們?nèi)稳豢梢愿鶕?jù)現(xiàn)有區(qū)塊鏈平臺的工作模式的相同點(diǎn)將區(qū)塊鏈分為數(shù)據(jù)層、網(wǎng)絡(luò)層、共識層、合約層和應(yīng)用層五層架構(gòu),如圖1所示。
圖1 區(qū)塊鏈架構(gòu)圖
數(shù)據(jù)層是區(qū)塊鏈平臺的最底層,這一層主要是使用默克爾樹以及MPT等數(shù)據(jù)結(jié)構(gòu)對區(qū)塊鏈中數(shù)據(jù)進(jìn)行組織管理,以及使用哈希函數(shù)和非對稱加密等技術(shù)來保證區(qū)塊鏈數(shù)據(jù)的完整性和安全性。
哈希函數(shù)也叫散列函數(shù),此函數(shù)的功能是將任意長的字符文件轉(zhuǎn)化成一個固定長的二進(jìn)制值。一個哈希函數(shù)需要滿足快速性、單向性、無碰撞三個特性。哈希函數(shù)在區(qū)塊鏈中應(yīng)用十分廣泛,在區(qū)塊鏈鏈接指針、數(shù)據(jù)組織、共識機(jī)制中都有所應(yīng)用。
默克爾樹是一種使用哈希指針構(gòu)建的組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。在比特幣中,交易數(shù)據(jù)在區(qū)塊體中被構(gòu)建成一棵二叉默克爾樹,葉子為交易數(shù)據(jù)的哈希值,非葉子節(jié)點(diǎn)的值為兩個子節(jié)點(diǎn)哈希值之和的哈希值。如圖2所示。
圖2 比特幣區(qū)塊結(jié)構(gòu)示意圖
以默克爾樹組織交易的目的是可以很快地驗(yàn)證出所有的交易是否被篡改過,若任意一個交易被篡改,則最后得到的默克爾根都會不同,這是由哈希函數(shù)的無碰撞特性保證的。同時,默克爾樹的組織方式可以給出任意一個交易是經(jīng)過共識驗(yàn)證的證明路徑,即由樹根到對應(yīng)交易葉子節(jié)點(diǎn)的路徑。默克爾樹在區(qū)塊鏈上的使用使得各節(jié)點(diǎn)能快速地歸納和校驗(yàn)區(qū)塊中交易數(shù)據(jù)的完整性和存在性。
區(qū)塊鏈采取了點(diǎn)對點(diǎn)(P2P)方式進(jìn)行組網(wǎng),消息直接在節(jié)點(diǎn)之間傳播。每個節(jié)點(diǎn)都具有相同的功能以及地位,不存在中心化設(shè)備。每個節(jié)點(diǎn)都要承擔(dān)路由,區(qū)塊數(shù)據(jù)驗(yàn)證,區(qū)塊數(shù)據(jù)傳播,交易信息打包,發(fā)現(xiàn)新節(jié)點(diǎn)等功能。P2P的組網(wǎng)方式下,任何一個節(jié)點(diǎn)宕機(jī)系統(tǒng)仍能正常運(yùn)行。
區(qū)塊鏈網(wǎng)絡(luò)的工作原理如圖3所示,在比特幣中網(wǎng)絡(luò)的傳播機(jī)制有如下6步:
圖3 區(qū)塊鏈網(wǎng)絡(luò)工作原理示意圖
(1)節(jié)點(diǎn)產(chǎn)生交易,將交易數(shù)據(jù)向全網(wǎng)廣播;
(2)礦工節(jié)點(diǎn)把在一段時間內(nèi)收集到的所有交易打包,產(chǎn)生一個新區(qū)塊;
(3)礦工節(jié)點(diǎn)對產(chǎn)生的新區(qū)塊進(jìn)行工作量證明;
(4)當(dāng)?shù)V工節(jié)點(diǎn)完成工作量證明,立即向全網(wǎng)廣播此新區(qū)塊;
(5)所有節(jié)點(diǎn)對新區(qū)塊進(jìn)行驗(yàn)證,如果驗(yàn)證通過就接收此新區(qū)塊;
(6)所有區(qū)塊以此新區(qū)塊的哈希值作為父區(qū)塊哈希值進(jìn)行新一輪的區(qū)塊生成。
在一區(qū)塊鏈分布式的系統(tǒng)中,使互相不信任的節(jié)點(diǎn)如何在規(guī)定時間內(nèi)對某一數(shù)據(jù)或提案達(dá)成一致的機(jī)制就叫做共識機(jī)制。區(qū)塊鏈對共識機(jī)制提出“不可能三角”的評價標(biāo)準(zhǔn),即去中心化,可擴(kuò)展性和安全性三個特性不可能同時滿足。不同類型的區(qū)塊鏈由于去中心化程度和參與共識節(jié)點(diǎn)數(shù)量不同,所以使用的共識機(jī)制也不相同。公有鏈中參與共識的節(jié)點(diǎn)數(shù)量巨大,并且去中心化程度較高,一般使用PoW、PoS和DPoS等共識機(jī)制;私有鏈中節(jié)點(diǎn)數(shù)量少,且去中心化程度低,一般使用Paxos和Raft等共識機(jī)制;聯(lián)盟鏈中節(jié)點(diǎn)數(shù)量少,有“部分去中心化”的特點(diǎn),一般使用的是PBFT共識機(jī)制。本文在第3節(jié)對各種共識機(jī)制有詳細(xì)的說明。
區(qū)塊鏈中的智能合約是在區(qū)塊鏈中一段當(dāng)觸發(fā)一定條件后可自動執(zhí)行的代碼。智能合約在比特幣上的支持程度并不高,原因是比特幣在設(shè)計(jì)時并沒有考慮到智能合約的其他用途,編寫智能合約使用的語言是腳本語言,只能做一些簡單的驗(yàn)證和交易控制。在以太坊出現(xiàn)后,在區(qū)塊鏈中增加了一種圖靈完備的語言對智能合約進(jìn)行編寫,擴(kuò)展了智能合約的應(yīng)用范圍,使區(qū)塊鏈進(jìn)入了區(qū)塊鏈2.0階段。智能合約在保留了區(qū)塊鏈去中心化,不可篡改等特性的基礎(chǔ)上又增加了可編程的特點(diǎn),增強(qiáng)了區(qū)塊鏈的可擴(kuò)展性。本文在第4節(jié)對智能合約有更詳細(xì)的說明。
目前,區(qū)塊鏈逐步進(jìn)入?yún)^(qū)塊鏈3.0階段,各種基于區(qū)塊鏈技術(shù)的應(yīng)用正在逐步發(fā)展。區(qū)塊鏈最初產(chǎn)生的數(shù)字貨幣應(yīng)用在現(xiàn)在仍廣受人們關(guān)注,一些人對數(shù)字貨幣投資的熱情依舊很高。區(qū)塊鏈在醫(yī)療共享、供應(yīng)鏈溯源、物流溯源、司法存證等方面都有較多的應(yīng)用。除了使用區(qū)塊鏈技術(shù)開發(fā)獨(dú)立應(yīng)用的方向以外,對區(qū)塊鏈底層技術(shù)進(jìn)行集成,構(gòu)建供底層技術(shù)服務(wù)的平臺也是區(qū)塊鏈技術(shù)的應(yīng)用。比如以太坊和Hyperledger Febric等平臺。
區(qū)塊鏈中的核心問題就是共識問題,要保證所有節(jié)點(diǎn)能在規(guī)定時間內(nèi)達(dá)成共識。區(qū)塊鏈中的共識機(jī)制需要考慮去中心化程度、安全性、擴(kuò)展性、資源消耗、交易確認(rèn)時間、吞吐量和一致性等性能。
PoW的使用最早是在1993年,由Cynthia等首先提出PoW并應(yīng)用于解決垃圾郵件的問題上。而在區(qū)塊鏈中,PoW被應(yīng)用于決定哪個節(jié)點(diǎn)能夠獲取記賬權(quán),以達(dá)到對區(qū)塊的共識目的。所有節(jié)點(diǎn)在打包好一個區(qū)塊后,需要根據(jù)難度值產(chǎn)生一個隨機(jī)數(shù),使得整個區(qū)塊頭的哈希值在難度值所規(guī)定的范圍內(nèi)。率先完成隨機(jī)數(shù)尋找的區(qū)塊立即向全網(wǎng)廣播此區(qū)塊,其余節(jié)點(diǎn)驗(yàn)證通過后以此區(qū)塊作為父區(qū)塊開始尋找下一個區(qū)塊的隨機(jī)數(shù)即表示接收了此區(qū)塊。
PoW共識機(jī)制的去中心化程度很高,沒有任何中心化組織或機(jī)構(gòu),所有節(jié)點(diǎn)獲取記賬權(quán)的機(jī)會都是按照算力分配,即“一CPU一票”。但在區(qū)塊鏈實(shí)際運(yùn)行過程中,出現(xiàn)了許多節(jié)點(diǎn)合作挖礦的現(xiàn)象,產(chǎn)生了大量礦場或礦池這樣的集中挖礦機(jī)構(gòu)。各礦場礦池之間的算力競爭使得區(qū)塊鏈中算力大幅上漲,導(dǎo)致出塊速度變快。為了避免出塊速度過快或過慢比特幣中設(shè)置了一個難度值,難度值的大小是區(qū)塊頭的哈希值的十六進(jìn)制前面連續(xù)為0的個數(shù)。難度值越大,滿足條件的哈希值就越少,搜尋難度越高。比特幣中規(guī)定在產(chǎn)生2016個區(qū)塊后就需要對難度值調(diào)整,使出塊速度維持在10分鐘左右。調(diào)整公式為:
其中target為調(diào)整后的目標(biāo)難度值;target為當(dāng)前難度值;time為當(dāng)前難度值下產(chǎn)生2016個區(qū)塊所用的時間;time為期望產(chǎn)生2016個區(qū)塊所用的時間,即20 160分鐘。
PoW共識機(jī)制在能量消耗上非常大。有研究表明,僅中國在比特幣挖礦上的消耗將在2024年達(dá)到達(dá)到296.59 Twh的峰值,并相應(yīng)地產(chǎn)生1.305億噸的碳排放量。這相當(dāng)于捷克共和國和卡塔爾的年化溫室氣體排放總量。
PoS在2012年由點(diǎn)點(diǎn)幣(PPcoin)首次采用了PoS機(jī)制作為全網(wǎng)對區(qū)塊的共識機(jī)制。PoS機(jī)制中提出了幣零的概念:假設(shè)一個用戶擁有10個貨幣,且在90天內(nèi)該用戶一直未使用這10個貨幣,那么該用戶的幣齡為90×10,即900。一旦用戶使用了這10個貨幣,那么該用戶的幣齡就變?yōu)?了。幣齡的作用是在礦工挖礦時可以使用自己的幣齡來降低挖礦難度,使用的幣齡越多,挖礦難度越低。在成功出塊后,所使用幣的幣齡將會被清空并且這部分幣將會被鎖定一段時間不能進(jìn)行挖礦,以此確保系統(tǒng)的相對公平。
在PoS機(jī)制下,節(jié)點(diǎn)之間競爭記賬權(quán)不再僅僅只依靠算力,對節(jié)點(diǎn)擁有代幣的數(shù)量也有了比拼。一定程度上降低了在算力上的能源消耗,但因其本質(zhì)上還是在通過哈希計(jì)算尋找隨機(jī)數(shù)進(jìn)行共識,對能源仍有較大需求。對于PoS機(jī)制的安全性,主要是累積權(quán)益攻擊危害較大,但幣齡清齡機(jī)制使得累積權(quán)益攻擊的代價也會很大,作惡者將以大量代幣的代價進(jìn)行一次攻擊,收益可能小于投入消耗。所以PoS機(jī)制是對攻擊者進(jìn)行利益綁定來保障系統(tǒng)的安全性。
DPoS共識機(jī)制的原理是通過投票推選出若干個代理人節(jié)點(diǎn),這些代理人節(jié)點(diǎn)進(jìn)行區(qū)塊的驗(yàn)證和上鏈。類似于“董事會決策”的方式進(jìn)行,即每個股東以其所持有的股票進(jìn)行選舉投票自己的代理人節(jié)點(diǎn),由得票數(shù)多的若干節(jié)點(diǎn)作為組成董事會進(jìn)行決策,且在規(guī)定時間后重新進(jìn)行投票。因?yàn)檫x舉的過程并沒有大量的計(jì)算,所以DPoS的能源消耗遠(yuǎn)低于PoW機(jī)制和PoS機(jī)制。
DPoS機(jī)制在共識速度上相對于PoW機(jī)制和PoS機(jī)制也有較大的提升,同時在安全性上也有較為安全的保障。即便惡意節(jié)點(diǎn)發(fā)動合謀攻擊,共同選舉一個惡意節(jié)點(diǎn)作為代理人節(jié)點(diǎn),由于大部分節(jié)點(diǎn)選取的是誠實(shí)代理人,這個惡意代理人也無法左右共識結(jié)果。DPoS機(jī)制中還存在部分節(jié)點(diǎn)投票積極性不高,甚至從未參與投票;沒有快速剔除惡意節(jié)點(diǎn)等問題。目前,有許多研究人員針對這些問題對DPoS通過增加獎懲機(jī)制、熔斷機(jī)制、信譽(yù)機(jī)制等方式進(jìn)行了改進(jìn)。
Paxos共識機(jī)制是分布式共識機(jī)制的起源,許多共識機(jī)制都是由其發(fā)展而來。Paxos機(jī)制在區(qū)塊鏈中一般只作為部分私有鏈的共識機(jī)制。Paxos共識機(jī)制能源計(jì)算消耗小,去中心化程度較高,但其應(yīng)用范圍小,僅適用于具有較高容錯性的系統(tǒng)之中。
Paxos將系統(tǒng)中的角色分為提議者(Proposer),決策者(Acceptor),和最終決策學(xué)習(xí)者(Learner)三類。Proposer負(fù)責(zé)提出提案同時也參與決策;Acceptor負(fù)責(zé)參與決策;Learner不參與決策,只對最終的決策結(jié)果進(jìn)行接收。Paxos共識算法流程如圖4所示,共識流程主要分為了三個階段:
圖4 Paxos共識流程示意圖
(1)Prepare階段:Proposer對收到的Prepare請求進(jìn)行編碼為n,并向所有Acceptor轉(zhuǎn)發(fā)Prepare;Acceptor收到Prepare后檢查是否響應(yīng)過編碼大于等于n的提案,若沒有則向Proposer回復(fù)一個Promise,保證不再接受提案編碼小于等于n的提案;
(2)Accept階段:Proposer收到超過半數(shù)的Promise后,向所有Acceptor發(fā)送Propose請求;Acceptor收到Propose后如果接受請求則向Proposer響應(yīng)Accept;
(3)Learn階段:Proposer收到超過半數(shù)的Accept后,表示對編號為n的提案已經(jīng)達(dá)成共識,Proposer向所有Learner發(fā)送形成的提案決議。
PBFT共識算法由Miguel Castro等人在BFT基礎(chǔ)上改進(jìn)提出,PBFT將BFT算法復(fù)雜度由指數(shù)級降到多項(xiàng)式級別,使得拜占庭容錯問題得到實(shí)踐上的解決。PBFT共識效率高,能耗低,但由于消耗和共識速度都與參與節(jié)點(diǎn)數(shù)量相關(guān),所以一般使用PBFT機(jī)制的系統(tǒng)中不能容納過多的節(jié)點(diǎn)。
PBFT機(jī)制將節(jié)點(diǎn)分為客戶端節(jié)點(diǎn),主節(jié)點(diǎn)和備份節(jié)點(diǎn)三類,其中主節(jié)點(diǎn)和備份節(jié)點(diǎn)統(tǒng)稱為副本節(jié)點(diǎn)。PBFT共識流程如圖5所示。
圖5 PBFT共識流程示意圖
共識流程主要有以下5個階段:
(1)Request階段:客戶端節(jié)點(diǎn)向主節(jié)點(diǎn)發(fā)送請求;
(2)Pre-Prepare階段:主節(jié)點(diǎn)向所有備份節(jié)點(diǎn)轉(zhuǎn)播請求;
(3)Prepare階段:所有副本節(jié)點(diǎn)對收到的請求進(jìn)行驗(yàn)證,驗(yàn)證成功后向所有備份節(jié)點(diǎn)發(fā)送準(zhǔn)備信息;
(4)Commit階段:當(dāng)副本節(jié)點(diǎn)收到2+1個驗(yàn)證通過的準(zhǔn)備信息后(為允許容納的最大拜占庭節(jié)點(diǎn)數(shù)量)向其余副本節(jié)點(diǎn)發(fā)送一條確認(rèn)信息;
(5)Reply階段:當(dāng)副本節(jié)點(diǎn)收到驗(yàn)證通過的2+1條確認(rèn)信息后,向客戶端節(jié)點(diǎn)發(fā)送一條響應(yīng)信息,客戶端節(jié)點(diǎn)收到+1條響應(yīng)信息則表示成功對提案達(dá)成共識。
基于PBFT算法,目前出現(xiàn)了許多相關(guān)的改進(jìn)算法。文獻(xiàn)[22]提出一種K-PBFT聚類算法,通過聚類分組減少參與共識節(jié)點(diǎn),從而減少通信量;文獻(xiàn)[23]提出一種IPBFT算法,引入節(jié)點(diǎn)的自證機(jī)制,使得在長期共識過程中的共識效率提高,是一種優(yōu)化共識過程的算法。
智能合約最初的定義是一套以數(shù)字形式定義的承諾,包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議。在比特幣系統(tǒng)中,實(shí)現(xiàn)智能合約的方法是使用一種棧式編程環(huán)境,即比特幣腳本語言進(jìn)行編程。主要目的是完成一些交易的控制以及轉(zhuǎn)賬的驗(yàn)證等操作。比特幣腳本語言并不是圖靈完備的語言,僅僅只有不到200種命令,很難完成一些較為復(fù)雜的操作。以太坊中使用的智能合約語言則為Solidity語言和Serpent語言,都是圖靈完備的語言。Solidity語言還是一種面向?qū)ο蟮恼Z言,能夠?qū)χ悄芎霞s進(jìn)行復(fù)雜的邏輯處理,并且具有很強(qiáng)的合約表達(dá)能力。這使得以太坊平臺有很好的可擴(kuò)展性,近年來基于以太坊平臺的應(yīng)用也越來越多。
智能合約的生命周期分為為協(xié)商、開發(fā)、部署、運(yùn)行、銷毀5個階段。其中協(xié)商和開發(fā)兩個階段完成的是智能合約的產(chǎn)生,部署階段完成的是智能合約的發(fā)布,運(yùn)行和銷毀則是完成智能合約的執(zhí)行。為了能夠安全執(zhí)行,智能合約不能直接運(yùn)行在節(jié)點(diǎn)的外部環(huán)境,而是運(yùn)行在一種與外界隔離的沙箱環(huán)境中,如容器和虛擬機(jī)。目前,Hyperledger Febric使用的是一種輕量級的Docker容器作為智能合約的沙箱,而以太坊使用的沙箱是EVM虛擬機(jī)技術(shù)。
隨著區(qū)塊鏈的不斷發(fā)展,區(qū)塊鏈的應(yīng)用領(lǐng)域越來越廣泛,區(qū)塊鏈所承擔(dān)的價值不斷增加,同時安全風(fēng)險(xiǎn)也不斷增加,也受到了較為廣泛的關(guān)注。
區(qū)塊鏈分叉是指在同一區(qū)塊鏈上從某個節(jié)點(diǎn)開始出現(xiàn)了不止一條并行的鏈。區(qū)塊鏈中由于網(wǎng)絡(luò)延遲,可能會出現(xiàn)兩個或多個礦工同時挖出區(qū)塊,此時這幾個新區(qū)塊都為合法最長鏈的區(qū)塊。但這種情況不能一直維持下去,當(dāng)下一個區(qū)塊被發(fā)現(xiàn)追加到某一個區(qū)塊后面,其他區(qū)塊就成為非法區(qū)塊被拋棄。
區(qū)塊鏈系統(tǒng)協(xié)議的更新也會造成分叉。當(dāng)舊系統(tǒng)協(xié)議認(rèn)可新系統(tǒng)協(xié)議時:由于新系統(tǒng)區(qū)塊不認(rèn)可舊系統(tǒng)區(qū)塊,會導(dǎo)致短暫的分叉,但新協(xié)議鏈最后一定會成為最長鏈,這種分叉叫做軟分叉;當(dāng)舊系統(tǒng)協(xié)議不認(rèn)可新系統(tǒng)協(xié)議時:新舊系統(tǒng)區(qū)塊互相不認(rèn)可,會成分叉成兩條并行的鏈,這種分叉叫做硬分叉。2016年以太坊中的The DAO項(xiàng)目籌集了超過1 150萬個以太幣,但由于其智能合約中的漏洞遭到黑客攻擊,黑客盜取了約360萬個以太幣。以太坊對此投票決定是否回撤區(qū)塊,最終85%的人支持回撤,進(jìn)行了硬分叉。但舊鏈并沒有因此消亡,至今仍在運(yùn)行,被稱為經(jīng)典以太坊。
雙花攻擊又叫雙重支付,指攻擊者將同一貨幣進(jìn)行兩次不同的交易,是數(shù)字貨幣必須要解決的問題。在區(qū)塊鏈中,避免雙花攻擊的方式是通過交易驗(yàn)證貨幣的來源是否合法,回溯該貨幣的所有交易,直到回溯到最初產(chǎn)生該貨幣的區(qū)塊為止。雖然隨著區(qū)塊鏈的增長,回溯一筆交易的花費(fèi)也隨之增加,甚至可能需要回溯到創(chuàng)始區(qū)塊,但對于保障區(qū)塊鏈安全來說,這些消耗也是值得的。
51%攻擊是指區(qū)塊鏈系統(tǒng)中某個節(jié)點(diǎn)擁有全網(wǎng)超過51%的算力,可以通過在主鏈上分叉對區(qū)塊鏈中已經(jīng)確認(rèn)的交易回撤,以達(dá)到雙重支付的目的。原理是區(qū)塊鏈中認(rèn)定最長鏈為合法鏈,攻擊者以某個已經(jīng)確認(rèn)的區(qū)塊為起點(diǎn)發(fā)起分叉,因?yàn)閾碛谐^51%的算力,所以最后一定能成為最長鏈,而原本主鏈上起點(diǎn)區(qū)塊之后的所有區(qū)塊都成為非法區(qū)塊,里面的交易也被回撤了。在實(shí)際系統(tǒng)中,某個節(jié)點(diǎn)想要達(dá)到51%算力幾乎是不可能的,但一些礦場和礦池進(jìn)行算力集中化,使得區(qū)塊鏈的安全性也受到了一定威脅。
區(qū)塊鏈的未來需要考慮到區(qū)塊鏈平臺的可擴(kuò)展性和多平臺的可交互性,多鏈技術(shù)、側(cè)鏈技術(shù)、跨連技術(shù)這三種技術(shù)有望完成區(qū)塊鏈這一目標(biāo)。
多鏈技術(shù)是使在同一個區(qū)塊鏈平臺上存在多條并行的鏈,且這些鏈之間的交易互不影響的技術(shù)。實(shí)現(xiàn)多鏈的方法有分片,即對區(qū)塊鏈進(jìn)行區(qū)域分片。不同區(qū)域在不同的鏈上進(jìn)行交易,以達(dá)到并發(fā)執(zhí)行,提高交易吞吐量的目的。多鏈技術(shù)還需要解決在各個并行鏈之間通信,跨區(qū)域交易等問題。
側(cè)鏈技術(shù)是指在主鏈之外還存在一條獨(dú)立的鏈,這條鏈上擁有自己的共識機(jī)制、智能合約、交易類型、賬本等,通過雙向定錨的方式使得數(shù)字資產(chǎn)能在主鏈和側(cè)鏈之間相互轉(zhuǎn)移。側(cè)鏈技術(shù)的實(shí)現(xiàn)有單一托管模式、聯(lián)盟模式、SPV模式、驅(qū)動模式和混合模式五種模式。
跨鏈技術(shù)能將各個獨(dú)立區(qū)塊鏈平臺連接起來,起到區(qū)塊鏈平臺之間橋梁的作用。跨鏈技術(shù)有公證人機(jī)制、側(cè)鏈/中繼、哈希鎖定和分布式私鑰控制四種技術(shù)??珂溂夹g(shù)如果運(yùn)用成功對區(qū)塊鏈技術(shù)有巨大價值,完成多平臺之間交互是實(shí)現(xiàn)價值互聯(lián)網(wǎng)的關(guān)鍵一步。
本文對區(qū)塊鏈數(shù)據(jù)層、網(wǎng)絡(luò)層、共識層、合約層和應(yīng)用層五層架構(gòu)進(jìn)行了逐一介紹,并重點(diǎn)闡述了共識機(jī)制和智能合約,最后對區(qū)塊鏈的安全和未來發(fā)展方向進(jìn)行了介紹。隨著區(qū)塊鏈的發(fā)展,將會有更多基于區(qū)塊鏈的應(yīng)用會進(jìn)入我們生活的各方面,是未來實(shí)現(xiàn)價值互聯(lián)網(wǎng)的重要手段,值得對其進(jìn)行深入研究。區(qū)塊鏈技術(shù)對共識機(jī)制、安全性和可擴(kuò)展性的要求將會越來越高,所以目前應(yīng)該對共識機(jī)制的改進(jìn)、區(qū)塊鏈安全和區(qū)塊鏈平臺交互等方面進(jìn)行著重研究。