1. 前置软件安装:

1)go:下载压缩包、安装、配置环境变量,go version查看是否安装成功

2)docker和docker-compose的安装

直接下载的docker桌面版,最开始下载的是最新版本,但是后面Fabric在安装的时候报错,后降级版本 (Docker version 18.09.0、docker-compose version 1.23.2)

需要配置镜像加速参考文档:Docker的配置文件 daemon.json 详解_kozazyh的专栏-CSDN博客_docker的daemon.json , 如果目录下没有daemon.json文件,创建一个就好啦

注:之前安装最新docker桌面版本的时候,可以直接打开docker在界面中配置,后来降级版本后,不知道为什么打不开了,就在配置文件里面直接配置了

3)fabric源码下载:直接从GitHub上下载,如果比较慢,可以先拉到码云上在clone,版本切换到release-1.0

两个工具安装:

hyperledger/fabric/common/configtx/tool 运行 go install --tags=nopksc11

/Users/minghuili/go/src/github.com/hyperledger/fabric/common/tools/cryptogen 运行 go install --tags=nopksc11

安装完成后,在$GOPATH/bin目录下,出现 configtxgen和 cryptogen

4)fabric 组件docker镜像:

cd fabric/examples/e2e_cli/
chmod +x download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0
sudo ./download-dockerimages.sh

下载完成后,docker images 查看

5)fabric-samples源码下载:和fabric放在一个目录即可,版本切换到release-1.0

$GOPATH/src/github.com/hyperledger/fabric-samples/first-network 目录下,各个文件夹的含义

localhost:first-network xx$ ll -a
total 104
drwxr-xr-x  13 xx  staff    416  4  1 09:31 ./
drwxr-xr-x  15 xx  staff    480  3 26 11:08 ../
-rw-r--r--   1 xx  staff     42  3 26 11:08 .env         #环境变量
-rw-r--r--   1 xx  staff    335  3 26 11:08 README.md 
drwxr-xr-x   4 xx  staff    128  3 26 11:08 base/        #docker-compose的一些公共服务
-rwxr-xr-x   1 xx  staff  15108  3 26 11:08 byfn.sh*     #启动脚本    
drwxr-xr-x   3 xx  staff     96  4  1 09:31 channel-artifacts/ 
-rw-r--r--   1 xx  staff   5013  3 26 11:08 configtx.yaml    #对应channel-artifacts目录
-rw-r--r--   1 xx  staff   3858  3 26 11:08 crypto-config.yaml   #对应crypto-config目录
-rw-r--r--   1 xx  staff   3015  3 26 11:08 docker-compose-cli.yaml   #启动网络
-rw-r--r--   1 xx  staff   4604  3 26 11:08 docker-compose-couch.yaml #启动网络
-rw-r--r--   1 xx  staff   2883  3 26 11:08 docker-compose-e2e-template.yaml  #启动网络
drwxr-xr-x   3 xx  staff     96  4  1 09:17 scripts/  #测试脚本:创建通道、加入通道、安装链码、实例化链码、和链码交互

2.启动网络

1)配置文件分析:

crypto-config.yaml:

OrdererOrgs:
  - Name: Orderer   #名字
    Domain: example.com   域名
    Specs:
      - Hostname: orderer
  - Name: Org1    #组织名字
    Domain: org1.example.com
    Template:
      Count: 2    # 两个peer结点
    Users: 
      Count: 1    # 一个用户

configtx.yaml:

Profiles、Organizations、Application

2)byfn.sh -h 查看 启动网络的命令

byfn.sh -m generate  -c 通道的名字   # yaml配置文件生成peer结点以及order结点相关的MSP证书,以及创世区块等配置

流程分析:

为两个组织org1和org2创建证书:

生成创世区块:

生成通道的配置文件

生成两个组织的锚节点,对外通信

对应crypto-config目录中生成的内容

  crypto-config中是order结点的配置,以及各个组织的peer结点的配置

  ca:根CA的证书以及私钥

  msp:管理员的证书以及中间证书

  peers:每个peer相关的证书

  tlsca:

  users:管理员证书以及普通用户证书

对应channel-artifacts目录中生成的内容:

  创世区块、通道配置、锚节点配置

3)byfn.sh -m up -c mychannel 

 流程:

   创建通道

  peer结点加入通道中

  更新锚节点信息

  安装chaincode

  智能合约初始化

  查询操作

  做了一次交易

  再次查询

4)生成容器  docker ps -a

docker images  生成链码镜像

5)链码分析

调用流程:

script.sh调用链码的位置:

链码实例化

chaincode_example02.go 链码内容分析:

初始化函数:func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response,判断参数个数以及接受参数

Invoke函数:func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response,invoke、delete、query方法

invoke函数:func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response,转账

delete函数:func (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string) pb.Response

query函数:func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response
 

【安装问题记录】

1../byfn.sh -m up -c imocc报错

解决:将docker和docker-compose版本降级,降级后出现下面的问题:

解决:rm -rf ~/.docker/config.json

参考: https://blog.csdn.net/whizkidlxh/article/details/9020812

2. ./byfn.sh -m up -c imocc报错

Error: got unexpected status: BAD_REQUEST -- error applying config update to existing channel 'imocc': error authorizing update: error validating ReadSet: proposed update requires that key [Group]  /Channel/Application be at version 0, but it is currently at version 1
!!!!!!!!!!!!!!! Channel creation failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========

原因:没有关闭网络,./byfn.sh -m down -c imocc

3.  ./byfn.sh -m up -c imocc报错

!!!!!!!!!!!!!!! Query result on PEER0 is INVALID !!!!!!!!!!!!!!!!
================== ERROR !!! FAILED to execute End-2-End Scenario ==================

解决:【区块链-HyperLedger】1 快速搭建一个Fabric1.0环境 运行测试e2e_cli项目_猫哆哩o0-CSDN博客 

4. curl -sSL https://bit.ly/2ysbOFE | bash -s

问题:curl: (7) Failed to connect to bit.ly port 443: Connection refused

解决:“curl: (7) Failed to connect to xxx port 443: Connection refused”解决办法_Zero的博客-CSDN博客

5. curl -sSL https://bit.ly/2ysbOFE | bash -s 报错

curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443

原因:docker镜像源需要修改

解决: 修改docker镜像源的方法_skh2015java的博客-CSDN博客_修改docker镜像源

6. fabric-fample/test-work中,执行 ./network.sh up,报错

Peer binary and configuration files not found..

Follow the instructions in the Fabric docs to install the Fabric Binaries:
https://hyperledger-fabric.readthedocs.io/en/latest/install.html

原因:上面错误5导致

7. mac 安装mq

mac 安装jq_nature_ph的博客-CSDN博客_jq mac

【20220212更新 安装Fabric 1.4】

步骤1:curl -sSL http://bit.ly/2ysbOFE | bash -s -- 1.4.12 1.4.9 0.4.22

  问题1:命令没有反应

  解决1: 打开http://bit.ly/2ysbOFE 下载 bootstrap.sh

  解决2:打开bootstrap.sh,在里面直接修改  <fabric_version> <fabric-ca_version>

步骤2:执行 bash bootstrap.sh  

 问题2:下载fabric和fabric-ca失败

 解决2:手动下载  hyperledger-fabric-darwin-amd64-1.4.4.tar.gz hyperledger-fabric-ca-darwin-amd64-1.4.4.tar.gz,可提前在bootstrap.sh中将下载fabric和fabric-ca的命令注释一下

  

步骤3: 解压hyperledger-fabric-ca-darwin-amd64-1.4.9.tar.gz和hyperledger-fabric-darwin-amd64-1.4.12.tar.gz,生成config和bin两个文件夹,将 bin 和 config 文件夹复制到 fabric-samples文件夹内。

步骤4:进入fabric-samples下的first-network文件夹,产生网络:./byfn.sh -m generate

  问题:无法打开“cryptogen”,因为无法验证开发者。

  解决:

  

步骤5:启动网络:./byfn.sh -m up

 【参考链接】

Install Samples, Binaries and Docker Images — hyperledger-fabricdocs master documentation

安装fabric二进制文件下载速度慢_oheyec_的博客-CSDN博客

Mac Pro下部署Hyperledger Fabric 1.4.4_yuxinqingge的博客-CSDN博客

【经验】整体过程要按照官方文档走,官方文档说得比较模糊的地方查找资料

【20220214更新】

执行./byfn.sh -m up报错

2022-02-14 07:26:22.638 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Error: got unexpected status: BAD_REQUEST -- error applying config update to existing channel 'mychannel': error authorizing update: error validating ReadSet: proposed update requires that key [Group]  /Channel/Application be at version 0, but it is currently at version 1
!!!!!!!!!!!!!!! Channel creation failed !!!!!!!!!!!!!!!!
========= ERROR !!! FAILED to execute End-2-End Scenario ===========

原因:没有执行./byfn.sh down直接将docker关闭

解决:./byfn.sh down

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐