超级账本概述
区块链的第一个也是最被广泛认可的应用是比特币,另一种加密货币以太坊采取了不同的方法,它集成了许多与比特币相同的特征,添加了智能合约来创建分布式应用程序的平台。比特币和以太坊属于区块链,我们将其归类为无公开许可的区块链技术。基本上,这些都是对任何人开放的公共网络,参与者可以匿名互动。
随着比特币、以太坊和其他一些衍生技术的普及,将区块链的底层技术、分布式账本和分布式应用平台应用到更具创新性的企业用例的兴趣也在增长。然而,许多企业用例需要无许可区块链技术(目前)无法提供的性能特征。此外,在许多用例中,参与者的身份是一个困难的要求。
对于企业使用,我们需要考虑以下要求:
- 参与者必须被识别
- 网络需要被许可
- 高事务吞吐量性能
- 低事务确认延迟
- 交易和与商业交易有关的数据的隐私和机密性
- Fabric是第一个支持用Java、Go和Node等通用编程语言编写的智能合约的分布式账本平台。而不是受限的领域特定语言(DSL)。
- Fabric平台也是允许的,这意味着,与公共的无许可网络不同,参与者彼此是已知的,而不是匿名,匿名将导致完全不可信。
该平台最重要的区别之一是它对可插入共识协议的支持,该协议使平台能够更有效地进行定制,以适应特定的用例和信任模型。例如,当在单个企业中部署或由受信任的权威机构操作时,完全拜占庭式容错共识可能被认为是不必要的,并且会过度拖慢性能和吞吐量。在这样的情况下,一个崩溃容错(CFT)共识协议可能就足够了,然而,在一个多方、分散的用例中,可能需要一个更传统的拜占庭容错(BFT)共识协议。
模块化
在高层次上,Fabric由以下模块化组件组成:
- 可插入的ordering service就事务的顺序建立共识,然后向peers广播。
- 可插入 的membership service provider 负责将网络中的实体与加密身份关联起来。
- 可选的peer-to-peer gossip service通过ordering service向其他peers来传播块输出。
- 智能合约(“chaincode”)运行在容器环境(例如Docker)中以实现隔离。它们可以用标准编程语言编写,但不能直接访问分类账状态。
- 该ledger可以配置为支持各种DBMSs.
- 可插入的endorsement and validation policy ,每个应用程序都可以独立配置。
许可与非许可的区块链
在无许可的区块链中,几乎任何人都可以参与,而且每个参与者都是匿名的。在这样的环境中,除了区块链在一定深度之前的状态是不可变之外,不存在其他信任。
另一方面,受许可的区块链在一组已知、识别和经常审查的参与者之间运行区块链,这些参与者在产生一定程度的信任的治理模型下运行。经过许可的区块链提供了一种方法来保护一组具有共同目标但可能彼此不完全信任的实体之间的交互。通过依赖参与者的身份,一个被许可的区块链可以使用更传统的崩溃容错(CFT)或拜占庭容错(BFT)共识协议,不需要代价高昂的挖掘。
此外,在这种允许的上下文中,参与者通过智能合约故意引入恶意代码的风险也降低了。首先,参与者彼此都是已知的,所有的行为,无论是提交应用程序事务、修改网络配置还是部署智能合约,都根据为网络和相关事务类型建立的背书策略记录在区块链上。与完全匿名不同,犯罪的一方可以很容易地确定,并根据治理模型的条款处理事件。
智能合约
智能合约,或Fabric所称的“链代码”,作为一个受信任的分布式应用程序,它从区块链和底层对等体之间的共识中获得安全性/信任。它是区块链应用程序的业务逻辑。
应用于智能合约,尤其是应用于平台时,有三个关键点:
- 许多智能合约在网络中同时运行,
- 它们可以动态部署(在许多情况下由任何人)
- 应用程序代码应该被视为不可信的,甚至可能是恶意的。
其他区块链技术的不足
大多数现有的支持智能合约的区块链平台都遵循一个order-execute架构,其*识协议:
- validates and orders transactions,然后将它们传播到所有peer nodes。
- 然后,每个对等点依次执行事务。
The order-execute architecture几乎可以在所有现有的区块链系统中找到,从公共/无许可平台(如以太坊(基于pow的共识))到许可平台(如Tendermint、Chain和Quorum)。
在区块链架构下执行的智能合约必须是确定性的;否则,可能永远无法达成共识。就引入一门新的语言,而且,由于所有事务都是由所有节点顺序执行的,因此性能和规模受到限制。由于智能合约代码在系统中的每个节点上执行,因此需要采取复杂的措施来保护整个系统免受潜在的恶意合约的攻击,以确保整个系统的弹性。
Fabric的创新点
Fabric为事务引入了一个新的架构,我们称之为执行-订单-验证。它通过将事务流分离为三个步骤,解决了订单执行模型所面临的弹性、灵活性、可伸缩性、性能和机密性挑战:
- 执行一个事务并检查它的正确性,从而认可它,
- 通过(可插拔的)共识协议order事务在将事务提交到分类账之前,根据特定于应用程序的背书策略验证事务
这种设计从根本上背离了订单执行范式,因为Fabric会在就其订单达成最终协议之前执行事务。
在Fabric中,特定于应用程序的认可策略指定了哪些对等节点(或它们中的多少个节点)需要验证给定智能合约的正确执行。因此,每个事务只需要由满足事务背书策略所需的对等节点子集执行(背书)。这允许并行执行,从而提高系统的整体性能和规模。第一个阶段还消除了任何不确定性,因为不一致的结果可以在排序之前过滤掉。
因为我们已经消除了非确定性,Fabric是第一个支持使用标准编程语言的区块链技术。
隐私和保密
正如我们所讨论的,在一个公共的、无权限的区块链网络中,事务在每个节点上执行,该网络利用PoW实现其共识模型。这意味着既不存在契约本身的机密性,也不存在它们处理的事务数据的机密性。每个事务以及实现它的代码对网络中的每个节点都是可见的。
对于许多业务/企业用例来说,这种机密性的缺乏可能是一个问题。例如,在一个供应链合作伙伴网络中,一些消费者可能会被给予优惠价格,作为巩固关系或促进额外销售的手段。如果每个参与者都能看到每一份合同和交易,就不可能在一个完全透明的网络中维持这样的商业关系——每个人都想要优惠的价格!
为了解决在交付企业用例需求时缺乏私密性和保密性的问题,区块链平台采用了多种方法。它们都有各自的利弊。
加密数据是提供机密性的一种方法;然而,在一个利用PoW达成共识的无许可网络中,加密数据存在于每个节点上。只要有足够的时间和计算资源,加密就可能被破解。对于许多企业用例来说,他们的信息可能被破坏的风险是不可接受的。
零知识证明(ZKP)是为解决这个问题而探索的另一个研究领域,这里的权衡是,目前计算一个ZKP需要相当多的时间和计算资源。因此,在这种情况下,要权衡的是保密性能。
在许可环境中可以探索将机密信息只分发给授权节点的方法。
Hyperledger Fabric是一个经过许可的平台,通过其通道架构和私有数据特性实现了机密性。在通道中,Fabric网络上的参与者建立一个子网,其中每个成员都可以看到一组特定的事务。因此,只有那些参与通道的节点才能访问智能合约(chaincode)和被处理的数据,从而保护两者的隐私和机密性。私有数据允许在通道上的成员之间进行集合,允许提供与通道相同的保护,而无需创建和维护单独通道的维护开销。
可插拔的共识
事务的顺序被委托给一个模块化组件,以达成共识,该组件在逻辑上与执行事务和维护分类账的对等组件解耦。具体来说,就是 ordering service。由于共识是模块化的,它的实现可以根据特定部署或解决方案的信任假设进行调整。这种模块化的架构允许平台依赖于良好的CFT(崩溃容错)或BFT(拜占庭容错)排序工具包。
Fabric目前提供了一个基于Raft协议的etcd库的CFT订购服务实现。
还要注意,这些并不是相互排斥的。Fabric网络可以有多个 ordering service,支持不同的应用程序或应用程序需求。
性能和可伸缩性
区块链平台的性能会受到许多变量的影响,比如事务大小、块大小、网络大小以及硬件限制等。Hyperledger Fabric性能和规模工作组目前正在研究一个名为Hyperledger Caliper的基准框架。
已经发表了几篇研究论文,研究和测试Hyperledger Fabric的性能。最新的Fabric可扩展到每秒20,000个事务。