第十三章 九析带你轻松完爆 hyperledger fabric - 创建组织

本系列文章:


第一章:九析带你完爆 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"}

        报错截图如下:image1.png

        修改 e2e_cli 目录下的 base 目录下的 peer-base.yaml 文件,将 - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2ecli_default 修改为 - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2e_cli_default

        启动区块链网络成功截图如下:image2.png

2.3 创建组织

2.3.1 分析现状

        e23_cli 联盟区块链网络情况如下所示:image3.png

        从上图可知,当前区块链有 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 路径下:image4.png

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 节点同处于相同网络中。image5.png

        当前 docker 网络情况如下:image6.png

        随便找 e2e_cli 例子的运行容器,使用如下命令查看其所处容器,注意这里有个容器网络知识的细节(我用红色字体标明了,意思是新创建的节点使用的网络是已经存在的网络)

docker inspect 57fa25e61f67 # 57fa25e61f67 是运行容器的 ID

        运行结果如下截图:image7.png

        由此可知,新增组织节点成功。

2.3.4 将新组织加入到原有通道

        在上面的步骤中,我们创建了证书、创建的组织节点,但是还缺少一步,那就是将拥有证书的组织节点加入到原有联盟的通道里。打个比方,你已经有了一个微信群,并且设置了群密码,你现在拉了几个新人(peer  节点),并且告诉了他们群密码(证书),下面你要做的就是将他们拉进到微信群(通道)里。

    《未完待续》

猜你喜欢

转载自blog.51cto.com/14625168/2470153