Hyperledger Fabric 2.x 环境搭建

news2025/1/16 4:54:45

一、说明

区块链网络的核心是分布式账本,在这个账本中记录了网络中发生的所有交易信息。

Hyperledger Fabric 是一个是开源的,企业级的,带权限的分布式账本解决方案的平台。Hyperledger Fabric 由模块化架构支撑,并具备极佳的保密性、可伸缩性、灵活性和可扩展性。Hyperledger Fabric 被设计成支持不同的模块组件直接拔插启用,并能适应在经济生态系统中错综复杂的各种场景。

本文分享在 Centos 下搭建 Hyperledger Fabric 2.4 环境并进行简单的网络测试。

二、环境准备

2.1. 环境依赖

  • Git 客户端
  • Golang 1.17.5 以上版本
  • Docker 18.03 以上版本

2.2. 检查环境

Docker 版本

docker -v

Golang 语言环境

go version

三、Fabric 源码安装

3.1. 创建目录

在 GOPATH 目录下创建 Fabric 的文件夹:

mkdir -p $GOPATH/src/github.com/hyperledger

3.2. 下载源码

cd $GOPATH/src/github.com/hyperledger

git clone https://gitee.com/hyperledger/fabric.git

这里使用国内的码云的镜像仓库

3.3. 修改安装脚本

如果本地网络访问 github 顺畅可以忽略该步骤

编辑 bootstrap.sh 文件

vim $GOPATH/src/github.com/hyperledger/fabric/scripts/bootstrap.sh
  1. 把 https://github.com/hyperledger/fabric-samples.git 修改为 https://gitee.com/hyperledger/fabric-samples.git

  1. 注释 pullBinaries

3.4. 执行安装脚本

./bootstrap.sh

如下图所示,脚本执行成功之后会下载一个 fabric-samples 工程和一堆 fabric 的 docker 镜像:

分别手动下载 fabric 和 fabric-ca 编译后的压缩包,存放在 fabric/scripts/ 目录下:

由于码云镜像仓库的发布包只有源码,我们需要编译后的所以只能想办法去 github 下载。

https://github.com/hyperledger/fabric/releases/download/v2.4.1/hyperledger-fabric-linux-amd64-2.4.1.tar.gz

https://github.com/hyperledger/fabric-ca/releases/download/v1.5.2/hyperledger-fabric-ca-linux-amd64-1.5.2.tar.gz

压缩压缩包,得到 bin 与 config 两个文件夹:

tar -zxvf hyperledger-fabric-linux-amd64-2.4.1.tar.gz

tar -zxvf hyperledger-fabric-ca-linux-amd64-1.5.2.tar.gz

执行以下命令复制 fabric-samples 目录中

cp -r bin fabric-samples/
cp -r config fabric-samples/

四、启动 test-network 测试网络

进入 test-network 目录

cd $GOPATH/src/github.com/hyperledger/fabric/scripts/fabric-samples/test-network

执行以下命令:

./network.sh up

如果出现下图的报错:

则需要修改 docker-compose 的版本,在 test-network 目录下分别编辑以下文件:

vim docker/docker-compose-test-net.yaml
vim docker/docker-compose-couch.yaml
vim docker/docker-compose-ca.yaml
vim addOrg3/docker/docker-compose-couch-org3.yaml
vim addOrg3/docker/docker-compose-org3.yaml

其中把 version: '3.7' 修改为 version: '3.6' 如下图所示:

修改完配置后,重新执行:

./network.sh up

如下图所示,已成功启动一个 orderer节点 和两个 peer节点

至此一个基于 Hyperledger Fabric 的测试网络就搭建完成了。

五、测试网络使用

可以执行以下命令打印脚本的帮助文本:

./network.sh -h

5.1. 创建 Channel

现在我们的机器上正在运行对等节点和排序节点, 我们可以使用脚本创建用于在 Org1 和 Org2 之间进行交易的 Fabric 通道。

Fabric channel 是特定网络成员之间的专用通信层,通道只能由被邀请加入通道的组织使用,并且对网络的其他成员不可见。 每个通道都有一个单独的区块链账本,被邀请的组织 “加入” 他们的对等节点来存储其通道账本并验证交易,建立一个通道相当于建立了一个子链。

使用 network.sh 脚本在 Org1 和 Org2 之间创建通道并加入他们的对等节点,执行以下命令创建一个通道:

./network.sh createChannel

如下图所示创建成功后默认名称为 mychannel

可使用 -c 来指定通道名称,以下命令将创建一个名为 channel1 的通道:

./network.sh createChannel -c channel1

5.2. 在通道启动一个链码

创建通道后,可以开始使用智能合约与通道账本交互。智能合约包含管理区块链账本上资产的业务逻辑,由成员运行的应用程序网络可以在账本上调用智能合约创建,更改和转让这些资产,应用程序还通过智能合约查询,以在分类账上读取数据。

在 Fabric 中,智能合约作为链码以软件包的形式部署在网络上。链码安装在组织的对等节点上,然后部署到某个通道,然后可以在该通道中用于认可交易和区块链账本交互。在将链码部署到通道前,该频道的成员需要就链码定义达成共识,建立链码治理。何时达到要求数量的组织同意后,链码定义可以提交给通道,并且可以使用链码了。

创建频道后,可以使用 network.sh 脚本在通道上启动链码:

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-java -ccl java
  • -ccn:为指定链码名称
  • -ccl:为指定链码语言

deployCC 子命令将在 peer0.org1.example.com 和 peer0.org2.example.com 上安装 asset-transfer-basic 链码,如果第一次部署链码,脚本将安装链码的依赖项。默认情况下,脚本安装 Go 版本的 asset-transfer-basic 链码,可以通过参数 -ccl 来安装 Java 或 javascript 版本的链码。

5.3. 与网络交互

在启用测试网络后,可以使用 peer cli 客户端与网络进行交互,通过 peer cli 客户端可以调用已部署的智能合约,更新通道,或安装和部署新的智能合约。

首先确保操作目录为 test-network 目录,比如我的目录是:

以下操作需确保在 test-network 目录中进行操作: 

执行以下命令将 cli 客户端添加到环境变量中:

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

还需要将 fabric-samples 代码库中的 FABRIC_CFG_PATH 设置为指向其中的 core.yaml 文件:

export FABRIC_CFG_PATH=$PWD/../config/

设置允许 org1 操作 peer cli 的环境变量:

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

CORE_PEER_TLS_ROOTCERT_FILE 和 CORE_PEER_MSPCONFIGPATH 环境变量指向 Org1 的 organizations 文件夹中的的加密材料。

执行以下命令用一些资产来初始化账本:

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

执行成功会返回 Chaincode invoke successful. result: status:200 如下图所示:

执行以下指令来查询通道账本中的资产列表:

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

六、关闭网络

使用完测试网络后,可执行以下命令关闭网络:

./network.sh down

该命令将停止并删除节点和链码容器,删除组织加密材料,并从 Docker Registry 移除链码镜像,另外还会删除之前运行的通道项目:

七、使用认证机构创建网络

Hyperledger Fabric 使用公钥基础设施 (PKI) 来验证所有网络参与者的行为。 每个节点,网络管理员和用户提交的交易需要具有公共证书和私钥以验证其身份。

默认情况下,脚本使用 cryptogen 工具创建证书和密钥,该工具用于开发和测试,并且可以快速为具有有效根信任的 Fabric 组织创建所需的加密材料。

测试网络脚本还提供了使用证书颁发机构(CA)的网络的启动选项。在网络中每个组织操作一个 CA(或多个中间 CA)来创建属于他们的组织身份,所有由该组织运行的 CA 创建的身份享有相同的组织信任根源。

首先运行以下命令关停所有正在运行的网络:

./network.sh down

使用 CA 参数启动网络:

./network.sh up -ca

执行命令成功后,通过打印的 docker 容器可以看到启动了三个 CA,每个网络中的组织一个:

可以通过 tree 命令来查看 Org1 管理员用户的 MSP 文件夹结构和文件:

tree organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/

其中 signcerts 文件夹中存放着管理员用户的证书,keystore 文件夹中存放着私钥。

参考资料

  • https://hyperledger-fabric.readthedocs.io/en/latest/whatis.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/443790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

拉格朗日粒子扩散模式FLEXPART

为了高效、精准地治理区域大气污染,需要弄清污染物的来源。拉格朗日粒子扩散模式FLEXPART通过计算点、线、面或体积源释放的大量粒子的轨迹,来描述示踪物在大气中长距离、中尺度的传输、扩散、干湿沉降和辐射衰减等过程。该模式既可以通过时间的前向运算…

Pytorch基础 - 7. torch.transpose() 和 torch.permute()

目录 1. torch.transpose(dim0, dim1) 2. torch.permute(dims) 3. 在转置函数之后使用view() PyTorch中使用torch.transpose() 和 torch.permute()可对张量进行维度的转置,具体内容如下: 1. torch.transpose(dim0, dim1) 参数: 需要转置的两个维度…

React native RN 开发实例

多入口加载方式 React Native 混合开发多入口加载方式 - 知乎 initialProperties 官方文档:React Navigation moduleName 案例:GitHub - hcn1519/ReactNative-iOS-Example React Native 混合开发多入口加载方式 - 知乎 项目结构 参考&#xff1…

传奇修改怪物属性教程:传奇服务端架设后怪物不主动攻击是什么原因?

当你架设好传奇服务端后怪物不主动攻击是什么原因呢?今天飞飞来和你分享 1、检查是否进入了管理员隐藏模式 如果是你设置了GM号进入了隐身模式,登录游戏就会有登录脚本默认管理上线检测,怪物看到你是GM管理员自然不会攻击你的,你…

(顶级理解)为什么Vue中的v-if 和v-for不建议一起用?

目录 1.背景 2.原因 3.通俗案例 4.解决方案 5.扩展(强烈看下) 1.背景 我们都知道v-if和v-for是vue开发工程中十分常用的方法 2.原因 当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级。这意味着 v-if 将分别重复运行于 每…

jQuery 基础入门速成下篇

jQuery高级 事件冒泡 什么是事件冒泡? 在一个对象上触发某类事件,此对象上定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或事件返回true,那么这个事件会向这个对象的父级对象传…

门禁系统中人脸检测技术的原理剖析和使用教程

引言 人脸检测 API 是一种基于深度学习技术的图像处理API,可以快速地检测出一张图片中的人脸,并返回人脸的位置和关键点坐标,在人脸识别系统、人脸情绪识别等多种场景下都有极大的应用。 本文将从人脸检测的发展历程、原理、特点等角度出发…

第五章 RNN

目录 5.1 概率和语言模型5.1.1 概率视角下的 word2vec5.1.2 语言模型5.1.3 将CBOW模型用作语言模型? 5.2 RNN5.2.1 循环的神经网络5.2.2 展开循环5.2.3 Backpropagation Through Time5.2.4 Truncated BPTT5.2.5 Truncated BPTT的mini-batch学习 5.3 RNN的实现5.3.1 …

【博云+智领云】携手云原生大数据领域,开展深度合作

近日,博云与LinkTimeCloud智领云达成战略合作伙伴关系,基于此前坚实合作基础,全面拓宽合作广度与深度,共同推出基于Kubernetes的企业级容器云云原生大数据技术融合的新型数字化IT底座,并且在某国家级创新中心首次落地。…

高精度的乘除法(C++实现)

前言:我们都熟知高精度的加减法可以用字符串来模拟实现,其实乘除法的高精度计算也和加减法类似却也略有不同,下面我们一起来看一下高精度的乘除法的模拟实现,希望可以帮助到大家。 目录 1.高精度乘法的实现 1.1原理重点难点解析…

一图看懂 pyexcel 模块:提供统一 API用来读写操作 Excel 文件的库, 资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 pyexcel 模块:提供统一 API用来读写操作 Excel 文件的库, 资料整理笔记(大全) 摘要模块图类关系图模块全展开【pyexcel】统计常量模块1 …

ABAP:自定义搜索帮助:可参考标准函数F4IF_SHLP_EXIT_EXAMPLE

当我们在自定义选择屏幕中, 需要写入我们自定义的搜索帮助的时候,可以通过预定义函数来实现: 实例说明: 第一步:创建搜索帮助SE11分销渠道(Z_VTWEG) 1.选择基本索引帮助: 2.选择参考表,因为这…

Java 基础——HashMap 底层数据结构与源码分析

目录 1.HashMap 简介2.HashMap 底层数据结构2.2.JDK1.8 之前2.3.JDK1.8 及以后 3.常量定义3.1.默认初始化容量3.2.最大容量3.3.负载因子3.4.阈值 4.HashMap 源码分析4.1.构造函数4.2.Node<K, V>4.2.put(K key, V value)流程源码 4.3.get(Object key)流程源码 4.4.resize(…

java使用阿里云oss上传文件

java使用阿里云oss上传文件 1、oss 是什么&#xff1f; OSS是阿里云对象存储服务&#xff08;Object Storage Service&#xff09;的一个简称&#xff0c;它是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 即开即用、无限大空间的存储集群。相较传统建服务器存储而…

逻辑回归模型预测

范例题目&#xff1a; 建立一个逻辑回归模型预测一个学生是否通过研究生入学考试。N表示训练集中学生个数&#xff0c;Score1、Score2、 Score3、 Score4是N维数组&#xff0c;分别表示N个学生研究生初试、专业课复试、英语面试成绩、专业课面试成绩。Admitted是N维{0,1}数组&a…

RabbitMQ编程模型

RabbitMQ基础概念 RabbitMQ是基于AMQP协议开发的一个MQ产品。 虚拟主机 virtual host RabbitMQ出于服务器复用的想法&#xff0c;可以在一个RabbitMQ集群中划分出多个虚拟主机&#xff0c;每一个虚拟主机都有AMQP的全套基础组件&#xff0c;并且可以针对每个虚拟主机进行权…

面向对象(高级)-Annotation注解、单元测试的使用

注解&#xff08;Annotation&#xff09; 注解大纲 注解的使用1.Annotation的理解 - 注解&#xff08;Annotation&#xff09;是从JDK5.0开始引入&#xff0c;以注解名在代码中存在。 - Annotation可以像修饰符一样被使用&#xff0c;可用于修饰包、类、构造器、方法、成员变…

LeetCode:59. 螺旋矩阵 II

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340; 算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;59. 螺旋矩阵 II 题目描述&#xff1a;给你一个正整数 n &#xff0c…

Python中类属性和类方法

1. 类的结构 1.1 术语 —— 实例 使用面相对象开发&#xff0c;第 1 步 是设计 类使用 类名() 创建对象&#xff0c;创建对象 的动作有两步&#xff1a; (1) 在内存中为对象 分配空间 (2) 调用初始化方法 __init__ 为 对象初始化对象创建后&#xff0c;内存 中就有了一个对象…

【敲敲云】零代码实战,主子表汇总统计—免费的零代码产品

近来很多朋友在使用敲敲云时&#xff0c;不清楚如何使用主子表&#xff0c;及如何在主表中统计子表数据&#xff1b;下面我们就以《订单》表及《订单明细》表来设计一下吧&#xff0c;用到的组件有“设计子表”、“公式”、“汇总”等。 《订单》表展示 总金额 订单明细中“小…