官方出品:波卡与Cosmos的对比
概述
Polkadot和Cosmos都是提供不同状态机之间通信接口的协议。
这两个协议都基于这样一个论点:未来将有多个区块链需要相互操作,而不是单独存在于孤立中的单条区块链。
模型
Polkadot采用分片模型,在该协议中,每个分片都有一个抽象状态转换函数(STF)。
Polkadot使用WebAssembly(Wasm)作为“元协议”。只要Polkadot上的验证者可以在Wasm环境中执行它,分片的STF就可以是抽象的。
编者注:
在Polkadot上,不同的平行链可以安全地交换任何类型的数据或资产,实现区块链之间的互操作性。
为了实现这种互操作性,Polkadot需要一种统一的方式来描述和执行不同平行链上的状态变化。
状态是区块链上存储的数据,比如账户余额、合约代码、交易记录等。
状态转换函数(STF)是一种规定了如何从一个状态转换到另一个状态的函数,比如通过验证交易、更新账户余额、执行合约代码等。
Polkadot使用WebAssembly(Wasm)作为一种“元协议”,也就是一种用来定义其他协议的协议。
Wasm是一种通用的二进制格式,可以在不同的平台和环境中运行。
Polkadot允许每个平行链使用自己喜欢的编程语言和逻辑来定义自己的STF。
只要它们能够编译成Wasm格式,并且能够被Polkadot上的验证者在Wasm环境中执行。
这样,Polkadot就可以保证不同平行链之间的兼容性和安全性。
通俗易懂地说,Polkadot就像一个大火车站,它可以让不同的火车(平行链)在同一个轨道(Relay Chain)上运行,并且可以让乘客(数据或资产)在不同的火车之间转乘。
为了让火车站能够管理和调度这些火车,它需要有一个统一的标准来了解每个火车上发生了什么事情(状态转换)。
这个标准就是Wasm,它可以让火车站用同样的方式来读取和执行每个火车上发生的事情,无论这些火车是用什么样的语言和逻辑来设计的。
Polkadot的分片被称为“平行链”。每当平行链想进行状态转换时,它会提交一个区块(一批状态转换)以及一个状态证明,供Polkadot验证者独立验证。
当它们被Polkadot的中继链(系统的主链)确认后,这些区块就对于平行链来说是最终确定的。
因此,所有平行链与整个系统共享状态,这意味着单个平行链的链重组将需要重新组织所有平行链和中继链。
Cosmos使用连接Tendermint链的bridge-hub模型。该系统可以有多个Hub(其中主要的是“Cosmos Hub”),但每个Hub连接一组外部链,称为“Zone”。
每个Zone负责通过足够抵押和去中心化验证者集来保护链。Zone使用称为Inter-Blockchain Communication(IBC)的协议通过Hub互相发送消息和通证。
由于Zone不共享状态,因此一个Zone的重新组织不会重新组织其他区域,这意味着每条消息的可信性取决于接收者对于发送方安全性的信任。
结构
Polkadot
Polkadot有一个中继链作为系统的主链。Polkadot中的所有验证者都已开启中继链。
平行链有整理者(Collator),他们构建并提出平行链区块验证者。整理者没有任何安全责任,因此不需要强大的激励制度。
每6秒钟整理者可以为每个中继链区块提交一个平行链区块。一旦平行链提交一个区块,验证者就会执行一系列的可用性和有效性,在将其提交到最终链之前进行检查。
平行链插槽有限,因此平行链候选者要参加拍卖,以保留最长可达两年的插槽。
对于那些没有资金用于购买平行链插槽或没有必要以六秒的区块时间执行的链,Polkadot也有平行线程。
平行线程是按需付费的,只有在需要时才需要支付执行区块的费用。
为了与想要使用自己的最终化过程(例如比特币)的链进行交互, Polkadot具有提供双向兼容性的桥接平行链(Bridge Parachains)。
Cosmos
Cosmos有一个称为“Hub”的主链,该链连接其他名为“Zone”的区块链。Cosmos可以拥有多个Hub,但本概述将考虑单个Hub。
每个Zone都必须维护自己的状态,因此必须拥有自己的验证者社区。当一个Zone想要与另一个Zone通信时,它通过IBC发送数据包。
Hub维护一个多通证账本来记录通证余额(非转账信息被中继,但它们的状态不会存储在Hub中)。
Zone使用轻客户端监视Hub的状态,但Hub不跟踪Zone的状态。Zone必须使用确定性最终算法(目前,所有Zone都使用Tendermint)并实现IBC接口,以便能够通过Hub向其他链发送消息。
Cosmos还可以使用“peg zones”与外部链进行交互,这类似于桥接平行链。
共识
Polkadot采用混合共识协议,其中包括BABE和GRANDPA这两个子协议,一起被称为“Fast Forward”。
BABE(是Blind Assignment for Blockchain Extension,即区块链扩展的盲分配机制的简称)。
使用可验证随机函数(VRF)将插槽分配给验证者,并使用备用的轮询模式(a fallback round-robin pattern)来确保每个插槽都有一个作者。
GRANDPA(是GHOST-based Recursive Ancestor Deriving Prefix Agreement,即基于GHOST的递归祖先推导前缀协议的简称)投票选择链而不是单个区块。
BABE可以创建候选区块以扩展已确定的链,而GRANDPA可以批量对它们进行最终确认(最多可以处理数百万个区块)。
这种任务隔离提供了几个好处。首先,它代表了区块生产和最终确认的传输复杂性的降低。
BABE具有线性复杂度,因此易于扩展到数千个区块生成者,并且网络开销较小。GRANDPA具有二次复杂度,但会受延迟因素影响而减少复杂度,或者说它每批最终确定多少个区块。
编者注:
这里解释一下,就是说GRANDPA在进行投票和确定区块的过程中,需要与其他验证者进行很多次的通信,这样会消耗很多的网络资源和时间。
但是,GRANDPA可以利用网络延迟的时间来同时处理很多个区块,而不是只处理一个区块,这样就可以提高效率和降低复杂度。
其次,通过能够使用未最终确认的区块扩展链,其他验证者可以执行广泛的可用性和有效性检查,以确保没有无效的状态转换进入最终的链中。
Cosmos(Hub和Zone)使用Tendermint共识,这是一个提供即时最终性的轮询协议。
区块生成和确认在算法的同一路径上进行,这意味着它每次只能产生和确认一个区块。
因为它是基于PBFT的算法(与GRANDPA类似),所以具有二次传输复杂度,但每次只能最终确认一个区块。
Staking机制
Polkadot使用被提名的权益证明(NPoS,即Nominated Proof of Stake)和顺序Phragmén算法来选择验证者。
验证者集合大小由治理机构设定(计划1,000个验证者),不想运行验证者基础设施的质押者最多可以提名16个验证者。
Phragmén算法选择最优的权益分配,其中最优是基于具有最平均权益的集合。
在Polkadot中,所有验证者在共识协议中具有相同的权重。也就是说,要获得对链的超过2/3的支持,必须有超过2/3的验证者承诺参与,而不是2/3的权益。
同样地,验证者的奖励与它们的活动相关,主要包括区块生产和最终确认,而不是它们的权益数量。
这会激励人们提名权益较低的验证者,因为他们将在抵押通证上获得更高的回报。
Cosmos Hub使用担保权益证明(BPoS,即Bonded Proof of Stake,一种委托式权益证明的变体)来选举验证者。
质押者必须绑定资金,并为每个他们想要委托的验证者提交一个委托交易,指明要委托的通证数量。Cosmos Hub计划支持多达300个验证者。
在Cosmos中,共识投票和奖励都基于权益。在共识投票的情况下,必须有超过2/3的权益承诺参与,而不是2/3的验证者。
同样地,质押总权益10%的验证者将获得10%的奖励。
最后,在Cosmos中,如果一个质押者没有在治理公投中投票,那么验证者会代表他们行使投票权。
因此,许多Cosmos中的验证者的佣金为零,以获取对协议更多的控制权。
在Polkadot中,治理和抵押是完全独立的;提名验证者不会分配任何治理投票权给验证者。
顺序Phragmén算法,详情请参见:
https://wiki.polkadot.network/docs/learn-phragmen
消息传递
Polkadot使用跨共识消息传递格式(XCM)让平行链可以相互发送任意消息。平行链通过建立连接并在已建立的通道上发送消息。
整理者是平行链和中继链的全节点,因此整理者节点是消息传递的关键组成部分。
消息不会经过中继链,只有发送证明(Proofs of Post)和通道操作(打开、关闭等)会进入中继链。这通过将数据保留在系统边缘来增强可扩展性。
编者注:
发送证明是指平行链在发送或者接收消息后,会生成一个证明,表明消息已经被正确地处理了。
这个证明可以用来在中继链上验证消息的状态,而不需要传输整个消息的内容。这样可以节省中继链上的空间和带宽,提高系统的效率。
在发生链重组的情况下,可以根据中继链上的发送证明,将消息回滚到重组的时间点。
平行链之间的共享状态意味着消息不受信任范围的限制;它们都在同一个上下文中运行。
Polkadot还有一个名为SPREE的附加协议,为跨链消息提供了共享逻辑。
使用SPREE发送的消息,会携带额外的保证,关于消息的来源和接收链的解释。
编者注:
使用SPREE发送的消息,不仅可以证明它是从哪个区块链发出的,而且可以保证它在另一个区块链上被正确地执行和理解。
这样就可以增加消息的可靠性和互操作性。
Cosmos使用称为Inter-Blockchain Communication(IBC)的跨链协议。Cosmos当前的实现使用Hub在Zone之间传递通证。
但是,Cosmos确实有一个用于传递任意数据的新规范。然而,由于链不共享状态,因此接收链必须信任消息来源的安全性。
治理
Polkadot具有多元化的治理系统,有几种途径可以通过提案。所有提案最终都要经过公开公投,大部分通证总数可以始终控制结果。
对于投票率低的公投,Polkadot使用自适应法定人数偏差来设置通过门槛。
公投可以包含各种提案,包括从链上资金库(Treasury · Polkadot Wiki)中分配资金。决策在链上生效,是具有约束力和自治性的。
编者注:
Polkadot使用了一种叫做自适应法定人数偏差的方法,它可以根据参与率的高低来调整通过门槛的高低。
参与率是指参与投票的持币者占总持币者的比例。通过门槛是指赞成票占总票数的比例。
自适应法定人数偏差的原理是,当参与率越低时,通过门槛就越高,也就是说需要更多的赞成票才能通过提案;当参与率越高时,通过门槛就越低,也就是说需要更少的赞成票就能通过提案。
这样做的目的是,避免少数人在参与率低时就能轻易地通过提案,也避免多数人在参与率高时就能轻易地否决提案。这样可以保证公投的公平性和合理性。
Polkadot有几个链上的、无许可机构。主要的一个是议会,由一组按Phragmén方式选举的账户组成。
议会代表少数利益,因此,如果议会一致同意某个提案,该提案在公开公投中的通过门槛较低。
还有一个技术委员会用于制定技术建议(例如紧急的Runtime升级以修复漏洞)。
Cosmos使用通证投票方式来通过公投。实际执行治理决策是通过协议分叉进行的,就像其他区块链一样。
所有通证质押者都可以投票,但是,如果委托人放弃投票,则他们委托的验证者将承担他们的投票权。
在Polkadot中,验证人不会根据他们的提名者获得任何投票权。
Polkadot多元的治理系统,详情请参见:
https://wiki.polkadot.network/docs/learn-governance
升级
通过使用Wasm元协议,Polkadot可以在无需硬分叉的情况下实施链升级和成功的提案。
任何在STF(状态转换函数)、交易队列或链下工作机中的内容都可以在不分叉链的情况下进行升级。
由于Cosmos不是基于元协议的,它必须通过正常的分叉机制来实施升级和提案。
发展框架
Cosmos和Polkadot的设计都是每个链具有自己的STF,并且两者都支持Wasm和以太坊虚拟机(EVM)中的智能合约。
Polkadot提供了一个预编译的Wasm编译器以及一个解释器(Wasmi)用于执行,而Cosmos只在解释器中执行智能合约。
Cosmos链可以使用Go编写的Cosmos SDK进行开发。
Cosmos SDK包含约10个模块(例如Staking、治理等),可以包含在链的STF中。SDK建立在Tendermint之上。
平行链的主要开发框架是由Rust编写的Substrate。
Substrate带有FRAME(框架),大约包含40个模块(称为“Pallet托盘”),可用于链的STF。
除了简单地使用Pallet外,Substrate还添加了进一步的抽象层,允许开发人员通过添加自定义模块并为链配置参数和初始存储值来组合FRAME中的Pallet。
注意:
Polkadot可以支持用任何语言编写的STF。
只要它编译成它的元协议Wasm。同样,它仍然可以使用Substrate客户端(数据库、RPC、网络等);它只需要在接口上实现原语(primitives)。
编者注:
原语(primitive)是指一些基本的、不可分割的操作或数据类型,它们是构建更复杂的功能或结构的基础。
在Substrate中,原语包括了一些核心组件,如区块、交易、状态、共识等。
结论
Polkadot的设计原则是可扩展性和互操作性需要共享验证逻辑来创建一个无需信任的环境。
随着越来越多的区块链被开发出来,它们的安全必须是合作的,而不是竞争的。
因此,Polkadot提供了跨链的共享验证逻辑和安全流程,以便它们可以相互交互,并知道它们的对话方在同一安全上下文中执行。
Cosmos网络使用bridge-hub模型来连接具有独立安全保障的链,这意味着当数据从一个链发送到另一个链(链间通信)时,接收链必须信任发送链。
因此,Cosmos网络中的每个区块链都有其独立的安全机制。它们是独立保护的,不依赖于其他区块链或Hub的安全性。