修改点
- 将 通道 改为 频道。频道这个概念更形象,类似区块链上的用户在用对讲机通信,只有在一个频道上的用户,互相才能通信,频道还可以加密,保证频道上的信息的私密性。
- 修改一些细节,更利于阅读
概况的说,区块链是一个由对等节点组成的分布式网络所维护的不可变更的交易账本。这些节点各自维护了这份账本的一个拷贝,用于登记那些通过了一致性协议验证的交易,这些交易又被分组成区块,每个区块还包含了之前一个区块的哈希值。
第一个并且广为人知的区块链应用是数字加密货币比特币,其他应用大多则是跟随它的步伐。以太坊,是另一种数字加密货币,选择了另一种路径,在集成了许多与比特币相同的特性的同时增加了智能合约,为分布式应用创建了一个平台。比特币和以太坊都属于同一类区块链,我们将其归类为无需许可的公有链技术。基本上,这些都是公开的网络,向任何人开放,参与者也是匿名的互动。
随着比特币、以太坊和其他一些衍生技术的普及,人们对将区块链、分布式账本及对应的分布式应用平台等底层技术,应用到更具创新性的企业级案例中的兴趣也与日俱增。然而,许多企业级案例的需求超出了无需许可的区块链技术(目前)所提供的性能和特征。此外,在许多案例中,参与者的身份是一个硬性要求,例如在金融交易中,必须遵守了解客户(KYC,Know-Your-Customer)和反洗钱(AML,Anti-Money Laudering)法规。
对于企业应用,我们需要考虑以下要求:
- 参与者必须被识别或可识别
- 网络需要授权访问
- 交易吞吐量要够高
- 交易确认的延迟要够低
- 要顾及与商业交易有关的交易和数据的隐私性和保密性
虽然许多早期区块链平台目前正在为企业使用而调整,但Hyperledger Fabric则是从一开始就是为企业应用而设计的。以下章节从Hyperledger Fabric (Fabric)与其他区块链平台的区分,并阐述了其架构决策的一些出发点。
Hyperledger Fabric
Hyperledger Fabric是一个开源的企业级的需要许可的分布式账本技术(DLT)平台,设计用于企业环境,它提供了一些与其他流行的分布式账本或区块链平台不同的关键功能。
一个关键的区别是,Hyperledger是在Linux基金会下建立的,Linux基金会通过开放治理进行开源项目的培育有着悠久而非常成功的历史,大量项目在这套机制下已成长为强大的可持续的社区和繁荣的生态。Hyperledger由不同的技术指导委员会管理,Hyperledger Fabric项目由来自多个组织的不同维护人员组成。它拥有一个开发社区,自最早的代码提交以来,已经发展为超过35个组织和近200个开发人员的庞大社区。
Fabric具有高度模块化和可配置的架构,能够应用于银行、金融、保险、医疗保健、人力资源、供应链甚至数字音乐交付等广泛的行业应用的创新、功能丰富及优化。
Fabric是第一个支持用通用编程语言编写的智能合约的分布式账本平台,如Java、Go和Node.js,而不是受限的领域特定语言(DSL)。这意味着大多数企业已经具备了开发智能合约所需的技能,不需要额外的培训来学习新的编程语言或DSL。
Fabric平台也是需要许可的,这意味着,与公共无需许可的网络不同,参与者是彼此认识的,不会因为匿名而完全无法信任。这意味着,虽然参与者可能不完全信任彼此(例如,他们可能是同一行业的竞争对手),但网络可以建立在参与者之间都会存在的信任(例如法律协议或处理争议的框架)基础上治理和运行。
该平台最重要的区别之一是支持可插拔共识协议,使平台能够更有效地定制,以适应特定的用例和信任模型。例如,当部署在一个企业中,或者由一个可信的权威机构操作时,完全拜占庭式的容错共识可能被认为是不必要的,并且会对性能和吞吐量造成过度的拖累。在这种情况下,崩溃容错(crash fault-tolerant)(CFT)共识协议可能已经足够了,而在一个多方、分散的应用中,可能更需要一个更传统的拜占庭式容错(byzantine fault tolerant)(BFT)共识协议。
Fabric可以利用不需要本地加密货币的共识协议,来激励昂贵的采矿或推动智能合约的执行。避免使用加密货币可以减少一些显著的风险/攻击,而没有挖矿操作,意味着部署该平台的操作成本可以与任何其他分布式系统大致相同。
这些与众不同的设计特性的组合,使Fabric成为当今在事务处理和事务确认延迟两方面性能更好的平台之一,它实现了事务和智能合约(Fabric称之为“链码”)的隐私性和机密性。
让我们来看看这些与众不同的特性的细节。
模块化
Hyperledger Fabric经过特别设计,具有模块化的体系结构。无论是可插拔共识、可插拔身份管理协议(如LDAP或OpenID Connect)、密钥管理协议或加密库,该平台的核心在设计中,都支持通过配置以满足企业应用的多样性需求。
总体上来说,Fabric由以下模块化组件构成:
- 可插拔的订购服务建立了对事务顺序的共识,然后向节点广播区块。
- 可插拔的成员资格服务提供商负责将网络中的实体与加密身份关联起来。
- 可选的点对点gossip服务通过向其他节点订购服务来传播区块的输出。
- 智能合约(“链码”)在容器环境(如Docker)中运行以进行隔离。它们可以用标准编程语言编写,但不能直接访问账本状态。
- 账本可以配置为支持多种数据库管理系统。
- 可插拔的认可和验证策略强制,可以为每个应用程序独立配置。
业界一致认为,不存在“一个区块链来统治所有区块链”。可以通过多种方式配置Hyperledger Fabric,以满足各种行业应用的不同解决方案需求。
需要许可的和无需许可的区块链
在无许可的区块链中,几乎任何人都可以参与,而且每个参与者都是匿名的。在这种情况下,除了在一定深度之前区块链的状态是不可变的之外,没有其他信任。为了缓解这种信任缺失,无许可区块链通常使用“开采”的本地加密货币或交易费用,以提供经济激励,以抵消参与基于“工作证明”(PoW)的拜占庭容错共识的特殊成本。
另一方面,需要许可的区块链在一组已知、已识别且通常是经过审查的参与者之间运作,这些参与者在产生一定程度信任的治理模式下运作。需要许可的区块链提供了一种方法来保护具有共同目标但可能不完全信任彼此的一组实体之间的交互。通过依赖参与者的身份,需要许可的区块链可以使用更传统的崩溃容错(CFT)或拜占庭容错(BFT)共识协议,这些协议并不需要代价高昂的挖矿工作。
此外,在这种许可的环境中,参与者通过智能合约故意引入恶意代码的风险被降低了。首先,参与者彼此知晓,所有动作,无论是提交应用程序交易、修改网络配置还是部署智能合约,都会按照为网络和相关交易类型制定的背书政策记录在区块链上。因为不是完全匿名,犯错的一方可以很容易地被识别,并可根据治理模式的条款进行处理。
智能合约
智能合约,或者Fabric所称的“链码”,表现为一个可信的分布式应用程序,它从区块链和节点间的潜在共识中获得安全/信任。这就是一个区块链应用程序的商业逻辑。
智能合约应支持三个要点,特别是在它被应用于平台时:
- 有很多智能合约同时在网络中运行
- 他们可以(在许多情况下,由任何人)动态部署
- 应用程序的代码应该被视为不可信的,甚至是恶意的
大多数现有的智能合约区块链平台遵循排序执行架构,其中共识协议:
- 验证并排序事务,然后将其传播到所有对等节点,
- 然后,每个对等方按顺序执行事务。
排序执行架构几乎可以在所有现有的区块链系统中找到,从公共/无许可的平台,如以太坊 Ethereum(以PoW为基础达成共识)到需要许可的平台,如Tendermint,链 Chain, 和Quorum.
在使用排序执行架构操作的区块链中执行的智能合约必须是确定性的;否则,可能永远无法达成共识。为了解决非确定性问题,许多平台要求智能合约以非标准或特定领域的语言编写(例如[Solidity]https://solidity.readthedocs.io/en/v0.4.23/))这样就可以消除非确定性操作。这阻碍了广泛采用,因为它需要开发人员学习一种新语言来编写智能合约,并可能导致编程错误。
此外,由于所有事务都由所有节点按顺序执行,所以性能和规模会受到限制。智能合约代码在系统中的每个节点上执行这一事实,要求采取复杂的措施来保护整个系统不受潜在恶意合约的影响,以确保整个系统的弹性。
新的尝试
Fabric为事务引入了一种新的架构,我们称之为执行顺序验证。它通过将事务流分为三个步骤来解决order-execute模型面临的弹性、灵活性、可伸缩性、性能和机密性挑战:
- 执行交易并检查其正确性,从而认可交易,
- 通过(可插拔的)共识协议确保顺序交易
- 在提交这些交易到账本之前,根据该应用程序定义的背书策略验证这些交易
这种设计从根本上背离了order-execute范式,Fabric选择了在对交易的顺序达成最终一致之前就执行交易。
在Fabric中,一个应用程序定义的背书策略定义了确保一个确定的智能合约正确执行的节点数量。因此,每个交易只需要被满足交易背书策略的对等节点的子集执行(背书)。这就允许通过并行执行提升整个系统的性能和规模。第一阶段也消除了任何不确定性,因为不一致的结果可以在排序之前过滤掉。
因为我们消除了不确定性,Fabric成为第一个能够使用标准编程语言的区块链技术。
隐私和保密
正如我们所讨论的,在一个公共的、无许可的采用工作量证明共识机制的区块链网络中,交易在每个节点上执行。这意味着既不能对合同本身保密,也不能对其处理的交易数据保密。每笔交易以及实现它的代码对网络中的每个节点都可见。这里,我们在用损失合同和数据的保密性来换取工作量证明所提供的拜占庭容错共识。
对于许多业务/企业案例来说,这种保密性的缺乏会存在问题。例如,在一个供应链合作伙伴的网络中,一些消费者可能会得到更优惠的价格,作为巩固关系或促进额外销售的手段。如果每个参与者都能看到每一份合同和交易,那么在一个完全透明的网络中维持这样的业务关系就变得不可能了——每个人都会想要优惠的价格!
再举个例子,在证券行业,一个交易者的建仓(或清仓)并不想让她的竞争对手知道,否则他们就会试图参与,会削弱交易者的优势。
为了解决在满足企业需求方面缺乏隐私和保密性的问题,区块链平台采用了多种方法。当然都有自己的权衡。
加密数据是提供机密性的一种方法;然而,在一个利用工作量证明作为共识的无许可的网络中,加密数据位于每个节点上。如果有足够的时间和计算资源,加密可能会被破坏。对于许多企业案例,其信息可能被泄露的风险是不可接受的。
零知识证明(ZKP)是另一个正在探索的解决这个问题的研究领域,这里的权衡是,目前,计算ZKP需要相当多的时间和计算资源。因此,在这种情况下,权衡的是提供保密性的性能。
在需要许可的可选择其他形式的共识机制的环境中,人们可能会探索将保密信息只分发给被授权的节点。
Hyperledger Fabric,作为一个需要许可的平台,通过频道(channel)架构实现了保密和私有数据的特性。通过频道,Fabric网络的参与者可以建立一个子网,使得其中的每个成员都可以看到一组特定的交易。因此,只有参与到一个频道中的节点能访问智能合约(chaincode)并处理数据,这就保证了两者的隐私性和机密性。私有数据允许在一个频道上的成员之间进行收集,这样就可以实现与频道相同的保护,而无需创建和维护单独频道的维护开销。
可拔插共识
交易的顺序被交给一个负责共识的模块化组件,其从逻辑上就与负责执行交易和维护账本的组件实现了分离。尤其是顺序服务。由于共识是模块化的,它就可以根据特定的部署或解决方案,定制其信任假设的实现。同样的,这种模块化的架构允许平台依赖于成熟的工具包来进行CFT(崩溃容错)或BFT(拜占庭容错)排序。
Fabric 目前提供了一个基于[etcd
库]的CFT顺序服务实现(https://coreos.com/etcd/)Raft protocol. 有关当前可用的顺序服务的信息,请查看我们的关于订购的概念性文档.
还请注意,这些并不是相互排斥的。一个Fabric网络可以有多个顺序服务来支持不同的应用程序或应用程序需求。
性能和可扩展性
区块链平台的性能会受到许多变量的影响,如交易规模、区块规模、网络规模以及硬件的限制,Hyperledger Fabric性能和扩展工作组目前正在研究一个名为Hyperledger Caliper的基准测试框架。
已经公开发表过多篇关于Hyperledger Fabric的性能研究和测试的研究论文。最新的是将Fabric扩展到每秒20000个事务.
结论
任何对区块链平台的认真评估都应将Hyperledger Fabric纳入其短名单中。
综上所述,Fabric的差异化功能使其成为需要许可的区块链的高度可扩展系统,支持灵活的信任假设,使平台能够支持从政府、金融、供应链物流到医疗保健等各种行业的应用。
Hyperledger Fabric是最活跃的Hyperledger项目。相关社区正在稳步成长,每一次持续发布带来的创新远远超过任何其他企业区块链平台。
致谢
上述内容来自同行评审
"Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains" - Elli Androulaki, Artem
Barger, Vita Bortnikov, Christian Cachin, Konstantinos Christidis, Angelo De
Caro, David Enyeart, Christopher Ferris, Gennady Laventman, Yacov Manevich,
Srinivasan Muralidharan, Chet Murthy, Binh Nguyen, Manish Sethi, Gari Singh,
Keith Smith, Alessandro Sorniotti, Chrysoula Stathakopoulou, Marko Vukolic,
Sharon Weed Cocco, Jason Yellick