密码极客 | 国内最权威的区块链技术创投社群

深度对比Cosmos与Polkadot

江鹏江鹏 2019-06-18 90 次 收藏0

作为跨链的头部项目,cosmos和polkadot可算是人尽皆知。但是有多少人真正读了他们的白皮书呢?我觉得不多,更不用提比较他们两个的相同与不同之处。本文主要会比较整两个项目的优缺点,并使稍微评论一下(夹带私货)跨连作为一个新兴的区块链扩容解决方案的可行性。

在我们开始讨论跨连之前,我们得稍微考略一下为什么现在还要从底层搞新的区块链项目?讲道理现在各种主链满天飞,随便报一个大腿不好吗?答案是新项目可能需要更大的灵活性。举个例子,如果一个项目想部署一个特殊的hash function,他选择了在以太坊上搞,则这个hash function可能会让项目组花一大笔钱,因为在EVM上跑智能合约得花gas啊。第二个原因是主权,或者自主权,一个项目在以太坊上跑就意味着要遵守以太坊的治理方法,出块时间,gas的费用,改变世界状态的决策等都不受项目的控制,这将会大大影响这个项目用户的体验程度。相对来说,在以太坊上部署项目也有好的一面,就是不同项目之间比较好沟通,结算也可以用以太币。

这就给cosmos和polkadot想象的空间了,为什么不做一个及灵活又有自主权,还能享受到在同一个平台上搭建项目的好处(好沟通好结算)的项目呢?跨链的想法就孕育而生了,值得探讨的是,这种跨链技术并不是最近的新技术,cosmos从2014年就开始孕育了,那个时候还叫tendermint,是一个协议层,这几年他们在这个协议层上盖了一个应用层,就是cosmos hub,一个中继站类型的应用层,所有的链,不管POS还是POW都可以和这个中继站连接后,与其他的链进行沟通(转币),这个交互式沟通的过程,由他们创造的IBC(Inter-Blockchain Communication)协议进行执行。这个IBC可以看作为cosmos区块链的TCP/IP协议。然后IRIS也搞了个类似的中继站叫IRISnet,就是我们知道的iris币。所有的其他链他们叫做zone。中继站则叫hub。这个叫法其实非常具有欺骗性。在cosmos的白皮书里,zone其实就是shard(分片),zone里面的验证者其实就是shard里面的node。而且cosmos hub其实跟zone没啥区别(除了叫法),在cosmos白皮书里,cosmos的第一个zone,就是cosmos hub。这样cosmos就可以理解为是一个tendermint披着一个cosmos hub的外衣去忽悠一堆其他的公链和他相连达到可以让现有的公链互相沟通。而cosmos自己也会推广他的sdk让更多的人用tendermint作为共识协议层构建自己个公链。

polkadot大概也是一个意思,只是相对cosmos设计上非常的繁琐,除了常见的proposer和validator,polkadot还采用了钓鱼人和收集人的理念。我个人觉得这种设计有点博傻的感觉 - 本质上polkadot还是想用制度来解决技术问题。

如果嫌上图看着费劲可以看下图:

polkadot至少在命名上比cosmos要良心,用了中继链和平行链的方式解释,相对与cosmos的藏着掖着的方式敞亮不少。基本上polkadot比cosmos要更严格一些,灵活度更低一些但是对于项目的要求也低,galvin wood曾经演示用polkadot的substrate花了一个小时写了个公链出来。如果需要做一个类比的话,cosmos类似于wordpress想要针对的用户,而polkadot类似于wix想要针对的用户。polkadot上,中继链维护者整体世界状态,平行链之间可以不单单交互币,还可以(在未来的某个时间polkadot终于攻破技术难题后)交互信息。

做了对俩那个项目的基本介绍后,我们可以对这两个项目进行一些具体的比较,主要有五点:

安全性

polkadot和cosmos在本地与整体的安全性上有着不同的模式:polkadot的平行链和中继链有着自己的state machine(如下图),自己的规矩和自己出自己的本地块(collector)。

我们可以看到,两笔转账分别在自己的平行链上做了一次验证,然后这个验证又被中继链再验证了一次。我们可以认为每一个平行链都是一个独立的整体(state machine),每个整体可以制定自己的共识协议,特殊的一些功能,转账费用等等。在polkadot的世界里,所有的平行链都是中继链的孙子,中继链负责维护一个整体的world state,这个world state就是所有的平链的总和。中继链的共识协议叫GRANDPA,主要目的就是迅速二次验证所有平行链的验证。这样我们可以认为polkadot的安全模式是一种“共享安全”:中继链上会有大量的验证者(1000多个),而平行链上,由于每个平行链的大小与共识方式不同,很可能会出现验证者数量参差不齐的现象。当这些平行链被二次验证的时候,他们其实等于增强了安全等级(共享了中继链的安全性)。

我们必须指出,这种设定虽然降低了平行链的门槛,但是让中继链有最后的话语(验证)权的结果是中继链对于平行链的world state有最后的决定权。举个例子,中继链上的验证者们可以出于某种原因不停的否定一条平行链上的验证,这样,这条平行链基本就是废了,因为不能再出块了啊,而这条链也自然的和整体world state脱节了。这种验证者作恶的方法(共谋)可以被调度的模式解决,polkadot的做法是不让验证者过长时间的验证一条平行链,这样就可以降低共谋的验证者对一条平行链的“攻击”。polkadot同时也发明了验证者的验证者 - 钓鱼人。他们的职责是去钓鱼执法看看中继链的验证者们是不是在好好工作。

cosmos的网路结构和polkadot截然不同,如下图:

cosmos不需要中继链来提供最后的安全保障,每一个“zone”(也就是分片)负责自己的安全。这样每个分片有自己的共识协议和验证者,这些验证者负责维护这个分片的安全性。所有的zone会和hub连接作为跨练沟通(其实只能实现转账,据说后续能实现跨链沟通)的桥梁。我们不难看出,cosmos与polkadot的最大区别是zone/平行链的验证者是否对这条链的最终安全性负责,cosmos是,polkadot不是。这样cosmos的门槛会高一些,zone链需要找到自己的(去中心化)验证者 - 比如币安链,他们为了达到对自己链的最大控制与安全性,他们设立了自己的交易认证节点(11个)。这些节点只对币安链的安全负责。想一想如果币安链建在了polkadot上,这画面太美我不敢想。

我们需要反思的是,跨练是否是一个伪需求?以币安为例,虽然建在了cosmos上,它和其他链的联系除了转账貌似也没有什么其他需求了。如果我们考虑到其他方面的应用比如社交软件,如果连转账这种东西都不是特别需要的话,是什么动力促使着这些链都要和cosmos hub连接?我觉得很简单的例子就是苹果os系统与安卓系统,一个是封闭的,一个是开放的,但是苹果混的并不差啊,自己的平台强大的话,就不需要考虑接入到一个“大家庭”里面,反而是很多“弱鸡”需要抱团取暖。但是1000只弱鸡真的能打败一个强者吗?也不好说,我只能说一个弱鸡单挑一个强者肯定是没戏的,但是一群没准呢?币圈演化到现在我们可以看到大批技术上已经被淘汰的链,这些链如果需要自救则cosmos这样的跨链很可能就是最后的救命稻草,毕竟在币圈,是金融推动创新,而不是创新推动金融;所以我们很可能看到跨链一时爽,一直跨链一直爽的现象。

治理机制与会员制

polkadot目前的估算是可以扩展到50-200个平行链:

上面是WEB3对平行链的解释文件。没解释的很清楚,我的感觉是根据每一个平行连上需要认证的节点数量,平行链的总数量会有调节,比如平行链上需要的节点数量多,则平行链总数量下降。

上图是WEB3对平行链的租赁解释,基本上就是说资源有限,所以一开始的平行链会以拍卖的形式做,后续是以租赁的形式维护。这玩意我得吐槽一下,搞来搞去别又搞出一个以太坊模式 - 平行链的维护成本太高以至于dapp完全没有和传统互联网项目竞争的优势;如果价格太高,则一开始连接polkadot的商户(链)则不会太多,这样跨链的意义是是什么?说好的万链归一呢?另外这拍卖的模式我咋想到了RSK(DNS拍卖,也不知道现在怎么样了)... 我们不难看出这种模式只有polkadot是受益者,因为拍卖和后续租赁需要抵押dot代币。

cosmos没有像polkadot这样严格的会员制,任何人可以在cosmos的旗下建立自己的zone或者hub。zone就是愿意参加的公链,hub就是愿意被各种公链“插”的公链。这种只“插”hub的模式的优势是降低了不必要的跨练连接:

不难看出,左边的模式更费时费力。我们不难用permissioned和permissionless来对比polkadot和cosmos。在跨链技术里,polkadot更像是联盟链,而cosmos更像是公链。但是在代币模式里,我们不看发现dot比atom貌似更有用一些,但是这个有用是要建立在polkadot能一炮而红的前提下,不然会像rsk的rif一样凉得很快。

抛开会员制的不同,两个项目对于链上治理的方式也不同。简单来讲,polkadot上,谁的dot多,就得听谁的:

这个是galvin wood大佬亲自说的,我截了个图“谁的币多,这个网路就得听谁的”。polkadot同时也引进了议会制来代表被动投票者们 - 一开始6个人,然后每两周增加一个人,直到议会达到24个人满员。每个“议员”是通过选举当选的,这个选举机制我们现在还不知道。议员的职责与权力是可以更改中继链的工作模式 - 比如出块时间,出块奖励与链上会员制度等。需要注意的是,议员并不具备踢掉某个会员(平行链的操作者)的资格,他们只能更改会员准入制等治理方面的细节。

cosmos在治理上并没有什么规则,每一个zone和hub有着自己的治理规则。并不像polkadot有一个中继链统领所有的平行链,cosmos的世界里没有这么一个中央掌控系统。所以现在很多人在讨论cosmos的治理模型是,说的其实是cosmos hub的治理模型,但是cosmos hub本质上也是一个zone而已。cosmos hub的治理模型类似于polkadot,也是谁币多谁说了算。cosmos hub允许每一个zone给hub发一个投票请求,然后每一个atom的持有者可以对这个请求进行投票:

下图是cosmos的投票机制:

第一步:充值

每一次的投票申请需要512个atom在两周内充值到系统。任何人都可以为了表示对投票的认可去充值,这就意味着申请的提交者不需要自己花这份钱。充值的目的是为了防止恶意提交巨量申请。充值人可以在两周后赎回自己的atom。

第二部:投票

atom的持有者可以在开放投票后对申请进行投票。

第三部:唱票

唱票需要满足三个条件:

Quorum(法定人数):超过40%的人最终进行了投票

Threshold(投票界限):刨去弃权的。超过50%的人进行了Yes/No的选择

Veto(否决权):少于33.4%的投票者进行了No with Veto的投票(否决反对,或者叫实名反对更容易理解一些)

第四部:实施申请诉求

软件对验证者进行升级包含这次通过投票的额申请

跨练通信(IBC/ICMP)

Polkadot所使用的跨连通信允许arbitrary message跨练沟通。这意味着一个平行链可以对另外一个平行链发起智能合约(call smart contract),达到不光是跨链转账(cosmos能干的),还能进行跨连通信(cosmos说我虽然不能干,但是不影响我说我把这个放到之后的路线图里)。

对于跨连通信来说,最大的痛点并不是通信本身,而是如何应对在一条链发出信息后忽然分叉了的情况,不管是hub还是中继链,如何识别并剔除分叉链的信息由于两条链的不同设计而不同。polkadot的跨连通信机制叫ICMP(inter blockchain messaging among parachains) ,他有两套机制来避免上述的痛点:

通过中继链的二次验证达到共享安全等级的模式,任何平行连的安全系数应该是相等的,自然不同的链可以相互信任对方的信息,因为如果一个平行链除了安全问题,另外一个平行链不应该幸灾乐祸,因为这条链大概率也正在出现安全问题。

举个例子,如果我们拿以太坊和一个归零币(比如GEMS,GOT啥的)来比较,如果这两个链在polkadot上要进行信息交互,我们需要锁定一些eth,并在gems网络上发行一些eth-gems币。但是因为gems是一个归零币,没啥验证者也没啥安全性,攻击者可以51%攻击并解锁更多的eth在以太网络上。因此,我们很难去让一个高安全系数的链去信任一个低安全系数的链,并在这条链上做币/信息的交互。因此,polkadot通过拉平所有人的安全系数,解决了这种不平等安全系数带来的对跨连通信不信任的心态。但是这种方法带来的弊端是中继链的压力变得很大,它是整个网络安全的最后防线,为了站好最后一班岗,我们前文中提到,中继链必须不停的把它的验证节点随机的安插到不同的平行链上去二次验证。这就造成了“数据可调度性问题”就是当随机安插的速度接近于无限的时候,则所有的验证节点会全部停摆,因为将没有一个验证节点有时间可以下载完当前平行链的world state。虽然这是一个极端的猜想,但是不难想象,当每个平行链的区块链数据越来越的的时候,中继链上的验证节点的压力就会越大,因为每次同步都要下载之前所有的区块信息,则会出现两个问题:验证节点不赚钱了,因为每次被分配到新的平行链后都得等一段时间同步降低了工作效率;单一时段的可用验证节点会越来越少,因为很可能出现一部分节点都在同步平行链。目前来讲,polkadot在这方面是无解的,整个团队还在想解决方案。我其实得在这里给我们国产项目Ultrain超脑打一个call,他主链(中继链)也对侧链(平行链)的验证者有一个类似的随机调度模式,“数据可调动性问题”他们已经解决了并平稳运行半年多了。他们的做法是:

polkadot第二个做法是引入钓鱼人(赏金猎人)机制。目的是防止验证人在平行链上出错块(invalid block)。如果这种情况发生,钓鱼人会向中继链发送一个作恶验证,然后由中继链进行对整个world state的回滚(中继链和所有的平行链的状态一起回滚,可谓开创区块链连坐制的先河)。在这方面,polkadot和以太坊我觉得在某种意识形态上很相似,以太坊的“连坐制”是和整网算例挂钩的,cryptokitties导致全网堵塞,那不管你是哪个八杆子打不着的没人用的dapp跟着cryptokitties一起堵;反之polkadot是“安全性”的连坐制。

对于cosmos,因为构成zone的链本身的验证人负责了这条链的安全性,所以链与链之间是没有像polkadot这种“连坐制”的联系。即使有链的内部发生了“动乱”,这并不影响其他链的运行与安全性。所以在cosmos的世界里,我们会看到有一些链内部是由共谋的验证者在作恶。在实际运行中,我们会看到一个zone会连接到hub上(做信息转送到其他的链上),然后由hub来验证另外一个zone上的验证者是否可信。之后这个zone才会发送信息到另外一个zone。这听上去感觉会很繁琐,但是实际操作中,我们可能会看到知名大机构在做某链的验证人(一般大机构会把所有有名的POS的验证人都占上坑),这样虽然不大清楚这条链的具体情况,信息发送人可能会根据知名大机构的名声选择相信某条链。这其实又和polkadot有某种相似 - 靠制度而不是靠数学算法进行治理,我个人观点是这种方法早晚会出事。但是上述问题本身又不是个问题,因为cosmos的设计的结构其实避免了一条链可以“腐蚀”其他链的现象:

我们用这个例子来说明一下,假设现在又一条归零链,上面有一些归零币。这个链和其他三条链a,b,c 都和cosmos hub相连。这三条链的某些用户出于某种脑残的决定要和归零链做一些互动,则他们会通过IBC把他们在归零链上的三个币分别转到zone a,b,c。这时候,如果归零链上的验证人产生了共谋的想法,开始篡改验证并对归零链进行双花,则所有在归零链上的用户,与在别的zone里持有归零币的用户将受到这次双花的打击,但是这个打击仅限与归零币与归零链,zone a,b,c的链并不会被“腐蚀”。想想看,这个和polkadot被双花攻击的效果是相反的:

cosmos允许有人在网络上作恶,作恶成本较低,但是作恶仅限于与自己的链。

polkadot不允许有人在网络上作恶,作恶成本较高,但是一旦作恶,将会影响整个网络,必须进行回滚。

共识算法

polkadot的共识算法叫GRANDPA(你大爷),他长这个样子:

它和以太坊的casper的区别是:

基本上来说,你大爷可以让中继链同时finalise在不同平行链,有着不同区块高度的块(这意味着超快验证速度),同时你大爷还可以同时执行大量的验证者(1000个)。另外你大爷还可以对他认为是最高块的区块进行认证,并把这个验证对这个区块之前的所有区块同时验证 - 说白了就是你大爷算法可以迅速找到最被认可的区块并对其进行finalise。总之一句话,你大爷永远是你大爷(破音)。

对于平行链的公式算法,polkadot并不是特别感冒,polkadot的substrate有三种算法可供选择:GRANDPA,RHODODENDRON,和AURAND。随着substrate的逐渐完善,我们应该会看到更多的新算法加入进来。

对于cosmos,算法貌似是它唯一比polkadot要卡的严的地方。cosmos自己搞了一套通用算法规格叫ABCI,目的是为了统一跨练通信规格。目前只有tendermint core符合这个规格。tendermint算法的工作原理是所有的验证者会有互相的交流并验证一个单一区块(同意或反对),finality是以单区块作为单位。cosmos的测试网跑了200个验证者,出块时间是6秒钟。这听上去还不错,但是tendermint最大的问题是他的horizontal scaling的问题,他的IBC交流overhead太高,如果同时有2000个验证者在cosmos hub上跑,那么出块时间就会开始变慢。这么做的好处也是有的,就是异地同步,如果出现了分叉现象,则由于异地同步,其中一条分叉会被另一条分叉吸收掉,就是说只要有一个块被finalised,他就永远不会被回滚(双花)。

软件开发包

polkadot用substrate,cosmos用cosmos sdk。基本上双方都在抢占开发人员,让他们更好更容易的的搭建自己的链。这些没什么需要赘述的,毕竟我