ibm区块链hyperledger ibm区块链联合创新实验室
一、浅谈Hyperledger Fabric架构原理
浅谈Hyperledger Fabric架构原理
Hyperledger Fabric是由IBM公司主导开发的面向企业级客户的开源项目,旨在提供一个高效、安全且灵活的区块链开发框架。以下是对Hyperledger Fabric架构原理的浅谈。
一、Hyperledger Fabric概述
Hyperledger Fabric是一个私有链/联盟链的开发框架,其网络中的节点必须经过授权认证后才能加入,从而避免了像比特币和以太坊这类公有链中的POW(工作量证明)资源开销,大幅提高了交易处理效率,满足企业级应用对处理性能的诉求。为了满足灵活多变的应用场景,Hyperledger Fabric采用了高度模块化的系统设计理念,将各个功能模块进行分离部署,实现了模块的插件式管理。
二、基本概念
Ledger:账本,节点维护的区块链和状态数据库。World state:世界状态,经过数次交易后最新的键值对,表示当前区块链网络中的状态。Channel:通道,私有的子网络。通道中的节点共同维护账本,实现数据的隔离和保密。每个channel对应一个账本,由加入该channel的peer维护,一个peer可以加入多个channel,维护多个账本。Org:Orginazation,管理一系列成员的组织。一个channel内可以有多个组织。Chaincode:链码,运行在节点内的程序,提供业务逻辑接口,对账本进行查询或更新。Endorse:背书,指一个节点执行了一个交易并对结果进行签名后返回响应的过程。背书是交易有效性的重要保证。Ordering Service:排序服务,将交易排序后放入区块中,并广播给网络各节点。排序服务是Hyperledger Fabric中实现共识的关键组件。PKI:Public Key Infrastructure,一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。PKI在Hyperledger Fabric中用于身份认证和加密通信。MSP:Membership Service Provider,成员管理服务。基于PKI实现,为网络成员生成证书,并管理身份。MSP是Hyperledger Fabric中实现身份认证和权限管理的基础。
三、Hyperledger Fabric的共识算法
在所有peers中,交易信息必须按照一致的顺序写入账本(区块链的基本原则)。Hyperledger Fabric采用了更加灵活、高效的共识算法,以适应企业场景下对高TPS(每秒交易数)的要求。目前,Hyperledger Fabric有三种交易排序算法可以选择:
SOLO:只有一个order服务节点负责接收交易信息并排序,这是最简单的一种排序算法,一般用在实验室测试环境中。SOLO属于中心化的处理方式。Kafka:Apache的一个开源项目,主要提供分布式的消息处理/分发服务。Hyperledger Fabric利用Kafka对交易信息进行排序处理,提供高吞吐、低延时的处理能力,并且在集群内部支持节点故障容错。SBFT:简单拜占庭算法,相比于Kafka,提供更加可靠的排序算法,包括容忍节点故障以及一定数量的恶意节点。目前,Hyperledger Fabric社区正在开发该算法。
四、交易流程
Hyperledger Fabric的经典交易流程包括以下几个步骤:
发送交易提案:客户端发送交易提案(Proposal)到背书节点,提案中包含交易所需参数。模拟执行交易提案:背书节点会调用链码模拟执行交易提案,这些执行不会更新账本。每个执行都会产生读写集(RWsets),即交易中记录的主要内容。返回提案响应:背书节点会对读写集进行背书签名,生成提案响应(Proposal response)并返回给应用程序。交易排序:应用程序根据接收到的提案响应生成交易,并发送给排序服务节点。排序服务打包一组交易到一个区块后,分发给各记账节点。交易验证并提交:每个节点会对区块中的所有交易进行验证,包括验证背书策略以及版本冲突验证(防止双花)。验证不通过的交易会被标记为无效。验证通过后,节点将读写集更新到状态数据库,将区块提交到区块链上。通知交易结果给客户端:各记账节点通知应用程序交易的成功与否,交易完成。
以下是Hyperledger Fabric交易流程的图示:
五、总结
Hyperledger Fabric作为一个面向企业级客户的开源区块链项目,通过高度模块化的系统设计、灵活的共识算法以及高效的交易流程,为企业级应用提供了强大的支持。其架构原理体现了区块链技术在企业级应用中的独特优势和潜力,为区块链技术的广泛应用奠定了坚实的基础。
二、浅析Fabric Peer 节点
Hyperledger Fabric,也称之为超级账本,是由 IBM发起,后成为 Linux基金会 Hyperledger中的区块链项目之一。
Fabric是一个提供分布式账本解决方案的平台,底层的账本数据存储使用了区块链。区块链平台通常可以分为公有链、联盟链和私有链。公有链典型的代表是比特币这些公开的区块链网络,谁都可以加入到这个网络中。联盟链则有准入机制,无法随意加入到网络中,联盟链的典型例子就是 Fabric。
Fabric不需要发币来激励参与方,也不需要挖矿来防止有人作恶,所以 Fabric有着更好的性能。在Fabric网络中,也有着诸多不同类型的节点来组成网络。其中 Peer节点承载着账本和智能合约,是整个区块链网络的基础。在这篇文章中,会详细分析 Peer的结构及其运行方式。
在本文中,假设读者已经了解区块链、智能合约等概念。
本文基于 Fabric1.4 LTS。
区块链网络是一个分布式的网络,Fabric也是如此,由于 Fabric是联盟链,需要准入机制,所以在网络结构上会复杂很多,下面是一个简化的 Fabric网络:
各个元素的含义如下:
对于 Fabric网络,外部的用户需要通过客户端应用,也就是图中的 A1、A2或者 A3来访问网络,客户端应用需要通过 CA证书表明自己的身份,这样才能访问到 Fabric网络中有权限访问的部分。
在上面的网络中,共有四个组织,R1、R2、R3和 R4。其中 R4是整个 Fabric网络的创建者,网络是根据 NC4配置的。
在 Fabric网络中,不同的组织可以组成联盟,不同的联盟之间数据通过 Channel来隔离。Channel中的数据只有该联盟中的组织才能访问,每一个新的 Channel都可以认为是一条新的链。与其他的区块链网络中通常只有一条链不一样,Fabric可以通过 Channel在网络中快速的搭建出一个新的区块链。
上面 R1和 R2组成了一个联盟,在 C1上交易。R2同时又和 R3组成了另外一个联盟,在 C2上交易。R1和 R2在 C1上交易时,对 R3是不可见的,R2和 R3在 C2上交易时,对 R1是不可见的。Channel机制提供了很好的隐私保护能力。
Orderer节点是整个 Fabric网络共有的,用来为所有的交易排序、打包。比如上面网络中 O4节点。本文不会对 Orderer节点进行详细说明,可以把这个功能理解为比特币网络中的挖矿过程。
Peer节点表示网络中的节点,通常一个 Peer就表示一个组织,Peer是整个区块链网络的基础,是智能合约和账本的载体,Peer也是本文讨论的重点。
一个 Peer节点可以承载多套账本和智能合约,比如 P2节点,既维护了 C1的账本和智能合约,也维护了 C2的账本和智能合约。
为了可以更深入了解 Peer节点的作用,先了解一下 Fabric整体的交易流程。整体的交易流程图如下:
Peer节点按照功能来分可以分为背书节点和记账节点。
客户端会提交交易请求到背书节点,背书节点开始模拟执行交易,在模拟执行之后,背书节点并不会去更新账本数据,而是把这个交易进行加密和签名,然后返回给客户端。
客户端收到这个响应之后就会把响应提交到 Orderer节点,Orderer节点会对这些交易进行排序,并打包成区块,然后分发到记账节点,记账节点就会对交易进行验证,验证结束之后,就会把交易记录到账本里面。
一笔交易是否能成功是根据背书策略来指定的,每一个智能合约都会指定一个背书策略。
Peer节点代表着联盟链中的各个组织,区块链网络也是由 Peer节点来组成的,而且也是账本和智能合约的载体。
通过对上面交易过程的了解可以知道,Peer节点是主要的参与方。如果用户想要访问账本资源,都必须要和 peer节点进行交互。在一个 Peer节点中,可以同时维护多个账本,这些账本属于不同的 Channel。每个 Peer节点都会维护一套冗余账本,这样就避免了单点故障。
Peer节点根据在交易中的不同角色,可以分成背书节点(Endorser)和记账节点(Committer),背书节点会对交易进行模拟执行,记账节点才会真正将数据存储到账本中。
账本可以分成两个部分,一部分是区块链,另一部分是 Current State,也被称之为 World State。
区块链上只能追加,不能对过去的数据进行修改,链上也包含两部分信息,一部分是通道的配置信息,另一部分是不可修改,序列化的记录。每一个区块记录前一个区块的信息,然后连成链,如下图所示:
第一个区块被称之为 genesis block,其中不存储交易信息。每个区块可以被分为区块头、区块数据和区块元数据。区块头中存储着当前区块的区块号、当前区块的 hash值和上一个区块的 hash值,这样才能把所有的区块连接起来。区块数据中包含了交易数据。区块元数据中则包括了区块写入的时间、写入人及签名。
其中每一笔交易的结构如下,在 Header中,包含了 ChainCode的名称、版本信息。Signature就是交易发起用户的签名。Proposal中主要是一些参数。Response中是智能合约执行的结果。Endorsements中是背书结果返回的结果。
WorldState中维护了账本的当前状态,数据以 Key-Value的形式存储,可以快速查询和修改,每一次对 WorldState的修改都会被记录到区块链中。WorldState中的数据需要依赖外部的存储,通常使用 LevelDB或者 CouchDB。
区块链和 WorldState组成了一个完整的账本,World State保证的业务数据的灵活变化,而区块链则保证了所有的修改是可追溯和不可篡改的。
在交易完成之后,数据已经写入账本,就需要将这些数据同步到其他的 Peer,Fabric中使用的是 Gossip协议。Gossip也是 Channel隔离的,只会在 Channel中的 Peer中广播和同步账本数据。
智能合约需要安装到 Peer节点上,智能合约是访问账本的唯一方式。智能合约可以通过 Go、Java等变成语言进行编写。
智能合约编写完成之后,需要打包到 ChainCode中,每个 ChainCode中可以包含多个智能合约。ChainCode需要安装,ChainCode需要安装到 Peer节点上。安装好了之后,ChainCode需要在 Channel上实例化,实例化的时候需要指定背书策略。
智能合约在实例化之后就可以用来与账本进行交互了,流程图如下:
用户编写并部署实例化智能合约之后,就可以通过客户端应用程序来向智能合约提交请求,智能合约会对 WorldState中数据进行 get、put或者 delete。其中 get操作直接从 WorldState中读取交易对象当前的状态信息,不会去区块链上写入信息,但 put和 delete操作除了修改 WorldState,还会去区块链中写入一条交易信息,且交易信息不能修改。
区块链上的信息可以通过智能合约访问,也可以在客户端应用通过 API直接访问。
Event是客户端应用和 Fabric网络交互的一种方式,客户端应用可以订阅 Event,当 Event发生时,客户端应用就会接受到消息。
事件源可以两类,一类是智能合约发出的 Event,另一类是账本变更触发的 Event。用户可以从 Event中获取到交易的信息,比如区块高度等信息。
在这篇文章中,首先介绍了 Fabric整体的网络架构,通过对 Fabric交易流程的分析,讨论了 peer节点在交易中的作用,然后详细分析了 peer节点所维护的账本和智能合约,并分析了 peer节点维护账本以及 peer节点执行智能合约的流程。
文/ Rayjun
[1]
[2]
[3]
三、【Fabric | 区块链 | Part 1】Hyperledger Fabric 环境部署
Hyperledger Fabric环境部署指南
一、准备工作
开启虚拟机服务
在Windows的“程序与功能”中开启Hyper-V和虚拟机平台,并重启计算机。
安装VMware和Ubuntu
安装VMware Workstation或VMware Player。
创建一个新的虚拟机,安装Ubuntu 20.04 LTS Server版,安装过程中不要安装任何额外的软件。
二、配置Ubuntu环境
更换清华镜像源
编辑/etc/apt/sources.list文件,将原有的镜像源替换为清华大学的镜像源。
取消更新并重启Ubuntu。
设置VM静态IP
在VMware中设置虚拟网卡为NAT模式。
配置Windows的VMnet8网卡。
在Ubuntu中设置静态IP地址。
设置VM自动启动和共享
在VMware中设置虚拟机为开机自动启动和自动挂起。
关闭Ubuntu的自动更新。
SSH设置
设置root账户密码。
安装SSH服务并配置SSH配置文件,允许root登录和密码认证。
生成SSH密钥并重启SSH服务。
三、安装和配置Docker
添加Docker阿里云镜像加速
登录阿里云容器镜像服务获取加速地址。
编辑/etc/docker/daemon.json文件,添加阿里云镜像加速地址。
安装Docker
将官方Docker库的GPG公钥添加到系统中。
将Docker库添加到apt源中。
更新apt库列表并安装docker-ce。
启动Docker服务并将当前用户添加到docker组中。
安装docker-compose并验证安装版本。
四、安装和配置Golang
安装Golang
下载并解压Golang安装包到/usr/local目录。
配置Golang环境变量,包括GOROOT、GOPATH和PATH。
Golang镜像源加速
设置Golang的模块支持和代理镜像源。
五、安装其他软件
使用apt安装python3、nodejs和npm。
六、部署Fabric环境
下载并解压Fabric安装包
在Project目录下创建fabric目录,并下载Fabric CA和Fabric的安装包进行解压。
配置Fabric环境变量
编辑~/.bashrc文件,添加Fabric相关的环境变量。
验证Fabric配置
执行Fabric相关的命令(如configtxgen、cryptogen等)验证配置是否成功。
七、安装Docker镜像
执行bootstrap.sh脚本安装Fabric所需的Docker镜像。
八、环境测试
克隆fabric-samples仓库
克隆fabric-samples仓库并切换到指定的版本分支。
配置测试网络
复制Fabric的bin和config目录到fabric-samples中。
配置测试网络脚本的权限和执行环境。
启动测试网络
重启Docker服务。
执行network.sh脚本创建测试网络、通道和部署链码。
测试智能合约
设置相关的环境变量。
调用已部署的智能合约进行查询测试。
停止测试网络
执行network.sh down脚本停止测试网络。
九、按照官方文档进行测试
根据Hyperledger Fabric的官方文档进行进一步的测试和验证。
通过以上步骤,您可以成功部署Hyperledger Fabric环境,并进行基本的测试。如果在部署过程中遇到任何问题,请查阅官方文档或寻求社区的帮助。
-
芝麻开门交易所官方下载最新版 芝麻交易 11-09