Fabric2.4.7搭建与测试

一、基本信息

1.版本

Fabric版本:2.4.7

Fabric CA 版本:1.5.7

虚拟机:VMware® Workstation 16 Pro 16.1.2 build-17966106

系统版本:Ubuntu 22.04

2.参考

(1)官方文档Using the Fabric test network — hyperledger-fabricdocs main documentation

(2)Hyperledger Fabric 入门笔记(三)Fabric V2.4 环境搭建_fabric开发环境搭建_荆棘鸟骑士的博客-CSDN博客

二、准备工作:

1.VMware安装Ubuntu 22.04

参考任意安装教程即可。

Hyperledger Fabric 入门笔记(三)Fabric V2.4 环境搭建_fabric开发环境搭建_荆棘鸟骑士的博客-CSDN博客

2.安装基本软件curl、git、vim、jq和tree

curl:用于下载文件的工具。版本:7.81.0

Git:开源的版本控制工具,用于从GitHub上下载源代码。版本:2.34.1

vim:文本编辑器,用于修改脚本。版本:vim--version

Jq:处理JSON文件的工具。版本:1.6

tree:以树状图列出文件目录结构的工具。版本:v2.0.2

sudo apt install curl -y

sudo apt install git -y

sudo apt install vim -y

sudo apt install jq -y

sudo apt install tree

3.安装docker和docker compose

使用apt命令安装docker compose,这会自动安装docker。

查看安装版本。

sudo apt install docker-compose

docker version

docker-compose version

docker版本:

docker compose版本:

赋予docker-compose可执行权限:

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

设置docker在系统启动的时候自动启动:

sudo systemctl enable docker

将当前的用户添加到用户组docker中,重启生效:

sudo usermod -a -G docker $USER

注:这里如果不重启,后面可能会出问题,提示当前用户没有权限。如果提示出错,进行此步赋予权限操作即可。

三、使用官方测试文档进行网络测试

Fabric官方提供了一个基础示例项目fabric-samples,项目仓库为hyperledger/fabric-samples。该项目可以部署一个测试网络,专用于引导用户学习Fabric区块链网络的基本特性和操作。

部署这个测试网络需要预先准备三部分内容:

示例,即fabric-samples仓库。注1:包括示例链码等,正常开发不需要这部分内容。

平台特定的Hyperledger Fabric CLI工具二进制文件和配置文件(platform-specific Hyperledger Fabric CLI tool binaries and config files)。注2:详见后文。

Fabric Docker镜像。注3:Fabric的节点以Docker容器的形式运行。而镜像(Image)和容器(Container)的关系就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。因此需要先获取所需的镜像。

官方提供了两个脚本bootstrap.sh和install-fabric.sh用于获取上述内容。两个脚本的源代码都位于GitHub上的hyperledger/fabric项目的scripts文件夹中,使用方法和运行效果也相同,但是install-fabric.sh脚本的语法较bootstrap.sh脚本有所改进。

所以选取脚本network.sh用于启动测试网络。

0.准备

为了方便后期管理,在当前登录用户的HOME目录下创建一个空目录并进入该目录:

mkdir hyfa && cd hyfa

在当前目录下新建一个名为install-fabric.sh的文件,将官方文档https://github.com/hyperledger/fabric/blob/main/scripts/install-fabric.sh中的文件内容复制过来。

vim install-fabric.sh

赋予install-fabric.sh脚本文件可执行权限并执行。

chmod +x install-fabric.sh

./install-fabric.sh

正常到这里就准备完了

注:我这里执行了,但是不知道什么原因下载二进制文件的时候巨慢,所以我在执行完这个脚本以后,手动下载的两个二进制文件,并且添加到docker里了。

我选择的是Fabric 2.4.7和Fabric CA 1.5.7。

1.启动测试网络

打开fabric-examples中的test-network文件夹,运行network.sh脚本

cd test-network

./network.sh up

如图所示,网络默认名称为fabric_test,包括3个节点。

默认情况下,网络使用 cryptogen 工具来启动网络。但是,也可以通过证书颁发机构启动网络。

Using the Fabric test network — hyperledger-fabricdocs main documentation

2.创建通道

不指定通道名称的时候,默认为mychannel。

./network.sh createChannel

指定通道名称,如channel1

./network.sh createChannel -c channel1

同时启动网络并创建通道

./network.sh up createChannel

 

3.部署Go版本的asset-transfer-basic链码

这里其实官方给的步骤是有问题的,直接运行这个命令的时候会报错,详情和解决办法在遇到问题里。

然后部署go语言的链码,deployCC 子命令将在peer0.org1.example.com 和peer0.org2.example.com 上安装资产传输(基本)链代码,然后将链代码部署在使用通道标志指定的通道上(如果未指定通道,则部署在mychannel 上) )。:

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

查看docker中的进程:docker ps

4.与网络交互

(1)将二进制文件添加到 CLI 路径:

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

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

(2)将 FABRIC_CFG_PATH 设置为指向 Fabric-samples 存储库中的 core.yaml 文件:

export FABRIC_CFG_PATH=$PWD/../config/

(3)设置环境变量

以便以 Org1 的身份操作对等 CLI,CORE_PEER_TLS_ROOTCERT_FILE 和 CORE_PEER_MSPCONFIGPATH 环境变量指向组织文件夹中的 Org1 加密材料:

# 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

(4)运行以下命令以使用资产初始化账本。

注意,CLI 不会访问 Fabric Gateway 对等点,因此必须指定每个认可对等点。

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"]}'

成功后出现以下界面:

当网络成员想要转移或更改账本上的资产时,将调用链代码。

使用以下命令通过调用资产转移(基本)链码来更改分类账上资产的所有者:

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"]}'

出现以下显示即成功

2023-09-19 19:12:30.219 CST 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200 payload:"Michel"

由于资产转移(基本)链码的背书策略要求交易由 Org1 和 Org2 签名,因此链码调用命令需要使用 - -peerAddresses 标志。由于为网络启用了 TLS,因此该命令还需要使用 --tlsRootCertFiles 标志引用每个对等方的 TLS 证书。

调用链代码后,我们可以使用另一个查询来查看调用如何更改区块链分类账上的资产。由于我们已经查询了 Org1 对等点,因此我们可以借此机会查询 Org2 对等点上运行的链码。设置以下环境变量以作为 Org2 运行:

# Environment variables for Org2

export CORE_PEER_TLS_ENABLED=true

export CORE_PEER_LOCALMSPID="Org2MSP"

export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt

export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp

export CORE_PEER_ADDRESS=localhost:9051

现在可以查询在peer0.org2.example.com上运行的资产转移(基本)链代码:

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

运行结果:

5.关闭网络

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

./network.sh down

五、遇到问题:

1.没有正确配置Golang环境

解决:

打开chaincode-go文件夹,查看文件结构,一开始是没有vendor这个文件夹的,所以go语言是没有依赖包的,所以会出错。

使用go mod vendor命令即可下载依赖。但是因为国内网络的问题,可能会下不下来,所以先更换一下源,然后下载依赖。

go env -w GOPROXY=Goproxy.cn

go mod vendor

下载完成后,回到测试网的路径执行链码部署命令便能成功。

2.docker refused

docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,如果在安装docker时没有将当前用户添加到docker组,则会出现如下问题。

解决方法:创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket,进而也就可以执行docker相关命令。

sudo groupadd docker

sudo gpasswd -a $USER docker

newgrp docker

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王富贵他妈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值