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"]}'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章