Hyperledger Fabric搭建测试网络

news/2025/2/4 6:06:39/

本文使用的Fabric版本:V2.5.4
Ubuntu系统:16.04LTS

  前序文章已经详细介绍了如何安装部署Hyperledger Fabric系统,这里不再赘述。本篇文章主要介绍如何使用Fabric的测试网络。在正式开始之前,有一点需要说明:

  • Hyperledger Fabric的完整安装路径如下:
$HOME/go/src/github.com/hyperledger/fabric

为了方便,下文cd命令中的路径从fabric开始书写,fabric之前的省略

1 启动/关闭测试网络

  为了方便开发人员学习及测试智能合约和DApp,fabric-samples文件中提供了一个测试网络test-network。

1.1 启动测试网络

进入fabric/scripts/fabric-samples/test-network,可以执行如下命令启动测试网络:

cd fabric/scripts/fabric-samples/test-network
./network.sh up

如果命令在执行过程中遇到“permission denied"提示,则使用sudo权限执行第二条命令:

sudo ./network.sh up

执行成功将看到以下提示信息:
在这里插入图片描述
从图中可以看到,这个测试网络包括一个Orderer节点、两个Peer节点和一个CLI客户端(这些都部署在docker容器中),其中这两个Peer节点分属两个组织:Org1和Org2。

1.2 关闭测试网络

可以使用以下命令关闭测试网络:

sudo ./network.sh down

Tips:测试网络关闭之后,创建的通道、部署的链码以及配置的环境变量都会失效,都要重新设置。

1.3 重启测试网络

可以使用如下命令重启测试网络:

sudo ./network.sh restart

2 创建通道

  通道提供一种通信机制,将指定的Peer和Orderer连接在一起,形成一个具有保密性的通信链路,进行数据隔离(区块数据只能存储在已加入到通道中的成员节点内)。
测试网络成功启动之后,就可以创建通道了。创建命令如下:

sudo ./network.sh createChannel

命令会默认创建一个名为"mychannel"的通道,并且将两个Peer节点加入该通道中。

Anchor peer set for org ‘Org1MSP’ on channel ‘mychannel’
Anchor peer set for org ‘Org2MSP’ on channel ‘mychannel’
Channel ‘mychannel’ joined

创建通道时,还可以指定通道的名字。命令如下:

//创建一个名为first_channel的通道
sudo ./network.sh crateChannel -c first_channel

通道名称遵循以下规则:

  • 由小写字母、点(.)和短横线(-)构成;并且字母开头;
  • 长度小于250字符

Hyperledger Fabric中通道、节点、组织之间的关系:

通道、节点和组织之间的关系可以用以下方式概括:每个参与方组织可以拥有一个或多个节点,节点可以属于一个或多个组织,而不同的组织可以通过一个或多个通道进行隔离和交互。每个通道的参与方可以通过Peer节点之间的共享账本实现数据的一致性和交易的隐私性。同时,Orderer节点作为整个网络的协调者,负责交易的排序和共识。

3 安装部署链码

  链码(Chaincode)就是Hyperledger Fabric中的智能合约,是一个可以对账本数据进行操作的可开发的组件程序。调用链码之前需要先安装部署,链码也部署在容器中。部署命令如下:

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

该命令将会部署一个使用go语言编写的链码。其中:

  • ccn:表示链码的名字;
  • ccp:表示链码文件的地址;这是fabric-samples提供的链码案例。
  • ccl: 表示链码文件使用的语言;

链码部署的命令一定不能用sudo来执行。但如果在执行上述命令的时候出现如下错误:
go executable file not found in $PATH
在这里插入图片描述
权限不够错误
在这里插入图片描述可以通过修改~/go文件的权限来解决。具体如下:

sudo chmod -R 777 ~/go

4 peer CLI

  创建了网络之后,可以使用peer CLI操作网络,包括安装部署智能合约、调用智能合约以及更新通道等。只需要配置环境变量就可以使用peer CLI。具体如下:

4.1 配置peer CLI

(1) 将/fabric/scripts/fabric-samples/bin目录加入到环境变量PATH中。
第一种方法:通过/etc/profile文件配置
在这里插入图片描述
第二种方法:通过export命令
网络上很多资料给出的使用export配置环境变量的命令如下:

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

但是这里并不推荐这种写法。原因有以下两点:

  • 这个命令当中用到了PWD变量,即用户当前的工作路径。如果你当前的路径不是/fabric/scripts/fabric-samples/test-network 的话,那么最终添加到PATH中的路径就是错的。
  • 即使当前的工作路径为/fabric/scripts/fabric-samples/test-network,有些系统也无法映射到正确的路径。比如:
    在这里插入图片描述

如果想要使用export方法配置该环境变量的话,建议使用如下命令

//先跳转到fabric-samples文件所在的地址
cd /fabric/scripts/fabric-samples
export PATH=$PWD/bin:$PATH

(2) 配置FABRIC_CFG_PATH

//先跳转到fabric-samples文件所在的地址
cd /fabric/scripts/fabric-samples
export FABRIC_CFG_PATH=${PWD}/config/

(3) 配置Org1环境变量

要先进入test-network文件目录:

cd /fabric/scripts/fabric-samples/test-network

然后用命令行部署环境变量:

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

接下来就可以使用peer CLI了。可以输入如下命令验证是否正确配置:

peer channel list

如果能返回刚才创建的“mychannel"信息(如下图),则说明peer CLI已经正确配置。
在这里插入图片描述
如果出现如下错误:

Error: error getting endorser client for invoke: endorser client failed to connect to localhost:7051: failed to create new connection: context deadline exceeded.

这是因为前面创建的Orderer、Peer节点都不存在了,可以使用docker ps -a查看一下。需要重新启动网络、创建通道、部署链码和配置环境变量。

4.2 说明

关于peer CLI有以下几点需要说明(后续补充):

  • peer CLI是用于与Fabric网络中的peer节点进行交互的命令行工具。上文示例中的peer CLI绑定的是Org1中的peer节点。如果需要绑定Org2中的peer节点,则需要重新配置环境变量。

  到目前为止,测试网络已经搭建完成。至于如何使用peer CLI调用智能合约,留待下一篇博客。

参考资料

  1. https://hyperledger-fabric.readthedocs.io/en/release-2.5/test_network.html
  2. https://blog.51cto.com/zhuxianzhong/7241974?articleABtest=0
  3. https://blog.51cto.com/zhuxianzhong/7242582?articleABtest=0
  4. https://blog.51cto.com/zhuxianzhong/7246193?articleABtest=0
  5. https://blog.csdn.net/qq_45179762/article/details/122217058
  6. https://blog.csdn.net/wybnmsl/article/details/113743268
  7. https://blog.csdn.net/Blockchain210/article/details/127707353

http://www.ppmy.cn/news/1178448.html

相关文章

0038【Edabit ★☆☆☆☆☆】【生成kv对】Pair Management

0038【Edabit ★☆☆☆☆☆】【生成kv对】Pair Management arrays language_fundamentals Instructions Given two arguments, return an array which contains these two arguments. Examples makePair(1, 2) // [1, 2] makePair(51, 21) // [51, 21] makePair(512124, 215…

名词解释 MongoDB

MongoDB 是一个面向文档的数据库管理系统,它不使用传统的表格结构,而是将数据组织成类似文档的形式,通常使用JSON格式。 文档数据库:数据以文档的形式存储,每个文档可以包含不同的字段,就像一个文件可以包…

452. 用最少数量的箭引爆气球

有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一…

Python11-正则表达式

Python11-正则表达式 1.正则表达式简介2.正则表达式常见用法和符号3.正则查找4.re.Match对象与group5.re.compile6.正则表达式修饰符7.正则匹配规则8.正则表达式匹配练习9.正则替换10.贪婪模式和非贪婪模式 1.正则表达式简介 正则表达式(Regular Expression&#x…

Uservue 中 keep-alive 组件的作用

目录 前言 用法 代码 理解 keep-alive 是 Vue.js 中一个内置的组件,它能够将不活动的组件实例保存在内存中,防止其被销毁,以便在后续需要时能够快速重新渲染。这个功能在一些需要频繁切换但不希望每次都重新渲染的场景中非常有用&#xf…

bug:Chrome插件SwitchyOmega安装时程序包无效:“CRX_HEADER_INVALID“问题

bug:Chrome插件SwitchyOmega安装时程序包无效:“CRX_HEADER_INVALID“问题 1 解决 先说解决办法: 将下载的crx重命名为xxx.zip,然后解压打开chrome的开发者模式 点击加载已解压的应用程序,然后选择我们解压后的文件夹即可 安装成…

全电注塑机硬件选型

电机选型(方法) 在伺服电机选型计算当中其主要数据包括:负载/ 电机惯量比,加减速力矩, 负载转矩,连续过载时间等。选择原则是:首先根据转矩-速度特性曲线检查负载转矩,加…

【开题报告】基于Spring Boot的课程在线预约系统的设计与实现

1.引言 随着互联网的发展,线上教育和课程培训变得越来越普遍。然而,很多学生在选择课程时面临一些困扰,例如如何找到适合自己的课程,如何与老师进行预约等。因此,设计一个基于Spring Boot的课程在线预约系统具有重要的…