本系列文章来自官方文档翻译,记录在此,希望能够为大家学习 Fabric 提供一点点参考。
Hyperledger Fabric 是一个开放源代码的企业级许可分布式分类帐技术(DLT)平台,设计用于企业环境。那 Fabric 与其他流行的分布式账本或区块链平台相比,它存在的必要在哪里呢。
Hyperledger 是在Linux基金会下建立的,Linux
本身有着悠久而非常成功的历史,即在开放式治理下培育开放源代码项目,这些项目可以发展强大的可持续社区和繁荣的生态系统。Hyperledger
由多元化的技术指导委员会管理,Hyperledger Fabric
项目由来自多个组织的多元化维护人员管理。自最早成立以来,它的开发社区已发展到超过35个组织和近200个开发人员。
Fabric具有高度模块化和可配置的体系结构,可针对银行,金融,保险,医疗保健,人力资源,供应链甚至数字音乐交付等广泛的行业用例进行创新,多功能和优化。
Fabric 是第一个支持以通用编程语言(例如Java,Go和Node.js)而非受约束的领域特定语言(DSL)编写的智能合约编写的分布式账本平台。这意味着大多数企业已经具有开发智能合约所需的技能,并且不需要其他培训来学习新的语言或DSL。
Fabric 平台是经过许可(Permissioned)的,这意味着与 Permissionless 网络不同,它的参与者是彼此认识的,而不是匿名的,因此不是完全不受信任的。这意味着,尽管参与者之间可能不会完全信任对方(例如,他们可能是同一行业的竞争者),但网络可以在治理模型(
governance model )下运行,该治理模型是基于参与者之间确实存在的信任而建立的,例如处理争议的法律协议或框架。
平台最重要的一点是它对可插拔共识协议的支持,该协议使平台可以更有效地进行定制,以适应特定的场合和信任模型。例如,当部署在单个企业中或由受信任的机构运营时,完全拜占庭式的容错共识可能被认为是不必要的,因为它会严重拖累性能和吞吐量。在这种情况下,
崩溃容错(CFT)共识协议可能绰绰有余,而在多方,分散的场合中, 可能需要更传统的拜占庭容错(BFT)共识协议。
Fabric 可以利用不需要带加密货币的共识协议来激励或推动智能合约的执行。避免使用加密货币会降低一些重大的风险/攻击向量,并且无需进行加密挖掘操作就意味着可以以与任何其他分布式系统大致相同的运营成本来部署
Fabric。
这些差异化设计功能的结合使 Fabric 在交易处理和交易确认延迟方面成为当今性能最好的平台之一,并实现了交易和实现交易的智能合约( Fabric 称为“链码”)的隐私性和机密性( privacy and confidentiality )。
让我们详细地探讨这些差异化的功能。
Hyperledger Fabric 专门设计为具有模块化体系结构。无论是可插拔共识,可插拔身份管理协议(例如LDAP或OpenID Connect),密钥管理协议还是密码库,Fabric 的核心都经过配置,以满足企业用例需求的多样性。
abric由以下模块化组件组成:
没有“一个区块链平台可以统治任何场景”。而 Hyperledger Fabric 通过模块化配置,以更可能多地满足多种行业场景的不同解决方案要求。
在无许可( permissionless )的区块链中,几乎任何人都可以参与,每个参与者都是匿名的。在这种情况下,除了区块链在一定深度之前 (比如比特币的6个确认) 的状态被认为不可变的之外,别无其他信任。为了减轻这种信任的缺乏,无许可链通常采用“开采的”,加密货币或交易费来提供经济激励,以抵消基于“工作证明”(PoW)共识的形式参与的特殊费用。
另一方面,许可链应用在一批经过身份认证,且经常需要审核的参与者之间(在有一定程度的信任的治理模型下运行)。许可链提供了一种方法来保护一组具有共同目标但可能不会完全相互信任的实体之间的交互。通过依赖参与者的身份,许可链可以使用更传统的崩溃容错(CFT)或拜占庭容错(BFT)共识协议,这些协议不需要昂贵的挖掘。
另外,在这种许可的情况下,参与者通过智能合约有意引入恶意代码的风险得以降低。首先,参与者是相互了解的,并且遵循针对网络和相关交易类型建立的认可政策,所有活动(无论是提交应用程序交易,修改网络配置还是部署智能合约)都记录在区块链上。与无许可链的完全匿名相反,许可链可以根据治理模型的条款轻松地确定有罪的一方并进行处理。
智能合约或 Fabric称之为“链码”,是一种受信任的分布式应用程序,它从区块链网络和底层的节点之间的共识中获得安全性/信任。它是区块链应用程序的业务逻辑。
适用于智能合约的三个要点,尤其是应用于平台时:
现有的大多数具有智能合约功能的区块链平台都遵循一种 排序—执行 架构( order-execute ),其中共识协议为:
排序—执行 架构可以在几乎所有现有的区块链系统中找到,从以太坊等公共/无许可平台 (基于PoW的共识)到Tendermint, Chain和Quorum等获许可的平台。
在以排序—执行 架构运行的区块链中执行的智能合约必须具有确定性。否则,可能永远无法达成共识。为了解决非确定性问题,许多平台都要求以非标准的或领域特定的语言(例如Solidity)编写智能合约,以便消除非确定性操作。这阻碍了广泛采用,因为它要求开发人员编写智能合约来学习一种新语言,并可能导致编程错误。
此外,由于所有事务均由所有节点顺序执行,因此性能和规模受到限制。智能合约代码在系统中的每个节点上执行就导致要采取复杂的措施来保护整个系统免受潜在的恶意合约的侵害,以确保整个系统的弹性。
Fabric 为交易引入了一种新的架构,我们称之为 execute-order-validate。它通过将事务流分为三个步骤来解决order-execute 架构所面临的弹性,灵活性,可伸缩性,性能和机密性挑战:
该设计与 order-execute 架构完全不同,Fabric 不会在达成一致之前执行交易。
在Fabric中,每个应用程序特定的认可策略指定了需要哪些节点,去保证给定智能合约能正确执行。因此,每个交易只需要由满足交易认可策略所必需的节点的执行(背书)。这允许并行执行,从而提高了系统的整体性能和规模。第一阶段还消除了任何不确定性,因为不一致的结果可以在排序前滤除。
因为消除了不确定性,所以Fabric是第一个启用标准编程语言使用的区块链技术。
正如前面已经讨论的那样,在一个利用 PoW 作为共识模型的公共,无许可链中,交易在每个节点上执行。这意味着合约本身或所处理的交易数据都不会保密。每个交易及其实现的代码对于网络中的每个节点都是可见的。在这种情况下,我们在合约和数据的机密性,PoW 提供的拜占庭容错共识间选择了前者。
对于许多业务/企业场合而言,缺乏机密性可能会成为问题。例如,在供应链合作伙伴网络中,可能会为某些消费者提供优惠价格,以巩固关系或促进额外销售。如果每个参与者都能看到每份合同和交易,那么就不可能在完全透明的网络中维持这样的业务关系—每个人都希望获得首选价格!
再举一个例子,考虑证券行业,在该行业中,建立仓位(或出售仓位)的交易者不希望竞争对手知道这一点,否则他们将寻求介入游戏,削弱了交易者的竞争能力。
为了解决出于满足企业用例需求的目的而缺乏隐私和机密性的问题,区块链平台采用了多种方法。所有平台都有其取舍。
加密数据是提供机密性的一种方法。但是,在利用 PoW 达成共识的无许可网络中,加密数据位于每个节点上。如果有足够的时间和计算资源,则可能会破坏加密。对于许多企业用例而言,其信息可能遭到破坏的风险是无法接受的。
零知识证明(ZKP)是为解决此问题而正在探索的另一个研究领域,这里的权衡是,目前计算 ZKP 需要大量时间和计算资源。
在许可链中,人们可能会探索将机密信息仅分配给授权节点的方法。
Hyperledger Fabric 是许可链平台,它通过其通道(Channel)体系结构和私有数据(private data
)功能来实现机密性。在通道中,Fabric 网络上的参与者相当于建立了一个子网,每个成员都可以查看特定的一组交易。因此,只有那些参与通道的节点才能访问通道智能合约(链码)和交易的数据,从而保留了两者的隐私和机密性。私有数据允许在通道上的成员之间进行收集,从而在不增加创建和维护单独通道的维护开销的情况下,提供与通道相同的保护。
交易的顺序被委托给模块化组件以达成共识,该组件在逻辑上与执行交易并维护账本的节点分离。具体来说就是排序服务。由于共识是模块化的,因此可以根据特定部署或解决方案的信任假设量身定制其实现。这种模块化架构允许平台依赖完善的工具包来进行CFT(崩溃容错)或BFT(拜占庭容错)排序。
Fabric 目前提供基于 etcd 库中的 raft 协议实现 CFT 排序服务。有关当前可用排序服务的信息,请查看有关该文档
。
还要注意,排序服务不是互斥的。Fabric 网络可以具有支持不同应用程序或应用程序需求的多种排序服务。
区块链平台的性能可能会受到许多变量的影响,例如交易规模,区块规模,网络规模以及硬件限制等。Hyperledger Fabric Performance and Scale工作组 目前在一个称为 Hyperledger Caliper 的基准测试框架上工作。并且已经发表了几篇研究和测试 Hyperledger Fabric 性能的研究论文。最新的 Fabric 可扩展到每秒20,000个交易。
这就是 Hyperledger Fabric 的完整的简短介绍。
结合起来,Fabric的差异化功能使其成为一个高度可扩展的系统,用于许可的链,支持灵活的信任假设,使该平台能够支持从政府,金融,供应链物流,医疗保健等广泛的行业场景。
[1]. 官方文档