?

從零開始部署區塊鏈超級賬本網絡

2020-12-29 11:56林劍宏
電腦知識與技術 2020年30期
關鍵詞:搭建網絡系統區塊鏈

林劍宏

摘要:區塊鏈是一種顛覆現有格局的底層技術架構體系。區塊鏈超級賬本Hyperlegder Fabric 1.0網絡系統的部署涉及硬件、軟件等多種工具和技術環境的搭建。為了減少在部署Fabric過程中出現的錯誤,文章通過演示在實際生產環境下的搭建操作,從零開始詳細介紹了部署區塊鏈Hyperlegder Fabric 1.0網絡系統的全過程,使初學者能夠快速高效地體驗Fabric網絡系統的核心功能。

關鍵詞:區塊鏈;Hyperlegder Fabric;網絡系統;部署;搭建

中圖分類號:TP316.4? ? ? ? 文獻標識碼:A

文章編號:1009-3044(2020)30-0050-04

Abstract: Blockchain is an underlying technology architecture system that subverts the existing pattern. The deployment of the blockchain hyperledger fabric 1.0 network system involves the construction of hardware, software and other tools and technical environment. In order to reduce the errors in the process of deploying fabric, this paper introduces the whole process of deploying the blockchain hyperlegder fabric 1.0 network system in detail from scratch by demonstrating the construction operation in the actual production environment, so that beginners can experience the core functions of fabric network system quickly and efficiently.

Key words:Blockchain; Hyperlegder Fabric; network system ; deployment; Build

1 引言

區塊鏈[1]的概念由學者“中本聰”研究者(或研究團隊)于2008年提出,區塊鏈(Blockchain)是一種源自比特幣的分布式存儲機制數據庫,數據庫的核心內容是通過一串使用非對稱加密算法、安全散列算法等密碼學方法產生的數據塊(block),使得用戶可以在任意節點中參與系統數據的維護。目前主要有如下幾種主流的區塊鏈技術平臺:比特幣(Bitcoin)、以太坊(Ethereum)、和Linux基金會的開源項目超級賬本(Hyperledger Fabric)、EOS企業級區塊鏈操作系統(Enterprise Operation System)。超級賬本HyperLedger Fabric作為一個典型的區塊鏈技術平臺,是一個帶有可插入各種功能模塊架構的區塊鏈實施方案,目標是打造成一個由全社會共同維護的開源超級賬本。HyperLedger Fabric系統上沒有中心機構擁攬權力,我們的每一筆交易都是全網公開并且安全的,信用由全社會共同認證;超級賬本具有強大的容器技術來支持任何主流的語言來開發智能合約(鏈碼)。因此,通過由淺入深、循序漸進地掌握超級賬本HyperLedger Fabric 1.0網絡系統的部署全過程,將能夠進一步搭建符合自身業務場景的區塊鏈網絡平臺,利用區塊鏈Fabric技術實現具有去中心化、信息不可篡改的區塊鏈應用項目。

2 HyperLedger Fabric系統的環境搭建

2.1 基礎環境

根據區塊鏈超級賬本HyperLedger Fabric的官方技術文檔,Fabric系統能夠部署在Linux操作系統、Windows操作系統以及蘋果電腦的MAC等操作系統上,但是在生產環境中,鑒于穩定性、兼容性和安全性的要求,一般都是將Fabric系統部署在Linux操作系統之上。本文的實驗演示環境采用了64位的Ubantu 16.04LTS, 系統內核為GNU/Linux4.15.0-51-generic_x86_64。如果讀者的常用操作系統為Windows系統,可以通過采用虛擬機VM的方法來安裝Ubantu系統。硬件資源要求:內存最低為2Gb以上,磁盤空間最低為30Gb以上,本實驗演示環境采用了4Gb 的內存和40Gb的磁盤空間。

2.2 工具軟件

首先,超級賬本HyperLedger Fabric網絡的運行環境需要安裝git工具,git是一個非常優秀的免費、開源的版本管理控制工具,我們可以使用git工具方便地下載各個官方源代碼文件,例如:Golang、Hyperledger Fabric等在Github網站上發布的相關源代碼或其它數據。在Ubantu系統中通過敲打鍵盤上的“Ctrl+Alt+T”組合鍵調出終端,然后輸入命令: sudo apt-get install git 即可。接著,下載并安裝開發基于區塊鏈應用的重要技術Node.js[2],Node.js通過Google的JavaScript V8引擎解析JavaScript代碼。另外,還需要在Ubantu系統中安裝vim、tree、npm等工具及管理軟件。

2.3 Docker和Docker-Compose的安裝配置

HyperLedgerFabric1.0 依賴Docker容器執行智能合約chaincode,Docker [3]是一個開源的應用容器引擎,基于Go語言并遵從Apache2.0協議開源。 Docker可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。Docker容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 App),更重要的是容器性能開銷極低。

首先,安裝依賴包后在終端輸入如下命令安裝docker容器:sudo apt-get install docker-ce, 在終端輸入命令測試Docker:sudo docker pull hello-world,同時可以查看Docker版本:docker --version。Docker Compose的主要功能是能夠在一臺主機上創建出相互隔離的多個網絡,并通過命令行管理多人Docker容器。我們可以使用如下命令來安裝docker-compose工具:sudo curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose,安裝成功后,執行如下命令查看Docker-Compose版本信息: docker-compose –version。

2.4 安裝配置go語言

Golang(go語言) 是HyperLedger Fabric區塊鏈系統底層以用智能合約chaincode的開發語言。我們可以通過使用wget工具來下載Golang的最新版本壓縮包文件 go1.12.5.linux-amd64.tar.gz,在終端輸入如下命令行下載go 語言:$ wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz,接著,使用 tar 命令將下載后的壓縮包文件解壓到指定的 /usr/local/ 路徑下,在終端輸入如下命令:$ sudo tar -zxvf go1.12.5.linux-amd64.tar.gz -C /usr/local/ 。最后,還要配置go 語言環境變量,解壓源文件之后,為了使go 語言能夠對系統的所有用戶開放正常使用,所以我們采用 vim 文件編輯工具打開系統的 profile 文件進行編輯:$ sudo vim /etc/profile 并且在profile文件最后添加如下內容:export GOPATH=$HOME/go ;export GOROOT=/usr/local/go ;export PATH=$GOROOT/bin:$PATH。使用 source 命令,使剛剛添加的配置信息生效:$ source /etc/profile。最后,通過 go env命令驗證是否正確完成go語言的安裝配置。

3超級賬本HyperLedger Fabric的安裝和編譯

3.1 下載超級賬本HyperLedger Fabric源代碼

首先,通過在終端命令行上輸入如下命令創建工程目錄:sudo mkdir -p /project/goworkspace/src/github.com/hyperLedger 。接著執行命令切換到工程目錄,然后在終端上輸入如下命令下載Fabric源代碼:git clone -b release-1.0 https://github.com/hyperledger/fabric 。完成Fabric源代碼的下載后,下一步還需要下載安裝fabric-samples存儲庫,執行如下命令即可下載fabric-samples存儲庫到當前目錄下:

git clone -b release-1.0 https://github.com/hyperledger/fabric-samples。

3.2 編譯HyperLedger Fabric源代碼

Hyperledger Fabric 可以有兩種方式進行編譯安裝,第一種方式(bootstrap.sh腳本方式)進行環境的安裝,優點是簡單、方便,能夠快速上手;第二種方式是以 Fabric 源碼方式進行編譯,適合動手能力較強的人員,優點是可以對 Hyperledger Fabric 相關組件有深入的理解,但缺點是容易出現各種錯誤且修正比較麻煩。為了使讀者能夠更進一步了解Hyperledger Fabric系統各個核心模塊的功能,本文采用了第二種方式對 Fabric 源碼進行直接手動編譯。我們在Fabric源代碼所在的文件夾下,執行如下命令:make release可以對Fabric進行編譯。

3.3? HyperLedger Fabric模塊的安裝

完成對Fabric源代碼的編譯之后,這些模塊就可以被運行了,但是目前只能在編譯文件所在的文件夾中運行Fabric模塊,這樣是非常不方便的。為了更加方便地使用這些模塊,可以通過下面的命令將Fabric模塊的可執行文件復制到系統目錄中,這樣在系統中的任何路徑下面都能運行這些可執行這些模塊:復制成功之后通過以下命令修改各個Fabric模塊文件的執行權限,否則無法行這些模塊。進入Fabric模塊所在目錄下,接著依次執行下面命令對Fabric各個核心模塊文件執行權限的配置:sudo chmod -R 777 /usr/local/bin/configtxgen 。完成對Fabric各個核心模塊文件執行權限的配置后即可正確運行并使用Fabric核心模塊的功能??梢酝ㄟ^如下命令來檢查Fabric模塊安裝過程是否成功:peer version。

3.4 采用Docker運行Fabric模塊

除了前面介紹的直接編譯源代碼的方式,還可以通過Docker來運行這些模塊。通過Docker運行Fabric相關模塊有兩種方法:通過本地源代碼生成Fabric模塊的Docker鏡像文件和從Docker倉庫中下載Fabric模塊的鏡像文件。下面將介紹這兩種方法的詳細步驟。第一是通過本地源代碼生成Fabric模塊的Docker鏡像通過本地源代碼生成Fabric模塊的Docker鏡像文件是非常簡單的,具體的操作命令為:make docker,上訴命令的執行過程涉及從docker的遠程服務器中下載文件,因此需要等待一段時間,具體的安裝時間視網絡情況而定。在執行命令的過程中需要保持網絡暢通。

第二種方法是從Docker倉庫中下載Fabric模塊的Docker鏡像文件。為了方便用戶使用Fabric,Fabric開發小組會定期將Fabric穩定版本的源代碼編譯之后制作成Docker鏡像文件,然后把這些Docker鏡像文件上傳到Docker倉庫中供下載使用。

4 HyperLedger Fabric系統的部署

通過上面對的Hyperledger Fabric系統的開發環境搭建之后,我們接下來就可以啟動相關的Fabric模塊進行Fabric系統的部署。

4.1 生成Fabric系統的成員證書文件

成員管理服務MSP[4] (Merbership Service Provider)在許可區塊鏈/聯盟鏈Hyperledger Fabric上認證、授權和管理身份。在對等節點和排序服務節點中運行成員管理服務的代理。MSP為客戶端、peer節點、Orderer節點等提供PKI數字證書以及管理組織成員身份。在MSP機制下,每個節點都擁有自己的證書,每個節點發出去的消息都會用自己的證書進行簽名,同時對端節點可以對這些消息進行真偽驗證。啟動Fabric之前首先需要生成相關的成員證書,一般情況下,MSP證書可以通過cryptogen模塊生成,同時可以由Fabric-CA管理。本文的案例采用cryptogen模塊生成MSP證書,cryptogen模塊會根據提供的配置文件生成后續模塊運行過程中需要的證書和數據文件。在生成證書之前我們需要創建一個文件夾存放配置文件和生成的證書文件。本例中我們將配置文件和生成的證書文件放在文件夾/opt/hyperledger/fabricconfig中。創建存放證書的文件夾的命令如下所示: mkdir -p /opt/hyperledger/fabricconfig。cryptogen模塊提供了一個命令可以獲取cryptogen模塊所需要的配置文件的樣式,該命令為: cryptogen showtemplate 。把上述命令生成的內容復制到一個文件中稍加修改即可使用。打開終端并執行命令:sudo gedit crypto-config.yaml , 將配置文件的內容保存到文件夾/opt/hyperledger/fabricconfig中,配置文件夾命名為crypto-config.yaml。保存之后依次執行如下命令生成2個組織org1.sy.com和org2.sy.com。然后我們會發現在文件夾/opt/hyperledger/fabricconfig中會新增加一個文件夾crypto-config,里面存放著本例的相關配置文件,可以通過在終端執行命令:tree-L 5查看生成證書文件的內容。

4.2 創建Fabric系統的創世區塊

創世區塊是初始化區塊鏈網絡或通道的配置區塊,也是區塊鏈上的第一個區塊。利用congfigtxgen模塊生成Fabric系統創世區塊和Channel創始區塊的配置文件。創世區塊Genesis Block是初始化區塊鏈網絡或channel的配置區塊,也是本Fabric系統區塊鏈上的第一個區塊。首先進入Order的目錄下,通過執行如下命令即可生成基于Fabric的區塊鏈系統創世區塊, 系統創世區塊的創建如下圖1所示:

4.3 創建Fabric系統的賬本創世區塊

賬本[5]是通道中的區塊鏈和通道中每個節點維護的世界狀態的集合。在Fabric中稱為通道Channel,本文后續內容中用Channel表示,Channel是Fabric中非常重要的概念,一個Channel表示一個賬本。Fabric和其他區塊鏈平臺最大的區別是Fabric支持多賬本。每個Fabric應用都至少包含一個Channel,因此創建Channel是Fabric中比較重要的步驟。創建通道的命令執行完成之后會在相應的文件夾下面生成文件Org1MSPanchors.tx和Org2MSPanchors.tx,這些文件是Fabric后續的部署過程中作為配置參數所需要的。

4.4? 啟動Orderer 節點

Orderer節點的核心功能是排序服務或共識服務,將交易排序放進區塊的節點的集合。排序服務獨立于對等節點流程之外,并以先到先得的方式為網絡上所有的通道做交易排序。排序服務支持可插拔實現,目前默認實現了Solo和Kafka兩種方式。本實驗由于在單機環境下部署區塊鏈系統,因此采用了Solo的排序方式來進行。Orderer節點負責交易的打包和區塊的生成,Orderer節點的配置信息通常放在環境變量或者配置文件中,本實驗中的配置信息統一存放在配置文件中。Fabric源碼提供了Orderer啟動所用到的配置文件的實例,將示例配置文件復制到Orderer的文件夾下面稍加修改即可使用。在配置文件orderer.yaml所在的目錄執行如下命令:orderer start啟動orderer節點。

4.5 啟動peer節點

Peer模塊是維護賬本并運行智能合約容器來對賬本執行讀、寫操作的網絡實體。Peer節點由成員擁有和維護。Peer節點是Fabric的核心模塊,所有的交易數據經過Orderer排序打包之后由Peer模塊存儲在區塊鏈中。所有的Chaincode也是由Peer模塊打包并且激活的。Peer模塊的配置信息同樣由環境變量和配置文件組成,本例中我們采用配置文件的方式來配置peer節點的參數。在設定配置文件之前需要創建一個文件夾存放Peer模塊的配置文件和區塊數據。在Fabric源碼中同樣提供了Peer模塊配置文件的示例,將示例配置文件復制到Peer模塊的文件夾下面稍加修改即可使用。創建存儲Peer模塊的配置文件和區塊數據的文件夾,并復制示例配置文件,接著采用編輯器修改該文。完成編輯后在配置文件core.yaml所在的文件夾中執行命令:peer node start啟動peer節點。

4.6 創建Fabric系統通道

通道是構建在Fabric網絡系統上的私有區塊鏈,實現了數據的隔離和保密。通道內特定的賬本在通道中是與所有的對等節點共享的,并且交易方必須通過該通道的正確性驗證才能與賬本進行交互?,F在我們可以創建通道,創建通道的過程一共分為如下三個步驟。第一步,創建通道如圖2所示:

4.7 Chaincode的部署和調用

在Hyperlegder Fabric系統中,智能合約稱為Chaincode[6] ,中文譯為鏈碼。在Fabric中一個交易的具體邏輯是在Chaincode中運行的,智能合約是用戶編寫的一段獨立的可執行代碼或應用程序,與Fabric自身的模塊程序之間是相互獨立的。Chaincode運行在基于Docker的安全容器中,Chaincode在啟動的時候和背書節點建立gRPC連接,在運行過程中通過接口和背書節點通信。鏈碼是在線下預先開發好后再部署到線上的智能合約,部署的時候需要一定的權限,部署成功就意味著鏈碼的業務邏輯是各個關聯方都已經達成一致的。Chaincode的實現必須依賴于Peer節點和Orderer節點的正確部署。這里采用Fabric源碼附帶的例子chaincode_example02來作為測試Chaincode。Chaincode擁有完整的生命周期,測試Chaincode相關的測試一共有四個步驟: 第一步,安裝Chaincode;第二步,實例化Chaincode代碼;第三步,通過Chaincode調用(寫入數據),第四步,通過Chaincode查詢數據。Fabric智能合約Chaincode的部署和調用如下圖5所示:

通過對HyperLedger Fabric智能合約Chaincode的安裝、調用,我們可以查詢到在本超級賬本通道為linjianhongchannel上的所產生的區塊數為4個,執行invoke的調用命令后,a向b轉移了101,交易完成并進行查詢可知,此時a的值為699。經過在本實驗的演示,基于HyperLedger Fabric1.06版本的區塊鏈系統已順利完成部署。

至此,我們對HyperLedger Fabric系統的整體架構有了更深入的理解:客戶端peer節點先將交易提案交給Endorser進行背書,通過背書的交易提案會被提交到Orderer節點排序并生成交易記錄,然后Orderer節點會把一系列交易打包成區塊Block提交給Committer,Committer會在交易驗證后將Block寫入區塊鏈文件中持久性保存。其次,Fabric的多組織和多通道也是這個項目的特色之一,多組織是指交易中有兩個或兩個以上的組織間進行時,可以由多方組織進行交易背書,這些組織既可以是公司內部的不同的部門,也可以是不同的公司。綜上所述,區塊鏈技術的重要特征之一就是能夠保證實現安全的交易。HyperLedger Fabric與公有鏈的交易實現上有很大的區別,如權限、認證、數據隔離等優點,并克服了比特幣、以太坊等公有鏈項目的缺陷。

5 結語

本文詳細介紹了全程手動部署IBM HyperLedger Fabric區塊鏈系統所需要的關鍵步驟,主要包括了Fabric開發運行環境的搭建過程、Fabric核心模塊的編譯、運行和配置;同時介紹了Fabric核心概念:賬本通道Channel的創建和使用,最后實現了對Fabric智能合約Chaincode的安裝、實例化以及調用。文中內容通俗易懂、圖文并茂,從零開始將理論知識與手把手操作演示相結合,通過熟悉文中的實踐案例,有助于使讀者快速掌握區塊鏈Fabric網絡系統的組成部分和部署流程,為區塊鏈應用的項目落地開發奠定堅實的基礎。

參考文獻:

[1] SWAN M.Blockchain:blueprint for a new economy[M].USA:0Reilly Media Inc,2015:1-3.

[2] 李寧.第一行代碼-以太坊[M].北京: 水利水電出版社,2018:65-66.

[3] Leader-us,李艷軍,趙鍇.區塊鏈輕松上手:原理、源碼、搭建與應用[M].北京: 電子工業出版社,2018:78-79.

[4] 李鑫. Hyperledger Fabric 技術內幕:架構設計與實現原理[M].北京: 機械工業出版社,2019:25-30.

[5] 蔡亮,李啟雷,梁秀波.區塊鏈技術進階與實戰[M].北京市:人民郵電出版社,2018:116-118.

[6] 張增駿,董寧,朱軒彤,等.深度探索區塊鏈:Hyperledger技術與應用[M].北京: 機械工業出版社,2018:159-164.

【通聯編輯:王力】

猜你喜歡
搭建網絡系統區塊鏈
基于DEMATEL-ISM的軍事通信網絡系統結構分析
區塊鏈技術的應用價值分析
“區塊鏈”的茍且、詩和遠方
高速公路網絡系統配置淺析
用“區塊鏈”助推中企走出去
時滯復雜網絡系統的保性能控制
離散復雜網絡系統的混沌同步
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合