揭秘 Cosmos 与 Polkadot 五大区别:两种截然不同的跨链哲学

虽然有很多文章解释和强调了 Cosmos 与 Polkadot 之间的差异,但作者认为今天大多数有关「Cosmos vs Polkadot」的文章要么有偏见,要么缺乏探讨双方的细微差别。本文将试图从架构上的权衡到哲学理念上的差异对这两个项目进行更深入的讨论。
原文标题:《5 Differences between Cosmos & Polkadot》
作者:Julian Koh,Metastable Capital 顾问
编译:Jhonny
Julian Koh,Metastable Capital 顾问

为何搭建一条新的区块链?

首先,现存的智能合约平台可能并不能满足你搭建的应用所需的灵活性和可定制性要求。比如,如果你的应用要求一个自定义的哈希函数,那么在以太坊上编写这个哈希函数将花费大量的 gas 费用,因为每次调用时都需要在 EVM 上执行该函数。
一种选择是建议以太坊协议将该哈希函数作为预编译合约(precomplied contract)包含在以太坊协议中,但除非该哈希函数在很多其他的应用中也广泛被使用,不然这个建议是不会被批准的。
从头开始编写自己的区块链可以让你自由和灵活地设计该区块链的核心逻辑,以满足你搭建的应用的特定需求。
第二个原因就是从中获得的主权性(也即控制权)。在某个现有的智能合约平台搭建应用,这将要求你的应用必须遵循该平台协议的规则和治理:从影响用户体验的因素(如出块时间和 gas 定价)到改变状态的决策 (如链回滚),都有可能涉及。
当然,一个独立的、让你拥有主权的区块链平台意味着放弃了与其他应用进行无缝通信的能力,因为这些应用是在有着单独的状态机(state machine)的区块链上运行的。Cosmos 和 Polkadot 试图解决的是:Cosmos 的Hub-Zone 模式和 Polkadot 的Relay Chain/Parachain 模式。
这篇文章将假定读者已经对这两个项目有大致的了解,并将重点梳理出它们之间的差异。

区别 1:本地 vs 全局安全

Cosmos 和 Polkadot 在两种完全不一样的安全模式下运行。
简单来说,Polkadot 的工作原理如下:
Polkadot 网络的架构
Parachains (平行链) 是 Polkadot 网络中的区块链,这些 Parachain 有着自己的状态机、自己的规则和本地的区块生产者 (即 collators,校对人)。
每条 Parachain 实际上都是一台独立的状态机,可以利用任何类型的独特功能、共识算法和交易成本结构等等。
在 Polkadot 网络中,所有的 Parachains 都是一条被称为 Relay Chain (中继链) 的父链的子链,Relay Chain 包含了所有 Parachains 合并起来的「全局状态 (global state)」的某种表征形式。
Relay Chain 有着自己的共识算法,即 GRANDPA 共识,该算法能够快速地在 Parachain 上敲定区块。通过这种模式,Polkadot 网络中的 parachains 就运行在一个「共同的安全」模式中 —— 如果 Relay Chain 拥有 1,000 以上的验证者来保证高度的安全性,那任何一条 parachain 都可以通过简单地连接到 Relay Chain 来从这种安全性中获益。这允许 parachain 掌控自身的状态机、其他的本地规则以及与其他数百条 parachains 共享的高安全性。
Polkadot 的这种模式的缺点在于,Relay Chain 中的验证者(validator)对任何一条 parachain 做出的状态更改拥有最终决定权。比如,出于某种原因,验证者可能会不断地拒绝来自某条特定的 parachain 的 collators (校对人,也即区块生产者)创建的区块,并永久性地阻止该条 parachain 的进程被被包含在全局状态(global state)之中。
为此,Polkadot 试图通过打乱验证者来减少这种问题的发生,这样验证者就可以随机地验证 parachain,降低了某个特定的验证者审查某条特定的 parachain 的可能性。此外,Polkadot 也具有另一类称为 Fishermen (钓鱼人) 的验证者,他们会不断地检查验证者是否存在恶意行为。
相比而言,Cosmos 网络的架构完全不一样:.
Cosmos 网络的架构
在 Cosmos 网络中,每条区块链都是独立并进行自我保护的,而不是像 Polkadot 那样使用一种本地 / 全局模式来保障安全。每条区块链都将运行自己的共识机制,每条链的验证者仅仅负责保障该条链的安全。
Cosmos 网络使用一个 hub-zone 模式来实现每条链之间的互操作性(interoperability),其中 zone (一条独立的区块链)可以通过 Hub (同样也是一条独立的区块链)向其他的 zones「发送代币」。Cosmos 使用的协议称为 IBC 协议(Inter-Blockchain Communication protocol,即跨链通信协议),这是一种在不同的区块链之间传递用于表示代币转移的信息的协议。IBC 协议尚处于开发进程中,起初将实现代币转移,最终将实现在区块链之间传递任何类型的信息。
与 Polkadot 的架构模式对比,我们可以发现,Cosmos 的最大的区别在于每个 zone (独立的区块链)的安全都是仅仅有这条区块链的验证者来保障的。如果某个 zone 想要获得很高的安全性,那它将需要引导并补充更多的验证者,而这对于一些较小的应用来说可能是很困难的。
但是对于某些需要拥有更多掌控权的应用来说,这是一个强大的卖点–比如,Binance (币安)通过使自己的节点成为币安链(Binance Chain)的验证者,以此来引导他们的 DEX (去中心化交易所),通过这种方式,币安就能在测试其 DEX 以及推出新功能时完全控制币安链。
作者认为,难想象币安链会放弃对哪些交易进入哪个块的控制权,但如果币安链是搭建在以太坊或是 Polkadot 平台之上,那就不得不放弃这种控制权了。出于同样的原因,作者认为将会出现一类公司(比如 Telegram、Facebook 和 Kakao 等)选择搭建自己的区块链并由自己掌握控制权,未来这种链与其他链进行连接的重要性将微乎其微。

区别 2:治理 & 成员资格

Polkadot 和 Cosmos 的第二大区别在于两者的治理和成员资格。
在 Polkadot 网络中,只存在一条 Relay Chain 和一定数量的 Parachains (由 Relay Chain 的验证者支持)。当前的预计是,Polkadot 网络中将容纳 100 条 parachains,但这一数量可能在将来有所增加或减少。
Polkadot 网络通过一种拍卖机制来分配 parachain 的链槽 (parachain slots) — 出价最高者将能够通过在一个 PoS 系统中锁定 DOT (Polkadot 网络的原生代币) 从而获得一个链槽 (slot)。这意味着,如果想要称为 Polkadot 网络中的一条 Parachain,那你将需要购买大量的 DOT 代币并锁定起来,而且如果你想要继续运行一条 Parachain,就必须一直锁定这些 DOT 代币。
另一方面,在 Cosmos 网络中不存在固定的成员资格规则 —— 任何人都可以搭建一条 Hub 链或者一条 Zone 链。Hub 本身是拥有主权(控制权)的区块链,搭建的目的是链接其他的区块链。
其中的一个例子是最近由 Tendermint 团队搭建的 Cosmos Hub 链(https://cosmos.bigdipper.live/),另一个例子就是计划将主要在中国和亚洲其他地区运营的那些区块链连接起来的 Iris Hub 链 (https://www.irisnet.org/)。
Hub-Zone 模式能够使跨链通信更加高效,因为每条链只需与一条 Hub 链相连接,之后就可以与连接此 Hub 链的其他区块链进行连接了。
Hubs (右图) 在连接多条区块链方面更加高效
与成员资格紧密相关的是这两个网络的治理过程 (governance processes)。
在 Polkadot 网络中,治理决策是投票者持有的 DOT 代币数量来决定的。在链上会有一个正式的投票机制,但这方面还没有最终确定,可以通过此链接查看最新相关更新信息:
除了定期的由持币量加权的投票之外,Polkadot 也使用委员会 (council) 的理念来代表被动的利益相关者(即不主动参加投票的持币者)。该委员会会由 6 人组成,每两周增加 1 人,直到总人数满 24 人。每个委员会成员都是通过认可投票(approval vote)的方式来选择。
虽然有关这种治理过程的具体细节还没有最终敲定,但这意味着存在一些方式能够改变 Relay Chain 中的一些参数(比如区块时间、区块奖励等等),以及改变获取 Parachain 链槽的成员资格规则。比如,Polkadot 的治理过程可能会改变成为 Parachain 所要求持有的 DOT 数量或者相关的拍卖机制。
一个常见的误解就是认为 DOT 持有者可以随意地通过投票来将 Parachain 踢出去,但实际上 DOT 持有者只能改变成员资格的过程,也就是说,当某条链通过锁定一定数量的 DOT 成为一条 Parachain 之后,在其锁定这些 DOT 代币的整个期间,这条 Parachain 都是有担保的。
另一方面,Cosmos 网络并没有单一的治理过程。每条 Hub 链和 Zone 链都有着自己的治理过程,没有适用于整个区块链网络的中心规则集。当人们谈论「Cosmos 的治理」时,指的是 Cosmos Hub 的治理,也即那条由 Tendermint 团队推出的 Hub 链。Cosmos Hub 链有着一套规则集,任何人都可以发起提议,并且 Atom (Cosmos 发行的代币)持有者可以对提议进行投票,他们的投票权重有持有者持有的代币数量来决定。通过下方链接可以进一步了解有关 Cosmos Hub 的治理过程:

区别 3:跨链通信

Polkadot 和 Cosmos 的第三个区别就是两者在跨链通信协议的架构及其设计目标的区别。
Polkadot 的目标是在 Parachains 之间传递任意消息,这意味着 Parachain A 可以调用 Parachain B 中的智能合约,可以在两条链之间转移代币,或者任何其他类型的通信。
另一方面,Cosmos 专注于区块链之间的资产转移,这是一种更简单的协议。
当前,这两种通信协议规范都还没有充分地完善和建成。有关这两种规范的更多细节,请参阅:
但当前在跨链通信方面的最大挑战并不是如何在一条链上表示另一条链的数据,而是当这些数据来源的那条链分叉和重组了,并将这笔交易排除出去时,如何处理这种情况。这是 Cosmos 和 Polkadot 在架构设计方面最大的不同之处!
Polkadot 使用两种不同的机制来保证跨链通信的安全:
首先,Relay Chain 和 Parachains 共享安全性使交换消息变得更容易。共享安全性 (shared security) 的另一个作用是所有的 Parachains 都用着相同级别的安全性,其结果是这些链之间可以相互信任。
为了便于理解这一点,我们以将以太坊 (安全性高) 和 Verge (安全性低) 之间进行相互操作作为例子:如果我们想要在 Verge 上表征以太坊,我们可以在 Verge 区块链上锁定 ETH 并铸造一些 ETH-XVG 代币,但由于 Verge 的安全性低,攻击者可能会对 Verge 发起 51% 攻击并向以太坊区块链上发送一笔双花,允许该攻击者能够提取比他实际拥有的更多的 ETH。
因此,在相互发送消息时,对于安全性高的区块链来说,很难回去信任安全性低的区块链。而当消息是经由多条具有不同安全级别的区块链进行传递时,这将使情况更加复杂。
理论上来说,共享安全性是一个保证跨链通信的良好方式。但是,为了达到这一目标,跨链通信协议必须能够经常性和随机性地打乱那些分配给每条 parachain 的验证者。这带来了经典的「数据可用性问题」,即每个验证者必须经常下载他被分配到的每一条 Parachain 链的状态。这是当前这一领域最为困难的问题之一,目前还尚不清楚 Polkadot 将能否解决这一问题!
其次,Polkadot 使用了 Fishermen (钓鱼人) 的概念,他们是 Polkadot 网络中监视 Parachains 的恶意活动的「赏金猎人」。从某种意义上说,这是 Polkadot 网络抵御恶意行为的「第二道防线」。如果某条特定的 Parachain 的验证者敲定了一个无效的区块,那 Fishermen 可以向 Relay Chain 提交一个证明,并有效地将 Polkadot 网络和相关的 Parachains 的整个状态都进行回滚。
在跨链通信期间,我们最为担心的情况是其中一条链在重组 (reorganizing) 中,而另一条链正在正常地进行中,但是 Polkadot 会确保一旦发现了无效区块,一切都会回滚!
相比之下,Cosmos 则采取了一种完全不同的方式来进行跨链通信。由于在 Cosmos 网络中,每条链都拥有自身的验证者,完全有可能存在一些包含串谋验证者的「恶意」 Zone 链,这意味着当某一条 Zone 链想要与另一条 Zone 链通信时,Zone A 需要信任 Cosmos Hub 以及 Zone B 中的验证者。
理论上来说,这听起来并不十分高效,因为 Zone A 中的人在决定发送消息之前,将必须调查 Zone B 中的所有验证者,但作者认为在是在实际操作中,这也并没有那么糟糕:诸如 Polychain Labs 等「著名的」验证者和 Zaki Manian 的 iqlusion 都很可能将验证很多不同的区块链,且随着时间的推移建立起「良好验证者」的名声。这意味着,当 Zone A 看到 Zone B 是由 Polychain Labs 和 iqlusion 验证时,就会决定信任 Zone B。

区别 4:共识算法

Polkadot 的 Relay Chain 使用了一种由该团队发明的称为 GRANDPA 的共识算法。该算法允许 Relay Chain 快速地敲定很多来自所有 Parachains 的区块,并且也能容纳大量的验证者(超过 1,000 个)。
简单来说,这并不是因为所有的验证者都需要对每一个区块进行投票,而是验证者可以对某个他们认为有效的、高度最高的区块进行投票,并且该算法会将投票应用于该区块之前的所有区块。通过这种方式,该算法会找到那些拥有绝大多数票数的区块并将这些区块进行敲定。GRANDPA 尚处于开发阶段,我们也不清楚该算法将在实际中表现如何。
在 Polkadot 网络中,Parachains 可以使用一系列不同的共识算法来达成本地共识。Polkadot 提供一个软件开包 Substrate(https://github.com/paritytech/substrate),Substrate 提供了三种县城的共识算法:GRANDPA、Rhododendron 和 Aurand。很可能将会有更多的共识算法被增加到 Substrate 之中,并且将能在 Polkadot 网络中使用。
另一方面,Cosmos 网络中的每条链都可能会使用任何一种共识算法,只要该共识算法遵守一个称为 ABCI 的规范 (https://tendermint.com/docs/spec/abci/)。
该规范的创建是为了实现链之间通信的标准化。当前,只有 Tendermint 的共识算法符合该规范的要求,但当前也正在通过一些努力来创建符合该规范的其他共识算法。
从高层次来看,Tendermint 的算法使通过使每个验证者都相互对话,以此来同意 / 拒绝任何单个区块,在单个区块的层次上进行最终敲定。该算法速度很快,已经在一个有 200 个验证者的实时环境中进行了压力测试,在 Game of Stakes 游戏中的出块时间达到了 6 秒。Cosmos 团队同样也提供一个软件开发包,其中包含了 Tendermint 的算法可供使用。想要了解更多有关此共识算法,可以通过下方链接进行了解:
Tendermint 算法的最大缺点就是该算法在验证者时间有着很高的通信成本(high communication overhead)。这意味着虽然该算法可以相当快地与大约 200 名验证者运行,但如果验证者是 2,000 个时,该算法将变得非常缓慢。但是,其中的权衡是在异步(asynchrony)中获得安全性,这是非常重要的,因为如果你看到了某笔交易被「敲定了」,那即便是在最糟糕的网络状况下,这笔交易将不会被逆转的。
对此,作者的个人观点是,从长远来看,将这两个项目基于它们所使用的共识算法进行比较并不是特别有用。Polkadot 和 Cosmos 在创建的架构都将在未来允许许多不同的共识算法在网络中被使用,当前绝大多数应用程序都可以很好地运行,无论它们使用 Tendermint 还是 Polkadot 的共识算法。

区别 5:Substrate vs Cosmos SDK

Polkadot 和 Cosmos 都提供一个软件开发包,分别是 Substrate (https://www.parity.io/substrate/) 和 CosmosSDK(https://cosmos.network/sdk)。这两个开发包的目的都是为了使开发者能够更容易地开始搭建自己的区块链,其中包括各种开箱即用的模块(包括治理模块)、staking 模块、认证模块等等。
两个开发包的主要区别在于,Cosmos SDK 支持 Go 语言,而 Substrate 支持任何一种兼容于 WASM (Web Assembly)的语言,使其给予开发者更多的灵活性。这两个开发包都是用于搭建区块链的全新框架,将在接下来几年内增加更多的功能。

结论

虽然这篇文章很长也很详细,但并不是详尽的。Cosmos 和 Polkadot 之间的区别很难理解,而且也可能有一些细节是作者没有提及的。要全面了解这两个项目是非常困难的,有时相关文档会随着时间的推移而改变。这两个项目都处于襁褓阶段,并有望在下一个年度大大得以发展 —— 因此本文中提及的一些观点可能在之后会过时。
总结而言,作者认为 Polkadot 在以下几个方面相比 Cosmos 更具优势:
  • 应用程序开发者需要引导自己的安全性;
  • 如果我们能够解决数据可用性问题,那共享安全性情况下的跨联消息传递将变得更容易;
  • 他们似乎对 Substrate 开发包 (WASM,更多的共识算法 & 开箱即用的模块) 更有野心;
  • 专注于为跨 parachain 合约调用传递任意消息 (当前此用例尚不明确)
  • 似乎搭建 1.0 版本的开发者更多。
相反,Cosmos 相比于 Polkadot 的优势主要有以下几个方面:
  • Cosmos 已经上线了,而 Polkadot 还没有上线;
  • Polkadot 在 parachain 成员资格过程方面更具限制 & 成本也可能更高;
  • 对于特定的项目 (如币安) 来说,Cosmos 具有更多的可定制性;
  • Polkadot 网络中的 Parachains 链的恶意验证者可能在整个网络中扩展其破坏影响,而 Cosmos 将破坏影响限定在一个 Zone 链 & 相应的资产中;
  • 已经有很多项目在使用 Cosmos SDK 了 (https://cosmos.network/ecosystem);
  • Cosmos 专注于更简单、更容易地进行资产转移,当前已经证明了其用例。
来源链接:medium.com

一文读透跨链风口Polkadot、Cosmos

刘毅:Random Capital合伙人,清华大学硕士,区块链和大数据技术专家。20年多种资本市场投资经验,比特币早期投资者。
文章阅读时长:61分钟
复盘内容如下:
本次分享的主标题是 Polkadot 架构解析,副标题是下一代 DApp 开发技术评述。其实副标题更能概括本次分享,因为我们不只讨论 Polkadot,而是要相对全面地评述平台型公链,包括以太坊 2.0、Cosmos 等,当然 Polkadot 是重点。
我希望讲清楚 DApp 开发技术的走向。这是区块链行业发展的核心问题之一,它不仅对开发者重要,而且会影响到其他行业参与者。因此我尽量讲得直白浅显,争取让非技术背景的听众也能大体听懂。

DApp 为何重要?

我先从 DApp 本身说起,因为来龙去脉很长。最后还是决定简要地谈谈,否则逻辑上不完整。
DApp 是 Decentralized Application 去中心化的互联网应用。例如比特币就是一个 DApp,它是去中心化的价值存储型加密货币。去中心化的概念比较复杂,V 神有篇文章说明了去中心化有架构、治理和逻辑三个维度,大家可以找来看看。
从使用者的角度看,去中心化可以简单理解成,不能被个别或者少数参与者所控制,因此值得信任的应用属性。区块链是实现 DApp 的主流技术手段,或者说区块链是 DApp 的基础设施。
本次分享所说的区块链,如果加不特殊说明,都是指公链。DApp 和普通的互联网应用的差别就在于 D 去中心化。那么去中心化为什么重要?为什么值得众多 IT 互联网从业者参与其中?它是不是个伪需求伪概念?
回答这个问题最清楚的,是 a16z  的合伙人Chirs Dixon,他在 2018 年 2 月发表文章题为《Why Decentralization Matters》,就是去中心化为什么重要。
要理解他的观点,首先要了解什么是网络效应。网络效应是指产品或服务的效用随着用户增长而增加的机制。
例如微信,用得人越多,它的功能就越强大,越不可或缺。互联网应用的核心就是建立并维持网络效应,谷歌、亚马逊、BAT 等巨头的业务,都是建立起了强大的网络效应,使得后来者难以逾越。
Chirs 认为互联网平台要建立网络效应,都是要千方百计的吸引用户、吸引开发者和商家等等。但是在突破了关键规模之后,平台的吸引力越来越强,它的控制力也越来越强。
比如现在做电商,如果不依托于天猫、京东或者微信,几乎不可能成功。因为他们已经形成了巨大的网络效应,用户和商户都被锁定了。互联网平台的运营方都是企业,企业的使命就是利润最大化。
当用户和商户离不开平台的时候,平台跟用户商户之间的关系就就发生变化。我们看上面这张图,平台最开始是吸引用户,形成网络效应之后,就开始尽量从用户头上赚钱。
平台跟开发者、内容创造者和商户之间,也从合作逐步走向竞争。例如大家都知道百度搜索结果不是按信息的真实性和重要性排序,而是谁给的钱多就排在前面。
最早百度广泛联系各家公司,让大家把信息提交给他,方便用户搜索。现在如果不交钱,公司的官网在百度上就搜不到。百度为了赚钱,把病患导流给莆田系医院。但国内的用户明知如此,还是离不开百度,因为百度的数据最多,对用户也最了解,想想是不是很可怕。
DApp 可以改变互联网平台垄断的局面。因为 DApp 是去中心化的,靠公开透明的共识维持的经济体。网络的参与者贡献越大,相应的权利也就越大,但是没有个体能控制全局。
任何参与方要损害其他人的利益,要么是行不通,要么就会引发分叉。DApp可以长期保持开放、公平,所以大家不用担心过河拆桥,所有人都尽自己最大努力参与建设,并获得回报。有点类似于各尽所能、按劳分配的社会理想。
这才是真正的开放网络,是互联网不应忘记的初心。所以众多互联网大咖都对DApp以及实现DApp的区块链技术情有独钟,并寄予厚望。

DApp 发展困境

去中心化应用承载着重塑互联网的伟大理想,但是其发展现状非常窘迫,这个也大家都清楚,我简单提一下。
首先是用户极少,例如预测市场 Auger,DApp 领域的明星项目,融资数千万美元,开发历时三年多,上线之后日活用户几十人,而且 Auger 不是个案。
我们看上方的图,来自 DAppReview,是以太坊 DApp 日活用户的前5名,最高的也只有千用户级,而互联网的顶级应用日活用户可以达到数亿,差距是 5 个数量级。
为什么 DApp 情况如此可怜?主要是因为区块链基础设施不给力,使得DApp 使用门槛高、用户体验差。就好比以太坊是一条村级公路,收费高而且拥堵,当然就没人愿意走。
下方的图展示的是以太坊的利用率,可以看到从 2017 年底到现在,以太坊一直是接近满负荷运转。也就是说 DApp 又慢又贵,但基础设施已经全力以赴了,没有再提升的空间。
在这样的困境下,DApp 要突破关键规模、创造出网络效应、跟中心化互联网应用竞争,是不可能的,所以必须升级区块链基础设施。

又慢又贵的原因——区块链极度冗余结构

DApp 又慢又贵的根源是区块链平台的架构限制。这个架构限制可以简单概括为:区块链是极度冗余的计算架构。
冗余就是重复,让多台计算机重复执行相同的计算、重复存储相同的数据。冗余是有意为之的,不是浪费。适当的冗余在企业计算和互联网都普遍存在。
最典型的是主从结构,两台差不多的计算机一主一备,执行相同的计算、存储相同的数据。主机出现故障,备机迅速顶上。虽然两台机器干了一台的工作,但是提高了系统的可用性。
但为什么说区块链是极度冗余呢?因为区块链把冗余推到了极限,网络中所有的计算机,不论是几百台还是上万台。都执行相同的计算,存储相同的数据。冗余的程度无以复加。极度冗余意味着极度高昂的成本,成本高到什么程度?
V 神给出过估算,就是在以太坊上执行计算或者存储数据,比在商业云平台上完成相同计算或者存储同样的数据,成本高 100 万倍。也就是在普通云服务上花费 100 钱能完成的计算,放到以太坊上去做,需要 1 个亿的成本。所以在考虑什么业务可以做成 DApp,一定要考虑到成本。
不要仅仅为了讲故事圈钱,就把什么阿猫阿狗都放到区块链上来,那是资源的巨大浪费。那么花 100 万倍的成本,能得到什么好处?高可用性当然不在话下。比特币或者以太坊网络,随时都有计算机加入或者退出,对业务毫无影响。
但是高可用性显然是不够的,因为它只需要适度冗余就能实现,不需要极度冗余。极度冗余带给我们的新属性就是去中心化。具体地说,去中心化对用户意味着 trustless、permissionless和censorship ressistancy,就是去信任、无许可和抗审查。
无许可很好理解,任何人想要使用比特币、以太坊,都不需要向别人申请。抗审查也很清楚,没人能阻止你使用区块链。比如维基解密,世界上最强大的国家恨它入骨,欲除之而后快,但是维基解密仍然能获得比特币捐款。
含义比较模糊的是去信任,英文是 trustless、trust free 或者 trust minimal。我认为最准确的说法是 trust minimal 信任最小化。使用去中心化应用,其实隐含了对区块链网络整体的信任。
例如使用比特币和以太坊,就要信任比特币和以太坊不会被 51%攻击。使用 Cosmos 和 Polkadot 就要相信恶意验证人少于 1/3。所以去信任的准确含义是,在信任整个区块链网络的前提下,可以不必信任个别矿工或者验证者,也无需信任交易对手。
对于某个应用,如果用户从去信任、无许可和抗审查这三个方面获得的好处,值得花费 100 万倍的成本,那么这个应用放在区块链上就是合理的。有这样的应用吗?就我自己来看,目前能值这个成本的,只有价值存储一项需求。
著名的比特币最大化主义者 Jimmy Song 说,比特币会成功,而法币和所有的竞争币都会失败。原因是中心化的货币干永远不过去中心化的货币,而去中心化的产品永远干不过中心化的产品。
隐含的逻辑就是,相同的互联网服务产品,成本差 100 万倍,当然干不过。他这个说法是有道理的,但是过于僵化。因为 100 万倍的成本差距不是必然的,是可以改变,可以拉近的。
能不能把 DApp 和中心化互联网应用的成本差距,从 100 万倍拉近到 10 万倍,1 万倍,甚至 1 千倍。同时仍然保持去信任、无许可和抗审查这三大好处。回答是完全可能,只要降低冗余的程度,就能降低成本。方法有三类,也就是区块链扩容的三个思路——代议制、分层和分片。

三类扩容思路 1——代议制

第一个扩容思路——代议制,源于人类的古老政治智慧。即民主是好的,但是全民直接民主效率太低。英国脱欧采用了全民公投的方式来决定,但是显然不能所有的议题都搞全民公投。
代议制是人民选出代表,再由代表来议定法律或者重大决议。代议制提升决策效率有两个原因,第一是参与共识的人数大为减少,第二是代表通常是专职政治家,他们有更多的资源和知识来议定国家大事。
用代议制的方式来做区块链扩容,最典型的是采用 DPoS 共识的 EOS。EOS 通证的持有者选出超级节点,21 个超级节点轮流出块。跟以太坊相比,参与共识的计算机数量下降了 3 个数量级。
而且以太坊的节点计算能力高低不齐,协议参数设定要兼顾低端计算机。而 EOS 超级节点主机硬件配置和网络带宽有同一的高要求。所以毫不奇怪,EOS 能达到数千 tps,远高于以太坊。
EOS 从诞生之日起,就一直处于风口浪尖。加密社区的一部分人严厉地批评 EOS,说它中心化的,甚至认为它根本不算区块链。而支持者认为 EOS的去中心化程度是足够的。用户仍然能够享有去信任、无需许可和抗审查等好处。
那么 EOS 的去中心化程度是否足够呢?我的看法是:有些情况下够,有些情况下不够。取决于是什么应用,谁在使用。
用户和用户差别巨大,只从国籍分,就有美国人、中国人、伊朗人、朝鲜人等等。还有性别、年龄、种族、地域、职业、宗教等等差别。
另外就是一个特定用户,他的需求也是多样化的,例如社交、娱乐、金融、协作等等。大类又分成很多小类,金融里仅仅对货币就有价值存储需求、大额转账需求、小额支付需求等等。
如果把是大部分身家都用加密货币来做长期价值存储,我首选比特币。如果是小额支付,或者打麻将、掷骰子,用 EOS 当然也没问题。在区块链世界,从去中心化程度最高的比特币和以太坊,到中心化程度最低的 EOS 和波场。
可以看成是去中心化谱 decenralization spectrum。每条公链,包括后面重点介绍的 Polkadot 和 Cosmos,都在谱中占据特定位置,都有机会适用于特定需求。不存在 one chain fit all 一链打遍天下的可能性。
做架构设计就是做折中,有所选择必然就有所放弃。本次分享的核心理念,就是未来的区块链世界是异构的、多链共存的。当然,我也不认为需要几百上千条公链,因为合理的可选位置没那么多。在定位大体相似的情况下,网络效应会消灭弱者。

三类扩容思路 2——分层

分层也称为二层扩容或者链下扩容,就是把一部分交易放到在区块链以外执行,同时仍然保障交易安全。分层有状态通道和侧链两类技术。还有一类二层技术,是把计算密集型任务转移到链下执行,这块与分享主题无关,不再提及。
状态通道和侧链是不同的技术隐喻,但是到了实现层面,其实非常相似。由于 Cosmos 和侧链有很深的内在联系,所以我在这里花点时间,讲讲侧链的原理。
要理解侧链,首先要明白 SPV 证明,SPV 是 Simplified Payment Verification 简单支付验证的缩写。为了让计算和存储能力有限的设备能够使用比特币的问题,才有了 SPV,或者叫轻客户端或者轻节点。
手机钱包就是轻客户端,它不必同步全部区块,只需要同步区块头,传输和存储的数据量缩小了 1000 倍。左侧图是 SPV 证明的原理,利用了梅克尔树。看不懂没关系,只要记住梅克尔树是区块链最重要的数据结构。
利用它可以只需存储极少的数据,就可以证明大量的事实曾经发生过,而且属于特定集合。就区块链来说,就是只存储区块头,未来就可以验证交易是否存在于某个区块。
侧链方案就是把主链资产通证锁定,在侧链上对应地创造出通证承兑汇票,汇票交易在侧链执行,在侧链上得到汇票的人可以兑换主链通证。具体来看右图的以太坊 Plasam MVP 侧链方案。
首先要在以太坊主链上部署 Plasma 智能合约,假定有 Alice 和 Bob 两个侧链用户。Alice 发起主链交易把通证存入 Plasma 合约,通证被合约锁定。
侧链的 Operator 发现 Alice 存入了通证,就会在侧链里创建出侧链通证,也就是主链通证的承兑汇票。请注意侧链本也是区块链,它有自己的共识协议和矿工。
在 Plasma MVP 方案中侧链采用的共识是PoA权威证明,就是一个 Operator 说了算,由它记账出块。PoA 当然不是唯一选择,Loom 的 Plasma 侧链采用的 DPoS 共识。
存入之后,Alice 就可以在 Plasma MVP 链使用通证,进行支付或者转账。例如她可以跟 Bob 玩游戏,输赢通证,可能很快就玩了很多局,产生了大量转账交易。侧链交易只需要侧链的节点达成共识。而侧链的规模通常比主链小得多,因此交易执行更快,成本也低。
侧链区块的区块头,都会由 Operator 提交给主链的 Plasma 合约。不论侧链一个区块含有多少笔交易,是 1 千笔还是1万笔,主链只发生了记录区块头一笔交易。所以主链上的 Plasma 合约,相当于是侧链的 SPV 轻节点,它存储了区块头,从而可以验证侧链交易是否存在。
例如 Alice 在侧链上把通证转给了 Bob,Bob 就可以向 Plasma 合约发请求,包含侧链交易的 SPV 证明,表示 Alice 已经把这些通证给我了。
Plasma 合约可以验证转账交易在侧链确实存在,从而满足 Bob 的取款要求。这个例子说明了分层方案如何把大量交易转移到链下执行,或者说转移到二层网络执行。

三类扩容思路 3——分片

第三个扩容思路是分片,原理很简单,就是别让所有的节点都执行所有的交易。把节点分成很多组,或者说分成很多片。多个分片可以并行处理交易,总体的处理能力就提高了。
当然还需要一条特殊的链来看管所有的分片,这条一般称之为主链,它要做很多工作,后面再详细介绍。粗略的解释是,如果没有主链,多个分片之间没有联系,那就是完全独立的多条区块链,跟扩容无关了。
分片扩容的基本思路非常简单,但实际做起来则面临很多复杂难题。为了理解后面要对比分析的几个公链架构,你首先要大概了解这些难题。另外因为这个公链都采用 PoS 共识,所以我们讨论分片难题和解决方法基于 PoS 来讨论。

分片的难题——验证人选择

首先就是分片之后,每个分片都需要一组验证人。大家看一下这张示意图。
如果在单链上,恶意验证人超过一半,可以攻击系统。分片之后,只要在一个分片内占据多数,就可以攻击这个分片。所以片分得越多,攻击成本越低,也就是安全性降低。
解决的方法是,分片的验证人分组不是固定的,而是随机选取,而且每隔一段时间就重新分组。这样恶意的验证人不能事先知道自己被分到哪个组,而贸然发送攻击会受到惩罚,因此系统的安全性就不会随着分片数量上升线性的下降。
验证者随机动态分组的关键,是要有可靠的随机数,随机数一直是计算机科学中复杂而有趣的问题。去中心化地拜占庭容错地产生可靠随机数难度非常大,也是区块链研究的热点问题。

分片的难题——跨片交易完整性

在分片的方案中,每个分片上可以运行一到多个 DApp,不论 DApp 在不在同一分片,都要能互操作。首先要明确什么是跨片互操作?因为分片也都是区块链,所以跨片等同于跨链。
大家知道区块链可以看成是分布式共识维护的状态机,状态机通过交易执行完成状态转移。跨链的互操作应该引发双方的状态转移,也就是两个互操作的链都执行了交易,而且执行交易之后的状态具有一致性。
或者说一个跨链交易要引起两条链乃至多条链的状态改变,而且这些改变要么都成功,要么都不成功,不存在中间状态。这跟企业计算里分布式交易的概念上非常类似。
只不过传统分布式交易的参与者通常是多个数据库,而跨链交易的参与者是多条区块链。非技术背景的同学可能不熟悉状态机和分布式交易的概念。因为跨链交易的概念对理解本次分享的结论很重要,我再用非技术语言解释一下。
假设你要从工行账户转1万块钱到建行账户,这笔转账交易其实就是从工行账户上减掉 1 万,在建行账户增加一万。工行和建行各自都有数据库存储账户余额,那么就要有一个机制,保证两个数据库的操作,一加一减,在任何情况下要么都成功,要么都失败。
如果没有这样的保证,工行账户减掉了,建行账户没加上,你少了 1 万块钱,你肯定不干。如果工行账户没减掉,建行账户加上了,你多了 1 万块,银行肯定不干。
这就叫分布式交易的完整性或者原子性。简单吧?其实做起挺难的,因为不论是工行建行哪家的服务器停电、断网、软件崩溃等等,各种极端条件,都要保证交易完整。在区块链上,转账变成了转通证。
某通证发行在A链上,通过跨链转 10 个通证到B链,跨链交易完成后,A 链上的 10 个通证被冻结了,B 链上多了 10 个通证。这两个状态改变在任何条件下,要么都成功,要么都失败。
由于区块链可能分叉,跨片交易要比传统的分布式交易更复杂。我们看图,如果跨片交易在分片 1 上的部分是在 A 块里被打包,在分片 2 上被 X’ 块打包。两个分片都可能出现分叉,A 块和 X’ 块也就可能成为被废弃的孤块。也就是跨片交易可能部分成功部分失败,完整性被破坏
怎么解决这个问题呢?我们来分析一下,造成跨链交易完整性被破坏的根本原因是,交易的多个部分被打包进区块,但是链可以重组,块可以变成孤块。
说白了就是交易进了区块,但是靠不住,有可能反悔,正式说法是没有明确最终性。最终性finality就是区块必然被包含进区块链。
在比特币区块链上,某个区块后面连的区块越多,它被逆转或者说放弃掉的可能性就越低,但是永远不能 100%确定,所以称为概率最终性或者渐进一致性。解决这个问题的办法就是,要有机制让区块具有明确的最终性,不能含糊。

分片的难题——最终性 VS 活性

finalize 就是使区块具有最终性,我翻译成敲定。要使区块具有最终性。简洁的方法就是出块即敲定。Cosmos 的 Tentermint 共识就是这样。但是这个做法在特殊情况会出问题。
我们看图,某条 Tendermint 共识的区块链原本正常出口。突然海底光缆断了,互联网被分成了两部分。两部分各自包含一般验证人节点。Tentermint 共识要求收集到 2/3 以上的验证人签名才能出块。
被断开后,两部分网络都最多收集到一半验证人签名,所以出块停止了,或者说区块链丧失了活性 liveness。有人认为这可以容忍,本来就是特殊情况嘛,那就先停下来,等网络恢复正常再继续工作。
海底光缆断了,上网、打电话、视频会议都受影响,凭什么区块链就不能暂停呢?还有人认为停止出块不可接受,要始终保持区块链的活性。那怎么办呢?办法就是把出块和敲定分开,也称为混合共识。
在刚才说的网络中断情况,在两个分开的网络,节点可以继续出块,但是没有足够的验证人参与进来,所以不能敲定。等网络恢复了,再决定哪些块被敲定,从而活性和最终性兼得。
而且混合共识可以让个别节点轮番快速出块,于此同时,敲定过程可以慢一些,让大量节点参与进来,确保去中心化,提高攻击和共谋的难度,也就是保障了安全。所以混合共识也兼顾了性能和安全。以太坊 2.0 和 Polkadot 都采用混合共识。

分片的难题——交易有效性

还有个分片难题是交易有效性。交易有效性问题就是防止无效交易进入区块,成为区块链维护的历史真相的一部分。
举比特币的例子,假如我是超级大矿工,掌握了大部分算力。我想伪造一笔交易,把别人地址上的比特币转给我,能不能做到呢?答案是做不到。
因为这笔交易没有地址对应的私钥签名,是无效的,包含这笔交易的区块也是无效的,不会被其他节点所接受。即便我掌握了大部分算力,可以挖出最长的链,但也只是构建了一个很长的分叉。
众多的比特币钱包、交易所都不会认可我这个分叉。所以 51%攻击,并不能把谁的 btc 偷走,或者凭空创造出比特币。最多是双花攻击,双化不展开谈了。总而言之,比特币网络不存在交易有效性问题。
那么这样一个十年前就被完美解决的问题,怎么又会出现呢?原因是 btc 等公链的节点都拥有全部数据,因此能完全独立地验证交易有效性。现在变成了多个分片,节点只存储部分数据,也就无法独立验证交易有效性。
我们看左侧的图,有两个分片,分片 1 已经被恶意的验证人所控制,在 B 区块里打包了无效交易,例如给自己的地址上凭空创造了很多通证。在下一个区块 C,攻击者发起跨片交易,要把通证转到分片 2 上的 DApp,可能是去中心化交易所。分片 2 看到的 C 区块里面的交易都没有问题,而且分片 2 也没有 C 区块之前的数据,所以无法验证交易有效性。
下面我们介绍一个在分片环境下解决交易有效性的方案,叫举报奖励。其实还有别的方案,但跟主题无关,就略去不提。
看右侧图,分片 1 虽然被恶意验证人控制了,但是还有至少一个诚实的验证人。分片 2 不能验证跨链交易的有效性,就选择相信分片 1,打包了跨链交易。这时候分片 1 里的诚实节点可以要跳出来举报,说区块 B 是非法的,我有证据。
系统接受了举报,就会惩罚分片1里的恶意验证人,没收他们质押的通证,并向举报者提供奖励。所以为什么有的区块链,验证人要收回质押的通证,都需要等几个月。主要的原因就是给举报和证实举报留出足够的时间。
以上我们介绍了四个分片的难题,和相应的解决方案。其实分片扩容的难题不止这些,限于时间,就不再列举了。

以太坊正朔——Serenity

下一代以太坊的lay1扩容思路就是分片。关于下一代以太坊,信息很混乱,连名称都不统一,有以太坊 2.0、Serenity、Shasper、Casper 以太坊等,我们统一称为 Serenity。
大家看 Serenity 架构图,是台湾资深以太坊研究员王韶为女士制作的。从上往下看,最上面是 PoW 主链,也就是目前运行的以太坊。Serenity 不会取代掉 PoW 链,而是以侧链的方式上线部署。
但是长期而言,Serenity 并不依赖 Pow 链,PoW 下面的三层都属于
Serenity,而且恰好对应 Serenity 演进的三个阶段。
首先是 Beacon Chain 信标链,主要功能是管理验证人。信标链上线后,如果希望成为 Serenity 的验证人,就把 eth 从 Pow 链转入信标链。还是用侧链的方式,信标链在 PoW 主链上部署智能合约。
eth 转入信标链是单向的,不能再从信标链转回 PoW 链。在信标链上拥有 eth,进行质押并运行节点,就可以成为验证人。为了达到充分的去中心化,做 Serenity 验证人的门槛很低,只需要质押 32 个 ETH,验证人集合会很大,可以达到几万到几十万这个数量级。
信标链还负责产生随机数,用于验证人分组和出块人选择。信标链执行 PoS 共识协议,包括它自己的共识和所有分片链的共识,对验证人进行奖励和惩罚。还有就是作为跨片交易的中转站。信标链预计在今年年底或明年年初上线。
目前有多个团队在进行信标链节点软件开发,有几个团队已经部署了测试网。下一阶段会部署公共的、长期运行的测试网,把各团队开发的节点放在一起进行测试。
信标链往下是多条分片链,图上画的是 100个 分片。分片链被看成 Serenity 的数据层,负责存储交易数据,维护数据的一致性、可用性还有活性,也就是确保总是能出块,不会被锁住。分片链的上线时间还不确定。
分片链的下方是虚拟机,虚拟机负责执行智能合约和转账交易,改变状态,也就是对分片链数据进行读写。Serenity 很重要的设计决策是把数据层分片链和逻辑执行引擎虚拟机解耦。
解耦带来了很多好处,例如可以分头开发,单独上线或升级等等。Serenty 虚拟机将用 wasm,可以提高性能,并支持多种编程语言。
Serenity 如何前面所说的四个分片难题呢?首先是在信标链上管理验证人池,为每个分片链随机指定一组验证人。采用混合共识,验证人轮流出块,采 Casper FFG 敲定最终性。用举报奖励方法保障交易有效性。

Gavin Wood的新征程——Polkadot