區(qū)塊鏈智能合約技術(shù)與應(yīng)用 課件 第3章 超級(jí)賬本_第1頁
區(qū)塊鏈智能合約技術(shù)與應(yīng)用 課件 第3章 超級(jí)賬本_第2頁
區(qū)塊鏈智能合約技術(shù)與應(yīng)用 課件 第3章 超級(jí)賬本_第3頁
區(qū)塊鏈智能合約技術(shù)與應(yīng)用 課件 第3章 超級(jí)賬本_第4頁
區(qū)塊鏈智能合約技術(shù)與應(yīng)用 課件 第3章 超級(jí)賬本_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第3章超級(jí)賬本3.1超級(jí)賬本介紹3.2社區(qū)組織結(jié)構(gòu)3.3頂級(jí)項(xiàng)目介紹3.4超級(jí)賬本系統(tǒng)架構(gòu)3.5超級(jí)賬本的組成模型本章小結(jié)

3.1超級(jí)賬本介紹

3.1.1項(xiàng)目簡(jiǎn)介超級(jí)賬本成立之初,就收到了眾多的開源技術(shù)貢獻(xiàn)。IBM貢獻(xiàn)了4萬多行已有的OpenBlockchain代碼,DigitalAsset貢獻(xiàn)了企業(yè)和開發(fā)者相關(guān)資源,R3貢獻(xiàn)了新的金融交易架構(gòu),Intel也貢獻(xiàn)了分布式賬本相關(guān)的代碼。

作為一個(gè)聯(lián)合項(xiàng)目(CollaborativeProject),超級(jí)賬本由面向不同目的和場(chǎng)景的子項(xiàng)目構(gòu)成,目前包括Fabric、Sawtooth、Iroha、BlockchainExplorer、Cello、Indy、Composer、Burrow等八大頂級(jí)項(xiàng)目。所有項(xiàng)目都遵守Apachev2許可協(xié)議(ApacheLicence是著名的非盈利開源組織Apache采用的協(xié)議,該協(xié)議鼓勵(lì)代碼共享和尊重原作者的著作權(quán),允許將代碼修改后作為開源或商業(yè)軟件再行發(fā)布),并約定共同遵守如下的基本原則:

(1)重視模塊化設(shè)計(jì):包括交易、合同、一致性、身份、存儲(chǔ)等技術(shù)場(chǎng)景。

(2)重視代碼可讀性:確保新功能和模塊都可以很容易地實(shí)現(xiàn)添加和擴(kuò)展。

(3)可持續(xù)的演化路線:隨著需求的深入和更多應(yīng)用場(chǎng)景的出現(xiàn),將不斷增加和演化新的項(xiàng)目。

超級(jí)賬本的企業(yè)會(huì)員和技術(shù)項(xiàng)目發(fā)展都非常迅速,如圖3-1所示。圖3-1超級(jí)賬本項(xiàng)目快速成長(zhǎng)

3.1.2超級(jí)賬本概述

HyperLedgerFabric是超級(jí)賬本上的區(qū)塊鏈項(xiàng)目之一。跟其他區(qū)塊鏈技術(shù)相同,HyperLedgerFabric也有賬本,也使用智能合約,是一個(gè)由參與者共同管理的系統(tǒng)。

但與其他區(qū)塊鏈系統(tǒng)不同的地方是,超級(jí)賬本是私有的,它不是一個(gè)開放的系統(tǒng),所有的參與者必須是已經(jīng)注冊(cè)過身份的組織。

超級(jí)賬本還提供了可插拔的組件,賬本的數(shù)據(jù)可以用多種格式存儲(chǔ)。此外,超級(jí)賬本協(xié)商一致的機(jī)制可以被轉(zhuǎn)換和輸出為多種格式,使其在各個(gè)區(qū)塊鏈分布式賬本中使用執(zhí)行。

1.共享賬本

共享的許可制賬本(SharedPermissionedLedger)是僅可附加的記錄系統(tǒng)(SystemOfRecord,SOR)和單一事實(shí)來源。它對(duì)業(yè)務(wù)網(wǎng)絡(luò)的所有參與成員均可見。

超級(jí)賬本有一個(gè)分類子系統(tǒng),由世界狀態(tài)(WorldState)和事務(wù)日志(TransactionLog)兩個(gè)部分組成。

世界狀態(tài)描述總賬的狀態(tài),是賬本的數(shù)據(jù)庫;事務(wù)日志記錄導(dǎo)致當(dāng)前世界狀態(tài)值改變的日志。每一個(gè)參與者都有一份屬于自己的賬本副本,存儲(chǔ)在他們所屬的超級(jí)賬本網(wǎng)絡(luò)上。

2.智能合約

超級(jí)賬本的智能合約是用Chaincode(鏈碼)編寫的。Chaincode支持?jǐn)?shù)種語言編程,目前支持的是Go語言,在今后的版本中會(huì)新增java等其他語言。

在大多數(shù)情況下,Chaincode只與總賬的數(shù)據(jù)庫交互,例如世界狀態(tài)。

3.隱私

超級(jí)賬本網(wǎng)絡(luò)中的參與者是企業(yè)節(jié)點(diǎn),而企業(yè)商業(yè)信息是非常敏感的內(nèi)容,因此超級(jí)賬本把使用頻道技術(shù)來保護(hù)隱私作為該區(qū)塊鏈網(wǎng)絡(luò)的核心目標(biāo)之一。

4.共識(shí)

事務(wù)必須按照它們發(fā)生的順序?qū)懭胭~本中。通過前兩章的學(xué)習(xí),我們已經(jīng)知道了對(duì)于比特幣來說,排序是通過“挖礦”來實(shí)現(xiàn)的。對(duì)于PBFT(拜占庭式容錯(cuò))來說,它可以為文件副本提供一種相互通信的機(jī)制,來保持副本間的一致性。

超級(jí)賬本的共識(shí)機(jī)制目前包括Solo和Kafka兩種。網(wǎng)絡(luò)啟動(dòng)者可以選擇一種最能代表參與者之間關(guān)系的共識(shí)機(jī)制。

3.2社區(qū)組織結(jié)構(gòu)

3.2.1基本結(jié)構(gòu)超級(jí)賬本社區(qū)目前主要是三駕馬車領(lǐng)導(dǎo)的結(jié)構(gòu),如圖3-2所示。圖3-2三駕馬車結(jié)構(gòu)

3.2.2大中華區(qū)技術(shù)工作組

技術(shù)工作組的主要職責(zé)包括如下:

(1)帶領(lǐng)和引導(dǎo)中國內(nèi)地的技術(shù)相關(guān)活動(dòng),包括貢獻(xiàn)代碼、指南文檔、項(xiàng)目提案等。

(2)推動(dòng)相關(guān)技術(shù)的交流,促進(jìn)會(huì)員企業(yè)之間的合作和實(shí)踐案例的落地,通過郵件列表、RocketChat、論壇等方式促進(jìn)社區(qū)開發(fā)者們的技術(shù)交流。

(3)協(xié)助舉辦社區(qū)活動(dòng),如Meetup、黑客松、Hackfest、技術(shù)分享、人員培訓(xùn)等。

3.3頂級(jí)項(xiàng)目介紹

3.3.1

Fabric項(xiàng)目

Fabric是最早加入到超級(jí)賬本項(xiàng)目中的頂級(jí)項(xiàng)目,包括Fabric、FabricCA、FabricSDK(包括Node.Js、Python和Java等語言)和fabric-api等,目標(biāo)是區(qū)塊鏈的基礎(chǔ)核心平臺(tái),支持PBFT等新的共識(shí)機(jī)制,支持權(quán)限管理,最早由IBM和DAH等企業(yè)于2015年底提交到社區(qū)。項(xiàng)目在GitHub上,地址為/hyperledger/fabric。

該項(xiàng)目的定位是面向企業(yè)的分布式賬本平臺(tái),創(chuàng)新地引入了權(quán)限管理支持,設(shè)計(jì)上支持可插拔、可擴(kuò)展,是首個(gè)面向聯(lián)盟鏈場(chǎng)景的開源項(xiàng)目。

Fabric基于Go語言實(shí)現(xiàn),目前提交次數(shù)已經(jīng)超過5000次,核心代碼超過8萬行。

Fabric項(xiàng)目目前處于活躍狀態(tài),已發(fā)布1.0正式版本,同時(shí)包括FabricCA、FabricSDK等多個(gè)相關(guān)的子項(xiàng)目。

3.3.2

Composer項(xiàng)目

Composer項(xiàng)目提供面向鏈碼開發(fā)的高級(jí)語言支持,可自動(dòng)生成鏈碼,由IBM團(tuán)隊(duì)于2017年3月底貢獻(xiàn)到社區(qū),試圖提供一個(gè)HyperledgerFabric的開發(fā)輔助框架。使用Composer,開發(fā)人員可以使用JavaScript語言定義應(yīng)用邏輯,再加上資源、參與者、交易等模型和訪問規(guī)則,生成HyperledgerFabric支持的鏈碼。

該項(xiàng)目主要由NodeJs語言開發(fā),目前已有超過4000次提交。

3.3.3

Sawtooth項(xiàng)目

Sawtooth項(xiàng)目包括arcade、core、dev-tools、validator、mktplace等,支持全新的、基于硬件芯片的共識(shí)機(jī)制ProofofElapsedTime(PoET)。Sawtooth項(xiàng)目由Intel等企業(yè)于2016年4月提交到社區(qū)。核心代碼在GitHub上,地址為/hyperledger/sawtooth-core。

該項(xiàng)目的定位也是分布式賬本平臺(tái),基于Python語言實(shí)現(xiàn),目前提交次數(shù)已經(jīng)超過3000次。

Sawtooth項(xiàng)目利用Intel芯片的專屬功能,實(shí)現(xiàn)了低功耗的ProofofElaspedTime(PoET)共識(shí)機(jī)制,并支持交易族(TransactionFamily),方便用戶使用它來快速開發(fā)應(yīng)用。

3.3.4

Iroha項(xiàng)目

Iroha是賬本平臺(tái)項(xiàng)目,基于C++?實(shí)現(xiàn),帶有不少面向Web和Mobile的特性項(xiàng)目。Iroha由Soramitsu等企業(yè)于2016年10月提交到社區(qū)。核心代碼在GitHub上,地址為http://github.com/hyperledger/iroha。

該項(xiàng)目的定位是分布式賬本平臺(tái)框架,基于C++?語言實(shí)現(xiàn),目前提交次數(shù)已經(jīng)超過2000次。

Iroha項(xiàng)目在設(shè)計(jì)上類似Fabric,同時(shí)提供了基于C++?的區(qū)塊鏈開發(fā)環(huán)境,并考慮了移動(dòng)端和Web端的一些需求。

3.3.5

Burrow項(xiàng)目

Burrow項(xiàng)目提供以太坊虛擬機(jī)的支持,實(shí)現(xiàn)支持高效交易的帶權(quán)限的區(qū)塊鏈平臺(tái),由Monax、Intel等企業(yè)于2017年4月提交到社區(qū)。核心代碼在GitHub上地址為http://github.com/hyperledger/burrow。

該項(xiàng)目的前身為eris-db,基于Go語言實(shí)現(xiàn),目前提交次數(shù)已經(jīng)超過1000次。

Burrow項(xiàng)目提供了支持以太坊虛擬機(jī)的智能合約區(qū)塊鏈平臺(tái),并支持Proof-of-Stake共識(shí)機(jī)制和權(quán)限管理,可以提供快速的區(qū)塊鏈交易。

3.3.6

BlockchainExplorer項(xiàng)目

BlockchainExplorer項(xiàng)目提供Web操作界面,可通過界面快速查看查詢綁定區(qū)塊鏈的狀態(tài)(區(qū)塊個(gè)數(shù)、交易歷史)信息等。BlockchainExplorer項(xiàng)目由Intel、DTCC、IBM等企業(yè)于2016年8月提交到社區(qū)。核心代碼在GitHub上,地址為/hyperledger/blockchain-explorer。

該項(xiàng)目的定位是區(qū)塊鏈平臺(tái)的瀏覽器,基于Node.js語言實(shí)現(xiàn),提供Web操作界面。用戶可以使用它來快速查看底層區(qū)塊鏈平臺(tái)的運(yùn)行信息,如區(qū)塊個(gè)數(shù)、交易情況、網(wǎng)絡(luò)狀況等。

3.3.7

Cello項(xiàng)目

Cello提供區(qū)塊鏈平臺(tái)的部署和運(yùn)行時(shí)管理功能。使用Cello,管理員可以輕松部署和管理多條區(qū)塊鏈,應(yīng)用開發(fā)者亦無需關(guān)心如何搭建和維護(hù)區(qū)塊鏈。Cello項(xiàng)目由IBM技術(shù)團(tuán)隊(duì)于2017年1月貢獻(xiàn)到社區(qū)。GitHub倉庫地址為/hyperledger/cello(核心代碼)和/hyperledger/cello-analytics(側(cè)重?cái)?shù)據(jù)分析)。

3.3.8

Indy項(xiàng)目

Composer提供基于分布式賬本技術(shù)的數(shù)字身份管理機(jī)制,項(xiàng)目由IBM團(tuán)隊(duì)于2017年3月底貢獻(xiàn)到社區(qū),試圖提供一個(gè)HyperledgerFabric的開發(fā)輔助框架。使用Composer,開發(fā)人員可以使用JavaScript語言定義應(yīng)用邏輯,再加上資源、參與者、交易等模型和訪問規(guī)則,生成HyperledgerFabric支持的鏈碼。

該項(xiàng)目主要由NodeJs語言開發(fā),目前已有超過4000次提交。

這些頂級(jí)項(xiàng)目之間相互協(xié)作,構(gòu)成了完善的生態(tài)系統(tǒng),如圖3-3所示。圖3-3頂級(jí)項(xiàng)目生態(tài)系統(tǒng)

3.4超級(jí)賬本系統(tǒng)架構(gòu)

區(qū)塊鏈的業(yè)務(wù)需求多種多樣,其中一些業(yè)務(wù)要求在快速達(dá)成網(wǎng)絡(luò)共識(shí)及快速確認(rèn)區(qū)塊后立刻將區(qū)塊加入?yún)^(qū)塊鏈中;另一些業(yè)務(wù)可以接受相對(duì)緩慢的處理時(shí)間,以換取信任。各行各業(yè)在擴(kuò)展性、可信度、合法性、工作復(fù)雜度以及安全性等方面的需求和用途都不盡相同。我們先來看一下企業(yè)級(jí)區(qū)塊鏈系統(tǒng)中常見的模塊構(gòu)成,如圖3-4所示。圖3-4企業(yè)級(jí)區(qū)塊鏈系統(tǒng)的常用功能

HyperledgerFabric1.0是一種通用的區(qū)塊鏈節(jié)點(diǎn)技術(shù),其設(shè)計(jì)目標(biāo)是利用一些成熟的技術(shù)實(shí)現(xiàn)分布式賬本技術(shù)(DirtributedLedgerTechnology,DLT)。超級(jí)賬本采用模塊化架構(gòu)設(shè)計(jì),復(fù)用通用的功能模塊和接口。模塊化的方法帶來了可擴(kuò)展性、靈活性等優(yōu)勢(shì),會(huì)減少模塊修改、升級(jí)帶來的影響,適用于區(qū)塊鏈應(yīng)用系統(tǒng)的開發(fā)和部署。HyperledgerFabric1.0設(shè)計(jì)有以下幾個(gè)特點(diǎn):

(1)模塊插件化。很多功能模塊(如CA模塊、共識(shí)算法、狀態(tài)數(shù)據(jù)庫存儲(chǔ)等)都是可插拔的,系統(tǒng)提供了通用接口和默認(rèn)的實(shí)現(xiàn)方法,這滿足了大多數(shù)業(yè)務(wù)需求。這些模塊也可以根據(jù)需求進(jìn)行擴(kuò)展,集成到系統(tǒng)中。

(2)充分利用容器技術(shù)。在HyperledgerFabric1.0中,不僅節(jié)點(diǎn)使用容器作為運(yùn)行環(huán)境,鏈碼也默認(rèn)運(yùn)行在安全的容器中。應(yīng)用程序或者外部系統(tǒng)不能直接操作鏈碼,必須通過背書節(jié)點(diǎn)提供的接口轉(zhuǎn)發(fā)給鏈碼來執(zhí)行。容器給鏈碼運(yùn)行提供的是安全沙箱環(huán)境,可把鏈碼的環(huán)境和背書節(jié)點(diǎn)的環(huán)境隔離開,即使鏈碼存在安全問題也不會(huì)影響到背書節(jié)點(diǎn)。

(3)可擴(kuò)展性強(qiáng)。HyperledgerFabric1.0在0.6版本的基礎(chǔ)上,對(duì)Peer節(jié)點(diǎn)的角色進(jìn)行了拆分,有背書節(jié)點(diǎn)(Endorser)、排序服務(wù)節(jié)點(diǎn)(Orderer)、記賬節(jié)點(diǎn)(Committer)等,不同角色的節(jié)點(diǎn)有不同的功能。節(jié)點(diǎn)可以加入到不同的通道(Channel)中,鏈碼可以運(yùn)行在不同節(jié)點(diǎn)上,這樣可以更好地提升并行計(jì)算的效率和吞吐量。

(4)安全性好。HyperledgerFabric1.0提供的是授權(quán)訪問的區(qū)塊鏈節(jié)點(diǎn)網(wǎng)絡(luò),節(jié)點(diǎn)共同維護(hù)成員信息,MSP(MembershipServiceProvider,成員資格提供程序)模塊驗(yàn)證、授權(quán)后用戶才能使用區(qū)塊鏈網(wǎng)絡(luò)的功能。多鏈和多通道的設(shè)計(jì)容易實(shí)現(xiàn)數(shù)據(jù)隔離,也提供了應(yīng)用程序和鏈碼之間的安全通道,實(shí)現(xiàn)了隱私保護(hù)。

3.4.1系統(tǒng)邏輯架構(gòu)

超級(jí)賬本在架構(gòu)設(shè)計(jì)上采用的是模塊化的設(shè)計(jì)理念。圖3-5所示的系統(tǒng)邏輯架構(gòu)圖是從不同角度來劃分的,上層從應(yīng)用的角度,提供了標(biāo)準(zhǔn)的gRPC接口,在API的基礎(chǔ)上封裝了不同語言的SDK,包括Golang、Node.js、Java、Python等,開發(fā)人員可以利用SDK開發(fā)基于區(qū)塊鏈的應(yīng)用。區(qū)塊鏈強(qiáng)一致性要求導(dǎo)致各個(gè)節(jié)點(diǎn)之間達(dá)成共識(shí)需要較長(zhǎng)的執(zhí)行時(shí)間,應(yīng)用程序也是采用異步通信的模式進(jìn)行開發(fā)的,事件模塊可以在觸發(fā)區(qū)塊事件或者鏈碼事件的時(shí)候執(zhí)行預(yù)先定義的回調(diào)函數(shù)。圖3-5

HyperledgerFabric1.0設(shè)計(jì)的系統(tǒng)邏輯架構(gòu)圖

1.從應(yīng)用程序角度分析

1)身份管理

用戶登記并注冊(cè)成功后,會(huì)得到用戶注冊(cè)證書(ECert),其他所有操作都需要使用用戶證書關(guān)聯(lián)的私鑰進(jìn)行簽名。發(fā)送消息時(shí),消息接收方首先會(huì)進(jìn)行簽名驗(yàn)證,之后才進(jìn)行后續(xù)消息處理。網(wǎng)絡(luò)節(jié)點(diǎn)同樣會(huì)用到頒發(fā)的證書,比如系統(tǒng)啟動(dòng)和網(wǎng)絡(luò)節(jié)點(diǎn)管理等都會(huì)對(duì)用戶身份進(jìn)行認(rèn)證和授權(quán)。

2)賬本管理

授權(quán)的用戶是可以查詢賬本數(shù)據(jù)(Ledger)的。賬本數(shù)據(jù)可以通過多種方式查詢,包括根據(jù)區(qū)塊號(hào)查詢區(qū)塊、根據(jù)區(qū)塊哈希值查詢區(qū)塊、根據(jù)交易號(hào)查詢區(qū)塊、根據(jù)交易號(hào)查詢交易,還可以根據(jù)通道名稱獲取查詢到的區(qū)塊鏈信息。

3)交易管理

賬本數(shù)據(jù)只有通過交易執(zhí)行才能更新。應(yīng)用程序通過交易管理提交交易提案(Proposal)并獲取交易背書(Endorsement)以后,再給排序服務(wù)節(jié)點(diǎn)提交交易;然后打包生成區(qū)塊SDK提供接口,利用用戶證書在本地生成交易號(hào)。背書節(jié)點(diǎn)和記賬節(jié)點(diǎn)都會(huì)校驗(yàn)是否存在重復(fù)交易。

4)智能合約

智能合約可實(shí)現(xiàn)可編程賬本(ProgrammableLedger),通過鏈碼執(zhí)行提交的交易,實(shí)現(xiàn)基于塊鏈的智能合約業(yè)務(wù)邏輯。只有智能合約才能更新賬本數(shù)據(jù),其他模塊是不能直接修改狀態(tài)數(shù)據(jù)(WorldState)的。

2.從底層角度分析

1)成員管理

MSP(MembershipSreviceProvider)對(duì)成員管理進(jìn)行了抽象。每個(gè)MSP都會(huì)建立一套根信任證書(RootofTrustCertificate)體系,利用公鑰基礎(chǔ)設(shè)施(PublicKeyInfrastructure)對(duì)成員身份進(jìn)行認(rèn)證,驗(yàn)證成員用戶提交的請(qǐng)求簽名;結(jié)合Fabric-CA或者第三方CA系統(tǒng),提供成員注冊(cè)功能,并對(duì)成員身份證進(jìn)行管理,例如證書的新增和撤銷。注冊(cè)的證書分為注冊(cè)證書(ECert)、交易證書(TCert)和TLS證書(TLSCert),它們分別用于用戶身份、交易簽名和TLS傳輸。

2)共識(shí)服務(wù)

在分布式節(jié)點(diǎn)環(huán)境下,共識(shí)服務(wù)要實(shí)現(xiàn)同一個(gè)鏈上不同節(jié)點(diǎn)區(qū)塊的一致性,同時(shí)要確保區(qū)塊里的交易有效和有序。共識(shí)機(jī)制包括3個(gè)階段:客戶端向背書節(jié)點(diǎn)提交提案,進(jìn)行簽名背書;客戶端將背書后的交易提交給排序服務(wù)節(jié)點(diǎn)進(jìn)行交易排序;生成區(qū)塊后廣播給記賬節(jié)點(diǎn)驗(yàn)證交易后寫入本地賬本。網(wǎng)絡(luò)節(jié)點(diǎn)的P2P協(xié)議采用的是基于Gossip的數(shù)據(jù)分發(fā),以同一組織為傳播范圍來同步數(shù)據(jù),提升網(wǎng)絡(luò)傳輸?shù)男省?/p>

3)鏈碼服務(wù)

智能合約的實(shí)現(xiàn)依賴于安全的執(zhí)行環(huán)境,以確保安全的執(zhí)行過程和用戶數(shù)據(jù)的隔離。HyperledgerFabric1.0采用Docker管理普通的鏈碼,提供安全的沙箱環(huán)境和鏡像文件倉庫。Docker方案的優(yōu)點(diǎn)是支持多種語言的鏈碼,擴(kuò)展性很好;其缺點(diǎn)是對(duì)環(huán)境要求較高,占用資源較多,性能不高等,實(shí)現(xiàn)過程中也存在與Kubernetes、Rancher等平臺(tái)的兼容性問題。

4)安全和密碼服務(wù)

安全問題是企業(yè)級(jí)區(qū)塊鏈關(guān)心的問題,尤其在涉及國家安全的項(xiàng)目中,其中底層的密碼學(xué)支持尤其重要。為此,HyperledgerFabric1.0專門定義了一個(gè)BCCSP(BlockChainCryptographicServiceProvider,區(qū)塊鏈加密服務(wù)提供者),以實(shí)現(xiàn)密鑰生成哈希運(yùn)算簽名、檢驗(yàn)加密解密等基礎(chǔ)功能。BCCSP是一個(gè)抽象組的接口,默認(rèn)是軟實(shí)現(xiàn)的國際算法,目前社區(qū)和較多的廠家使用較多的是國密算法和HSM(HardwareSecurityModule,硬件安全模塊)。

3.4.2超級(jí)賬本系統(tǒng)運(yùn)行架構(gòu)

在超級(jí)賬本運(yùn)行架構(gòu)0.6版本中,基本所有的業(yè)務(wù)功能都由Peer節(jié)點(diǎn)完成,導(dǎo)致該架構(gòu)在擴(kuò)展性、安全性、可維護(hù)性、隔離性方面的不足。因此在后來的1.0版本中,官方對(duì)此進(jìn)行了改進(jìn)和拆分,把共識(shí)服務(wù)從Peer節(jié)點(diǎn)中剝離出來,形成一個(gè)新的Orderer節(jié)點(diǎn),以提供可插播共識(shí)服務(wù)。更重要的是1.0版本引入了多通道的功能,實(shí)現(xiàn)了多重業(yè)務(wù)隔離的作用,使業(yè)務(wù)適應(yīng)性更加靈活。Fabric運(yùn)行架構(gòu)1.0版如圖3-6所示。圖3-6超級(jí)賬本運(yùn)行架構(gòu)

超級(jí)賬本提供了可供企業(yè)運(yùn)用的網(wǎng)絡(luò),具備安全性、可伸縮性、可加密性和可執(zhí)行性等特性,并提供了以下網(wǎng)絡(luò)功能:

1.身份管理

超級(jí)賬本提供成員身份管理服務(wù),用于管理所有的用戶ID并對(duì)網(wǎng)絡(luò)上所有的成員身份進(jìn)行驗(yàn)證。成員們相互了解彼此的身份,但他們不知道彼此在做些什么,這也保證了其隱私信息的安全性和機(jī)密性。

2.隱私和機(jī)密性

由于商業(yè)信息的機(jī)密性等原因,隱私保護(hù)功能在超級(jí)賬本里是非常重要的一點(diǎn)。超級(jí)賬本允許存在競(jìng)爭(zhēng)關(guān)系的商業(yè)機(jī)構(gòu)和任何私人團(tuán)體能夠在同一個(gè)被許可的網(wǎng)絡(luò)上共存。私有頻道是一個(gè)受到限制的消息傳遞路徑,這個(gè)路徑可以為特定的網(wǎng)絡(luò)成員提供事務(wù)的隱私功能和保證商業(yè)信息的機(jī)密性。

3.高效處理能力

超級(jí)賬本通過節(jié)點(diǎn)類型分配網(wǎng)絡(luò)角色,從事務(wù)排序和提交驗(yàn)證中分離出執(zhí)行事務(wù)的操作,使并行控制和并行性操作更加便利。

在排序之前,執(zhí)行事務(wù)使每個(gè)對(duì)等節(jié)點(diǎn)能夠同時(shí)處理多個(gè)事務(wù)。這種事物的并發(fā)執(zhí)行方式提高了每個(gè)對(duì)等節(jié)點(diǎn)處理事務(wù)的效率,加速了排序事務(wù)的交付工作。

4.Chaincode功能

Chaincode是區(qū)塊鏈上的應(yīng)用代碼,從“智能合約”概念中擴(kuò)展而來。系統(tǒng)Chaincode是一個(gè)特殊的Chaincode,它定義了整個(gè)頻道的操作參數(shù)、生命周期和配置系統(tǒng)以及頻道的規(guī)則、驗(yàn)證和支持事務(wù)的需求。

3.4.3網(wǎng)絡(luò)節(jié)點(diǎn)架構(gòu)

節(jié)點(diǎn)是網(wǎng)絡(luò)區(qū)塊鏈的通信主體,是一個(gè)邏輯概念。節(jié)點(diǎn)分為很多類型,包括客戶端節(jié)點(diǎn)、Peer節(jié)點(diǎn)、排序服務(wù)節(jié)點(diǎn)和CA節(jié)點(diǎn)等。多個(gè)不同類型的節(jié)點(diǎn)可以運(yùn)行在同一物理服務(wù)器上。圖3-7所示為網(wǎng)絡(luò)節(jié)點(diǎn)架構(gòu)圖。圖3-7網(wǎng)絡(luò)節(jié)點(diǎn)架構(gòu)圖

1.客戶端節(jié)點(diǎn)

客戶端或者應(yīng)用程序是最終用戶操作的實(shí)體,它必須連接到某一個(gè)Peer節(jié)點(diǎn)或者排序服務(wù)節(jié)點(diǎn)上才能在區(qū)塊鏈網(wǎng)絡(luò)中進(jìn)行通信??蛻舳斯?jié)點(diǎn)向背書節(jié)點(diǎn)(Endorser)提交交易提案(TransactionProposal)。當(dāng)收集到足夠多的背書后,客戶端節(jié)點(diǎn)會(huì)向排序服務(wù)傳播交易,進(jìn)行排序,生成區(qū)塊。

2.Peer節(jié)點(diǎn)

所有的Peer節(jié)點(diǎn)都是記賬節(jié)點(diǎn)(Committer),負(fù)責(zé)驗(yàn)證排序服務(wù)節(jié)點(diǎn)區(qū)塊里的交易,維護(hù)狀態(tài)數(shù)據(jù)和賬本的副本。部分Peer節(jié)點(diǎn)執(zhí)行交易并對(duì)結(jié)果進(jìn)行簽名背書,充當(dāng)背書節(jié)點(diǎn)的角色。背書節(jié)點(diǎn)是動(dòng)態(tài)的角色,是被具體鏈碼綁定的。每個(gè)鏈碼在實(shí)例化的時(shí)候都會(huì)設(shè)置背書策略,指定哪些節(jié)點(diǎn)在交易背書后才是有效的。Peer節(jié)點(diǎn)只有在應(yīng)用程序向它發(fā)起交易背書請(qǐng)求的時(shí)候才是背書節(jié)點(diǎn),其他時(shí)候它們就是普通的記賬節(jié)點(diǎn),只負(fù)責(zé)驗(yàn)證交易并記賬。

3.排序服務(wù)節(jié)點(diǎn)

排序服務(wù)節(jié)點(diǎn)(OrderingServiceNode或者Orderer)負(fù)責(zé)接收包含背書簽名的交易,對(duì)未打包的交易進(jìn)行排序,生成區(qū)塊后廣播給Peer節(jié)點(diǎn)。排序服務(wù)節(jié)點(diǎn)提供的是原子廣播(AtomicBroadcast),保證同一個(gè)鏈上的節(jié)點(diǎn)接收到相同的消息,并且有相同的邏輯順序。

4.?CA節(jié)點(diǎn)

CA節(jié)點(diǎn)是HyperledgerFabric1.0的證書頒發(fā)機(jī)構(gòu)(CertificateAuthority),由服務(wù)器和客戶端組件組成。CA節(jié)點(diǎn)接收客戶端的注冊(cè)申請(qǐng),并返回注冊(cè)密碼用于用戶登錄,以便獲取身份證書。區(qū)塊鏈網(wǎng)絡(luò)上所有的操作CA節(jié)點(diǎn)都會(huì)驗(yàn)證用戶身份。CA節(jié)點(diǎn)是可選的,可以是其他成熟的第三方CA頒發(fā)的證書。

3.4.4典型交易流程

圖3-8所示為HyperledgerFabric1.0典型的交易流程圖。圖3-8交易流程總圖

3.5超級(jí)賬本的組成模型

3.5.1資產(chǎn)

資產(chǎn)包括房地產(chǎn)、貨物等有形資產(chǎn)和合同、知識(shí)產(chǎn)權(quán)等無形資產(chǎn)。超級(jí)賬本具有使用智能合約交易修改資產(chǎn)的功能。在超級(jí)賬本中,資產(chǎn)以鍵值對(duì)集合的方式存在,在頻道模式中,可以通過對(duì)其狀態(tài)提交變更事務(wù)來修改資產(chǎn)。使用超級(jí)賬本中的Composer工具可以很容易地定義和使用應(yīng)用程序中的資產(chǎn)。

3.5.2智能合約

智能合約是定義資產(chǎn)和修改資產(chǎn)的事務(wù)指令的軟件,也就是一個(gè)頻道的業(yè)務(wù)邏輯,擁有能夠讀取和修改鍵值對(duì)操作的規(guī)則。智能合約通過一個(gè)事務(wù)請(qǐng)求來執(zhí)行對(duì)相應(yīng)數(shù)據(jù)庫的操作,完成后會(huì)生成一組讀寫集。這組讀寫集會(huì)被提交給網(wǎng)絡(luò)排序服務(wù)節(jié)點(diǎn),再由排序服務(wù)節(jié)點(diǎn)廣播給所有的對(duì)等節(jié)點(diǎn)。

3.5.3賬本特征

在Fabric中產(chǎn)生的所有針對(duì)數(shù)據(jù)狀態(tài)變更的請(qǐng)求,都會(huì)生成有序且無法篡改的記錄存在賬本里面。數(shù)據(jù)狀態(tài)的變更是由所有參與方認(rèn)可的智能合約調(diào)用事務(wù)的結(jié)果,每個(gè)事務(wù)都將產(chǎn)生一組資產(chǎn)鍵值對(duì)。這些鍵值對(duì)作為創(chuàng)建、更新或刪除的操作被同步到所有賬本上。

賬本由區(qū)塊鏈組成,每一個(gè)區(qū)塊中都存儲(chǔ)著一組有序且不可篡改的記錄,由一個(gè)狀態(tài)數(shù)據(jù)庫來維護(hù)當(dāng)前的Fabric狀態(tài)。每個(gè)頻道都有且只有一個(gè)賬本,該頻道中的每個(gè)加盟成員都維護(hù)同一份賬本。

超級(jí)賬本采用背書/共識(shí)(Endorsement/Cosensus)模型,交易執(zhí)行和區(qū)塊驗(yàn)證是在不同角色的節(jié)點(diǎn)中分開執(zhí)行的。交易執(zhí)行是并發(fā)的,這可以提高系統(tǒng)擴(kuò)展性和網(wǎng)絡(luò)吞吐量。在背書節(jié)點(diǎn)(EndorsingPeer)處交易執(zhí)行鏈碼(Chaincode),在所有的Peer節(jié)點(diǎn)上驗(yàn)證交易并提交。

每個(gè)Peer節(jié)點(diǎn)會(huì)維護(hù)多個(gè)賬本,如圖3-9所示。圖3-9分布式賬本存儲(chǔ)

1.超級(jí)賬本的元素

超級(jí)賬本包含以下元素:

·賬本編號(hào):快速查詢存在哪些賬本;

·賬本數(shù)據(jù):實(shí)際的區(qū)塊鏈存儲(chǔ);

·區(qū)塊索引:快速查詢區(qū)塊/交易;

·狀態(tài)數(shù)據(jù):最新的世界狀態(tài)數(shù)據(jù);

·歷史數(shù)據(jù):跟蹤鍵的歷史。

在實(shí)際的Chaincode環(huán)境中,對(duì)于查詢功能,除了簡(jiǎn)單的鍵值對(duì)查詢,我們往往還有如下兩個(gè)需求:

·富查詢:對(duì)數(shù)據(jù)的某一個(gè)屬性進(jìn)行查詢,獲取所有滿足條件的數(shù)據(jù),例如獲取所有顏色為紅色的汽車信息。

·區(qū)間查詢:對(duì)一個(gè)范圍內(nèi)的鍵值進(jìn)行查詢,獲取數(shù)據(jù),例如獲取單號(hào)在005至008之間的訂單信息。

2.超級(jí)賬本的特征

超級(jí)賬本的特征可總結(jié)如下:

(1)使用基鍵(鍵查詢)、范圍查詢及組合鍵查詢等方法可對(duì)賬本執(zhí)行查詢和更新操作。

(2)使用富查詢語言的只讀查詢(如果使用CouchDB作為狀態(tài)數(shù)據(jù)庫)。

(3)只讀歷史查詢:可以查詢賬本歷史記錄,支持?jǐn)?shù)據(jù)溯源等應(yīng)用情景。

(4)每一條請(qǐng)求的結(jié)果都由通過智能合約讀取的讀集和智能合約寫入的寫集的鍵值的多版本組成。

(5)每一條被提交的請(qǐng)求都包含提交該請(qǐng)求的節(jié)點(diǎn)的簽名證書,并同時(shí)提交到排序服務(wù)節(jié)點(diǎn)。

(6)同一個(gè)頻道中的區(qū)塊里的所有請(qǐng)求事務(wù)都會(huì)被排序,并且這些區(qū)塊會(huì)被排序服務(wù)節(jié)點(diǎn)廣播到該頻道內(nèi)的所有對(duì)等節(jié)點(diǎn)。

(7)對(duì)等節(jié)點(diǎn)對(duì)請(qǐng)求事務(wù)的驗(yàn)證依靠背書策略并嚴(yán)格執(zhí)行該策略。

(8)每添加一個(gè)塊之前,超級(jí)賬本都要執(zhí)行版本控制檢查,以確保被讀取的資產(chǎn)的狀態(tài)在鏈代碼執(zhí)行之后沒有改變。

(9)即將執(zhí)行變更的請(qǐng)求事務(wù)集在新增到一個(gè)區(qū)塊之前必須要做一次版本驗(yàn)證,以確保被讀取的資產(chǎn)狀態(tài)集在本條智能合約執(zhí)行時(shí)間之前沒有改變過。

(1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論