首页 > 技术文章 > network.sh学习笔记

SilverhandFan 2021-01-20 09:56 原文

network.sh是fabric v2.x的fabric-samples的test-network的脚本语言文件

一.networkUp

<1>networkUP()函数,先后调用了checkPrereqs函数、createOrgs函数和createConsortium函数

 

tips:

 -d filename 如果 filename为目录,则为真,在上图中如果“organizations/peerOrganizations”为一个存在的路径,则为真 

-f filename 如果 filename为常规文件,则为真,在上图中如果${COMPOSE_FILE_BASE}是一个常规文件,则""中表达式为真

""双引号可以保证引号中句子的完整性,双引号可以保证${}中的变量被转义

2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null

可以把/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.

ps -a:显示所有进程

这一行里会把之前COMPOSE_FILES里存的句子放到docker-compose这一行命令里来,就是不知道IMAGE_TAG和IMAGETAG从哪里来到哪里去

-ne: not equal,$?:上个命令的退出状态,或函数的返回值。如果docker ps -a的返回值不是0的话,则不能start network

fatalln、errorln这些函数写在另一个.sh文件:

<2>先看checkPrereqs:

 

 函数名的意思是查看先决条件

1.查看是否克隆了peer的binary文件以及是否克隆了配置文件们

>/dev/null  2>&1可以拆成两部分:>/dev/null 和 2>&1,把错误和标准输出都输出到黑洞的意思

peer version可以查看peer版本号,这句话总体意思是查看peer version,并把错误和标准输出都输出到黑洞

如果输出不是0或者没有config路径,则报错并退出

2.使用fabric的工具容器查看是否二进制文件和例子符合docker镜像

在bash中,|的意思是前一个命令的结果会被作为后一个命令的输入;sed是流文本转换器

LOCAL_VERSION被确定为peer version查出来的version

DOCKER_IMAGE_VERSION被确定为docker image里保存的version

如果两个版本不相等则返回本地的fabric二进制文件和docker镜像不同步

如果local_version被发现是不被支持的version中的一个,则返回本地fabric二进制文件不被test network支持

如果docker_image_version是unsuportted version中的一个,则docker镜像版本不被test network支持

3.检查CA:

如果CRYPTO变量是Certificate Authorities,那么

查看fabric-ca-client version,标准输出和标准错误都输出到黑洞

如果上一句的输出不是0的话,则报错未找到fabric-ca-client的binary文件

按上面peer一样的方法比对ca二进制文件的fabric版本和docker镜像的fabric版本,如果不同则输出有可能造成错误

<3>再看createOrgs函数

 

 1.首先如果存在organizations/peerOrganizations这个路径,则把organizations/peerOrganizations和organizations/ordererOrganizations这两个路径删除

2.使用cryptogen产生crypto material

如果CRYPTO变量是cryptogen,那么找到cryptogen的绝对路径

如果路径不存在,则报错,反之,依次产生org1和org2,调用了crypto-config-org1.yaml和crypto-config-org2.yaml

set -x  执行指令后,会先显示该指令及其下的参数。

最后生成orderer,调用了./organizations/cryptogen/crypto-config-orderer.yaml

在每次生成org或者orderer之后会有set +x命令,并把名利的标准报错输出到黑洞

set +<参数>  取消某个set曾启动的参数。 

3.使用fabric cas产生crypto material

如果crypto变量是Certificate Authorities,则返回“使用fabric cas产生crypto material”

调用 organizations/fabric-ca/registerEnroll.sh

调用organizations/fabric-ca/org1/tls-cert.pem

调用了createOrg1、createOrg2和createOrderer,这三个函数不知道来自于哪里

<4>

 

 先查找configtxgen模块是否存在,然后使用configtxgen生成genesis block

如果这一过程不返回0的话则创建初始块失败

二. createChannel()

如果peerOrganizations路径不存在,则自动启动network(调用networkUp)

调用scripts/createChannel.sh 生成channel,如果不返回0,则调用失败

 

三.deployCC

 

也是调用了另一个script:

scripts/deployCC.sh $CHANNEL_NAME $CC_NAME $CC_SRC_PATH $CC_SRC_LANGUAGE $CC_VERSION $CC_SEQUENCE $CC_INIT_FCN $CC_END_POLICY $CC_COLL_CONFIG $CLI_DELAY $MAX_RETRY $VERBOSE

四.networkDown()

 

 1.先用docker-compose关掉一些container

2.如果mode是restart的话不要执行下边的步骤:

清除容器

清除镜像

使用docker去除排序的block和其他的channel的配置和交易和证书

使用docker去除ca的相关的东西

使用docker去除channel和脚本相关的东西

 从这个文件的内容可以看出来哈,这个network.sh它是与test-network的业务逻辑基本无关的,它的存在只是为了生成orgs、生成channels、生成cas、安装chaincode这些fabric基本的功能提供一些接口,根据这个文件顺藤摸瓜,就能找到一个配置搭建整个fabric网络的方法。

推荐阅读