• -------------------------------------------------------------
  • ====================================

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

区块链 dewbay 4年前 (2020-09-29) 1667次浏览 已收录 0个评论 扫描二维码

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

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

 

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

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

 

3,进入 org1 的 cli 客户端;

4,下载 jq 安装工具

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

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

这里说一下 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,定义环境变量

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

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

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

 

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

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

 

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

 

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

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

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

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

将对比后的 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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

组织 org2 中在提交一次

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

执行结果:

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

 

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

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

结果:

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

 

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

 

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

Peer channel join -b mychannel.block

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

15,安装升级合约

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

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上

 

总结一下,也是为下面我们使用 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 进行配置化修改


露水湾 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 上
喜欢 (1)
[]
分享 (0)
关于作者:
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址