我们接着上一节来讲;
在熟悉动态增加组织或修改配置的步骤后, 我们就可以使用 java 的 API 来完成动态增加组织或修改配置了;
废话不多说, 直接上干货;
1, 预制条件
org3 的证书以及组织 3 的 MSP 详情信息, 需要提前准备 (如果不清楚的, 可以回头看一下上一章)
fabric-java-sdk 1.2 我这里使用的是 1.2 版本, 更高版本基本相同, 没有什么大变化
2, 启动 configtxlator 工具的 REST 服务
准备 configtxlator 工具, 你可以通过源码编译或在网上自己下载
执行 ./configtxlator start 命令, 默认端口是 7059
3, 创建通道链接
4, 获取通道配置字节码
byte[] mychannelConfig = channel.getChannelConfigurationBytes();
这一步对应的是 peer channel fetch config 命令生成后的 pb 文件
5, 将字节码转化为 JSON
通过 configtxlator 工具提供的 decode 方法, 解码的消息类型为 common.Config
6, 读取 org3.JSON 内容
7, 将组织 3 的内容和 channel 当前的配置信息合并
当前配置信息的结构体如下图, 我们可以使用 JSONObject 来代替 cli 客户端的 jq 工具来操作 JSON 内容
8, 将合并后的 JSON 文件, 编码成字节码
将 JSON 文件提交给 configtxlator 工具提供的 encode 方法, 解码的消息类型为 common.Config
这一段逻辑就相当于是将修改后的 JSON, 转化为 pb 文件的逻辑
9, 在第 4 步中, 我们获取过通道的字节码, 而这里我们有修改后的字节码, 只要对这两个做一次对比; 就可以获取到需要修改的部分内容;
依旧使用 configtxlator 工具, 而这时候需要调用的是计算接口: compute, 消息类型为: update-from-configs
10, 构建修改配置, 向 orderer 发送变更交易了;
这里大家可能有个疑惑, 不是要需要其他组织签名的吗? 是不是少了一步?
当前需要签名, 而这也是使用 API 的一个好处, 他帮我们做了好多事情; 先看一下下面的这段代码, 有几点注意点:
注意点:
a), 通道的 updateChannelConfiguration 方法, 第二个参数是无边界的数组;
b) 这个参数, 就是各个组织的修改提供的签名人. 上面是动态增加组织的, 如果是修改配置的话; 比如修改区块大小信息, 那么这里主要传一个 orderer 的用户就可以;
c) 是不是什么用户都可以进行提交修改? 当然不是, 必须是 admin;
d) 此方法, 是没由返回值的, 所以只能通过异常捕获, 或使用断言的方法, 来判断你的修改是否成功了;
11, 判断是否修改成功
主要再获取一下最新的通道配置, 检查一下你新增的组织是否在这个 JSON 对象中即可;
12, 其他步骤, 就不在追溯了, 后面要做的就是, 组织 jion, 安装 / 升级合约. 这样组织 3 才会更新数据. 否则会被 orderer 拒绝访问同步. 在 orderer 端, 你会看到需要 Org1MSP/Org2MSP, 但获取到是 Org3MSP 的异常;
我使用是是 couchdb, 数据已经同步. ok 完成动态新增组织; 动态修改配置, 其实是一个步骤. 就不在追溯了;
备注:
当前这一章中提到了 configtxlator 工具, 但并没有过多的对其进行详细说明, 后面我们话一章时间对他做一个说明;
来源: https://www.cnblogs.com/zjlong/p/11226930.html