上一篇https://www.cnblogs.com/xdyixia/p/11738096.html
介紹了Hyperledger Fabric環境中各種軟件安裝和源碼編譯,這一篇介紹快速運行一個簡單的Fabric網絡。
方法一:利用源碼中的腳本運行docker鏡像
在Fabric的源碼中提供了一個基於docker-compose運行上篇文章中的Docker鏡像文件的例子。
在$GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli目錄里運行腳本
./network_setup.sh up
下面是運行該腳本啟動Fabric的結果

這個做了以下操作:
1)編譯生成Fabric公私鑰、證書的程序,程序在目錄:fabric/release/linux-amd64/bin 2)基於configtx.yaml生成創世區塊和通道相關信息,並保存在channel-artifacts文件夾。 3)基於crypto-config.yaml生成公私鑰和證書信息,並保存在crypto-config文件夾中。 4)基於docker-compose-cli.yaml啟動1Orderer+4Peer+1CLI的Fabric容器。 5)在CLI啟動的時候,會運行scripts/script.sh文件,這個腳本文件包含了創建Channel,加入Channel,安裝Example02,運行Example02等功能。
以上我們的整個Fabric網絡已經運行搭建完成
我們現在以安裝好的Example02為例,在官方例子中,channel名字是mychannel,鏈碼的名字是mycc。我們首先進入CLI,我們重新打開一個命令行窗口,輸入:
docker exec -it cli bash
運行以下命令可以查詢a賬戶的余額:
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
可以看到余額是90:
然后,我們試一試把a賬戶的余額再轉20元給b賬戶,運行命令:
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'
運行結果為:
現在轉賬完畢, 我們試一試再查詢一下a賬戶的余額,沒問題的話,應該是只剩下70了。我們看看實際情況:
果然,一切正常。最后我們要關閉Fabric網絡,首先需要運行exit命令退出cli容器。關閉Fabric的命令與啟動類似,命令為:
cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
./network_setup.sh down
現在我們整個Fabric的環境已經測試完畢
該實驗參照該文實現https://www.cnblogs.com/studyzy/p/7437157.html
方法二:直接運行模塊可執行文件的方式,不用docker
1. 創建一個目錄來存放命令執行過程中生成的相關文件
mkdir -p /opt/hyperledger
2. 生成fabric需要的證書文件
首先創建存放配置文件和證書的文件夾
mkdir -p /opt/hyperledger/fabricconfig
cryptogen提供了一個命令可以獲取cryptogen模塊所需的配置文件的樣式
cryptogen showtemplate
cryptogen showtemplate > crypto-config.yaml 可以直接把樣式保存到文件中再進行修改
根據模板修改后保存到crypto-config.yaml文件中。
然后執行以下命令,生成證書文件crypto-config:
cryptogen generate --config=crypto-config.yaml --output ./crypto-config
發現新增文件夾crypto-config,里面存在本例相關的配置文件,可以通過tree命令查看證書文件內容。
現在所有證書文件都生成完畢。
3. 創始塊的生成
賬本區塊鏈用來存儲賬本的交易數據,但是第一個區塊是例外,它用於存儲配置信息,該區塊被稱為創始塊。configtxgen模塊是專門用來生成 系統的創始塊和 Channel的創始塊,並且configtxgen模塊也需要一個配置文件定義相關屬性。Fabric源碼中提供了該配置文件的例子,我們只需修改一下即可。模板文件configtx.yaml在$GOPATH/src/github.com/hyperledger/fabric/sampleconfig/目錄下。
首先創建一個目錄來存儲orderer節點相關的文件:
mkdir -p /opt/hyperledger/order
把配置模板文件復制到剛創建的order目錄
cp -r $GOPATH/src/github.com/hyperledger/fabric/sampleconfig/configtx.yaml /opt/hyperledger/order/
生成創始塊文件
configtxgen -profile TestTwoOrgsOrdererGenesis -outputBlock ./orderer.genesis.block
上述命令執行完成后會在order文件夾中生成創始塊文件orderer.genesis.block
4. 賬本創始塊的生成
通道,即賬本,在Fabric中稱為Channel,一個Channel表示一個賬本,Fabric和其他區塊鏈最大的區別是它支持多賬本,每個Fabric應用至少包含一個Channel,下面創建Channel創始塊,創建channel的配置文件也是configtx.yaml。
configtxgen -profile TestTwoOrgsChannel -outputCreateChannelTx ./roberttestchannel.tx -channelID roberttestchannel
命令執行完成之后會在order文件夾中生成roberttestchannel.tx文件,該文件用來生成channel,除此之外還需要生成相關的錨點文件,對應的執行以下兩條命令:
configtxgen -profile TestTwoOrgsChannel -outputAnchorPeersUpdate ./Org1MSPanchors.tx -channelID roberttestchannel -asOrg Org1MSP
configtxgen -profile TestTwoOrgsChannel -outputAnchorPeersUpdate ./Org2MSPanchors.tx -channelID roberttestchannel -asOrg Org2MSP
執行完后會在order文件夾中生成兩個錨節點文件Org1MSPanchors.tx和Org2MSPanchors.tx。
5. orderer節點的啟動
orderer節點即排序節點,負責交易的打包和區塊的生成。orderer節點的配置信息通常放在環境變量或者配置文件中,本例放於配置文件中,Fabric源碼提供了節點啟動所需配置文件的實例,將示例文件復制到orderer的文件夾修改使用。
cp -r $GOPATH/src/github.com/hyperledger/fabric/sampleconfig/orderer.yaml /opt/hyperledger/order
修改配置,然后在配置文件orderer.yaml所在目錄執行啟動order命令
orderer start
orderer服務啟動起來了,因此需要新開一個終端進行后續操作。
6. peer節點的啟動
同樣的,首先需要創建一個文件夾來存放peer模塊的配置文件和區塊數據
mkdir -p /opt/hyperledger/peer
將相關的模板配置文件core.yaml復制到peer文件夾下並修改內容
cd /opt/hyperledger/peer cp $GOPATH/src/github.com/hyperledger/fabric/sampleconfig/core.yaml /opt/hyperledger/peer
然后在core.yaml文件所在目錄下執行以下命令啟動peer節點
export set FABRIC_CFG_PATH=/opt/hyperledger/peer/ peer node start >> log_peer.log 2>&1 &
7. 創建通道
第一步:創建通道
export set CORE_PEER_LOCALMSPID=Org1MSP export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
peer channel create -t 50s -o orderer.example.com:7050 -c roberttestchannel -f /opt/hyperledger/order/roberttestchannel.tx
創建完成后會在當前目錄生成roberttestchannel.block文件,即為通道初始塊文件。
第二步:讓已經運行的peer節點加入通道
export set CORE_PEER_LOCALMSPID=Org1MSP
export set CORE_PEER_ADDRESS=peer0.org1.example.com:7051
export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
peer channel join -b /opt/hyperledger/peer/roberttestchannel.block
第三步;更新錨節點
export set CORE_PEER_LOCALMSPID=Org1MSP export set CORE_PEER_ADDRESS=peer0.org1.example.com:7051 export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp peer channel update -o orderer.example.com:7050 -c roberttestchannel -f /opt/hyperledger/order/Org1MSPanchors.tx
8.chaincode的部署和調用
可以使用Fabric源碼自帶的例子作為測試Chaincode.
$GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go chaincode_example02
chaincode相關測試一共有四個步驟
第一步:部署chaincode即鏈代碼
第二步:實例化鏈代碼
第三步:通過鏈代碼寫入數據
第四步:通過鏈代碼查詢數據
參考:
《區塊鏈開發實戰 Hyperledger Fabric關鍵技術與案例分析》
《區塊鏈原理、設計與應用》