郭學(xué)沛 楊宇光
(北京工業(yè)大學(xué)信息學(xué)部 北京 100124) (876816720@qq.com)
區(qū)塊鏈?zhǔn)窃趨^(qū)塊鏈技術(shù)之上形成的公共數(shù)據(jù)庫(kù),是多種計(jì)算機(jī)技術(shù)的全新的、綜合的應(yīng)用,包含有分布式數(shù)據(jù)存儲(chǔ)、加密算法、點(diǎn)對(duì)點(diǎn)傳輸、共識(shí)機(jī)制等,借此具有去中心化的特性.可信互聯(lián)網(wǎng)的真正構(gòu)建始于區(qū)塊鏈的問(wèn)世.
區(qū)塊鏈獨(dú)特之處在于能夠在陌生節(jié)點(diǎn)之間構(gòu)建點(diǎn)對(duì)點(diǎn)的可靠的信任,而無(wú)需第三方可信權(quán)威機(jī)構(gòu)介入,信息得到公開(kāi)的同時(shí)隱私也得到保護(hù),所有的個(gè)人在維護(hù)自身利益之余又可一起參與決策,既提高了交易的效率,又大幅降低了成本.區(qū)塊鏈技術(shù)的優(yōu)勢(shì)在于去中心化,通過(guò)運(yùn)用加密算法、時(shí)間戳、樹(shù)形結(jié)構(gòu)、共識(shí)機(jī)制等,構(gòu)建了真正去中心化的分布式可信網(wǎng)絡(luò),加入其中的節(jié)點(diǎn)無(wú)需知道并信任彼此也可進(jìn)行交易,解決了目前中心化模式存在的低可靠性和低安全性、高成本、低效率等問(wèn)題[1].
公有鏈:對(duì)節(jié)點(diǎn)的加入和數(shù)據(jù)的公開(kāi)沒(méi)有任何限制.所有節(jié)點(diǎn)均可在不受其他影響的情況下進(jìn)行交易,以及參與其他共識(shí)決策活動(dòng).
私有鏈:某組織擁有并管理此種區(qū)塊鏈.讀取權(quán)限由該組織完全決定,參與節(jié)點(diǎn)的類(lèi)型和數(shù)量也由組織控制.相比于傳統(tǒng)的分享數(shù)據(jù)庫(kù),私有鏈由于控制了權(quán)限等內(nèi)容,使得交易更加安全,更利用加密技術(shù).
聯(lián)盟鏈:部分組織共同擁有的區(qū)塊鏈?zhǔn)且环N特殊的私有鏈.已有的應(yīng)用有R3區(qū)塊鏈聯(lián)盟、Chinaledger、超級(jí)賬本項(xiàng)目聯(lián)盟等[2].
數(shù)據(jù)庫(kù)的創(chuàng)建最初是服務(wù)于文件系統(tǒng)的,關(guān)系數(shù)據(jù)庫(kù)領(lǐng)域中的關(guān)系模型、事務(wù)處理、查詢(xún)優(yōu)化三大成就的出現(xiàn)滿(mǎn)足了以銀行為代表的金融機(jī)構(gòu)的業(yè)務(wù)需求,進(jìn)而產(chǎn)生了一系列的關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品.互聯(lián)網(wǎng)行業(yè)的迅速發(fā)展對(duì)數(shù)據(jù)庫(kù)也產(chǎn)生了更高的要求,由于非結(jié)構(gòu)化數(shù)量的大量增多,NoSQL數(shù)據(jù)庫(kù)應(yīng)運(yùn)而生并產(chǎn)生了一系列的相關(guān)產(chǎn)品.如今區(qū)塊鏈去中心化、分布式存儲(chǔ)的特性很好地解決了信任問(wèn)題,迎合了發(fā)展迅速的去中介的共享經(jīng)濟(jì),成為其理想的數(shù)據(jù)庫(kù)平臺(tái).
比特幣是發(fā)展最完全的區(qū)塊鏈應(yīng)用,但其僅為數(shù)字貨幣提供服務(wù),為此業(yè)界推出了多種支持通用應(yīng)用的區(qū)塊鏈平臺(tái),眾多公有鏈應(yīng)用中以太坊發(fā)展最為完善,Quorum,Monax,Dfinity,HydraChain和BCOS等眾多平臺(tái)都是基于以太坊構(gòu)建和擴(kuò)展的;而聯(lián)盟鏈中應(yīng)用最廣泛的通用平臺(tái)則是Hyperledger Fabric.
以比特幣、以太坊、超級(jí)賬本三者為例來(lái)看,不同的平臺(tái)在具體實(shí)現(xiàn)上各有不同,但整體布局上大同小異,整體上可劃分為網(wǎng)絡(luò)層、共識(shí)層、數(shù)據(jù)層、智能合約層和應(yīng)用層5個(gè)層次.
區(qū)塊鏈建立在P2P網(wǎng)絡(luò)之上,主要服務(wù)于涉及數(shù)字資產(chǎn)的金融應(yīng)用,且節(jié)點(diǎn)地位平等,對(duì)節(jié)點(diǎn)的出入也沒(méi)有嚴(yán)格的控制.因此,可容忍單點(diǎn)故障的P2P協(xié)議就很好地滿(mǎn)足了區(qū)塊鏈平臺(tái)的分布式要求,成為其網(wǎng)絡(luò)傳輸協(xié)議首選.鏈上節(jié)點(diǎn)以平等的身份,通過(guò)扁平的拓?fù)浣Y(jié)構(gòu)來(lái)相互連接,各節(jié)點(diǎn)功能相同,無(wú)層次等級(jí)之分.
P2P協(xié)議主要用于點(diǎn)對(duì)點(diǎn)的交易和數(shù)據(jù)共享,不同的平臺(tái)P2P協(xié)議的實(shí)現(xiàn)方式有所不同.比特幣和以太坊都基于TCP協(xié)議,Hyperledger Fabric則是利用了HTTP2協(xié)議.每個(gè)節(jié)點(diǎn)都在實(shí)時(shí)地監(jiān)聽(tīng)整個(gè)網(wǎng)絡(luò),當(dāng)收到相鄰節(jié)點(diǎn)發(fā)來(lái)的交易請(qǐng)求,節(jié)點(diǎn)會(huì)驗(yàn)證其數(shù)字簽名,證明機(jī)制是否完備,依次來(lái)判斷交易是否有效,是否值得進(jìn)行下一步處理和轉(zhuǎn)發(fā),無(wú)效的交易和區(qū)塊會(huì)被拋棄,減少了整個(gè)鏈上存儲(chǔ)的數(shù)據(jù)量.
一致性問(wèn)題歷來(lái)是分布式數(shù)據(jù)庫(kù)的一大難題,Paxos算法和Raft算法為該問(wèn)題提供了解決方案,單一機(jī)構(gòu)管理下的這些數(shù)據(jù)庫(kù)無(wú)需考慮節(jié)點(diǎn)是否可信的問(wèn)題,崩潰容錯(cuò)是算法唯一要解決的問(wèn)題.區(qū)塊鏈由于去中心化的特性需要多方共同管理,此時(shí)節(jié)點(diǎn)是否可信也需要納入考慮的范圍,需要支持拜占庭容錯(cuò),復(fù)雜度明顯上升.PBFT(practical Byzantine fault tolerance)將拜占庭協(xié)議的復(fù)雜度降至多項(xiàng)式級(jí)別,從而允許分布式系統(tǒng)使用拜占庭協(xié)議,PBFT由Castro和Liskov[3]提出.
Kotla等人[4]提出了Zyzzyva,充分任可節(jié)點(diǎn)的可信度,認(rèn)為只需在發(fā)生錯(cuò)誤后在節(jié)點(diǎn)間達(dá)成共識(shí)即可,正常情況下無(wú)需實(shí)時(shí)共識(shí)一致.Kwon等人[5]提出了Tendermint,類(lèi)似PoS機(jī)制,采用投票機(jī)制的同時(shí)根據(jù)節(jié)點(diǎn)的重要程度來(lái)分配不同權(quán)重的選票,最后權(quán)重超過(guò)23即可達(dá)成共識(shí).這樣無(wú)需所有節(jié)點(diǎn)都參與投票,提高了共識(shí)的效率.Liu等人[6]提出了CFT(Cross Fault Tolerance),肯定了網(wǎng)絡(luò)和拜占庭節(jié)點(diǎn)的可靠性,認(rèn)為二者不會(huì)完全被惡意攻擊者控制,簡(jiǎn)化了BFT過(guò)程.
由于節(jié)點(diǎn)可自由進(jìn)出,惡意節(jié)點(diǎn)可能仿造大量無(wú)效交易進(jìn)行女巫攻擊,為了防止這一點(diǎn),比特幣平臺(tái)采用了工作量證明機(jī)制,要求節(jié)點(diǎn)利用自己擁有的算力來(lái)完成任務(wù),從而爭(zhēng)奪新區(qū)快的記賬權(quán).但這樣會(huì)高度依賴(lài)節(jié)點(diǎn)的算力,未得到記賬權(quán)的節(jié)點(diǎn)花費(fèi)的資源就全部浪費(fèi)了,因此又提出了根據(jù)節(jié)點(diǎn)所擁有的股權(quán)多少來(lái)決定區(qū)塊生成難度的權(quán)益證明機(jī)制——PoS機(jī)制.比特股又創(chuàng)新地建立了股份授權(quán)證明機(jī)制——DPoS機(jī)制,投票選出幾位代表來(lái)輪流獲得區(qū)塊的記賬權(quán).
3.2.1PoW機(jī)制
PoW機(jī)制通過(guò)設(shè)計(jì)與引入分布式網(wǎng)絡(luò)節(jié)點(diǎn)的算力競(jìng)爭(zhēng),保證數(shù)據(jù)一致性和共識(shí).所有參與“挖礦”的網(wǎng)絡(luò)節(jié)點(diǎn)的目標(biāo)都是通過(guò)遍歷來(lái)尋找一個(gè)隨機(jī)數(shù),以使得當(dāng)前區(qū)塊的區(qū)塊頭經(jīng)過(guò)2次SHA256運(yùn)算后結(jié)果小于等于某個(gè)給定值.優(yōu)先實(shí)現(xiàn)目標(biāo)的節(jié)點(diǎn)獲得此區(qū)塊的擁有權(quán),同時(shí)獲得一定比特幣的回報(bào)作為挖礦的獎(jiǎng)勵(lì).此外,比特幣會(huì)動(dòng)態(tài)地調(diào)整預(yù)定難度值,使得尋找隨機(jī)數(shù)所需時(shí)間穩(wěn)定在10 min左右.PoW共識(shí)機(jī)制關(guān)聯(lián)起了比特幣的發(fā)行、交易和記錄,又以隨機(jī)的方式提供了記賬權(quán),保證了比特幣系統(tǒng)的安全和去中心化.
PoW 在區(qū)塊鏈網(wǎng)絡(luò)中的共識(shí)流程如下:
1) 通過(guò)廣播,所有加入?yún)^(qū)塊鏈網(wǎng)絡(luò)的節(jié)點(diǎn)均收到新交易產(chǎn)生的信息.
2) 每個(gè)節(jié)點(diǎn)都會(huì)收集自前一區(qū)塊生成以來(lái)接收到的所有交易,并根據(jù)這些交易計(jì)算出區(qū)塊頭部的Merkle根.節(jié)點(diǎn)需要將區(qū)塊頭中的隨機(jī)數(shù)Nonce部分從0遞增至1,遞增的過(guò)程中不斷計(jì)算區(qū)塊頭經(jīng)過(guò)2次SHA256運(yùn)算后的Hash值,直至結(jié)果小于等于當(dāng)前網(wǎng)絡(luò)給定的目標(biāo)值.
3) 全網(wǎng)節(jié)點(diǎn)同時(shí)參與計(jì)算,若某節(jié)點(diǎn)率先達(dá)成條件找到合適的隨機(jī)數(shù),則該節(jié)點(diǎn)將獲得新區(qū)塊的記賬權(quán)及一定數(shù)量的比特幣作為挖礦的獎(jiǎng)勵(lì),并將挖到的新區(qū)塊向全網(wǎng)廣播.
4) 其他節(jié)點(diǎn)接收到新區(qū)塊后,會(huì)驗(yàn)證區(qū)塊中包含的交易和其計(jì)算出的隨機(jī)數(shù)是否符合條件,如果滿(mǎn)足則承認(rèn)該區(qū)塊,將其加入?yún)^(qū)塊鏈中,并開(kāi)始爭(zhēng)奪下一區(qū)塊的記賬權(quán).
通過(guò)該機(jī)制,節(jié)點(diǎn)間無(wú)需交換額外的信息即可達(dá)成共識(shí),破壞系統(tǒng)的代價(jià)極高,因此易于實(shí)現(xiàn)且難以破壞.但會(huì)造成能源(電力)和資源(算力)的浪費(fèi),同時(shí)區(qū)塊的確認(rèn)時(shí)間較長(zhǎng)[8].
3.2.2PoS機(jī)制
PoS采用的是權(quán)益證明,記賬權(quán)由擁有最高權(quán)益的節(jié)點(diǎn)獲得,而非PoW機(jī)制中擁有最高算力的節(jié)點(diǎn).節(jié)點(diǎn)對(duì)特定數(shù)量貨幣的所有權(quán)成為權(quán)益、幣齡或幣天數(shù).幣齡等于貨幣數(shù)量乘以最后一次交易時(shí)間長(zhǎng)度.長(zhǎng)期持幣者有更長(zhǎng)的幣齡,幣齡可以視為其在系統(tǒng)中的權(quán)益.PoS共識(shí)過(guò)程的難度與節(jié)點(diǎn)擁有的幣齡成反比,累計(jì)消耗幣齡最高的區(qū)塊將被鏈接到主鏈.PoS機(jī)制無(wú)需消耗鏈外資源和能量,因此相較PoW機(jī)制很大程度上減少了能源和算力的浪費(fèi).
PoS機(jī)制直接根據(jù)礦工擁有的股權(quán)(數(shù)字貨幣量)來(lái)決定挖礦難度,省去了礦工購(gòu)買(mǎi)礦機(jī)等硬件設(shè)備的花銷(xiāo),也節(jié)約了電力等能源的消耗:
H(n‖h)≤s(M).t,
M表示某礦工;函數(shù)s用于計(jì)算礦工擁有的股權(quán),擁有的股權(quán)越多挖礦的整體難度就會(huì)越低,越容易找到合適的n.
PoS的優(yōu)點(diǎn)是所需算力很少.但由于權(quán)益擁有者并非都是記賬的有效參與者,因此很多時(shí)候還需通過(guò)挖礦來(lái)決定記賬權(quán)[8].
3.2.3DPoS機(jī)制
DPoS在繼承PoS優(yōu)點(diǎn)的基礎(chǔ)上,通過(guò)將記賬人專(zhuān)業(yè)化改進(jìn)了其不足.通過(guò)投票的方式選出一定數(shù)量的記賬人來(lái)輪流記賬,節(jié)點(diǎn)擁有的權(quán)益多少就是選票的多少.被選中的記賬人節(jié)點(diǎn)代替全網(wǎng)的普通節(jié)點(diǎn)進(jìn)行驗(yàn)證和記賬,同一時(shí)刻需要90%以上的記賬人節(jié)點(diǎn)在線才能保證安全與可靠.該共識(shí)機(jī)制中每個(gè)節(jié)點(diǎn)都能夠自主投票來(lái)選擇適合的記賬人節(jié)點(diǎn),且由這些節(jié)點(diǎn)輪流記賬生成新的區(qū)塊.
該機(jī)制無(wú)需所有節(jié)點(diǎn)參與記賬,節(jié)約了時(shí)間,可以達(dá)到秒級(jí)的共識(shí)驗(yàn)證.缺點(diǎn)是該共識(shí)機(jī)制依賴(lài)于代幣,但很多商業(yè)應(yīng)用是不需要代幣存在的[8].
3.2.4PBFT
1) 全網(wǎng)中選出1個(gè)節(jié)點(diǎn)負(fù)責(zé)生成新區(qū)快,該節(jié)點(diǎn)稱(chēng)為主節(jié)點(diǎn);
2) 網(wǎng)絡(luò)中所有節(jié)點(diǎn)會(huì)向全網(wǎng)廣播新產(chǎn)生的交易,主節(jié)點(diǎn)負(fù)責(zé)從中篩選出部分交易放入新區(qū)快內(nèi),并將其排序后產(chǎn)生的列表告知全網(wǎng);
3) 收到主節(jié)點(diǎn)廣播的列表后,每個(gè)節(jié)點(diǎn)都需要通過(guò)排序模擬來(lái)執(zhí)行交易,并計(jì)算新區(qū)快的Hash摘要,之后告知全網(wǎng);
4) 如果1個(gè)節(jié)點(diǎn)收到2f(f為可容忍的惡意節(jié)點(diǎn)數(shù))條和自己計(jì)算結(jié)果相同的Hash摘要,就向全網(wǎng)廣播1條commit消息;
5) 1個(gè)節(jié)點(diǎn)在收到2f+1條commit消息后,即可正式提交新區(qū)塊及其交易到本地的區(qū)塊鏈和狀態(tài)數(shù)據(jù)庫(kù).
3.2.5瑞波共識(shí)算法
該算法需要參與的全網(wǎng)節(jié)點(diǎn)通過(guò)一些特殊節(jié)點(diǎn)列表來(lái)形成共識(shí).初始特殊節(jié)點(diǎn)列表數(shù)量有限,新特殊節(jié)點(diǎn)的加入需要得到現(xiàn)有特殊節(jié)點(diǎn)中51%的節(jié)點(diǎn)同意.共識(shí)遵循著核心成員的51%權(quán)力,非特殊節(jié)點(diǎn)則權(quán)利很有限.該算法實(shí)際上是由特殊節(jié)點(diǎn)控制的中心化的算法,特殊節(jié)點(diǎn)群發(fā)生問(wèn)題時(shí)整個(gè)機(jī)制將崩潰,外部節(jié)點(diǎn)無(wú)法進(jìn)行任何挽救.
在數(shù)據(jù)結(jié)構(gòu)的組織上,時(shí)間戳是區(qū)塊鏈在前人研究基礎(chǔ)上的一大創(chuàng)新.文檔時(shí)間戳用于對(duì)新生成的文檔、當(dāng)前時(shí)間節(jié)點(diǎn)以及指向舊文檔的Hash指針三者簽名,之后的新文檔又將當(dāng)前的文檔當(dāng)作舊文檔來(lái)簽名,這樣便由時(shí)間戳為引子產(chǎn)生了一條證書(shū)鏈.鏈中時(shí)間一旦被簽名就無(wú)法篡改,可以用來(lái)很好地追溯文件的生成時(shí)間和前后順序等.現(xiàn)有區(qū)塊鏈平臺(tái)正是采用了基于文檔時(shí)間戳的數(shù)字公證服務(wù)來(lái)對(duì)文檔等信息進(jìn)行簽名處理.
每個(gè)區(qū)塊由區(qū)塊頭和區(qū)塊體2部分組成,交易數(shù)據(jù)主體、時(shí)間戳、前一區(qū)塊的區(qū)塊Hash值存放于區(qū)塊體內(nèi).本塊內(nèi)的交易數(shù)據(jù)經(jīng)過(guò)哈希運(yùn)算生成的Merkle根用于保證數(shù)據(jù)的穩(wěn)定安全,同時(shí)用于簡(jiǎn)單支付驗(yàn)證.前塊哈希則是將不同的區(qū)塊聯(lián)系在一起的紐帶.不可篡改的時(shí)間戳用于說(shuō)明區(qū)塊的生成時(shí)間,方便以后追溯查找.比特幣的區(qū)塊頭還含有當(dāng)前挖礦的難度系數(shù)、挖礦時(shí)找到的合適的隨機(jī)數(shù)Nonce等.
在數(shù)據(jù)模型方面,比特幣使用的是基于交易的數(shù)據(jù)模型,交易的輸入和輸出分別表示交易的來(lái)源和去向,二者共同構(gòu)成了一筆交易,且將不同的交易聯(lián)系在一起.以太坊和Hyperledger Fabric則采用了基于賬戶(hù)的模型,方便快速查找到當(dāng)前賬戶(hù)的余額和狀態(tài),以便支持更多的通用應(yīng)用.
在數(shù)據(jù)存儲(chǔ)的設(shè)計(jì)上,區(qū)塊鏈數(shù)據(jù)常以日志文件格式來(lái)存儲(chǔ),這點(diǎn)類(lèi)似于傳統(tǒng)數(shù)據(jù)庫(kù)的預(yù)寫(xiě)式日志.而索引數(shù)據(jù)和狀態(tài)數(shù)據(jù)則存入鍵值對(duì)數(shù)據(jù)庫(kù)方便系統(tǒng)進(jìn)行基于Hash值的鍵值對(duì)查找.
智能合約本質(zhì)上是一種部署在區(qū)塊鏈的數(shù)字協(xié)議,由算法和程序來(lái)編寫(xiě),達(dá)到觸發(fā)條件后可自動(dòng)執(zhí)行,無(wú)需人為的干預(yù).起初,智能合約是一組數(shù)字形式的承諾,包括合約雙方同意履行承諾而擬定的協(xié)議,期望將合約與實(shí)物結(jié)合來(lái)創(chuàng)造靈活的智能資產(chǎn).由于區(qū)塊鏈可去中心分布式存儲(chǔ)的特點(diǎn),智能合約借此完成了去中心化的計(jì)算.
智能合約中含有提前定義好的狀態(tài)信息、轉(zhuǎn)換規(guī)則、合約執(zhí)行條件以及合約約定的操作等,合約參與方簽署后,作為一段代碼加入?yún)^(qū)塊鏈數(shù)據(jù)中,通過(guò)區(qū)塊鏈網(wǎng)絡(luò)的傳播,經(jīng)各節(jié)點(diǎn)驗(yàn)證后被記入分布式賬本中.區(qū)塊鏈可以實(shí)時(shí)監(jiān)控整個(gè)智能合約的狀態(tài),在確認(rèn)滿(mǎn)足特定的合約執(zhí)行條件后啟動(dòng)并執(zhí)行合約中規(guī)定的操作.
比特幣的腳本可視為智能合約的雛形,其是一組類(lèi)型單一、功能有限的指令.以太坊使用了圖靈完備的編程語(yǔ)言Solidity,Serpent,與可模擬程序執(zhí)行的沙盒環(huán)境——以太坊虛擬機(jī)EVM(Ethereum virtual machine),以供用戶(hù)編寫(xiě)和運(yùn)行智能合約.Hyperledger Fabric的智能合約被稱(chēng)為Chaincode,Docker容器是其沙盒環(huán)境,編程語(yǔ)言則選用Go和Java.
基于比特幣的交易是比特幣平臺(tái)上應(yīng)用的主體.以太坊則功能更加豐富,除了基于其特有的以太幣的數(shù)字貨幣交易外,還支持去各種中心化應(yīng)用.Dapp是其上的一種Web前端應(yīng)用,由JavaScript語(yǔ)言編寫(xiě),利用JSON-RPC與運(yùn)行在以太坊節(jié)點(diǎn)上的智能合約進(jìn)行交互.超級(jí)賬本上的應(yīng)用則主要面向企業(yè)級(jí),未提供數(shù)字貨幣,其應(yīng)用可基于Go,Java,Python,Node.js等編程語(yǔ)言構(gòu)建,并通過(guò)gPRC或REST與運(yùn)行在Hyperledger Fabric節(jié)點(diǎn)上的智能合約進(jìn)行通信.
智能合約本質(zhì)上是寫(xiě)好的一段代碼,在預(yù)定條件滿(mǎn)足時(shí)無(wú)需用戶(hù)干預(yù)可自動(dòng)執(zhí)行代碼內(nèi)容,實(shí)現(xiàn)“代碼即法律”的目標(biāo).借助區(qū)塊鏈擁有的去中心化特點(diǎn),智能合約無(wú)需管理者參與,一旦部署并觸發(fā)就無(wú)人可將其強(qiáng)制停止,且可同時(shí)運(yùn)行在全鏈的所有節(jié)點(diǎn)上.智能合約的運(yùn)作機(jī)制如圖1所示,其中Txn表示每個(gè)區(qū)塊所含的n筆交易:
圖1 智能合約運(yùn)行機(jī)制
智能合約通常與商業(yè)活動(dòng)掛鉤,依照其邏輯編寫(xiě)完成后就可布置到全網(wǎng)的所有節(jié)點(diǎn)上.在以太坊中,合約存放在區(qū)塊鏈上,滿(mǎn)足條件觸發(fā)合約時(shí)由以太坊虛擬機(jī)(EVM)加載運(yùn)行;在 Hyperledger Fabric中,合約被打包成Docker鏡像,網(wǎng)絡(luò)中所有節(jié)點(diǎn)會(huì)基于此各自構(gòu)建一個(gè)Docker容器,同時(shí)對(duì)合約進(jìn)行初始化,然后等待被調(diào)用.外部應(yīng)用通過(guò)調(diào)用智能合約來(lái)實(shí)現(xiàn)各種交易,欲修改智能合約需要在全網(wǎng)達(dá)成共識(shí),同時(shí)所有的修改還會(huì)被記錄在區(qū)塊鏈上,狀態(tài)數(shù)據(jù)庫(kù)同時(shí)會(huì)保存修改后的結(jié)果,方便有據(jù)可查(例如,轉(zhuǎn)賬交易的轉(zhuǎn)賬金額會(huì)被記錄到區(qū)塊鏈,賬戶(hù)余額的增減會(huì)被應(yīng)用到狀態(tài)數(shù)據(jù)庫(kù)).僅查詢(xún)不涉及修改時(shí)則無(wú)需共識(shí)和記錄.
數(shù)據(jù)庫(kù)的性能可通過(guò)橫向擴(kuò)展增加節(jié)點(diǎn)數(shù)來(lái)提高,且提高過(guò)程呈線性.比特幣、以太坊和Hyperledger Fabric目前采用單鏈方案,即整個(gè)網(wǎng)絡(luò)只有一條鏈作為區(qū)塊鏈的主鏈,網(wǎng)絡(luò)上的每個(gè)節(jié)點(diǎn)地位、功能都相同,都需要完成同樣多的工作,因此單個(gè)節(jié)點(diǎn)的能力強(qiáng)弱就成為制約整個(gè)系統(tǒng)處理能力的關(guān)鍵.同時(shí),無(wú)論何種共識(shí)算法,其都會(huì)有資源、能源、時(shí)間的消耗,因此節(jié)點(diǎn)過(guò)多可能會(huì)導(dǎo)致系統(tǒng)的整體能力不升反降.為了實(shí)現(xiàn)動(dòng)態(tài)的可擴(kuò)展性,以太坊和Hyperledger Fabric分別創(chuàng)新了分片和多通道2種解決方案,使得全網(wǎng)中同時(shí)含有多條區(qū)塊鏈,克服了全網(wǎng)處理能力受限于單個(gè)節(jié)點(diǎn)的短板,又可并行處理多筆交易,從而提升系統(tǒng)整體性能[7].
以太坊分片的依據(jù)是賬戶(hù)地址,分片之間并非完全獨(dú)立,每個(gè)分片內(nèi)都有一條獨(dú)立子鏈,加入哪個(gè)分片由用戶(hù)自行選擇,每個(gè)節(jié)點(diǎn)選擇加入哪個(gè)分片或哪幾個(gè)分片由節(jié)點(diǎn)基于自身能力來(lái)決定,加入后則要負(fù)責(zé)處理和存儲(chǔ)這些分片上的交易.最終所有的分片都會(huì)至少有一個(gè)節(jié)點(diǎn)加入,某一節(jié)點(diǎn)不再需要存儲(chǔ)和處理全部的數(shù)據(jù),訪問(wèn)自身沒(méi)有的數(shù)據(jù)時(shí)可從其他分片內(nèi)的節(jié)點(diǎn)讀取.應(yīng)用分片技術(shù)后,每個(gè)片相當(dāng)于成為一條獨(dú)立的鏈,由于每個(gè)片都只包含了全網(wǎng)的部分節(jié)點(diǎn),所以片內(nèi)的算力和明顯小于之前的全網(wǎng)所有節(jié)點(diǎn)算力總和.單個(gè)分片內(nèi)攻擊者容易突破51%的算力,因此不再適用工作量證明機(jī)制,改進(jìn)后的以太坊2.0使用的是基于權(quán)益證明機(jī)制的Casper共識(shí)算法.
不同于以太坊是出于均衡資源的考慮來(lái)將全網(wǎng)按地址劃分成片,Hyperledger Fabric的通道技術(shù)則是基于交易規(guī)則將整個(gè)區(qū)塊鏈網(wǎng)絡(luò)劃分為多個(gè)邏輯上的通道,每個(gè)節(jié)點(diǎn)根據(jù)自身需要負(fù)責(zé)參與的交易不同自主地選擇加入不同的通道,如圖2所示,每個(gè)節(jié)點(diǎn)可以加入多個(gè)不同的通道,并可以同時(shí)接收并處理多條鏈上的區(qū)塊,多個(gè)鏈上的交易可以獨(dú)立、并發(fā)地執(zhí)行.相對(duì)于原來(lái)的單鏈結(jié)構(gòu),全網(wǎng)吞吐量將顯著提升.
圖2 多通道示意圖
基于PoW共識(shí)機(jī)制的比特幣和以太坊對(duì)節(jié)點(diǎn)的出入并沒(méi)有進(jìn)行任何限制,節(jié)點(diǎn)數(shù)量并不固定.而Hyperledger Fabric采用的PBFT算法要求節(jié)點(diǎn)數(shù)目已知且固定不變,因此限制了節(jié)點(diǎn)的加入和退出.Hyperledger Fabric1.0將網(wǎng)絡(luò)節(jié)點(diǎn)分為共識(shí)節(jié)點(diǎn)和記賬節(jié)點(diǎn),將共識(shí)服務(wù)和記賬服務(wù)分離開(kāi)來(lái),從而使得記賬節(jié)點(diǎn)可以按照需求動(dòng)態(tài)加入或退出,進(jìn)一步提高了系統(tǒng)的可擴(kuò)展性.
出于安全性的考慮,傳統(tǒng)數(shù)據(jù)庫(kù)一般都設(shè)計(jì)了一整套完備的用戶(hù)管理機(jī)制和存取控制系統(tǒng),但二者通常都需要一個(gè)權(quán)威可信的中心節(jié)點(diǎn)來(lái)運(yùn)行控制,并不適合區(qū)塊鏈所倡導(dǎo)的去中心化;同時(shí),若對(duì)數(shù)據(jù)的存取進(jìn)行限制,公有鏈所說(shuō)的數(shù)據(jù)完全公開(kāi)透明便無(wú)法實(shí)現(xiàn).因此這2種傳統(tǒng)的方法都不適合于區(qū)塊鏈網(wǎng)絡(luò).區(qū)塊鏈采用的是數(shù)字簽名來(lái)證明貨幣對(duì)的歸屬權(quán),同時(shí)可通過(guò)簽名驗(yàn)證來(lái)保證交易不可篡改、不可否認(rèn);為保障交易雙方及交易具體信息的隱私性,每次交易時(shí)都會(huì)使用不同的數(shù)字證書(shū)和賬戶(hù)地址.
由于公有鏈強(qiáng)調(diào)數(shù)據(jù)的公開(kāi)透明,因此比特幣和以太坊都未設(shè)置用戶(hù)管理,公鑰是用戶(hù)唯一的身份證明.交易的安全可靠則由數(shù)字簽名算法來(lái)保證,簽名算法使用了橢圓曲線數(shù)字簽名算法(ECDSA)[9].
交易過(guò)程中(以轉(zhuǎn)賬交易為例),接受者需要向發(fā)起者提供其比特幣地址pubKeyHash,該地址是接受者公鑰經(jīng)SHA256和RIPEMD160 2次Hash運(yùn)算的結(jié)果.該比特幣地址會(huì)被存放在交易的輸出腳本ScriptPubKey中.為保證交易的可靠性,發(fā)送者需要對(duì)該筆交易數(shù)據(jù)進(jìn)行簽名,簽名用于說(shuō)明發(fā)起者承認(rèn)該筆交易由自己發(fā)出,自己親自花出了前一筆交易中獲得的比特幣.之后把簽名sig和發(fā)送者自身的公鑰pubKey放在輸入腳本ScriptSig中.接受者一方面可用公鑰來(lái)驗(yàn)證簽名sig的有效性,另一方面可以驗(yàn)證其Hash值是否和前一筆交易輸出腳本中的比特幣地址pubKeyHash一致,以驗(yàn)證發(fā)送者確實(shí)擁有交易中約定數(shù)量的比特幣.以上所有簽名與驗(yàn)證過(guò)程都是基于輸入腳本和輸出腳本自動(dòng)完成的.
以太坊的簽名過(guò)程如圖3所示.基于橢圓曲線算法強(qiáng)大的功能,交易數(shù)據(jù)無(wú)需再包含發(fā)送者的公鑰和地址,結(jié)合發(fā)送者提供的ECDSA簽名、交易數(shù)據(jù)、橢圓曲線參數(shù)便可還原出發(fā)送者公鑰,再經(jīng)SHA3運(yùn)算可得出發(fā)送者的地址.這樣雖然提高了一些驗(yàn)證過(guò)程中的運(yùn)算量但減少了交易所含的字節(jié)數(shù),節(jié)約了存儲(chǔ)開(kāi)銷(xiāo).
Hyperledger Fabric主要服務(wù)于聯(lián)盟鏈,因此所有節(jié)點(diǎn)和用戶(hù)的出入必須經(jīng)過(guò)聯(lián)盟的授權(quán)與同意.為此Hyperledger Fabric提供了相應(yīng)的成員管理服務(wù)——Membership,并基于CA中心分別提供了ECert(enrollment cert),TCert(transaction cert)和TLSCert(transport layer security cert)3種類(lèi)型的數(shù)字證書(shū)用于不同環(huán)節(jié)的驗(yàn)證.ECert證書(shū)用于在登錄系統(tǒng)時(shí)確認(rèn)節(jié)點(diǎn)和用戶(hù)的身份.TCert證書(shū)用于交易過(guò)程中的簽名與驗(yàn)證,Hyperledger Fabric的每筆交易都需要發(fā)送者提供簽名和交易證書(shū),為保護(hù)用戶(hù)的隱私性,防止惡意攻擊者通過(guò)交易證書(shū)發(fā)現(xiàn)交易發(fā)起者,每次交易可使用不同的TCert證書(shū).TLSCert證書(shū)則用于系統(tǒng)組件間的SSLTLS通信.
圖3 以太坊簽名過(guò)程
SHA-256算法計(jì)算過(guò)程中涉及6個(gè)邏輯函數(shù)和1組常數(shù)Kt,采用了512 b大小的消息塊,每一個(gè)消息塊xi又分成16個(gè)32 b的字M0,M1,…,M15,計(jì)算過(guò)程如下[10]:
1) 初始化:
2) 構(gòu)建消息列表Wt:
4) 對(duì)于0≤t≤63,執(zhí)行:
5) 計(jì)算每個(gè)分組的中間Hash值:
最后輸出256 b長(zhǎng)度的Hash值:
整個(gè)過(guò)程中涉及到的函數(shù)計(jì)算如下:
Ch(x,y,z)=(x∧y)⊕(x∧z),
Mai(x,y,z)=(x∧y)⊕(x∧z)⊕(y∧z),
橢圓曲線密碼系統(tǒng)(ECC)具有密鑰短、運(yùn)算快等優(yōu)點(diǎn),因此可以在ECC理論基礎(chǔ)上建立相應(yīng)的方案體系來(lái)增強(qiáng)交易的安全性.橢圓曲線定義在有限域G(p)上,其上的有理數(shù)點(diǎn)構(gòu)成了一個(gè)阿貝爾群,因此橢圓曲線密碼的密鑰只可單向推導(dǎo),即從公鑰得到私鑰很容易實(shí)現(xiàn),反之則很難,單向性很好地保護(hù)了數(shù)據(jù)的安全.
6.3.1橢圓曲線系統(tǒng)ECC
y2+a1xy+a3=x3+a2x2+a4x+a6.
圖4 橢圓曲線上的加法定義
橢圓曲線上的加法定義如圖4所示:橢圓曲線(EC)上任取2點(diǎn)p1,p2,求和后可得到點(diǎn)p4:過(guò)p1,p2作直線L,它與EC相交于點(diǎn)p3,過(guò)p3作x軸垂線交EC于點(diǎn)p(x,y),令p4=p=p1+p2.曲線上的點(diǎn)對(duì)所定義的加法運(yùn)算構(gòu)成一個(gè)阿貝爾群.
當(dāng)p1=p2時(shí),多個(gè)p連續(xù)相加則轉(zhuǎn)化為數(shù)乘運(yùn)算:kp=p+p+…+p,共需完成k-1次加法.數(shù)乘運(yùn)算也具有單向性,當(dāng)k和p已知時(shí)很容易求出kp,反之知道結(jié)果要求k則十分困難.利用其單向性的優(yōu)點(diǎn),可令x=k為私鑰,公鑰為y=xp.由公鑰很難推導(dǎo)出私鑰[11].
6.3.2簽名與驗(yàn)證方程
簽名方程對(duì)實(shí)現(xiàn)ElGamal,DSA等系統(tǒng)方案至關(guān)重要.在ElGamal系統(tǒng)中簽名過(guò)程如下:
取素?cái)?shù)p,另取q使q=p-1或q是p-1的大素?cái)?shù)因子.然后取g介于1和p之間并滿(mǎn)足gq=1(modp).令私鑰x 簽名方程(SE):sk=m+rx(modq), (1) 驗(yàn)證方程(VE):rs=gmyr(modp). (2) 簽名者通過(guò)式(1)生成簽名(s,r),驗(yàn)證者將其帶入式(2),若等式成立則說(shuō)明簽名有效.式(1)、式(2)中涉及到了乘法和冪運(yùn)算,計(jì)算過(guò)程中有一定困難,橢圓曲線簽名方程對(duì)二者進(jìn)行了一定的改進(jìn),得到新的方程如下: 簽名方程(SE):sk=m+rx, (3) 驗(yàn)證方程(VE):rs=mg+ry, (4) 其中,m為待簽名文件,可為明文,已加密文件或經(jīng)過(guò)Hash函數(shù)的結(jié)果.r=kg,g為橢圓曲線加法群生成元,x為私鑰,y為公鑰,即有y=xg.從式(3)中求出s,若代入式(4)中,有式(4)成立,則通過(guò)簽名驗(yàn)證. 比特幣和以太坊的賬戶(hù)地址都是公鑰的Hash值,不直接反映用戶(hù)的真實(shí)身份信息,二者借此實(shí)現(xiàn)了一定程度的匿名性,保護(hù)了用戶(hù)的信息.另外,每次交易都使用互相毫無(wú)關(guān)聯(lián)的新地址,切斷了交易之間的關(guān)聯(lián)性,使得不可通過(guò)一個(gè)交易來(lái)牽扯出其他交易.但是,這些方案無(wú)法保障絕對(duì)的隱私性. 區(qū)塊鏈需要在驗(yàn)證交易正確的同時(shí)保證交易具體內(nèi)容的隱秘與安全.目前常用的隱私保護(hù)方案包括混幣、環(huán)簽名、零知識(shí)證明、同態(tài)加密等. Hyperledger Fabric 0.6采用了單鏈的方案,鏈上用戶(hù)都存有并可訪問(wèn)到全網(wǎng)的所有數(shù)據(jù).聯(lián)盟鏈主要面向商業(yè)應(yīng)用,用戶(hù)多為大型企業(yè),因此保護(hù)其數(shù)據(jù)顯得更為重要.Hyperledger Fabric 1.0采用了多通道的方案,交易的雙方通過(guò)建立專(zhuān)屬于自己的通道來(lái)保證交易的安全與隱秘. 當(dāng)前,區(qū)塊鏈主流應(yīng)用重點(diǎn)分布在以下幾個(gè)領(lǐng)域: 1) 金融領(lǐng)域 金融一直以來(lái)都是各國(guó)經(jīng)濟(jì)發(fā)展的最大動(dòng)力,然而當(dāng)前金融行業(yè)普遍需要權(quán)威中介機(jī)構(gòu)的存在,很大程度上提高了成本且降低了效率.區(qū)塊鏈技術(shù)獨(dú)有的分布式、去中心化特點(diǎn)則可將金融行業(yè)從現(xiàn)有的約束中解放出來(lái),當(dāng)前在證券、支付、理賠等方面都有典型的成功應(yīng)用[12],如B2B跨境支付項(xiàng)目、Linq交易平臺(tái)等,極大地簡(jiǎn)化了流程,提高了效率,降低了成本. 2) 物聯(lián)網(wǎng)領(lǐng)域 當(dāng)前物聯(lián)網(wǎng)需要大型的云端服務(wù)器來(lái)連接不同的設(shè)備,中心化的網(wǎng)絡(luò)架構(gòu)一定程度上限制了其規(guī)模的擴(kuò)大,否則需要支付巨額的搭建和維護(hù)費(fèi)用.而借助區(qū)塊鏈,物聯(lián)網(wǎng)上的所有設(shè)備都可當(dāng)作一個(gè)獨(dú)立的主體來(lái)運(yùn)行,彼此之間互相合作而不互相約束[13].典型的有三星和IBM打造的ADEPT系統(tǒng). 3) 公共服務(wù)領(lǐng)域 區(qū)塊鏈中交易一旦被打包入塊并加入鏈上,便具有了很高的安全性,很難被攻破并篡改.利用區(qū)塊鏈的這一特點(diǎn),可以在公共服務(wù)領(lǐng)域建立全新的認(rèn)證機(jī)制,提高管理效率,改善管理水平,縮短價(jià)值的創(chuàng)造和投入利用的周期[14].例如:Ujo Music平臺(tái)可通過(guò)區(qū)塊鏈管理音樂(lè)版權(quán);BitProof利用區(qū)塊鏈來(lái)快速認(rèn)證用戶(hù)的學(xué)歷信息等. 4) 公益慈善領(lǐng)域 同樣借助區(qū)塊鏈上信息可靠性高、不易被篡改的特點(diǎn),公益領(lǐng)域中的相關(guān)信息均可存放在區(qū)塊鏈上,并可選擇性地公開(kāi)相關(guān)信息,方便公眾實(shí)時(shí)監(jiān)督的同時(shí)尊重參與者的意志,保護(hù)其私有信息,例如BitGive建立了一個(gè)致力于將比特幣用于慈善事業(yè)的捐贈(zèng)平臺(tái),極大地促進(jìn)了慈善事業(yè)的發(fā)展. 5) 供應(yīng)鏈 由于加入?yún)^(qū)塊鏈的所有節(jié)點(diǎn)都共享有全鏈的所有數(shù)據(jù),所以借助區(qū)塊鏈后供應(yīng)鏈的信息共享和確認(rèn)變得異常容易,其中存在的問(wèn)題也可被快速發(fā)現(xiàn)并針對(duì)性地提出解決方案,其數(shù)據(jù)不可篡改且可追蹤時(shí)間戳的特性,可以輕松地實(shí)現(xiàn)問(wèn)題的舉證與追責(zé).如英國(guó)的Provenance就為加入其中的企業(yè)提供了完整的供應(yīng)溯源服務(wù). 6) 發(fā)展路線 針對(duì)區(qū)塊鏈的特點(diǎn)及當(dāng)前的發(fā)展現(xiàn)狀,大致形成了2條不同的發(fā)展路線: 自上而下的路線將重心放在大型金融機(jī)構(gòu)如銀行,投資機(jī)構(gòu)等,促進(jìn)其組建區(qū)塊鏈聯(lián)盟,進(jìn)而帶動(dòng)其他行業(yè)中的區(qū)塊鏈發(fā)展;自下而上的路線則將目光聚焦于低層社區(qū),推動(dòng)諸如比特幣和以太坊這樣的商業(yè)模式的形成和運(yùn)作. 中國(guó)企業(yè)級(jí)的區(qū)塊鏈發(fā)展始于2015年年底,經(jīng)過(guò)1年的發(fā)展,已有近百家相關(guān)公司落地生根,并涌現(xiàn)出了一大批優(yōu)秀的代表性企業(yè). 我國(guó)的區(qū)塊鏈行業(yè)始于聯(lián)盟的成立,國(guó)內(nèi)主要形成三大聯(lián)盟:2016年1月5日,中國(guó)首個(gè)區(qū)塊鏈聯(lián)盟“中國(guó)區(qū)塊鏈研究聯(lián)盟”落戶(hù)北京;2016 年4月19日,中國(guó)分布式總賬基礎(chǔ)協(xié)議聯(lián)盟(China Ledger)宣告成立;5月31日,由微眾銀行、深金信會(huì)等25家單位發(fā)起的金融區(qū)塊鏈合作聯(lián)盟正式成立,其中絕大多數(shù)是金融機(jī)構(gòu),剩余則是金融科技企業(yè)和互聯(lián)網(wǎng)企業(yè). 2016年國(guó)內(nèi)區(qū)塊鏈研究聯(lián)盟相繼成立,國(guó)內(nèi)金融機(jī)構(gòu)開(kāi)始由簡(jiǎn)單地使用區(qū)塊鏈向?qū)^(qū)塊鏈進(jìn)行進(jìn)一步的探索.2017年區(qū)塊鏈應(yīng)用落地將進(jìn)一步加速.同時(shí),海外區(qū)塊鏈成為國(guó)內(nèi)企業(yè)的投資熱點(diǎn),國(guó)內(nèi)企業(yè)積極利用全球資源,進(jìn)而發(fā)展自身并帶動(dòng)全行業(yè)發(fā)展. 無(wú)論從哪個(gè)方面來(lái)看,中國(guó)的區(qū)塊鏈產(chǎn)業(yè)都處于一個(gè)十分活躍且前景良好的階段. 1) 去中心化.不同于傳統(tǒng)數(shù)據(jù)庫(kù)受制于單一機(jī)構(gòu),由該機(jī)構(gòu)提供管理和維護(hù),部署也局限于有限的集群內(nèi),去中心化是區(qū)塊鏈的最大特點(diǎn),區(qū)塊鏈網(wǎng)絡(luò)中所有節(jié)點(diǎn)都處于平等地位,沒(méi)有中心節(jié)點(diǎn)的存在,所有節(jié)點(diǎn)都享有對(duì)全部數(shù)據(jù)的存儲(chǔ)和訪問(wèn)權(quán),從而實(shí)現(xiàn)了陌生節(jié)點(diǎn)間可彼此信任,從而進(jìn)行交易和信息共享. 2) 不可篡改.不同區(qū)塊間依靠區(qū)塊頭內(nèi)的Hash指針和區(qū)塊體內(nèi)的Merkle樹(shù)來(lái)連接,這種方式保證了已錄入塊內(nèi)的數(shù)據(jù)是安全、不可篡改的.去中心化的分布式存儲(chǔ)和共識(shí)機(jī)制的運(yùn)用更增加了信息的安全性,單一節(jié)點(diǎn)被攻破不會(huì)影響其他節(jié)點(diǎn). 3) 可追溯.區(qū)塊內(nèi)的時(shí)間戳部分記錄了區(qū)塊的生成時(shí)間,整個(gè)鏈上存儲(chǔ)著初始以來(lái)的所有交易數(shù)據(jù),基于數(shù)據(jù)的不可篡改和時(shí)間戳的存在,各節(jié)點(diǎn)和監(jiān)管機(jī)構(gòu)都可隨時(shí)方便地追溯、監(jiān)管任一交易. 4) 高可信.由于去中心化的特性,加入?yún)^(qū)塊鏈的節(jié)點(diǎn)彼此之間無(wú)需互相信任也可安全地進(jìn)行點(diǎn)對(duì)點(diǎn)交易和信息傳輸.且鏈上的每筆交易都包含發(fā)送者的簽名,都需經(jīng)過(guò)全網(wǎng)共識(shí),多重機(jī)制保證了數(shù)據(jù)的不可篡改、不可否認(rèn). 5) 高可用.傳統(tǒng)分布式數(shù)據(jù)庫(kù)多應(yīng)用主備模式來(lái)保證系統(tǒng)的正常運(yùn)行:主數(shù)據(jù)庫(kù)要求較高,一般運(yùn)行在高配服務(wù)器上;備份數(shù)據(jù)庫(kù)則實(shí)時(shí)地同步主數(shù)據(jù)庫(kù)的信息.當(dāng)主數(shù)據(jù)庫(kù)崩潰時(shí),需要將備份數(shù)據(jù)庫(kù)切換為主數(shù)據(jù)庫(kù).該模式需要復(fù)雜的配置和昂貴的造價(jià)與維護(hù).而在區(qū)塊鏈系統(tǒng)中,所有節(jié)點(diǎn)地位平等,沒(méi)有主從之分,少數(shù)節(jié)點(diǎn)即使出現(xiàn)故障或遭到攻擊也不會(huì)影響其他節(jié)點(diǎn),且問(wèn)題節(jié)點(diǎn)恢復(fù)正常后還可重新存儲(chǔ)全網(wǎng)的所有數(shù)據(jù). 1) 吞吐量.相較于傳統(tǒng)數(shù)據(jù)庫(kù)的吞吐量,比特幣的7 TBs和以太坊的25 TBs顯然要低很多,即使Hyperledger Fabric有所改進(jìn),其吞吐量也未超過(guò)2 000 TBs.區(qū)塊鏈?zhǔn)菍⒁欢〞r(shí)間內(nèi)發(fā)生的全部交易集體打包后再統(tǒng)一處理,無(wú)法實(shí)現(xiàn)實(shí)時(shí)的認(rèn)證和交易.共識(shí)機(jī)制的引入,無(wú)論是PoW還是PBFT,都在提高安全性的同時(shí)降低了系統(tǒng)的性能,其復(fù)雜的簽名與認(rèn)證過(guò)程都涉及一定的系統(tǒng)開(kāi)銷(xiāo). 2) 事務(wù)處理.目前區(qū)塊鏈所依賴(lài)的底層數(shù)據(jù)庫(kù)多為鍵值對(duì)(Key-Value)數(shù)據(jù)庫(kù),這種數(shù)據(jù)庫(kù)缺乏事務(wù)處理能力.三大主流平臺(tái):比特幣、以太坊、Hyperledger Fabric都采用了LevelDB數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)鏈上的索引和狀態(tài)數(shù)據(jù).但該數(shù)據(jù)庫(kù)也不支持嚴(yán)格的事務(wù)處理,當(dāng)單節(jié)點(diǎn)合約執(zhí)行有誤時(shí)需要從其他節(jié)點(diǎn)重新同步數(shù)據(jù)來(lái)恢復(fù)正常. 3) 并發(fā)處理.傳統(tǒng)數(shù)據(jù)庫(kù)可同時(shí)并發(fā)處理大量客戶(hù)端的請(qǐng)求,但區(qū)塊鏈上的節(jié)點(diǎn)大多是身份對(duì)等地參與區(qū)塊鏈的P2P網(wǎng)絡(luò),無(wú)法支持大量客戶(hù)端的高并發(fā)訪問(wèn). 4) 查詢(xún)統(tǒng)計(jì).由于數(shù)據(jù)庫(kù)的架構(gòu)和特性不同,傳統(tǒng)數(shù)據(jù)庫(kù)中用戶(hù)可方便地通過(guò)函數(shù)語(yǔ)句來(lái)查詢(xún)想要的信息并作出統(tǒng)計(jì).但區(qū)塊鏈底層的Key-Value數(shù)據(jù)庫(kù)或文件系統(tǒng)使得簡(jiǎn)單的歷史數(shù)據(jù)查詢(xún)都變得復(fù)雜,統(tǒng)計(jì)和復(fù)合查詢(xún)則更難實(shí)現(xiàn).針對(duì)這一問(wèn)題,區(qū)塊鏈可通過(guò)插件化來(lái)支持多種不同的數(shù)據(jù)庫(kù),改進(jìn)數(shù)據(jù)訪問(wèn)機(jī)制. 5) 訪問(wèn)控制.去中心化帶來(lái)的一大問(wèn)題就是訪問(wèn)控制機(jī)制的弱化.大多數(shù)區(qū)塊鏈平臺(tái)尤其是公有鏈,數(shù)據(jù)都是存儲(chǔ)在全網(wǎng)所有節(jié)點(diǎn)并可公開(kāi)透明訪問(wèn)的,唯一的安全機(jī)制只有交易過(guò)程中的簽名與認(rèn)證,以保證交易的不可偽造和否認(rèn).而傳統(tǒng)數(shù)據(jù)庫(kù)的訪問(wèn)控制機(jī)制已經(jīng)十分成熟[15]. 6) 可擴(kuò)展性.如前所述,共識(shí)機(jī)制的存在使得區(qū)塊鏈平臺(tái)在節(jié)點(diǎn)數(shù)增加的過(guò)程中性能不升反降,除分片和多通道外,其他擴(kuò)展性方案還有待驗(yàn)證.而傳統(tǒng)數(shù)據(jù)庫(kù)的橫向擴(kuò)展則可通過(guò)增加節(jié)點(diǎn)來(lái)線性地提高系統(tǒng)的性能. 7) 若2個(gè)算力相近的節(jié)點(diǎn)A和B在較短的時(shí)間差內(nèi)分別創(chuàng)建了各自的區(qū)塊,鏈上節(jié)點(diǎn)可能優(yōu)先收到二者任一發(fā)出的確認(rèn)信息,這樣2個(gè)新區(qū)快都會(huì)接入鏈中且包含了相同的數(shù)據(jù)信息并都是有效的,便形成了分叉.之后全網(wǎng)節(jié)點(diǎn)可以選擇任何2個(gè)新區(qū)快中的任一區(qū)塊作為父區(qū)塊并創(chuàng)建下一區(qū)塊,當(dāng)某一支鏈率先創(chuàng)建了新區(qū)塊該支鏈便稱(chēng)為較長(zhǎng)的支鏈,另一條短的支鏈就會(huì)被拋棄,這樣分叉便結(jié)束了. 軟分叉:區(qū)塊鏈有時(shí)會(huì)出現(xiàn)協(xié)議替換的現(xiàn)象,新舊協(xié)議下創(chuàng)建的區(qū)塊都可互相接受,新舊區(qū)塊便可共存于一條鏈上,這稱(chēng)為向上兼容模式,并不會(huì)產(chǎn)生分叉.實(shí)際過(guò)程中因?yàn)樾聟f(xié)議逐漸得到認(rèn)同,舊協(xié)議創(chuàng)建的區(qū)塊會(huì)逐漸消失. 硬分叉:當(dāng)新協(xié)議下創(chuàng)建的區(qū)塊無(wú)法被鏈上舊區(qū)塊接受時(shí),新區(qū)快便會(huì)從舊鏈中分叉出來(lái),之后經(jīng)過(guò)共識(shí)算法各節(jié)點(diǎn)會(huì)將算力投入到新區(qū)快分叉出來(lái)的支鏈中,這被稱(chēng)為向下兼容模式,最后會(huì)發(fā)生硬分叉. 8) 效率問(wèn)題.區(qū)塊鏈記錄了整個(gè)網(wǎng)絡(luò)從誕生到現(xiàn)在鏈上發(fā)生的全部交易,數(shù)據(jù)量十分巨大,如比特幣網(wǎng)絡(luò)在短短7年內(nèi)數(shù)據(jù)量已達(dá)60 GB.完整記錄交易在保證數(shù)據(jù)不可篡改的同時(shí)帶來(lái)了嚴(yán)重的存儲(chǔ)問(wèn)題. 9) 中心化問(wèn)題.算力證明機(jī)制中算力高的節(jié)點(diǎn)率先找到滿(mǎn)足條件的隨機(jī)數(shù)的概率就大,便更有可能獲得區(qū)塊的記賬權(quán).這樣,原本平等的節(jié)點(diǎn)間記賬權(quán)爭(zhēng)奪就變成了硬件設(shè)備的比拼,越來(lái)越多的節(jié)點(diǎn)和設(shè)備聚在一起組成礦池,單一的節(jié)點(diǎn)完全無(wú)法與礦池相較高低,導(dǎo)致了節(jié)點(diǎn)間的不對(duì)等.目前,使用CPU挖礦幾乎已經(jīng)不再可能,這就違背了區(qū)塊鏈去中心化的初衷,礦池實(shí)質(zhì)上逐漸成為了一種新的中心節(jié)點(diǎn). 回顧整個(gè)IT行業(yè)的發(fā)展,每次重大的變革,無(wú)一例外都是由于新架構(gòu)的出現(xiàn)帶來(lái)了新的生產(chǎn)力,出現(xiàn)了新的應(yīng)用,推動(dòng)了變革的發(fā)生.作為數(shù)字加密貨幣的底層核心技術(shù),區(qū)塊鏈之所以如此重要,是因?yàn)槠浼軜?gòu)有著獨(dú)特的優(yōu)點(diǎn):去中心化、準(zhǔn)匿名性、安全透明、可防篡改防偽造、交易可追溯、智能合約、低成本高效率等.現(xiàn)有的互聯(lián)網(wǎng)+時(shí)代在信任建立、維護(hù)以及安全問(wèn)題上存在致命的缺陷,因此未來(lái)互聯(lián)網(wǎng)+必須與區(qū)塊鏈+相結(jié)合,從而使得各種業(yè)務(wù)更加安全,交易成本更低,交易效率更高. 雖然區(qū)塊鏈仍舊存在較為明顯的問(wèn)題,在發(fā)展過(guò)程中也受到過(guò)幾次較為大型的攻擊,如The DAO項(xiàng)目就由于智能合約出現(xiàn)漏洞而被黑客攻擊,導(dǎo)致巨額的比特幣丟失.但隨著各方的不斷努力,區(qū)塊鏈的不足之處都會(huì)得到改進(jìn)和完善,成為一個(gè)更加完備的系統(tǒng)平臺(tái),未來(lái)區(qū)塊鏈一定會(huì)發(fā)揮更大的作用,徹底顛覆諸多行業(yè)的現(xiàn)狀,很大程度上改變我們的生活.中國(guó)在這場(chǎng)新的競(jìng)賽中應(yīng)當(dāng)后起發(fā)力,努力趕上世界前沿水平,抓住這場(chǎng)機(jī)遇,好好應(yīng)對(duì)挑戰(zhàn),在這場(chǎng)新的科技浪潮中發(fā)展自身. [1]袁勇, 王飛躍. 區(qū)塊鏈技術(shù)發(fā)展現(xiàn)狀與展望[J]. 自動(dòng)化學(xué)報(bào), 2016, 42(4): 481-494 [2]沈鑫, 裴慶祺, 劉雪峰. 區(qū)塊鏈技術(shù)綜述[J]. 網(wǎng)絡(luò)與信息安全學(xué)報(bào), 2016, 2(11): 11-20 [3]Castro M, Liskov B. Practical byzantine fault tolerance and proactive recovery[J]. ACM Trans on Computer Systems, 2002, 20(4): 398-461 [4]Kotla R, Alvisi L, Dahlin M, et al. Zyzzyva: Speculative byzantine fault tolerance[J]. ACM Trans on Computer Systems, 2007, 51(6): 45-58 [5]Kwon J. Tendermint: Consensus without mining[OL]. [2018-03-15]. https:tendermint.comstaticdocstendermint.pdf [6]Liu S, Viotti P, Cachin C, et al. XFT: Practical fault tolerance beyond crashes[JOL]. [2018-03-15]. http:www.eurecom.frenpublication4575/downloadsec-publi-4575_1.pdf [7]邵奇峰, 金澈清, 張召等. 區(qū)塊鏈技術(shù):架構(gòu)及進(jìn)展[J]. 計(jì)算機(jī)學(xué)報(bào), 2018, 41(5): 969-988 [8]王曉光. 區(qū)塊鏈技術(shù)共識(shí)算法綜述[J]. 信息與電腦: 理論版, 2017, 9(9): 72-74 [9]曠華. 安全哈希算法SHA[J]. 華南金融電腦, 2003, 10(6): 24-26 [10]何潤(rùn)民, 馬俊. SHA-256算法的安全性分析[J]. 電子設(shè)計(jì)工程, 2014, 22(3): 31-33 [11]羅皓, 喬秦寶, 劉金龍, 等. 橢圓曲線簽名方案[J]. 武漢大學(xué)學(xué)報(bào): 理學(xué)版, 2003, 32(1): 95-98 [12]孫國(guó)茂. 區(qū)塊鏈技術(shù)的本質(zhì)特征及其金融領(lǐng)域應(yīng)用研究[J]. 理論學(xué)刊, 2017, 33(2): 58-67 [13]姚忠將, 葛敬國(guó). 關(guān)于區(qū)塊鏈原理及應(yīng)用的綜述[J]. 科研信息化技術(shù)與應(yīng)用, 2017, 8(2): 3-17 [14]朱建明, 付永貴. 區(qū)塊鏈應(yīng)用研究進(jìn)展[J]. 科技導(dǎo)報(bào), 2017, 35(13): 70-76 [15]張濱. 區(qū)塊鏈安全風(fēng)險(xiǎn)研究[J]. 電信工程技術(shù)與標(biāo)準(zhǔn)化, 2017, 30(11): 1-56.4 隱私性
7 區(qū)塊鏈應(yīng)用
8 國(guó)內(nèi)區(qū)塊鏈發(fā)展
9 區(qū)塊鏈的優(yōu)勢(shì)與缺點(diǎn)
9.1 優(yōu) 勢(shì)
9.2 缺點(diǎn)與問(wèn)題
10 結(jié)束語(yǔ)