1. 程式人生 > >HyperLedger Fabric v1.1.0-alpha 版本原始碼編譯及單節點網路搭建

HyperLedger Fabric v1.1.0-alpha 版本原始碼編譯及單節點網路搭建

本文主要參考:https://blog.csdn.net/honganboy/article/details/78714578 的介紹,十分感謝作者。但是安裝版本和環境不同,安裝過程也遇到了一些小問題,因此也再寫一篇供大家參考。

安裝環境:作業系統-64位Centos7.2,Fabric版本-v1.1.0-alpha,Go語言版本-1.9.4

安裝Go後,使用go env命令檢視GOPATH,本且在本地嘗試echo $GOPATH檢視路徑(如果不是同一個安裝使用者,可能為空)

一.編譯Fabric原始碼

首先構建測試資料夾,在當前使用者目錄下建立如下檔案結構:

fabric-1.1-release
----bin(放置所有編譯後的二進位制檔案)
----networks(放置但節點網路所需的配置檔案和區塊鏈賬本資料)
----chaincodes(放置鏈碼相關,本篇暫不涉及)

下載Fabric v1.1.0-alpha 版本原始碼至GOPATH

wget https://codeload.github.com/hyperledger/fabric/tar.gz/v1.1.0-alpha
tar -xvf v1.1.0-alpha

mkdir -p $GOPATH/src/github.com/hyperledger
mv fabric-1.1.0-alpha $GOPATH/src/github.com/hyperledger/fabric

獲取編譯常量值,在farbic原始碼目錄下執行make test-cmd命令獲取-ldflags選項的取值:


之後編譯原始碼時,都需要帶著-ldflags指定。切換fabric-1.1-release/bin,開始進行編譯

編譯Orderer

Orderer節點是用於對交易進行排序和共識,生產環境可以支援Kafka模式。

go build -gcflags "-N -l" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.1.1-snapshot-38c190f -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.4.6 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.Experimental=true" github.com/hyperledger/fabric/orderer

編譯Peer

Peer節點功能包含兩部分,一部分是服務端用於交易的背書,提交等;另一部分是作為peer cli,支援命令列指令去配置channel、chaincode等。

go build -gcflags "-N -l" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.1.1-snapshot-38c190f -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.4.6 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.Experimental=true" github.com/hyperledger/fabric/peer

編譯cryptogen

cryptogen用於生成交易簽名及SSL通訊用到證書及私鑰對,可以使用fabric-ca或者其他ca頒發的證書,但測試環境使用crytogen更簡單。

go build -gcflags "-N -l" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.1.1-snapshot-38c190f -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.4.6 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.Experimental=true" github.com/hyperledger/fabric/common/tools/cryptogen

編譯configtxgen

configtxgen為區塊鏈配置工具,用於生成orderer節點的創世區塊、channel的配置、錨節點的配置等。

go build -gcflags "-N -l" -ldflags "-X github.com/hyperledger/fabric/common/metadata.Version=1.1.1-snapshot-38c190f -X github.com/hyperledger/fabric/common/metadata.BaseVersion=0.4.6 -X github.com/hyperledger/fabric/common/metadata.BaseDockerLabel=org.hyperledger.fabric -X github.com/hyperledger/fabric/common/metadata.DockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.BaseDockerNamespace=hyperledger -X github.com/hyperledger/fabric/common/metadata.Experimental=true" github.com/hyperledger/fabric/common/tools/configtxgen

驗證編譯結果

使用orderer version和peer version可以驗證編譯結果


二.生成配置檔案

啟動網路前,需要生三個配置檔案:(1)使用cryptogen生成網路需要的安全證書;(2)使用configtxgen生成Orderer的創世紀區塊;(3)使用configtxgen建立channel配置檔案。在networks目錄下,新建single-dev-env/config資料夾,用於存放配置檔案。下面預設命令執行目錄是~/fabric-1.1-release

生成安全證書

使用cryptogen生成網路需要的證書,需指定配置檔案,參考官方fabric-samples的first-network的crypto-config.yaml檔案,編寫只有一個orderer和一個peer的配置檔案crypto-config.yaml(放在single-dev-env/config目錄下)

OrdererOrgs:
  - Name: Orderer
    Domain: example.com
    Specs:
      - Hostname: orderer
PeerOrgs:
  - Name: Org
    Domain: example.com
    Template:
      Count: 1
      Hostname: peer
    Users:
      Count: 1
cryptogen generate --config=networks/single-dev-env/config/crypto-config.yaml --output=networks/single-dev-env/config/crypto-config

可以使用tree命令檢視生成證書檔案,如下圖所示。搭建Fabric執行環境,Peer節點、Orderder節點和Peer Client節點(命令列部署chaincode、呼叫合約)都需要msp和tls證書,msp用於網路的成員關係管理,認證了參與者的身份;tls是用於安全通訊,本次測試環境暫不開啟。

生成創世紀區塊

參考官方fabric-samples的first-network的configtx.yaml檔案編寫一個configtx.yaml檔案(放在single-dev-env/config目錄下):

Profiles:
    SingleSoloOrdererGenesis:
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
        Consortiums:
            SampleConsortium:
                Organizations:
                    - *Org
    SingleSoloChannel:
        Consortium: SampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org

Organizations:
    - &OrdererOrg
        Name: OrdererOrg
        ID: OrdererMSP
        MSPDir: crypto-config/ordererOrganizations/example.com/msp

    - &Org
        Name: OrgMSP
        ID: OrgMSP
        MSPDir: crypto-config/peerOrganizations/example.com/msp
        AnchorPeers:
            - Host: peer.example.com
              Port: 7051

Orderer: &OrdererDefaults
    OrdererType: solo
    Addresses:
        - orderer.example.com:7050
    BatchTimeout: 2s
    BatchSize:
        MaxMessageCount: 10
        AbsoluteMaxBytes: 99 MB
        PreferredMaxBytes: 512 KB
    Organizations:

Application: &ApplicationDefaults
    Organizations:

直接修改host檔案,增加域名和LocalIP的對映。sudo vi /etc/hosts

127.0.0.1       example.com
127.0.0.1       orderer.example.com
127.0.0.1       peer.example.com

直接使用上一小節終端,配置FABRIC_CFG_PATH環境變數告訴configtxgen去哪個目錄尋找configtx.yaml檔案,並執行生成創世區塊命令:

export FABRIC_CFG_PATH=$(pwd)/networks/single-dev-env/config/
configtxgen -outputBlock networks/single-dev-env/config/genesis.block -profile SingleSoloOrdererGenesis
執行完成後,可以在config資料夾下看到genesis.block檔案。

生成channel配置檔案

繼續使用上一小節終端,在networks/single-dev-env/config下,建立channel-artifacts目錄,生成mychannel的配置檔案:

mkdir networks/single-dev-env/config/channel-artifacts
export CHANNEL_NAME=mychannel
configtxgen -outputCreateChannelTx  networks/single-dev-env/config/channel-artifacts/channel.tx -profile SingleSoloChannel -channelID $CHANNEL_NAME

命令執行成功後,networks/single-dev-env/config/channel-artifacts目錄下多了一個channel.tx檔案。

三.啟動Orderer和Peer節點

本節使用環境變數配置Orderer和Peer節點,yaml檔案配置方式可參考fabric原始碼裡的sampleconfig檔案下core.yaml(peer節點使用)和orderer.yaml檔案。

啟動Orderer節點

新開啟一個終端,切換到~/fabric-1.1-release目錄並設環境變數(可寫如檔案,再執行source命令),配置Orderer節點:

export rootDir=$(pwd)
export PATH=$rootDir/bin:$PATH
export ORDERER_GENERAL_LOGLEVEL=DEBUG
export ORDERER_GENERAL_TLS_ENABLED=false
export ORDERER_GENERAL_PROFILE_ENABLED=false
export ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
export ORDERER_GENERAL_LISTENPORT=7050
export ORDERER_GENERAL_GENESISMETHOD=file
export ORDERER_GENERAL_GENESISFILE=$rootDir/networks/single-dev-env/config/genesis.block
export ORDERER_GENERAL_LOCALMSPDIR=$rootDir/networks/single-dev-env/config/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp
export ORDERER_GENERAL_LOCALMSPID=OrdererMSP
export ORDERER_FILELEDGER_LOCATION=$rootDir/networks/single-dev-env/data/orderer

執行orderer命令,看到如下輸出即證明啟動成功:

啟動Peer節點

新開啟一個終端,切換到~/fabric-1.1-release目錄並設環境變數(可寫如檔案,再執行source命令),配置Peer節點:
export rootDir=$(pwd)
export PATH=$rootDir/bin:$PATH
export CORE_PEER_ID=example_org
export CORE_CHAINCODE_MODE=dev
export CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
export CORE_PEER_NETWORKID=dev
export CORE_LOGGING_LEVEL=INFO
export CORE_PEER_TLS_ENABLED=false
export CORE_PEER_PROFILE_ENABLED=false
export CORE_PEER_ADDRESS=0.0.0.0:7051
export CORE_PEER_LISTENADDRESS=0.0.0.0:7051
export CORE_PEER_GOSSIP_ENDPOINT=0.0.0.0:7051
export CORE_PEER_EVENTS_ADDRESS=0.0.0.0:7053
export CORE_PEER_LOCALMSPID=OrgMSP
export CORE_LEDGER_STATE_STATEDATABASE=goleveldb
export CORE_PEER_MSPCONFIGPATH=$rootDir/networks/single-dev-env/config/crypto-config/peerOrganizations/example.com/peers/peer.example.com/msp
export CORE_PEER_FILESYSTEMPATH=$rootDir/networks/single-dev-env/data/peer

執行啟動命令:

peer node start -o 127.0.0.1:7050 --peer-chaincodedev=true
Peer啟動成功後,控制檯輸出如下: 


四.建立並加入通道

建立通道

新開啟一個終端,切換到~/fabric-1.1-release目錄並設環境變數:

export rootDir=$(pwd)
export PATH=$rootDir/bin:$PATH
export CHANNEL_NAME=mychannel
export CORE_CHAINCODE_MODE=dev
export CORE_PEER_ID=peer-cli
export CORE_PEER_ADDRESS=peer.example.com:7051
export CORE_PEER_LOCALMSPID=OrgMSP
export CORE_PEER_MSPCONFIGPATH=$rootDir/networks/single-dev-env/config/crypto-config/peerOrganizations/example.com/users/[email protected]/msp

執行建立命令:

peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f  $rootDir/networks/single-dev-env/config/channel-artifacts/channel.tx

執行成功後,當前目錄生成了一個mychannel.block檔案,終端輸出:


加入通道

在上一小節使用到終端執行如下命令:

peer channel join -b $CHANNEL_NAME.block

執行成功後終端輸出:


peer節點服務輸出,在mychannel的通道上部署了系統鏈碼:


五.部署鏈碼及示例呼叫

$GOPATH/src/github.com/hyperledger/fabric/examples/chaincode目錄下有官方提供的各種語言的鏈碼示例,本節將演示如何部署及呼叫一個簡單的go語言示例——fabric/examples/chaincode/go/chaincode_example02,該鏈碼主要功能是:初始化兩個賬戶及金額、賬戶間轉賬、查詢賬戶餘額和刪除賬戶。

鏈碼部署及呼叫過程如下: 

1. 啟動鏈碼對應的程式; 

2. 部署鏈碼,分install和instantiate兩個階段。其中,install將鏈碼原始碼打包成鏈碼部署檔案(CDS)並上傳到Peer節點,instantiate將根據CDS生成鏈碼對應的Docker容器,啟動容器並執行鏈碼的例項化操作,一般是呼叫鏈碼的init方法。這裡描述的instantiate是使用“network”模式執行鏈碼,而我們此次測試使用的是“dev”模式,由啟動Peer節點時設定的CORE_CHAINCODE_MODE環境變數的值決定的。

3. 呼叫鏈碼,分invoke和query兩種操作。invoke是寫操作,可修改賬本,能產生塊,而query是讀操作,不寫賬本,也不生成塊。

啟動鏈碼

新開啟一個終端,配置環境變數並啟動,鏈碼會自動連線peer節點:

export CORE_CHAINCODE_ID_NAME=mycc:1.0
export CORE_PEER_ADDRESS=peer.example.com:7052
go run $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02/chaincode_example02.go

成功啟動後,控制檯輸出如下:


部署鏈碼

新開啟一個終端,配置環境變數並啟動:

export rootDir=$(pwd)
export PATH=$rootDir/bin:$PATH
export CHANNEL_NAME=mychannel
export CORE_PEER_ID=peer-cli
export CORE_PEER_ADDRESS=peer.example.com:7051
export CORE_PEER_LOCALMSPID=OrgMSP
export CORE_PEER_MSPCONFIGPATH=$rootDir/networks/single-dev-env/config/crypto-config/peerOrganizations/example.com/users/[email protected]/msp

注:環境變數與建立通道類似,但不能配置CORE_CHAINCODE_MODE=dev,否則會install時,鏈碼部署檔案(CDS)會包含空的codepacke,peer服務校驗不通過。

第1步:install鏈碼

peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

安裝成功後,控制檯輸出如下:

第2步:instantiate鏈碼

peer chaincode instantiate -o orderer.example.com:7050 -C $CHANNEL_NAME -n mycc -v 1.0 -c "{\"Args\":[\"init\",\"Alice\", \"100\", \"Bob\",\"200\"]}" -P "OR('OrgMSP.member')"

例項化成功後,Alice和Bob賬戶均初始化100,控制檯輸出如下:


呼叫鏈碼

繼續使用上一小節終端,執行呼叫合約命令,從Bob賬戶轉20到Alice賬戶:

peer chaincode invoke -o orderer.example.com:7050 -C $CHANNEL_NAME -n mycc -c  "{\"Args\":[\"invoke\",\"Bob\",\"Alice\",\"20\"]}"
執行成功,控制檯輸出如下:

查詢Alice賬戶餘額:

peer chaincode query -C $CHANNEL_NAME -n mycc -c "{\"Args\":[\"query\",\"Alice\"]}"

至此已成功完成當節點網路搭建,可以成功進行合約的部署和呼叫。





相關推薦

HyperLedger Fabric v1.1.0-alpha 版本原始碼編譯節點網路搭建

本文主要參考:https://blog.csdn.net/honganboy/article/details/78714578 的介紹,十分感謝作者。但是安裝版本和環境不同,安裝過程也遇到了一些小問題,因此也再寫一篇供大家參考。安裝環境:作業系統-64位Centos7.2,F

Hyperledger Fabric v1.1.0 + Ubuntu 16.04

1、go安裝(v1.9) ①下載並解壓 wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.9.linux-amd

Installing Hyperledger Fabric v1.1 on Ubuntu 16.04?—?Part I

enter eight ecif into repos terminal rac ould imageload There is an entire library of Blockchain APIs which you can select according

Hyperledger Fabric v1.1 單機多節點叢集環境搭建

Fabric v1.1 1.環境安裝 1).安裝go 1.9.x 下載地址 http://golang.org/dl/ 配置環境 #go的安裝根目錄 export GOROOT=/usr/local/go #go的工作路徑根目錄 export GOPAT

Hyperledger Fabric-v1.1節點叢集

Fabric v1.1 1.環境安裝 1).安裝go 1.9.x 下載地址 http://golang.org/dl/ 配置環境 #go的安裝根目錄 export GOROOT=/usr/local/go #go的工作路徑根目錄 export GOPAT

阿里雲容器服務區塊鏈解決方案全新升級 支援Hyperledger Fabric v1.1

作為全球開源區塊鏈領域影響最為廣泛的專案之一,超級賬本近日宣佈了Hyperledger Fabric v1.1的正式釋出。此次升級帶來了一系列豐富的新功能以及在安全性、效能與擴充套件性等諸多方面的顯著提升。更多詳情可參考下述資料: 與此同時,作為對開源區塊鏈生態的支援,

瀏覽器端類EXCEL表格插件 版本更新 - 智表ZCELL產品V1.1.0.1版本發布

api接口文檔 插件 月初 使用 target 般的 img query 支持 智表(ZCELL),瀏覽器下純JS表格控件,為您提供EXCEL般的智能體驗! 純國產化、高性價比的可靠解決方案。 更新說明 讓大家久等了。因為最近忙其他項目,發布時間稍有延遲。

區塊鏈 Hyperledger Fabric v1.0.0 環境搭建

  前言:最近專案涉及到超級賬本,在有些理論知識的基礎上,需要整一套環境來。 這是一個特別要注意的事情,筆者之前按照網路上推薦,大部分都是推薦ubuntu系統的,於是下載Ubuntu系統(16.04.5和18.04都試試),遇到各種問題,一直不能成功,大概花了好多天,一直不成功,後來都要放棄了,

區塊鏈學習——HyperLedger-Fabric v1.0環境搭建詳細教程

相對與v0.6版本來說,1.0版本改變較大,此處不多說,只是將小白自己搭建1.0環境的過程分享給大家。希望對大家能有所幫助! 這一篇可能對前面的環境搭建會寫的有些粗略,如有疑問,可閱讀上一篇V0.6版本的環境搭建詳細步驟。 一.環境準備 雲伺服器(CentOS7.2) Go語言環境 docker安裝 d

區塊鏈學習——HyperLedger-Fabric v1.0 啟動過程分析

本章我們從fabric v1.0的e2e_cli示例開始分析整個啟動過程以及在過程中的一些配置檔案 首先呢,還是確保你的基本環境已經搭建完成,v1.0原始碼和映象也都下載完畢 fabric啟動過程中的相關指令碼檔案解析 network_setup.sh指令碼檔案 在原始碼目錄下的network_set

Cloudopt性能優化更加安全!1.0.7版本發布!

方便 樂視 老用戶 成功 mage 性能提升 翻譯工具 .net 用戶 看到Cloudopt的版本更新了,果斷用起來,白名單這個可以一鍵清除倒是比較方便一點。這次新版本還是優化的細節還是不少的。 一、更新 1.Cloudopt與數十家第三方安全機構合作為您提供實時地

ROS 1.0 indigo版本安裝步驟

ubun 其他 vpd image search .bashrc 添加 分布式 64位 本文是在“ROS不能再詳細的安裝教程”的基礎上略作修改。在此特向原作者“小萌是個球”致謝。ROS(Robot Operating System)翻譯過來叫機器人操作系統,官方定義如下:R

AHK-Tab++框架(用Tab做修飾鍵,其他功能可不受影響) v1.1.0

com span 框架 想法 作者 end 應該 utl input ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 腳本名稱

Android SyetemServer程序啟動過程(基於7.0 N版本原始碼)

前言 上一篇我們學習了Zygote程序,並且知道Zygote程序啟動了SyetemServer程序,那麼這一篇我們就來學習Android7.0版本的SyetemServer程序的啟動過程。 1.Zygote啟動SyetemServer程序 在上一篇文章中我們講到在ZygoteInit.j

霸屏瀏覽器(V1.1.0

軟體介紹 霸屏瀏覽器的作用,就是讓客戶機僅提供Web訪問功能,遮蔽其它所有功能,即不允許客戶機退出瀏覽器介面,或者是使用客戶機的其它功能,也不允許關機、重啟命令。 常常用於觸控式螢幕瀏覽器、自助機瀏覽器。 注意:該軟體需要用管理員許可權執行:安裝後右擊桌面的圖示->點屬性-

EBCMS 管理系統 v1.1.0 更新,後臺介面改版

   EBCMS(易貝管理系統)是一款基於PHP+MYSQL開發的網站管理系統,系統核心極致精簡,所有功能都是通過應用擴充套件來實現。 通過應用擴充套件,可以很方便的實現諸如 知識付費 微信各類活動 分銷商城 線上答題 直播 小程式介面 客服系統 聊天室 企業網站 個人部落格

GuzzleSwoole v1.1.0,讓 Guzzle 完美相容 Swoole 協程

讓 Guzzle 支援 Swoole 協程,這個專案目的就是這麼簡單明瞭! 本專案不包含 Guzzle 功能,請自行在專案中引用 Guzzle 6.x,理論上可以支援升級 Guzzle 版本而無需更新 Guzzle-Swoole! Composer:"yurunso

官宣,PyTorch 1.0 穩定版本現已推出

簡評:快來一起快樂地學習吧。 隨著 PyTorch 生態系統和社群繼續為開發人員提供有趣的新專案和教育資源,今天(12 月 7日)在 NeurIPS 會議上釋出了 PyTorch 1.0 穩定版。研究人員和工程師現在可以輕鬆地利用開源深度學習框架的新功能,包括可在 eager 和圖形執行模式之間無縫轉換的

fabric V1.1 網路sdk nodejs搭建手冊

0.許可權 獲取管理員許可權: $ sudo passwd #設定root密碼 $ su #切換到root使用者 1.基礎工具準備 1.1.git $ apt install git 1.2.curl $ apt install curl 1.3.pip $ a

JdbcTemplate 0.9版本原始碼分析

JdbcTemplate 核心方法: public void query(PreparedStatementCreator psc, RowCallbackHandler callbackHandler) throws DataAccessException {