Fabric1.4:手動啟動 first-network 網絡(一)


注意:本文所使用的 fabric 版本為 v1.4.3,與其它版本的網絡存在差異。

手動啟動 first-network 網絡系列分為三部分:

第一篇單純使用命令行的形式執行 byfn.sh 腳本中的內容,第二篇和第三篇是對手動啟動網絡過程所使用的命令和配置文件的解釋。

1 生成組織結構與身份證書

我們使用 cryptogen 工具將文件 crypto-config.yaml 作為參數配置生成組織結構與身份證書:

$ cd ./fabric-sample/first-network
$ ../bin/cryptogen generate --config=./crypto-config.yaml

執行完畢后,當前文件夾下會出現一個新的文件夾:crypto-config,在該目錄下就是存放剛剛生成的組織結構與身份證書。


2 生成網絡啟動的配置文件

我們使用 configtxgen 工具會將文件 configtx.yaml 作為參數配置生成網絡啟動的配置文件。

因此,我們需要告訴 configtxgen 工具在哪里尋找它需要的 configtx.yaml 文件,告訴它查看當前的工作目錄:

$ export FABRIC_CFG_PATH=$PWD

2.1 生成系統通道創世區塊

使用 configtxgen 工具指定 configtx.yaml 文件中定義的 TwoOrgsOrdererGenesis 模塊,生成 Orderer 系統通道的初始區塊文件:

$ ../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

成功執行后,在 channel-artifacts 目錄下會生成系統通道的創世區塊文件 genesis.block


2.2 生成應用通道交易配置文件

使用 configtxgen 工具指定 configtx.yaml 文件中定義的 TwoOrgsChannel 模塊,創建應用通道配置交易文件:

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

channel-artifacts 目錄下會生成應用通道交易配置文件 channel.tx


2.3 生成兩個組織的錨節點更新配置文件

使用 configtxgen 工具指定 configtx.yaml 文件中定義的 TwoOrgsChannel 模塊,分別為 org1 和 org2 生成應用通道上的錨節點更新配置文件:

$ ../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

channel-artifacts 目錄下會生成錨節點更新配置文件 Org1MSPanchors.txOrg2MSPanchors.tx


3 啟動分布式網絡

使用 docker-compose 工具將 docker-compose-cli.yaml 文件作為參數,啟動提供網絡服務的各個節點:

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

4 應用通道的創建與測試

4.1 創建應用通道

進入 CLI 容器:

$ docker exec -it cli bash 

創建應用通道:

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

該命令會返回一個名為 mychannel.block 的區塊文件,保存在 CLI 容器的當前目錄下。


4.2 各節點加入應用通道

peer0.org1 加入應用通道

# peer channel join -b mychannel.block

peer1.org1 加入應用通道

# CORE_PEER_ADDRESS=peer1.org1.example.com:8051
# peer channel join -b mychannel.block

peer0.org2 加入應用通道

# CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/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

peer1.org2 加入應用通道

# CORE_PEER_ADDRESS=peer1.org2.example.com:10051
# peer channel join -b mychannel.block

4.3 更新錨節點並安裝鏈碼

peer0.org1 更新為錨節點安裝鏈碼

# CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/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 channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile $ORDERER_CA
# peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/

peer0.org2 更新為錨節點並安裝鏈碼

# CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/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 $ORDERER_CA
# peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/

4.4 實例化鏈碼並測試

實例化鏈碼

# peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"

Query

# peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'

Invoke

# peer chaincode invoke -o orderer.example.com:7050 --tls --cafile $ORDERER_CA -C $CHANNEL_NAME -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 -c '{"Args":["invoke","a","b","10"]}'

在 peer1.org1 上安裝鏈碼

# CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
# CORE_PEER_ADDRESS=peer1.org1.example.com:8051
# CORE_PEER_LOCALMSPID="Org1MSP"
# CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt
# peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/

Query

# peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'

5 清除分布式網絡

使用指定的 docker-compose-cli.yaml 配置文件關閉網絡:

$ docker-compose -f docker-compose-cli.yaml down

手動刪除 crypto-configchannel-artifacts 目錄下的全部配置文件。注意,channel-artifacts 文件夾不能刪除,如果誤刪,請手動創建。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM