概述
波卡是第一个完全分片的产品级别区块链协议。目前的以太坊协议并没有实现分片,这也是下一个重大升级的主要关注点。与波卡及其平行链类似,以太坊的目标是成为一个多分片网络。
当一个网络被分片时,这意味着它能够以可扩展的方式并行执行多个(通常是许多)状态转换。其中一个关键区别是,波卡的平行链是异构分片,而以太坊将是同构分片。
换句话说,每个平行链都可以拥有自己的状态转换逻辑,而在以太坊上,所有分片都使用相同的状态转换逻辑。
两个协议都是区块链,但它们在使用方式上具有根本性的不同:
以太坊是一种通用的区块链,它托管着以太坊虚拟机(Ethereum Virtual Machine),这是一个用于执行智能合约的环境。
波卡是一种异构分片多链协议,它托管多个链,并为它们提供一种参与共享安全模型的方法。波卡充当元协议,允许多个协议共存并协同工作。
注意:
需要注意的是,这里的“以太坊”指的是以前称为“Eth2”或“以太坊2.0”的东西。有关以太坊后续迭代的更多具体细节,请参阅以太坊路线图。
值得一提的是,一些升级可能对以太坊不活跃,但被描述为与波卡比较的一部分。其中一些目标/升级可能会发生变化,以反映以太坊的总体方向。
以太坊路线图,详情请参见:
https://ethereum.org/en/roadmap/
高阶比较
在高层次上,两种协议都有根本不同的目标,这反映在它们的结构。以太坊是用于全球协调的通用区块链,以太坊不是专门的也没有针对任何特定应用程序进行优化,而是其主要重点是用于执行智能合约的以太坊虚拟机。
波卡是一个分片区块链,它为每个分片或平行链引入了共享安全性。每个分片通常专门针对特定的焦点,并针对那个目标。波卡通过波卡中继链为这些分片提供共享的安全性和共识。
波卡不能也不会直接运行智能合约的虚拟机之类的东西。然而,它的几个平行链可以(并且确实如此)。
波卡上的平行链甚至可以运行以太坊虚拟机EVM,来执行用以太坊原生智能合约语言Solidity编写的智能合约。
在区块链的语境中,“分片”是指状态转换的并行化 (交易)执行。以太坊和波卡处理可扩展性和分片的方式相当不同。
可扩展性
sharding(分片)与Danksharding
作为以太坊路线图的一部分,先前被称为“分片链”的技术已经被放弃,转而采用基于Rollup的方法来扩展交易吞吐量。
Danksharding,是以太坊计划创造一个声称可以处理每秒超过100,000笔交易的可扩展环境的方式。
Danksharding是相对于“分片链”选择的替代方案,并通过存储数据块(Blobs)来工作。
Danksharding将允许在以太坊上更多的空间被利用,其中的数据块将在从网络中删除之前验证一段时间。
这些数据块必须在一定时间内保持不变,这意味着验证程序必须拥有一定水平的数据可用性。这种方法将在Layer1层实现数据可用性,并进一步促进以太坊的Layer2协议发展。
相比之下,波卡是一个纯粹的分片网络。它将数据可用性视为区块验证过程的一个重要组成部分。
波卡网络的分片之间的并行化交互也充分利用了这个因素。而以太坊主要关注于使大量数据在一段时间内可供验证,波卡的并行化因素则允许在协议层面上进行验证,而不需要Layer2解决方案。
在波卡上,每个分片都托管核心逻辑。如前面提到过,每个分片(即平行链)都有一个独特的状态转换函数(有时称为Runtime)。
应用程序可以存在于单个分片中,也可以存在于单个分片中通过组合逻辑来创建交叉共识 (XCM) 交互,跨分片。通过组合逻辑来创建跨共识(XCM)的交互,应用程序可以存在于单个分片内或跨分片中。
波卡使用WebAssembly(Wasm)作为“元协议”。分片的状态转换函数可以是抽象的,只要波卡上的验证者可以在Wasm环境中执行它。
Danksharding,详情请参见:
https://ethereum.org/en/roadmap/danksharding/
架构差异
波卡和以太坊
如前所述,以太坊是一个通用虚拟机,可以运行用Solidity编写的沙盒程序,而波卡是其他平行链相互连接和交互的元协议。
以太坊作为一个单一的、同构的链运行。每个以太坊节点分为两层:共识层和执行层。
每层处理以太坊客户端的区块验证信息、对等发现和权益证明。波卡的主要组件是中继链,它托管称为异构分片的平行链。
中继链从其分片(平行链)聚合信息,波卡验证者在其中就共识和最终性达成一致。
从本质上讲,可以将波卡视为一系列Runtime,它们是用于描述平行链(分片)以及波卡本身的状态转换函数。
与以太坊一样,波卡客户端将他们的许多职责抽象到使用Substrate构建的各种组件中。
分叉、分级和治理
以太坊治理是在链下完成的,不同的利益相关者通过协议本身以外的某种媒介达成共识。
以太坊的升级将遵循标准的硬分叉过程,要求验证者升级其节点以实现协议更改。
波卡使用了多元化的链上治理系统。有几种途径可以发布提案,所有提案最终都会通过公投,其中多数通证始终可以控制结果。
波卡使用自适应群体偏差来设置传递低投票率公投的阈值,公投可以涵盖各种主题。
包括来自链上国库的资金分配或修改链的底层Runtime代码。决策在链上制定,具有约束力和自主性。
波卡可以使用Wasm元协议进行链升级和成功的提案,而无需硬分叉。状态转换功能、交易队列或链下工作机(off-chain worker)中的任何内容都可以在不分叉链的情况下升级。
自适应群体偏差,详情请参见:
https://wiki.polkadot.network/docs/learn-governance#adaptive-quorum-biasing
共识和最终确定
以太坊和波卡使用混合共识模型,其中区块生产和最终确定具有各自的协议。以太坊的Casper FFG和波卡的GRANDPA,这两个最终性协议都是基于GHOST的,都可以在一轮中完成批量区块的最终化。
对于区块生产,这两个协议都使用基于时间段的协议,随机分配验证者到一个时间段,并为未最终化的区块提供分叉选择规则 - 以太坊使用RandDAO/LMD,波卡使用BABE。
以太坊和波卡共识有两个主要差异:
1、以太坊根据称为“epoch”的周期最终确定批量区块。当前计划是每个epoch有32个区块,并在一轮中将它们全部最终化。预测区块时间为12秒,预期最终性时间为6分钟(最大12分钟)。
2、波卡的最终性协议GRANDPA基于可用性和有效性检查来最终化批量区块,这些检查随着建议的链增长而进行。最终性时间随需要执行的检查数目而变化(无效报告会导致协议需要额外的检查)。预期的最终性时间为12-60秒。
以太坊需要每个分片有许多验证者来提供强大的有效性保证,而波卡可以通过较少数量的验证者提供更强的保证。
波卡通过使验证者将纠错编码分发给系统中所有验证者来实现这一点,这样任何人——不仅是分片的验证者——都可以重建平行链的区块并测试其有效性。
随机的平行链验证者分配和二次检查是随机选择的验证者进行的,这使得每个平行链上的一小部分验证者串通的可能性较小。
BABE详情请参见:
https://wiki.polkadot.network/docs/learn-consensus#badass-babe-sassafras
“epoch”的周期,详情请参见:
https://github.com/ethereum/consensus-specs/blob/676e216/specs/phase0/beacon-chain.md#time-parameters
Staking机制
以太坊是一个权益证明网络,每个验证者实例需要32个ETH进行Staking。验证者运行一个主信标链节点和多个验证者客户端——每32个ETH一个。这些验证者被分配到“委员会”,随机选择的组来验证网络中的分片。
以太坊依靠大型验证者集来提供可用性和有效性保证:每个分片至少需要111个验证者来运行网络,每个分片需要256个验证者才能在一个epoch内完成所有分片。
如果有64个分片,那就是16384个验证者(每个分片有256个验证者)。有关更多信息,请参阅以太坊经济学和Eth2.0分片链简化提案。
波卡可以用更少的验证者提供强大的最终性和可用性保证。它使用提名权益证明(NPoS)从较小的集合中选择验证者,让较小的持有者提名验证者来运行基础设施。
同时仍然在不运行自己的节点的情况下获得系统的奖励。波卡网络中的每个平行链需要大约10个验证者。
以太坊经济学,详情请参见:
https://docs.ethhub.io/ethereum-roadmap/ethereum-2.0/eth-2.0-economics/
Eth2.0分片链简化提案,详情请参见:
https://notes.ethereum.org/@vbuterin/HkiULaluS
互操作性和消息传递
波卡使用跨共识消息传递格式 (XCM) 让平行链相互发送任意的消息。平行链打开彼此的连接,并可以通过他们已建立的渠道发送消息。
鉴于整理者(Collator)也需要是中继链的完整节点,它们将连接起来并可以将消息从平行链A中继到平行链B。
消息不会通过中继链传递。只有有效性证明和通道操作可以(打开、关闭等)。这通过将数据保存在系统边缘来增强可扩展性。
波卡将添加一个名为SPREE的协议,为跨链消息提供共享逻辑。使用SPREE发送的消息带有关于接收链来源和解释的额外保证。
DApp支持和发展
以太坊主要支持使用Solidity进行智能合约开发。这些合约是不可变的,一旦在链上发布就无法更改。
波卡通过平行链支持智能合约,通常使用ink!智能合约语言。
在以太坊上,智能合约可以相互调用;但是,它们被固定在以太坊域的链上。在波卡上,智能合约可以在同一平行链和跨平行链之间相互调用。
在波卡上,开发者可以选择使用智能合约,从修改链状态的Pallet中调用extrinsic,或仅使用波卡的RPC直接检索并操作链上信息。
在波卡上的DApps通常由这些多个组件组成,这些组件协同工作以修改、检索和实时观察状态变化。
ink!智能合约语言,详情请参见:
https://use.ink/
总结
以太坊和波卡都使用了分片模型。Danksharding计划通过专注于数据可用性,利用基于Rollup的方法来实现分片。
波卡生态系统由一个叫做“中继链”的主链来保证安全性,同时管理和连接它的分片(“平行链/平行线程”)成为一个统一的、同质化的方案。
这两个协议之间的主要差异是:
在以太坊中,所有分片都代表相同的状态转换,而波卡允许分片具有抽象的状态转换函数实现。
以太坊中的治理流程计划在链下进行,因此需要协调硬分叉以制定治理决策。相比之下,在波卡中,决策是在链上进行的,并通过无分叉升级自主执行。
验证者选择机制不同,波卡可以通过较少数量的验证者为每个分片提供强大的可用性和有效性保证。