Hyperledger Fabric 2.3.3 安装过程及网络测试

Posted xhanglog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hyperledger Fabric 2.3.3 安装过程及网络测试相关的知识,希望对你有一定的参考价值。

本文参考网上安装 fabric 过程,包含遇到的问题及解决办法。

1、Fabric 介绍

Hyperledger Fabric 是一个开源的企业级许可分布式账本技术(Distributed Ledger Technology,DLT)平台,专为在企业环境中使用而设计。智能合约,在 Fabric 中称之为“链码”,作为受信任的分布式应用程序,从区块链中获得信任,在节点中达成基本共识。它是区块链应用的业务逻辑。

Fabric 由以下模块化的组件组成:

  • 可插拔的排序服务对交易顺序建立共识,然后向节点广播区块;
  • 可插拔的成员服务提供者负责将网络中的实体与加密身份相关联;
  • 可选的P2P gossip 服务通过排序服务将区块发送到其他节点;
  • 智能合约(“链码”)隔离运行在容器环境(例如 Docker)中。它们可以用标准编程语言编写,但不能直接访问账本状态;
  • 账本可以通过配置支持多种 DBMS;
  • 可插拔的背书和验证策略,每个应用程序可以独立配置。

2、环境安装过程

本次安装环境使用 VMware Workstation 虚拟机安装 CentOS7,其中需要安装 Docker、Fabric、golang等,具体安装过程如下:

(1)安装前配置

更新yum:yum update

yum源配置:

cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum makecache

其他软件下载:

yum install -y curl vim gcc gcc-c++ git

增加docker yum 源:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(2)docker 安装

删除之前的docker配置:

yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

使用官方脚本自动安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

使用 docker --version 命令查看版本:

(3)docker-compose 安装

使用curl命令从网址中拉入文件到/usr/local/bin/docker-compose文件下:docker-compose地址

curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

给docker-compose文件加上权限:

sudo chmod +x /usr/local/bin/docker-compose

检验docker-compose是否安装成功:

docker-compose version

(4)安装 go 环境

安装git:

yum install -y git
cd /opt
mkdir golang
cd golang
wget https://studygolang.com/dl/golang/go1.14.10.linux-amd64.tar.gz
tar -zxvf go1.14.10.linux-amd64.tar.gz

设置环境变量:

vim /etc/profile

追加内容:

export GOPATH=/opt/gopath
export GOROOT=/opt/golang/go
export PATH=$GOROOT/bin:$PATH
export FABRIC=$GOPATH/src/github.com/hyperledger/fabric

刷新查看版本:

source /etc/profile
go version
go env

(5)拉取 fabric 源码

获取源码:

mkdir -p ~/go/src/github.com/hyperledger
cd ~/go/src/github.com/hyperledger
git clone https://github.com/hyperledger/fabric.git

相关文件和镜像下载:(下载的fabric-samples会在scripts文件夹下)

cd fabric/scripts
./bootstrap.sh # 执行脚本下载文件和镜像

(6)测试网络

进入test-network:

cd fabric-samples/test-network

运行以下命令删除所有运行中任何容器:

./network.sh down

通过以下命令来启动网络:

./network.sh up

运行以下命令以列出计算机上运行的所有Docker容器。可以看到该network.sh脚本创建的三个节点:

docker ps -a

5.创建频道。使用network.sh脚本创建频道,运行以下命令以使用默认名称创建频道mychannel

./network.sh createChannel

成功后可以看到以下结果:

启动链码:

./network.sh deployCC

遇到错误1:

替换执行命令:

 ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go

遇到错误2:

执行命令设置 GOPROXY:

go env -w GOPROXY=https://goproxy.cn,direct

再次执行生成链码命令,可以看到以下结果:

启用测试网络后,可以使用peerCLI与网络进行交互。peerCLI允许您从CLI调用已部署的智能合约,更新通道或安装和部署新的智能合约。

在test-network中执行以下命令:

二进制文件添加到您的CLI路径:

export PATH=${PWD}/../bin:$PATH

设置FABRIC_CFG_PATH为指向存储库中的core.yaml文件fabric-samples

export FABRIC_CFG_PATH=$PWD/../config/

设置环境变量,允许以peer Org1的形式操作CLI:

# Environment variables for Org1

export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051

用于安装和启动资产转移(基本)链码,调用(Go)链码的功能以在分类帐上放置资产的初始列表:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"InitLedger","Args":[]}'

初始化成功可以看到以下内容:

从CLI查询分类帐。运行以下命令以获取已添加到渠道分类帐的资产列表:

peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}'

查询得到以下内容:

[{"AppraisedValue":300,"Color":"blue","ID":"asset1","Owner":"Tomoko","Size":5},{"AppraisedValue":400,"Color":"red","ID":"asset2","Owner":"Brad","Size":5},{"AppraisedValue":500,"Color":"green","ID":"asset3","Owner":"Jin Soo","Size":10},{"AppraisedValue":600,"Color":"yellow","ID":"asset4","Owner":"Max","Size":10},{"AppraisedValue":700,"Color":"black","ID":"asset5","Owner":"Adriana","Size":15},{"AppraisedValue":800,"Color":"white","ID":"asset6","Owner":"Michel","Size":15}]

当要转移或更改分类帐上的资产时,将调用链码。使用以下命令通过调用资产转移(基本)链码来更改分类帐上资产的所有者:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}'

命令执行成功可以看到以下结果:

2021-09-19 20:37:48.166 CST [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Chaincode invoke successful. result: status:200

关闭测试网络:

./network.sh down

该命令将停止并删除节点和链码容器,删除组织加密材料,并从Docker注册表中移除链码映像。该命令还会从以前的运行中删除通道工件和docker卷,从而在遇到任何问题时允许您再次运行。

以上是关于Hyperledger Fabric 2.3.3 安装过程及网络测试的主要内容,如果未能解决你的问题,请参考以下文章

hyperledger fabric 2.3.3 搭建教程

Hyperledger Fabric 2.3.3 安装过程及网络测试

HyperLedger Fabric中fabric-samples 安装

Hyperledger Fabric入门 -------- ( Hyperledger-fabric-doc.pdf)

Fabric系列 - Hyperledger开源项目介绍

Fabric系列 - Hyperledger开源项目介绍