Fabric2.X中,用fabric-samples替换掉原来的first-network,提供给开发人员快速上手。fabric-samples中的test-network为我们提供了一系列脚本和配置文件,让我们可以简单的启动一个fabric网络。
本文以广度优先的方法解读network.sh的内容
network.sh
a.设置环境变量
export PATH=${PWD}/../bin:${PWD}:$PATH
export FABRIC_CFG_PATH=${PWD}/configtx
export VERBOSE=false
bin
目录内容如下
├─bin
│ configtxgen
│ configtxlator
│ cryptogen
│ discover
│ fabric-ca-client
│ fabric-ca-server
│ idemixgen
│ orderer
│ peer
cryptogen
以及configtxgen
这两个重要的工具通过编译生成,用来创建参与网络实体的证书,生成创世区块和通道的配置文件以及组织的锚节点。相应的,bin
目录中还有其他需要使用到的工具。
configtx
中的文件是用来配置网络的,configtxgen
这个工具就是依靠configtx
中的configtx.yaml
文件来定义网络。
b.提供函数
clearContainers()
清除启动、运行网络时,在docker中创建的镜像;这个函数在关闭网络时被调用。
removeUnwantedImages()
清除不想要的镜像
checkPrereqs()
检查网络组件、二进制文件、镜像文件的版本,依托于上级目录的config
文件夹,该文件夹的内容中包含了Fabric网络中的基本属性的配置,其内容如下:
├─config
│ configtx.yaml
│ core.yaml
│ orderer.yaml
检查peer
版本、docker_image
版本。
一般来说,拉取Fabric项目后,使用
bootstrap.sh
脚本,都可以得到对应版本的文件以及环境。
createOrgs()
该函数使用cryptogen
工具或者CAs
创建组织的身份材料,它在运行时首先清理掉现有的身份,然后一步步执行。在test-network
中,首先使用cryptogen
或者CAs
工具创建Org1
,Org2
的身份,然后创建Orderer Org
的身份。
一旦创建了组织的身份后,我们就需要生成
genesis block
,并且创建应用的channel
让Orderer
节点加入。
createConsortium()
该函数使用configtxgen
这个工具生成channel
的orderer genesis block
。
在创建组织实体身份以及创世区块后,就可以开启
peers
和orderering
服务了。
networkUp()
该函数使用docker compose
开启peer
和orderer
节点。成功后,为我们打印出当前的docker images
。
对于运行的Fabric网络,可以创建
channel
实现应用数据的隔离。
createChannel()
该函数创建一个channel
让Org1
和Org2
的peers
节点加入。首先,它检查网络是否启动,如果没有,就先把网络开启,然后再创建。它使用createChannel.sh
脚本创建通道。
deployCC()
该函数把链码安装到通道上并将链码实例化,它调用deployCC.sh
这个脚本实现。
networkDown()
该函数断开正在运行的网络,它首先删除docker compose
中的镜像,清除容器,删除genesis block
各个组织的ca
,卸载chaincode
。也就是说,down
掉网络后,我们在上面创建的实体、通道,安装的链码等等全部被清除掉了,如果再次启动时还需从头开始配置。
Up & Down
./network.sh up
这个命令其实就是调用函数networkUp()
,函数中依次调用:
createOrgs()
createConsortium()
- 开启
docker-compose
- 打印
docker ps -a
存在的镜像
./network.sh down
这个命令调用函数networkDown()
,函数中依次调用:
docker-compose -f
删除镜像clearContainers()
removeUnwantedImages
rm -rf system-genesis-block
rm -rf organizations/fabric-ca/org...
rm -rf channel-artifacts log.txt chaincode.tar.gz chaincode