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

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

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

我们接着上一节来讲;

在熟悉动态增加组织或修改配置的步骤后,我们就可以使用 java 的 api 来完成动态增加组织或修改配置了;

废话不多说,直接上干货;

1,预制条件

org3 的证书以及组织 3 的 MSP 详情信息,需要提前准备(如果不清楚的,可以回头看一下上一章)

fabric-java-sdk   1.2  我这里使用的是 1.2 版本,更高版本基本相同,没有什么大变化

 2,启动 configtxlator 工具的 rest 服务   

准备 configtxlator 工具,你可以通过源码编译或在网上自己下载

执行 ./configtxlator start 命令,默认端口是 7059

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

 3,创建通道链接

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

   4, 获取通道配置字节码

byte[] mychannelConfig = channel.getChannelConfigurationBytes();

这一步对应的是 peer channel fetch config 命令生成后的 pb 文件

   5,将字节码转化为 json

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

通过 configtxlator 工具提供的 decode 方法,解码的消息类型为 common.Config

    6,读取 org3.json 内容

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

    7,将组织 3 的内容和 channel 当前的配置信息合并

当前配置信息的结构体如下图,我们可以使用 JSONObject 来代替 cli 客户端的 jq 工具来操作 json 内容

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

 

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

  8,将合并后的 json 文件,编码成字节码

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

将 json 文件提交给 configtxlator 工具提供的 encode 方法,解码的消息类型为 common.Config

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

这一段逻辑就相当于是将修改后的 json,转化为 pb 文件的逻辑

  9,在第 4 步中,我们获取过通道的字节码,而这里我们有修改后的字节码,只要对这两个做一次对比;就可以获取到需要修改的部分内容;

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

依旧使用 configtxlator 工具,而这时候需要调用的是计算接口:compute,消息类型为:update-from-configs

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

 10,构建修改配置,向 orderer 发送变更交易了;

这里大家可能有个疑惑,不是要需要其他组织签名的吗?是不是少了一步?

当前需要签名,而这也是使用 api 的一个好处,他帮我们做了好多事情;先看一下下面的这段代码,有几点注意点:

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

注意点:

a),通道的 updateChannelConfiguration 方法,第二个参数是无边界的数组;

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

b)这个参数,就是各个组织的修改提供的签名人。上面是动态增加组织的,如果是修改配置的话;比如修改区块大小信息,那么这里主要传一个 orderer 的用户就可以;

c)是不是什么用户都可以进行提交修改?当然不是,必须是 admin;

d)此方法,是没由返回值的,所以只能通过异常捕获,或使用断言的方法,来判断你的修改是否成功了;

备注:channel,在提交修改的 sendUpdateChannel 方法中,动态帮我们组装了 echo ‘{“payload”:{“header”:{“channel_header”:… 这个段逻辑。这也解释了上述的那个问题。

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

 

11,判断是否修改成功

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

主要再获取一下最新的通道配置,检查一下你新增的组织是否在这个 json 对象中即可;

 

12,其他步骤,就不在追溯了,后面要做的就是,组织 jion、安装/升级合约.这样组织 3 才会更新数据。否则会被 orderer 拒绝访问同步。在 orderer 端,你会看到需要 Org1MSP/Org2MSP,但获取到是 Org3MSP 的异常;

我使用是是 couchdb,数据已经同步。ok 完成动态新增组织;动态修改配置,其实是一个步骤。就不在追溯了;

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

 

备注:

当前这一章中提到了 configtxlator 工具,但并没有过多的对其进行详细说明,后面我们花一章时间对他做一个说明;


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

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

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

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