zoukankan      html  css  js  c++  java
  • 【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

    在使用fabric-java的sdk完成动态添加组织或动态修改组织之前,我们先看一下使用cli是如何完成动态增加组织的;

    为什么要先学习一下他,因为使用javasdk的方式步骤是一样的;所以下面,我也会一步一步带着大家使用java-sdk完成动态添加组织;

    1,cp crypto-config.yaml crypto-config-addorg.yaml

    修改crypto-config-addorg.yaml副本内容

     

    使用./bin/cryptogen generate --config=./crypto-config-addorg.yaml命令生成org3的相关证书

     

    2,修改configtx.yaml,增加组织信息

     

    通过使用./bin/configtxgen -printOrg Org3MSP -profile ./configtx.yaml > channel-artifacts/org3.json命令,生成组织相关的json数据

     

    3,进入org1的cli客户端;

    4,下载jq安装工具

    执行命令apt update && apt install -y jq

     

    执行一下内容,拉取组织相关内容;

     这里说一下jq,这个工具主要是json结构体处理工具。对应java中就是使用JSONObject来代替就可以。

    5,获取 mychannel 通道的最新配置块, 可以防止重复或替换配置更改, 有助于确保并发性, 防止删除两个组织;

    因为我这里的tls是关闭的,所以执行peer channel fetch config mychannel.pb -o orderer.example.com:7050 -c mychannel如果没有关闭,则执行peer channel fetch config mychannel.pb -o orderer.example.com:7050 -c mychannel --tls --cafile $ORDERER_CA

    前提要先执行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,定义环境变量

     

    6,将pb内容转换到json文件中

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

     

    7,执行以下命令,将之前生成好的org3.json和 mychannel.json追加合并到临时文件

    jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' mychannel.json ./channel-artifacts/org3.json > mychannel_config.json

     

    8,把更新前后的文件打包成二进制文件

    configtxlator proto_encode --input mychannel.json --type common.Config > original_mychannel.pb

    configtxlator proto_encode --input mychannel_config.json --type common.Config > modified_mychannel.pb

     

    9,获取增量包并且补全,转换成二进制文件

    使用工具,计算新老二进制文件,得出相差的内容;这一块的结构体以update的信息构成;

    configtxlator compute_update --channel_id mychannel --original original_mychannel.pb --updated modified_mychannel.pb > mychannel_update.pb

     

    configtxlator proto_decode --input mychannel_update.pb  --type common.ConfigUpdate > mychannel_update.json

     

    我们将修改后的二进制文件转码看一下他的大概内容。

    将对比后的json内容,重新构建在下述的结构体,注意这个结构体是固定格式。在提交修改交易的时候,会对其进行对象映射。有一些变化都会有问题;

     echo '{"payload":{"header":{"channel_header":{"channel_id":"mychannel", "type":2}},"data":{"config_update":'$(cat mychannel_update.json)'}}}' | jq . > mychannel_update_envelope.json

     将修改后的结构体,转码为pb格式

    configtxlator proto_encode --input mychannel_update_envelope.json --type common.Envelope > mychannel_update_Org_envelope.pb

    10,签署并提交配置更新

    export CORE_PEER_LOCALMSPID="Org1MSP"

    export 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

    export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

    export CORE_PEER_ADDRESS=peer0.org1.example.com:7051

    peer channel signconfigtx -f mychannel_update_Org_envelope.pb

     

    组织org2中在提交一次

     

    执行结果:

     

    11,获取签名之后通知orderer更新通道信息

    peer update -f mychannel_update_Org_enevlope.pb -c mychannel -o orderer.exeample.com:7050

     

    结果:

     

    12,配置org3的yaml文件,启动即可。

     

      

    13,启动

    Docker-composer -f peer-org3.yaml up -d

    14,jion

    export CORE_PEER_LOCALMSPID="Org3MSP"

    export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt

    export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp

    export CORE_PEER_ADDRESS=peer0.org3.example.com:7051

      

    Peer channel join -b mychannel.block

      

    15,安装升级合约

     新增的组织,想要参与交易和数据同步,必须要将合约进行升级,否则在想orderer发消息同步时,会抛角色不匹配,被拒绝同步数据

     

     总结一下,也是为下面我们使用java-sdk完成动态增加组织或修改配置提供知识储备:

    1,通过configtxgen工具生成组织3证书,和组织3的详细新json文件;

    2,通过configtxlator获取目标channel的pb,转码为json详情

    3,将org3的json和channel详细进行合并,转码成最新的字节pb

    4,计算新老pb,获得将要修改的配置信息pb,再将其转码为json

    5,将转码后的json,在进行格式化,组织可被fabric解析的数据结构

    6,将现存的几个组织(原channel参与的组织),对其进行签名

    7,提交到orderer,进行配置化修改

    8,将org3,jion到目标channel,并安装、升级合约;就开始同步数据

    需要注意的是,此次新增的组织只对这个channel有效,若想其对其他channel也生效,就需要重复上述的操作;对新的channel进行配置化修改

  • 相关阅读:
    【STL】栈stack
    【简单思考】noip2010提高组 乌龟棋
    【水】noip2010提高组 机器翻译
    【dp概率与期望】pattern
    【快速幂+中等难度】Calculation 哈工大HITOJ2901
    hdu--4502--dp
    hdu--4432--好久没做题了.
    hdu--5019--开始参加bc了
    字符串排列后匹配
    输出n的全排列的字典序编号为k的全排列
  • 原文地址:https://www.cnblogs.com/zjlong/p/11226172.html
Copyright © 2011-2022 走看看