美文网首页
Hyperledger Fabric 现有网络添加新组织

Hyperledger Fabric 现有网络添加新组织

作者: 舍是境界 | 来源:发表于2019-12-16 16:00 被阅读0次

本文对官方文档中关于在现有通道内添加新组织的步骤进行讲解,实际生产环境中需理解各个核心步骤,欢迎留言讨论,如有理解不到位的地方还请指正。

生成组织3的配置材料

  1. 通过org3-crypto.yaml生成证书:
cryptogen generate --config=./org3-crypto.yaml
  1. 替换docker-compose启动文件的CA证书私钥
  cp docker-compose-ca3-template.yaml docker-compose-ca3.yaml
  CURRENT_DIR=$PWD
  cd org3-artifacts/crypto-config/peerOrganizations/org3.example.com/ca/
  PRIV_KEY=$(ls *_sk)
  cd "$CURRENT_DIR"
  sed $OPTS "s/CA3_PRIVATE_KEY/${PRIV_KEY}/g" docker-compose-ca3.yaml 
  1. 通过配置文件(configtx.yaml),生成org3通道的基本材料
    • 将org3规格信息写入到json文件
      export FABRIC_CFG_PATH=$PWD && ../../bin/configtxgen -printOrg Org3MSP > ../channel-artifacts/org3.json 
      
    • 将order组织的MSP材料拷贝到org3组织材料下
      cd ../ && cp -r crypto-config/ordererOrganizations org3-artifacts/crypto-config/ 
      

准备CLI容器环境

  1. 进入cli容器
docker exec -it cli bash
  1. 导入环境变量
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  && export CHANNEL_NAME=mychannel
  1. 验证:
echo $ORDERER_CA && echo $CHANNEL_NAME

获取channel 配置最新版本区块

这里将最新版本配置区块保存到config_block.pb中:

peer channel fetch config config_block.pb -o [orderer.example.com:7050](http://orderer.example.com:7050) -c $CHANNEL_NAME --tls --cafile $ORDERER_CA

配置区块解码

将最新配置区块信息解码到json文件中,同时去除去掉所有的header、metadata、creator signatures等信息:

configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json

Org3配置材料

  1. 使用jq工具将org3.json追加到通道配置文件里
jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ./channel-artifacts/org3.json > modified_config.json
  1. 编码config.json到二进制文件中(只包含之前通道的组织信息)
onfigtxlator proto_encode --input config.json --type common.Config --output config.pb
  1. 编码modified_config.json到modified_config.pub(包含org3和之前的通道的组织)
configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
  1. 使用configtxlator计算出两个二进制文件中的差异部分到org3_update.pb
configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_config.pb --output org3_update.pb
  1. 在提交组织3的加入之前,先解码到json文件
configtxlator proto_decode --input org3_update.pb --type common.ConfigUpdate | jq . > org3_update.json
  1. 然后需要添加信封信息(之前去掉的头信息等)
echo '{"payload":{"header":{"channel_header":{"channel_id":"'$CHANNEL_NAME'", "type":2}},"data":{"config_update":'$(cat org3_update.json)'}}}' | jq . > org3_update_in_envelope.json
  1. 再利用工具重新编码
configtxlator proto_encode --input org3_update_in_envelope.json --type common.Envelope --output org3_update_in_envelope.pb

背书并提交组织3加入的更新交易

具体需要哪些组织管理员签名,根据mod_policy来,如不满足要求将会被order组织拒绝

  1. 利用org1管理员签名
peer channel signconfigtx -f org3_update_in_envelope.pb
  1. 利用org2管理员签名
    • 设置环境变量
      export CORE_PEER_LOCALMSPID="Org2MSP"
      export 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
      export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
      export CORE_PEER_ADDRESS=peer0.org2.example.com:9051
    
    • 直接发送提交交易请求,会自动签名
      peer channel update -f org3_update_in_envelope.pb -c $CHANNEL_NAME -o [orderer.example.com:7050](http://orderer.example.com:7050) --tls --cafile $ORDERER_CA
    
    • 查看日志进行验证:
      docker logs -f peer0.org1.example.com
    

配置leader选举

详见:https://hyperledgerfabric.readthedocs.io/en/latest/channel_update_tutorial.html#configuring-leader-election

将org3加入channel

  1. 先启动org3 peer容器和org3 cli容器
docker-compose -f docker-compose-org3.yaml up -d
  1. 进入cli容器
docker exec -it Org3cli bash
  1. 环境变量设置
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 && export CHANNEL_NAME=mychannel
  1. 向order组织拉取该通道的创世区块请求
peer channel fetch 0 mychannel.block -o [orderer.example.com:7050](http://orderer.example.com:7050) -c $CHANNEL_NAME --tls --cafile $ORDERER_CA
  1. 通过创世区块加入channel
peer channel join -b mychannel.block
  1. 加入其它org3的peer节点,例如:
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/tls/ca.crt && export CORE_PEER_ADDRESS=peer1.org3.example.com:12051 
peer channel join -b mychannel.block

安装、初始化、调用链码

这部分内容跟安装链码相关,这里略过不表

结语

至此已经成功添加新组织到已有通道中,整个过程参照官方文档,可以对照理解每一步的意义和作用

相关文章

网友评论

      本文标题:Hyperledger Fabric 现有网络添加新组织

      本文链接:https://www.haomeiwen.com/subject/fakdnctx.html