背景
此前区块链的发展,一直以来都在开启公链的军备竞赛,新公链都旨在探索更快的性能以及更低的成本,从而能够支持区块链可能的大规模商用。然而还有一些团队,或许想要做一条独自运行的区块链,但是构建一条区块链并维护它,其难度非常高,并且团队也很难有额外的精力去做好原本想做的事情上。但是行业的发展不能因为做链的难度高而受到阻碍,因此像波卡或者 Cosmos 这样的 Layer 0 项目便应运而生。
Substrate 是一个开源、通用的区块链开发框架,提供了区块链开发所需的底层公共组件,可以让普通的开发者快速地开发一条区块链应用,来验证自己的想法。Substrate 在设计和开发过程中,一个首要的考量是保证软件的可扩展性。Parity 的工程师在开发的时候考虑了多种可能的使用场景,比如各种类型的公链、私链、联盟链、跨链等等。Substrate 还支持 WASM 智能合约和可插拔式共识机制,并且与波卡(Polkadot)网络兼容。
Cosmos SDK 是一个开源的框架,用于构建多资产公共权益证明(PoS)区块链,如 Cosmos Hub,以及许可的权威证明(PoA)区块链。使用 Cosmos SDK 构建的区块链通常被称为应用特定区块链。Cosmos SDK 的目标是让开发者能够轻松地从零开始创建自定义区块链,这些区块链可以与其他区块链原生地互操作。我们将 Cosmos SDK 视为在 CometBFT 之上构建安全区块链应用的 npm-like 框架。
基于 SDK 的区块链是由可组合模块构建的,其中大部分模块都是开源的,任何开发者都可以使用。任何人都可以为 Cosmos SDK 创建模块,并且将已经构建好的模块集成到你的区块链应用中就像导入它们一样简单。更重要的是,Cosmos SDK 是一个基于能力的系统,它允许开发者更好地推理模块之间交互的安全性。
关于 Substrate 框架与 Cosmos SDK 我们可以通过一个对比图,简单的对他们有个基本的了解:
但是乍一看两者所做的事情是类似的,都是帮助开发者能快速做一条链出来,并且符合当下比较热门的概念——模块化区块链,这不禁让许多人产生好奇,两者对比起来究竟如何。而这样的疑问也最终在波卡论坛上被讨论起来。一名开发者提出了这样相对具体的问题:
对于 Cosmos SDK 和 Substrate,能从技术层面上进行比较吗?更具体地说:
1.相比 Go,使用 Rust 是否真的有优势?
2.哪个平台在工具/库/生态系统等方面更优越?
3.使用 Substrate 还是 Cosmos 进行开发更“容易”?(我知道这是主观的,但还是想听听一些意见)
4.哪个更容易学习?
5.两者都可以实现相同的功能吗?(比如说,我想创建一个独立的 DeFi 区块链,为什么会选择其中一个而不是另一个?)
而 Parity 的软件工程主管 Shawn Tabrizi,主要负责改善 Substrate 生态系统中的开发者体验,也参与了 Polkadot 的核心软件开发,为 Polkadot 提供了共享安全性、跨链通信和平行链插槽等功能。由他来回答这个问题,是恰如其分的。
他是这样回答的:
首先,在理解你上述一些问题的出发点的同时,我建议你将问题分为关于平台核心支柱的问题,即那些无法改变的事物,以及更多短暂性质的问题。
例如:我认为目前可以说 Cosmos 可能是更“容易”构建和学习的平台。这很大程度上是因为它们使用 Go 语言,这对新开发者来说似乎更友好。当 Cosmos 开始启动链时,到 Polkadot 开始启动平行链时,Cosmos 提前了 1-2 年,我认为指出这一点是公平的。最后,我认为他们的一些事物更简单,因为他们更专注于创建以通证/DeFi 为中心的区块链,而不是以通用计算为中心的区块链,但这是我超出了真正了解的范围。
关于这些问题,我想指出的是,尽管 Cosmos 可能更容易学习,但我们绝对在竭尽所能去改变这一点,我希望构建不可阻挡的去中心化应用程序的决策不是基于“今天哪个更容易”。相反,在选择要在其上构建业务的平台时,你需要选择在技术和哲学上做出正确决策的平台。
在这种情况下,我认为这是我们会主张 Polkadot 相较于所有其他新一代区块链平台具有重大优势的地方。
对于计算扩展性,我们通过分片实现执行的并行化(这在今天的生产中已经在运行;不是未来路线图的一部分)。
对于资源/经济扩展性,我们使用中继链提供的共享安全性。
对于活跃性,我们将 BABE 用于区块生产,将 GRANDPA 用于最终确定性。
为了未来的兼容性和性能,我们将 Wasm 作为所有状态转换函数的核心。
为了让我们的所有软件都易于使用并提高性能,我们使用 Rust。
为了开发敏捷性,我们将链上治理和升级作为我们技术的核心。
等等...
通过查看 NFT 发布、比较总价值锁定(TVL)或者阅读白皮书,这些事物的重要性并不容易理解。这些决策会随着链产生的每个区块而累积。这些决策的影响将在很多年里。
另外,关于 Cosmos 的链间安全问题,Shawn 补充到:
我认为 Cosmos 的“链间安全”试图听起来像共享安全,但实际上它们并不相同。像共享安全这样的东西无法在现有协议中进行回溯。支持共享安全需要从底层设计,从 Wasm 作为状态转换函数的共享语言,到平行链协议和 PoV/PVF(有效性证明、平行链验证功能),以及中继链本身的存在。
在这里并没有说什么不好的,因为这些都很技术性,但如果你认为 Cosmos 可以简单地“添加共享安全”到他们的生态系统中,这暗示着对共享安全是什么以及 Polkadot 如何提供它,没有充分深入的理解。我们应该在这方面做得更好,但是只要我们尽力解释我们这边的情况,其他团队很容易用“话语”来假装做同样的事情。
这和那些称自己为去中心化、开放、安全、容错等的链是一样的……用这些词描述任何东西很容易。让事物真正成为这些词则很困难。
以下是我打算发表的一篇讨论 Polkadot 共享安全和 Cosmos 所谈论的构建之间差异的 Twitter 帖子的初稿。由于 Cosmos 方面的提案被拒绝了 34 ,我选择不发布任何内容,而不是与过去的幽灵作斗争。(注:Shawn 回答该问题时,cosmos 的 2.0 提案刚被拒绝,不过在 2023 年初,cosmos 2.0 被正式通过了)
链间安全 Twitter 帖子(初稿)
在 Polkadot 白皮书强调共享安全的重要性近 6 年之后,Cosmos Hub 正在试图效仿。然而,不像 Polkadot,Cosmos 试图在事实之后引导这些决策,并将其应用到最终未能很好地支持它的协议上。让我们深入了解。
自 2016 年 11 月的原始白皮书首次提交以来,共享安全一直是 Polkadot 设计的关键部分。当时,它被称为“池化安全性”,但自那时起一直是指导每一个架构决策的指导原则。
图中内容:
换句话说,Polkadot 可以被认为是相当于一组独立链(例如,包含以太坊、以太坊经典、Namecoin 和比特币的集合),除了以下两个非常重要的点:
1.池化安全性;
2.无需信任的链间可交易性。正是这些点使我们认为 Polkadot 具有“可扩展性”。从原理上讲,要在 Polkadot 上部署的问题可以在大量平行链上大规模并行化。由于每个平行链的所有方面都可以由 Polkadot 网络的不同部分并行进行,因此系统具有一定的扩展能力。
Cosmos Hub 发布了一篇新的关于“Atom 2.0 ”的白皮书,这是他们现有协议的扩展,其中一个新原则是“链间安全”。Cosmos 团队将此功能定位为类似于 Polkadot 提供的共享安全,但这两种技术实际上截然不同。
图中内容:
链间安全:安全性是为 Cosmos 网络构建关键组件所必需的基础,Cosmos Hub 的链间安全环境将得到丰富的新功能,使其更加实用、高效和协同。
那么,Cosmos 上的链间安全将如何工作?Polkadot 上的共享安全如何工作?这里的关键区别是什么,它们之间的真正比较如何?
Cosmos 生态系统由主权链组成,通常使用 Cosmos SDK 构建。链间安全建议 Cosmos Hub 的验证者将被治理强制参与其他链的验证。为此,Cosmos Hub 的验证者需要为将提供“链间安全”的每个链运行额外的可执行二进制文件。如果未能履行职责,他们押注的 ATOM 通证将被削减。问题在于,这种设计不具备可扩展性,并且无法像 Cosmos 生态系统目前的设计那样具备可扩展性。
想象一下,如果 Hub 想要向其他 100 条链提供安全保障,那么节点运营方现在将需要运行 100 条区块链,可能需要在 100 台独立的机器上运行,以防止竞争性计算资源。这种设计还增加了验证者受到恶意二进制升级攻击的风险。对于数百个团队的软件很难建立信任,你需要运行所有这些软件,而且所有这些软件都可能针对你在这些机器上存储的敏感密钥。
另一方面,Polkadot 从一开始就设计了共享安全,并使用元协议在单个生态系统中以真正可扩展且安全的方式抽象运行多个区块链。这个元协议就是 Wasm。
你可以将 Polkadot 兼容的区块链看作两部分:客户端和 Runtime。每个客户端充当 Wasm 执行器,区块链运行时(即状态转换功能)是一个可以在安全沙盒中执行的 Wasm 二进制大对象(blob)。
你可以将其与游戏机进行比较,游戏机被设计成可以玩许多不同的游戏。就像 Polkadot 客户端一样,游戏机只是运行游戏的主机。借助我们的区块链开发 SDK(软件开发工具包)Substrate,我们允许您轻松设计与此游戏机兼容的“游戏”(Runtime)。
在这种背景下,你可以将 Polkadot 二进制文件视为“一体机”。Polkadot 验证者运行一个可执行任何平行链 Wasm Runtime 的可执行文件。这意味着,单个 Polkadot 二进制文件可以实时将自己变成 Polkadot 生态系统中的任何区块链。
Polkadot 生态系统的验证者在任何时候只扮演一个角色。从我们的验证者池中,一些被选为验证中继链,其余的被分配到 Polkadot 同时保护的许多平行链中。这种选择过程是随机的,并随着时间的推移而改变,抵制来自恶意行为者子集的串通可能性。
这意味着整个 Polkadot 生态系统及其广泛的应用特定区块链可以使用单个经过审查的可执行文件来确保安全。然后,所有其他区块链的状态转换功能都运行在一个沙盒中,使网络和节点运营方也能保持安全。
但等等……还有更多。
Cosmos 终于弄清楚了 Polkadot 今天已经存在的合并经济安全的大致基本原理,但它完全忽略了多链安全中心的更深层次作用。
Polkadot 中继链的一个关键方面是,它跟踪所有平行链的状态,并将它们保持同步。这意味着在 Polkadot 上确认的区块暗示了与所有平行链相同高度的所有链之间互动的终结。这是白皮书中提到的第二点,即无需信任的链间可交易性。
这意味着在 Polkadot 上的共享安全和最终确定性扩展到链之间的关系,而 Cosmos 的链间安全只能保护单个链。这也是 XCMP 相对于 IBC 作为多链消息传递协议具有的根本优势。
总之,Cosmos 在链间安全方面朝着正确的哲学方向发展,但这种哲学在事后几乎不可能设计进去。过去 6 年来,Polkadot 一直秉承这些原则进行构建。
未来将是多链的,而 Polkadot 在设计上最适合支持这个未来。
小结
Shawn 的解答充满了许多技术上的解答,也许理解起来有些难度,简单来说,Shawn 想要表达的是以下几个意思:
1.Shawn 承认 Cosmos 可能更容易学习和构建,部分原因是它使用了对新开发者更友好的 Go 语言。但是,他认为在选择平台时,关键是选择在技术和哲学上做出正确决策的平台,而不仅仅是看哪个更容易上手。另外,讨论两者的差异点还需要知道一个前提是,Cosmos 比波卡更早运行了 1-2 年。
2.他认为 Polkadot 在许多方面具有优势,包括计算扩展性、资源/经济扩展性、活跃性、未来兼容性和性能、易用性以及开发敏捷性。这些优势可能不容易从表面现象中看出,但会随着时间的推移产生影响。
3.从 2016 年 11 月的原始白皮书提交以来,共享安全一直是 Polkadot 设计的关键部分,而 Cosmos Hub 在发布新的“Atom 2.0 ”白皮书后才开始效仿。
4.Cosmos 上的链间安全与 Polkadot 的共享安全实际上截然不同。Cosmos 的设计不具备可扩展性,因为验证者需要为提供链间安全的每个链运行额外的可执行二进制文件,可能需要在许多独立的机器上运行。这种设计还增加了验证者受到恶意二进制升级攻击的风险。
5.Polkadot 从一开始就设计了共享安全,并使用元协议 Wasm 在单个生态系统中以真正可扩展且安全的方式抽象运行多个区块链。验证者在任何时候只扮演一个角色,通过一个经过审查的可执行文件来确保安全。所有其他区块链的状态转换功能都运行在一个沙盒中,使网络和节点运营方也能保持安全。
6.Polkadot 上的共享安全和最终确定性扩展到链之间的关系,而 Cosmos 的链间安全只能保护单个链。这也是 XCMP 相对于 IBC 作为多链消息传递协议具有的根本优势。
总之,尽管 Cosmos 在链间安全方面朝着正确的哲学方向发展,但这种哲学在事后几乎不可能设计进去。过去 6 年来,Polkadot 在最开始设计上就考虑了链间安全性并一直秉承这些原则进行构建。未来将是多链的,而 Polkadot 在设计上最适合支持这个未来。
后记
似乎看起来从技术层面,Substrate 框架有其独有的技术优势,而另一方面,即使 Cosmos 实现了其 2.0 的链间安全,但是由于该功能是在事后进行的设计,并不能完全达到像波卡那种一开始设计就考虑到所实现的安全程度。那么,Substrate 框架与波卡必然在解决某些问题领域属于独一档,一定有其相匹配的市场。就好比苹果严格的要求和相对较高的门槛,相比于更开放但门槛较低的安卓依然有其优势。
随着 Celestia 模块化公链,将模块化一词带入人们的视野中,OP Stack 和 BASE 链将模块化进一步炒热,我们基本可以预见到模块化区块链是一个不可逆的趋势。许多项目将会根据不同解决方案所带来的不同效果,选择将自身的项目解耦,并分别适配不同的解决方案,从而实现自身项目获得更加灵活的发展。
而 Substrate 框架以及波卡生态也一定会成为那些对于安全性和开发灵活性有需求的团队的首要选择,至少纵观波卡生态的许多去中心化基础设施类的项目,都能够灵活的修改自身项目的共识机制或者其他重要的部分,让自身能够快速构建链的同时,又符合自己对于项目在技术上的独特需求。而这或许就是 Substrate 框架的魅力所在吧。