Introduction

一般来说,区块链是一个不可变的交易账本,在peer节点的分布式网络中维护。这些节点各自通过应用已由共识协议验证的交易来维护账本的副本,这些交易被分组为区块,区块包含着将每个区块绑定到前一个区块的哈希。

区块链的第一个、也是得到最广泛认可的应用是比特币加密货币,不过其他应用程序也纷纷效仿。以太坊是另一种加密货币,它采用了不同的方法,集成了许多与比特币相同的特性,但添加了智能合约,为分布式应用程序创建了一个平台。比特币和以太坊属于区块链,我们将其归类为公共许可的区块链技术。基本上,这些是公共网络,对任何人开放,参与者匿名互动。

随着比特币、以太坊的普及,一些其它衍生技术的成长,人们对将区块链、分布式账本和分布式应用平台的底层技术应用于更具创新性的企业用例的兴趣也在增长。然而,许多企业用例需要性能特性,而无许可的区块链技术(目前)无法提供这些特性。此外,在许多用例中,验证参与者的身份是一个硬性需求,例如在必须遵循了解客户(KYC)和反洗钱(AML)规则的金融交易中。

对于企业使用,我们需要考虑以下要求:

  • Participants must be identified/identifiable

  • Networks need to be permissioned

  • High transaction throughput performance

  • Low latency of transaction confirmation

  • Privacy and confidentiality of transactions and data pertaining to business transactions

虽然许多早期的区块链平台目前正在适应企业使用,但超级账本Fabric从一开始就为企业使用而设计。下面的部分描述了超级账本Fabric (Fabric)如何将自己与其他区块链平台区别开来,并描述了其架构决策的一些动机。

Hyperledger Fabric

超级账本Fabric是一个开源的企业级许可分布式账本技术(DLT)平台,设计用于企业上下文中,它提供了一些与其他流行的分布式账本或区块链平台相区别的关键功能。

一个关键区别是超级账本是在Linux基金会的基础上建立的,而Linux基金会本身也有很长一段非常成功的历史,在开放管理下培育开源项目,发展强大的可持续社区和繁荣的生态系统。超级账本由一个多样化的技术指导委员会管理,而超级账本Fabric项目则由来自多个组织的一组不同的维护者管理。它有一个开发社区,自其最早提交以来已经发展到超过35个组织和近200个开发人员。

Fabric具有高度模块化和可配置的架构,能够为广泛的行业用例(包括银行、金融、保险、医疗、人力资源、供应链,甚至数字音乐交付)提供创新、多功能性和优化。

Fabric是第一个支持用Java、Go和Node.js等通用编程语言编写智能合约的分布式账本平台。而不是受限制的领域特定语言(DSL)。这意味着大多数企业已经具备了开发智能合约所需的技能,并且不需要额外的培训来学习一门新语言或DSL。

Fabric平台也是许可的,这意味着与公共无许可的网络不同,参与者彼此是相识的,而不是因匿名而完全互不信任。这意味着尽管参与者可能无法完全相互信任(例如,他们可能是同一行业的竞争对手),网络可以在基于参与者之间信任的治理模型下运行,就如法律协议或框架来处理纠纷。

该平台最重要的区别之一是它支持可插入的共识协议,这些协议使平台能够更有效地定制,以适应特定的用例和信任模型。例如,当部署在单个企业中,或者由可信的权威机构操作时,完全拜占庭式的容错共识可能被认为是不必要的,并且会对性能和吞吐量造成过度的拖累。在这种情况下,一个崩溃容错(CFT)共识协议可能就足够了,而在多参与方、去中心的用例中,可能需要一个更传统的拜占庭容错(BFT)共识协议。

Fabric可以利用的共识协议不需要象原生加密货币那样激励高成本挖矿激励或促进智能契约执行。避免使用加密货币可以减少一些重要的风险/攻击方向,而没有加密挖矿操作意味着平台部署后,其运行成本与任何其他分布式系统大致相同。

这些不同的设计特性的组合使得Fabric成为当今性能更好的平台之一,无论是在交易处理还是交易确认延迟方面都是如此,而且它还支持交易和实现交易的智能合约(Fabric叫“链码”)的隐私和机密性。

让我们更详细地探讨这些不同的特性。

Modularity

超级账本Fabric被特别设计成具有模块化架构。无论它是可插入的共识协议、可插入的身份管理协议(如LDAP或OpenID连接)、密钥管理协议还是加密库,该平台的核心都被设计为可配置以满足企业用例需求的多样性。

在高层,Fabric由以下模块组件组成:

  • A pluggable ordering service establishes consensus on the order of transactions and then broadcasts blocks to peers.

  • A pluggable membership service provider is responsible for associating entities in the network with cryptographic identities.

  • An optional peer-to-peer gossip service disseminates the blocks output by ordering service to other peers.

  • Smart contracts (“chaincode”) run within a container environment (e.g. Docker) for isolation. They can be written in standard programming languages but do not have direct access to the ledger state.

  • The ledger can be configured to support a variety of DBMSs.

  • A pluggable endorsement and validation policy enforcement that can be independently configured per application.

业内有一个公平的认识,即没有“一个区块链来统治所有人”。可以以多种方式配置超级账本Fabric,以满足多个行业用例的不同解决方案需求。

Permissioned vs Permissionless Blockchains

在一个无许可的区块链中,几乎任何人都可以参与,而且每个参与者都是匿名的。在这样的上下文中,除了区块链在一定深度之前的状态是不可变的之外,不能有其他信任。为了缓解这种信任缺失,无许可区块链通常采用原生加密货币“挖矿”或交易费来提供经济激励,以抵消参与基于“工作证明”(PoW)的拜占庭容错共识的巨大成本。

另一方面,许可区块链在一组已知的、验证的和经常被审查的参与者中运行区块链,这些参与者在产生一定程度信任的治理模型下运行。许可区块链提供了一种方法来保护一组实体之间的交互,这些实体有一个共同的目标,但是它们之间可能并不完全信任彼此。通过依赖参与者的身份,许可区块链可以使用更传统的容错崩溃协议(CFT)或拜占庭容错协议(BFT),这些协议不需要昂贵的挖矿。

此外,在这种一个许可上下文中,参与者通过智能合约故意引入恶意代码的风险降低了。首先,参与者彼此都是已知的,并且所有的操作,无论是提交应用程序交易、修改网络配置还是部署智能合约,都按照针对网络和相关交易类型建立的背书策略记录在区块链上。而不是完全匿名,犯罪方很容易识别,以及按照治理模型的条款处理事件。

Smart Contracts

一个智能合约,或者Fabric所称的“链码”,作为一个受信任的分布式应用程序,从区块链和peer之间的底层共识中获得安全/信任。它是区块链应用程序的业务逻辑。

有三个要点适用于智能合约,尤其是应用于平台时: 许多智能合约在网络中同时运行, 它们可以动态部署(在许多情况下,任何人都可以),并且 应用程序代码应该被视为不可信的,甚至可能是恶意的。

  • many smart contracts run concurrently in the network,

  • they may be deployed dynamically (in many cases by anyone), and

  • application code should be treated as untrusted, potentially even malicious.

大多数现有的支持智能合约的区块链平台遵循一个顺序执行架构,其中的共识协议: - 验证和排序交易,然后将它们传播到所有peer节点, - 然后,每个peer按顺序执行交易。

  • validates and orders transactions then propagates them to all peer nodes,

  • each peer then executes the transactions sequentially.

排序执行架构几乎可以在所有现有的区块链系统中找到,从公共/无许可平台如以太坊(基于PoW共识)到许可平台如Tendermint、Chain和Quorum。

在使用排序执行架构的区块链中执行的智能合约必须是确定性的;否则,可能永远无法达成共识。为了解决非确定性问题,许多平台要求智能合约使用非标准或特定于领域的语言(如Solidity)编写,以便消除非确定性操作。这阻碍了广泛采用,因为它要求编写智能合约的开发人员学习一种新语言,并可能导致编程错误。

此外,由于所有交易都由所有节点按顺序执行,因此性能和规模受到限制。智能合约代码在系统中的每个节点上执行,这一事实要求采取复杂的措施来保护整个系统免受潜在恶意合约的攻击,以确保整个系统的弹性。

A New Approach

Fabric为交易引入了一种新的架构,我们称之为execute-order-validate。它通过将交易流程分成三个步骤来解决order-execute模型所面临的弹性、灵活性、可伸缩性、性能和保密性方面的挑战: - 执行交易并检查其正确性,从而为它背书, - 通过一个(可插入的)共识协议对交易排序,并且 - 在将交易提交到账本之前,根据特定于应用程序的背书策略验证交易

  • execute a transaction and check its correctness, thereby endorsing it,

  • order transactions via a (pluggable) consensus protocol, and

  • validate transactions against an application-specific endorsement policy before committing them to the ledger

这种设计与Fabric中的order-execute范例截然不同,后者在就顺序达成最终协议之前执行交易。

在Fabric中,特定于应用程序的背书策略指定需要哪些peer节点,或者需要多少节点来保证正确执行给定的智能合约。因此,每个交易只需要由满足交易的背书策略所需的peer节点子集执行(背书)。这允许并行执行,从而提高系统的总体性能和规模。第一个阶段还消除了任何非确定性,因为可以在排序之前过滤掉不一致的结果。

因为我们消除了非确定性,Fabric是第一个支持使用标准编程语言的区块链技术。在1.1.0版本中,可以用Go或Node.js编写智能合约,同时计划在后续版本中支持其他流行语言,包括Java。

Privacy and Confidentiality

正如我们已经讨论过的,在一个公共的、无许可的区块链网络中,交易在每个节点上执行。这意味着既不能对合约本身保密,也不能对它们处理的交易数据保密。每个交易及其实现代码对网络中的每个节点都是可见的。在这种情况下,我们用合约和数据的保密性代替了PoW提供的拜占庭容错共识。

对于许多业务/企业用例来说,这种保密性的缺乏可能会带来问题。例如,在供应链合作伙伴网络中,一些消费者可能会获得优惠价格(作为巩固关系或促进额外销售的一种手段)。如果每个参与者都能看到每个合约和交易,那么在一个完全透明的网络中维护这样的业务关系就不可能了——每个人都想要优惠价格!

第二个例子是证券业,建立头寸(或卖出头寸)的交易员不希望自己的竞争对手知道这一点,否则他们会试图参与进来,削弱交易员的策略。

为了解决在交付企业用例需求时缺乏隐私和机密性的问题,区块链平台采用了多种方法。他们都有自己的权衡。

加密数据是提供机密性的一种方法;然而,在一个利用PoW达成共识的无许可网络中,加密的数据位于每个节点上。只要有足够的时间和计算资源,密文就可以被破解。对于许多企业用例来说,他们的信息可能被泄露的风险是不可接受的。

零知识证明(ZKP)是另一个研究领域,正在探索解决这个问题,这里的权衡是,目前,计算一个ZKP需要相当多的时间和计算资源。因此,在这种情况下,为了保密性牺牲了性能。

在可以利用其他共识形式的许可上下文中,可以探讨将机密信息的分发限制在仅授权节点上的方法。

超级账本Fabric是一个许可平台,它通过其通道架构实现了保密性。基本上,Fabric网络上的参与者可以在部分参与者之间建立一个“通道”,该授权通道可以看到特定交易集合。可以将其想象成覆盖网络。因此,只有那些参与通道的节点才能访智能合约(链码)和交易的数据,从而保护隐私和机密性。

为了提高其隐私性和保密性,Fabric增加了对私有数据的支持,并且正在开发将来可用的零知识证明(zero knowledge proof, ZKP)。更多关于这一点,因为它变得可用。

Pluggable Consensus

交易的排序被委托给一个模块化共识组件,以便在逻辑上与执行交易和维护账本的peer解耦。具体来说,是排序服务。由于共识是模块化的,因此其实现可以根据特定部署或解决方案的信任假设进行定制。这种模块化的架构允许平台依赖于成熟的CFT(崩溃容错)或BFT(拜占庭容错)排序工具包。

Fabric目前提供两种CFT排序服务实现。第一种是基于Raft协议的etcd库。另一个是Kafka(内部使用Zookeeper)。有关当前可用的排序服务的信息,请参阅我们关于排序的概念文档。

还请注意,这些并不相互排斥。Fabric网络可以有多个排序服务,支持不同的应用程序或应用程序需求。

Performance and Scalability

区块链平台的性能受许多变量的影响,如交易大小、区块大小、网络大小以及硬件的限制等。超级账本社区目前正在Performance and Scale工作组内开发一套度量标准草案,以及一个名为超级账本Caliper的基准框架的相应实现。

虽然这项工作还在继续开发中,并且应该被看作是对区块链平台性能和规模特性的确定度量,但是IBM Research的一个团队已经发表了一篇同行评审的论文,对超级账本Fabric的架构和性能进行了评估。本文对Fabric的架构进行了深入的讨论,然后使用超级账本Fabric v1.1的初步版本报告了团队对该平台的性能评估。

研究团队所做的基准测试工作为Fabric v1.1.0版本带来了大量性能改进,使平台的总体性能比v1.0.0版本提高了一倍多。

Conclusion

任何对区块链平台的认真评估都应该在其短列表中包括超级账本Fabric。

综合而言,Fabric的差异化功能使其成为一个高度可伸缩的系统,可用于许可区块链,支持灵活的信任假设,从而使该平台支持广泛的行业用例,从政府、到金融、到供应链物流、到医疗保健等等。

更重要的是,超级账本Fabric是(当前)十个超级账本项目中最活跃的一个。围绕该平台的社区建设正在稳步增长,每一个连续发布的创新都远远超过其他任何企业区块链平台。

Acknowledgement

前文出自可限定全文”超级账本Fabric:一个对于许可区块链的分布式操作系统”——- 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