Fabric hyperledger 2.0 first-network 手動部署執行

前期準備

  操作系統:CentOS 7
  Fabric版本: 2.0.1

軟件/依賴 版本
go 1.14.x
git 最新版本
curl 最新版本
docker 17.06.2-ce及以上版本
docker-compose 1.14及以上

   下載fabric-samples源碼:下載地址

證書,創世塊生成

   執行目錄: $GOPATH/src/github.com/hyperledger/fabric-samples/first-network

   手工生成證書: …/bin/cryptogen 爲二進制工具cryptogen的相對路徑,如果已將cryptogen 設置爲全局使用(/usr/local/bin),則無需提供相對路徑

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

   生成創世塊: 設置FABRIC_CFG_PATH變量爲當前目錄(configtxgen工具將在FABRIC_CFG_PATH尋找configtx.yaml文件)

export FABRIC_CFG_PATH=$PWD
../bin/configtxgen -profile SampleMultiNodeEtcdRaft -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block

   創建通道,配置交易: 創世塊及後續生成的錨節點配置文件默認存放到first-network的channel-artifacts目錄

export CHANNEL_NAME=mychannel  && ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

   錨節點配置:

../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

啓動網絡

   如果要查看網絡的實時日誌,請不要提供-d標誌。再打開一個shell以執行CLI調用。

docker-compose -f docker-compose-cli.yaml -f docker-compose-etcdraft2.yaml up -d

創建,加入通道

docker exec -it cli bash   #進入cli窗口

   默認當前節點爲peer0.org1.example.com,當需要切換到其它節點執行,修改下面的四個變量的配置,本篇文章使用peer0.org1.example.com,peer0.org2.example.com兩個節點進行手動測試,如需兩組織四節點測試,修改配置按照實例執行命令即可。

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
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

   創建通道: -c指定我們的通道名稱,-f指定生成的通道配置文件(tx後綴的文件)路徑及名稱, 通道名稱必須全部爲小寫字母,少於250個字符,並且與正則表達式[a-z] [a-z0-9 .-] 相匹配

export CHANNEL_NAME=mychannel #設置環境變量,避免每次輸入變量
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

   節點peer0.org1.example.com加入通道:

peer channel join -b mychannel.block

  節點peer0.org2.example.com加入通道:

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp CORE_PEER_ADDRESS=peer0.org2.example.com:9051 CORE_PEER_LOCALMSPID="Org2MSP" 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 channel join -b mychannel.block

更新錨節點

peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp CORE_PEER_ADDRESS=peer0.org2.example.com:9051 CORE_PEER_LOCALMSPID="Org2MSP" 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 channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

鏈碼週期2.0

package

peer lifecycle chaincode package mycc.tar.gz --path github.com/hyperledger/fabric-samples/chaincode/abstore/go/ --lang golang --label mycc_1

install

   peer0.org1.example.com節點安裝鏈碼

peer lifecycle chaincode install mycc.tar.gz

   查看已安裝的鏈碼:

 peer lifecycle chaincode queryinstalled

   返回結果:Package ID:mycc_1:c62d60b38372d28e3e08032d10712d769a533da3f705421f52ece3f7dc788aa6, Label: mycc_1

   把查詢已安裝鏈碼得到的packageID作爲環境變量給保存起來:

CC_PACKAGE_ID=mycc_1:c62d60b38372d28e3e08032d10712d769a533da3f705421f52ece3f7dc788aa6

  切換到peer0.org2.example.com:

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
CORE_PEER_LOCALMSPID="Org2MSP"
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 mycc.tar.gz

approve

  接上面那條命令,當前身份爲peer0.org2.example.com,執行以下命令:

peer lifecycle chaincode approveformyorg --channelID $CHANNEL_NAME --name mycc --version 1.0 --init-required --package-id $CC_PACKAGE_ID --sequence 1 --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

  注:一定要用–package-id指定package ID, --init-required去要求在實現鏈碼的時候必須執行init函數
還提供了–signature-policy和–channel-config-policy參數去設置背書策略.背書策略規定了對於一個給定的鏈碼需要不同通道成員的多少Peer去驗證一個交易.這裏因爲未設置策略,mycc將會使用默認的背書策略,提交交易時需要大多數通道成員認可.這意味着新增或者刪除組織時,背書策略要求的背書數量會自動更新.
  執行下面命令,查看當前合約是否已被認可

peer lifecycle chaincode checkcommitreadiness --channelID mychannel --name mycc --version 1.0 --sequence 1 --output json --init-required

  切換到peer0.org1.example.com

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
CORE_PEER_LOCALMSPID="Org1MSP"
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 approveformyorg --channelID $CHANNEL_NAME --name mycc --version 1.0 --init-required --package-id $CC_PACKAGE_ID --sequence 1 --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

Commit

peer lifecycle chaincode commit -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 --channelID mychannel --name mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --version 1.0 --sequence 1 --init-required

參數含義
–tls 是否啓動tls
–cafile證書路徑
–channelID 智能合約安裝通道
–name 合約名
–version 合約版本
–package-id queryinstalled查詢的合約ID
–sequence 序列號
–waitForEvent 等待peer提交交易返回
–init-required 合約是否必須執行init
–peerAddresses 節點路徑
–tlsRootCertFiles 節點ca根證書路徑(–peerAddresses --tlsRootCertFiles 連用,可多個節點,多個節點即將合約部署到對應節點集合上)

  查看節點已提交合約

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

Init

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 --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt --isInit -c '{"Args":["Init","a","100","b","100"]}'

   執行query函數

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章