network.sh学习笔记
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网络的方法。