Fabric v2.0 first-network测试网络运行与剖析

1. byfn测试网络的启动

1.1 准备二进制可执行文件

  1. 在fabric目录中执行make native命令可编译出二进制可执行文件,然后将fabric/build/bin目录拷贝到fabric-samples目录中;
  2. 但是最新的fabric版本在可能会造成后面运行./byfn generate报错的问题。因此可考虑直接从github上下载稳定的二进制可执行文件,运行命令wget https://github.com/hyperledger/fabric/releases/download/v2.0.1/hyperledger-fabric-linux-amd64-2.0.1.tar.gz,解压后同样将bin目录拷贝到fabric-samples目录中。

两种方法均可得到二进制可执行文件,如下图所示:
在这里插入图片描述

1.2 构建docker镜像

在fabric目录中执行make docker命令,可得到所需的相关镜像。

从Fabric2.0开始docker镜像将基于Alpine Linux,这是一种面向安全的轻量级Linux发行版,只占5MB左右的空间,且更加安全可靠。另外Alpine Linux还提供了自己的包管理工具apk,我们在构建docker镜像过程中存在“apk add”的动作,可能会有从“dl-cdn.alpinelinux.org/alpine/v3.10”下载包失败的问题,这是由于在中国大陆无法连接官方的更新源,因此可考虑在所有Dockerfile中修改为使用阿里云的更新源:

FROM alpine:${ALPINE_VER} as base
RUN echo "#aliyun" > /etc/apk/repositories
RUN echo "https://mirrors.aliyun.com/alpine/v3.10/main/" >> /etc/apk/repositories
RUN echo "https://mirrors.aliyun.com/alpine/v3.10/community/" >> /etc/apk/repositories

最终构建成功,将会得到这些镜像:
在这里插入图片描述

1.3 启动测试网络

在fabric-samples/first-network目录中,执行./byfn.sh up命令启动测试网络,默认会生成crypto-config和channel-artifacts目录中的文件。最后控制台输出如下内容,表示运行成功。
在这里插入图片描述

2. networkUp 脚本分析

执行“./byfn.sh up”命令调用的就是networkUp,脚本逻辑步骤如下:

  1. 如果crypto-config目录不存在,networkUp会先执行generateCerts生成证书与密钥,以及generateChannelArtifacts生成创世区块、用户channel配置交易、 anchor peer节点更新交易;
  2. compose文件包括docker-compose-cli.yaml、docker-compose-etcdraft2.yaml;如果指定了CA,还将包括docker-compose-ca.yaml;如果指定了couchdb,还将包括docker-compose-couch.yaml;使用docker-compose构建和启动容器;
  3. 下载abstore链码的依赖包;
  4. 执行容器cli中的script.sh脚本,参数包括:
    channel名称(CHANNEL_NAME):mychannel
    命令延迟时间(DELAY):3秒
    链码语言(CC_SRC_LANGUAGE):go
    cli等待其他容器的超时(TIMEOUT):10秒
# Generate the needed certificates, the genesis block and start the network.
function networkUp() {
   
  checkPrereqs
  # generate artifacts if they don't exist
  if [ ! -d "crypto-config" ]; then
    generateCerts
    generateChannelArtifacts
  fi
  COMPOSE_FILES="-f ${COMPOSE_FILE} -f ${COMPOSE_FILE_RAFT2}"
  if [ "${CERTIFICATE_AUTHORITIES}" == "true" ]; then
    COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_CA}"
    export BYFN_CA1_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org1.example.com/ca && ls *_sk)
    export BYFN_CA2_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org2.example.com/ca && ls *_sk)
  fi
  if [ "${IF_COUCHDB}" == "couchdb" ]; then
    COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_COUCH}"
  fi
  IMAGE_TAG=$IMAGETAG docker-compose ${COMPOSE_FILES} up -d 2>&1
  docker ps -a
  if [ $? -ne 0 ]; then
    echo "ERROR !!!! Unable to start network"
    exit 1
  fi

  echo "Sleeping 15s to allow Raft cluster to complete booting"
  sleep 15

  if [ "${NO_CHAINCODE}" != "true" ]; then
    echo Vendoring Go dependencies ...
    pushd 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值