• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于聯(lián)盟鏈技術(shù)的數(shù)據(jù)交易平臺設(shè)計(jì)

      2022-07-07 12:42:46李旭
      電子技術(shù)與軟件工程 2022年5期
      關(guān)鍵詞:副本視圖合約

      李旭

      (廣東省深圳市北京大學(xué)深圳研究生院 廣東省深圳市 518071)

      1 背景

      進(jìn)年來隨著以互聯(lián)網(wǎng)為代表的信息技術(shù)高速發(fā)展推動了整個社會運(yùn)轉(zhuǎn)數(shù)字化的進(jìn)程,每時每刻在社會運(yùn)轉(zhuǎn)各個場景:消費(fèi)、企業(yè)管理、金融、工業(yè)制造、安全監(jiān)控、醫(yī)療等領(lǐng)域都在產(chǎn)生大量的數(shù)據(jù),而很多數(shù)據(jù)是極為有價值的資產(chǎn)甚至數(shù)據(jù)是一個企業(yè)的核心競爭力已是社會的普遍共識。在這個背景下數(shù)據(jù)作為一種資產(chǎn)進(jìn)行交易開始有較為迫切的訴求,但是數(shù)據(jù)交易也面臨諸多挑戰(zhàn)。如何解決這些挑戰(zhàn)成為一個意義的課題。

      2 本文主要工作

      當(dāng)前數(shù)據(jù)交易產(chǎn)業(yè)和技術(shù)研究還處在初期階段,無論還是產(chǎn)業(yè)標(biāo)準(zhǔn)以及商業(yè)化還是技術(shù)研究都不太成熟。

      數(shù)據(jù)交易的特點(diǎn):

      (1)數(shù)據(jù)易泄漏:數(shù)據(jù)作為特殊的商品,區(qū)別與實(shí)物商品,可以無輕松的復(fù)制拷貝,一旦泄漏難以追回。這使得數(shù)據(jù)賣家在交易數(shù)據(jù)過程中特別謹(jǐn)慎。

      (2)所見即所得:傳統(tǒng)商品的所有權(quán)都有一個顯式的、公認(rèn)的證明,數(shù)據(jù)商品沒有了傳統(tǒng)所有權(quán)的概念,擁有數(shù)據(jù)商品也更為簡單,成本更低,看過即擁有了數(shù)據(jù)商品,就能獲得效用。

      (3)交易的數(shù)據(jù)規(guī)模可能較大,需要考慮海量數(shù)據(jù)存儲、交割的性能。

      基于上述原因數(shù)據(jù)資產(chǎn)的交易對交易安全有著更高的訴求。目前產(chǎn)業(yè)界較為知名的數(shù)據(jù)交易市場有國內(nèi)的貴陽大數(shù)據(jù)交易所以及國外的azure在線數(shù)據(jù)市場。其模式都是通過權(quán)威的中心化機(jī)構(gòu)作為信用背書進(jìn)行交易,機(jī)構(gòu)從中收取的交易費(fèi)用。這種傳統(tǒng)中心化的數(shù)據(jù)交易平臺主要的問題是交易成本高,并且即便有第三方的權(quán)威機(jī)構(gòu)背書,由于數(shù)據(jù)交易的特殊性還是存在信任問題。

      基于上述問題近年來學(xué)者開始嘗試基于區(qū)塊鏈技術(shù)構(gòu)建交易系統(tǒng),試圖解決交易信任以及數(shù)據(jù)安全問題比如:Prabal Banerjee等人探索了區(qū)塊鏈交易市場設(shè)計(jì)挑戰(zhàn)和方向,楊茂江提出的基于密碼和區(qū)塊鏈結(jié)合的數(shù)據(jù)交易平臺設(shè)計(jì),提出了一種去中心化的數(shù)據(jù)交易思路,邵曉蓓設(shè)計(jì)的區(qū)塊鏈交易系統(tǒng),提出一種線上支付線下數(shù)據(jù)交割的設(shè)計(jì)方案。Haoqian Zhang提出了一種去中心化的信息分享方案。Benet 設(shè)計(jì)了星際文件系統(tǒng),旨在連接所有有相同的文件系統(tǒng)的計(jì)算機(jī)設(shè)備,對分布式數(shù)據(jù)的安全共享與存儲提供了較好的思路。

      總的來說這個方向目前還在探索階段,不太成熟。目前的設(shè)計(jì)主要問題是:

      (1)數(shù)據(jù)如何安全交割沒有具體的設(shè)計(jì)。

      (2)數(shù)據(jù)交割和支付過程分離,需要線上支付線下交割數(shù)據(jù)或只考慮數(shù)據(jù)交割。

      本文旨在設(shè)計(jì)一種新型的基于聯(lián)盟鏈技術(shù)的數(shù)據(jù)資產(chǎn)交易平臺,從數(shù)據(jù)發(fā)布到交易執(zhí)行全部在鏈上完成,同時支持第三方電子支付平臺進(jìn)行支付。交易和支付過程無需借助線下渠道完成。從技術(shù)上保證交易過程數(shù)據(jù)資產(chǎn)安全,可以降低交易雙方的信任成本。

      3 基于聯(lián)盟鏈的數(shù)據(jù)交易平臺設(shè)計(jì)

      3.1 系統(tǒng)實(shí)現(xiàn)方案概述

      經(jīng)過技術(shù)調(diào)研,考慮到使用場景以及大數(shù)據(jù)量存儲、交易的性能問題,系統(tǒng)的整體設(shè)計(jì)決定聯(lián)盟鏈技術(shù)上實(shí)現(xiàn)?;A(chǔ)區(qū)塊鏈平臺實(shí)現(xiàn)參考較為成熟的fisco聯(lián)盟鏈,依托fisco聯(lián)盟鏈基礎(chǔ)平臺完成如下工作:

      (1)引入了輕節(jié)點(diǎn)和全節(jié)點(diǎn)兩種不同聯(lián)盟鏈節(jié)點(diǎn),兩種節(jié)點(diǎn)配合實(shí)現(xiàn)數(shù)據(jù)交易合約的執(zhí)行,在一定程度上犧牲去中心程度來提升數(shù)據(jù)交割性能。同時在節(jié)點(diǎn)存儲設(shè)計(jì)上擴(kuò)展了世界態(tài)state數(shù)據(jù)結(jié)構(gòu),引入數(shù)據(jù)資產(chǎn)索引樹(data storage trie)結(jié)構(gòu)、數(shù)據(jù)資產(chǎn)摘要倒排索引池(data abstract inverted index pool)支撐數(shù)據(jù)的加密存儲與交割。

      (2)實(shí)現(xiàn)一種預(yù)編譯的特殊智能合約:數(shù)據(jù)交易智能合約,可以方便發(fā)布合約并在合約執(zhí)行時可以對接三方電子支付系統(tǒng),支付后自動執(zhí)行鏈上數(shù)據(jù)交割工作。

      (3)基于PBFT算法實(shí)現(xiàn)合約交易執(zhí)行共識。

      3.2 整體架構(gòu)

      本文所描述的區(qū)塊鏈交易平臺由三部分組成:全節(jié)點(diǎn)、聯(lián)盟鏈網(wǎng)絡(luò)、輕節(jié)點(diǎn)。如圖1所示。

      圖1:架構(gòu)概要

      輕節(jié)點(diǎn):輕節(jié)點(diǎn)由加盟的賣家或買家維護(hù),用于保存某個賣家發(fā)布的數(shù)據(jù)資產(chǎn)、買家買到的數(shù)據(jù)資產(chǎn)、數(shù)據(jù)資產(chǎn)摘要并通過賣家的密鑰對數(shù)據(jù)資產(chǎn)進(jìn)行加密后存儲,為提升效率降低輕節(jié)點(diǎn)的負(fù)載,每個輕節(jié)點(diǎn)只保留對應(yīng)賣家賬號發(fā)布的數(shù)據(jù)資產(chǎn)、以及對應(yīng)的數(shù)據(jù)資產(chǎn)摘要。但每個輕節(jié)點(diǎn)都保留有全網(wǎng)的區(qū)塊頭鏈以及當(dāng)前賣家賬號狀態(tài)樹。賣家通過輕節(jié)點(diǎn)發(fā)布數(shù)據(jù)后會生成一份交易智能合約。

      全節(jié)點(diǎn):保存有全網(wǎng)的區(qū)塊鏈交易記錄、全網(wǎng)數(shù)據(jù)資產(chǎn)摘要索引、交易智能合約。同時提供成員接入和認(rèn)證管理、提供數(shù)據(jù)摘要查詢能力、發(fā)起智能交易合約執(zhí)行、智能交易合約執(zhí)行結(jié)果數(shù)據(jù)維護(hù)。但是中節(jié)點(diǎn)不保存賣家數(shù)據(jù)資產(chǎn)信息只保存數(shù)據(jù)資產(chǎn)摘要信息。中心節(jié)點(diǎn)一般由平臺開發(fā)方、大機(jī)構(gòu)、大賣家、監(jiān)管機(jī)構(gòu)部署。

      聯(lián)盟鏈網(wǎng)絡(luò):輕節(jié)點(diǎn)和全節(jié)點(diǎn)通訊和執(zhí)行基礎(chǔ)能力,實(shí)現(xiàn)區(qū)塊同步、共識機(jī)制、合約執(zhí)行、連接輕節(jié)點(diǎn)和中心節(jié)點(diǎn)網(wǎng)絡(luò)、同步數(shù)據(jù)摘要索引。

      交易節(jié)點(diǎn)的分層架構(gòu)設(shè)計(jì):

      區(qū)塊鏈基礎(chǔ)服務(wù):實(shí)現(xiàn)區(qū)塊鏈的鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)、交易執(zhí)行引擎和存儲驅(qū)動、區(qū)塊鏈的基礎(chǔ)P2P網(wǎng)絡(luò)通信、共識機(jī)制和區(qū)塊同步機(jī)制。

      管理層:實(shí)現(xiàn)區(qū)塊鏈的數(shù)據(jù)資產(chǎn)管理、合約管理、用戶權(quán)限管理。

      接口層:對用戶提供http服務(wù),封裝交易平臺能力。

      輕節(jié)點(diǎn)和中心節(jié)點(diǎn)的區(qū)別:

      (1)輕節(jié)點(diǎn)不提供全網(wǎng)數(shù)據(jù)資產(chǎn)摘要索引,該索引只存在與全節(jié)點(diǎn)中,因此買家查詢數(shù)據(jù)摘要信息需要路由到中心節(jié)點(diǎn)查詢。

      (2)合約執(zhí)行流程輕節(jié)點(diǎn)和中心節(jié)點(diǎn)職責(zé)不同。合約執(zhí)行主要由中心節(jié)點(diǎn)發(fā)起調(diào)度執(zhí)行,輕節(jié)點(diǎn)參與合約執(zhí)行驗(yàn)證、共識以及提供本地?cái)?shù)據(jù)。詳細(xì)見2.5章節(jié)。

      3.3 節(jié)點(diǎn)存儲設(shè)計(jì)

      全局的數(shù)據(jù)存儲基于全局?jǐn)?shù)據(jù)存儲設(shè)計(jì)如下所示。在傳統(tǒng)聯(lián)盟鏈設(shè)計(jì)基礎(chǔ)上新增數(shù)據(jù)結(jié)構(gòu),用于存儲賬戶擁有的數(shù)據(jù)資產(chǎn)索引。

      其中數(shù)據(jù)資產(chǎn)文件只會存儲在輕節(jié)點(diǎn)中,數(shù)據(jù)資產(chǎn)摘要倒排索引只存在全節(jié)點(diǎn)中。數(shù)據(jù)資產(chǎn)索引樹在輕節(jié)點(diǎn)和全節(jié)點(diǎn)中都會存儲。

      3.3.1 賬戶狀態(tài)account state

      有兩種類型的賬戶:

      用戶持有 – 私鑰的所有者控制

      交易合約 – 一種由代碼控制,部署在網(wǎng)絡(luò)上的智能交易合約。

      字段名稱 類型 描述nonce Unit64顯示從帳戶發(fā)送的交易數(shù)量的計(jì)數(shù)器balance 這個地址擁有的 Wei 數(shù)量codeHash Byte[]該哈希表示以太坊虛擬機(jī) (EVM) 上的帳戶代碼storageRoot Byte[]存儲hash dataHash Byte[]數(shù)據(jù)資產(chǎn)存儲hash

      3.3.2 交易transtation

      記錄交易結(jié)構(gòu)信息

      字段名稱 類型 描述type enum 交易類型,表明該交易是創(chuàng)建合約還是調(diào)用合約交易nonce u256 消息發(fā)送方提供的隨機(jī)數(shù),用于唯一標(biāo)識交易value u256 轉(zhuǎn)賬數(shù)額,目前不需要receiveAddress h160 交易接收方地址gasPrice u256 本次交易的gas的單價gas u256 次交易允許最多消耗的gas數(shù)量data Byte[]與交易相關(guān)的數(shù)據(jù),或者是創(chuàng)建合約時的初始化參數(shù)chainId u256 記錄本次交易所屬的鏈信息/業(yè)務(wù)信息groupId u256 記錄本次交易所屬的群組extraData Byte[]預(yù)留字段,記錄交易信息

      3.3.3 區(qū)塊頭

      字段名稱 類型 描述parentHash h256 父區(qū)塊的哈希值stateRoot h256 狀態(tài)樹的根哈希值transactionsRoot h256 交易樹的根哈希值receiptsRoot h256 收據(jù)樹的根哈希值dbHash h256 分布式存儲通過計(jì)算哈希值來記錄一區(qū)塊中寫入的數(shù)據(jù)number int64_t 本區(qū)塊的塊號,塊號從0號開始計(jì)算gasLimit u256 本區(qū)塊中所有交易消耗的Gas上限gasUsed u256 本區(qū)塊中所有交易使用的Gas之和timestamp int64_t 打包區(qū)塊的unix時間戳

      3.3.4 數(shù)據(jù)資產(chǎn)信息datainfo

      記錄數(shù)據(jù)資產(chǎn)存儲相關(guān)信息

      字段名稱 類型 描述dataAbstractHash Byte[]數(shù)據(jù)摘要索引hash dataHash Byte[]數(shù)據(jù)內(nèi)容hash dataFileAddress Byte[]數(shù)據(jù)存儲文件地址

      3.4 預(yù)編譯交易合約運(yùn)行交互流程

      整體交互協(xié)議設(shè)計(jì)如圖2所示:描述了預(yù)編譯交易合約(以下簡稱合約)的發(fā)布、執(zhí)行流程。

      圖2:數(shù)據(jù)交易智能合約執(zhí)行流程

      3.4.1 預(yù)編譯合約

      所謂預(yù)編譯合約會被區(qū)塊執(zhí)行引擎所調(diào)用,區(qū)塊驗(yàn)證器通過區(qū)塊執(zhí)行引擎來執(zhí)行區(qū)塊,執(zhí)行引擎執(zhí)行區(qū)塊時,會根據(jù)被調(diào)用合約的地址,來判斷使用EVM還是預(yù)編譯合約引擎。

      當(dāng)被調(diào)用的合約地址是EVM合約時,執(zhí)行引擎會創(chuàng)建并執(zhí)行EVM來執(zhí)行交易;當(dāng)被調(diào)用合約地址是已注冊的預(yù)編譯合約地址時,執(zhí)行引擎通過調(diào)用地址對應(yīng)的預(yù)編譯合約接口來執(zhí)行交易。本方案中的交易智能合約即采用預(yù)編譯合約的方式實(shí)現(xiàn)。

      3.4.2 合約發(fā)布

      賣家通過本地本地輕節(jié)點(diǎn)發(fā)布合約。

      (1)輕節(jié)點(diǎn)獲取到賣家賬號公鑰,通過公鑰加密待交易的數(shù)據(jù),將加密后的數(shù)據(jù)作為文件存儲。同時將數(shù)據(jù)摘要信息打包生成數(shù)據(jù)摘要索引以便提供搜索。

      (2)輕節(jié)點(diǎn)加載預(yù)編譯數(shù)據(jù)交易合約模版,向全網(wǎng)發(fā)起數(shù)據(jù)交易合約交易廣播。

      (3)其他節(jié)點(diǎn)執(zhí)行發(fā)布合約交易,將本次合約寫入本地區(qū)塊中。中心節(jié)點(diǎn)在交易過程中扮演著核心作用,因此系統(tǒng)必須在超過1/3的中心節(jié)點(diǎn)寫入合約成功后發(fā)布發(fā)布才算成功。

      3.4.3 合約執(zhí)行

      買家通過本地的輕節(jié)點(diǎn)發(fā)起合約執(zhí)行。

      (1)輕節(jié)點(diǎn)首先會找到一個中心節(jié)點(diǎn)發(fā)起合約執(zhí)行請求,中心節(jié)點(diǎn)接到到該請求后自動執(zhí)行合約代碼,根據(jù)請求調(diào)用三方電子支付系統(tǒng)生成支付鏈接或付款碼。

      (2)買家根據(jù)中心節(jié)點(diǎn)合約執(zhí)行生產(chǎn)的付款碼使用第三方電子支付系統(tǒng)支付。支付成功后第三方電子支付系統(tǒng)根據(jù)回調(diào)地址通知中心節(jié)點(diǎn)支付是否成功。

      (3)如果支付成功,中心節(jié)點(diǎn)根據(jù)合約記錄周到對應(yīng)的賣家輕節(jié)點(diǎn)地址,以及本地支付的買家輕節(jié)點(diǎn)地址。然后發(fā)起數(shù)據(jù)傳輸指令。

      (4)買賣雙方輕節(jié)點(diǎn)根據(jù)中心節(jié)點(diǎn)指令建立安全通訊信道,通過握手協(xié)議生成本次傳輸數(shù)據(jù)的密鑰。賣家輕節(jié)點(diǎn)在內(nèi)存中通過賣家私鑰對數(shù)據(jù)解密,并通過安全信道將數(shù)據(jù)發(fā)送到買家輕節(jié)點(diǎn)中。

      (5)買家輕節(jié)點(diǎn)收到數(shù)據(jù)后通知中心節(jié)點(diǎn)數(shù)據(jù)交割完成。

      (6)中心節(jié)點(diǎn)收到數(shù)據(jù)交割完成消息后更新本地狀態(tài)數(shù)據(jù),并將本次交易快照打包后廣播。其他節(jié)點(diǎn)驗(yàn)證交易并更新本地交易記錄,完成合約執(zhí)行。

      3.5 合約共識算法

      一個合約在某個中心節(jié)點(diǎn)執(zhí)行完成后需要在全網(wǎng)達(dá)成共識。本文共識算法設(shè)計(jì)基于PBFT算法設(shè)計(jì),適用于本交易平臺交易的共識。

      算法共有無種消息:

      PrepareReqPacket:

      包含區(qū)塊的請求包,由leader產(chǎn)生并向所有Replica節(jié)點(diǎn)廣播,Replica節(jié)點(diǎn)收到Prepare包后,驗(yàn)證PrepareReq簽名、執(zhí)行區(qū)塊并緩存區(qū)塊執(zhí)行結(jié)果,達(dá)到防止拜占庭節(jié)點(diǎn)作惡、保證區(qū)塊執(zhí)行結(jié)果的最終確定性的目的;

      SignReqPacket:

      帶有區(qū)塊執(zhí)行結(jié)果的簽名請求,由收到Prepare包并執(zhí)行完區(qū)塊的共識節(jié)點(diǎn)產(chǎn)生,SignReq請求帶有執(zhí)行后區(qū)塊的hash以及該hash的簽名,分別記為SignReq.block_hash和SignReq.sig,節(jié)點(diǎn)將SignReq廣播到所有其他共識節(jié)點(diǎn)后,其他節(jié)點(diǎn)對SignReq(即區(qū)塊執(zhí)行結(jié)果)進(jìn)行共識;

      CommitReqPacket:

      用于確認(rèn)區(qū)塊執(zhí)行結(jié)果的提交請求,由收集滿(2*f+1)個block_hash相同且來自不同節(jié)點(diǎn)SignReq請求的節(jié)點(diǎn)產(chǎn)生,CommitReq被廣播給所有其他共識節(jié)點(diǎn),其他節(jié)點(diǎn)收集滿(2*f+1)個block_hash相同、來自不同節(jié)點(diǎn)的CommitReq后,將本地節(jié)點(diǎn)緩存的最新區(qū)塊上鏈;

      ReplayReqPacket:

      確認(rèn)CommitReqPacket請求的回復(fù)消息。

      ViewChangeReqPacket:

      視圖切換請求,當(dāng)leader無法提供正常服務(wù)(如網(wǎng)絡(luò)連接不正常、服務(wù)器宕機(jī)等)時,其他共識節(jié)點(diǎn)會主動觸發(fā)視圖切換,ViewChangeReq中帶有該節(jié)點(diǎn)即將切換到的視圖(記為toView,為當(dāng)前視圖加一),某節(jié)點(diǎn)收集滿(2*f+1)個視圖等于toView、來自不同節(jié)點(diǎn)的ViewChangeReq后,會將當(dāng)前視圖切換為toView。

      算法流程描述如下:

      3.5.1 REQUEST

      交易合約執(zhí)行過程中某個被選中執(zhí)行的全節(jié)點(diǎn)(執(zhí)行節(jié)點(diǎn))執(zhí)行交易合約,驗(yàn)證支付結(jié)果通過后更新本地?cái)?shù)據(jù)庫支付狀態(tài),向主節(jié)點(diǎn)(一定是全節(jié)點(diǎn))p發(fā)送請求。o: 請求的具體操作,這里是支付結(jié)果以及交易記錄更新,t: 請求時客戶端追加的時間戳,c:輕節(jié)點(diǎn)標(biāo)識。REQUEST: 包含交易的執(zhí)行結(jié)果內(nèi)容m,以及消息摘要d(m)。執(zhí)行節(jié)點(diǎn)對請求進(jìn)行簽名。

      3.5.2 PRE-PREPARE

      主節(jié)點(diǎn)(只能是全節(jié)點(diǎn))收到執(zhí)行節(jié)點(diǎn)請求,需要進(jìn)行以下交驗(yàn):

      a.請求消息簽名是否正確。

      非法請求丟棄。正確請求,分配一個編號n,編號n主要用于對執(zhí)行節(jié)點(diǎn)的請求進(jìn)行排序。然后廣播一條消息PrepareReqPacket,m>消息給其他副本節(jié)點(diǎn)(包含全節(jié)點(diǎn)和輕節(jié)點(diǎn))。v:視圖編號,d執(zhí)行節(jié)點(diǎn)消息摘要,m消息內(nèi)容。進(jìn)行主節(jié)點(diǎn)簽名。n是要在某一個范圍區(qū)間內(nèi)的[h,H]。

      為了保持消息較小。

      3.5.3 PREPARE

      副本節(jié)點(diǎn)(包含主節(jié)點(diǎn)和輕節(jié)點(diǎn))i收到主節(jié)點(diǎn)的PrepareReqPacket消息,需要進(jìn)行以下校驗(yàn):

      a.主節(jié)點(diǎn)PrepareReqPacket消息簽名是否正確。

      b.當(dāng)前副本節(jié)點(diǎn)是否已經(jīng)收到了一條在同一v下并且編號也是n,但是簽名不同的PrepareReqPacket消息。沒有收到是合法的 這是為了以防主節(jié)點(diǎn)作惡,將不同的請求分到相同的n,從而在其他節(jié)點(diǎn)產(chǎn)生請求混亂 因?yàn)樵诙虝r間會有很多請求,各個請求通過v和n區(qū)分,從而相同請求在各個節(jié)點(diǎn)一起執(zhí)行。

      c.d與m的摘要是否一致。

      d.n是否在區(qū)間[h,H]內(nèi)。非法請求丟棄。正確請求,副本節(jié)點(diǎn)i向其他節(jié)點(diǎn)包括主節(jié)點(diǎn)發(fā)送一條SignReqPacket消息,v,n,d與上述PrepareReqPacket消息內(nèi)容相同,i是當(dāng)前副本節(jié)點(diǎn)編號。不傳m,因?yàn)槊總€節(jié)點(diǎn)已經(jīng)有PrepareReqPacket了,所以有請求m,之后就不用再傳m了,只需要傳簽名d來驗(yàn)證即可,節(jié)省流量。SignReqPacket進(jìn)行副本節(jié)點(diǎn)i的簽名。每一步都要由發(fā)送方進(jìn)行簽名,防止偽造。

      3.5.4 COMMIT

      主節(jié)點(diǎn)和副本節(jié)點(diǎn)收到SignReqPacket消息,需要進(jìn)行以下校驗(yàn):

      a.副本節(jié)點(diǎn)SignReqPacket消息簽名是否正確。

      b.當(dāng)前副本節(jié)點(diǎn)是否已經(jīng)收到了同一視圖v下的n。

      c.n是否在區(qū)間[h,H]內(nèi)。

      d.d是否和當(dāng)前已收到PrepareReqPacket中的d相同非法請求丟棄。如果副本節(jié)點(diǎn)i收到了2f+1個驗(yàn)證通過的SignReqPacket消息(表明至少有f+1個誠實(shí)節(jié)點(diǎn)在視圖v中發(fā)送了序列號為n的PrepareReqPacket消息或者是SignReqPacket消息),則向其他節(jié)點(diǎn)包括主節(jié)點(diǎn)發(fā)送一條CommitReqPacket,m>消息,v,n,d,i與上述SignReqPacket消息內(nèi)容相同。CommitReqPacket進(jìn)行副本節(jié)點(diǎn)i的簽名。記錄CommitReqPacket消息到日志中,用于View Change過程中恢復(fù)未完成的請求操作。記錄其他副本節(jié)點(diǎn)發(fā)送的SignReqPacket消息到log中。

      CommitReqPacket消息的內(nèi)容SignReqPacketPrepare消息內(nèi)容相同,但消息類型和數(shù)字簽名是不同的,所以可以區(qū)分。

      3.5.5 REPLY

      主節(jié)點(diǎn)和副本節(jié)點(diǎn)收到CommitReqPacket消息,需要進(jìn)行以下校驗(yàn):

      a.副本節(jié)點(diǎn)CommitReqPacket消息簽名是否正確。

      b.當(dāng)前副本節(jié)點(diǎn)是否已經(jīng)收到了同一視圖v下的n。

      c.d與m的摘要是否一致。

      d.n是否在區(qū)間[h,H]內(nèi)。非法請求丟棄。如果副本節(jié)點(diǎn)i收到了2f+1個驗(yàn)證通過的CommitReqPacket消息,說明當(dāng)前網(wǎng)絡(luò)中的大部分節(jié)點(diǎn)已經(jīng)達(dá)成共識,運(yùn)行客戶端的請求操作o,并返回ReplayReqPacket給執(zhí)行節(jié)點(diǎn),r:是請求操作結(jié)果,客戶端如果收到f+1個相同的ReplayReqPacket消息,說明執(zhí)行節(jié)點(diǎn)發(fā)起的交易結(jié)果已經(jīng)達(dá)成全網(wǎng)共識,否則客戶端需要判斷是否重新發(fā)送請求給主節(jié)點(diǎn)。記錄其他副本節(jié)點(diǎn)發(fā)送的CommitReqPacket消息到log中。

      3.5.6 VIEW CHANGE:

      當(dāng)共識超時時,系統(tǒng)會試圖切換到更高的視圖(將要切換到的視圖toView加一),并觸發(fā)ViewChange處理流程;節(jié)點(diǎn)收到ViewChange包時,也會觸發(fā)ViewChange處理流程:

      (1)判斷ViewChange包是否有效,有效的View Change請求中帶有的塊高值必須不小于當(dāng)前節(jié)點(diǎn)最高塊高,視圖必須大于當(dāng)前節(jié)點(diǎn)視圖。

      (2)緩存有效ViewChange包,防止相同的View Change請求被處理多次,也作為判斷節(jié)點(diǎn)是否可以切換視圖的統(tǒng)計(jì)依據(jù)。

      (3)收集ViewChange包,若收到的ViewChange包中附帶的view等于本節(jié)點(diǎn)的即將切換到的視圖toView且本節(jié)點(diǎn)收集滿2*f+1來自不同節(jié)點(diǎn)view等于toView的ViewChange包,則說明超過三分之二的節(jié)點(diǎn)要切換到toView視圖,切換當(dāng)前視圖到toView。

      5 交易性能評估

      交易效率受到很多方面的影響,本實(shí)驗(yàn)在普通商用服務(wù)器(8核16G)部署3臺中心節(jié)點(diǎn)2臺輕節(jié)點(diǎn),整體性能表現(xiàn)上交易TPS與交易數(shù)據(jù)大小強(qiáng)相關(guān),主要的瓶頸在數(shù)據(jù)交割傳輸以及數(shù)據(jù)加解密。測試過程中mock外部三方電子支付系統(tǒng)交互。性能表現(xiàn):

      數(shù)據(jù)10byte左右,交易峰值TPS在1700左右,交易數(shù)據(jù)大小超過1mb后性能急劇下降到10TPS左右,交易時間近似等于p2p數(shù)據(jù)交割時間??梢娤到y(tǒng)性能優(yōu)化方向主要在數(shù)據(jù)交割部分。如圖3所示。

      圖3:交易性能數(shù)據(jù)

      6 總結(jié)

      本文通過在傳統(tǒng)的聯(lián)盟鏈技術(shù)上改進(jìn):引入輕節(jié)點(diǎn)和中心節(jié)點(diǎn),并設(shè)計(jì)預(yù)編譯數(shù)據(jù)交易合約協(xié)議和共識算法打通三方電子支付系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)資產(chǎn)的線上交易和數(shù)據(jù)線上交割。較好的保護(hù)了數(shù)據(jù)在交易過程的安全性,通過技術(shù)手段提升了交易雙方的信任感,同時降低了雙方的交易成本。

      不足之處是本方案考慮到交易性能、數(shù)據(jù)存儲成本、數(shù)據(jù)交割成本,采用半去中心化的技術(shù),海量的敏感數(shù)據(jù)只存儲在本地輕節(jié)點(diǎn)中,在一定程度上會降低交易合約執(zhí)行的可靠性。同時面對大數(shù)據(jù)量的數(shù)據(jù)交割時性能會是一個瓶頸,如何將輕節(jié)點(diǎn)數(shù)據(jù)存儲完全分布式化并保證交易性能以及數(shù)據(jù)安全有待進(jìn)一步研究。

      猜你喜歡
      副本視圖合約
      面向流媒體基于蟻群的副本選擇算法①
      5.3 視圖與投影
      視圖
      Y—20重型運(yùn)輸機(jī)多視圖
      SA2型76毫米車載高炮多視圖
      副本放置中的更新策略及算法*
      樹形網(wǎng)絡(luò)中的副本更新策略及算法*
      合約必守,誰能例外!——對“情勢變更”制度不可寄于過高期望
      沁源县| 清涧县| 屏边| 堆龙德庆县| 庆安县| 河南省| 财经| 沁阳市| 凤城市| 凤冈县| 蛟河市| 手游| 易门县| 葫芦岛市| 怀集县| 永和县| 岳阳县| 西乌| 米泉市| 新绛县| 新乡县| 会宁县| 六盘水市| 永登县| 雷波县| 余庆县| 万盛区| 罗平县| 射洪县| 济源市| 始兴县| 潼南县| 泰宁县| 馆陶县| 隆林| 仁寿县| 时尚| 商都县| 循化| 肇源县| 米脂县|