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()removeUnwantedImagesrm -rf system-genesis-blockrm -rf organizations/fabric-ca/org...rm -rf channel-artifacts log.txt chaincode.tar.gz chaincode