背景
此前区块链的发展,一直以来都在开启公链的军备竞赛,新公链都旨在探索更快的性能以及更低的成本,从而能够支持区块链可能的大规模商用。然而还有一些团队,或许想要做一条独自运行的区块链,但是构建一条区块链并维护它,其难度非常高,并且团队也很难有额外的精力去做好原本想做的事情上。但是行业的发展不能因为做链的难度高而受到阻碍,因此像波卡或者Cosmos这样的Layer0项目便应运而生。
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年初,cosmos2.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框架的魅力所在吧。