一朵小奇葩✿ۣ

导航

Hyperledger Fabric V2.0(四)first-network案例中的主要配置文件及主要脚本

主要配置文件:

1. crypto-config.yaml

Cryptogen工具使用该文件生成“密码材料”,即Fabric网络中各种实体(peer、order、ca)所需的证书及密钥。crypto-config.yaml包含网络拓扑结构定义,Cryptogen以其为基础为组织(包括order)和属于这些组织的组件(peer和ca)生成证书及密钥。该配置文件中的“count”变量用来指定每个组织的对等点数量,文件的其余部分较容易理解。

cryptogen generate --config=./crypto-config.yaml   #运行该工具后,这些证书将被放置在一个名为“crypto-config”的文件夹中。

2. configtx.yaml

configtx.yaml包含一个联盟网络(通道)的定义。该文件首先指定每个成员组织的MSP目录的位置(order创世区块中需要存储成员组织的根证书)、组织的锚节点等。然后指定了一个联盟(联盟中可以创建多个通道)由哪些组织构成,以及order服务的相关配置(共识类型,区块大小等)。此外该文件还规定了系统通道和普通通道的一些访问控制策略。

configtxgen工具基于configtx.yaml配置文件创建四个工件:genesis.block,channel.tx,Org1MSPanchors.tx,Org2MSPanchors.tx。genesis.block为系统通道(由所有order节点维护)的创世区块,后三者分别为创建通道,设置ORG1、ORG2的锚节点(锚节点为某组织对order可见的节点)的系统事务,Fabric的配置操作作为系统事务提交到系统通道中。

export FABRIC_CFG_PATH=$PWD   #告诉configtxgen从哪里寻找configtx.yaml文件

configtxgen -profile SampleMultiNodeEtcdRaft -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block   #生成系统通道创世区块genesis.block

export CHANNEL_NAME=mychannel   #通过环境变量设定通道名称

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME   #创建 通道配置 事务

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP   #创建 更新组织Org1在该通道上的锚节点 的事务

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP   #创建 更新组织Org2在该通道上的锚节点 的事务

生成的四个配置组件位于channel-artifacts目录下

3. docker-compose-cli.yaml、docker-compose-etcdraft2.yaml、docker-compose-ca.yaml、docker-compose-couch.yaml等

这些yaml文件为docker compose使用的配置文件,用于批量管理容器。其内容主要包含容器所属网络的名称、容器使用的镜像、环境变量、启动时执行的命令、和物理机端口及卷的映射关系等。first-network案例中,docker-compose-cli.yaml定义了一个order及四个peer节点,docker-compose-etcdraft2.yaml定义了其余四个order节点(order服务由五个节点组成),docker-compose-ca.yaml定义了证书颁发中心节点,docker-compose-couch则定义了couchdb数据库节点(对应每个peer一个),first-network/base目录下的两个yaml文件为通用的基础配置,可被其他yaml文件引用。

主要脚本:

1. byfn.sh

byfn.sh为first-network案例的关键脚本,该脚本包含generate,up,down,restart,upgrade五个功能模块,generate生成所需的密码材料(证书及密钥,位于crypto-config目录下)及配置组件(genesis.block,channel.tx,Org1MSPanchors.tx,Org2MSPanchors.tx,位于channel-artifacts目录下),up基于yaml启动Fabric网络,down用于销毁Fabric网络(删除generate生成的文件、停止运行的容器并删除链码镜像),restart重启Fabric网络,upgrade用于Fabric网络的版本升级。执行命令./byfn.sh -h可看到详细的脚本使用帮助,其基本使用如下:

./byfn.sh generate -c mychannel   #-c指定通道名称,脚本默认通道名称即为mychannel

./byfn.sh up -a -n -s couchdb   #参数-a启动证书颁发机构,-n不部署abstore链码(脚本默认部署该链码),-s使用couchdb数据库而不是goleveldb 

./byfn.sh down -c mychannel   #销毁网络

脚本中的关键函数:

generate模块:

① generateCerts()   #使用cryptogen工具生成证书及密钥,放于crypto-config目录,还会调用./ccp-generate.sh为组织ORG1和ORG2生成CCP文件

② generateChannelArtifacts()   #使用configtxgen工具生成order创世区块,通道配置事务,锚节点更新事务

up模块:

networkUp()   #启动Fabric网络,若没有执行generate则首先执行generate模块,然后基于yaml文件启动容器,最后进入cli容器执行scripts/script.sh脚本(该脚本用于端到端测试,内容包括创建并加入通道,锚节点更新,若./byfn.sh up没有指定参数-n,则还会执行abstore链码的打包、安装、定义、提交、初始化、调用等操作)

down模块:

① clearContainers()   #删除链码容器

② removeUnwantedImages()   #删除链码镜像

③ networkDown()   #根据yaml文件删除peer、order、ca、couchdb容器,调用函数①②删除链码容器极其镜像,删除generate模块创建的所有文件

restart模块:

restart模块先调用down模块,再调用up模块

upgrade模块:

upgradeNetwork()   #升级fabric网络1.3.x to 1.4.x,只要是将容器更换为高版本镜像

2. ccp-generate.sh

 byfn.sh脚本中generateCerts()函数在使用cryptogen工具为组织生成证书后,调用./ccp-generate.sh为组织ORG1和ORG2生成CCP文件,生成的CCP文件有json和yaml两种格式。CCP文件的用处还不太明确,貌似是SDK连接区块链网络时所需要的文件,后续更新。

3. script.sh

该脚本位于first-network/scripts目录下。byfn.sh脚本中的networkUp() 函数在基于yaml文件启动容器后,会进入cli容器执行scripts/script.sh脚本,该脚本主要用于端到端测试,内容包括创建并加入通道,锚节点更新,若./byfn.sh up没有指定参数-n,则还会执行abstore链码的打包、安装、定义、提交、初始化、调用等操作

4. utils.sh

该脚本位于first-network/scripts目录下。utils.sh脚本将一些通用操作封装为了函数,如设置cli环境变量,创建、加入通道,更新锚节点,打包、安装、查询、定义、提交、调用链码等。该脚本作为通用脚本被其他脚本(script.sh)调用。

posted on 2020-03-04 02:12  always-kaixuan  阅读(1669)  评论(0编辑  收藏  举报