• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    區(qū)塊鏈原理及關(guān)鍵技術(shù)*

    2020-10-15 01:44:38李馥娟王振力梁廣俊
    計(jì)算機(jī)與生活 2020年10期
    關(guān)鍵詞:智能

    王 群,李馥娟,王振力,梁廣俊,徐 杰

    江蘇警官學(xué)院計(jì)算機(jī)信息與網(wǎng)絡(luò)安全系,南京 210031

    1 引言

    數(shù)學(xué)為密碼學(xué)的研究奠定了堅(jiān)實(shí)的理論基礎(chǔ),數(shù)學(xué)領(lǐng)域的研究在推動(dòng)了密碼技術(shù)發(fā)展的同時(shí),密碼技術(shù)的應(yīng)用也使一些基礎(chǔ)數(shù)學(xué)問題的研究取得了突破。與此同時(shí),密碼學(xué)及相關(guān)學(xué)科領(lǐng)域一些成熟的技術(shù)在隨著應(yīng)用環(huán)境和需求變化進(jìn)行深度融合后,摧生了一系列新的技術(shù)應(yīng)用,區(qū)塊鏈便是其中之一。

    2008年,中本聰(Satoshi Nakamoto)在其論文“Bitcoin:a peer-to-peer electronic cash system”[1]中首次提出了一種以區(qū)塊鏈(blockchain)為底層技術(shù)的比特幣(Bitcoin)數(shù)字貨幣,并實(shí)際運(yùn)行了“挖礦”過程,以此證明了論文中提出的比特幣理論體系。比特幣開創(chuàng)了去中心化數(shù)字貨幣的先河,比特幣系統(tǒng)基于區(qū)塊鏈這一特殊類型的分布式數(shù)據(jù)庫,通過挖礦激勵(lì)機(jī)制與貨幣發(fā)行之間的關(guān)聯(lián),再利用共識(shí)機(jī)制實(shí)現(xiàn)交易的確認(rèn)和比特幣在數(shù)據(jù)庫上的安全轉(zhuǎn)移,在不借助任何第三方可信機(jī)構(gòu)支持的前提下,實(shí)現(xiàn)了相互間不需要信任的人與人之間貨幣的交換。當(dāng)區(qū)塊鏈技術(shù)在比特幣中取得了巨大成功后,Buterin于2013年12月在比特幣基礎(chǔ)上提出了以太坊(Ethereum)概念[2],將其定義為一個(gè)除繼承了比特幣中數(shù)字貨幣(在以太坊中稱為以太幣(Ether))功能外,還提供了圖靈完備(即能夠模擬任何圖靈機(jī))的編程語言,將智能合約(smart contract)應(yīng)用到區(qū)塊鏈系統(tǒng)。智能合約與區(qū)塊鏈的結(jié)合,一方面使區(qū)塊鏈借助智能合約的可編程性來簡化對分布式節(jié)點(diǎn)操作的復(fù)雜性,另一方面使智能合約借助區(qū)塊鏈的去中心化機(jī)制在非信任環(huán)境中得以有效實(shí)現(xiàn)。相比于比特幣,以太坊的設(shè)計(jì)是通過在區(qū)塊鏈中引入智能合約并優(yōu)化相關(guān)的協(xié)議,為分布式應(yīng)用程序和去中心化自治組織提供一個(gè)開發(fā)平臺(tái)。以太坊的出現(xiàn),使區(qū)塊鏈應(yīng)用開始從單一的金融走向電子政務(wù)、教育、醫(yī)療、物聯(lián)網(wǎng)等更加廣泛的領(lǐng)域。

    區(qū)塊鏈被定義為一種按時(shí)間順序來組織數(shù)據(jù)區(qū)塊,不同區(qū)塊之間按序形成鏈條狀連接的數(shù)據(jù)結(jié)構(gòu),借助這種數(shù)據(jù)結(jié)構(gòu)來構(gòu)建數(shù)字賬本[3]。賬本中存放的是交易信息,保存和運(yùn)行賬本的節(jié)點(diǎn)通過分布式網(wǎng)絡(luò)連接起來,再通過數(shù)據(jù)加密、分布式共識(shí)、經(jīng)濟(jì)激勵(lì)等機(jī)制來保證在一個(gè)沒有中心化授權(quán)的開放網(wǎng)絡(luò)環(huán)境中實(shí)現(xiàn)賬本數(shù)據(jù)的安全共享。

    在區(qū)塊鏈系統(tǒng)中,每個(gè)分布式節(jié)點(diǎn)都具有“存儲(chǔ)”功能,用于保存賬本數(shù)據(jù)和用戶交易等信息,每筆交易和結(jié)果需要通過“P2P(peer-to-peer)網(wǎng)絡(luò)”共享給其他節(jié)點(diǎn),節(jié)點(diǎn)在接收到數(shù)據(jù)后并不是直接保存下來,而是通過“共識(shí)機(jī)制”對數(shù)據(jù)進(jìn)行驗(yàn)證,成功后保存到賬本中,一旦保存下來就“不可篡改”。賬本中的信息之所以不能修改,是因?yàn)槭褂昧恕凹用堋睓C(jī)制,通過哈希技術(shù)對區(qū)塊進(jìn)行串接,利用公鑰加密機(jī)制對賬本數(shù)據(jù)進(jìn)行加密處理和記賬。在公有鏈中,任何用戶在下載安裝了客戶端軟件后,就可以加入系統(tǒng),并通過“激勵(lì)”機(jī)制讓節(jié)點(diǎn)爭相維護(hù)這個(gè)系統(tǒng)。因此,分布式存儲(chǔ)、共識(shí)機(jī)制、不可篡改、數(shù)據(jù)加密和激勵(lì)機(jī)制構(gòu)成了區(qū)塊鏈的基本屬性。

    區(qū)塊鏈中所涉及到的技術(shù)都不是最新的,例如分布式存儲(chǔ)在云計(jì)算中就已廣泛使用,很多年前的BitTorrent軟件就是基于P2P通信方式,哈希算法的使用就更加廣泛(如電子郵件加密、電子證據(jù)固定等),積分激勵(lì)機(jī)制早已被各大電商、移動(dòng)運(yùn)營商成功應(yīng)用等。為此,可以將區(qū)塊鏈認(rèn)為是綜合運(yùn)用各項(xiàng)成熟技術(shù)的一種應(yīng)用創(chuàng)新。

    區(qū)塊鏈可以按許可權(quán)限分為公有鏈和聯(lián)盟鏈(私有鏈?zhǔn)菓?yīng)用和管理上更為嚴(yán)格的聯(lián)盟鏈)兩大類。其中,公有鏈?zhǔn)且粋€(gè)完全去中心化的區(qū)塊鏈系統(tǒng),任何人都可以通過下載安裝一個(gè)專用客戶端軟件加入系統(tǒng),并利用系統(tǒng)生成的一對非對稱密鑰進(jìn)行數(shù)據(jù)讀取或發(fā)送交易,也可自由離開系統(tǒng);聯(lián)盟鏈?zhǔn)且粋€(gè)部分去中心化或多中心化的區(qū)塊鏈系統(tǒng),一般由多個(gè)業(yè)務(wù)相關(guān)機(jī)構(gòu)(如銀行、證券公司等)協(xié)同創(chuàng)建和管理,參與機(jī)構(gòu)視具體需要確定一定數(shù)量的運(yùn)行節(jié)點(diǎn),并有限度地分配操作權(quán)限。公有鏈?zhǔn)菂^(qū)塊鏈應(yīng)用的拓荒者,各種復(fù)雜技術(shù)的解決和新技術(shù)、新功能的測試多是在公有鏈環(huán)境中完成,比特幣和以太坊是目前最有影響的公有鏈應(yīng)用;聯(lián)盟鏈?zhǔn)菂^(qū)塊鏈家族中未來應(yīng)用的主力軍,是企業(yè)應(yīng)用的重點(diǎn)和區(qū)塊鏈得以落地的關(guān)鍵,典型的聯(lián)盟鏈平臺(tái)有Hyperledger Fabric(超級(jí)賬本)、Ripple、BigchainDB、TrustSQL等。另外,根據(jù)新節(jié)點(diǎn)加入時(shí)是否需要進(jìn)行身份認(rèn)證和訪問授權(quán)操作的不同,可以將區(qū)塊鏈系統(tǒng)分為許可鏈和非許可鏈兩類,其中公有鏈通常稱為非許可鏈,而聯(lián)盟鏈一般稱為許可鏈。

    隨著應(yīng)用領(lǐng)域的不斷拓展,區(qū)塊鏈技術(shù)得到不斷發(fā)展和完善:源于比特幣的區(qū)塊鏈技術(shù)構(gòu)建了一個(gè)分布式的“全球賬本”,創(chuàng)造了區(qū)塊鏈1.0時(shí)代;以智能合約為標(biāo)志的區(qū)塊鏈2.0實(shí)現(xiàn)了應(yīng)用程序在區(qū)塊鏈上的上傳/下載和有效執(zhí)行,將整個(gè)區(qū)塊鏈系統(tǒng)演進(jìn)成一臺(tái)“全球計(jì)算機(jī)”;區(qū)塊鏈3.0的提出,使運(yùn)行在企業(yè)操作系統(tǒng)(enterprise operation system,EOS)上的智能合約開發(fā)變得更加便捷。經(jīng)濟(jì)學(xué)上的“三元悖論”(mundellian trilemma)原則也適合于區(qū)塊鏈系統(tǒng),即在去中心化、安全與高效三者之間最多只能同時(shí)滿足兩個(gè)目標(biāo)。其中,在公有鏈中實(shí)現(xiàn)了去中心化和安全,而無法實(shí)現(xiàn)運(yùn)行的高效,例如比特幣系統(tǒng)中每10 min創(chuàng)建一個(gè)新區(qū)塊,其性能遠(yuǎn)遠(yuǎn)不能滿足一些時(shí)效性較強(qiáng)的跨區(qū)域甚至是全球性業(yè)務(wù)的要求;在聯(lián)盟鏈中提高了性能和安全性,但需要在去中心化上做出讓步,通過引入傳統(tǒng)的授權(quán)管理實(shí)現(xiàn)半中心化模式。

    區(qū)塊鏈的特點(diǎn)概括為:(1)去中心化(decentralized)[4]。區(qū)塊鏈涉及到數(shù)據(jù)生成、驗(yàn)證、記賬、傳輸、存儲(chǔ)和維護(hù)等環(huán)節(jié),這些過程都沒有依賴任何第三方機(jī)構(gòu),而是通過相應(yīng)的算法和協(xié)議來實(shí)現(xiàn)。(2)去信任(trustless)。整個(gè)區(qū)塊鏈系統(tǒng)中,參與數(shù)據(jù)交換的每個(gè)節(jié)點(diǎn)之間無需相互信任,整個(gè)系統(tǒng)的運(yùn)行規(guī)則和結(jié)果公開透明,所有數(shù)據(jù)全部公開,在系統(tǒng)約定的規(guī)則和時(shí)間范圍內(nèi)任何一個(gè)節(jié)點(diǎn)是不能也無法欺騙其他節(jié)點(diǎn)的。(3)集體維護(hù)(collectively maintain)。在比特幣、以太坊等公有鏈中,區(qū)塊鏈采用了經(jīng)濟(jì)激勵(lì)機(jī)制去刺激系統(tǒng)中節(jié)點(diǎn)參與新區(qū)塊的生成(挖礦),并通過共識(shí)機(jī)制讓新區(qū)塊添加到區(qū)塊鏈上。(4)可靠數(shù)據(jù)庫(reliable database)。區(qū)塊鏈系統(tǒng)采用分布式數(shù)據(jù)形式,讓每一個(gè)參與節(jié)點(diǎn)都能夠獲得一份完整的數(shù)據(jù)庫備份。除非能夠同時(shí)控制整個(gè)系統(tǒng)中51%的節(jié)點(diǎn),否則單個(gè)節(jié)點(diǎn)對數(shù)據(jù)庫的修改是無效的,也無法影響其他節(jié)點(diǎn)上的數(shù)據(jù)內(nèi)容。因此,參與系統(tǒng)中的節(jié)點(diǎn)越多,算力越強(qiáng),系統(tǒng)中的數(shù)據(jù)安全性也就越高。(5)可編程(programmable)。從以太坊開始,區(qū)塊鏈技術(shù)可提供圖靈完備的靈活的可編程功能,為區(qū)塊鏈技術(shù)與智能合約的結(jié)合提供了實(shí)現(xiàn)途徑,進(jìn)而實(shí)現(xiàn)各類去中心化應(yīng)用。(6)隱私保護(hù)(anonymity)[5]。由于節(jié)點(diǎn)之間是無需信任的,也就無需公開個(gè)人真實(shí)身份信息,因此系統(tǒng)中每個(gè)參與節(jié)點(diǎn)的隱私都得到了有效保護(hù)。

    2 區(qū)塊鏈的基礎(chǔ)架構(gòu)

    體系結(jié)構(gòu)和實(shí)現(xiàn)協(xié)議是網(wǎng)絡(luò)的兩大核心要素,分層結(jié)構(gòu)是計(jì)算機(jī)網(wǎng)絡(luò)中廣泛采用的關(guān)系模型,區(qū)塊鏈系統(tǒng)也采用了分層架構(gòu)。如圖1所示的是區(qū)塊鏈2.0采用的6層結(jié)構(gòu)[6],從下到上依次是數(shù)據(jù)層、網(wǎng)絡(luò)層、共識(shí)層、激勵(lì)層、合約層和應(yīng)用層。

    Fig.1 Blockchain infrastructure圖1 區(qū)塊鏈基礎(chǔ)架構(gòu)

    2.1 數(shù)據(jù)層

    數(shù)據(jù)層位于整個(gè)體系結(jié)構(gòu)的最低層,負(fù)責(zé)將一段時(shí)間內(nèi)接收到的交易數(shù)據(jù)存入正在創(chuàng)建的數(shù)據(jù)區(qū)塊中,再通過特定的哈希函數(shù)和Merkle樹數(shù)據(jù)結(jié)構(gòu)將區(qū)塊中存入的交易數(shù)據(jù)進(jìn)行封裝,并在上層協(xié)議的協(xié)助下,生成一個(gè)符合算法約定的帶有時(shí)間戳的新區(qū)塊,再通過相應(yīng)的共識(shí)機(jī)制鏈接到主鏈上。在此過程中,數(shù)據(jù)層主要涉及到數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)模型和數(shù)據(jù)存儲(chǔ)等與分布式數(shù)據(jù)庫相關(guān)的內(nèi)容[7],主要包括數(shù)據(jù)區(qū)塊、哈希函數(shù)、鏈?zhǔn)浇Y(jié)構(gòu)、Merkle樹、時(shí)間戳、非對稱加密等技術(shù)要素[8],確保區(qū)塊鏈分布式賬本中數(shù)據(jù)的可靠性和穩(wěn)定性。

    2.2 網(wǎng)絡(luò)層

    區(qū)塊鏈?zhǔn)且环N基于互聯(lián)網(wǎng)的創(chuàng)新應(yīng)用,不同節(jié)點(diǎn)之間的組織形式對區(qū)塊鏈系統(tǒng)的整體性能起著關(guān)鍵作用。區(qū)塊鏈網(wǎng)絡(luò)層采用不受任何權(quán)威節(jié)點(diǎn)控制或?qū)哟文P图s束的完全去中心化的P2P(對等網(wǎng))組網(wǎng)方式,以此來實(shí)現(xiàn)區(qū)塊鏈系統(tǒng)中各個(gè)節(jié)點(diǎn)之間的互聯(lián),為交易數(shù)據(jù)和新區(qū)塊創(chuàng)建信息在節(jié)點(diǎn)之間的快速傳輸及正確性驗(yàn)證提供通信保障,并為每個(gè)節(jié)點(diǎn)參與新區(qū)塊記賬權(quán)的競爭提供公平的網(wǎng)絡(luò)環(huán)境。

    與互聯(lián)網(wǎng)中廣泛采用的客戶機(jī)/服務(wù)器(client/server,C/S)通信與存儲(chǔ)架構(gòu)不同的是,在區(qū)塊鏈系統(tǒng)中,P2P網(wǎng)絡(luò)在組網(wǎng)結(jié)構(gòu)和通信機(jī)制方面具有獨(dú)特的應(yīng)用優(yōu)勢:在組網(wǎng)方式上,每個(gè)節(jié)點(diǎn)既是資源的提供者又是資源的使用者,每個(gè)節(jié)點(diǎn)在網(wǎng)絡(luò)中的身份平等,這正是區(qū)塊鏈(尤其是公有鏈)去中心化應(yīng)用的突出特點(diǎn);在通信機(jī)制上,P2P為區(qū)塊鏈中各節(jié)點(diǎn)之間基于TCP/UDP協(xié)議的對等通信提供了服務(wù)保障,確保了節(jié)點(diǎn)間鏈路的可用性和通信的靈活性。

    2.3 共識(shí)層

    共識(shí)層借助于相關(guān)的共識(shí)機(jī)制,在一個(gè)由高度分散的節(jié)點(diǎn)參與的去中心化系統(tǒng)中就交易和數(shù)據(jù)的有效性快速達(dá)成共識(shí),確保整個(gè)系統(tǒng)所有節(jié)點(diǎn)記賬的一致性和有效性。其中,一致性是指所有節(jié)點(diǎn)中保存的區(qū)塊主鏈中已確認(rèn)的區(qū)塊完全相同,而有效性是指每個(gè)節(jié)點(diǎn)發(fā)送的交易數(shù)據(jù)都能夠被存放在新區(qū)塊中,同時(shí)節(jié)點(diǎn)新生成的區(qū)塊數(shù)據(jù)也能夠被鏈接到區(qū)塊鏈上。

    在早期的比特幣系統(tǒng)中,設(shè)計(jì)者采用了高度依賴于節(jié)點(diǎn)算力競爭的工作量證明(proof of work,PoW)機(jī)制[1],隨著區(qū)塊鏈應(yīng)用的發(fā)展,研究者又提出了一些符合不同區(qū)塊鏈應(yīng)用要求的共識(shí)機(jī)制,如應(yīng)用于點(diǎn)點(diǎn)幣(PPCoin)的權(quán)益證明(proof of stake,PoS)機(jī)制[9],應(yīng)用于比特股(Bitshares)的股份授權(quán)證明(delegated proof of stake,DPoS)機(jī)制[10]等。

    2.4 激勵(lì)層

    激勵(lì)層主要通過提供激勵(lì)機(jī)制刺激網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)參與區(qū)塊鏈中新區(qū)塊的生成(挖礦)和驗(yàn)證工作,以保證去中心化區(qū)塊鏈系統(tǒng)的安全、有效和穩(wěn)定運(yùn)行。激勵(lì)層和共識(shí)層的運(yùn)行具有相同的機(jī)制,以比特幣為例,共識(shí)過程是趨利的,每個(gè)節(jié)點(diǎn)參與共識(shí)的目的是追求自身利益的最大化,激勵(lì)是對已達(dá)成共識(shí)的一種貨幣發(fā)行和分配機(jī)制。其中,比特幣系統(tǒng)每10 min生成一個(gè)新區(qū)塊,同時(shí)給生成該區(qū)塊的節(jié)點(diǎn)(礦工)獎(jiǎng)勵(lì)一定數(shù)量的比特幣,以此完成比特幣系統(tǒng)貨幣的發(fā)行過程。

    從第一個(gè)區(qū)塊創(chuàng)世區(qū)塊(genesis block)產(chǎn)生后的4年中(大約產(chǎn)生了21萬個(gè)區(qū)塊),每個(gè)區(qū)塊獲得50個(gè)比特幣的獎(jiǎng)勵(lì),在之后的4年中每個(gè)區(qū)塊獲得25個(gè)比特幣的獎(jiǎng)勵(lì),依次類推。整個(gè)系統(tǒng)最后會(huì)產(chǎn)生2 100萬個(gè)比特幣。另外,新區(qū)塊的創(chuàng)建者(礦工)還會(huì)從每筆交易中獲得相應(yīng)的交易費(fèi)用(手續(xù)費(fèi))。新建區(qū)塊的獎(jiǎng)勵(lì)和每筆交易的手續(xù)費(fèi)都會(huì)存入新建區(qū)塊的第1個(gè)交易位置(coinbase)中;根據(jù)區(qū)塊鏈的共識(shí)和激勵(lì)機(jī)制,節(jié)點(diǎn)的算力越大則“挖礦”成功的概率越高。為了提高“挖礦”的成功率,多個(gè)小算力節(jié)點(diǎn)會(huì)通過組建一個(gè)“礦池”將參與節(jié)點(diǎn)的算力匯合起來,在挖到礦后再根據(jù)各自貢獻(xiàn)的算力大小來分得不同股份(share)的新建區(qū)塊獎(jiǎng)勵(lì)和交易手續(xù)費(fèi)。

    2.5 合約層

    智能合約是部署在區(qū)塊鏈上的用計(jì)算機(jī)程序來實(shí)現(xiàn)日常合同條款的內(nèi)容及執(zhí)行過程的協(xié)議。早在1994年,Szabo就在文獻(xiàn)[11]中提出了智能合約的概念,但直到比特幣的出現(xiàn),智能合約才借助區(qū)塊鏈技術(shù)引起了業(yè)界的關(guān)注。

    由于比特幣中采用的是一種非圖靈完備、不具備復(fù)雜循環(huán)和流程控制、功能簡單的腳本語言,其實(shí)質(zhì)是嵌入到比特幣交易上的一組指令,因此比特幣中的腳本只能算是智能合約的雛形。在以太坊中內(nèi)置了一套圖靈完備的編程語言,用戶可以根據(jù)需要在以太坊平臺(tái)上編寫復(fù)雜的智能合約,實(shí)現(xiàn)各類去中心化的應(yīng)用。智能合約的應(yīng)用,使區(qū)塊鏈技術(shù)不再局限于比特幣應(yīng)用,而成為一項(xiàng)具有普適性的底層技術(shù)框架。

    2.6 應(yīng)用層

    區(qū)塊鏈技術(shù)在公有鏈中的應(yīng)用最為成熟,其中,在比特幣中的應(yīng)用主要是實(shí)現(xiàn)去中心化的數(shù)字加密貨幣系統(tǒng),而在以太坊中除繼承了數(shù)字加密貨幣(以太幣)的功能外,還針對目前“一切皆Web”的現(xiàn)狀,借助智能合約的強(qiáng)大功能,區(qū)塊鏈技術(shù)開始支持各類去中心化應(yīng)用(decentralized application,DApp)[12]。DApp最常見的應(yīng)用情景是一個(gè)常規(guī)的Web前端應(yīng)用與一個(gè)或多個(gè)智能合約進(jìn)行交互。

    聯(lián)盟鏈反映了區(qū)塊鏈應(yīng)用價(jià)值的多樣性和豐富性,提升了區(qū)塊鏈應(yīng)用的廣度和深度,可以使區(qū)塊鏈技術(shù)最大限度地得以落地生根。目前,聯(lián)盟鏈主要面向企業(yè)級(jí)的應(yīng)用,其中超級(jí)賬本Hyperledger是Linux基金會(huì)于2015年發(fā)起的開源項(xiàng)目,包含多個(gè)并行的子項(xiàng)目,其中Fabric的成熟度較高。為了實(shí)現(xiàn)通過軟件開發(fā)工具包(software development kit,SDK)訪問區(qū)塊鏈系統(tǒng)中的賬本、交易、事件、權(quán)限管理等資源,F(xiàn)abric提供了gRPC API以及封裝應(yīng)用程序接口(application programming interface,API)的SDK,SDK提供了對Node.Js、Python、Java、Go等語言的支持,可通過對底層gRPC接口的調(diào)用與智能合約進(jìn)行通信,以構(gòu)建功能更加豐富的應(yīng)用場景。

    3 區(qū)塊鏈數(shù)據(jù)結(jié)構(gòu)

    Nicklaus Writh曾提出一個(gè)著名的公式:算法+數(shù)據(jù)結(jié)構(gòu)=程序。算法是程序的靈魂,數(shù)據(jù)結(jié)構(gòu)是程序的核心。在區(qū)塊鏈中,針對不同領(lǐng)域、不同場景開發(fā)的程序是否能夠快速、高效、安全地實(shí)現(xiàn)預(yù)定任務(wù),在很大程度上取決于是否設(shè)計(jì)或選用了合適的數(shù)據(jù)結(jié)構(gòu)。區(qū)塊鏈?zhǔn)且环N分布式系統(tǒng),區(qū)塊結(jié)構(gòu)決定著交易信息的存儲(chǔ)形式,Merkle樹用于組織和管理交易數(shù)據(jù),鏈?zhǔn)浇Y(jié)構(gòu)發(fā)揮著串接區(qū)塊的功能,區(qū)塊鏈交易的數(shù)據(jù)結(jié)構(gòu)描述了比特幣和以太坊的交易形式以及交易地址的生成特點(diǎn),交易數(shù)據(jù)的存儲(chǔ)方式從宏觀角度分析區(qū)塊鏈底層數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)依據(jù)和發(fā)展趨勢。

    3.1 區(qū)塊結(jié)構(gòu)

    不同區(qū)塊鏈平臺(tái)的數(shù)據(jù)結(jié)構(gòu)在部分細(xì)節(jié)上雖然存在差異,但主體框架基本相同。以比特幣為例,每個(gè)區(qū)塊由區(qū)塊頭(Header)和區(qū)塊體(Body)兩部分組成[13],其結(jié)構(gòu)如圖2所示。其中,區(qū)塊頭封裝了當(dāng)前版本號(hào)(Version)、前一區(qū)塊哈希(Prev-block Hash)、用于當(dāng)前區(qū)塊工作量證明的目標(biāo)難度值(Bits)、用于工作量證明算法的隨機(jī)數(shù)(Nonce)、用于驗(yàn)證區(qū)塊體交易哈希的Merkle根(Merkle-root)以及當(dāng)前區(qū)塊的生成時(shí)間戳(Timestamp)等信息,具體描述如表1所示。

    在區(qū)塊鏈頭部,“時(shí)間戳”字段在區(qū)塊鏈的形成和維護(hù)過程中發(fā)揮著極其重要的作用:一是不同區(qū)塊按照生成時(shí)間來確定前后關(guān)系;二是用于維護(hù)共識(shí)算法的最長鏈規(guī)則,即當(dāng)一個(gè)節(jié)點(diǎn)通過共識(shí)算法產(chǎn)生了一個(gè)新區(qū)塊并將其廣播到全網(wǎng)后,其他節(jié)點(diǎn)在接收到該新區(qū)塊數(shù)據(jù)時(shí)必須立即停止當(dāng)前的共識(shí)運(yùn)算(挖礦),而對新區(qū)塊數(shù)據(jù)進(jìn)行驗(yàn)證。否則,即使通過共識(shí)運(yùn)算得到了新區(qū)塊,但由于生成時(shí)間晚(以時(shí)間戳為準(zhǔn)),也得不到其他節(jié)點(diǎn)的認(rèn)可。

    Fig.2 Data block structure圖2 數(shù)據(jù)區(qū)塊結(jié)構(gòu)

    Table 1 Description of Bitcoin block head structure function表1 比特幣區(qū)塊頭結(jié)構(gòu)功能描述

    區(qū)塊體中存放的是已經(jīng)驗(yàn)證的一段時(shí)間內(nèi)產(chǎn)生的交易數(shù)量以及完整的交易記錄,這些信息構(gòu)成了區(qū)塊鏈中最為核心的數(shù)據(jù)結(jié)構(gòu),即交易的賬本。所有的交易記錄基于Merkle樹的哈希計(jì)算,最后生成Merkle根(最后的哈希值),并記入?yún)^(qū)塊頭部的“Merkle根”字段。

    3.2 鏈?zhǔn)浇Y(jié)構(gòu)

    區(qū)塊鏈的鏈?zhǔn)浇Y(jié)構(gòu)是一個(gè)以區(qū)塊為元素的鏈表,其中邏輯相鄰元素之間以時(shí)間作為關(guān)聯(lián)。鏈?zhǔn)浇Y(jié)構(gòu)的形成描述相鄰區(qū)塊之間關(guān)聯(lián)性的建立,而GHOST協(xié)議用于維護(hù)鏈?zhǔn)浇Y(jié)構(gòu)中主鏈的唯一性。

    3.2.1 鏈?zhǔn)浇Y(jié)構(gòu)的形成

    區(qū)塊鏈?zhǔn)且粋€(gè)將每一個(gè)區(qū)塊以生成時(shí)間為序鏈接而成的分布式數(shù)據(jù)庫。在區(qū)塊鏈結(jié)構(gòu)中,對區(qū)塊頭中的前一區(qū)塊哈希(Prev-block Hash)、隨機(jī)數(shù)(Nonce)和Merkle根等元數(shù)據(jù)進(jìn)行兩次SHA256運(yùn)算即可得到該區(qū)塊的哈希值。在圖2中,前一區(qū)塊哈希(Prevblock Hash)字段用于存放前一區(qū)塊的哈希值,所有區(qū)塊按照生成順序以Prev-block Hash字段為哈希指針鏈接在一起,就形成了一條區(qū)塊鏈表,即一個(gè)完整的賬本。鏈?zhǔn)浇Y(jié)構(gòu)中相鄰區(qū)塊之間的關(guān)系如圖3所示。

    利用區(qū)塊頭中的“Merkle根”(Merkle-root)字段,可以通過哈希運(yùn)算驗(yàn)證區(qū)塊頭部和區(qū)塊體中的交易數(shù)據(jù)是否被篡改;利用區(qū)塊頭中的“前一區(qū)塊哈希”(Prev-block Hash)字段,可以通過哈希運(yùn)算驗(yàn)證該區(qū)塊之前直至創(chuàng)世區(qū)塊的所有區(qū)塊是否被篡改;依靠Prev-block Hash字段,所有區(qū)塊之間依據(jù)創(chuàng)建時(shí)間環(huán)環(huán)相扣,如果其中任何一個(gè)區(qū)塊被篡改,都將會(huì)引發(fā)在其后生成的所有區(qū)塊的哈希值發(fā)生連鎖改變。利用鏈?zhǔn)浇Y(jié)構(gòu)的可驗(yàn)證性特點(diǎn),當(dāng)一個(gè)節(jié)點(diǎn)從不可信節(jié)點(diǎn)下載了某些區(qū)塊或整個(gè)區(qū)塊時(shí),可以通過哈希運(yùn)算驗(yàn)證每個(gè)區(qū)塊的正確性。

    3.2.2 鏈?zhǔn)浇Y(jié)構(gòu)的維護(hù)

    在區(qū)塊鏈中,由于所有節(jié)點(diǎn)在一個(gè)沒有可信第三方統(tǒng)一協(xié)調(diào)的環(huán)境中幾乎同時(shí)在同一個(gè)區(qū)塊上進(jìn)行挖礦,這樣有可能出現(xiàn)多個(gè)節(jié)點(diǎn)同時(shí)挖出不同新區(qū)塊的現(xiàn)象,此現(xiàn)象稱為“分叉”,根據(jù)區(qū)塊鏈的工作機(jī)制,最終只允許其中一個(gè)區(qū)塊得到確認(rèn)。當(dāng)發(fā)生分叉時(shí),花費(fèi)了最多算力的鏈被確定為主鏈,主鏈?zhǔn)亲铋L鏈,位于其他分支上的交易都將被引用或忽略。分叉不但影響了區(qū)塊鏈系統(tǒng)的穩(wěn)定性,還容易引起“雙花”(雙重花費(fèi))攻擊[14]。當(dāng)產(chǎn)生了分叉時(shí),位于比特幣分支節(jié)點(diǎn)上的區(qū)塊稱為孤塊,并被丟棄,而以太坊引入了GHOST(greedy heaviest observed subtree)[15]協(xié)議來處理分叉。

    由于比特幣的出塊(產(chǎn)生新區(qū)塊)時(shí)間為10 min,因此產(chǎn)生分叉的概率并不高,而以太坊的出塊時(shí)間為15 s,受區(qū)塊鏈共識(shí)算法和網(wǎng)絡(luò)運(yùn)行機(jī)理等因素對網(wǎng)絡(luò)事件響應(yīng)機(jī)制的制約,在15 s的時(shí)間內(nèi),當(dāng)一個(gè)新區(qū)塊還沒來得及得到其他節(jié)點(diǎn)的驗(yàn)證和接受之前,其他節(jié)點(diǎn)可能在相同的區(qū)塊位置上挖出了新的區(qū)塊,從而頻繁地產(chǎn)生分叉。為了體現(xiàn)以太坊挖礦的公平性,并保持以太坊系統(tǒng)穩(wěn)定運(yùn)行,以太坊采用了GHOST協(xié)議將產(chǎn)生的分叉盡快進(jìn)行合并。

    Fig.3 Relationship between adjacent blocks圖3 相鄰區(qū)塊之間的關(guān)系

    GHOST協(xié)議是一種主鏈選擇算法,其思想是基于“利益均沾”的原則,讓挖出新區(qū)塊的節(jié)點(diǎn)都會(huì)受益。如圖4所示,假設(shè)節(jié)點(diǎn)A是一個(gè)在網(wǎng)絡(luò)位置、帶寬、算力等方面具有絕對優(yōu)勢的礦池,當(dāng)該節(jié)點(diǎn)開始從主鏈的某一區(qū)塊位置(假設(shè)圖4中的3號(hào)區(qū)塊)開始挖礦時(shí),因其具有較高的出塊概率,所以理應(yīng)擁有對新挖出區(qū)塊的記賬權(quán),并從中獲得收益。但是,為了鼓勵(lì)區(qū)塊鏈網(wǎng)絡(luò)中其他節(jié)點(diǎn)都積極參與挖礦,協(xié)議規(guī)定節(jié)點(diǎn)A對在同一位置挖出新區(qū)塊的其他礦工將通過引用方式給予相應(yīng)的獎(jiǎng)勵(lì)(具體獎(jiǎng)勵(lì)規(guī)則如圖4所示)。GHOST協(xié)議有效維護(hù)了主鏈的唯一性,防止出現(xiàn)永久分叉現(xiàn)象,同時(shí)也保持了區(qū)塊鏈系統(tǒng)的穩(wěn)定運(yùn)行。

    分叉會(huì)帶來交易的不確定性和系統(tǒng)運(yùn)行的不穩(wěn)定性。目前,比特幣在連續(xù)產(chǎn)生6個(gè)區(qū)塊之后,當(dāng)前的交易確定為不可逆,因此其交易確認(rèn)時(shí)間為60 min;以太坊在連續(xù)產(chǎn)生12個(gè)區(qū)塊之后,交易已基本不可逆,因此其交易確認(rèn)時(shí)間為3 min。需要說明的是,當(dāng)區(qū)塊間距離達(dá)到8時(shí),還未被引用的分叉上的叔塊將得不到獎(jiǎng)勵(lì),而自動(dòng)廢棄。另外,在叔塊上挖出來的區(qū)塊也得不到獎(jiǎng)勵(lì),以太坊這樣規(guī)定的目的是為了激勵(lì)節(jié)點(diǎn)在發(fā)現(xiàn)了最長區(qū)塊鏈時(shí)盡快合并,而不是在自己的分支鏈上繼續(xù)進(jìn)行挖礦。

    3.3 Merkle樹

    1989年,密碼學(xué)家Merkle提出了Merkle樹的概念[16],它是一種典型的二叉樹。Merkle樹是區(qū)塊鏈中最重要的數(shù)據(jù)結(jié)構(gòu),在區(qū)塊鏈中使用它來組織交易數(shù)據(jù)[17]。比特幣使用了最簡單的二叉Merkle樹,每個(gè)區(qū)塊都擁有一個(gè)獨(dú)立的Merkle樹,樹的一個(gè)葉子節(jié)點(diǎn)就是一個(gè)交易哈希(比特幣使用雙SHA256哈希)。葉子節(jié)點(diǎn)的數(shù)量必須是雙數(shù),否則就復(fù)制最后一個(gè)葉子節(jié)點(diǎn)的數(shù)據(jù)。從下而上,同層的節(jié)點(diǎn)兩兩成對進(jìn)行哈希運(yùn)算,形成上一層的節(jié)點(diǎn)值。重復(fù)該過程,直到最后一個(gè)節(jié)點(diǎn)(樹根)。根的哈希值成為區(qū)塊中所有交易的唯一標(biāo)識(shí),并將它保存到區(qū)塊頭部的“Merkle根”字段中,用于工作量證明。Merkle樹具有以下優(yōu)點(diǎn):

    (1)極大地提高了區(qū)塊鏈的運(yùn)行效率。Merkle樹的形成過程是一個(gè)頻繁的哈希過程,區(qū)塊鏈中使用的SHA256的運(yùn)行效率較高,對節(jié)點(diǎn)性能的要求較低。另外,區(qū)塊中所有的交易信息都遞歸到Merkle根,簡化了對整個(gè)區(qū)塊鏈系統(tǒng)的管理。

    (2)極大地提高了區(qū)塊鏈的可擴(kuò)展性。Merkle樹可以實(shí)現(xiàn)交易數(shù)據(jù)與哈希值的分離,在一些輕量級(jí)的應(yīng)用中只需包含Merkle根的哈希值,而不必封裝區(qū)塊體中的底層數(shù)據(jù),這使得區(qū)塊鏈技術(shù)可以高效地運(yùn)行在智能手機(jī)、物聯(lián)網(wǎng)等計(jì)算和存儲(chǔ)能力受限的設(shè)備上。

    (3)可支持“簡化支付驗(yàn)證”(simplified payment verification,SPV)協(xié)議[18]。SPV協(xié)議的設(shè)計(jì)思想是將區(qū)塊鏈節(jié)點(diǎn)變成一個(gè)輕量級(jí)節(jié)點(diǎn),即在不需要同步下載整個(gè)區(qū)塊鏈的數(shù)據(jù)的情況下,僅依靠本區(qū)塊中某一交易節(jié)點(diǎn)到Merkle根的路徑信息,就可以對“交易”進(jìn)行驗(yàn)證。例如,僅需圖2中的節(jié)點(diǎn)Hash 7、Hash 56和Hash 5678即可驗(yàn)證“交易8”的存在性和正確性。從區(qū)塊鏈的運(yùn)行機(jī)制來看,要驗(yàn)證一筆交易,需要遍歷所有的區(qū)塊找到與該筆交易相關(guān)的所有交易并進(jìn)行逐個(gè)驗(yàn)證,才能知道交易支付的可靠性。但SPV簡化了此過程,極大地降低區(qū)塊鏈運(yùn)行所需的帶寬和驗(yàn)證時(shí)間,并使得僅保存部分相關(guān)區(qū)塊鏈數(shù)據(jù)的輕量級(jí)客戶端成為可能。

    Fig.4 GHOST protocol principle圖4 GHOST協(xié)議的工作原理

    為了提高區(qū)塊產(chǎn)生的效率和對節(jié)點(diǎn)中賬戶狀態(tài)數(shù)據(jù)的查找能力,以太坊在計(jì)算Merkle根時(shí)使用了Merkle Patricia樹[19]。以太坊和比特幣的區(qū)塊中雖然具有相同的交易數(shù)據(jù),但在以太坊中狀態(tài)數(shù)據(jù)經(jīng)常發(fā)生變化,且產(chǎn)生的數(shù)據(jù)量較大。為此,為了提高運(yùn)行效率,以太坊在創(chuàng)建新區(qū)塊時(shí),僅計(jì)算在新區(qū)塊中賬戶狀態(tài)發(fā)生了變化的分支,而未發(fā)生變化的分支將被直接引用。

    3.4 區(qū)塊鏈交易的數(shù)據(jù)結(jié)構(gòu)

    交易(transaction)是雙方或多方以貨幣為媒介的價(jià)值交換,其實(shí)質(zhì)是將比特幣從一個(gè)賬本轉(zhuǎn)移到另一個(gè)或多個(gè)賬本中。區(qū)塊鏈的交易與銀行的交易類似,通常就是轉(zhuǎn)賬,具體到每一筆交易,同樣包括從哪兒來(交易輸入地址)、到哪里去(交易輸出地址)和發(fā)生了哪些變化(交易的數(shù)目)。通過交易過程,可實(shí)現(xiàn)數(shù)字貨幣資產(chǎn)的創(chuàng)建和轉(zhuǎn)移,也可以對每筆交易進(jìn)行溯源和找到所有的歷史記錄,直到挖礦所得的比特幣(coinbase)。

    3.4.1 比特幣交易的數(shù)據(jù)結(jié)構(gòu)

    Fig.5 Data structure of Bitcoin transaction圖5 比特幣交易的數(shù)據(jù)結(jié)構(gòu)

    比特幣使用如圖5所示的基于交易模型的數(shù)據(jù)結(jié)構(gòu),每筆交易包括交易輸入(transaction input)和交易輸出(transaction output)兩部分,在某筆交易過程中可以將一個(gè)或多個(gè)賬戶中的比特幣作為輸入,轉(zhuǎn)入到另一個(gè)或多個(gè)賬戶中。為了完成交易過程,每筆交易還提供了當(dāng)前交易軟件的版本(Version)、用于將交易寫入?yún)^(qū)塊的鎖定時(shí)間(Lock Time)以及交易的輸入數(shù)量(#vin)和輸出數(shù)量(#vout)等功能字段。

    每筆交易輸入主要由上筆交易的哈希(Prev-tx Hash)、上筆交易的輸出索引(Index)、輸入腳本(Script Sig)、輸入腳本長度(Script Sig Len)和交易輸入序列號(hào)(Sequence)組成;每筆交易的輸出主要包括轉(zhuǎn)賬金額(Value)、輸出腳本(Script-PubKey)和輸出腳本的長度(Script-PubKey Len)。解鎖腳本(輸入腳本)與輸入引用到的輸出中的鎖定腳本(輸出腳本)的執(zhí)行過程同步進(jìn)行,用于驗(yàn)證本筆交易是否有效,當(dāng)解鎖腳本滿足鎖定腳本的條件時(shí),則輸入有效。比特幣系統(tǒng)中的腳本語言是一種基于堆棧的執(zhí)行語言,主要有P2PKH、P2PK、MS(僅限15個(gè)密鑰)、P2SH和OP_Return等[20]。交易中每個(gè)字段的功能描述如表2所示。

    比特幣使用交易輸入和交易輸出進(jìn)行支付操作。具體到某筆交易輸出來說,在該交易中的錢還沒有花出去之前,它就是一筆還沒有被花費(fèi)掉的交易輸出,即未花費(fèi)的交易輸出(unspent transaction outputs,UTXO)。與現(xiàn)金支付不同的是,現(xiàn)金支付的找零是由收款人負(fù)責(zé),而UTXO模型中找零是發(fā)起者自己進(jìn)行設(shè)置;現(xiàn)金支付的面值是固定的,而UTXO中的面值不固定,是根據(jù)不同的交易而定的。因此,在UTXO模型的交易過程中,支付方不僅要指出接收方的地址,還要指明找零地址,找零地址可以是支付方的地址,也可以由支付方指定一個(gè)地址。

    當(dāng)一筆交易的輸出沒有任何另一筆交易的輸入與之對應(yīng)時(shí),說明該輸出中的比特幣未被花費(fèi)。對于某個(gè)比特幣地址來說,其UTXO的比特幣之和即為該賬戶的比特幣余額。另外,對于UTXO中的每筆輸出都需要使用鎖定腳本將比特幣鎖定在賬戶中,當(dāng)交易過程中需要引用UTXO中的輸出時(shí),需要使用該輸出賬戶的公鑰來驗(yàn)證簽名的正確性,通過解鎖腳本來解鎖引用賬戶地址中的比特幣。

    3.4.2 以太坊交易的數(shù)據(jù)結(jié)構(gòu)

    比特幣的數(shù)據(jù)結(jié)構(gòu)采用基于交易的模型,其特點(diǎn)是可以快速驗(yàn)證每筆交易,但缺點(diǎn)是無法對用戶余額進(jìn)行高效查詢。為了提高對交易狀態(tài)和余額的查詢效率,使區(qū)塊鏈平臺(tái)支持更加廣泛的應(yīng)用,以太坊提出了基于賬戶的模型。

    針對某一賬戶來說,不同時(shí)刻可能存在不同的狀態(tài),反映了賬戶中各屬性值(如以太幣余額、從該賬戶地址發(fā)出去的交易數(shù)、合約狀態(tài)數(shù)據(jù)的Merkle Patricia樹根、合約代碼的哈希值等)隨時(shí)間的變化情況,一旦發(fā)生了某筆交易,涉及該交易的賬戶狀態(tài)將會(huì)發(fā)生變化。以太坊的最大特點(diǎn)是在區(qū)塊鏈中使用了智能合約,因此以太坊中的賬戶分為外部賬戶(externally owned account,EOA)和合約賬戶(contract account,CA)兩種類型,其中EOA一般指分配給自然人并用其私鑰進(jìn)行保護(hù)且不存在任何代碼與之關(guān)聯(lián)的賬戶,而CA是分配給智能合約的被合約代碼控制的賬戶。

    區(qū)塊鏈中的賬戶是地址的抽象描述,EOA和CA也是地址的兩種不同表現(xiàn)形式,兩類賬戶都共用同一個(gè)地址空間,即采用相同的數(shù)據(jù)結(jié)構(gòu)。其中,EOA的地址由其公鑰加密后生成,其獲取較為容易,在以太坊錢包的客戶端可以創(chuàng)建,而CA的地址是在創(chuàng)建合約時(shí)由創(chuàng)建者的地址和該地址發(fā)生過的交易數(shù)量計(jì)算得到。兩類賬戶都可以實(shí)現(xiàn)對以太幣的持有、余額查詢、交易發(fā)送等管理功能,但由于CA是通過功能豐富的腳本程序控制,因此可以實(shí)現(xiàn)更多的個(gè)性化管理功能,如查看賬戶的接收記錄、生成多簽名的錢包等。區(qū)塊鏈中的交易(如轉(zhuǎn)移以太幣)由EOA發(fā)起,而CA可以觸發(fā)執(zhí)行合約代碼。以太坊中的EOA和CA的應(yīng)用特點(diǎn)如圖6所示。

    Fig.6 Accounts in Ethereum圖6 以太坊中的賬戶

    3.4.3 區(qū)塊鏈交易地址

    現(xiàn)實(shí)生活中,當(dāng)人們需要進(jìn)行存錢、轉(zhuǎn)賬等一系列操作時(shí),首先要前往銀行開個(gè)賬戶,領(lǐng)取銀行分配的一串?dāng)?shù)字帳號(hào)(銀行卡號(hào)),帳號(hào)的密碼由用戶設(shè)定。而在區(qū)塊鏈系統(tǒng)中,賬戶不需要由中心機(jī)構(gòu)來開設(shè),而是通過密碼學(xué)原理來產(chǎn)生。本小節(jié)以比特幣系統(tǒng)中的地址生成為例進(jìn)行介紹[21],以太坊的實(shí)現(xiàn)方法和過程與此基本相同。

    地址針對的是具體的賬戶,主要用于各類交易。比特幣系統(tǒng)的地址生成過程如圖7所示,具體為:

    (1)通過調(diào)用操作系統(tǒng)底層的偽隨機(jī)數(shù)生成器(pseudorandom number generator,PRNG)來生成一個(gè)256位的隨機(jī)數(shù)作為私鑰。

    (2)私鑰經(jīng)過橢圓曲線算法生成公鑰。比特幣和以太坊都使用Secp256k1橢圓曲線算法K=k×G(其中,K為公鑰,k為私鑰,G為一個(gè)生成點(diǎn)),由于生成點(diǎn)G是預(yù)定的,因此可以由一個(gè)確定的k來單向生成一個(gè)確定的K。

    (3)通過A=RIPEMD160(SHA256(K))(其中,A為公鑰哈希值),對生成的公鑰進(jìn)行SHA256和RIPEMD160雙哈希運(yùn)算,生成一個(gè)20 Byte的摘要結(jié)果,即Hash160公鑰哈希。

    (4)在生成的公鑰哈希的頭部添加一個(gè)軟件的版本號(hào)(比特幣主網(wǎng)絡(luò)版本號(hào)為“0×00”),然后進(jìn)行兩次SHA256運(yùn)算,取運(yùn)算結(jié)果的前4 Byte,將其添加到公鑰哈希的后面作為“檢驗(yàn)”(Checksum)值,將最后的結(jié)果通過Base58Check編碼后,就得到最終的比特幣的地址。

    Fig.7 Bitcoin transaction address formation process圖7 比特幣交易地址的形成過程

    公鑰生成過程是不可逆的,即不能通過公鑰反推出私鑰。比特幣的私鑰通常保存在比特幣錢包文件中,丟失了私鑰就意味著丟失了對應(yīng)地址的全部比特幣資產(chǎn)。

    3.5 交易數(shù)據(jù)的存儲(chǔ)方式

    底層數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)直接決定著數(shù)據(jù)的讀寫和查詢性能。與傳統(tǒng)的集中式管理的關(guān)系數(shù)據(jù)庫系統(tǒng)相比較,目前比特幣和以太坊對數(shù)據(jù)查詢的性能要求并不高,但對數(shù)據(jù)寫入性能的要求較高,尤其區(qū)塊中交易數(shù)據(jù)和交易狀態(tài)數(shù)據(jù)需要頻繁寫入。而且,作為一個(gè)完全去中心化的分布式系統(tǒng),比特幣和以太坊要求對數(shù)據(jù)庫的部署和應(yīng)用要盡可能簡單和快捷,且不能占用較大的存儲(chǔ)空間和CPU資源,以鼓勵(lì)具有一般算力的節(jié)點(diǎn)加入其中。

    早期比特幣版本中使用的數(shù)據(jù)庫是Berkeley DB[22],從2012年后開始轉(zhuǎn)向使用LevelDB[23]。由于以太坊和超級(jí)賬本推出時(shí)間相對較晚,因此直接使用了LevelDB作為底層數(shù)據(jù)庫。聯(lián)盟鏈中的Hyperledge在fabric0.6版本之前使用的底層數(shù)據(jù)存儲(chǔ)系統(tǒng)為levelDB,但從fabric1.0版本開始同時(shí)提供了對levelDB和CouchDB[24]的支持。目前,區(qū)塊鏈系統(tǒng)的數(shù)據(jù)存儲(chǔ)大多使用levelDB。LevelDB是由Google開發(fā)的針對寫操作進(jìn)行了優(yōu)化的新一代分布式數(shù)據(jù)存儲(chǔ)系統(tǒng),其底層存儲(chǔ)采用了基于日志排序合并樹(log structured merge tree,LSM-tree)結(jié)構(gòu)的Key-Value單機(jī)數(shù)據(jù)庫。在區(qū)塊鏈中,當(dāng)內(nèi)存中的數(shù)據(jù)需要持久寫入磁盤時(shí),首先通過遞歸長度管理前綴(recursive length prefix,RLP)編碼將JSON格式數(shù)據(jù)轉(zhuǎn)化成字符串(Value),然后計(jì)算Value的數(shù)字簽名(Key),最后將<Keyi,Valuei>對存儲(chǔ)在levelDB中。LevelDB具有較高的隨機(jī)寫和順序讀/寫性能,非常適合于查詢操作較少但寫操作頻繁的區(qū)塊鏈應(yīng)用場景。

    4 共識(shí)機(jī)制

    共識(shí)機(jī)制是分布式系統(tǒng)中實(shí)現(xiàn)去中心化信任的核心,它通過在互不信任的節(jié)點(diǎn)之間建立一套共同遵守的預(yù)設(shè)規(guī)則,實(shí)現(xiàn)節(jié)點(diǎn)之間的協(xié)作與配合,最終達(dá)到不同節(jié)點(diǎn)數(shù)據(jù)的一致性。由于區(qū)塊鏈的本質(zhì)是一個(gè)去中心化的分布式賬本數(shù)據(jù)庫,因此區(qū)塊鏈中的共識(shí)機(jī)制既要體現(xiàn)分布式系統(tǒng)的基本要求,又要考慮區(qū)塊鏈中專門針對交易記錄、需要解決拜占庭容錯(cuò)以及可能存在的惡意節(jié)點(diǎn)篡改數(shù)據(jù)等安全問題。因此,區(qū)塊鏈中的共識(shí)機(jī)制更具有針對性,可根據(jù)不同的區(qū)塊鏈應(yīng)用場景選擇符合不同運(yùn)行需求的共識(shí)機(jī)制。

    自從1982年Lamport等學(xué)者在文獻(xiàn)[25]中提出“拜占庭將軍問題”以來,有關(guān)共識(shí)算法的大量研究集中在理論探討方面。但從2008年比特幣進(jìn)入人們的視線以來,各類共識(shí)機(jī)制開始從理論步入實(shí)踐,并隨著比特幣自身的迭代、以太坊平臺(tái)的發(fā)展以及智能合約和超級(jí)賬本等基于區(qū)塊鏈應(yīng)用的豐富,已有的共識(shí)算法在實(shí)踐中得到完善,同時(shí)伴隨新應(yīng)用場景的不斷出現(xiàn),符合相應(yīng)需求的共識(shí)機(jī)制相繼得到應(yīng)用。本章主要介紹目前在區(qū)塊鏈中具有代表性的共識(shí)機(jī)制和算法:早期比特幣中高度依賴節(jié)點(diǎn)算力的工作量證明(PoW)機(jī)制[26]、點(diǎn)點(diǎn)幣中區(qū)塊生成與節(jié)點(diǎn)所占有股權(quán)成反比的權(quán)益證明(PoS)機(jī)制[27]、比特股中按既定時(shí)間段輪流產(chǎn)生區(qū)塊的授權(quán)股份證明機(jī)制(DPoS)[28]和在Hyperledger(超級(jí)賬本)和Antshares(小蟻)中基于實(shí)用拜占庭容錯(cuò)(practical Byzantine fault tolerance,PBFT)機(jī)制[29]等,表3對各算法的主要特性進(jìn)行了對比。

    4.1 PoW共識(shí)機(jī)制

    1997年,26歲的英國埃克塞特大學(xué)博士亞當(dāng)·巴克(Adam Back)提出哈?,F(xiàn)金(Hashcash)的概念[30],其思想類似于密碼學(xué)的RSA算法:計(jì)算兩個(gè)質(zhì)數(shù)之積是容易的,但分解兩個(gè)質(zhì)數(shù)之積是困難的。哈?,F(xiàn)金的思想體現(xiàn)在一些數(shù)學(xué)結(jié)果很難發(fā)現(xiàn)但易于校驗(yàn)?;谶@一數(shù)學(xué)特征,可以設(shè)計(jì)這樣的協(xié)議:提供一個(gè)有一定計(jì)算量的質(zhì)數(shù)之積,只要對方能夠?qū)⑵溥M(jìn)行分解,就允許建立連接。這一協(xié)議要求對方必須是誠意的,而且為了表示此誠意需要付出一定的算力來解決提出的問題。例如,為了防止接收到垃圾郵件,郵件接收者可以在郵件的消息頭中增加一個(gè)哈希值,該值在生成時(shí)需要包括收件人地址、發(fā)送時(shí)間及鹽值(salt)等信息,可以對該哈希值設(shè)置一定的條件(如前10位必須是0),只有滿足該條件的郵件才被認(rèn)為是一個(gè)合法的郵件。郵件發(fā)送者只有經(jīng)過不斷嘗試(改變salt值),直到得到符合要求的哈希值為止,除此之外沒有任何捷徑。另外,生成該哈希值時(shí)的時(shí)間戳可以防止一次計(jì)算結(jié)果的重復(fù)使用,避免垃圾郵件制造者利用同一個(gè)哈希值來發(fā)送多份郵件。

    Table 3 Comparison of PoW,PoS,DPoS and PBFT consensus mechanisms表3 PoW、PoS、DPoS和PBFT共識(shí)機(jī)制對比

    哈?,F(xiàn)金的本質(zhì)是一種PoW系統(tǒng),即愿意并完成了一定計(jì)算工作量且提供了證明的節(jié)點(diǎn)被認(rèn)為是可信賴的。在比特幣區(qū)塊鏈中就采用了高度依賴于節(jié)點(diǎn)算力的PoW機(jī)制,每個(gè)參與共識(shí)的礦工基于各自的算力相互競爭來共同解決一個(gè)求解復(fù)雜但驗(yàn)證容易的SHA256數(shù)學(xué)難題,最快解決該難題的節(jié)點(diǎn)將獲得區(qū)塊記賬權(quán)和系統(tǒng)給予的比特幣獎(jiǎng)勵(lì)。即在已預(yù)置區(qū)塊頭中工作量證明難度的前提下,節(jié)點(diǎn)通過不斷調(diào)整隨機(jī)數(shù)Nonce來計(jì)算區(qū)塊頭部元數(shù)據(jù)的雙SHA256哈希值以滿足以下條件:

    其中,H為單向哈希函數(shù),比特幣使用SHA256;h為區(qū)塊頭部數(shù)據(jù),主要包含前一區(qū)塊哈希、Merkle根等內(nèi)容;d為當(dāng)前工作量證明難度。PoW在區(qū)塊鏈網(wǎng)絡(luò)中的共識(shí)流程如下:

    (1)當(dāng)某一節(jié)點(diǎn)產(chǎn)生了一筆新交易時(shí),為了盡快完成交易過程并得到別人的認(rèn)可,交易及相關(guān)信息會(huì)立即廣播給區(qū)塊鏈網(wǎng)絡(luò)中的所有節(jié)點(diǎn)。節(jié)點(diǎn)在接收到該交易數(shù)據(jù)時(shí),為了能夠完成挖礦操作便將其按序添加到當(dāng)前區(qū)塊體中。

    (2)根據(jù)Merkle根的生成規(guī)則,每個(gè)節(jié)點(diǎn)計(jì)算自前一次區(qū)塊生成以來已接收到的交易構(gòu)成的Merkle根,并填寫區(qū)塊頭中各字段的元數(shù)據(jù),其中Nonce的初始值設(shè)置為0。

    (3)從0開始將Nonce每次按1遞增,依次計(jì)算區(qū)塊頭的雙SHA256值,直到該值小于或等于工作量證明難度的設(shè)定值時(shí),該Nonce就是工作量證明的解。

    (4)當(dāng)某個(gè)節(jié)點(diǎn)找到了符合工作量證明要求的Nonce值后,為了獲得對該區(qū)塊的記賬權(quán)(獲得了記賬權(quán)就獲得了獎(jiǎng)勵(lì)),就需要盡快將該區(qū)塊以廣播形式向全網(wǎng)分發(fā)。

    (5)其他節(jié)點(diǎn)在接收到新區(qū)塊后,為了盡快挖出下一個(gè)區(qū)塊,就會(huì)對接收到的區(qū)塊進(jìn)行驗(yàn)證,如果正確,便將該新區(qū)塊添加到主鏈上,并在該區(qū)塊的基礎(chǔ)上去競爭下一個(gè)區(qū)塊。

    挖礦的實(shí)質(zhì)是所有參與節(jié)點(diǎn)集中各自算力去尋找由多個(gè)前導(dǎo)0構(gòu)成的區(qū)塊頭哈希值,工作量證明難度d的設(shè)定值越小,區(qū)塊頭哈希值的前導(dǎo)0就越多,尋找到合適隨機(jī)數(shù)的概率越低,挖礦的難度就越大。為了適應(yīng)硬件技術(shù)的快速發(fā)展及計(jì)算能力的不斷提升,比特幣每2 016塊就會(huì)調(diào)整一次工作量證明難度,以控制區(qū)塊的平均生成時(shí)間(10 min)始終保持不變。

    PoW共識(shí)機(jī)制的特點(diǎn)是各參與節(jié)點(diǎn)緊緊依賴于自己的算力以獲得對新區(qū)塊的記賬權(quán),同時(shí)獲得相應(yīng)的獎(jiǎng)勵(lì)(該過程也實(shí)現(xiàn)了比特幣的發(fā)行),在此共識(shí)過程中引入了經(jīng)濟(jì)激勵(lì)機(jī)制,從而使更多的節(jié)點(diǎn)為了追求經(jīng)濟(jì)利益而愿意加入到挖礦過程中,這種獨(dú)特的共識(shí)機(jī)制不但有利于系統(tǒng)的長久穩(wěn)定運(yùn)行,而且增強(qiáng)了網(wǎng)絡(luò)的可靠性與安全性。

    PoW共識(shí)機(jī)制的優(yōu)勢是借助比特幣特有的價(jià)值屬性激勵(lì)節(jié)點(diǎn)參與挖礦,并在共識(shí)過程中通過競爭區(qū)塊的記賬權(quán)實(shí)現(xiàn)了比特幣的貨幣發(fā)行和交易支付行為,采用的驗(yàn)證和競爭機(jī)制保障了系統(tǒng)的安全性和去中心化。但PoW共識(shí)過程完全依賴各節(jié)點(diǎn)的算力,從而引起大量資源的浪費(fèi),與當(dāng)前綠色發(fā)展的理念格格不入。同時(shí),長達(dá)10 min的出塊時(shí)間,使PoW機(jī)制不適合于額度小、交易量大的商業(yè)應(yīng)用,其可擴(kuò)展性受到了限制。

    4.2 PoS共識(shí)機(jī)制

    PoS共識(shí)機(jī)制是PoW的替代方案,是為解決PoW共識(shí)機(jī)制中一直被詬病的資源浪費(fèi)以及為了滿足更高要求的安全性而提出來的。PoS設(shè)置的記賬規(guī)則與PoW算法類似,即所有礦工基于算力競爭滿足特定條件的哈希值,最先成功求得解的礦工便擁有記賬權(quán)。兩種算法的不同之處在于,PoW共識(shí)是基于節(jié)點(diǎn)的算力來求解符合條件的哈希值,而PoS則是尋找最高權(quán)益的節(jié)點(diǎn),即PoS通過權(quán)益證明來替代PoW中的基于節(jié)點(diǎn)哈希算力的證明來競爭新區(qū)塊的記賬權(quán)。

    PoS算法中的權(quán)益可以概括為節(jié)點(diǎn)擁有的資產(chǎn),誰擁有資產(chǎn)越多,誰將會(huì)更有可能在下一個(gè)區(qū)塊記賬權(quán)的競爭中勝出。在不同的應(yīng)用場景中,資產(chǎn)所表示的含義有所不同。PPCoin中的資產(chǎn)為“幣齡”,即節(jié)點(diǎn)擁有數(shù)字貨幣的數(shù)量與持有時(shí)間的乘積,其值越大節(jié)點(diǎn)獲得新區(qū)塊記賬權(quán)的概率也就越大。為了避免PoW算法中因算力過于集中帶來的問題,在PoS算法中,如果某一節(jié)點(diǎn)獲得了記賬權(quán),則其“幣齡”將會(huì)自動(dòng)清零?;凇皫琵g”的算法設(shè)計(jì)非常類似于現(xiàn)實(shí)生活現(xiàn)象,即某人擁有代幣的數(shù)量越多、時(shí)間越長,就越希望維護(hù)幣值穩(wěn)定,也越愿意維護(hù)系統(tǒng)的正常運(yùn)行;基于可驗(yàn)證秘密共享(verifiable secret sharing,VSS)的G.O.D coin tossing算法[31]中的資產(chǎn)為“代幣”,持有代幣越多的節(jié)點(diǎn)將有更高的概率被選中作為新區(qū)塊記賬者;為了防止節(jié)點(diǎn)在離線狀態(tài)下累積“幣齡”,黑幣(Blackcoin)[32]在其2014年6月發(fā)布的PoS2.0白皮書中,用“余額”作為資產(chǎn)來鼓勵(lì)節(jié)點(diǎn)盡可能保持在線,以提高系統(tǒng)的安全性和系統(tǒng)運(yùn)行的穩(wěn)定性;為了解決PoW算法在挖礦過程中產(chǎn)生的能源消耗問題,以太坊將從早期的使用PoW的共識(shí)機(jī)制向著PoW和PoS混合,再到最后實(shí)現(xiàn)單一的PoS共識(shí)機(jī)制過渡。

    與PoW算法相比,PoS算法擁有一些明顯的優(yōu)點(diǎn),如放棄單純的算力競爭而節(jié)約了能源,采用清零機(jī)制解決了算力過于集中,限制只有在線用戶才能獲得收益從而解決“公地悲劇”(tragedy of the commons)的發(fā)生等。但PoS更容易出現(xiàn)分叉,安全性和容錯(cuò)性相對較低,某些擁有權(quán)益的節(jié)點(diǎn)無意全力投入到記賬競爭中等。

    4.3 DPoS共識(shí)機(jī)制

    為了有效解決PoS共識(shí)機(jī)制存在的不足,2014年4月,Larimer等在PoS的基礎(chǔ)上提出了DPoS共識(shí)算法[33],以提高持幣者參與挖礦的積極性和主動(dòng)性。DPoS共識(shí)機(jī)制也稱為股份授權(quán)證明算法,即每個(gè)節(jié)點(diǎn)相當(dāng)于一個(gè)股東,所有股東選擇一定數(shù)量的代表作為共同信任的委托人,由該委托人來幫助大家記賬。DPoS共識(shí)機(jī)制與PoS的最大區(qū)別表現(xiàn)為:

    (1)委托人的選擇。委托人必須是大家信任的股東節(jié)點(diǎn),每個(gè)股東節(jié)點(diǎn)將其持有股份的數(shù)量作為選票多少投給自己信任的某個(gè)節(jié)點(diǎn),在規(guī)定的時(shí)間內(nèi)獲得選票最多且有意愿為大家服務(wù)的股東節(jié)點(diǎn)將作為委托人(總共101個(gè))。

    (2)激勵(lì)與懲罰。根據(jù)系統(tǒng)約定,每個(gè)委托人在規(guī)定的時(shí)間范圍內(nèi)輪流負(fù)責(zé)新區(qū)塊的生成、轉(zhuǎn)發(fā)和驗(yàn)證,并可以從每筆交易中獲得一定數(shù)額的交易費(fèi)(transaction fees)。為了防止委托人不作為,系統(tǒng)規(guī)定每個(gè)委托人必須事先繳納金額相當(dāng)于獲得一個(gè)新區(qū)塊記賬權(quán)獎(jiǎng)勵(lì)100倍的保證金,如果某個(gè)委托人沒有在規(guī)定的時(shí)間內(nèi)完成新區(qū)塊的創(chuàng)建工作,股東將會(huì)收回選票,并將該委托人降為普通股東,同時(shí)保證金也會(huì)被沒收[34]。這樣,委托人為了能夠獲益,必須保持永久在線。

    基于DPoS共識(shí)機(jī)制的區(qū)塊鏈系統(tǒng)是一個(gè)中心化(針對委托人)和去中心化(針對所有股東)的混合體,每個(gè)節(jié)點(diǎn)都能夠通過投票決定自己的委托人,有限的委托人輪流記賬,大幅度減少了參與記賬競爭的節(jié)點(diǎn)數(shù),提高了共識(shí)驗(yàn)證的效率。而且每一個(gè)委托人的工作狀態(tài)都受到投票者的監(jiān)督,在確保節(jié)點(diǎn)真實(shí)性的同時(shí),也能夠使那些雖然擁有較少資源(算力)但具有較強(qiáng)責(zé)任心的節(jié)點(diǎn)有機(jī)會(huì)成為委托人而獲益。

    4.4 PBFT共識(shí)機(jī)制

    與PoW、PoS和DPoS不同的是,拜占庭容錯(cuò)(Byzantine fault tolerance,BFT)[35]機(jī)制無需通過競爭來確定記賬者,而是讓系統(tǒng)中的節(jié)點(diǎn)以投票方式來產(chǎn)生新區(qū)塊,并實(shí)現(xiàn)系統(tǒng)中共識(shí)結(jié)果的一致性,而且不會(huì)出現(xiàn)分叉現(xiàn)象。根據(jù)分布式系統(tǒng)的CAP理論,任何一個(gè)系統(tǒng)在C(consistency,一致性)、A(availability,可用性)和P(partition tolerance,分區(qū)容錯(cuò)性)三者中最多能夠同時(shí)實(shí)現(xiàn)兩項(xiàng),這就使得BFT在滿足一致性和可用性的前提下,只能弱化分區(qū)容錯(cuò)性。由于BFT機(jī)制具有強(qiáng)一致性(這是共識(shí)機(jī)制的前提),因此各種基于BFT的衍生算法廣泛應(yīng)用于區(qū)塊鏈網(wǎng)絡(luò),如超級(jí)賬本和Antshares等多個(gè)區(qū)塊鏈系統(tǒng)都使用了PBFT共識(shí)機(jī)制。

    PBFT通過優(yōu)化算法將計(jì)算復(fù)雜度從指數(shù)級(jí)降到多項(xiàng)式級(jí),解決了BFT運(yùn)行效率低的不足。PBFT共識(shí)機(jī)制主要包括共識(shí)達(dá)成、檢查點(diǎn)協(xié)議(check point)和視圖轉(zhuǎn)換(view-change)3個(gè)部分。其中,PBFT共識(shí)達(dá)成分為以下5個(gè)過程(如圖8所示):

    (1)請求(propose)。當(dāng)客戶端(client)向主節(jié)點(diǎn)發(fā)起一個(gè)請求時(shí),便產(chǎn)生一個(gè)新的視圖(view)。其中,PBFT中的節(jié)點(diǎn)分為主節(jié)點(diǎn)(primary)和副本節(jié)點(diǎn)(replica)兩種類型,1個(gè)PBFT區(qū)塊鏈網(wǎng)絡(luò)中的主節(jié)點(diǎn)只有1個(gè),其他節(jié)點(diǎn)都是副本節(jié)點(diǎn);視圖表示當(dāng)前所有節(jié)點(diǎn)身份的狀態(tài)信息,當(dāng)視圖轉(zhuǎn)換協(xié)議更換了一個(gè)主節(jié)點(diǎn)時(shí),視圖也會(huì)隨之發(fā)生變化。

    (2)預(yù)準(zhǔn)備(pre-prepare)。主節(jié)點(diǎn)在收到客戶端的請求消息后,首先對其進(jìn)行編號(hào),然后將計(jì)算得到的預(yù)準(zhǔn)備消息發(fā)給所有的副本節(jié)點(diǎn)。在此過程中,用到了哈希算法、數(shù)字簽名等方式。

    (3)準(zhǔn)備(prepare)。副本節(jié)點(diǎn)在收到主節(jié)點(diǎn)發(fā)送的預(yù)準(zhǔn)備消息后,驗(yàn)證消息的合法性。驗(yàn)證通過后,副本節(jié)點(diǎn)分別計(jì)算準(zhǔn)備消息,然后將結(jié)果發(fā)送給其他節(jié)點(diǎn)。與此同時(shí),各節(jié)點(diǎn)對自己收到的準(zhǔn)備消息進(jìn)行驗(yàn)證,當(dāng)通過驗(yàn)證的合法準(zhǔn)備消息數(shù)量大于等于2f+1(f為惡意節(jié)點(diǎn)數(shù))時(shí),將預(yù)準(zhǔn)備消息和準(zhǔn)備消息寫入日志,并向其他節(jié)點(diǎn)發(fā)送確認(rèn)消息。

    (4)確認(rèn)(commit)。節(jié)點(diǎn)接收到確認(rèn)消息,并驗(yàn)證其合法性。如果通過驗(yàn)證的合法確認(rèn)消息的數(shù)量大于等于2f+1,將完成消息的證明,并將證明結(jié)果發(fā)送給客戶端。

    (5)回復(fù)(reply)??蛻舳藢邮盏降挠筛鞴?jié)點(diǎn)回復(fù)的證明消息進(jìn)行驗(yàn)證,當(dāng)通過驗(yàn)證的消息數(shù)量大于等于2f+1時(shí),客戶端確認(rèn)完成請求。否則,客戶端需要重新發(fā)起一輪全新的請求過程。

    Fig.8 PBFT consensus building process圖8 PBFT共識(shí)達(dá)成過程

    在采用PBFT共識(shí)機(jī)制的區(qū)塊鏈網(wǎng)絡(luò)中,主節(jié)點(diǎn)代表獲得記賬權(quán)的節(jié)點(diǎn),而客戶端請求代表交易信息。

    在PBFT共識(shí)過程中,還用到了檢查點(diǎn)協(xié)議和視圖轉(zhuǎn)換協(xié)議[36-37]。其中,檢查點(diǎn)協(xié)議的功能是實(shí)現(xiàn)節(jié)點(diǎn)狀態(tài)的一致性。當(dāng)某個(gè)節(jié)點(diǎn)因網(wǎng)絡(luò)延時(shí)或中斷等原因?qū)е聫哪骋痪幪?hào)開始的請求消息沒有執(zhí)行時(shí),檢查點(diǎn)協(xié)議通過周期性地執(zhí)行同步操作,將系統(tǒng)中的節(jié)點(diǎn)同步到某一個(gè)相同的狀態(tài),并定期刪除指定時(shí)間點(diǎn)之前的日志數(shù)據(jù),以節(jié)約節(jié)點(diǎn)存儲(chǔ)空間;視圖轉(zhuǎn)換協(xié)議的功能是在主節(jié)點(diǎn)不能正常工作時(shí),重新從現(xiàn)有的副本節(jié)點(diǎn)中選出一個(gè)新的節(jié)點(diǎn)作為主節(jié)點(diǎn),繼續(xù)PBFT共識(shí)過程。

    由于PBFT共識(shí)中可以生成新區(qū)塊的節(jié)點(diǎn)(primary節(jié)點(diǎn))是唯一的,因此不會(huì)存在分叉現(xiàn)象[38]。但由于每個(gè)節(jié)點(diǎn)都需要頻繁地接收從其他節(jié)點(diǎn)發(fā)送過來的交易數(shù)據(jù),同時(shí)也要將本節(jié)點(diǎn)的交易數(shù)據(jù)盡快發(fā)送出去,因此網(wǎng)絡(luò)的開銷較大,導(dǎo)致基于PBFT共識(shí)機(jī)制的區(qū)塊鏈的系統(tǒng)性能不高,只能滿足規(guī)模不大的聯(lián)盟鏈應(yīng)用場景。

    5 智能合約

    5.1 區(qū)塊鏈中的智能合約

    傳統(tǒng)意義上的合約(或合同)是指雙方當(dāng)事人基于意思表示合致而成立的法律行為。1994年,美國計(jì)算機(jī)科學(xué)家Nick Szabo提出了智能合約(smart contract)的概念:一套以程序代碼指定的承諾以及執(zhí)行這些承諾的協(xié)議。智能合約的設(shè)計(jì)初衷是在沒有任何第三方可信權(quán)威參與和控制的情況下,借助計(jì)算機(jī)程序,編寫能夠自動(dòng)執(zhí)行合約條款的程序代碼,并將代碼嵌入到具有價(jià)值的信息化物理實(shí)體,將其作為合約各方共同信任的執(zhí)行者代為履行合約規(guī)定的條款,并按合約約定創(chuàng)建相應(yīng)的智能資產(chǎn)。伴隨著區(qū)塊鏈應(yīng)用從比特幣發(fā)展到以太坊和超級(jí)賬本,智能合約也發(fā)生了一次華麗蛻變,尤其是借助區(qū)塊鏈的去中心化基礎(chǔ)架構(gòu),使得智能合約得以在去信任的可執(zhí)行環(huán)境中實(shí)現(xiàn)。區(qū)塊鏈觸發(fā)了智能合約的生機(jī)和活力,智能合約摧生了區(qū)塊鏈技術(shù)更加廣泛的應(yīng)用場景。

    廣義的智能合約是指運(yùn)行在區(qū)塊鏈上的計(jì)算機(jī)程序。狹義的智能合約可以認(rèn)為是運(yùn)行在區(qū)塊鏈基礎(chǔ)架構(gòu)上,基于約定規(guī)則,由事件驅(qū)動(dòng),具有狀態(tài),能夠保存賬本上資產(chǎn),利用程序代碼來封裝和驗(yàn)證復(fù)雜交易行為,實(shí)現(xiàn)信息交換、價(jià)值轉(zhuǎn)移和資產(chǎn)管理,可自動(dòng)執(zhí)行的計(jì)算機(jī)程序。目前,根據(jù)所使用的編程語言和運(yùn)行環(huán)境的不同,將比特幣中的智能合約稱為腳本型智能合約,將主要運(yùn)行在以太坊和超級(jí)賬本中的智能合約稱為圖靈完備型智能合約,而將正在研發(fā)中的kadena項(xiàng)目[39]中的智能合約稱為可驗(yàn)證合約型智能合約[40]。

    (1)腳本型智能合約。由于比特幣中的腳本僅包含指令和數(shù)據(jù)兩部分,其中涉及到的腳本指令(也稱為“操作碼”,Opcode)只需要完成有限的交易邏輯,如編寫比特幣中UTXO的鎖定腳本和解鎖腳本,不需要復(fù)雜的循環(huán)、條件判斷和跳轉(zhuǎn)操作,因此比特幣中的腳本型智能合約是一種基于堆棧的功能有限且編寫相對容易的簡單執(zhí)行程序,支持的指令不到200條。

    (2)圖靈完備型智能合約。腳本語言被設(shè)計(jì)成為僅在有限范圍內(nèi)執(zhí)行有限功能的簡單執(zhí)行語言,是非圖靈完備的語言。使用腳本語言編寫的交易指令雖然能夠滿足比特幣應(yīng)用,但無法適應(yīng)以太坊平臺(tái)的開發(fā)需求。目前,以太坊主要使用Solidity[41]和Serpent[42]兩種智能合約開發(fā)語言。其中,Solidity是一種語法上類似于JavaScript的專門針對運(yùn)行在以太坊虛擬機(jī)(environment virtual machine,EVM)上的智能合約開發(fā)而設(shè)計(jì)的高級(jí)編程語言,也是以太坊平臺(tái)主推的智能合約開發(fā)語言;Serpent語言的設(shè)計(jì)類似于Python,具有高效易用的編程風(fēng)格,是專門針對智能合約的特征而開發(fā)的高級(jí)語言。在Hyperledger Fabric中采用GO、Java等通用語言編寫運(yùn)行在Docker容器中的智能合約,GO和Java都是通用性較強(qiáng)的圖靈完備語言,能夠?qū)崿F(xiàn)基于聯(lián)盟鏈智能合約開發(fā)中所需要的應(yīng)用邏輯。

    (3)可驗(yàn)證合約型智能合約??沈?yàn)證語言Pact的語法類似于LISP語言,用于編寫運(yùn)行在區(qū)塊鏈Kadena上的智能合約,可實(shí)現(xiàn)合約的數(shù)據(jù)存儲(chǔ)和授權(quán)驗(yàn)證等功能。Pact語言采用非圖靈完備設(shè)計(jì),不支持循環(huán)和遞歸,以防止在復(fù)雜合約的編程過程中可能存在的安全漏洞以及因此而帶來的風(fēng)險(xiǎn)。用Pact語言編寫的智能合約代碼直接嵌入在區(qū)塊鏈上運(yùn)行,不需要事先編譯成為運(yùn)行在特定環(huán)境(如以太坊EVM)的機(jī)器代碼。

    5.2 區(qū)塊鏈智能合約運(yùn)行機(jī)制

    由于區(qū)塊鏈應(yīng)用的多樣性,在不同平臺(tái)上使用的智能合約的運(yùn)行機(jī)制也不盡相同。本節(jié)主要選擇目前最具代表性的以太坊開發(fā)平臺(tái),介紹智能合約的運(yùn)行機(jī)制(如圖9所示),主要包括以下階段:

    (1)智能合約代碼的生成。在合約各方就傳統(tǒng)意義上的合同內(nèi)容達(dá)成一致的基礎(chǔ)上,通過評(píng)估確定該合同是可以通過智能合約實(shí)現(xiàn)的(是可編程的),然后由程序員利用合適的開發(fā)語言將以自然語言描述的合同內(nèi)容編碼成為可執(zhí)行的機(jī)器語言。

    (2)編譯。利用開發(fā)語言編寫的智能合約代碼一般不能直接在區(qū)塊鏈上運(yùn)行,而需要在特定的沙箱環(huán)境(以太坊為EVM,超級(jí)賬本為Docker容器)中執(zhí)行,因此在將合約文件上傳到區(qū)塊鏈之前需要利用編譯器對原代碼進(jìn)行編譯,生成符合沙箱環(huán)境運(yùn)行要求的字節(jié)碼。

    (3)提交。智能合約的提交和調(diào)用是通過“交易”(transaction,Txn)來完成。當(dāng)用戶以交易形式發(fā)起提交合約文件后,通過P2P網(wǎng)絡(luò)進(jìn)行全網(wǎng)廣播,各節(jié)點(diǎn)在進(jìn)行驗(yàn)證后存儲(chǔ)在區(qū)塊中。

    Fig.9 Smart contract operation mechanism圖9 智能合約運(yùn)行機(jī)制

    (4)確認(rèn)。被驗(yàn)證后的有效交易被打包進(jìn)新區(qū)塊,經(jīng)過共識(shí)機(jī)制,新區(qū)塊添加到區(qū)塊鏈的主鏈。根據(jù)交易生成智能合約的賬戶地址,之后可以利用該賬戶地址通過發(fā)起交易來調(diào)用合約,節(jié)點(diǎn)對經(jīng)驗(yàn)證有效的交易進(jìn)行處理,被調(diào)用的合約在沙箱中執(zhí)行。

    另外,主要出于對安全、效率和可擴(kuò)展性的考慮,一些智能合約在運(yùn)行時(shí)需要區(qū)塊鏈以外信息的支撐,這些鏈外信息的提供,從源頭上必須保證是可靠、可信的。

    5.3 區(qū)塊鏈智能合約的實(shí)現(xiàn)技術(shù)

    根據(jù)運(yùn)行環(huán)境的不同,目前智能合約主要集中在比特幣、以太坊和超級(jí)賬本3類應(yīng)用場景中。

    5.3.1 比特幣中智能合約的實(shí)現(xiàn)技術(shù)

    比特幣是基于交易的密碼貨幣,它不像基于賬戶的密碼貨幣(如以太幣)那樣可以直接查詢賬戶的余額,而需要通過UTXO來計(jì)算交易地址的余額。比特幣的每筆交易由多個(gè)交易輸入和多個(gè)交易輸出組成,交易輸入中包含著UTXO和解鎖腳本,交易輸出中包含著比特幣的數(shù)量和鎖定腳本。當(dāng)發(fā)生一筆交易時(shí),每個(gè)UTXO的解鎖腳本和鎖定腳本同時(shí)執(zhí)行,并根據(jù)結(jié)果決定是否能夠完成本筆交易。腳本直接嵌入在區(qū)塊鏈的核心代碼中,由比特幣錢包(bitcoin core)生成并執(zhí)行。另外,Kadena的智能合約也采用嵌入到區(qū)塊鏈中并與區(qū)塊鏈代碼一起執(zhí)行的運(yùn)行方式。

    5.3.2 以太坊中智能合約的實(shí)現(xiàn)技術(shù)

    由于以太坊中的智能合約使用了圖靈完備語言,因此合約編寫過程中容易產(chǎn)生可能被非法利用的安全漏洞和惡意代碼,將直接威脅到區(qū)塊鏈運(yùn)行的安全性,并可能導(dǎo)致無法挽回的后果,如2016年6月發(fā)生的著名的The DOA事件[43]。如果以太坊中的智能合約使用比特幣中的非圖靈完備語言,其功能將會(huì)受到極大限制;如果讓智能合約不加控制地直接在區(qū)塊鏈上運(yùn)行,則面臨巨大的安全隱患。為此,以太坊中的智能合約運(yùn)行在EVM沙箱中,通過沙箱環(huán)境限制合約代碼的運(yùn)行。沙箱(Sandboxie)是一種通過預(yù)置的安全策略來限制程序運(yùn)行行為的執(zhí)行環(huán)境,運(yùn)行在EVM中的合約與區(qū)塊鏈宿主之間以及不同合約之間被沙箱隔離,互不干擾,限制了合約的執(zhí)行和影響范圍。

    不同于標(biāo)準(zhǔn)的存儲(chǔ)器結(jié)構(gòu),EVM中的程序代碼并沒有存放在常規(guī)的RAM(random access memory)和外部存儲(chǔ)介質(zhì)中,而是保存在虛擬的ROM(readonly memory)中。為了滿足SHA256算法和橢圓曲線加密算法的運(yùn)行要求,EVM提供了大小為256位的簡單棧式結(jié)構(gòu)。EVM部署在以太坊節(jié)點(diǎn)上,負(fù)責(zé)合約的執(zhí)行。當(dāng)合約在EVM中初始化時(shí),將創(chuàng)建新的合約賬戶信息,包括賬戶地址、存儲(chǔ)空間和主體代碼等內(nèi)容。

    為了防止因人為或設(shè)計(jì)缺陷導(dǎo)致的區(qū)塊鏈資源消耗,以太坊智能合約引入了gas計(jì)費(fèi)機(jī)制。合約創(chuàng)建與調(diào)用、賬戶中存儲(chǔ)數(shù)據(jù)的訪問、在EVM上運(yùn)行操作碼等涉及到合約創(chuàng)建和運(yùn)行的過程,都需要按相應(yīng)標(biāo)準(zhǔn)支付相應(yīng)數(shù)量的gas。當(dāng)EVM代碼創(chuàng)建過程中所需的gas數(shù)量大于賬戶的gas余量時(shí),不但新的合約無法創(chuàng)建,而且賬戶中剩余的gas將被清零。gas計(jì)費(fèi)機(jī)制為智能合約的運(yùn)行提供了有效保障。

    5.3.3 超級(jí)賬本中智能合約的實(shí)現(xiàn)技術(shù)

    Docker容器是一個(gè)使用廣泛的、開源的沙箱環(huán)境,Hyperledger Fabric中的智能合約chaincode(鏈碼)就運(yùn)行在輕量級(jí)的Docker容器中,并通過gRPC協(xié)議與相應(yīng)的Peer節(jié)點(diǎn)(即存儲(chǔ)賬本、chaincode等關(guān)鍵數(shù)據(jù),并執(zhí)行背書及chaincode代碼等特定程序的物理節(jié)點(diǎn))進(jìn)行交互?;贒ocker容器具有的安全隔離功能,避免了區(qū)塊鏈宿主程序遭受容器中惡意合約的攻擊,同時(shí)防止運(yùn)行在不同容器中的合約之間的相互干擾。chaincode的運(yùn)行過程主要包括:

    (1)打包(package)。將chaincode安裝在Peer節(jié)點(diǎn),包括創(chuàng)建包和對包簽名。具體是指將用開發(fā)語言(多使用GO語言)編寫的源代碼按照chaincode部署規(guī)范(chaincode deployment spec,CDS)重新定義,并通過簽名來檢查和確認(rèn)chaincode的所有者。如果要讓chaincode擁有多個(gè)所有者,首先需要?jiǎng)?chuàng)建一個(gè)被簽名的chaincode包(SignedCDS包),然后讓這個(gè)包依次被每個(gè)所有者進(jìn)行簽名。

    (2)安裝(install)。將CDS規(guī)定格式的chaincode安裝在一個(gè)將要運(yùn)行該合約的Peer節(jié)點(diǎn)上。chaincode只被安裝在合約所有者的背書節(jié)點(diǎn)上,安裝的實(shí)質(zhì)是代碼的編譯過程。

    (3)實(shí)例化(instantiate)。調(diào)用生命周期系統(tǒng)chaincode(lifecycle system chaincode,LSCC),在channel[44](即基于交易規(guī)則將區(qū)塊鏈網(wǎng)絡(luò)劃分后形成的邏輯單元)上啟動(dòng)一個(gè)Docker容器,實(shí)現(xiàn)合約與channel的綁定。實(shí)例化過程,會(huì)生成對應(yīng)channel的Docker鏡像和Docker容器,可以指定背書策略。在成功進(jìn)行了實(shí)例化后,處于激活狀態(tài)的chaincode將監(jiān)聽并接收交易請求。

    (4)更新(upgrade)。更新是一個(gè)類似于實(shí)例化的交易,即將新版本的chaincode與channel綁定。更新后其他與舊版本綁定的channel仍舊運(yùn)行舊版本的chaincode。

    (5)刪除(delete)。刪除chaincode對應(yīng)的Docker容器以及每個(gè)安裝合約的背書節(jié)點(diǎn)上的SignedCDS包。在正在開發(fā)的版本中,將用stop和start交易的指令來停止或重啟chaincode,而不需要直接將其刪除。

    超級(jí)賬本中的智能合約基于模塊化的可擴(kuò)展架構(gòu),將共識(shí)服務(wù)從背書節(jié)點(diǎn)分離開來,形成獨(dú)立的功能模塊,可擴(kuò)展性強(qiáng),共識(shí)效率高,作為聯(lián)盟鏈應(yīng)用,適合于供應(yīng)鏈、銀行、證券機(jī)構(gòu)等行業(yè)的應(yīng)用場景。

    6 區(qū)塊鏈應(yīng)用現(xiàn)狀和存在的挑戰(zhàn)

    6.1 區(qū)塊鏈應(yīng)用現(xiàn)狀

    與傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)相比,區(qū)塊鏈在去中心化、數(shù)據(jù)按時(shí)序存儲(chǔ)及防篡改、交易的可溯源與不可否認(rèn)、自動(dòng)執(zhí)行的智能合約等方面具有絕對的優(yōu)勢,這使得區(qū)塊鏈技術(shù)不僅在數(shù)字加密貨幣領(lǐng)域彰顯了獨(dú)有的優(yōu)勢,同時(shí)在社會(huì)管理、金融、經(jīng)濟(jì)等眾多領(lǐng)域具有廣泛的應(yīng)用場景。而且,區(qū)塊鏈在技術(shù)迭代過程中其功能得到不斷豐富和完善,更顯示出迅猛的發(fā)展勢頭。本節(jié)以區(qū)塊鏈1.0、區(qū)塊鏈2.0和區(qū)塊鏈3.0發(fā)展為脈絡(luò),分析區(qū)塊鏈技術(shù)的應(yīng)用現(xiàn)狀。

    6.1.1 基于區(qū)塊鏈1.0的數(shù)字貨幣

    區(qū)塊鏈最初的應(yīng)用是比特幣,但隨著比特幣在全球的興起,區(qū)塊鏈潛在的價(jià)值開始引起大家的普遍關(guān)注。區(qū)塊鏈1.0對應(yīng)的是以比特幣為代表的數(shù)字貨幣,主要功能集中在貨幣的發(fā)行和轉(zhuǎn)移。比特幣的關(guān)鍵技術(shù)是使用一種全新的分布式記賬方式實(shí)現(xiàn)交易過程的去中心化。2009年,比特幣作為開源軟件發(fā)布,之后基于比特幣平臺(tái),直接在區(qū)塊鏈賬本內(nèi)部或利用分叉機(jī)制來創(chuàng)建新的代幣。

    2011年推出的菜特幣(Litecoin,LTC)與比特幣具有相同的技術(shù)原理,但在交易確認(rèn)、對硬件性能的依賴等方面都較比特幣有了更大的改進(jìn),性能得到提升;瑞波幣(XRP)是Ripple網(wǎng)絡(luò)中唯一的通用貨幣,而Ripple是開源P2P網(wǎng)絡(luò),基于共享數(shù)據(jù)庫(數(shù)據(jù)庫中記錄著賬戶和余額信息)和一致性賬本技術(shù)的全球支付網(wǎng)絡(luò),可實(shí)現(xiàn)任意貨幣(法幣和數(shù)字貨幣)之間的結(jié)算,具有較大的應(yīng)用價(jià)值和發(fā)展?jié)摿?。例如,利用Ripple網(wǎng)絡(luò),甲方可以用美元直接實(shí)現(xiàn)與乙方歐元之間的結(jié)算,結(jié)算過程中使用XRP支付手續(xù)費(fèi)。嚴(yán)格地講,Ripple是一種允許各方使用任意一種貨幣進(jìn)行支付的互聯(lián)網(wǎng)交易協(xié)議,XRP雖然也是一種數(shù)字貨幣,但其主要功能是協(xié)助Ripple支付網(wǎng)絡(luò)中貨幣的流通;達(dá)世幣(DASH)是在比特幣基礎(chǔ)上開發(fā)的具有良好的匿名性和去中心化特征、以保護(hù)用戶隱私為目的的數(shù)字貨幣,與比特幣相比,達(dá)世幣的交易速度有了較大提升;未來幣(Nextcoin,NXT)采用PoS共識(shí)機(jī)制,是全新設(shè)計(jì)和開發(fā)的第二代虛擬貨幣。未來幣使用“透明鍛造”方式產(chǎn)生新的區(qū)塊,即通過賬戶的現(xiàn)有余額去“鍛造”新區(qū)塊,并給予新區(qū)塊的“鍛造者”獎(jiǎng)勵(lì)一定的交易費(fèi)用。對于惡意鍛造者其賬戶將被清零,以此作為懲罰。

    6.1.2 基于區(qū)塊鏈2.0的智能合約

    基于區(qū)塊鏈2.0的智能合約主導(dǎo)的去中心化應(yīng)用,雖然豐富了區(qū)塊鏈的應(yīng)用場景,但整體上仍然延續(xù)了比特幣在數(shù)字貨幣上的優(yōu)勢和應(yīng)用慣性。區(qū)塊鏈的本質(zhì)是由多方共同維護(hù)的分布式數(shù)據(jù)庫,如果數(shù)據(jù)庫中記錄的是用戶的交易數(shù)據(jù),則這個(gè)數(shù)據(jù)庫就是一個(gè)分布式賬本;如果記錄的內(nèi)容更加復(fù)雜(如學(xué)生學(xué)籍、公民身份證、護(hù)照等信息,或物聯(lián)網(wǎng)中智能節(jié)點(diǎn)產(chǎn)生的感知數(shù)據(jù)等),則該數(shù)據(jù)庫將會(huì)應(yīng)用于更加廣泛的場景,如學(xué)生學(xué)籍管理、公民身份信息管理、醫(yī)療信息管理、物聯(lián)網(wǎng)應(yīng)用等;如果能夠?qū)⒂涗浀絽^(qū)塊鏈中的內(nèi)容從靜態(tài)數(shù)據(jù)擴(kuò)展為可執(zhí)行代碼,并允許存在“if…then…”和“what…if…”循環(huán)判斷語句,則可以通過預(yù)置合約條款的相應(yīng)觸發(fā)場景和判斷規(guī)則,使區(qū)塊鏈能夠處理涉及復(fù)雜邏輯的交易過程,即實(shí)現(xiàn)智能合約。

    以以太坊為代表的區(qū)塊鏈2.0實(shí)現(xiàn)了智能合約功能,智能合約是一類以合約為交易數(shù)據(jù)的分布式數(shù)據(jù)庫,被代碼化的合約記錄在區(qū)塊鏈中,用戶以發(fā)起交易的方式來觸發(fā)合約狀態(tài)的改變,當(dāng)合約條款的觸發(fā)條件滿足時(shí),預(yù)置的代碼邏輯將自動(dòng)執(zhí)行,并將執(zhí)行結(jié)果打包后保存在區(qū)塊中,且經(jīng)共識(shí)機(jī)制驗(yàn)證后將不能更改。

    以太坊是以交易為對象的狀態(tài)轉(zhuǎn)移系統(tǒng)。以太坊賬本中同時(shí)記錄著交易數(shù)據(jù)和全局狀態(tài)(world state)數(shù)據(jù)。其中,全局狀態(tài)是以太坊賬本當(dāng)前的狀態(tài),賬本中不僅記錄了余額,還有合約的數(shù)據(jù)。以太坊的賬戶分為外部賬戶和合約賬戶兩種類型,兩者的狀態(tài)變化都通過具體的交易觸發(fā),通常情況下,當(dāng)一筆交易觸發(fā)了外部賬戶時(shí),將會(huì)使賬戶的余額發(fā)生變化,當(dāng)一筆交易觸發(fā)的是合約賬戶時(shí),則會(huì)產(chǎn)生代碼的執(zhí)行。任何一類賬戶狀態(tài)的變化,都需要在經(jīng)過節(jié)點(diǎn)驗(yàn)證后才能夠被記錄。其中,外部賬戶狀態(tài)的變化需要節(jié)點(diǎn)對交易進(jìn)行驗(yàn)證,而合約賬戶狀態(tài)的變化需要節(jié)點(diǎn)在EVM上進(jìn)行驗(yàn)證。合約賬戶的存在,使區(qū)塊鏈應(yīng)用從貨幣領(lǐng)域向金融、管理、物聯(lián)網(wǎng)等領(lǐng)域拓展。如果將區(qū)塊鏈看作是通信子網(wǎng),那么智能合約則是接入網(wǎng)絡(luò)的主機(jī),互聯(lián)網(wǎng)應(yīng)用的多樣性和內(nèi)容的豐富性由主機(jī)上運(yùn)行的不同程序決定。同樣,基于以太坊平臺(tái),可以通過智能合約開發(fā)各類去中心化應(yīng)用,解決不同場景中的應(yīng)用需求。

    超級(jí)賬本是為了解決以太坊在安全性和性能方面存在的不足,使區(qū)塊鏈滿足商業(yè)應(yīng)用的需求而建立的開源規(guī)范和標(biāo)準(zhǔn)。超級(jí)賬本中的智能合約通過構(gòu)建聯(lián)盟鏈為參與合作方建立一個(gè)透明、公開、半中心化的開發(fā)平臺(tái)。聯(lián)盟鏈中的典型代表Hyperledger Fabric由身份認(rèn)證服務(wù)、賬本服務(wù)和合約鏈碼服務(wù)3個(gè)核心組件構(gòu)成[44],其中身份認(rèn)證服務(wù)提供對區(qū)塊鏈網(wǎng)絡(luò)接入節(jié)點(diǎn)和用戶的認(rèn)證,賬本服務(wù)主要為交易數(shù)據(jù)的存儲(chǔ)、賬本及全局狀態(tài)數(shù)據(jù)的更新等提供服務(wù),合約鏈碼服務(wù)作為賬本服務(wù)的擴(kuò)展,以Docker容器方式為運(yùn)行復(fù)雜應(yīng)用業(yè)務(wù)邏輯提供服務(wù)。

    6.1.3 基于區(qū)塊鏈3.0的EOS

    雖然以太坊和超級(jí)賬本通過增加智能合約層實(shí)現(xiàn)了區(qū)塊鏈技術(shù)在復(fù)雜場景中的應(yīng)用,但以太坊平臺(tái)只能在并發(fā)訪問數(shù)有限的環(huán)境中實(shí)現(xiàn)運(yùn)行功能相對單一的智能合約,超級(jí)賬本對復(fù)雜合約的運(yùn)行也有限。

    企業(yè)操作系統(tǒng)(EOS)[45]是專門為區(qū)塊鏈應(yīng)用開發(fā)的一款操作系統(tǒng),具體在合約層下方創(chuàng)建一個(gè)功能等同于計(jì)算機(jī)操作系統(tǒng)的功能層,為企業(yè)用戶開發(fā)更多基于區(qū)塊鏈智能合約的應(yīng)用場景,以實(shí)現(xiàn)更加復(fù)雜的去中心化應(yīng)用(DApp)[46]提供操作系統(tǒng)級(jí)的支撐和服務(wù)。DApp基于區(qū)塊鏈技術(shù),將程序代碼和運(yùn)行結(jié)果全部保存在區(qū)塊中,保證了程序運(yùn)行的可靠性和數(shù)據(jù)的可信性,因此DApp可以看作是智能合約應(yīng)用功能的擴(kuò)展。在EOS中將參與挖礦的節(jié)點(diǎn)資源用來部署DApp,采用DPoS共識(shí)機(jī)制,通過見證人生成新區(qū)塊。

    DApp的出現(xiàn),可以使開發(fā)者在開發(fā)區(qū)塊鏈應(yīng)用程序時(shí),不需要像以太坊、超級(jí)賬本那樣還要關(guān)注底層的區(qū)塊鏈技術(shù),而是專注于構(gòu)建能夠運(yùn)行在區(qū)塊鏈上的DApp應(yīng)用程序的開發(fā)上,DApp與區(qū)塊鏈之間的信息交互由EOS負(fù)責(zé)完成。

    6.2 區(qū)塊鏈的功能擴(kuò)展

    區(qū)塊鏈技術(shù)在持續(xù)揚(yáng)棄中不斷發(fā)展,實(shí)現(xiàn)了以需求為導(dǎo)向的應(yīng)用創(chuàng)新。例如,針對PoW共識(shí)被詬病的能源浪費(fèi)問題,適時(shí)提出了PoS、DPoS、PBFT等一系列共識(shí)機(jī)制,在能耗、出塊速度、一致性、安全性、是否存在代幣等方面提供了差異化的服務(wù)功能,以滿足不同應(yīng)用場景的需求。再如,在可擴(kuò)展性方面,區(qū)塊鏈技術(shù)為了應(yīng)對全網(wǎng)所有節(jié)點(diǎn)使用完全相同的交易數(shù)據(jù)帶來的效率和安全問題,在以太坊中提出了分片(sharding)[47]技術(shù),在Hyperledger Fabric1.0中應(yīng)用了多通道(multichannel)[48]解決方案。

    6.2.1 分片技術(shù)

    分片技術(shù)基于以太坊賬戶地址,將全網(wǎng)劃分成多個(gè)地址域,每個(gè)相對獨(dú)立的地址域稱為一個(gè)分片,每個(gè)分片中維護(hù)著一條獨(dú)立的子鏈。位于分片中的節(jié)點(diǎn)(一個(gè)節(jié)點(diǎn)可同時(shí)加入多個(gè)分片)在該分片內(nèi)進(jìn)行交易,并存儲(chǔ)該分片中的交易數(shù)據(jù)。當(dāng)需要訪問的交易數(shù)據(jù)不在本分片內(nèi)時(shí),可以通過輕客戶端技術(shù)從位于其他分片的節(jié)點(diǎn)上讀取。

    利用分片技術(shù),單一節(jié)點(diǎn)不需要存儲(chǔ)和處理全網(wǎng)的交易數(shù)據(jù),同時(shí)整個(gè)區(qū)塊鏈的處理能力不會(huì)受限于某一節(jié)點(diǎn)的計(jì)算能力[49]。

    6.2.2 多通道技術(shù)

    多通道技術(shù)基于交易規(guī)則,將整個(gè)區(qū)塊鏈網(wǎng)絡(luò)劃分成為多個(gè)通道(一個(gè)節(jié)點(diǎn)可以同時(shí)加入多個(gè)通道,如圖10所示),每個(gè)通道與關(guān)聯(lián)的配置和數(shù)據(jù)(包括交易、賬本、chaincode及成員身份等)共同構(gòu)成一條完整的邏輯上的子鏈,每個(gè)節(jié)點(diǎn)可同時(shí)在多條子鏈上參與共識(shí),每條子鏈上的交易具有獨(dú)立性。

    多通道機(jī)制將原來的單鏈結(jié)構(gòu)演化成為多鏈(multi-chain)模式,不同的應(yīng)用可根據(jù)需要生成不同的子鏈,不同的交易在各自不同的子鏈上并行處理,子鏈所在的通道之間相互隔離,避免了單鏈結(jié)構(gòu)中處理能力存在的木桶效應(yīng)。

    6.3 區(qū)塊鏈存在的挑戰(zhàn)

    Fig.10 Multichannel mechanism of Hyperledger Fabric圖10 Hyperledger Fabric的多通道機(jī)制

    區(qū)塊鏈給社會(huì)發(fā)展的貢獻(xiàn)不僅僅是技術(shù)方面,更在于人們對傳統(tǒng)社會(huì)管理在理念的轉(zhuǎn)變和方法的創(chuàng)新。僅就技術(shù)層面來講,區(qū)塊鏈雖然在近年來得到了迅猛發(fā)展,但與整個(gè)社會(huì)發(fā)展的預(yù)期之間仍然存在著較大距離??蓮牟煌囊暯欠治鰠^(qū)塊鏈存在的問題和挑戰(zhàn),得出不同的結(jié)論。因本文主要基于體系結(jié)構(gòu)和實(shí)現(xiàn)協(xié)議來分析區(qū)塊鏈系統(tǒng)的基礎(chǔ)架構(gòu),所以選擇了與之直接關(guān)聯(lián)的安全、隱私、漏洞和效率進(jìn)行分析。需要說明的是:漏洞屬于安全的范疇,但由于區(qū)塊鏈技術(shù)發(fā)展迅速,應(yīng)用場景豐富,對社會(huì)各領(lǐng)域產(chǎn)生的創(chuàng)新和變革力度大,系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)中有意預(yù)設(shè)和無意留下的漏洞成為攻擊者尋找的目標(biāo)和可利用的資源,借助各類安全漏洞的攻擊威脅日益突出。為此,本節(jié)將漏洞單列出來進(jìn)行分析。

    6.3.1 安全挑戰(zhàn)

    數(shù)據(jù)冗余不僅是傳統(tǒng)網(wǎng)絡(luò)的安全手段,也是區(qū)塊鏈的安全依賴。作惡節(jié)點(diǎn)如果通過偽造和篡改數(shù)據(jù)對區(qū)塊鏈網(wǎng)絡(luò)實(shí)施攻擊,雖然在理論上是可行的,但實(shí)際上是很難實(shí)現(xiàn)的。然而,區(qū)塊鏈并非一個(gè)物理隔離的系統(tǒng),而是通過相關(guān)協(xié)議、規(guī)范與機(jī)制構(gòu)建在互聯(lián)網(wǎng)上的服務(wù)系統(tǒng),攻擊者將基于互聯(lián)網(wǎng)結(jié)構(gòu)和協(xié)議實(shí)現(xiàn)中存在的漏洞,間接地對區(qū)塊鏈實(shí)施攻擊,或?qū)⒐粜袨檗D(zhuǎn)移到區(qū)塊鏈系統(tǒng),直接破壞區(qū)塊鏈的安全性和穩(wěn)定性。

    區(qū)塊鏈涉及到身份認(rèn)證、共識(shí)機(jī)制、激勵(lì)機(jī)制、智能合約等關(guān)鍵技術(shù),每項(xiàng)技術(shù)又存在自身的實(shí)現(xiàn)細(xì)節(jié),如此復(fù)雜的結(jié)構(gòu)在尚未對安全性進(jìn)行整體評(píng)估的前提下,無論是代碼級(jí)的漏洞,還是系統(tǒng)配置上的不當(dāng),都潛在著安全隱患和可能發(fā)生的攻擊行為。另外,與認(rèn)證和控制機(jī)制相對完善的C/S結(jié)構(gòu)相比,區(qū)塊鏈采用的P2P網(wǎng)絡(luò)傳輸模式在抵御網(wǎng)絡(luò)入侵和攻擊等方面存在著不足。

    區(qū)塊鏈應(yīng)用具有廣泛性,已涉及到數(shù)字貨幣、金融資產(chǎn)交易結(jié)算、數(shù)字政務(wù)、數(shù)據(jù)服務(wù)等眾多領(lǐng)域,然而受技術(shù)和制度(例如,有些國家不承認(rèn)數(shù)字貨幣的合法性)影響,在對區(qū)塊鏈系統(tǒng)攻擊行為的追責(zé)和取證等方面存在著困難。為此,由于區(qū)塊鏈具有的不可篡改性,攻擊者借助制度和技術(shù)上的漏洞一旦成功實(shí)施了攻擊,其損失將無法挽回。例如,2016年發(fā)生的The DAO事件,攻擊者利用智能合約存在的重大缺陷對以太坊成功實(shí)施了攻擊,最終迫使以太坊分成兩條鏈(硬分叉),一條為原鏈(即以太坊經(jīng)典(Ethereum classic,ETC)),另一條為新的分叉鏈(即ETH,Ethereum的簡稱)。

    SHA256算法和P2P協(xié)議是區(qū)塊鏈系統(tǒng)中最基本的技術(shù)支撐和功能保障。由于SHA256算法在各類安全應(yīng)用中扮演著重要的角色,因此針對SHA256散列吞吐量的提高成為散列算法一個(gè)研究方向[50]。用戶為了獲得更大利益,出現(xiàn)了針對SHA256算法的專用集成電路(application specific integrated circuit,ASIC)礦機(jī)和礦池,嚴(yán)重破壞了比特幣等加密數(shù)字貨幣的正常運(yùn)行機(jī)制,并使51%攻擊難度變小。針對此類問題,設(shè)計(jì)并應(yīng)用不利于并行計(jì)算的SHA256成為當(dāng)務(wù)之急。目前,應(yīng)用于萊特幣的scrypt算法和達(dá)世幣的X11算法通過增加內(nèi)存消耗來提高ASIC開發(fā)的難度,可有效解決這一問題。

    由于P2P網(wǎng)絡(luò)沒有提供身份認(rèn)證、數(shù)據(jù)驗(yàn)證等安全機(jī)制,攻擊者可以通過采用廣播非法內(nèi)容、傳播惡意代碼、實(shí)施DDoS攻擊等手段,使信息傳輸延時(shí),進(jìn)而導(dǎo)致區(qū)塊鏈產(chǎn)生分叉[51],或通過控制區(qū)塊鏈節(jié)點(diǎn)的挖礦來實(shí)現(xiàn)自身利益的最大化[52]。處理P2P網(wǎng)絡(luò)的安全問題是一個(gè)系統(tǒng)工程。針對公有鏈網(wǎng)絡(luò),F(xiàn)adhil等[53]通過創(chuàng)建超級(jí)節(jié)點(diǎn)來降低網(wǎng)絡(luò)的波動(dòng),以此來保證區(qū)塊鏈節(jié)點(diǎn)免受外部因素的影響,并利用比特幣網(wǎng)絡(luò)的真實(shí)測量數(shù)據(jù)對提出的基于事件仿真的網(wǎng)絡(luò)模型的有效性進(jìn)行了驗(yàn)證;針對聯(lián)盟鏈應(yīng)用,Henry等[54]利用洋蔥路由(the onion router,Tor)技術(shù),在實(shí)現(xiàn)對接入節(jié)點(diǎn)身份的合法性進(jìn)行有效驗(yàn)證的同時(shí),通過節(jié)點(diǎn)之間的層層加密機(jī)制來保護(hù)數(shù)據(jù)的安全性及節(jié)點(diǎn)身份信息的匿名性。

    6.3.2 隱私挑戰(zhàn)

    隱私即與用戶相關(guān)但不愿公開的信息。區(qū)塊鏈中的隱私信息主要包括用戶身份信息和交易信息。其中,用戶身份信息涉及到區(qū)塊鏈中用戶的公鑰、所在節(jié)點(diǎn)的物理地址(MAC地址)和邏輯地址(IP地址)等內(nèi)容,這些信息是公開的,即使是通過網(wǎng)絡(luò)監(jiān)聽、流量分析等手段得到了詳細(xì)的信息,但由于它們之間不存在相關(guān)性,因此無法通過信息之間的關(guān)聯(lián)得知用戶的隱私;比特幣中的交易金額、交易內(nèi)容、輸入/輸出地址等都屬于交易信息,這些信息都是通過加密技術(shù)受保護(hù)的。另外,為了加強(qiáng)區(qū)塊鏈的隱私保護(hù),還采用了混幣原理(CoinJoin)[55]、環(huán)簽名[56]、同態(tài)加密[57]、零知識(shí)證明等安全措施。

    然而,區(qū)塊鏈(公有鏈)中節(jié)點(diǎn)的加入和離開是不受限制的,也無需身份驗(yàn)證。再加上每個(gè)節(jié)點(diǎn)都可以獲得完整的數(shù)據(jù)備份,雖然通過隔斷交易信息之間的關(guān)聯(lián)來達(dá)到匿名目的,但這樣的保護(hù)效果是有限的,攻擊者通過觀察和跟蹤區(qū)塊鏈的信息,通過節(jié)點(diǎn)的MAC地址、IP地址和用戶的公鑰等信息,還是可以追蹤到賬戶和交易之間的關(guān)聯(lián)性,并通過數(shù)據(jù)分析窺探用戶的隱私。同時(shí),在大數(shù)據(jù)和人工智能技術(shù)的輔助下,現(xiàn)有區(qū)塊鏈中采取的隱私保護(hù)機(jī)制存在的脆弱性也逐漸暴露出來。再加上量子計(jì)算在信息安全中的應(yīng)用,傳統(tǒng)密碼技術(shù)的安全性也受到了威脅。因此,加強(qiáng)區(qū)塊鏈隱私的保護(hù),需要不斷地更新已有技術(shù)和完善相關(guān)的機(jī)制(如共識(shí)機(jī)制、激勵(lì)機(jī)制等)。

    在區(qū)塊鏈隱私保護(hù)研究方面,祝烈煌等人[58]基于分層思想,從網(wǎng)絡(luò)層、交易層和應(yīng)用層分別提出了區(qū)塊鏈隱私保護(hù)面臨的主要威脅和相應(yīng)的保護(hù)方法;張奧和白曉穎[59]對區(qū)塊鏈隱私保護(hù)進(jìn)行了綜述,將隱私劃分為交易內(nèi)容隱私、賬戶地址隱私、用戶身份隱私、節(jié)點(diǎn)隱私和通信隱私5類,給出了相應(yīng)的隱私保護(hù)內(nèi)容和隱私威脅攻擊方式,并結(jié)合應(yīng)用分析了相關(guān)的隱私保護(hù)技術(shù);針對交易隱私威脅,閃電網(wǎng)絡(luò)(lightning network)[60]通過在用戶之間提供“外鏈”快速支付通道,將大量交易放在區(qū)塊鏈之外結(jié)算和存儲(chǔ),以此來隱藏不在線用戶之間的交易關(guān)系,達(dá)到對交易隱私進(jìn)行保護(hù)的目的;針對用戶身份隱私威脅,基于大蒜路由的I2P(invisible Internet project)網(wǎng)絡(luò)[61]通過不斷更新本地Net DB發(fā)現(xiàn)節(jié)點(diǎn),來取代Tor網(wǎng)絡(luò)中用目錄服務(wù)器來管理節(jié)點(diǎn)的方法,同時(shí)I2P網(wǎng)絡(luò)中針對同一節(jié)點(diǎn)發(fā)送信息和返回信息分別使用不同的鏈路,保持了流量的單向傳輸,更好地隱藏了節(jié)點(diǎn)的真實(shí)身份信息,可提升區(qū)塊鏈地址的匿名性,增強(qiáng)了用戶身份隱私的安全。

    6.3.3 漏洞挑戰(zhàn)

    任何一個(gè)系統(tǒng)都存在漏洞,區(qū)塊鏈也不例外。漏洞(vulnerability)是信息技術(shù)、產(chǎn)品及系統(tǒng)在需求分析、設(shè)計(jì)開發(fā)及配置等過程中有意或無意產(chǎn)生的缺陷(bug),這些缺陷一旦被利用,將會(huì)對系統(tǒng)造成嚴(yán)重?fù)p害。引起漏洞的因素很多,其中由針對區(qū)塊鏈腳本語言的不嚴(yán)謹(jǐn)性和執(zhí)行機(jī)制的不完善性引起的安全漏洞尤為突出。綜合分析,具體反映在以下幾個(gè)方面[62-63]:

    (1)交易依賴性(transaction ordering dependence,TOD)。智能合約中賬戶狀態(tài)信息的改變由交易觸發(fā)、交易過程的先后次序決定了狀態(tài)改變的過程和結(jié)果。尤其是引起合約賬戶狀態(tài)改變的合約代碼的執(zhí)行,不同的執(zhí)行次序?qū)?huì)產(chǎn)生截然不同或錯(cuò)誤的結(jié)果。這種緊緊依賴交易順序的智能合約容易引起作惡節(jié)點(diǎn)通過偽造交易及執(zhí)行順序來操控合約的執(zhí)行。

    (2)時(shí)間戳依賴(timestamp dependence)。時(shí)間戳是一段完整的、可驗(yàn)證的數(shù)據(jù),它用于證明某一數(shù)據(jù)產(chǎn)生于某一特定的時(shí)間點(diǎn)。區(qū)塊鏈中區(qū)塊的先后順序基于時(shí)間戳來確定,智能合約中一些合約的執(zhí)行需要依賴時(shí)間戳。但受網(wǎng)絡(luò)時(shí)鐘影響,很難使所有節(jié)點(diǎn)的時(shí)鐘都保持高度一致。時(shí)間戳在不同節(jié)點(diǎn)上存在的偏差為攻擊者通過設(shè)置區(qū)塊產(chǎn)生的時(shí)間戳來操控合約執(zhí)行提供了可能的條件。

    (3)可重入性弱點(diǎn)(reentrancy vulnerability)。當(dāng)合約之間存在調(diào)用關(guān)系時(shí),調(diào)用者進(jìn)程會(huì)停下來等待被調(diào)用進(jìn)程結(jié)束后再繼續(xù)執(zhí)行,攻擊者利用調(diào)用進(jìn)程的暫停時(shí)間段重復(fù)調(diào)用合約,實(shí)施可重入攻擊。

    (4)處理異常(mishandled exceptions)。當(dāng)合約之間存在調(diào)用關(guān)系時(shí),如果沒有對被調(diào)用合約的狀態(tài)和調(diào)用結(jié)果的正確性進(jìn)行驗(yàn)證,有意或無意產(chǎn)生的不正確的結(jié)果將會(huì)影響智能合約的執(zhí)行。

    另外,以太坊在交易過程中會(huì)消耗gas,在合約執(zhí)行前首先要計(jì)算賬戶余額是否能夠支付交易所需的gas,如果發(fā)起交易用于觸發(fā)合約執(zhí)行的賬戶余額低于執(zhí)行合約所需的gas,不但合約無法成功執(zhí)行,而且賬戶余額將被清零。攻擊者在獲取了賬戶信息后,可以發(fā)起虛假交易來耗盡賬戶余額。此外,如果攻擊者向合法用戶的合約注入虛假的數(shù)據(jù),用戶也將被迫為這些垃圾數(shù)據(jù)的處理支付費(fèi)用。

    系統(tǒng)漏洞(尤其是可被利用的安全漏洞)的檢測是一個(gè)難題,智能合約更不例外。針對智能合約存在的漏洞,可以借鑒對傳統(tǒng)系統(tǒng)的漏洞檢測方法,發(fā)現(xiàn)并修補(bǔ)合約中存在的引起gas消耗的代碼。其中,智能合約的形式化驗(yàn)證可基于數(shù)學(xué)模型,通過相應(yīng)的分析工具對合約從設(shè)計(jì)、開發(fā)和運(yùn)行進(jìn)行全過程驗(yàn)證,以規(guī)范合約的生成和執(zhí)行,提高合約的可靠性[64]。

    6.3.4 效率挑戰(zhàn)

    影響區(qū)塊鏈效率的因素很多,主要包括廣播機(jī)制、數(shù)據(jù)加解密、交易驗(yàn)證、共識(shí)機(jī)制等,具體可以分為以下幾類:

    (1)共識(shí)機(jī)制。共識(shí)機(jī)制用于在不存在信任的節(jié)點(diǎn)之間達(dá)成共識(shí),確保數(shù)據(jù)的正確性和唯一性。然而,共識(shí)結(jié)果的達(dá)成是需要參與節(jié)點(diǎn)付出代價(jià)的,就像彩票一樣,要想中獎(jiǎng)就需要花錢購買彩票。共識(shí)過程需要消耗算力和時(shí)間,這在很大程度上影響了區(qū)塊鏈的出塊速度。

    (2)交易效率。交易效率由出塊速度來決定,目前比特幣、以太坊和Hyperledger Fabric的出塊速度分別為7 TPS(即每秒處理7筆交易)、25 TPS和2 000 TPS,較低的出塊速度與區(qū)塊鏈系統(tǒng)采用的共識(shí)機(jī)制有關(guān),而在現(xiàn)有的共識(shí)機(jī)制下,較低的出塊速度限制了區(qū)塊鏈在金融行業(yè)等需要快速、小額交易場景中的應(yīng)用。

    (3)確認(rèn)時(shí)間。目前,比特幣的區(qū)塊生成時(shí)間為10 min,由于在連續(xù)產(chǎn)生6個(gè)區(qū)塊之后交易才不可逆,因此其交易確認(rèn)時(shí)間為60 min;以太坊在連續(xù)產(chǎn)生12個(gè)區(qū)塊之后交易不可逆,其交易確認(rèn)時(shí)間為3 min。較長的確認(rèn)時(shí)間限制了區(qū)塊鏈在小額交易和時(shí)效性較強(qiáng)的場景中的應(yīng)用。

    (4)狀態(tài)爆炸。從創(chuàng)世區(qū)塊開始,比特幣所有區(qū)塊的大小從0增長到3 GB用了10年時(shí)間,以太坊從0增長到10 GB用了4年時(shí)間,區(qū)塊鏈歷史和狀態(tài)數(shù)據(jù)的快速增長,呈現(xiàn)狀態(tài)爆炸現(xiàn)象。Archive(歸檔)模式和Default(默認(rèn))模式是以太坊節(jié)點(diǎn)同步數(shù)據(jù)時(shí)采用的兩種模式。其中,在Archive模式下所有歷史數(shù)據(jù)(包括歷史交易和歷史狀態(tài))和當(dāng)前狀態(tài)數(shù)據(jù)都會(huì)保存下來,所有數(shù)據(jù)當(dāng)前約為2 TB;在Default模式下,歷史狀態(tài)數(shù)據(jù)會(huì)被刪除,本地只保留歷史交易和當(dāng)前狀態(tài)數(shù)據(jù),共約170 GB。因?yàn)槊總€(gè)節(jié)點(diǎn)都要保存一份數(shù)據(jù)備份,這對于快速增長的存儲(chǔ)空間要求帶來了挑戰(zhàn)。

    針對區(qū)塊鏈的效率問題,學(xué)者們提出了多種有效的解決方案。例如,Eyal等[65]針對比特幣在區(qū)塊大小、出塊時(shí)間及穩(wěn)定性等方面存在的不足,提出了一種可擴(kuò)展的區(qū)塊鏈協(xié)議,可根據(jù)需要將區(qū)塊分割成微塊和宏塊;Dickerson等[66]針對現(xiàn)行的區(qū)塊鏈系統(tǒng)單位時(shí)間內(nèi)可執(zhí)行的合約數(shù)受限問題,提出了一種允許不同合約在互不沖突的前提下并行執(zhí)行的框架等。

    7 結(jié)束語

    就像智能手機(jī)出現(xiàn)時(shí)那樣,今天的區(qū)塊鏈正在改變著這個(gè)世界。隨著區(qū)塊鏈越來越多地應(yīng)用到不同的場景,區(qū)塊鏈技術(shù)的影響力也將從數(shù)字加密貨幣擴(kuò)展到不同社會(huì)領(lǐng)域,在改變甚至顛覆著越來越多的行業(yè)。區(qū)塊鏈在沒有任何第三方權(quán)威機(jī)構(gòu)介入的情況下,在不存在信任基礎(chǔ)的節(jié)點(diǎn)之間達(dá)成了彼此之間的共識(shí),實(shí)現(xiàn)了去中心化、不可篡改、不可否認(rèn)、可溯源的價(jià)值傳輸,進(jìn)而使其應(yīng)用從數(shù)字加密貨幣迅速擴(kuò)展到整個(gè)社會(huì)系統(tǒng),正在為人類社會(huì)處于的大發(fā)展大變革大調(diào)整的過程注入動(dòng)力。然而,整個(gè)區(qū)塊鏈技術(shù)和應(yīng)用尚處于起步階段,大量涉及到的基礎(chǔ)理論和技術(shù)研究還需要結(jié)合學(xué)科及產(chǎn)業(yè)發(fā)展進(jìn)一步跟進(jìn)。

    猜你喜歡
    智能
    智能與自主
    讓紙變得智能
    一種智能微耕機(jī)的研發(fā)
    智能制造 反思與期望
    智能前沿
    文苑(2018年23期)2018-12-14 01:06:06
    智能前沿
    文苑(2018年19期)2018-11-09 01:30:14
    智能前沿
    文苑(2018年17期)2018-11-09 01:29:26
    智能前沿
    文苑(2018年21期)2018-11-09 01:22:32
    智能制造·AI未來
    商周刊(2018年18期)2018-09-21 09:14:46
    爭渡智能石化
    能源(2018年4期)2018-05-19 01:53:44
    一夜夜www| 精品无人区乱码1区二区| 91久久精品国产一区二区三区| 国产黄a三级三级三级人| 久久婷婷人人爽人人干人人爱| 搡女人真爽免费视频火全软件| 美女国产视频在线观看| 噜噜噜噜噜久久久久久91| 欧美激情在线99| 午夜亚洲福利在线播放| 桃色一区二区三区在线观看| 尤物成人国产欧美一区二区三区| 内射极品少妇av片p| 波野结衣二区三区在线| 精品人妻偷拍中文字幕| 亚洲av成人精品一二三区| 爱豆传媒免费全集在线观看| 亚洲av电影在线观看一区二区三区 | 亚洲乱码一区二区免费版| 最新中文字幕久久久久| 97在线视频观看| 两个人视频免费观看高清| 禁无遮挡网站| 中文字幕亚洲精品专区| 人人妻人人澡人人爽人人夜夜 | 日本黄大片高清| 亚洲中文字幕一区二区三区有码在线看| 亚洲av中文av极速乱| 久久国产乱子免费精品| 国产av不卡久久| 亚洲av电影在线观看一区二区三区 | 国产又色又爽无遮挡免| 人人妻人人澡人人爽人人夜夜 | 亚洲图色成人| 国产成人一区二区在线| 午夜福利网站1000一区二区三区| 国产亚洲5aaaaa淫片| 最新中文字幕久久久久| 噜噜噜噜噜久久久久久91| 高清av免费在线| 观看美女的网站| 午夜福利视频1000在线观看| 特大巨黑吊av在线直播| 亚洲三级黄色毛片| 欧美日本视频| 午夜福利高清视频| 搡女人真爽免费视频火全软件| 亚洲欧洲日产国产| 男插女下体视频免费在线播放| a级毛色黄片| 亚洲图色成人| 国产精品伦人一区二区| 亚洲av不卡在线观看| 国产在视频线在精品| 大香蕉久久网| 国产一区二区三区av在线| 国产成人免费观看mmmm| 久久精品夜夜夜夜夜久久蜜豆| 色综合亚洲欧美另类图片| 99热网站在线观看| 大香蕉97超碰在线| 亚洲不卡免费看| 成人一区二区视频在线观看| 最近中文字幕2019免费版| 国产伦精品一区二区三区视频9| 国产黄a三级三级三级人| 亚洲av一区综合| 亚洲四区av| 91精品国产九色| 国产一区有黄有色的免费视频 | 久久久久久久久久久丰满| 黄色欧美视频在线观看| 亚洲在久久综合| 少妇人妻一区二区三区视频| or卡值多少钱| 在现免费观看毛片| 嘟嘟电影网在线观看| 国产精品电影一区二区三区| 欧美区成人在线视频| 亚洲欧美精品专区久久| 深夜a级毛片| 精品免费久久久久久久清纯| 秋霞在线观看毛片| 一级毛片aaaaaa免费看小| 欧美人与善性xxx| 我的老师免费观看完整版| 国产不卡一卡二| 久久精品综合一区二区三区| 亚洲成人久久爱视频| 高清在线视频一区二区三区 | 91av网一区二区| 一本—道久久a久久精品蜜桃钙片 精品乱码久久久久久99久播 | 中文字幕av在线有码专区| 日本免费在线观看一区| 国内揄拍国产精品人妻在线| 成年女人永久免费观看视频| 成人av在线播放网站| 国产在线一区二区三区精 | 青春草视频在线免费观看| 国产精品女同一区二区软件| 久久精品国产自在天天线| 你懂的网址亚洲精品在线观看 | 亚洲国产精品专区欧美| 亚洲精品乱码久久久久久按摩| 国产高潮美女av| 人妻制服诱惑在线中文字幕| 尾随美女入室| 成人美女网站在线观看视频| 丰满少妇做爰视频| 丝袜美腿在线中文| 欧美色视频一区免费| 亚洲人成网站在线观看播放| 成人毛片a级毛片在线播放| 午夜a级毛片| 一级二级三级毛片免费看| 国产精品久久久久久精品电影小说 | 蜜桃久久精品国产亚洲av| kizo精华| 白带黄色成豆腐渣| 亚洲乱码一区二区免费版| 国产一区二区在线av高清观看| 国产在视频线精品| 99久国产av精品| 国产成人午夜福利电影在线观看| 久久精品人妻少妇| 亚洲av免费在线观看| 免费搜索国产男女视频| 如何舔出高潮| 成人一区二区视频在线观看| 久久99精品国语久久久| 久久久精品欧美日韩精品| 一本一本综合久久| 亚洲在线观看片| 亚洲成色77777| 亚洲国产精品sss在线观看| 欧美一区二区国产精品久久精品| 亚洲欧美清纯卡通| 日韩欧美国产在线观看| 国产欧美日韩精品一区二区| 两个人的视频大全免费| 国产男人的电影天堂91| 桃色一区二区三区在线观看| 亚洲,欧美,日韩| 国产高潮美女av| 日韩欧美三级三区| 91精品伊人久久大香线蕉| 免费看av在线观看网站| 欧美日韩国产亚洲二区| 亚洲精品,欧美精品| 国产av不卡久久| 国产在视频线精品| 中文字幕人妻熟人妻熟丝袜美| 免费看光身美女| 天天躁夜夜躁狠狠久久av| 美女xxoo啪啪120秒动态图| 国产精品蜜桃在线观看| 麻豆成人av视频| 国产女主播在线喷水免费视频网站 | 久久久久久久久久久免费av| 精品人妻偷拍中文字幕| 噜噜噜噜噜久久久久久91| 久久久国产成人免费| 又爽又黄a免费视频| 欧美激情国产日韩精品一区| 日韩欧美精品v在线| 九色成人免费人妻av| 1024手机看黄色片| 午夜精品一区二区三区免费看| .国产精品久久| 久久99精品国语久久久| 中文字幕熟女人妻在线| 1024手机看黄色片| 赤兔流量卡办理| 久久精品人妻少妇| 欧美性猛交╳xxx乱大交人| 国产美女午夜福利| 国产伦在线观看视频一区| 人妻夜夜爽99麻豆av| 国产男人的电影天堂91| 麻豆成人午夜福利视频| 中文字幕av在线有码专区| 国产成人精品久久久久久| 亚洲精品色激情综合| 丝袜美腿在线中文| 精品99又大又爽又粗少妇毛片| 国产午夜精品论理片| 日韩欧美 国产精品| 99热网站在线观看| 欧美成人一区二区免费高清观看| 亚洲av不卡在线观看| 国产伦一二天堂av在线观看| 91aial.com中文字幕在线观看| 中国国产av一级| 午夜爱爱视频在线播放| 国产激情偷乱视频一区二区| 免费看a级黄色片| 国产黄片视频在线免费观看| 亚洲美女搞黄在线观看| .国产精品久久| 色综合亚洲欧美另类图片| 少妇人妻精品综合一区二区| 成人亚洲欧美一区二区av| 国产精品久久久久久精品电影| 国产成人a∨麻豆精品| 尤物成人国产欧美一区二区三区| 女人久久www免费人成看片 | 欧美3d第一页| 亚洲国产高清在线一区二区三| 亚洲av男天堂| 午夜免费激情av| 中文字幕精品亚洲无线码一区| 看十八女毛片水多多多| 在线观看一区二区三区| 日日摸夜夜添夜夜爱| 又爽又黄无遮挡网站| 精品久久久久久久人妻蜜臀av| 国产三级中文精品| 九九热线精品视视频播放| 麻豆乱淫一区二区| 亚洲国产日韩欧美精品在线观看| 久久婷婷人人爽人人干人人爱| 日韩欧美精品免费久久| 日韩视频在线欧美| 在线天堂最新版资源| 欧美一区二区国产精品久久精品| 国产精品国产三级国产专区5o | 久久99蜜桃精品久久| 久久午夜福利片| 极品教师在线视频| 又粗又爽又猛毛片免费看| 亚洲欧洲日产国产| videos熟女内射| 永久网站在线| 亚洲最大成人av| 又爽又黄无遮挡网站| 人妻制服诱惑在线中文字幕| 日韩欧美三级三区| 国产精品嫩草影院av在线观看| 日韩一区二区视频免费看| 久久久午夜欧美精品| 99九九线精品视频在线观看视频| 精品99又大又爽又粗少妇毛片| 在线a可以看的网站| 日韩制服骚丝袜av| 午夜老司机福利剧场| 美女高潮的动态| av在线亚洲专区| 国产午夜福利久久久久久| 国产高清视频在线观看网站| 国产麻豆成人av免费视频| 精品久久久噜噜| 91午夜精品亚洲一区二区三区| av卡一久久| 国产又色又爽无遮挡免| 午夜a级毛片| 国产在视频线精品| 免费av观看视频| 亚洲精品久久久久久婷婷小说 | 欧美性猛交黑人性爽| 亚洲av熟女| 中文字幕免费在线视频6| 精品不卡国产一区二区三区| 亚洲精品色激情综合| 欧美另类亚洲清纯唯美| 亚洲av中文字字幕乱码综合| 九九在线视频观看精品| 一本—道久久a久久精品蜜桃钙片 精品乱码久久久久久99久播 | 老司机福利观看| 免费av观看视频| 人人妻人人澡欧美一区二区| 国产黄色小视频在线观看| 精品久久久久久成人av| 插逼视频在线观看| 国产黄a三级三级三级人| 最近2019中文字幕mv第一页| 亚洲在久久综合| 少妇被粗大猛烈的视频| 97热精品久久久久久| 十八禁国产超污无遮挡网站| ponron亚洲| or卡值多少钱| 午夜精品国产一区二区电影 | 欧美一区二区亚洲| 99久国产av精品| 国产黄片美女视频| 久久久久久伊人网av| 一本久久精品| 国产午夜精品一二区理论片| 国产 一区精品| 少妇猛男粗大的猛烈进出视频 | 国产精品国产三级专区第一集| 嫩草影院精品99| a级毛色黄片| 亚洲人成网站高清观看| 五月玫瑰六月丁香| 人妻系列 视频| 网址你懂的国产日韩在线| 欧美日本亚洲视频在线播放| 国产男人的电影天堂91| 国产中年淑女户外野战色| 成人综合一区亚洲| 日本熟妇午夜| 爱豆传媒免费全集在线观看| 亚洲国产精品成人久久小说| 亚洲av中文字字幕乱码综合| 九九久久精品国产亚洲av麻豆| 97热精品久久久久久| 国产精品野战在线观看| 亚洲成人精品中文字幕电影| 日日摸夜夜添夜夜爱| 级片在线观看| 亚洲av中文av极速乱| 听说在线观看完整版免费高清| 男插女下体视频免费在线播放| 午夜福利成人在线免费观看| 国产色婷婷99| 亚洲国产日韩欧美精品在线观看| 精品熟女少妇av免费看| 日韩精品青青久久久久久| 男女下面进入的视频免费午夜| 亚洲国产欧美人成| 性色avwww在线观看| 国产精品电影一区二区三区| 国产精品国产三级专区第一集| 欧美zozozo另类| 亚洲怡红院男人天堂| 天堂√8在线中文| 国产精品一二三区在线看| 免费无遮挡裸体视频| 亚洲精品色激情综合| 秋霞在线观看毛片| 欧美最新免费一区二区三区| 色哟哟·www| 国产乱来视频区| 看十八女毛片水多多多| 亚洲av免费在线观看| 一个人观看的视频www高清免费观看| 国产又黄又爽又无遮挡在线| 国内少妇人妻偷人精品xxx网站| 一级毛片久久久久久久久女| 级片在线观看| 婷婷色麻豆天堂久久 | 久久人妻av系列| 亚洲av日韩在线播放| 国产黄a三级三级三级人| 欧美丝袜亚洲另类| 国产伦一二天堂av在线观看| 最新中文字幕久久久久| 中文乱码字字幕精品一区二区三区 | 色视频www国产| 国产精品一区二区三区四区免费观看| 精品久久久久久久久av| 又爽又黄无遮挡网站| 精品不卡国产一区二区三区| 一级二级三级毛片免费看| 亚洲精品一区蜜桃| 22中文网久久字幕| 一夜夜www| 青春草视频在线免费观看| 午夜福利网站1000一区二区三区| 中文精品一卡2卡3卡4更新| 非洲黑人性xxxx精品又粗又长| 女人久久www免费人成看片 | 久久精品国产99精品国产亚洲性色| 亚洲色图av天堂| 亚洲国产欧洲综合997久久,| 干丝袜人妻中文字幕| 国产高清不卡午夜福利| 综合色av麻豆| 别揉我奶头 嗯啊视频| 日韩欧美 国产精品| 日本av手机在线免费观看| 国产综合懂色| 免费看a级黄色片| 国产亚洲精品久久久com| 国产激情偷乱视频一区二区| 久久精品久久久久久噜噜老黄 | 波多野结衣高清无吗| 一区二区三区四区激情视频| 青春草视频在线免费观看| 黄片无遮挡物在线观看| 午夜免费激情av| 亚洲国产日韩欧美精品在线观看| 亚洲av.av天堂| 超碰97精品在线观看| 99视频精品全部免费 在线| 91久久精品国产一区二区三区| 99久久人妻综合| 亚洲精品aⅴ在线观看| 日韩成人av中文字幕在线观看| 久久人人爽人人片av| 最近中文字幕2019免费版| 91久久精品国产一区二区三区| 内地一区二区视频在线| 日韩人妻高清精品专区| 卡戴珊不雅视频在线播放| 亚洲丝袜综合中文字幕| 日韩中字成人| 久久99热6这里只有精品| 国内精品美女久久久久久| 国产精品爽爽va在线观看网站| 久久这里有精品视频免费| 男女国产视频网站| 色5月婷婷丁香| 我要搜黄色片| 黄色一级大片看看| 国产精品久久视频播放| 国产免费福利视频在线观看| 少妇人妻精品综合一区二区| 久久国产乱子免费精品| 亚洲美女搞黄在线观看| 日韩三级伦理在线观看| 欧美变态另类bdsm刘玥| 国产亚洲最大av| 观看免费一级毛片| 日韩欧美精品v在线| 水蜜桃什么品种好| 你懂的网址亚洲精品在线观看 | 99久国产av精品| eeuss影院久久| 最近2019中文字幕mv第一页| 插逼视频在线观看| 一区二区三区四区激情视频| 欧美日本视频| 国产成人福利小说| 九九爱精品视频在线观看| 久久久午夜欧美精品| 禁无遮挡网站| 两性午夜刺激爽爽歪歪视频在线观看| 丰满乱子伦码专区| 亚洲国产精品国产精品| 日韩欧美 国产精品| 卡戴珊不雅视频在线播放| 尾随美女入室| 91久久精品国产一区二区成人| 亚洲在久久综合| 一级毛片电影观看 | 欧美日本亚洲视频在线播放| 春色校园在线视频观看| av福利片在线观看| 两个人视频免费观看高清| 中国美白少妇内射xxxbb| 国产精品av视频在线免费观看| 秋霞在线观看毛片| 亚洲成人中文字幕在线播放| 一级黄片播放器| 身体一侧抽搐| 国模一区二区三区四区视频| 亚洲,欧美,日韩| 91久久精品国产一区二区三区| 国产色爽女视频免费观看| 亚洲欧洲日产国产| 国产探花在线观看一区二区| 国产精品,欧美在线| 欧美潮喷喷水| av又黄又爽大尺度在线免费看 | .国产精品久久| 九九热线精品视视频播放| 少妇的逼水好多| 国产精品国产三级国产av玫瑰| 亚洲av免费高清在线观看| 日韩一区二区视频免费看| 亚洲伊人久久精品综合 | av线在线观看网站| 天堂中文最新版在线下载 | 午夜福利成人在线免费观看| 2021天堂中文幕一二区在线观| 亚洲最大成人av| 十八禁国产超污无遮挡网站| 我的女老师完整版在线观看| 欧美成人午夜免费资源| 亚洲成人精品中文字幕电影| 国产精品国产三级国产专区5o | av又黄又爽大尺度在线免费看 | 欧美日韩国产亚洲二区| 九九热线精品视视频播放| 欧美一级a爱片免费观看看| 精品一区二区免费观看| 成人亚洲精品av一区二区| 亚洲成人精品中文字幕电影| 麻豆av噜噜一区二区三区| 欧美日韩精品成人综合77777| 久久草成人影院| 国产亚洲5aaaaa淫片| 两个人视频免费观看高清| 精品久久久久久久人妻蜜臀av| 亚洲国产欧美在线一区| 丝袜喷水一区| 日日撸夜夜添| 高清在线视频一区二区三区 | 亚州av有码| 国产在线一区二区三区精 | 国产精品爽爽va在线观看网站| av专区在线播放| 99热网站在线观看| 又爽又黄a免费视频| 精品久久久久久电影网 | 在线天堂最新版资源| 嫩草影院入口| 国产精品.久久久| 搡老妇女老女人老熟妇| 91狼人影院| 国产精品日韩av在线免费观看| 中文字幕久久专区| www.色视频.com| 亚洲av不卡在线观看| 国产一区二区三区av在线| 秋霞在线观看毛片| 日产精品乱码卡一卡2卡三| 亚洲国产精品成人久久小说| 国产成人精品久久久久久| 久久午夜福利片| 伦理电影大哥的女人| 在线观看美女被高潮喷水网站| 亚洲精华国产精华液的使用体验| 国产三级中文精品| 亚洲aⅴ乱码一区二区在线播放| 91精品一卡2卡3卡4卡| 高清av免费在线| 黄色欧美视频在线观看| 五月玫瑰六月丁香| 真实男女啪啪啪动态图| 日韩三级伦理在线观看| 久久久久久久国产电影| 欧美三级亚洲精品| 精品久久久久久久末码| 欧美不卡视频在线免费观看| 亚洲aⅴ乱码一区二区在线播放| 欧美不卡视频在线免费观看| 精品免费久久久久久久清纯| 国产亚洲精品av在线| 男女国产视频网站| 在线a可以看的网站| 日韩高清综合在线| 国产精品1区2区在线观看.| 成人午夜高清在线视频| 伊人久久精品亚洲午夜| www.色视频.com| 亚洲欧美精品综合久久99| 久久国产乱子免费精品| 婷婷色av中文字幕| 91午夜精品亚洲一区二区三区| 少妇人妻精品综合一区二区| 黄片无遮挡物在线观看| 久久久久久久亚洲中文字幕| 搡女人真爽免费视频火全软件| 国产在线一区二区三区精 | a级毛片免费高清观看在线播放| 国产精品野战在线观看| 日韩强制内射视频| 亚洲无线观看免费| 我要看日韩黄色一级片| 国产午夜精品论理片| 嫩草影院新地址| 白带黄色成豆腐渣| 亚洲高清免费不卡视频| 你懂的网址亚洲精品在线观看 | 91狼人影院| 久久久精品欧美日韩精品| 亚洲精华国产精华液的使用体验| 国产成人91sexporn| 国产亚洲一区二区精品| 亚洲av中文av极速乱| 国产精品国产三级国产专区5o | 国产精品女同一区二区软件| 久久久久免费精品人妻一区二区| 2021少妇久久久久久久久久久| 日本免费在线观看一区| 欧美性猛交╳xxx乱大交人| 少妇的逼水好多| 免费看美女性在线毛片视频| 97超碰精品成人国产| 美女xxoo啪啪120秒动态图| 搞女人的毛片| 久久6这里有精品| 国产精品乱码一区二三区的特点| 欧美激情在线99| 国产白丝娇喘喷水9色精品| 18禁裸乳无遮挡免费网站照片| 欧美日本亚洲视频在线播放| 欧美3d第一页| 日韩欧美精品v在线| 十八禁国产超污无遮挡网站| 岛国在线免费视频观看| 亚洲精品亚洲一区二区| 尤物成人国产欧美一区二区三区| 亚洲av一区综合| 一区二区三区高清视频在线| 蜜桃久久精品国产亚洲av| 久久久精品欧美日韩精品| 国产极品精品免费视频能看的| 国产精品久久久久久久久免| 变态另类丝袜制服| 国产黄片美女视频| 日本黄色片子视频| 免费看a级黄色片| 亚洲三级黄色毛片| 精品久久久久久久末码| 中文欧美无线码| 最近最新中文字幕大全电影3| 91在线精品国自产拍蜜月| 久久久久久九九精品二区国产| av黄色大香蕉| 超碰av人人做人人爽久久| av在线蜜桃| 欧美成人午夜免费资源| 久久综合国产亚洲精品| 91久久精品电影网| 日韩欧美国产在线观看| 91在线精品国自产拍蜜月| 波多野结衣高清无吗| 久久久精品大字幕| 日韩av在线大香蕉| av在线观看视频网站免费| 联通29元200g的流量卡|