Hyperledger Fabric学习(二)部署

准备

  • 配置go,docker环境
  • 拉取 https://github.com/hyperledger/fabric 1.0.0版本的代码到本地$GOPATH/src/github/hyperledger/fabric路径下

部署

        部署情况如下
img

脚本一键部署

cd examples/e2e_cli/
 ✘ ./network_setup.sh up

手动分步部署

  • 进入fabric项目
make cryptogen
  • 生成公钥证书
cd examples/e2e_cli/
 ✘ ../../build/bin/cryptogen generate --config=./crypto-config.yaml
 # 生成的文件都保存到crypto-config文件夹,使用tree crypto-config命令进行查看验证
  • 回到fabric项目目录
make cryptogen
  • 生成创世区块
cd examples/e2e_cli/
 ✘ ../../build/bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
  • 生成Channel配置区块
../../build/bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
  • 锚节点更新
../../build/bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
 ✘ ../../build/bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
 # 执行成功会在channel-artifacts文件夹中,生成channel.tx、genesis.block、Org1MSPanchors.tx、Org2MSPanchors.tx四个文件
  • 查看
 ✘ tree channel-artifacts
  • docker拉取镜像
 ✘ docker-compose -f docker-compose-cli.yaml up -d
  • 查看运行情况,进入cli容器内部
 ✘ docker ps | grep fabric
 ✘ docker exec -it cli bash
  • 配置证书的环境变量,创建名字为mychannel的管道
 # 配置证书的环境变量
 ✘ 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
 # 创建名为mychannel的管道
 ✘ peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile $ORDERER_CA
  • 各个peer加入管道mychannel
# peer0.org0.com 环境
✘ 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 
✘ CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp 
✘ CORE_PEER_ADDRESS=peer1.org1.example.com:7051
✘ peer channel join -b mychannel.block

# peer1.org1.com 环境
✘ 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 
✘ CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp 
✘ CORE_PEER_ADDRESS=peer1.org1.example.com:7051
✘ peer channel join -b mychannel.block 

# peer0.org2.com 环境
✘ 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 
✘ 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:7051
✘ peer channel join -b mychannel.block

# peer1.org2.com 环境
✘ CORE_PEER_LOCALMSPID="Org2MSP" 
✘ CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt 
✘ CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/[email protected]/msp 
✘ CORE_PEER_ADDRESS=peer1.org2.example.com:7051
✘ peer channel join -b mychannel.block 
  • 给org1和org2两个组织添加锚节点
# 更新peer0.org1.com为锚节点
✘ 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 
✘ 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
✘ peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.tx --tls true --cafile $ORDERER_CA 

# 更新peer0.org2.com为锚节点
✘ 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 
✘ 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:7051
✘ peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile $ORDERER_CA
  • 给peer0.org1.com安装链码、实例化、进行链码调用
# 切换到peer0.org1.com环境下
✘ 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 
✘ 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
# 安装链码
✘ peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
# 实例化链码,并指定背书策略
✘ peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
# 调用链码查询数据
✘ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
# 链码转账操作
✘ peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile $ORDERER_CA -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}'
  • 给peer0.org2.com安装链码、实例化、进行链码调用
# 切换到org2组织中
✘ 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 
✘ 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:7051
# 给org2安装链码
✘ peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
# 调用链码查询数据
✘ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

make cryptogen编译错误

  • make cryptogen
    find: /src/github.com/hyperledger/fabric/core/chaincode/shim: No such file or directory
    build/bin/cryptogen
    CGO_CFLAGS=" " GOBIN=/Users/test01/go/src/github.com/hyperledger/fabric/build/bin go install -tags "" -ldflags "-X github.com/hyperledger/fabric/common/tools/cryptogen/metadata.Version=1.0.0" github.com/hyperledger/fabric/common/tools/cryptogen
    go build github.com/hyperledger/fabric/vendor/github.com/miekg/pkcs11: invalid flag in #cgo LDFLAGS: -I/usr/local/share/libtool
    make: *** [build/bin/cryptogen] Error 1
    

解决办法:install libtool libltdl-dev

  • ✘ apt install libtool libltdl-dev
    Unable to locate an executable at "/Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home/bin/apt" (-1)
    

解决办法: yum install libtool libtool-ltdl

发布了622 篇原创文章 · 获赞 150 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/feizaoSYUACM/article/details/104974332