亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于智能合約的以太坊可信存證機制

        2019-08-01 01:54:12曹迪迪陳偉
        計算機應用 2019年4期
        關鍵詞:智能合約區(qū)塊鏈

        曹迪迪 陳偉

        摘 要:針對以太坊平臺提供的數(shù)據(jù)管理功能簡單且存在低吞吐率和高延遲的問題,提出一種基于智能合約的以太坊可信存證機制。首先針對以太坊平臺暴露的數(shù)據(jù)管理問題提出一個基于智能合約的以太坊可信存證框架,然后通過集中化數(shù)據(jù)統(tǒng)一處理、認證數(shù)據(jù)分布式存儲以及高效動態(tài)取證這幾個方面闡述所提機制的框架和實現(xiàn),最后通過基于智能合約的系統(tǒng)開發(fā)表明了該機制的可實現(xiàn)性。實驗及分析結(jié)果表明,該方法與傳統(tǒng)關系數(shù)據(jù)庫存證相比,增加了處理可信性、存儲可信性和訪問可信性;與區(qū)塊鏈存證相比,豐富了數(shù)據(jù)管理功能、降低了區(qū)塊存儲成本、提高了存證效率。

        關鍵詞:以太坊;智能合約;區(qū)塊鏈;可信存證

        中圖分類號:TP311; TP393.08

        文獻標志碼:A

        文章編號:1001-9081(2019)04-1073-08

        Abstract: Aiming at the problem that Ethereum platporm has simple data management function and poor performance of low throughput and high latency, a trusted storage mechanism based on smart contract in Ethereum was proposed. Firstly, a framework of trusted storage based on smart contract was proposed for solving data management problem exposed in Ethereum. Secondly, the framework and implementation of the proposed mechanism were expounded from the aspects of centralized data processing, authenticated data distributed storage and dynamic forensics. Finally, the feasibility of the mechanism was proved by the system development based on smart contract. The experimental and analysis results show that compared with the traditional relational database storage, the proposed method increases processing credibility, storage credibility and access credibility; compared with blockchain storage, it enriches data management function, reduces the cost of block storage and improves the efficiency of storage.

        Key words: Ethereum; smart contract; blockchain; trusted storage

        0?引言

        區(qū)塊鏈(Blockchain)是一種基于數(shù)據(jù)加密、時間戳、分布式共識等機制實現(xiàn)去中心化的分布式數(shù)據(jù)管理技術(shù),具有不可篡改、可追溯、高可信和高可用的特點。區(qū)塊鏈的概念最早是在中本聰提出的比特幣(Bitcoin)這一虛擬貨幣中體現(xiàn),并隨著比特幣的快速發(fā)展得到了應用[1]。隨后,以太坊(Ethereum)區(qū)塊鏈平臺以創(chuàng)建一個永不停止、無審查、自動維護的去中心化的世界計算機為愿景而被提出[2],不僅支持加密貨幣交易,即內(nèi)置了類似于比特幣的以太幣(Ether),而且提供了圖靈完備的編程環(huán)境,因而可以通過智能合約(Smart Contract)實現(xiàn)去中心化應用程序(Decentralized APP, DAPP)。目前以太坊已擁有超過4200萬個賬戶,部署了超過60萬個智能合約,基于以太坊的DAPP也已經(jīng)超過1000例[3]。以太坊平臺提供了相對完善的區(qū)塊鏈開發(fā)與應用基礎,也推動了新問題的發(fā)現(xiàn)與研究。

        中本聰最早設計區(qū)塊鏈是為了實現(xiàn)虛擬加密貨幣的交易,區(qū)別于傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng),它只能提供有限的數(shù)據(jù)管理服務[4];同時,區(qū)塊鏈中使用的共識機制是基于工作量證明(Proof-of-Work, PoW)的,高度依賴節(jié)點算力,復雜度與消耗成本較高,導致系統(tǒng)吞吐率較低、延遲較長[5]。因此,如何提供豐富的數(shù)據(jù)處理、存證和取證功能,實現(xiàn)高性能的數(shù)據(jù)管理系統(tǒng),成為了當前區(qū)塊鏈領域研究的熱點問題之一。

        本文結(jié)合以太坊平臺的特征,構(gòu)建一種基于智能合約的可信存證機制,主要包括集中化數(shù)據(jù)統(tǒng)一處理、認證數(shù)據(jù)分布式存儲與高效動態(tài)取證等內(nèi)容,以實現(xiàn)電子數(shù)據(jù)在以太坊上的存證交易與還原驗證,保證數(shù)據(jù)的真實唯一、可溯源與防篡改。從數(shù)據(jù)存證角度來看,區(qū)塊鏈的本質(zhì)是一個構(gòu)建在對等網(wǎng)絡(Peer-to-Peer Network)上的分布式賬本,能夠保證存證數(shù)據(jù)的原始性、真實性和完整性,適合應用于司法鑒定、審計、公證、仲裁等權(quán)威機構(gòu),一旦產(chǎn)生糾紛,權(quán)威機構(gòu)可直接從節(jié)點中取證、核證,更有利于司法落地。

        1?相關研究

        已有的區(qū)塊鏈研究多圍繞加密貨幣[6]、協(xié)議[7]、架構(gòu)[8]、安全[9]和發(fā)展前景[10]角度進行探討,而本文從可信存證的角度疏通以太坊平臺與數(shù)據(jù)管理功能之間的聯(lián)系渠道,實現(xiàn)以智能合約為數(shù)據(jù)存儲方式的可信存證機制,并分析數(shù)據(jù)的存儲編碼過程,提供兩種取證方式及核證還原方法,聚焦于系統(tǒng)的處理可信性、存儲可信性和訪問可信性。

        處理可信性是指數(shù)據(jù)處理的正確性,要求事務的并發(fā)控制,系統(tǒng)需要保存數(shù)據(jù)的最終狀態(tài)。傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)有諸多的基本要求,其中之一就是處理可信性,但是傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)在某種程度上是集中式地保持事務的原子性、一致性、隔離性和耐久性,關于這方面已有成熟并相對高效的技術(shù)[11-12]。在數(shù)據(jù)管理方面雖然已有較多的關于分布式系統(tǒng)中共識機制的研究[13-14],但是受制于性能,共識機制通常只應用于主控節(jié)點的選擇上,一般情況下不會直接應用于事務處理[15]。因此,如何確保數(shù)據(jù)的處理可信性,同時兼顧事務處理的高效性,是以太坊這一去中心化對等網(wǎng)絡平臺亟須解決的問題之一。

        存儲可信性是指數(shù)據(jù)在存儲前后應保持一致性,數(shù)據(jù)處理過程中不會發(fā)生數(shù)據(jù)丟失或被篡改的情況。這就要求系統(tǒng)一方面既要保證在傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng)[11]和事務處理[12]中所要求的事務持久性,另一方面又要在系統(tǒng)發(fā)生故障或被惡意攻擊時,仍能保證數(shù)據(jù)在存儲前后的一致性和正確性。目前基于區(qū)塊鏈技術(shù)的可信存證方案大多是在原有的存證機制上引入?yún)^(qū)塊鏈思想,Zhang等[16]提出了一個基于區(qū)塊鏈的云取證流程源,將云系統(tǒng)的存在證明記錄通過區(qū)塊鏈技術(shù)進行加密簽名,增強云取證的可信度。Bahga等[17]基于工業(yè)物聯(lián)網(wǎng)(Internet of Things, IoT)平臺向云計算制造引入?yún)^(qū)塊鏈理念,使得不受信任的對等網(wǎng)絡不需要可信第三方,用戶能夠按需訪問制造資源。但該類文獻中沒有涉及在以太坊平臺上通過智能合約進行可信存證,且缺少對數(shù)據(jù)的取證與驗證環(huán)節(jié)。

        訪問可信性是指數(shù)據(jù)存證后的可審計及可追溯。在分布式對等網(wǎng)絡環(huán)境中,為了確保數(shù)據(jù)被訪問時是準確可靠的,需要在驗證數(shù)據(jù)的歷史狀態(tài)時,進行一些查詢和事務的相關處理[18]。在傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)中,數(shù)據(jù)的當前狀態(tài)存儲于數(shù)據(jù)庫當中,而數(shù)據(jù)庫日志通常記錄的是數(shù)據(jù)的存儲過程和歷史數(shù)據(jù),僅用于發(fā)生故障時恢復系統(tǒng),但不能直接提供查詢服務[11],因此,傳統(tǒng)的數(shù)據(jù)管理技術(shù)無法直接應用于這一場景。數(shù)據(jù)溯源在科學數(shù)據(jù)管理中有著廣泛的應用,例如集中式數(shù)據(jù)庫或?qū)Φ鹊姆植际江h(huán)境[19],但不能直接應用于以太坊的平臺場景。

        2?以太坊基礎

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

        區(qū)塊鏈的兩大應用:一是比特幣,二是引入了智能合約的以太坊。二者在數(shù)據(jù)結(jié)構(gòu)的具體細節(jié)上雖有差異,但整體上基本相同,都是以區(qū)塊為單位的鏈式結(jié)構(gòu),分為區(qū)塊間的鏈式結(jié)構(gòu)與區(qū)塊內(nèi)的數(shù)據(jù)結(jié)構(gòu)[20]。如圖1所示,每個區(qū)塊由區(qū)塊頭和區(qū)塊體兩部分組成,頭信息是區(qū)塊的元數(shù)據(jù),用于驗證區(qū)塊,并與其父區(qū)塊和子區(qū)塊建立關聯(lián)。通常,區(qū)塊頭中存放了父區(qū)塊哈希(Parent Block Hash)、時間戳(Timestamp)、隨機數(shù)(Nonce)、難度目標(Difficulty)、Merkle根(Merkle Root)等。體信息則是交易的序列,存放了自前一區(qū)塊之后發(fā)生的多筆交易(Transaction)。

        區(qū)塊鏈的兩個哈希結(jié)構(gòu)保障了數(shù)據(jù)的不可篡改性,即區(qū)塊鏈表和Merkle樹。區(qū)塊鏈表基于父區(qū)塊哈希、隨機數(shù)、難度目標等數(shù)值,通過雙SHA256哈希運算得到區(qū)塊哈希值[21],這就保證了區(qū)塊之間的環(huán)環(huán)相扣。Merkle樹是一種樹形數(shù)據(jù)結(jié)構(gòu),其非葉子節(jié)點是所有子節(jié)點的哈希值,葉子節(jié)點是區(qū)塊的交易哈希,數(shù)量為偶數(shù)。Merkle樹節(jié)點從下往上,兩兩成對,將組合哈希值作為新的哈希值,即新的樹節(jié)點。重復該過程,直到僅存在一個節(jié)點,也就是根節(jié)點,而根節(jié)點的哈希值就認為是整棵Merkle樹的簽名值。以太坊不同于比特幣的地方在于以太坊擁有針對交易哈希的交易Merkle根,以及針對賬戶狀態(tài)數(shù)據(jù)的狀態(tài)Merkle根(State Root)[20]。除此之外,以太坊塊頭還含有收據(jù)Merkle根(Receipts Root),用于交易執(zhí)行日志。以太坊是使用MPT(Merkle Patricia Tree)來計算Merkle根的,其本質(zhì)是Merkle樹與前綴樹的結(jié)合,提供查找能力,查找路徑為以太坊的賬戶地址,從其樹根向下查找到葉子節(jié)點中賬戶的狀態(tài)數(shù)據(jù)。

        2.2?以太坊賬戶與交易

        以太坊是基于賬戶的模型,能夠針對狀態(tài)數(shù)據(jù)處理復雜的業(yè)務邏輯。以太坊賬戶由一個20字節(jié)的地址構(gòu)成,包含四個部分,即:用于確定每筆交易只能被處理一次的隨機數(shù),賬戶當前的以太幣余額,賬戶的合約代碼,以及默認為空的賬戶存儲。其中以太幣是以太坊內(nèi)部的加密燃料,用于支付交易或以太坊虛擬機(Ethereum Virtual Machine, EVM)中的計算服務費用,目前市值已達570美元[3]。

        一般而言,以太坊賬戶分為兩種類型:一是外部賬戶(External Owned Account, EOA),二是合約賬戶(Contract Account)。兩者區(qū)別在于外部賬戶由用戶控制,而合約賬戶由可執(zhí)行代碼,即合約代碼控制。以太坊的賬戶包含四個部分,分別是Nonce、Balance、StorageRoot和CodeHash。Nonce是確定每筆交易只能被處理一次的隨機數(shù),用于防范區(qū)塊鏈的重放攻擊,區(qū)別在于外部賬戶的Nonce表示從該賬戶地址發(fā)送的交易序號,合約賬戶的Nonce表示該賬戶創(chuàng)建的合約序號;Balance代表的是賬戶的以太幣余額;StorageRoot是Merkle樹的根節(jié)點哈希值,默認為空;CodeHash表示賬戶EVM代碼的哈希值,區(qū)別在于外部賬戶的CodeHash是一個空字符串的哈希值,合約賬戶的CodeHash就是合約代碼的哈希值。

        以太坊交易被定義為存儲從EOA發(fā)出的消息的簽名數(shù)據(jù)包,包含三種類型,即以太幣轉(zhuǎn)賬交易、部署智能合約與調(diào)用智能合約。其中,當且僅當合約變量值發(fā)生改變時,調(diào)用合約才屬于交易。以太坊交易包含七個參數(shù),分別是To、Value、gasLimit、gasPrice、Nonce、Data及Signature。To代表了20字節(jié)的交易接收方地址,如果交易屬于部署智能合約,則To為空;Value表示支付交易的以太幣費用,單位是Wei;gasLimit指Gas限制額,用于防止代碼的指數(shù)型爆炸和無限循環(huán);gasPrice是每一計算步驟需要支付礦工的費用;Nonce是用于確定每筆交易只能被處理一次的計數(shù)器,防止重放攻擊;Data是調(diào)用智能合約時的消息數(shù)據(jù),或者是智能合約的二進制代碼;Signature是確認發(fā)送者的橢圓曲線數(shù)字簽名算法(Elliptic Curve Digital Signature Algorithm, ECDSA)哈希值。

        2.3?智能合約

        智能合約是定位于以太坊其中一個特定地址上的代碼(其功能)和數(shù)據(jù)(其狀態(tài))的集合[2],是一段計算機程序,通過調(diào)用智能合約,依照合約內(nèi)部規(guī)則執(zhí)行交易,訪問合約狀態(tài)數(shù)據(jù),從而實現(xiàn)DAPP。因此智能合約的存在擴展了區(qū)塊鏈的功能,豐富了區(qū)塊鏈的上層應用[22]。

        智能合約首先由以太坊自定義的Solidity、Serpent等圖靈完備的腳本語言編寫,編譯為以太坊特有的二進制格式以太坊虛擬機字節(jié)碼后,可將部署后的合約存放在區(qū)塊鏈上,廣播至區(qū)塊鏈的其他網(wǎng)絡節(jié)點上,之后合約每次被調(diào)用時才被EVM加載運行。智能合約內(nèi)部包含了表示“賬戶地址”的address數(shù)據(jù)類型,相應地,外部賬戶的賬戶地址常被用來進行虛擬貨幣的交易,合約賬戶的賬戶地址常用于調(diào)用合約。智能合約的Gas消耗是根據(jù)執(zhí)行時所占用的CPU和內(nèi)存來計算的,Gas一旦耗盡,合約自動停止執(zhí)行,從而有效避免了合約死循環(huán)與無效交易的發(fā)生[20]。

        一個智能合約可以由外部賬戶來部署,也可以由合約賬戶來部署,部署成功后,以太坊上的任何用戶都可以調(diào)用該合約進行交易。從數(shù)據(jù)的可信性角度來看,賬戶調(diào)用智能合約的歷史操作將被記錄在區(qū)塊中的交易信息中,調(diào)用過程和結(jié)果可審計、可追溯。

        3?基于智能合約的可信存證

        由于區(qū)塊鏈技術(shù)所能提供的數(shù)據(jù)管理功能較為簡單,且其共識機制的計算量耗費巨大,本文通過結(jié)合智能合約的方法來達到更好的系統(tǒng)性能。如圖2所示的系統(tǒng)架構(gòu),本文提出的基于智能合約的可信存證系統(tǒng)可分為三大部分:1)集中式數(shù)據(jù)統(tǒng)一處理。為提高系統(tǒng)的處理可信性,本文對需要存證的電子數(shù)據(jù)進行標準化和集中化的收集與處理,靈活、高效快速、一致地處理數(shù)據(jù)有助于訪問和使用數(shù)據(jù)來開展以太坊存放交易與應用。

        2)認證數(shù)據(jù)分布式存儲。本文在以太坊平臺上,通過智能合約定義交易邏輯及訪問狀態(tài)數(shù)據(jù)的業(yè)務規(guī)則,將存證數(shù)據(jù)封存在以太坊交易屬性信息中,在區(qū)塊鏈中不僅記錄了交易結(jié)果,而且保存了智能合約本身。隨著區(qū)塊鏈各個節(jié)點間的同步,確保了不同節(jié)點下智能合約的一致性與正確性,也保證了系統(tǒng)的存儲可信性。

        3)動態(tài)數(shù)據(jù)取證。引入復雜的智能合約后,以太坊平臺所管理的數(shù)據(jù)隨著規(guī)模擴大而越來越多,基于區(qū)塊內(nèi)的事務之間的Merkle樹結(jié)構(gòu)以及智能合約方法來實現(xiàn)數(shù)據(jù)的取證查詢,與此同時可以與原數(shù)據(jù)的處理結(jié)果進行比對,保證數(shù)據(jù)存證前后的一致性以及系統(tǒng)的訪問可信性。

        3.1?集中式數(shù)據(jù)統(tǒng)一處理

        通常需要進行可信存證的數(shù)據(jù)多為具有法律效益或其他重要用途的文件,包括但不限于醫(yī)療行業(yè)的電子病歷、健康檔案、問診記錄、知情同意書,金融行業(yè)的證券基金交易,旅游行業(yè)的出游人信息、出游合同,家政行業(yè)的簽約合同、服務照片,產(chǎn)權(quán)行業(yè)的版權(quán)證明、品牌保護、打假維權(quán),等等。數(shù)據(jù)類型包括但不限于辦公文件(doc、txt、 pdf、 ppt、xls、rtf)、圖片(bmp、 jpg、 png、gif)、音頻(wav、mp3、midi)、視頻(avi、rmvb、mov、wmv)等。因此,這就涉及到了對不同文件格式數(shù)據(jù)的統(tǒng)一處理。

        以太坊的區(qū)塊鏈與索引是以Key-Value數(shù)據(jù)組織形式存儲在內(nèi)部的LevelDB數(shù)據(jù)庫[5],如果直接將以太坊作為數(shù)據(jù)庫來使用,這樣可以保證數(shù)據(jù)從一個以太坊節(jié)點傳送到另一個節(jié)點時,傳送的數(shù)據(jù)、發(fā)送者、接收者和傳送時間戳能夠永久保存,且永久不可變。但是這種方式有明顯的缺陷:一是無法處理不同文件格式的數(shù)據(jù);二是無法提供查詢功能;三是區(qū)塊鏈作為數(shù)據(jù)庫來使用效率很低,存儲成本也很昂貴,系統(tǒng)吞吐率極低,單個確認寫入所產(chǎn)生的延遲時間卻足足有十幾分鐘,容量更是達到幾十GB[11]。此外,隨著節(jié)點數(shù)量的增加,工作量、延遲時間以及容量上都無法與傳統(tǒng)關系數(shù)據(jù)庫系統(tǒng)相比。

        因此,本文考慮在基于智能合約進行存證之前,先對不同文件格式的數(shù)據(jù)進行集中式統(tǒng)一處理,利用傳統(tǒng)數(shù)據(jù)庫統(tǒng)一最小化數(shù)據(jù),將數(shù)據(jù)的標識符散列存儲至智能合約的存儲區(qū)。這種方式能夠最大限度地降低了區(qū)塊鏈存證成本,提高了系統(tǒng)效率,既保證了數(shù)據(jù)永久抗干擾,又補充了以太坊存證的查詢功能。

        本文選用MongoDB數(shù)據(jù)庫進行集中式數(shù)據(jù)統(tǒng)一處理。與其他分布式數(shù)據(jù)庫相比,MongoDB具有文檔型存儲的優(yōu)勢,任何文件格式的數(shù)據(jù)都會以二進制的Json格式Bson存儲[23],既解決了文件格式不同的問題,又能夠最大限度上減少文件所占用的空間,提高數(shù)據(jù)傳輸效率,也便于后臺服務器與前端的交互。對于文件存儲驅(qū)動,本文選擇的是GridFS,將上傳的文件按照256kb的大小分割塊,塊集合存儲于fs.chunks,文件元數(shù)據(jù)存儲于fs.files。如圖2所示的系統(tǒng)架構(gòu),原始文件經(jīng)過MongoDB統(tǒng)一處理后會得到很多屬性信息,例如表1給出的一個圖片證據(jù)的處理結(jié)果,而需要存儲進區(qū)塊鏈中的數(shù)據(jù)僅為文件ID與MD5值,大幅地降低了存證成本,更易于訪問和使用數(shù)據(jù)。

        類似地,BigchainDB[24]項目也是使用MongoDB處理數(shù)據(jù),但它的查詢功能大部分直接使用MongoDB的API來完成,這種方式對黑客來說無疑是一種入侵通道。相比較而言,本文的數(shù)據(jù)查詢功能依賴于智能合約,保證了系統(tǒng)的可信性與安全性。

        3.2?認證數(shù)據(jù)分布式存儲

        以太坊的智能合約使網(wǎng)絡在功能上類似計算平臺,系統(tǒng)借助以太坊建立對等網(wǎng)絡,合約一旦被共識節(jié)點執(zhí)行,則以太坊中的節(jié)點都會遵循相應的規(guī)則,可以實現(xiàn)認證數(shù)據(jù)的分布式存儲,同時確保存儲可信性。具體地,認證數(shù)據(jù)分布式存儲的步驟可以分為三步:以太坊賬戶的創(chuàng)建、智能合約的部署交易和智能合約的調(diào)用。

        3.2.1?創(chuàng)建以太坊賬戶

        對于以太坊集成開發(fā)環(huán)境(Integrated Development Environment, IDE),本文選擇的是Geth(Go ethereum),它是以太坊基金會提供的運行以太坊節(jié)點的Go語言客戶端程序[25],可與智能合約交互開發(fā)DAPP,擴展區(qū)塊鏈功能。由2.2節(jié)可知以太坊具有外部賬戶和內(nèi)部賬戶,這里的創(chuàng)建是指在以太坊客戶端上創(chuàng)建外部賬戶,而內(nèi)部賬戶的創(chuàng)建是通過智能合約的部署來實現(xiàn)。在Geth中本文設置gasLimit、Difficulty、Nonce等參數(shù)創(chuàng)建創(chuàng)世區(qū)塊,在當前節(jié)點創(chuàng)建數(shù)據(jù)存放地址,ChainData存放區(qū)塊信息,KeyStore存放當前節(jié)點下的所有賬戶文件,設置網(wǎng)絡監(jiān)聽端口及用于區(qū)分不同網(wǎng)絡的唯一標識ID后即可啟動以太坊節(jié)點,通過personal.newAccount命令創(chuàng)建以太坊的外部賬戶。

        3.2.2?部署智能合約

        由2.2節(jié)可知,部署智能合約屬于以太坊交易,由外部賬戶來部署,部署成功會返回合約地址與合約賬戶,實現(xiàn)合約賬戶的創(chuàng)建。具體地,部署智能合約在本文中包括以下4個步驟:步驟1?使用Solidity編寫可信存證合約代碼。本文在智能合約中使用一個非固定大小字符串類型的狀態(tài)變量來聲明進行過集中式統(tǒng)一處理的存證數(shù)據(jù),聲明存證函數(shù)用來存儲變量值,輸入為字符串變量,交易執(zhí)行成功后返回交易哈希。再聲明取證函數(shù)用來獲取變量值,輸出為存證函數(shù)的輸入,返回區(qū)塊中最新存儲的數(shù)據(jù)。該合約允許所有人在合約中存儲非固定大小的字符串,該數(shù)據(jù)可以被所有人訪問,且沒有可行的方法阻止用戶發(fā)布。所有人也可以再次調(diào)用存證函數(shù),傳入不同的數(shù)據(jù)覆蓋原字符串,但是之前的數(shù)據(jù)仍會存儲在區(qū)塊鏈的歷史區(qū)塊中,無法篡改或抹去。如果想添加訪問限制,可以設置合約函數(shù)確保只有特定用戶可以訪問存證函數(shù)。

        步驟2?編譯智能合約。本文使用Remix在線編譯器將智能合約編譯為EVM字節(jié)碼,獲取合約二進制碼和應用程序二進制接口(Application Binary Interface, ABI)。ABI描述了合約函數(shù)的調(diào)用簽名和返回值,是智能合約進行交互的標準方法,包括區(qū)塊鏈外部與合約之間的交互和以太坊已存在合約之間的交互。

        步驟3?啟動以太坊節(jié)點。

        步驟4?部署智能合約。創(chuàng)建合約對象,聲明EVM字節(jié)碼,部署交易來創(chuàng)建合約賬戶。該筆交易包含了外部賬戶地址、智能合約內(nèi)容、合約賬戶地址這三個關鍵信息,其中合約賬戶的生成是由部署者外部賬戶和發(fā)送的交易數(shù)作為隨機數(shù)輸入,通過Kecca-256加密算法創(chuàng)建產(chǎn)生的。外部賬戶交易會經(jīng)歷5個步驟,即設置礦工賬戶、解鎖賬戶、發(fā)送交易、啟動挖礦及查看賬戶,其中發(fā)送交易后交易池中會顯示正在等待被打包的交易次數(shù),礦工消耗一定Gas挖礦成功后生成一個新區(qū)塊,交易信息存儲在新區(qū)塊中,字節(jié)碼通過Geth的遠程過程調(diào)用(Remote Precedure Call, RPC)發(fā)送至以太坊網(wǎng)絡,經(jīng)過全網(wǎng)驗證后,寫入到Geth管理的區(qū)塊鏈中。

        3.2.3?調(diào)用智能合約

        智能合約的調(diào)用方法有三種,以本文合約的存證方法SetData為例,分別是:SetData.sendTransaction、SetData.call和SetData()。三種調(diào)用方法的區(qū)別在于:第一種會創(chuàng)建新交易,交易被打包后返回一個交易哈希值廣播至網(wǎng)絡中,會造成Gas的消耗;第二種方法本質(zhì)是一個本地調(diào)用,不會向區(qū)塊鏈網(wǎng)絡廣播任何消息,它的返回值取決于合約中函數(shù)的具體代碼,不會消耗Gas;第三種是若合約函數(shù)的代碼有constant標識,則執(zhí)行call的本地調(diào)用操作,若沒有constant標識,則執(zhí)行sendTransaction操作。本文調(diào)用智能合約的方法使用的是第三種,且代碼中沒有設置constant標識,完整的部署與調(diào)用流程如圖3所示。

        由2.2節(jié)可知,調(diào)用智能合約時如果合約狀態(tài)值發(fā)生了更改,那么該次調(diào)用事屬于交易,需要礦工消耗Gas進行挖礦打包交易。在以太坊平臺上聲明智能合約ABI,獲得合約實例,此時輸入合約名稱可返回在代碼中定義的合約規(guī)則,調(diào)用SetData()方法,參數(shù)添加進行過集中式統(tǒng)一處理的存證數(shù)據(jù),交易完成后將返回交易哈希值,用于后文定位區(qū)塊及查詢訪問存證數(shù)據(jù)。

        3.3?動態(tài)數(shù)據(jù)取證

        本文提供兩種查詢?nèi)∽C方式:一是利用智能合約中定義的取證函數(shù),返回最新存入?yún)^(qū)塊的數(shù)據(jù);二是借助智能合約的存儲編碼規(guī)則,遍歷以太坊的區(qū)塊信息和交易信息,逆向解碼分析展示數(shù)據(jù)。

        對于第一種取證方式,合約中聲明的取證函數(shù)返回值是存證函數(shù)的輸入,沒有更改合約狀態(tài)值,所以這種智能合約調(diào)用不屬于交易,不會消耗Gas,在以太坊平臺上調(diào)用取證函數(shù)即可獲取到最新存入?yún)^(qū)塊的數(shù)據(jù),但是這種方式無法獲取其他區(qū)塊中的數(shù)據(jù),因此本文提出第二種取證方式。

        第二種取證方式基于以太坊內(nèi)部的存儲編碼規(guī)則。由2.1節(jié)可知,以太坊計算Merkle根使用的是MPT,它是以太坊用來將Key-Value進行緊湊編碼的一種數(shù)據(jù)組織形式,任何存儲數(shù)據(jù)的細微變化都會導致MPT的根節(jié)點發(fā)生變更,因此可以校驗數(shù)據(jù)的一致性。MPT包含3種節(jié)點類型[26],即葉子節(jié)點、擴展節(jié)點和分支節(jié)點。葉子節(jié)點用于數(shù)據(jù)的存儲,其Key對應數(shù)據(jù)的16進制編碼,Value存儲的是數(shù)據(jù)的遞歸長度前綴(Recursive Length Prefix, RLP)編碼[27];擴展節(jié)點處理具有共同前綴的數(shù)據(jù),Key為共同前綴的16進制邊,Value為擴展出的分支節(jié)點的哈希值;分支節(jié)點處理沒有共同前綴的數(shù)據(jù),Key為分叉節(jié)點哈希值數(shù)據(jù),Value一般為空,否則為終止擴展節(jié)點的Value值。其中,RLP編碼是以太坊中數(shù)據(jù)序列化的一個主要編碼方式,可以將任意的嵌套二進制數(shù)據(jù)進行序列化,具有5個規(guī)則,如表2所示。

        以太坊以Key-Value形式來存儲數(shù)據(jù),賬戶以哈希散列和RLP數(shù)據(jù)編碼為基礎,結(jié)合智能合約對數(shù)據(jù)對象進行映射和轉(zhuǎn)換,將數(shù)據(jù)按照編碼規(guī)則映射為MPT,所有節(jié)點的Key和Value構(gòu)建為一個RLP列表,計算根節(jié)點唯一證明并保存于以太坊賬戶中。綜上,以太坊采用如下5個編碼規(guī)則來將智能合約數(shù)據(jù)結(jié)構(gòu)映射為Key-Value形式:規(guī)則1?智能合約中所有數(shù)據(jù)結(jié)構(gòu)都會被映射為Key-Value的形式,其中Key和Value均是無符號32字節(jié)的數(shù)據(jù)。

        規(guī)則2?存儲成員依照定義位置從零開始索引編排,每次累加數(shù)值一,作為對應的Key值存儲。

        規(guī)則3?對于固定長度的數(shù)據(jù)類型,例如enum、uint8、uint16、uint32等,Value值按照32字節(jié)右對齊的規(guī)律存儲具體的成員屬性值。如果長度不滿足32字節(jié),則將相鄰的存儲成員進行壓縮合并存儲Value值。

        規(guī)則4?對于可變長度的數(shù)據(jù)類型,例如string、bytes等,Value值按照32字節(jié)左對齊的規(guī)律存儲;

        規(guī)則5?如果可變長度類型變量的數(shù)據(jù)長度大于31字節(jié),則拆分為多條記錄來存儲,第一條記錄的Key值為其索引編號,Value值為數(shù)據(jù)長度再累加1,數(shù)據(jù)內(nèi)容按照32字節(jié)大小拆分為多條記錄,每條記錄的Key值為第一個Key值的SHA3哈希值再累加1,Value值對應拆分的數(shù)據(jù)內(nèi)容。

        基于上述編碼規(guī)則,以太坊將智能合約的數(shù)據(jù)對象映射轉(zhuǎn)換為Key-Value

        形式封存在交易區(qū)塊當中,能夠標識區(qū)塊中是否含有交易信息的字段是transaction.length,若不為0,則該區(qū)塊存有交易,此時以區(qū)塊信息中的交易哈希值為索引可獲取區(qū)塊體中的交易序列。區(qū)塊體中的交易信息包含6個字段,分別是區(qū)塊號、區(qū)塊哈希值、交易哈希值、交易發(fā)送者、交易接收者以及Input字段。

        Input字段包含合約的函數(shù)選擇器與參數(shù)編碼,記錄了編碼后的存證數(shù)據(jù)。Input的前4個字節(jié)指定了函數(shù)選擇器,是合約函數(shù)的KECCAK256算法哈希值[28];接下來的32個字節(jié)為參數(shù)編碼的第一個參數(shù),表示非固定大小字符串的字節(jié)偏移量;再接著32個字節(jié)為參數(shù)編碼的第二個參數(shù),是存證數(shù)據(jù)的字符串長度的十六進制編碼;參數(shù)編碼的第三個參數(shù)所占字節(jié)是32的倍數(shù),左對齊輸出,若數(shù)據(jù)長度不足32字節(jié)的倍數(shù),則在數(shù)據(jù)右邊補0擴展到32字節(jié)的倍數(shù)。此時對Input字段參數(shù)編碼的第三個參數(shù)進行ASCII解碼獲取到的就是該交易信息中存儲的合約信息,即存證數(shù)據(jù)。

        為辨別存有存證數(shù)據(jù)的區(qū)塊,本文在與用戶操作交互的應用層,采用B/S架構(gòu)通過Node.js的Express框架將用戶與以太坊可信存證系統(tǒng)相互連接,建立前后端交互,后端與Geth、MongoDB相連,前端循環(huán)遍歷以表格形式輸出當前以太坊節(jié)點中的所有區(qū)塊信息,提供可交互式用戶界面。對區(qū)塊體的交易序列添加索引輸出自前一區(qū)塊之后發(fā)生的多筆交易。例如表3給出了一個圖片證據(jù)存儲在以太坊中的交易信息,該交易位于實驗節(jié)點中第323個區(qū)塊上,Input字段記錄了經(jīng)過集中式統(tǒng)一處理后得到的文件ID與MD5值。

        解碼得到的文件ID與MD5值后,通過MongoDB使用GridFS以file_id為索引查詢文件,查詢成功返回文件名稱,再通過mongofiles的get命令下載文件到本地,完成對原始數(shù)據(jù)的還原。而以太坊中保存的MD5值可與數(shù)據(jù)庫中存儲的MD5值作比較,驗證訪問可信性,驗證數(shù)據(jù)在存證前后的真實唯一、未篡改。

        綜上,本節(jié)實現(xiàn)了集中式數(shù)據(jù)統(tǒng)一處理、智能合約存證、以太坊取證及核證的過程,基于智能合約的可信存證相對于傳統(tǒng)的關系數(shù)據(jù)庫存證具有三大優(yōu)勢:1)分布式完整。傳統(tǒng)數(shù)據(jù)庫存證只是將電子數(shù)據(jù)以備份的形式存放在服務器上,傳輸過程中數(shù)據(jù)易破損、易斷點、易篡改,而基于智能合約的可信存證采取區(qū)塊鏈技術(shù),數(shù)據(jù)全鏈條每個節(jié)點都有存證,保證了存證信息的完整性和真實性,實現(xiàn)了分布式存證服務。

        2)不可篡改。傳統(tǒng)數(shù)據(jù)庫中的電子數(shù)據(jù)因服務器問題或機制不完全容易被篡改,而基于智能合約的可信存證在數(shù)據(jù)固定前采用哈希算法進行了校驗值計算,數(shù)據(jù)固定過程中運用了時間戳機制、加密機制及分布式共識機制,數(shù)據(jù)一經(jīng)存儲,任何一方也無法篡改。

        3)安全可信。傳統(tǒng)數(shù)據(jù)庫存證是第三方本地保存的電子數(shù)據(jù),屬于自證證據(jù),數(shù)據(jù)的法律效力容易遭到質(zhì)疑,而在以太坊平臺上基于智能合約的可信存證適用于司法仲裁機構(gòu),數(shù)據(jù)全鏈條每個節(jié)點都有存證,數(shù)據(jù)安全可信,權(quán)威機構(gòu)可直接從節(jié)點中獲取驗證證據(jù),將存證數(shù)據(jù)視為直接證據(jù),不需要第三方機構(gòu)再出具證明。

        4?可信性分析

        本文在以太坊平臺上基于智能合約進行可信存證,指出所有的數(shù)據(jù)及操作都被永久地記錄在區(qū)塊鏈數(shù)據(jù)區(qū)塊供用戶訪問。這些存證數(shù)據(jù)所在的數(shù)據(jù)區(qū)塊被同步存儲在系統(tǒng)的每一個參與運算的節(jié)點中,所有這些節(jié)點構(gòu)成了可信存證系統(tǒng)及其堅韌的分布式數(shù)據(jù)管理系統(tǒng),任何一個節(jié)點上的數(shù)據(jù)被破壞可以通過同步節(jié)點或訪問其他哈希節(jié)點來驗證確認;同時,任何一個節(jié)點上如果數(shù)據(jù)區(qū)塊被惡意篡改或刪除,都不會影響整個可信存證系統(tǒng)的正常運轉(zhuǎn)。因此,本文提出的基于智能合約的可信存證系統(tǒng)很好地解決了區(qū)塊鏈上數(shù)據(jù)管理效率低延遲長的問題,豐富了數(shù)據(jù)處理、存證和取證功能,下面對系統(tǒng)的可信性進行分析。

        4.1?處理可信性

        處理可信性是指數(shù)據(jù)處理的正確性,系統(tǒng)需要保存數(shù)據(jù)的最終狀態(tài)。在傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)中,用戶通過提交事務來處理數(shù)據(jù),事務常由過程型語言與SQL語句組合共同構(gòu)成,事務執(zhí)行的過程或結(jié)果通過日志進行記錄。區(qū)塊鏈與傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng)中的日志在邏輯功能上有所相似,但不同之處在于,比特幣區(qū)塊鏈僅支持挖礦與轉(zhuǎn)賬功能,功能上更傾向于數(shù)字貨幣的交易,對于數(shù)據(jù)的處理具有很大的局限性。

        以太坊的智能合約提供了區(qū)塊鏈中的數(shù)據(jù)處理功能,但如果直接將以太坊作為傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)來處理數(shù)據(jù),會有無法處理不同文件格式、無法提供查詢功能及存儲成本昂貴效率低下的缺陷。

        因此,本文借助MongoDB數(shù)據(jù)庫對存證數(shù)據(jù)進行集中式統(tǒng)一處理,將任意文件格式的數(shù)據(jù)分割為塊,塊集合存儲于fs.chunks,文件元數(shù)據(jù)存儲于fs.files,提取數(shù)據(jù)的ID和MD5值進行后續(xù)的分布式智能合約存儲。MD5算法具有壓縮性、容易計算、抗修改性、弱抗碰撞和強抗碰撞的特點,如果在分布式存儲的過程中數(shù)據(jù)被某些人作了改動,那么得到的MD5值將有很大變化。此外,原始文件經(jīng)過MD5加密后為32位的字符串,能夠給定固定大小的空間存儲、傳輸和驗證,大幅地降低了存證成本,也提供了通道驗證數(shù)據(jù)的完整性,確保系統(tǒng)的處理可信性。

        4.2?存儲可信性

        存儲可信性是指數(shù)據(jù)存儲的正確性,即使系統(tǒng)在存儲、通信過程中發(fā)生故障,甚至被惡意攻擊時,只要數(shù)據(jù)處理結(jié)果被確認,存儲的數(shù)據(jù)就不被篡改或者丟失。

        以太坊平臺整體上可劃分為五個層次,依次為網(wǎng)絡層、共識層、數(shù)據(jù)層、智能合約層和應用層[4]。在網(wǎng)絡層,以太坊平臺的網(wǎng)絡傳輸協(xié)議為完全分布且可容忍單點故障的P2P協(xié)議,協(xié)議用于節(jié)點間傳輸交易數(shù)據(jù)和區(qū)塊數(shù)據(jù)[5]。節(jié)點之間以扁平拓撲結(jié)構(gòu)相互連通,不存在中心化節(jié)點,具有平等、自治、分布等特性。在數(shù)據(jù)傳輸過程中,當相鄰節(jié)點監(jiān)聽到新交易和新區(qū)塊時,節(jié)點首先會通過工作量證明共識機制或者數(shù)字簽名哈希運算等來驗證交易和區(qū)塊的有效性,只有驗證順利通過,新交易才能被記錄到正在構(gòu)建的區(qū)塊當中,隨著新區(qū)塊的成功構(gòu)建,也就確保了數(shù)據(jù)的有效性與可信性。

        在共識層,以太坊依賴于工作量證明機制來解決區(qū)塊的容錯一致問題。PoW機制能夠保證全網(wǎng)數(shù)據(jù)的一致性和安全性,它依賴的是節(jié)點間的算力競爭,要求每個節(jié)點基于自身算力來求解SHA256運算,該運算是一個求解復雜但驗證簡單的計算難題,目的是尋找一個能夠滿足哈希結(jié)果小于區(qū)塊設定的難度目標的隨機數(shù)值[29]。任何一個節(jié)點上,如果有人想要惡意篡改某一數(shù)據(jù)區(qū)塊,需要對該區(qū)塊及其后續(xù)所有區(qū)塊重新進行哈希運算,計算出合適的隨機數(shù),構(gòu)建出一條比當前被公認的區(qū)塊鏈主鏈更長的鏈,這個惡意過程所需要消耗的算力超過了整個區(qū)塊鏈中正在進行正常挖礦運算的算力總和,因此惡意攻擊的難度和成本很高。PoW機制融合了經(jīng)濟激勵政策與共識算法,使得以太坊中更多的節(jié)點能夠參與到挖礦運算當中,主動性的增強了平臺的可靠性與安全性。

        在數(shù)據(jù)層,以太坊中每個區(qū)塊都包含區(qū)塊體和區(qū)塊頭兩個部分。區(qū)塊體存放了當前區(qū)塊的所有交易信息,區(qū)塊頭記錄父區(qū)塊哈希、時間戳、Merkle根等數(shù)據(jù),其中父區(qū)塊哈希構(gòu)建了區(qū)塊鏈以區(qū)塊為單位的鏈式結(jié)構(gòu),保證了數(shù)據(jù)數(shù)據(jù)的不可篡改性,時間戳是該區(qū)塊的生成時間,基于交易哈希生成的Merkle根確保了區(qū)塊內(nèi)交易數(shù)據(jù)的完整性與可信性。因此,區(qū)塊鏈特殊的數(shù)據(jù)結(jié)構(gòu)保證了所有區(qū)塊以鏈相連、環(huán)環(huán)相扣,其中任何一個區(qū)塊被篡改,都會引起該區(qū)塊后面的所有區(qū)塊的連環(huán)變化。

        在智能合約層,以太坊實現(xiàn)了Casper共識[30]。從前所述,PoW犧牲性能來換取數(shù)據(jù)的一致性和安全性,針對PoW機制低效耗能的缺陷,以太坊平臺引入權(quán)益證明(Proof-of-Stake, PoS)機制[30-31],根據(jù)礦工在區(qū)塊鏈中擁有的股權(quán)來決定其挖礦的難度,當?shù)V工擁有越多的以太幣,越容易找到合適的隨機數(shù),挖礦的整體難度就會越低。以太坊又基于PoS機制提出Casper共識,要求節(jié)點必須先鎖定保證金,才可以參與出塊和共識形成,礦工使用保證金對共識結(jié)果進行下注,如果投注正確,則可以獲得區(qū)塊的記賬權(quán)和經(jīng)濟獎勵。Casper共識通過對保證金的直接控制來約束礦工的行為,具體來說,如果一個礦工做出了任何系統(tǒng)認為是無效甚至是惡意的行為,其預繳的保證金將會沒收,同時也將失去出塊和參與共識的權(quán)利。因此,共識機制的存在既提高了以太坊平臺的性能,又保障了數(shù)據(jù)的一致性和安全性。

        4.3?訪問可信性

        訪問可信性是指數(shù)據(jù)存證后的可審計及可追溯。本文提供了兩種訪問方式:一是調(diào)用智能合約方法, 二是依據(jù)智能合約的編碼規(guī)則對交易信息進行解碼,兩種方式都保證了數(shù)據(jù)被訪問時的正確性。

        在數(shù)據(jù)層,以太坊以Key-Value數(shù)據(jù)庫存儲索引數(shù)據(jù)與狀態(tài)數(shù)據(jù),使得系統(tǒng)可以通過哈希鍵值檢索數(shù)據(jù)。這與傳統(tǒng)數(shù)據(jù)庫的預寫式日志非常類似,區(qū)塊數(shù)據(jù)按照日志文件格式存儲,以追加形式寫入,支持數(shù)據(jù)重放,維護了所有的歷史操作記錄。另外,Merkle樹的結(jié)構(gòu)維護一個區(qū)塊內(nèi)的事務之間的關系,以太坊區(qū)塊數(shù)據(jù)具備了預寫式日志不具備的不可篡改性和可追溯性。

        在智能合約層,本文系統(tǒng)中的合約方法提供了查詢操作,無需共識,也不會更改合約狀態(tài)值,調(diào)用取證函數(shù)則就獲取到最新存入?yún)^(qū)塊的數(shù)據(jù)。此外,本文依據(jù)智能合約的編碼規(guī)則還原數(shù)據(jù)的存儲過程,基于區(qū)塊哈希檢索區(qū)塊數(shù)據(jù),又基于區(qū)塊數(shù)據(jù)中的交易哈希檢索交易數(shù)據(jù),通過解碼交易數(shù)據(jù)中的Input字段來還原存證數(shù)據(jù)。

        在應用層,以太坊除了基于以太幣的數(shù)字貨幣交易,還支持去中心化應用,本文基于Node.js語言構(gòu)建Web前端應用界面,通過JSON-RPC請求對以太坊節(jié)點上的智能合約進行部署和調(diào)用,支持訪問可信的區(qū)塊數(shù)據(jù)、交易數(shù)據(jù)和狀態(tài)數(shù)據(jù),使應用程序擁有良好交互性的用戶界面。

        5?結(jié)語

        本文區(qū)別于傳統(tǒng)關系數(shù)據(jù)庫存證,提出了一種在以太坊平臺上基于智能合約的可信存證系統(tǒng)。存證后數(shù)據(jù)全鏈條每個節(jié)點都有存證,數(shù)據(jù)分布式完整、不可篡改、安全可信,適合應用于司法鑒定、審計、公證、仲裁等權(quán)威機構(gòu),可直接從運維的節(jié)點中獲取和驗證數(shù)據(jù),把存證數(shù)據(jù)視為直接證據(jù),不再需要第三方機構(gòu)出具證明。

        首先,因為區(qū)塊鏈存儲成本較大,為提高存證效率,節(jié)省計算費用,本文通過MongoDB的GridFS對數(shù)據(jù)進行集中式統(tǒng)一處理,提高系統(tǒng)的處理可信性;其次,通過部署和調(diào)用智能合約對認證數(shù)據(jù)進行分布式存儲,確保系統(tǒng)的存儲可信性;最后,通過兩種動態(tài)數(shù)據(jù)取證方法提取文件ID與MD5值來進行數(shù)據(jù)核證,一是調(diào)用智能合約方法,二是根據(jù)以太坊數(shù)據(jù)編碼規(guī)則逆向分析交易信息,保證系統(tǒng)的訪問可信性。

        在未來的工作中,本研究考慮在智能合約中增加訪問限制,只有特定用戶可以調(diào)用合約方法,但仍然允許任何人訪問合約,確??尚糯孀C系統(tǒng)的公開公正。

        參考文獻(References)

        [1] NAKAMOTO S. Bitcoin: a peer-to-peer electronic cash system [EB/OL]. [2018-05-10]. http://www.academia.edu/download/54517945/Bitcoin_paper_Original_2.pdf.

        [2] BUTERIN V. A next-generation smart contract and decentralized application platform [EB/OL]. [2018-05-10]. https://cryptorating.eu/whitepapers/Ethereum/Ethereum_white_paper.pdf.

        [3] Etherscan. Ethereum unique address growth chart [EB/OL]. [2018-09-02]. https://etherscan.io/chart/address/.

        [4] 錢衛(wèi)寧, 邵奇峰, 朱燕超, 等.區(qū)塊鏈與可信數(shù)據(jù)管理: 問題與方法[J]. 軟件學報, 2018, 29(1): 150-159. (QIAN W N, SHAO Q F, ZHU Y C, et al. Research problems and methods in blockchain and trusted data management [J]. Journal of Software, 2018, 29(1): 150-159.)

        [5] 袁勇, 王飛躍.區(qū)塊鏈技術(shù)發(fā)展現(xiàn)狀與展望[J]. 自動化學報, 2016, 42(4): 481-494. (YUAN Y, WANG F Y. Blockchain: the state of the art and future trends [J]. Acta Automatica Sinica, 2016, 42(4): 481-494.)

        [6] TSCHORSCH F, SCHEUERMANN B. Bitcoin and beyond: a technical survey on decentralized digital currencies [J]. IEEE Communications Surveys & Tutorials, 2016, 18(3): 2084-2123.

        [7] PASS R, SEEMAN L, SHELAT A. Analysis of the blockchain protocol in asynchronous networks [C]// Proceedings of the 2017 Annual International Conference on the Theory and Applications of Cryptographic Techniques. Berlin: Springer, 2017: 643-673.

        [8] GERVAIS A, KARAME G O, WUST K, et al. On the security and performance of proof of work blockchains [C]// Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. New York: ACM, 2016: 3-16.

        [9] ATZEI N, BARTOLETTI M, CIMOLI T. A survey of attacks on Ethereum smart contracts (SoK) [C]// Proceedings of the 2017 International Conference on Principles of Security and Trust. Berlin: Springer, 2017: 164-186.

        [10] LIN I C, LIAO T C. A survey of blockchain security issues and challenges [J]. International Journal of Network Security, 2017, 19(5): 653-659.

        [11] GARCIA-MOLINA H. Database Systems: the Complete Book [M]. New Delhi: Pearson Education India, 2008: 555-615.

        [12] GRAY J, REUTER A. Transaction Processing: Concepts and Techniques [M]. Amsterdam: Elsevier, 1992: 22-40.

        [13] TSENG L. Recent results on fault-tolerant consensus in message-passing networks [C]// Proceedings of the 2016 International Colloquium on Structural Information and Communication Complexity. Berlin: Springer, 2016: 92-108.

        [14] LYNCH N A. Distributed Algorithms [M]. Amsterdam: Elsevier, 1996: 53-73.

        [15] BAILIS P, FEKETE A, FRANKLIN M J, et al. Coordination avoidance in database systems [J]. Proceedings of the VLDB Endowment, 2014, 8(3): 185-196.

        [16] ZHANG Y, WU S, JIN B, et al. A blockchain-based process provenance for cloud forensics [C]// Proceedings of the 2017 3rd IEEE International Conference on Computer and Communications. Piscataway, NJ: IEEE, 2017: 2470-2473.

        [17] BAHGA A, MADISETTI V K. Blockchain platform for industrial Internet of things [J]. Journal of Software Engineering and Applications, 2016, 9(10): 533-546.

        [18] VU Q H, LUPU M, OOI B C. Peer-to-Peer Computing: Principles and Applications [M]. Berlin: Springer, 2009: 229-277.

        [19] CHENEY J, CHITICARIU L, TAN W C. Provenance in databases: why, how, and where [J]. Foundations and Trends in Databases, 2009, 1(4): 379-474.

        [20] 邵奇峰, 金澈清, 張召, 等.區(qū)塊鏈技術(shù): 架構(gòu)及進展[J]. 計算機學報, 2018, 41(5): 969-988. (SHAO Q F, JIN C Q, ZHANG Z, et al. Blockchain: architecture and research progress [J]. Chinese Journal of Computers, 2018, 41(5): 969-988.)

        [21] MERKLE R C. A digital signature based on a conventional encryption function [C]// Proceedings of the 1987 Conference on the Theory and Application of Cryptographic Techniques. Berlin: Springer, 1987: 369-378.

        [22] LUU L, CHU D H, OLICKEL H, et al. Making smart contracts smarter [C]// Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. New York: ACM, 2016: 254-269.

        [23] MongoDB. What is MongoDB? [EB/OL]. [2018-09-05]. https://www.mongodb.com/what-is-mongodb/.

        [24] BigchainDB. Meet BigchainDB, the blockchain database [EB/OL]. [2018-09-05]. https://www.bigchaindb.com/.

        [25] Github. Go Ethereum [EB/OL]. [2018-08-08]. https://github.com/ethereum/go-ethereum/wiki/.

        [26] BONNEAU J. EthIKS: using Ethereum to audit a CONIKS key transparency log [C]// Proceedings of the 2016 International Conference on Financial Cryptography and Data Security. Berlin: Springer, 2016: 95-105.

        [27] Github. RLP encoding of Ethereum [EB/OL]. [2018-09-08]. https://github.com/ethereum/wiki/wiki/RLP/.

        [28] BERTONI G, DAEMEN J, PEETERS M, et al. Keccak sponge function family main document [EB/OL]. [2018-05-10]. https://pdfs.semanticscholar.org/0978/de0c295f158cd5afe3a145a 2e1fe6497eec7.pdf.

        [29] EYAL I, SIRER E G. Majority is not enough: bitcoin mining is vulnerable [J]. Communications of the ACM, 2018, 61(7): 95-102.

        [30] 楊保華, 陳昌.區(qū)塊鏈原理, 設計與應用[M]. 北京: 機械工業(yè)出版社, 2017: 93-97. (YANG B H, CHEN C. Principle, Programming and Applications of Blockchain[M]. Beijing: China Machine Press, 2017: 93-97.)

        [31] 申屠青春.區(qū)塊鏈開發(fā)指南[M]. 北京: 機械工業(yè)出版社, 2017: 109-146. (SHENTU Q C. Development Guide of Blockchain[M]. Beijing: China Machine Press, 2017: 109-146.)

        猜你喜歡
        智能合約區(qū)塊鏈
        農(nóng)產(chǎn)品供應鏈金融信用體系框架設計
        開放導報(2017年6期)2017-12-22 14:24:30
        基于區(qū)塊鏈技術(shù)的去中心化數(shù)字出版平臺研究
        出版科學(2017年6期)2017-12-09 07:21:42
        區(qū)塊鏈技術(shù)在互聯(lián)網(wǎng)保險行業(yè)的應用探討
        保險企業(yè)的區(qū)塊鏈技術(shù)應用方向選擇研究
        區(qū)塊鏈技術(shù)在金融領域的應用與前景研究
        中國市場(2016年32期)2016-12-06 11:21:13
        區(qū)塊鏈技術(shù)的應用價值分析
        商情(2016年40期)2016-11-28 11:24:12
        “區(qū)塊鏈”的茍且、詩和遠方
        基于區(qū)塊鏈技術(shù)的數(shù)字貨幣與傳統(tǒng)貨幣辨析
        區(qū)塊鏈技術(shù)在會計中的應用展望
        會計之友(2016年17期)2016-11-02 16:05:15
        智能合約與金融合約
        商(2016年6期)2016-04-20 17:50:36
        av无码国产在线看免费网站| 亚洲一区二区三区乱码在线| 亚洲一区二区自偷自拍另类| 国产欧美日韩中文久久| 四川老熟妇乱子xx性bbw| 久久精品国产99久久丝袜| 国产精品久久中文字幕亚洲| 国产一区二区三区天堂| 妺妺窝人体色www聚色窝| 麻豆精品久久久久久久99蜜桃 | 久久中文精品无码中文字幕下载| 国产亚洲精品看片在线观看| 成人女同av免费观看| 国产精品一区二区黄色| 色吊丝中文字幕| 男人天堂免费视频| 亚洲一区二区丝袜美腿| 国产精品视频亚洲二区| 国产麻豆精品久久一二三| 丰满少妇爆乳无码专区| 日本久久久精品免费免费理论| 一本大道熟女人妻中文字幕在线 | 成人精品一区二区三区电影| 99精品视频在线观看免费| 日韩久久无码免费看A| 中国男男女在线免费av| 成人性生交大片免费看96| 亚洲综合欧美在线| 国产精品久久熟女吞精| 天天做天天爱夜夜爽毛片毛片 | 国产一区二区丰满熟女人妻| 丝袜美腿亚洲综合在线播放 | 中国黄色一区二区三区四区| 久久超碰97人人做人人爱| 亚洲AV无码国产永久播放蜜芽| 久久久亚洲一区二区三区| 亚洲av香蕉一区区二区三区| 少妇太爽了在线观看| 国产美女久久久亚洲综合| 男女视频在线观看一区| 亚洲日韩欧洲无码av夜夜摸|