'CryptoYC'
研究|Cosmos,被人遗忘的异构开拓者
🌿

研究|Cosmos,被人遗忘的异构开拓者

如果大家平时注意看一些公链的白皮书,例如波卡,Solana,币安链等,都会发现他们一直有提到 “Tendermint”这个共识引擎。但是有多少人知道Tendermint提出者自己做的公链,Cosmos?温故而知新,所以,今天我们就来回顾下这个被人遗忘的开拓者,超越时代想法的Cosmos。

什么是Cosmos, 它和波卡到底有什么联系?

每当提到Cosmos,似乎都绕不开另一个还未正式上线的天王级公链 — — — Polkadot。甚至一度觉得Cosmos是“抄袭”波卡才做出来的。不过呢,如果大家看过波卡白皮书,会发现在其“引用”中,排在最前面感谢的就是Cosmos。所以说,究竟是谁先提出来的这种结构的链,不言而喻。不过,二者之间确实有诸多相似的地方,当然也各有特点。比如Cosmos不是以中继链作为所有安全验证的核心,而是采用SDK的模式,允许开发者设置自己想要的共识机制(例如默认是公链pos,但是也可以设置成白名单准入记录模式,接入它SDK的应用去中心化与否和波卡一样,它都不关心)。同时不同链之间的交互也是通过一个IBC(Inter-Blockchain Communication protocol)的东西来进行,并不是一定要通过类似于波卡一样的中继链才能实现应用之间的互动。同时在对接其他公链的时候,采用了和波卡“bridge”一样的” peg”。正因为如此,其同样也是满足扩容,异构,在线升级的特点。所以,我们下面的内容免不了会和波卡进行比较。

Cosmos整体架构

首先需要承认的是,Cosmos的整体架构和波卡非常类似。也是一个平面型的架构,而不是和以太坊一样是按层堆积的。主要是由HUB, ZONE, PEG三部分构成。

  • ZONE就是各个应用或异构链
  • HUB既可以是平行链,也可以是中继链(Cosmos hub就是中继链一样的角色)
  • PEG就是跨链桥(桥接ETH,BTC等公链)。
图片来源:加密谷
图片来源:加密谷

这点我觉得非常正常,因为我们明白,一条公链最重要的组成有三层:

  • 应用
  • 网络
  • 共识机制

对于普通用户来说,应用是我们可以直接感受到的东西,所以应用生态很重要。而网络则是链接用户和应用,应用和应用,用户和用户之间不可或缺的存在。而共识机制就更不用说了,去中心化仰仗的就是这个。而BTC之所以没有形成成熟的生态,正是因为其架构并没有把这三个东西分开,导致编程困难,或者说对功能支持不完备。而以太坊则是将应用和其他二者分开,提供了类似一个操作系统的架构,大大提高了区块链本身的可用性,所以生态火爆。但是以太坊长久以来存在的问题还是在于其底层共识机制依旧采用的是POW,导致开发者因为需要在有限的资源内完成项目,所以可以做的事情并不是非常丰富。同时对于其他公链的兼容也不够友好,就好像不同系统之间无法兼容一样。至于gas fee啥的我就不说,懂的都懂。所以,PoS的提出催生了类似于波卡这样结构的链。其本质上不再是想提供一个系统级别的链,而是提供了类似于TCP/IP的协议,只要符合我这个协议的应用都可以选择接入我的网络,用我的共识。至于接入进来的应用是什么,协议并不关心。

那么,Cosmos是如何构建这三者的关系呢?

就如同以太坊和比特币共有的对开发不够友好的这个问题,其本质上是因为传统开发者通常只需要关注应用逻辑的实现,而不用太在意这种“协议层”级别的东西。而以太坊开发则还需要开发者注意共识和网络的问题,这在很大程度上增加了开发成本,以及加大了跨链的难度。Cosmos在解决这个问题的时候,较为创新的提出了Tendermint BFT(BPOS+PBFT,一个用来分配验证人权力,一个用来验证区块有效性。)这么一种被称为“共识引擎”的东西。其具体实现逻辑在此不做表述。我们要知道的是它封装了Cosmos的网络和共识协议,保证所有节点按照相同的顺序记录交易,通过ABCI(Application Blockchain Interface)可以被任何应用所调用。尤其是ABCI本身可以被其他语言再次封装,二次开发,进而可以实现更为复杂的功能。这就是Cosmos最重要的组成之一,SDK。也正是由于这种非常偏向于传统软件工程的方式,所以Cosmos并不需要像Polkdot一样需要插槽拍卖,而是只要你采用我的SDK就能使用我的功能。当然,如果想要用我的网络和安全性(Cosmos hub),也需要一系列需要验证者,委托人。其角色功能和波卡上的基本一致。这些角色我们会嵌入到后天的内容里陆续说明。

总之,COSMOS给了开发者一个非常低的准入门槛,以让一些开发者不是很了解底层共识协议的基础上也能开发自己的去中心化应用。同时对于那些懂共识,又有自己理解的开发者,可以利用其SDK较为快速的搭建自己的链。并且整个结构就是基于传统软件工程强调的“低耦合”模式,模块化做的非常好。这一点上,不知道波卡出来会怎么样。

接下来,我们就来一起看下Cosmos里的一些关键构成。

IBC: 跨链通信的网关

和波卡一样模块化的结构,有个本质问题需要被解决,那就是如何解决不同应用,包括链之间的数据传输问题。尤其是区块链这种去中心化,没有一个第三方机构来作为中继的存在。所以Cosmos在解决这个问题的时候采用了一个叫做IBC的方式,即Inter-Blockchain Communication protocol。它利用了上面提到Tendermint BFT,实现了异构链之间的信息传送。这点就有点像波卡里bridge的概念。知道他的基本概念,我们就来看看它是如何工作的。

假设我们想把token从A链转到B链,在Cosmos种总共分四步:

1. Tracking: 首先,每个链都有运行着轻节点(这个大家应该知道,就是不会现在完整的区块链账本,只会现在区块头信息,检测区块头信息的顺序是否和之前的一致)。所以就这个例子而言,B链可以通过这些节点接受到A链的区块头信息,也就是A想要转到B。

2. Bonding: 然后,转移开始的时候,这些“被转移”的token会在A链中被锁定。

3. Proof Relay: 锁定后,这些锁定证明会从A链到B链

4. Validation:B链会检测A链传过来的锁定证明(区块头检测),一旦检测无误(valid),B链就会创建同等数量的对应token“债券”。注意这里是债券,而不是真正的token。

我们可以看到,COSMOS所谓的IBC其实和其他的跨链方式基本一致,都是通过在原链上锁定资产,然后在目标链上创造对应的凭证来实现所谓的资产转移,只是COSMOS利用了自己的“共识引擎”,使得开发者在实现的时候难度大大降低。

不过如果直接让各个异构链,也就是上面架构图里的zone直接通过IBC互联的话,就会导致一个问题,连接数过多,拖累网络。例如100个zone就需要4950个链接。所以才要引入Hub作为中继,负责收集异构链信息,集中起来再和其他链进行交互。例如第一个Hub就是Cosmos hub, 同时也是公用的POS主链,虽然staking用的是ATOM,但是transactions fees可以用其他代币(符合其ICS20标准)。

来源:Cosmos官网
来源:Cosmos官网

Peg-Zone: 链接non-Tendermint的跨链桥

这个东西主要针对的是类似于BTC, 以太坊等其他没用Tendermint BFT的链。虽然Cosmos说的是可以兼容异构链,但是依旧要求需要遵从少量的要求。所以对于以太坊和BTC这种链,就需要特殊的机制来进行资产跨链转移(两者的序列化格式,签名方案,数据结构都与Cosmos不同)。其实COSMOS用的和其他链的跨链方式很像。我们就大概看一下。

我们可以看到,根据IBC的机制,COSMOS是个可以“即时确认最终性“的链,而ETH和BTC等基于PoW的链,则不是fast-finality(PoW机制的问题)。所以,为了解决这个问题,Cosmos搞了个peg-zone,作为这种跨链的中继站。

我们先来看下Peg-zone的组成部分:

  • 以太坊智能合约:相当于Cosmos在以太坊上的资产托管合约,能够托管ETH和Cosmos原生token
  • Witness:见证组件。证明以太坊事件。会等待100个区块,即确定性阈值,运行一个完全的区块链节点,以便能够向peg-zone提交以太坊内状态变化的证明。为了共享安全性,cosmos hub也会成为peg zone witnesses
  • Peg-zone: 建立在Tendermint上,允许用户执行和查询交易。也是cosmos和以太坊的桥接
  • 签名者:签名者使用 secp256k1 签名方案(以太坊签名方案)签署消息,以太坊理解该方案使签名可以通过智能合约有效地验证。发布到peg-zone
  • 中继者:将签名者签署的交易列表发布到以太坊智能合约

下面我们以以太坊和Cosmos的跨链交互过程来看下这几个部分是如何交互的:

1. 首先,Peg-zone需要决定witness需要见证的确定性阈值是多少。默认的是100个区块。

2. 假设你想要把一笔Photons从Cosmos转移到ETH上。Cosmos首先会把你的这笔Photons通过IBC转移到peg zone里。Peg zone会收到一个IBC包:一个包含了要转移photons的交易信息。

3. 签名者会监听Peg zone,然后对进入peg zone的交易进行secp256k1的签名,以便以太坊能够识别

4. 中继者同样也会监听Peg zone, 一直等到交易被2/3的签名者签署。然后会将这些交易发送到以太坊EVM中,方便以太坊智能合约执行。

我们可以看到,其实Cosmos的这个Peg就是波卡上的跨链桥实现方式。两者基本原理是一样的。不过Cosmos已经实现了,至于波卡么,任重而道远。不过,Cosmos既然能成功,代表这种跨链桥的方式本身就是可行的,一定程度上说明,Polkdot起码在工程实现上靠谱。

可扩展性

在解决了上面的开发难度,跨链问题后,还有个以太坊遗留的问题需要解决,那就是可扩展性。在这一点上,Cosmos利用了两种类型的可扩展性

  • 垂直可扩展性:通过摆脱POW模式,并且优化其组建,Tendermint BFT TPS可达数千笔。当然,这种扩容方案很多家都在做,而Cosmos实现了另外一种意义上的垂直扩容,即官方提到的可以利用其SDK实现特定应用的区块链。我们来看下两张图。

首先是简化的ETH的架构:

Cosmos官方medium
Cosmos官方medium

其次是看下Cosmos的架构:

Cosmos官方medium
Cosmos官方medium

最直观的区别就在于Cosmos将虚拟机封装。从而避免了开发者直接和复杂的虚拟机交互,让开发变的更简单。Cosmos-SDK是一种面向对象的框架,这点无论在易编程性和出错回滚上都会变的更加简单和灵活。(类似于C和JAVA)

  • 横向扩容:跨链。别人应该讲过很多次了,此处不再赘述

小结

简单了解下Cosmos相关技术后,我们可以看到Cosmos和Polkdot最大区别在于开放性。有一种互联网原旨教徒的感觉,崇尚开源,崇尚共享,完全开放自己的SDK,可以帮助其他开发者迅速建立自己的链,而不是和波卡一样是以本身的中继链为核心进行发散性的扩展,Cosmos这种做法在今天这种公链泛滥的时间点上可能不是很有心意,但是在16年的时候,确实是很厉害的存在。这两种模式在技术上孰优孰劣我们暂且不表,交给市场验证。但是从代币经济角度来看的话,无疑,DOT更有优势。原因在于Cosmos官方的链,也就是Cosmos hub对于使用其SDK的链或者应用来说不是必须的,但是其代币ATOM只能流通在自己的Cosmos里,主要是用来staking 确保Cosmos Hub安全性,同时也是Cosmos Hub治理代币,所以其代币效用不高。不过好在IBC的推出一定程度上加强了ATOM的效用。毕竟IBC就是用来跨链的,而为了提高IBC效率会让各个异构的zone先接入到Hub中,再由Hub来进行中转跨链,这就和DOT很像了。不过从根本上来看,其他应用究竟愿意不愿意用Hub,都是各自说了算,毕竟SDK就摆在那里了,我跳过官方hub直接进行连接,或者造一个自己的Hub,也不是很难的事情。至于Cosmos Hub本身作为IBC中继Hub的应用,目前也只有Osmosis(跨链AMM,功能类似于Balancer)真正用到了。所以Cosmos Hub想通过促进跨链交易来成为其生态的核心模块,任重而道远。不过本文重点也不在代币经济上,下次还有机会的话笔者再来给大家谈下公链的代币经济。