• <option id="cacee"><noscript id="cacee"></noscript></option>
  • <table id="cacee"><noscript id="cacee"></noscript></table>
  • <td id="cacee"></td>
  • <option id="cacee"></option>
  • <table id="cacee"></table>
  • <option id="cacee"><option id="cacee"></option></option>
  • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
    <option id="cacee"><option id="cacee"></option></option>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 自媒體 查看內容
    • 7502
    • 0
    • 分享到

    區塊鏈100講:Hyperledger Fabric 區塊鏈多機部署

    2018-6-28 07:05

    來源: HiBlock-Net



    本文介紹如何從 Fabric 源碼編譯可執行程序,到多機部署 fabric區塊鏈網絡應用,以及鏈碼測試樣例。


    1

    環境介紹


    fabric 項目是 hyperledger 項目中的一個聯盟鏈子項目,本文介紹了,如何從fabric 源碼編譯相關組件以及工具,到實戰部署一套fabric 區塊鏈服務,來向大家介紹,并學習 fabric 區塊鏈。


    Fabric相關組件以及工具介紹:


    • orderer 共識節點。為交易排序,并生成區塊

    • peer共識節點。為交易背書,并記錄區塊信息

    • crypto用于生成區塊鏈網絡中相應用戶的相關證書文件

    • configtxgen 用于生成區塊鏈系統鏈碼的創世區塊、新建通道的配置文件、以及組織中錨節點的配置文件


    Fabric區塊鏈網絡部署環境介紹:


    • 5臺 Centos 7系統的虛擬機,硬件配置為:4核,8G 內存

    • 1個 orderer 節點,4個 peer 節點,使用 solo 共識算法
      ???10.121.60.1 部署 orderer 節點
      ???12.10.121.60.2 – 10.121.60.3 部署peer 節點


    2

    源碼編譯、以及fabric 區塊鏈網絡部署環境準備


    fabric 是基于 go 語言開發的,并且本例子中使用的測試用戶鏈碼例子,是基于 go 語言開發的,需要依賴 go 語言的編譯開發環境。由于本文著重介紹 fabric 的應用,所以相關的環境請自行查找安裝方式。


    • 安裝 go 語言開發環境,并設置 相關環境變量 GOPATH、GOROOT、GOBIN(請安裝 Go 1.8,以及以上版本)


    • 安裝編譯相關的依賴包 snappy-devel.x86_64、zlib-devel.x86_64、bzip2-devel.x86_64、libtoo-ltdl-devel.x86_64、libtool(依賴包是基于 centos 系統,其他 *nix 以及 mac 系統請自行查找并安裝相關依賴文件)


    • 安裝 docker、docker-compose(yum 上的 docker 版本過低,請從官網下載安裝)


    • 安裝 git(yum 上的 git 版本過低,請從官網下載安裝)


    • 獲取 fabric 源碼(本次例子是基于 v1.0.0版本),并保存在目錄 $GOPATH/src/github.com/hyperledger 下


    • 從 github.com 上下載 go 語言編譯相關環境 gotools(golang.org 需要翻墻,所以從 github 上獲取)


    • 在目錄$GOPATH/src/golang/x/下執行

      git clone https://github.com/golang/tools.git


    3

    編譯 fabric區塊鏈相關可執行程序


    切換到 fabric 源碼的目錄下面,通過 makefile 文件,可以編譯出 fabric 項目的全部可執行文件,如圖:


    fabric源碼編譯可執行程序列表


    這次的演示例子中,只需要編譯部分必要文件即可:orderer、peer、configtxgen、cryptogen。


    以下命令,全部在$GOPATH/src/github.com/hyperledger/fabric 目錄下執行。


    1. 編譯 go 相關工具


    cp -r $GOPATH/src/golang.org/x/tools/ $GOPATH/src/github.com/hyperledger/fabric/gotools/build/gopath/src
    make gotools


    2. 編譯 fabric基礎環境


    make buildenv


    注意:編譯過程中,如果遇到錯誤信息:

    cp:build/docker/gotools/bin/protoc-gen-go:No such file or directory


    解決方案:安裝protocbuf

    go get -u github.com/golang/protobuf/protoc-gen-go
    cp $GOPATH/bin/protoc-gen-go
    $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin/


    3. 編譯區塊鏈服務相關工具


    • make orderer

    • make peer

    • make configtxgen

    • make cryptogen

    • 編譯的可執行程序生成在./fabric/build/bin目錄下,設置該目錄至 PATH環境變量


    4

    多機部署fabric網絡(solo共識)


    接下來,就是本文的重點,如何使用編譯出來的可執行程序及相關工具,來搭建一個 fabric 區塊鏈網絡,并實現鏈碼的部署以及測試。


    分別在五臺虛擬機中創建目錄/etc/hyperledger/fabric,以下的命令   全部在該目錄下執行,并且需要設置 fabric 網絡執行的環境變量:


    $FABRIC_CFG_PATH=/etc/hyperledger/fabric


    1. 配置 fabric 網絡用戶拓撲關系

    ?

    • 通過配置文件 crypto-config.yaml配置fabric 網絡用戶拓撲關系。Crypto-config.yaml 內容如下:


    Crypto-config.yaml


    該配置文件,包含一個 orderer 節點,以及兩個 peer組織,兩個 peer 組織又分別包含了兩個 peer 節點。


    • 使用 cryptogen 工具,從crypto-config.yaml配置文件中生成用戶相應的秘鑰和證書文件:


    cryptogen generate --config=./crypto-config.yaml --output ./crypto-config


    執行命令后,會在當前目錄下生成文件夾 crypto-config,包含節點用戶的秘鑰以及證書文件。


    • 通過scp命令分發 crypto-config文件夾,至其他4臺虛擬機的/etc/hyperledger/fabric 目錄下

    ???

    2.  配置Orderer 節點的啟動創世區塊,新建通道交易的相關配置


    • 通過配置文件 configtx.yaml 配置ordere 節點啟動需要的創始區塊信息,以及新建應用通道的交易信息。配置文件內容如下:


    configtx.yaml


    • 使用工具configtxgen生成 orderer 節點啟動所需的創世區塊:

    configtxgen -profile TwoOrgsOrdererGenesis -outputBlock genesis.block


    • 使用工具 configtxgen生成創建應用通道的交易配置文件:

    configtxgen -profile TwoOrgsChannel -outputCreateChannelTx testchannel.tx -channelID testchannel


    • 使用工具 configtxgen 生成更新組織錨節點的配置信息文件:

    configtxgen –profile TwoOrgsChannel
    –outputAnchorPeersUpdate ./Org1MSPanchors.tx –channelID testchannel –asOrg Org1MSP


    configtxgen –profile TwoOrgsChannel
    –outputAnchorPeersUpdate ./Org2MSPanchors.tx –channelID testchannel –asOrg Org2MSP


    • 執行命令后,在當前目錄下會生成如下文件:

    genesis.block、testchannel.tx、Org1MSPanchors.tx、Org2MSPanchors.tx


    • 通過 scp 命令發送 testchannel.yx 和 Org1MSPanchors.tx 兩個文件至10.121.60.2

    • 通過 scp 命令把 Org2MSPanchors.tx 文件至10.121.60.4

    ???

    3. 設置虛擬機 Hosts 文件


    由于 fabric 網絡啟動相關的配置文件中,與網絡地址相關的信息都是填寫的域名,所以需要在 hosts 文件中配置域名與 ip 的對應關系,在我們這次的測試環境中處理 orderer 節點,其他的4個 peer 節點的虛擬機都需要配置相關的 hosts 信息:


    10.121.60.1 orderer.test.com
    10.121.60.2 peer0.org1.test.com
    10.121.60.3 peer1.org1.test.com
    10.121.60.4 peer0.org2.test.com
    10.121.60.5 peer1.org2.test.com


    其中域名是根據 cryprto-config.yaml 的配置信息得來,后續的配置文件會詳細說明


    4. 配置 orderer 啟動環境


    在 orderer 節點的虛擬機配置 orderer 節點啟動相關配置信息 orderer.yaml,并保存在/etc/hyperledger/fabric 目錄下。相關配置文件內容見附件


    從 cypto-config 文件夾下,拷貝 orderer 節點的秘鑰以及證書文件至 fabric 啟動環境變量目錄下:


    cp –r ./crypto-config/ordererOrganizations/test.com/orderers/orderer.test.com/msp ./
    cp –r ./crypto-config/ordererOrganizations/test.com/orderers/orderer.test.com/tls ./


    根據前文的操作,fabric 網絡 orderer 節點的執行環境目錄下必須有以下文件及文件夾:


    ./crypto-config、./msp、./tls、orderer.yaml、genesis.block


    啟動 orderer 節點:orderer start


    5. 配置 peer 啟動環境


    在 peer 節點的虛擬機配置 peer 節點啟動相關配置信息 core.yaml,并保存在/etc/hyperledger/fabric 目錄下。相關配置文件內容見附件。


    從 crypto-config 文件夾下,拷貝 peer 節點的秘鑰以及證書文件至 fabric 啟動環境變量目錄下:


    cp –r ./crypto-config/peerOrganizations/org1.test.com/peers/peer0.org1.test.com/msp ./
    cp –r ./crypto-config/peerOrganizations/org1.test.com/peers/peer0.org1.test.com/tls ./


    注意標記部分應該在對應的目錄下拷貝對應的文件信息(可以參考 hosts 配置信息的內容區分)


    根據前文的操作,fabric 網絡 peer 節點的執行環境目錄下必須有以下文件及文件夾:


    ./crypto-config.tx、./msp、./tls、core.yaml、channel.tx 、 core.yaml、
    Org1MSPanchors.tx(.2虛擬機)、
    Org2MSPanchors.tx(.4虛擬機)


    啟動 peer 節點:peer node start


    注意,拷貝 msp、tls 文件夾的動作可以不需要操作,只需要在對應的 orderer.yaml 以及 core.yaml 配置文件中設置相應的路徑即可,這里為了能夠與附件中的配置信息一致,故把相應的秘鑰與證書文件拷貝至fabric 網絡執行環境變量的目錄下


    6. 創建應用通道


    設置相應環境變量(根據相應環境修改配置)**


    CORE_PEER_LOCALMSPID=”Org1MSP”
    CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config \

    /peerOrganizations/org1.test.com/users/Admin@org1.test.com/msp


    執行命令創建應用通道


    peer channel create
    -o orderer.test.com:7050
    -c testchannel
    -f ./channel.tx
    --tls true
    --cafile /etc/hyperledger/fabric/crypto-config
    /ordererOrganizations/test.com/orderers
    /orderer.test.com/msp/tlscacerts
    /tlsca.test.com-cert/pem


    命令執行成功以后,會在當前目錄下生成 應用通道的創世區塊testchannel.block 文件,只有使用該文件,才可以加入對應的應用通道。使用 scp命令分發至其他3臺 peer 節點虛擬機的 fabric 網絡執行環境變量下(/etc/hyperledger/fabric)。


    7. 加入應用通道


    執行命令加入應用通道:

    peer channel join –b testchannel.block


    命令執行成功后,會看到提示信息:

    Peer joined the channel!


    加入應用通道的peer 節點虛擬機都可以通過終端命令查看加入的通過信息,如圖:


    加入通道


    8. 更新錨節點配置


    執行命令更新負責代表組織與其他節點通信的錨節點:


    peer channel update
    -o orderer.test.com:7050
    -c testchannel
    -f ./Org1MSPanchors.tx
    --tls true
    --cafile /etc/hyperledger/fabric/crypto-config
    /ordererOrganizations/test.com/orderers
    /orderer.test.com/msp/tlscacerts
    /tlsca.test.com-cert/pem


    錨節點負責代表組織與其他組織中的節點進行 Gossip 通信。


    5

    測試鏈碼


    1. 安裝鏈碼


    設置相應環境變量(根據相應環境修改配置):


    CORE_PEER_LOCALMSPID=”Org1MSP”
    CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config /peerOrganizations/org1.test.com/users/Admin@org1.test.com/msp


    打包鏈碼,由于這次的例子是基于 go 語言開發的智能合約,會依賴 go 的開發環境進行安裝,如果使用 peer chaincode install 命令指定鏈碼路徑安裝,可能會造成其他虛擬上安裝的同樣的鏈碼無法同步實例化(go 開發環境不一致引起的問題),所以這里使用 go chaincode package 打包鏈碼,然后通過安裝打包鏈碼文件進行鏈碼的安裝。


    注意:這里進行測試的鏈碼是 fabric 源碼中的樣例-p 指定的路徑在命令執行的時候會自動根據 GOPATH 環境變量自動補全前綴,所以路徑一個在 $GOPATH/src/目錄下:
    peer chaincode package –n test –p github.com/hyperledger/fabric/examples/chaincode /go/chaincode_exanple02 –v 1.0 test.pak
    使用 scp 命令分發 test.pak 文件至其他3臺 peer 節點虛擬機的 fabric 網絡執行環境變量路徑下。


    安裝鏈碼

    peer chaincode install test.pak


    安裝鏈碼的 peer 節點服務器可以通過終端命令查看已安裝的鏈碼信息,如圖:


    這里寫圖片描述


    2. 初始化鏈碼


    初始化鏈碼,只需要在一臺 peer 節點的服務器上執行實例化后自動創建鏈碼容器,其他 peer 節點服務器會同步該實例化的鏈碼信息,并創建鏈碼容器


    執行命令實例化鏈碼:


    peer chaincode instantiate
    -o orderer.test.com:7050
    -C testchannel
    -n test
    -v 1.0
    -c‘{“Args”:[“init”,”a”,”100”,”b”,”200”]}’
    -P “OR (‘Org1MSP.member’,’Org2MSP.member’)”
    --tls true
    --cafile /etc/hyperledger/fabric/crypto-config
    /ordererOrganizations/test.com/orderers
    /orderer.test.com/msp/tlscacerts
    /tlsca.test.com-cert/pem


    命令執行后對交易用戶 a賦值100,交易用戶 b 賦值200代幣。


    執行命令成功后,可以通過命令查看 peer 節點服務下已經實例化的鏈碼信息,如圖:


    這里寫圖片描述


    使用命令查看鏈碼容器信息:docker ps。如圖:


    這里寫圖片描述


    3. 測試交易


    執行命令發送一筆交易,命令 a 向 b 轉賬 10個代幣:


    peer chaincode invoke
    -o orderer.test.com:7050
    -C testchannel
    -n test
    -c ‘{“Args”:[“invoke”,”a”,”b”,”10”]}’
    --tls true
    --cafile /etc/hyperledger/fabric/crypto-config
    /ordererOrganizations/test.com/orderers
    /orderer.test.com/msp/tlscacerts
    /tlsca.test.com-cert/pem


    執行命令成功后,通過命令查詢余額信息:


    peer chaincode query \

    -n test
    -C testchannel
    -c ‘{“Args”:[“query”,”a”]}’


    內容來源于:簡書

    作者:還是小把戲

    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。
    相關新聞
    發表評論

    請先 注冊/登錄 后參與評論

      回頂部
    • <option id="cacee"><noscript id="cacee"></noscript></option>
    • <table id="cacee"><noscript id="cacee"></noscript></table>
    • <td id="cacee"></td>
    • <option id="cacee"></option>
    • <table id="cacee"></table>
    • <option id="cacee"><option id="cacee"></option></option>
    • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
      <option id="cacee"><option id="cacee"></option></option>
      妖精视频