Hyperledger Fabric學習筆記——startFabric.sh

fabcar案例中的startFabric.sh調用了first-network.sh腳本,建立了一個區塊鏈網絡,並且將chaincode目錄中的fabcar鏈碼安裝到節點上並在通道中實例化。本文將以JS版本鏈碼爲例,手動安裝並實例化鏈碼。

startFabric.sh首先調用byfn.sh,./byfn.sh up -a -n -s couchdb,也可以手動啓動first-network網絡,具體見另一篇博客。

1、清理環境

./byfn.sh down
docker rm -f $(docker ps -aq)
docker rmi -f $(docker images | grep fabcar | awk '{print $3}')
rm -rf ./hfc-key-store

2、運行first-network案例網絡

可以參照之前的博客手動運行,這裏方便起見直接使用提供的腳本運行。

./byfn.sh up -a -n -s couchdb

3、安裝鏈碼依賴(JS版鏈碼爲例)

cd chaincode/fabcar/javascript
npm install

4、在peer0.org1.example.com上打包鏈碼

官方提供的腳本中爲了方便起見,將peer命令後面都設置了提交到orderer的參數,實際有些操作並不需要,故後面可能部分和官方腳本略有不同。注意--path指定鏈碼的存儲路徑,docker-compose-cli.yaml文件中有卷的映射關係./..chaincode/:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode,因此主機的fabric-samples/chaincode目錄對應着peer容器的/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode目錄。

#進入cli容器終端
docker exec -it cli bash
#導入peer0.org1.example.com環境變量
CORE_PEER_LOCALMSPID=Org1MSP
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
#在peer0.org1.example.com上打包鏈碼
peer lifecycle chaincode package fabcar.tar.gz --path /opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/fabcar/javascript --lang node --label fabcarv1

5、在不同節點安裝鏈碼

這裏要注意一下,因爲我們是在所有的節點上都安裝相同的鏈碼,因此只打包一次,通過更改環境變量安裝到4個peer節點上,同樣後面也只設置一次鏈碼ID。

peer lifecycle chaincode install fabcar.tar.gz

CORE_PEER_LOCALMSPID=Org1MSP
CORE_PEER_ADDRESS=peer1.org1.example.com:8051
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

peer lifecycle chaincode install fabcar.tar.gz


CORE_PEER_LOCALMSPID=Org2MSP
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

peer lifecycle chaincode install fabcar.tar.gz

CORE_PEER_LOCALMSPID=Org2MSP
CORE_PEER_ADDRESS=peer1.org2.example.com:10051
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

peer lifecycle chaincode install fabcar.tar.gz

6、查詢已安裝的鏈碼,將鏈碼ID設置爲環境變量

鏈碼ID在不同主機上生成的是不一樣的,因此根據查詢結果自行設置。

peer lifecycle chaincode queryinstalled
CC_PACKAGE_ID=fabcarv1:2967ce2aca225ca89f2049b7549957e841cc0621c4d0aa41adcba66bbae36e0c

7、各組織批准鏈碼定義

切換peer節點的環境變量,多次執行下面的命令,所有組織各自在其組織層面批准鏈碼(只需要每個組織一個peer執行即可)。

CORE_PEER_LOCALMSPID=Org1MSP
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

peer --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 --orderer=orderer.example.com:7050 lifecycle chaincode approveformyorg --package-id $CC_PACKAGE_ID --channelID mychannel --name fabcar --version 1.0 --signature-policy "AND('Org1MSP.member','Org2MSP.member')" --sequence 1 --waitForEvent

CORE_PEER_LOCALMSPID=Org2MSP
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

peer --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 --orderer=orderer.example.com:7050 lifecycle chaincode approveformyorg --package-id $CC_PACKAGE_ID --channelID mychannel --name fabcar --version 1.0 --signature-policy "AND('Org1MSP.member','Org2MSP.member')" --sequence 1 --waitForEvent

8、將鏈碼定義提交到通道

通過checkcommitreadiness命令可以查看各組織是否批准了相同的鏈碼定義,如果相同,就可以將鏈碼定義提交到通道了(只需要任何組織的某個節點執行一次即可),可以通過querycommitted查詢通道上實例化的鏈碼定義。

peer --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 --orderer=orderer.example.com:7050 lifecycle chaincode checkcommitreadiness --channelID mychannel --name fabcar --version 1.0 --signature-policy "AND('Org1MSP.member','Org2MSP.member')" --sequence 1 --output json

peer --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 --orderer=orderer.example.com:7050 lifecycle chaincode commit --channelID mychannel --name fabcar --version 1.0 --signature-policy "AND('Org1MSP.member','Org2MSP.member')" --sequence 1 --waitForEvent --peerAddresses peer0.org1.example.com:7051 --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

peer lifecycle chaincode querycommitted --channelID mychannel --name fabcar

9、調用鏈碼初始化函數和query函數

peer --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 --orderer=orderer.example.com:7050 chaincode invoke -C mychannel -n fabcar -c '{"function":"initLedger","Args":[]}' --waitForEvent --waitForEventTimeout 300s --peerAddresses peer0.org1.example.com:7051 --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

CORE_PEER_LOCALMSPID=Org1MSP
CORE_PEER_ADDRESS=peer1.org1.example.com:8051
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

peer --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 --orderer=orderer.example.com:7050 chaincode query -C mychannel -n fabcar -c '{"function":"queryAllCars","Args":[]}' --peerAddresses peer1.org1.example.com:8051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

10、運行成功截圖如下

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章