区块链分布式账本Fabric、Corda和以太坊比较

18-10-06 banq
                   

简要分析了分布式账本技术(DLT)Hyperledger Fabric,R3 Corda和Ethereum以太坊之间最显着的差异。目的是为决策者提供新的DLT指导,以了解Hyperledger Fabric,Corda和Ethereum最适合的用例。

三种不同的框架
从Hyperledger Fabric,R3 Corda(以下分别仅称为Fabric和Corda)和以太坊的白皮书中可以明显看出,这些框架在可能的应用领域中有着截然不同的愿景。Fabric 和Corda 的开发由具体用例驱动,而Corda的用例来自金融服务行业。因此,这就是Corda看到其主要应用领域的地方。相比之下,Fabric计划提供模块化和可扩展的架构,可用于各种行业,从银行和医疗保健到供应链。以太坊也表现为完全独立于任何特定的应用领域。然而,与Fabric相比,它不是模块化,而是为各种交易和应用提供通用平台。


peer端参与者
对于传统的中央数据库系统如oracle或nosql,只有单个实体(所有者)保留底层数据库的副本,例如分类帐。因此,该实体控制哪些数据被贡献以及允许哪些其他实体贡献。随着DLT的出现,这种根本改变将有利于分布式数据存储,其中多个实体持有底层数据库的副本并且自然允许贡献。

参与分布式数据存储的所有实体形成所谓的节点或对等体peer的网络。由于分布式数据存储,难以确保所有节点就共同事实达成一致,例如分类账的正确性,因为一个节点所做的改变必须传播到网络中的所有其他对等节点。达到共同事实的结果称为节点之间的一致性,将在下面描述。

关于参与共识,有两种操作模式:无权限和许可。如果参与是无权限的,则允许任何人参与网络。这种模式适用于以太坊作为公共区块链。另一方面,如果允许参与,则提前选择参与者,并且仅限于这些参与者对网络的访问。Fabric和Corda也是如此。参与模式,无权限或许可,对达成共识有着深远的影响。

共识

1. 以太坊所有参与者必须就所有已发生的交易(banq注:交易即是事务,英文都是transaction)的顺序达成共识,而不管参与者是否参与了特定交易。交易的事务顺序对于分类账的一致状态至关重要。

如果无法建立明确的事务顺序,则可能会发生双倍花费,即两个平行交易将相同的硬币转移给不同的收件人,从而凭空赚钱。

由于网络可能涉及相互不信任和匿名的当事方,因此必须采用共识机制来保护分类账,防止欺诈或不利的参与者尝试双重支出。

在以太坊的当前实现中,该机制是通过基于工作量证明(PoW)方案的挖掘来建立的。所有参与者必须就共同分类帐达成一致,并且所有参与者都可以访问所有记录的条目。后果是PoW影响了事务处理的性能。

关于存储在分类账上的数据,即使记录是匿名的,但所有参与者都可以访问它们,这对于需要更高程度隐私的应用程序来说是个问题。

与以太坊相比,Fabric和Corda对共识的解释更加精细,并不仅仅归结为基于PoW或其衍生物的挖掘。由于在权限模式下运行,Fabric和Corda为记录提供了更细粒度的访问控制,从而增强了隐私。此外,由于参与交易的各方必须达成共识,因此可以获得业绩增长。

2.Fabric对共识的理解是广泛的,包括整个事务流程,从提议事务到网络,再到将其提交到分类账。此外,节点在达成共识的过程中承担不同的角色和任务。这与以太坊形成对比,其中参与达成共识的节点的角色和任务是相同的。

在Fabric中,节点根据它们是客户端,对等端还是排序者而区分。客户端代表最终用户做的事情,创建又调用交易事务。他们与peer端和排序者沟通。

对等方peer维护分类帐并从排序方接收有序地更新消息,以便将新交易事务提交到分类帐。

代言人排序者是一种特殊类型的peer端,他们的任务是通过检查交易是否满足必要和充分条件(例如提供所需签名)来支持交易。

排序者向客户和同行提供通信渠道,通过该渠道可以广播包含交易的消息。特别是就共识而言,通道确保所有连接的对等体以完全相同的逻辑顺序传递完全相同的消息。(保证顺序是排序者主要职责)


此时,出现的问题是,当采用许多相互不信任的排序者时,在传递消息时可能会出现错误。因此,必须使用一致性算法以应对达成共识时出现故障,或者例如消息出现不一致顺序,这样保证分布式分类账复制时对故障的容忍。

使用Fabric,所采用的算法是“可插拔的”,这意味着根据应用程序的具体要求,可以使用各种算法。例如,为了处理如上所述的随机或恶意复制错误,可以使用拜占庭容错(BFT)算法的变体。

此外,通道划分消息流,这意味着客户端只能看到它们所连接的通道的消息和关联交易事务,并且不知道其他通道的交易事务。

在事务流的上下文中描述了上述节点的角色:客户端向连接的代言人发送事务以启动分类帐的更新。所有代言人都必须就拟议的交易达成一致,因此必须就拟议的分类账更新达成某种共识。客户就会先后收集到所有代言人的批准。

已批准的交易发送给已连接的排序者,并再次达成共识。随后,交易被转发给持有分类账的peer端以进行进一步交易。

在不进一步详细说明的情况下,很明显Fabric允许对共识进行细粒度控制并限制对交易事务的访问,从而提高性能可伸缩性和隐私性。

3.与Fabric类似,Corda的共识也是通过仅涉及各方的事务级别达成的。达成共识是交易有效性和交易唯一性。

通过检查所有必需的签名并确保所引用的任何交易也是有效的,通过运行与交易相关联的智能合约代码(下面详细描述的智能合约)来确保有效性。

唯一性涉及交易事务的输入状态。具体而言,必须确保所讨论的交易是其所有输入状态的唯一消费者。换句话说,不存在消耗任何相同状态的其他事务。这样做的原因是为了避免双倍花费。参与者称为公证人节点,其唯一性达成共识,而采用的算法与Fabric一样“可插拔”。因此,可以再次使用BFT算法。

智能合约
“智能合约”一词在第一次遇到时会引起相当大的误解,因为它会唤起某种代表智能行事的合同的想法。然而,合同的性质仍然含糊不清,但直观地看起来与法律问题有关。也就是说,合同既不是智能的,也不是人工智能驱动的,至少现在还不是,它们通常也不会编码具有法律约束力的义务和权利。

Clark及其同事提供了一个有用的术语,突出了“智能合约”一词常用的两种不同方式。第一个是智能合约代码,第二个是智能合法代码,两个区别,在这种比较的背景下被证明是有益的。

智能合约代码仅表示以编程语言编写的软件。它充当使用它的一方的软件代理或代表,其目的是履行某些义务,行使权利并可以以自动方式控制分布式分类账中的资产。因此,它通过执行在现实世界中建模或模拟合同逻辑的代码来承担分布式分类账世界中的任务和职责,尽管其法律理由可能不清楚。

所有DLT都具有智能合约代码意义上的智能合约,可以用Go或Java for Fabric 编写,Solidity 中用于以太坊,Java或Kotlin用于Corda 。

在Fabric中,术语“chaincode”用作智能合约的同义词。作为说明性示例,提醒读者在Corda的共识机制中使用智能合约代码以确保交易有效性。然而,一方面Fabric和以太坊之间存在显着差异,而Corda另一方面与使用“智能合约”术语的第二种方式相关。

在Corda,智能合约不仅包括代码,还允许包含法律文。因此,上述智能法律合同是法律文,其制定方式可以用智能合同代码表达和实施。这背后的基本原理是赋予代码合法性,这种合法性源于相关的法律文。这种结构称为Ricardian Contract 。此时,Corda明确地被设计为应对金融服务行业高度监管的环境。Fabric和Ethereum都缺少此功能。

内置货币
另一个值得注意的区别是,以太坊具有内置加密货币(Ether)。它用于向有助于通过挖掘区块达成共识以及支付交易费用的节点支付奖励。因此,可以为以太坊建立分散的应用程序(DApps),允许货币交易。此外,可以通过部署符合预定义标准的智能合约来创建用于自定义用例的数字令牌。这样,可以定义自己的货币或资产。

Fabric和Corda不需要内置加密货币,因为通过挖掘无法达成共识。但是,使用Fabric,可以使用链码开发本机货币或数字令牌。使用Corda,无意创建数字货币或代币。

总结:定制与通用平台
总而言之,这三种DLT跨越一个连续体。一方面是Fabric和以太坊,他们都非常灵活,但在不同方面。

以太坊强大的智能合约引擎使其成为任何类型应用程序的通用平台。然而,以太坊的无权限操作模式及其完全透明性是以牺牲性能可扩展性和隐私为代价的。

Fabric通过允许的操作模式,特别是通过使用BFT算法和细粒度访问控制来解决性能可伸缩性和隐私问题。此外,模块化架构允许Fabric针对多种应用进行定制。可以绘制一个多功能工具箱的类比。

Corda位于另一端。它被有意识地设计为金融服务行业的DLT。最值得注意的是,它通过增加具有法律文的智能合约来考虑高度监管的环境。

显然,与Fabric相比,Corda专注于金融服务交易简化了其架构设计。因此,它可能提供更开箱即用的体验。然而,由于其模块化,Fabric可能可以定制为类似Corda的功能集。寻求将Corda集成到Hyperledger项目中的努力已经存在。Corda因此不能被视为Fabric的竞争对手,而是更多的补充。

原文
[该贴被banq于2018-10-07 16:55修改过]

                   

1