1. 程式人生 > 其它 >hyperledger fabric執行測試(每步程式碼+結果)

hyperledger fabric執行測試(每步程式碼+結果)

使用以下命令結束之前生成的網路

./network.sh down     

啟動測試網路

./network.sh up createChannel   

進入go.mod在fabric-samples/chaincode/fabcar/go目錄中

cd /home/lighthouse/fabric/scripts/fabric-samples/chaincode/fabcar/go

 該go.mod檔案將Fabric合約API匯入到智慧合約包中

GO111MODULE=on go mod vendor

返回到test-network所在目錄,以便可以將鏈碼與其他網路部件打包在一起

cd ../../../test-network  

所需格式的鏈碼包可以使用peer CLI建立,使用以下命令將這些二進位制檔案新增到你的CLI路徑

export PATH=${PWD}/../bin:$PATH    

設定FABRIC_CFG_PATH指向fabric-samples裡的core.yaml

export FABRIC_CFG_PATH=$PWD/../config/

使用peer lifecycle chaincode package命令建立鏈碼包

peer lifecycle chaincode package fabcar.tar.gz --path ../chaincode/fabcar/go/ --lang golang --label fabcar_1

命令解釋:此命令將在當前目錄中建立一個名為basic.tar.gz的軟體包。–lang標籤用於指定鏈碼語言,–path標籤提供智慧合約程式碼的位置,該路徑必須是標準路徑或相對於當前工作目錄的路徑,–label標籤用於指定一個鏈碼標籤,該標籤將在安裝鏈碼後對其進行標識。建議您的標籤包含鏈碼名稱和版本。

打包Fabcar智慧合約後,我們可以在peer節點上安裝鏈碼。需要在將認可交易的每個peer節點上安裝鏈碼。因為我們將設定背書策略以要求來自Org1和Org2的背書,所以我們需要在兩個組織的peer節點上安裝鏈碼:peer0.org1.example.com和peer0.org2.example.com

先在Org1 peer節點上安裝鏈碼:

①設定以下環境變數,以Org1管理員的身份操作peer CLI

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:7051

②使用 peer lifecycle chaincode install 命令在peer節點上安裝鏈碼

peer lifecycle chaincode install fabcar.tar.gz

然後在Org peer2節點安裝鏈碼,設定以下環境變數,以Org2管理員的身份操作peer CLI

export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/[email protected]/msp
export CORE_PEER_ADDRESS=localhost:9051

使用 peer lifecycle chaincode install 命令在peer節點上安裝鏈碼

peer lifecycle chaincode install fabcar.tar.gz

安裝鏈碼包後,需要通過組織的鏈碼定義。如果組織已在其peer節點上安裝了鏈碼,則他們需要在其組織通過的鏈碼定義中包括包ID。包ID用於將peer節點上安裝的鏈碼與通過的鏈碼定義相關聯,並允許組織使用鏈碼來認可交易。

使用peer lifecycle chaincode queryinstalled命令來查詢peer節點,從而找到鏈碼的包ID

peer lifecycle chaincode queryinstalled

包ID是鏈碼標籤和鏈碼二進位制檔案的雜湊值的組合。每個peer節點將生成相同的包ID。通過鏈碼時,我們將使用包ID,因此,將包ID儲存為環境變數。將返回的包ID貼上到下面的命令中。

注意:包ID對於所有使用者而言都不相同,因此需要使用上一步中從命令視窗返回的包ID來完成此步驟。而不是直接複製命令。

export CC_PACKAGE_ID=fabcar_1:1146b4b491871bf18b23dd67dd8cc058655b36cc0e2274f165ed06b796a8f276

因為已經設定了環境變數為peer CLI作為Orig2管理員進行操作,所以我們可以以Org2組織級別將Fabcar的鏈碼定義通過。使用 peer lifecycle chaincode approveformyorg命令通過鏈碼定義:

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

設定以下環境變數以Org1管理員身份執行:

export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/[email protected]/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_ADDRESS=localhost:7051

Org1通過鏈碼定義:

peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

將鏈碼提交給通道。使用peer lifecycle chaincode checkcommitreadiness命令來檢查通道成員是否已批准相同的鏈碼定義:

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name fabcar --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json

該命令將生成一個JSON對映,該對映顯示通道成員是否批准了checkcommitreadiness命令中指定的引數:

由於作為通道成員的兩個組織都同意了相同的引數,因此鏈碼定義已準備好提交給通道。你可以使用peer lifecycle chaincode commit命令將鏈碼定義提交到通道。commit命令還需要由組織管理員提交。命令成功執行,應該能夠得到類似於以下的響應:

peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name fabcar --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/exam命令成功執行,應該能夠得到類似於以下的響應:ple.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

可以使用peer lifecycle chaincode querycommitted命令來確認鏈碼定義已提交給通道。

peer lifecycle chaincode querycommitted --channelID mychannel --name fabcar --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

如果將鏈碼成功提交給通道,該querycommitted命令將返回鏈碼定義的順序和版本:

呼叫鏈碼:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabcar --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"initLedger","Args":[]}'

命令成功執行,應該能夠得到類似於以下的響應:

還可以使用查詢功能來讀取由鏈碼建立的汽車的集合:

peer chaincode query -C mychannel -n fabcar -c '{"Args":["queryAllCars"]}'

對查詢的響應應為以下汽車列表:

可以通過從test-network目錄發出以下命令來關閉測試網路:

./network.sh down

本文主要參考:https://blog.csdn.net/mutou___/article/details/110039475