写在前面:最近因为业务需要,开始学习Hyperledger Fabric了,做java全栈工程师可真难搞。现在算是啥类型的都在涉及了,现在这个技术啥都不懂,就先开个学习专栏,记录记录。顺带也给各位道友参考参考。
目录
1. 什么是hyperledger
2. 什么是Hyperledger Fabric
2.1 主要特点
2.2 应用场景
3. 关键名词
4. 通道概念
4.1 通道的关键特性如下:
4.2 通道的工作机制:
5. 步骤简单梳理
6. 账本
6.1 个人见解
7. 链码和智能合约
我的目标:快速上手!快速掌握!快速开发!冲冲冲!
主要学习应用项目:Hyperledger Fabric
官网文档:入门 — hyperledger-fabricdocs master 文档https://hyperledger-fabric.readthedocs.io/zh-cn/latest/getting_started.html
1. 什么是hyperledger
Hyperledger是一个开放源代码的项目,由Linux基金会在2015年启动,旨在推动跨行业的区块链技术。Hyperledger并不是一种区块链技术,而是一个区块链项目的生态系统,包含了多个区块链和分布式账本技术的框架、库和工具集,它支持企业级的区块链应用开发。
Hyperledger项目的目标是提供一个强健、可扩展、有高度模块化的框架,让企业能够建立自己的区块链解决方案或应用,以此来改善或简化业务流程。它主要关注的是性能、安全性和互操作性,特别适合于金融、医疗、供应链管理等领域的应用。
Hyperledger拥有多个子项目,主要有五大项目:
- Hyperledger Fabric:一个允许组件、如共识和成员管理等,被插拔的企业级权限区块链平台。(这个是核心技术,需要重点掌握!!!)
- Hyperledger Sawtooth:一个企业级区块链平台,用于构建、部署和运行分布式账本。Sawtooth支持可定制的区块链规则,并提供了一个新颖的共识机制——Proof of Elapsed Time (PoET)。
- Hyperledger Indy:专注于数字身份的分布式账本。
- Hyperledger Iroha:简单且易于使用的区块链平台,特别适用于身份管理和数字资产管理。
- Hyperledger Besu:一个以太坊客户端,支持智能合约和私有网络以及公共网络。
其中又有五大常用工具,如下所示:
-
CALIPER:Hyperledger Caliper是一个区块链基准测试工具,它可以测量一个特定区块链实现在不同条件下的性能,包括事务处理速度(TPS)、事务延迟、资源消耗等指标。它特别适用于Hyperledger Fabric,帮助开发者了解其区块链解决方案的性能瓶颈和优化方向。
-
CELLO:Hyperledger Cello旨在作为区块链即服务(BaaS)平台,允许用户通过云服务或在内部环境中轻松地部署、管理和运行区块链网络。Cello通过提供多种管理功能,包括链码管理、节点配置和监控等,帮助简化区块链的管理和操作。
-
COMPOSER:Hyperledger Composer是一个开发框架和工具集,旨在简化Hyperledger Fabric区块链的开发和部署。它允许开发者通过高级抽象和模型化语言来定义业务网络,包括资产、参与者、交易和访问控制规则,从而加快区块链应用的开发过程。值得注意的是,Composer项目已经停止维护,推荐开发者使用Fabric的原生API和工具。
-
EXPLORER:Hyperledger Explorer是一个区块链浏览器,用于可视化和查询Hyperledger Fabric网络的信息。它允许用户查看网络的关键信息,如区块链的结构、产生的区块、交易详情、网络参与者以及智能合约(链码)。这使得监控和审计区块链网络变得更加直观和方便。
-
QUILT:Hyperledger Quilt提供了一种跨区块链和非区块链系统的互操作性方案,通过实现Interledger协议(ILP),允许不同的支付系统之间的安全转账。Quilt的目标是使得各种区块链网络能够互相连接,支持各种货币(包括法定货币和数字货币)之间的无缝转移,促进了不同区块链生态系统之间的价值交换。
2. 什么是Hyperledger Fabric
Hyperledger Fabric是一个开源的企业级权限区块链平台,旨在为各种行业应用提供一个稳定、安全、可扩展的区块链基础设施。作为Hyperledger项目下的一个主要框架,Fabric特别适用于企业级的应用场景,它支持智能合约(在Fabric中称为链码)的执行,并能够处理复杂的业务逻辑。
2.1 主要特点
-
权限化网络:与公有区块链不同,Fabric允许建立一个权限化的网络环境,网络参与者需要身份验证,这有助于满足企业对隐私和安全的需求。
-
模块化和可扩展性:Fabric设计时就考虑到了模块化,各个组件(如共识机制、成员服务、链码等)都可以独立替换,以适应不同的业务需求。
-
链码:链码是运行在Fabric网络上的智能合约,用于编码业务逻辑。链码可以用多种编程语言编写,如Go、Java和Node.js,为应用提供了高度的灵活性。
-
通道:Fabric通过引入“通道”(Channel)的概念,支持在同一个网络中创建私有的子网络,使得不同组织之间可以安全地交换信息,而不被网络上的其他组织所见。
-
共识机制:Fabric采用的是可插拔的共识机制,可以根据业务需求选择适合的共识算法。这种灵活性使得Fabric能够更好地适应不同的应用场景。
-
性能和效率:由于采用了高效的共识机制和优化的交易流程,Fabric能够实现高吞吐量和低延迟的交易处理,满足企业应用的需求。
2.2 应用场景
由于其高度的可定制性和权限化特性,Fabric被广泛应用于各种行业,如金融服务、供应链管理、医疗保健、零售和电子政务等。企业和组织可以利用Fabric搭建自己的区块链解决方案,以实现数据共享、流程自动化、身份验证、供应链可视化等目标。
名词补充:
公有链:是完全开放的区块链网络,任何人都可以参与网络的维护、读取、发送交易并参与到其共识过程中。比特币和以太坊是最著名的公有链例子。公有链的特点是去中心化、透明度高、无需许可。
私有链:是受限的区块链网络,网络的访问和参与权限被一个组织或集体所控制。私有链适用于企业内部应用,其中数据的隐私和控制权是关键考虑因素。私有链提供了更高的交易处理速度和效率,但牺牲了一定程度的去中心化。
联盟链:介于公有链和私有链之间,它由多个组织共同维护。参与其中的每个组织都可以参与到区块链的管理和共识过程中。联盟链适合于多个组织之间需要共享数据但又希望保持一定控制权和隐私的场景。
智能合约:是存储在区块链上的自执行合约,其中条款由代码直接编写。智能合约可以自动执行、控制或文档化相关事件和行为的法律条款。智能合约使得在没有中介的情况下,可信地执行合约成为可能,广泛应用于自动化交易、去中介化应用(DApp)等场景。(个人理解:一个满足条件的回调函数)
3. 关键名词
节点(Node) | 网络中的一个独立计算实体。节点可以承担不同的角色,包括但不限于客户端(提交交易)、背书节点(对交易进行背书)和排序服务(打包交易进区块) |
智能合约(Chaincode) | 在 Hyperledger Fabric 中,智能合约被称为 Chaincode,是运行在区块链网络上的业务逻辑,负责读取或更改账本的状态 |
通道(Channel) | 通道是 Fabric 中实现数据隔离和保密的一种机制,允许一组特定的参与者之间进行私密交易,每个通道都有自己独立的账本。 |
账本(Ledger) | 账本是区块链网络中记录所有事务历史的不可变数据库。在 Fabric 中,账本由区块链(用于记录交易的历史记录)和世界状态(记录当前数据状态的数据库)组成。 |
背书策略(Endorsement Policy) | 定义了交易在被认定为有效之前需要哪些参与者的背书(即认可)。这是一种确保交易一致性和完整性的机制。 |
排序服务(Ordering Service | 排序服务是 Fabric 网络中的一个组件,负责接收所有网络交易,将它们排序形成区块,然后分发给所有通道的参与者。 |
组织(Organization) | Fabric 网络中的参与者,可以代表一个或多个用户。每个组织都可以拥有并操作一个或多个节点,并且可以参与一个或多个通道。 |
对等节点(Peer) | 对等节点是网络中的一个节点,负责持有账本的副本、处理交易、执行链码以及与其他对等节点通信以保持账本数据的一致性。 |
区块(Block) | 区块链中的基本单位,用于记录一定数量的交易。每个新区块都会被添加到链的末端。 |
世界状态(World State) | 记录了账本当前状态的数据库,简化了数据查询和更新的过程。它是对最新的交易结果的快照。 |
MSP(Membership Service Provider) | 成员身份服务提供者,负责在 Fabric 网络中管理用户和节点的身份认证,确保交易参与者的身份和角色得到确认。 |
CA(Certificate Authority) | 证书授权中心,负责发放和管理数字证书,以支持网络中的身份验证和安全通信。 |
背书节点(Endorsing Peer) | 一种特殊的对等节点,负责执行链码(智能合约),验证交易逻辑,并对交易进行背书。 |
提交节点(Committing Peer) | 网络中的节点,负责接收排序服务产生的区块,验证区块内的交易,并将有效交易更新到账本和世界状态中。 |
锚节点(Anchor Peer) | 在使用通道进行通信时,每个组织指定的对等节点,用于跨组织的发现和通信。 |
共识机制(Consensus | 一组规则和过程,网络中的不同节点使用这些规则和过程来验证交易,达成一致,并维护账本的一致性和完整性。 |
配置区块(Configuration Block) | 包含有关网络配置(如策略、成员身份等)的信息的特殊区块。这是通道或系统链的第一个区块。 |
策略(Policy) | 定义了在特定操作(如链码部署或更新账本)期间必须满足的规则和条件。 |
资产(Asset) | 在区块链网络中可以被交易或转移的任何有价值的东西,通常通过智能合约进行管理。 |
4. 通道概念
在Hyperledger Fabric中,通道(Channel)是一个非常重要的概念,它允许网络中的一组特定参与者之间建立一个私有的子网络,实现数据隔离和保密。每个通道代表了一个独立的链,具有自己的账本和智能合约(链码),仅通道内的成员可以访问和交互。
4.1 通道的关键特性如下:
-
隐私保护:通过通道,Fabric能够支持敏感业务操作的隐私需求,因为通道内的交易数据和账本信息仅对通道成员可见。
-
数据隔离:在同一Fabric网络中,可以创建多个通道,每个通道的账本数据互相隔离,确保了数据的安全性和隐私性。
-
灵活性和可扩展性:组织可以根据业务需求加入或创建新的通道,这种灵活的通道管理方式使得网络可以根据实际需要灵活扩展。
-
效率:由于通道将网络参与者和交易范围限定在一个较小的群体内,可以提高交易处理的效率,降低延迟。
4.2 通道的工作机制:
-
创建和加入:网络中的一个或多个组织可以共同创建一个通道,并邀请其他组织加入。加入通道的组织需要在其自己的节点上配置通道,从而成为通道的成员。
-
账本和链码:每个通道有自己独立的账本和链码(智能合约)。通道成员之间的交易只会记录在该通道的账本中,并且只有该通道的成员能够访问和执行链码。
-
隔离与互动:尽管通道提供了数据隔离的功能,但组织仍然可以根据需要跨通道进行交互,例如,一个组织可以同时是多个通道的成员。
节点与通道的有什么关系?
-
隶属关系:节点通过加入通道来参与网络中的特定交易和合约执行。一个节点可以加入多个通道,根据其业务需求与不同的组织进行交互。
-
数据隔离:通道内的交易记录和账本数据仅对该通道的成员节点可见。这种机制使得节点可以在保障数据隔离和隐私的前提下,参与到多个通道中。
-
链码执行:在一个通道中,交易是通过执行链码(智能合约)来进行的。链码执行的结果需要由通道内的背书节点验证并背书。最终,交易结果被提交到所有Peer节点的账本中,但只限于该通道的Peer节点。
-
灵活性和扩展性:通过加入或创建新的通道,节点(尤其是Peer节点)可以灵活地扩展其在网络中的参与度。这为企业提供了一种高度可控的方式来管理其在区块链网络中的数据和业务逻辑。
5. 步骤简单梳理
通过上述一些基础概念的了解,可以大概梳理一下整个流程。以便于掌握个大致体系,然后再慢慢探索补全。(PS:先看基础,个人实际上是边搭建、边看官网文档,边写笔记的。搭建部分可以见专栏)
-
构建区块链网络基础设施:首先,需要设置网络的基础架构,包括排序服务(Orderer服务)和一些初始的Peer节点。这些基础设施组件不特定于任何通道。
-
创建组织:在网络中定义不同的组织。组织是网络中的主要实体,代表了不同的参与者。
-
创建Peer节点:为每个组织创建Peer节点。这些节点将会存储账本数据和执行链码(智能合约)。
-
创建和配置通道:创建通道,并为通道配置参与的组织。通道是一个逻辑结构,使得组织之间可以私密地交换信息。
-
将组织加入到通道中:在通道创建好之后,需要将一个或多个组织加入到通道中。这一步实际上涉及到配置组织的Peer节点,使其成为通道的成员。
-
部署链码到Peer节点:开发链码(智能合约),并将其安装在通道中的一个或多个Peer节点上。链码需要在通道中被实例化,以便在该通道上执行业务逻辑。
-
将Peer节点加入到通道中:虽然在第5步中组织已经加入到通道,但实际上是通过配置组织的Peer节点来实现的。这一步确保了Peer节点能够参与通道中的交易处理和账本维护。
-
交易和链码执行:一旦链码被部署,网络中的参与者(通过客户端应用)就可以发起交易,这些交易将由链码处理,并被记录在通道的账本中。
6. 账本
在Hyperledger Fabric中,账本实际上是存储在Peer节点上的。每个加入到特定通道的Peer节点都会维护该通道的一个账本副本。Fabric采用了分布式账本技术,每个Peer节点都保存有完整的账本副本,包括世界状态和交易历史。这样做的目的是为了确保数据的一致性和可靠性,同时提高网络的容错性。
如何理解世界状态和账本之间的关系?账本又是如何进行更新的?
在Hyperledger Fabric中,账本由两个主要部分组成:世界状态(World State)和交易日志(区块链)。
世界状态与账本的关系
-
世界状态:世界状态是一个数据库(默认情况下是LevelDB或CouchDB),用于存储网络中所有资产的当前状态。它以键值对的形式存储,使得数据的读取效率非常高。世界状态提供了一个快照,反映了最近一次交易后的资产状态。
-
交易日志(区块链):交易日志是账本的不可变部分,记录了从网络创建开始的所有交易历史。它是一个持续增长的记录,每当有新的交易被验证并提交时,这个交易就会被添加到交易日志中。
账本的更新过程
账本的更新遵循以下基本步骤:
-
交易提案:客户端向网络提交一个交易提案,请求执行链码(智能合约)。
-
背书:指定的背书节点执行链码,并对交易结果进行背书(即验证交易并签名)。背书节点在执行链码时会读取世界状态,但此时不会更新世界状态。
-
交易提交:客户端收集必要的背书,将交易发送给排序服务。排序服务将交易打包成区块。
-
区块分发:排序服务向所有Peer节点分发新的区块。
-
交易验证和提交:每个Peer节点验证区块中的每笔交易(检查背书策略是否满足,以及交易的有效性)。验证通过后,Peer节点将这些交易写入交易日志,并根据这些交易更新世界状态。
6.1 个人见解
这里的账本概念,我认为可以用java中的事务来去理解。世界状态可以看成一个数据库,区块链(交易日志)可以看成一个记录日志的。如果交易失败,就发生事务回滚,数据库的值不会更新,但是过程却被交易日志记录了。这也就是:不论交易成功还是失败都可以将日志记录,如果失败则不会更新数据库的值。
7. 链码和智能合约
智能合约可以理解为定义的一个方法或函数,这个方法里面写了一些校验逻辑。一般情况下,简单来说这两个可以认为是一个概念。但是深入理解后,一个链码可以打包部署多个智能合约,然后将这个链码部署到节点上去。如果想看更严谨的说法,就去官方文档吧。
作为一个入门java全栈入门区块链第一天的程序员,先导个人感觉概念到这就差不多了。应用才是王道,看专栏,第二部分,等你部署一遍 ,再回来看一遍概念,基本就通透了许多。