本系列文章:
第一章:九析带你完爆 hyperledger fabric - 快速上手 basic-network 样例
第二章:九析带你完爆 hyperledger fabric - 快速搭建 GO 环境
第三章:九析带你完爆 hyperledger fabric - 快速上手 first-network 样例
第四章:九析带你完爆 hyperledger fabric - 系统逻辑架构篇
第五章:九析带你完爆 hyperledger fabirc - 网络节点介绍
第六章: 九析带你轻松完爆 hyperledger fabric - 区块和区块链介绍
第七章: 九析带你轻松完爆 hyperledger fabric - 区块链防篡改机制
第八章:九析带你轻松完爆 hyperledger fabric - Couchdb 安装
第九章:九析带你轻松完爆 hyperledger fabric - NVM 和 Nodejs 安装
第十章:九析带你轻松完爆 hyperledger fabric - chaincode 生命周期介绍
第十一章: 九析带你轻松完爆 hyperledger fabric - 创建联盟
第十二章: 九析带你轻松完爆 hyperledger fabric - configtxlator 尝鲜
第十三章: 九析带你轻松完爆 hyperledger fabric - 创建组织
目录
1 前言
2 运行 e2e_cli 样例
2.1 进入 e2e_cli 样例
2.2 启动区块链网络
2.3 创建组织
2.3.1 分析现状
2.3.2 生成新增组织相关证书
2.3.3 生成新增组织的节点
2.3.4 将新组织加入到原有通道
1 前言
在前面的章节中,九析已经带你轻松完爆了 fabric 的联盟创建、组织添加和启动区块链。但是如果在区块链运行一段时间后,需要加入新的组织该怎么做呢?这节我们就尝试在区块链中动态添加组织。
区块链中动态添加组织一共需要三步:
1 生成新增组织的证书
2 生成新增组织的节点
3 修改 channel 配置块并更新
下面我们以 fabric 源码下的 e2e_cli 样例来介绍如何动态创建组织(注意,是 fabric 项目源码下的样例,不是 fabric-sample 项目源码下的样例,一直看我博客的同学应该知道我始终是在 fabric 和 fabric-sample 这两个项目进行穿插)。
2 运行 e2e_cli 样例
2.1 进入 e2e_cli 样例
cd $FABRIC_SRC/examples/e2e_cli # $FABRIC_SRC 就是你本人 fabric 项目源码解压后所在目录
2.2 启动区块链网络
执行如下语句启动区块链网络:
./network_setup.sh up
如果启动区块链报如下错误:
Error starting container: API error (404): {"message":"network e2ecli_default not found"}
报错截图如下:
修改 e2e_cli 目录下的 base 目录下的 peer-base.yaml 文件,将 - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2ecli_default 修改为 - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2e_cli_default。
启动区块链网络成功截图如下:
2.3 创建组织
2.3.1 分析现状
e23_cli 联盟区块链网络情况如下所示:
从上图可知,当前区块链有 1 个排序节点 (order)、2 个组织(org1 和 org2)、4 个 peer 节点(其中每个组织各有 2 个 peer 节点)、链码安装到了 3 个 peer 节点之上(组织 org1 的 peer1 节点并没有安装),链码也经过了初始化阶段(只有初始化的链码才会被打包成镜像并被运行为容器)。
现在我们的需求是添加 1 个新的 org3,并且该组织包含 2 个 peer 节点。
2.3.2 生成新增组织相关证书
创建组织节点资源文件 crypto-config-org3.yaml,文件内容如下:
OrdererOrgs:
- Name: Orderer
Domain: example.com
Specs:
- Hostname: orderer
PeerOrgs:
- Name: Org3
Domain: org3.example.com
Template:
Count: 2
Users:
Count: 1
执行如下命令创建证书,命令执行成功前提是要正确安装 crpytogen,安装方法可查阅本人第三章内容。
cryptogen generate --config ./crypto-config-org3.yaml
命令执行结果会创建组织(org3)相关证书,证书在 crypto-config 的 peerOrganizations 路径下:
2.3.3 生成新增组织的节点
在 e2e_cli/base 目录下创建 docker-compose-base-org3.yaml 资源文件,内容如下:
version: '2'
networks:
default:
external:
name: e2e_cli_default
services:
peer0.org3.example.com:
container_name: peer0.org3.example.com
extends:
file: peer-base.yaml
service: peer-base
environment:
- CORE_PEER_ID=peer0.org3.example.com
- CORE_PEER_ADDRESS=peer0.org3.example.com:7051
- CORE_PEER_CHAINCODELISTENADDRESS=peer0.org3.example.com:7052
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org3.example.com:7051
- CORE_PEER_LOCALMSPID=Org3MSP
volumes:
- /var/run/:/host/var/run/
- ../crypto-config/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/msp:/etc/hyperledger/fabric/msp
- ../crypto-config/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls:/etc/hyperledger/fabric/tls
ports:
- 11051:7051
- 11052:7052
- 11053:7053
peer1.org3.example.com:
container_name: peer1.org3.example.com
extends:
file: peer-base.yaml
service: peer-base
environment:
- CORE_PEER_ID=peer1.org3.example.com
- CORE_PEER_ADDRESS=peer1.org3.example.com:7051
- CORE_PEER_CHAINCODELISTENADDRESS=peer1.org3.example.com:7052
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org3.example.com:7051
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org3.example.com:7051
- CORE_PEER_LOCALMSPID=Org3MSP
volumes:
- /var/run/:/host/var/run/
- ../crypto-config/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/msp:/etc/hyperledger/fabric/msp
- ../crypto-config/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/tls:/etc/hyperledger/fabric/tls
ports:
- 12051:7051
- 12052:7052
- 12053:7053
执行如下命令创建组织(org3)节点:
docker-compose -f docker-compose-base-org3.yaml up
命令执行成功后查看运行容器,发现 org3 的 peer0 和 peer1 节点已经成功创建,并跟 org1、org2 组织的 4 个 peer 节点同处于相同网络中。
随便找 e2e_cli 例子的运行容器,使用如下命令查看其所处容器,注意这里有个容器网络知识的细节(我用红色字体标明了,意思是新创建的节点使用的网络是已经存在的网络)
docker inspect 57fa25e61f67 # 57fa25e61f67 是运行容器的 ID
由此可知,新增组织节点成功。
2.3.4 将新组织加入到原有通道
在上面的步骤中,我们创建了证书、创建的组织节点,但是还缺少一步,那就是将拥有证书的组织节点加入到原有联盟的通道里。打个比方,你已经有了一个微信群,并且设置了群密码,你现在拉了几个新人(peer 节点),并且告诉了他们群密码(证书),下面你要做的就是将他们拉进到微信群(通道)里。
《未完待续》