首先有两个问题:
1.在fabric网络运行一段时间后,如何新建应用通道,并让新的组织加入新的应用通道
2.在fabric网络运行一段时间后,如何让新的组织加入原有的应用通道
问题分析:
1.创建新的应用通道需要发送应用通道配置到系统通道(orderer)取回应用通道创世区块(包含有应用通道各组织证书),所以必须先修改或更新系统通道配置区块,加入新添加的组织,才能在orderer创建新通道,返回新通道的创世区块,然后发送该应用通道创世区块到新组织,让新组织加入新应用通道
2.待确认
1)先修改或更新系统链的配置区块,在其中加入新增组织的msp信息(问题1解决)
2)利用新的通道配置(包含新增组织)向系统链取得原有应用链新的配置区块
3)广播新的配置区块到应用通道各节点
4)发送应用通道创世区块给新的组织节点,让它们加入该通道,然后同步区块数据
问题1实验步骤
1.我们选用fabric提供的first-network例子
$git clone https://github.com/hyperledger/fabric-samples.git
$cdfabric-samples/first-network
2.修改crypto-config.yaml,提前注册Org3和Org4
./byfn.sh -m generate
生成各种网络实体的所有证书和密钥,用于引导排序服务的起源块,以及配置通道所需的配置事务集合
其中系统链创世区块只包含Org1和Org2得msp信息,应用通道配置channel.tx中指定mychannel的包含组织Org1和Org2
在crypto-config中生成了Org1、Org2、Org3和Org4四个组织的msp信息
3.修改base/docker-compose-base.yaml,添加Org3和Org4基础容器配置
4.创建mychannel2的通道配置
mkdir channel2-artifacts;mkdir blocks
修改configtx.yaml(也可以创建新的“configtx”文件),用于创建mychannel2通道配置
configtxgen -profile TwoNewOrgsChannel -outputCreateChannelTx ./channel2-artifacts/channel.tx -channelID mychannel2
在channel2-artifacts内生成channel2的通道配置
修改docker-compose-cli.yaml
5../byfn.sh -m up 开启网络
此时fabric网络已经开启,在系统通道中创建了一个应用通道mychannel,Org1、Org2通道已经加入该应用通道,Org3、Org4的peer节点已经开启,但未加入任何通道,接下来我们创建新应用通道mychannel2,然后让Org3、Org4组织加入该通道
6.接下来我们更新fabric系统链的配置区块,加入Org3、Org4的msp信息
1)开启configtxlator服务,服务监听在本地任意ip地址和7059端口
无论配置交易文件和初始区块文件都是二进制格式,无法直接编辑。
configtxlator工具将这些配置文件在二进制格式和方便阅读的json格式之间进行转换。
英文文档:https://github.com/hyperledger/fabric/tree/master/examples/configtxupdate
中文文档:https://github.com/qiushaoxi/doc_translation/blob/master/Reconfiguring%20with%20configtxlator.rst
configtxlator工具是一个restful服务程序,采用如下命令启动服务:
configtxlator start --hostname="0.0.0.0" --port 7059
2)获取系统通道testchainid配置区块:
docker exec -it cli /bin/bash 进入cli
mkdir blocks;cd blocks
修改环境变量(一定要找到script脚本中peer channel fetch的例子为参考)