Fabric 是联盟链,一个 channel 就好比一个联盟,如果有新的机构需要加入,则必须得到联盟内的成员的认可。
正是基于这样的场景,fabric 在为 channel 新增 org 时,会涉及诸多的权限和证书操作。
为 Channel 动态新增 Org 有以下几步:
- 为新 org 生成证书
- 为新 org 生成配置文件
- 生成和提交新 org 的配置
1.peer channel fetch config 创建添加新 org 的配置交易,为网络新增 org
2.peer channel signconfigtx 为配置交易签名,需网络中 MAJORITY 的 org 都签名
3.peer channel update 提交签名后的配置交易至 orderer
4.将新 org 添加入 channel
1.启动新 org 集群,一般会有一个 cli 和多个 peer
2.peer channel fetch 于 cli 中从 orderer 中获取 channel 创世块
3.peer channel join 将新 org 下的 peer 加入 channel
5.升级chaincode和背书策略
1.peer chaincode install 为新 org 的 peer 安装 chaincode,于新 org 的 cli 中完成
2.peer chaincode install, 为其他 org 升级 chaincode,于原 org 的 cli 中完成
3.peer chaincode upgrade 升级背书策略,于原 org 的 cli 中完成
6.测试是否成功
此文通过 fabric-samples 下的 first-network 样例为基础,在其区块链网络上,为通道 mychannel 新增一个 Org3,Org3 包含两个 peer。
初始环境
fabric-samples 地址为 https://github.com/hyperledger/fabric-samples , 本文采用其中的 first-network 实验。
first-network 启动后,会默认创建 1 个 orderer 节点,4个 peer 节点(其中 2个属于 org1,2个属于 org2),并提供一个 cli 用于相关操作。
docker ps 之后输出如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a36d576296f4 dev-peer1.org2.example.com-mycc-1.0-26c2ef32838554aac4f7ad6f100aca865e87959c9a126e86d764c8d01f8346ab "chaincode -peer.add…" About a minute ago Up About a minute dev-peer1.org2.example.com-mycc-1.0
70789dd829f0 dev-peer0.org1.example.com-mycc-1.0-384f11f484b9302df90b453200cfb25174305fce8f53f4e94d45ee3b6cab0ce9 "chaincode -peer.add…" About a minute ago Up About a minute dev-peer0.org1.example.com-mycc-1.0
c961ab191471 dev-peer0.org2.example.com-mycc-1.0-15b571b3ce849066b7ec74497da3b27e54e0df1345daff3951b94245ce09c42b "chaincode -peer.add…" About a minute ago Up About a minute dev-peer0.org2.example.com-mycc-1.0
8314e683df95 hyperledger/fabric-tools:latest "/bin/bash" About a minute ago Up About a minute cli
c80bb0cdbb3e hyperledger/fabric-peer:latest "peer node start" About a minute ago Up About a minute 0.0.0.0:8051->7051/tcp, 0.0.0.0:8053->7053/tcp peer1.org1.example.com
656efc4c4b94 hyperledger/fabric-orderer:latest "orderer" About a minute ago Up About a minute 0.0.0.0:7050->7050/tcp orderer.example.com
1f6777d60647 hyperledger/fabric-peer:latest "peer node start" About a minute ago Up About a minute 0.0.0.0:10051->7051/tcp, 0.0.0.0:10053->7053/tcp peer1.org2.example.com
8be768d5aed0 hyperledger/fabric-peer:latest "peer node start" About a minute ago Up About a minute 0.0.0.0:9051->7051/tcp, 0.0.0.0:9053->7053/tcp peer0.org2.example.com
0680044f68b9 hyperledger/fabric-peer:latest
自动化动态添加
first-network 直接提供了自动化添加的脚本 eyfn.sh。执行 ./eyfn.sh up 即可自动化为 channel 添加 org3。此法因不具扩展性,且不方便理解 fabric,因此不再赘述。以下是执行后的输出,若成功,会输出 All GOOD 。
[work@gzhxy-fsg-fpu-hyperledger01 first-network]$ ./eyfn.sh up
Starting with channel 'mychannel' and CLI timeout of '10' seconds and CLI delay of '3' seconds
Continue? [Y/n] Y
proceeding ...
/home/work/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin/cryptogen
... ...
... ...
... ...
2018-04-09 03:37:24.644 UTC [msp/identity] Sign -> DEBU 007 Sign: digest: 1B7235C3DC2AF4B066928DDEA387D4A0524357DEB4978C23DB70B01B893DBC3A
Query Result: 80
2018-04-09 03:37:24.651 UTC [main] main -> INFO 008 Exiting.....
===================== Query on peer0.org3 on channel 'mychannel' is successful =====================
========= All GOOD, EYFN test execution completed ===========
_____ _ _ ____
| ____| | \ | | | _ \
| _| | \| | | | | |
| |___ | |\ | | |_| |
|_____| |_| \_| |____/
虽然不赘述 eyfn.sh,但脚本和手动部署原理是一致的,可以仔细学习。
为 channel 动态添加 Org
step1: 为新 org 生成证书
cd org3-artifacts/
cryptogen generate --config=./org3-crypto.yaml
会依据 org3-crypto.yaml 生成,生成后的文件位于 org3-artifacts/crypto-config/ 下
org3-crypto.yaml 文件中 Org3 的配置如下:
PeerOrgs:
- Name: Org3
Domain: org3.example.com
EnableNodeOUs: true
Template:
Count: 2
Users:
Count: 1
网友评论