BUPT3分享11—区块链3.0: Cosmos

Hacker Dōjo Workshop
资助金额:120 USDT
分享者:北邮在读硕士 Syshems
本项目由Hacker Dōjo资助,文章转载请联系
Telegram: @DoraDojo0
WeChat: @HackerDojo0

比特币:区块链1.0, 去中心化的价值;以太坊:区块链2.0,应用的爆发;Cosmos :区块链3.0,可扩展的模块化区块链网络。Cosmos 被称为区块链3.0 的原因有以下几点:

  1. 互联网的基础态:Cosmos 的目标不是建立自己的区块链,而是建立一个可交换的网络生态系统。它通过提供降低开发门槛的工具,如 Tendermint 共识引擎和 Cosmos SDK 模块,实现了网络的交换。这使得不同的区块链可以互相连接和交换信息,类似于互联网的基础设施。
  2. 跨链互操作性:Cosmos 通过其核心协议 Inter-Blockchain Communication(IBC)实现了跨链互操作性。这意味着不同的区块链可以在 Cosmos 生态系统中相互通信和交互,实现资产和数据的跨链转移。这种跨链互操作性是区块链3.0 的重要特征之一。
  3. 多链生态系统:Cosmos 构建了一个多链生态系统,其中不同的区块链可以并行存在并相互协作。这种多链的架构使得各个区块链可以专注于特定的功能和用途,从而提高整个生态系统的灵活性和可扩展性。

一、Tendermint 共识机制

Tenermint 是一个能够在多机器上安全一致地复制应用的软件。 安全是指无论多达 1/3 的机器出现何种类型的故障,Tendermint 都可以正常工作;一致是指每个正确运行的机器都可以获取完全相同的交易日志并计算相同的状态。Tendermint 主要有两个组件构成:包含提供共识机制的共识引擎 Tendermint Core,和适应大多数编程语言的接口 ABCI。

Tendermint Core 作为一个通用引擎,包含了网络层和共识层,网络层使用的是 Gossip 协议,模仿流行病传播方式在 P2P 的节点网络中传播信息的网络协议,也是比特币网络层使用的协议;共识层使用的是 BFT+POS ,我们可以看看具体的算法。

1、共识引擎:基于BFT的POS共识算法

其实每一个人都遇到过共识的问题,那就是和朋友一起吃饭的时候商量吃什么。只不过在区块链里面变成了节点一起商量下一个区块上面写什么。 区块链允许节点随时加入或者离开,即使出现故障,网络里的节点依然能够正常工作。这是依靠提前制定的规则,这套规则就是共识机制。

中本聪首次在比特币的设计中融入了拜占庭容错(BFT),开始将学术界的容错机制引入到像区块链这种分布式计算,思考在不可靠的环境中建立一个可靠的系统的。Jae Kwon(Cosmos 创始人)是第一个真正提出将 BFT 研究应用到 PoS 的区块链中,并创造了 Tendermint 实现了他的想法。

1.1 BFT 拜占庭容错机制

1982年,Lamport,Shostak和Pease首次提出拜占庭将军问题,一群拜占庭将军分别从不同的位置围困一座城市,需要决定进攻或撤退。但是处于不同位置的将军只能通过信使互相联系,如果这些将军中出现叛徒, 那么叛徒可以向不同的将军发送不同的消息,比如向倾向于撤退的将军发送其他将军也打算撤退的假消息,扰乱大家的决定。

而让忠诚的将军在有叛徒的情况下,依然能够达成共识的机制的能力就被称作 BFT(Byzantine Fault Torerance,拜占庭容错)。BFT保证在总的节点数为 N 的情况下,故障或者作恶的节点数为 F,只要 N >= 3F + 1 时,网络依然能够达成共识做出一致的决定。

网络的参与者不能确定是否有人撒谎,或者消息是否被修改,即使存在这些问题,参与者也能一起达成共识做出决定的系统就被称为具有拜占庭容错 (BFT)。

1.2 POS权益证明

BFT描述的是在网络中运行达到共识的规则,POS描述的是参与网络的方式,也就是挖矿的机制。Proof of staking权益证明作为挖矿的机制,要求共识的参与节点,被称为验证者,持有并质押区块链的原生代币,也就是Cosmos的Atom代币,将POW的以硬件算力的成本转换成持有代币的成本,期望获得手续费和区块的奖励作为回报。质押的代币作为保证金获得投票权,确保节点不是虚假账户发起女巫攻击。在参与共识的过程中,锁定验证者的保证金,避免验证者多次投票发生无利害关系问题,否则没收保证金。

共识机制

获得共识的流程主要是验证者在多轮的提议,预投票,和预提交过程中获得2/3 的投票,成功后开始提交信息添加新的区块,将区块链的“高度”(其实就是数量)上加1,否则重新开始整个流程。仅参加提议、预投票、预提交的准备阶段被称为非验证人节点,或者轻客户端,确保网络中的所有节点都能监听消息;从投票到出块参与全流程的验证者也被称为全节点;开启每轮投票流程的验证者也被称作提议者,确保责任落实,根据质押的代币获得的权利越大,被选中的概率就越大。换句话说,投入越多,获得回报的几率就越大。

当然,并不是每一轮都会成功产生区块,提议者可能掉线或者延迟等情况下,整个流程就会重启。

同时,轻客户端可以验证交易的有效性。相比存储了完整区块链信息的验证者,轻客户端只需要定期下载部分信息也就是区块头,甚至不需要同步链上的所有区块头,轻客户端就可以通过区块的最终结果,跟踪参与投票的验证人的集合,验证是否有大于三分之二来自该区块的验证人进行了预提交。

当然,并不是每一轮都会成功产生区块,提议者可能掉线或者信息不符合标准,那么整个流程就会重新开启。

性能

中本聪共识及通过POW的方式,允许所有人加入成为矿工通过算力的比拼获得记账的权利,也就是出块。而Tendermint 中会预设固定的节点,如果要增加的话需要至少 2/3 的节点的一致投票,同时为了防止节点过多达成共识变慢,tendermint 的节点上限为 100 个,并且得出的结果具有最终确定性,这意味着在同样的输入条件下,输出的结果总是确定的,保证用户的交易是立即完成。而比特币可能出现分叉的风险。

上限 100 个的 Tendermint 的验证者可能被质押不够去中心化。

Tendermint Core 作为提供网络层和共识层的共识引擎,是支持BFT的共识机制。这意味着即使有 1/3 的节点发生故障,包括黑客攻击和恶意攻击,Tendermint 的网络也依然能够获得共识,正常工作。这意味着使用 Tendermint 共识引擎的网络在大多数情况下都能保证网络的安全运行,这是任何应用开始大规模使用的前提;同时是迅速的,出块时间约为 1 秒,保证同样的交易按照同样的顺序记录在链上。

2、ABCI 接口:解放开发者的接口

在 Cosmos 的区块链网络中,每条区块链都由 Tendermint 作为底层的通用的网络层和共识层,同时每个应用都能在应用层设计自己的业务逻辑。对于开发者来说,只需要通过 ABCI(Application Blockchain Interface,应用程序区块链接口)调用,他们可以直接在 tendermint 提供的共识机制上提供的最终交易上就可以构建应用程序。

2.1 ABCI:灵活的调用方式

ABCI 作为一个 socket 协议是一个调用的接口,不同于其他的区块链要求开发者学习并使用特定的语言,开发人员可以选择他们熟悉的语言进行开发。

我们看到的比特币、以太坊在设计区块链网络时都是采用的一体化的思路,每一个技术栈,也就是我们刚刚讲到的区块链的各个层级,都是一个相互链接和依赖的程序,无法单独拆开。

这种整体的架构在开发时容易遇到2个问题。

1)代码难以使用。比如说,比特币的一个堆栈里面就包含了待处理的交易池 mempool,账户余额,用户权限等,如果想要单独拎出 mempool 就会变得非常困难,即使分叉也很难维护。

2)限制开发语言。在以太坊网络中,EVM 需要通过编译器将智能合约代码编译成字节码再上传到区块链之后才能执行操作,导致开发者只能使用 EVM 编译器支持的语言,也就是 Serpent 和 Solidity。

2.2 功能类型

Tendermint core 会创建3个ABCI连接到应用层。主要有 3 个 ABCI 连接应用层和 Tenderint 共识层,包括:

1)CheckTx:验证交易并提交到 mempool 交易池中广播交易

2)DeliverTx:提交给共识引擎处理并更新状态

3)BeginBlock/EndBlock:查询应用层的状态

一图总结 Tendermint

二、Cosmos SDK 和 IBC 跨链协议

1、模块化的开发方式Cosmos SDK

在 Cosmos 的设计中,数据层和网络层归类网络层,合约层和激励层归共识层,合约和应用层归为应用层。对于开发者来说,最底层的网络层和共识层并不是他们想要开发的关键,而是开发应用层,负责业务逻辑来提供应用场景。Tendemint 提供了通用的网络层和共识层,让开发者在在此基础上搭建自己的应用层。

1.1 SDK 模块设计

通过模块化的设计,SDK 提供了通用的应用功能,每个功能能够独立运行、组合、管理。每一个模块也可以被看成单独的小状态机,开发者可以自定义状态以及改变状态的方式,并用 KVStore 的形式保存在 Multistory 里支持以后的使用。同时作为开源的软件,开发者可以通过项目实践,快速迭代。

SDK的模块是一个作为开发者能够为其他开发者提供的简洁、实用的开发工具,开发者可以放开手脚创作更多的应用。

1.2 运行机制

  1. 应用层状态:Cosmos SDK 通过 Multistore 的机制来定义和维护应用层的状态,将应用层的状态划分到不同的模块,可以看作是独立的状态机。
  2. 模块化开发:Cosmos SDK 是一个模块化的开发框架,开发者可以通过组合不同的模块来构建自己的区块链应用程序。Cosmos SDK 内置了许多常用的模块,如账户管理、身份验证、资产管理等,开发者也可以自行开发新的模块。
  3. 共识引擎:Cosmos SDK 默认的共识引擎是 Tendermint Core,可以实现快速的交易确认和高吞吐量。
  4. ABCI 接口:Cosmos SDK 通过ABCI 接口来与底层共识引擎进行交互,这使得 Cosmos SDK 可以与不同的共识引擎进行集成。
  5. WebAssembly 支持:Cosmos SDK 支持 WebAssembly,可以让开发者使用各种编程语言编写的软件在区块链上安全运行。

通过 Multistore 的机制来定义和维护应用层的状态,将应用层的状态划分到不同的模块,可以看作是独立的状态机。CosmosSDK 里内置的底层 basepp 里有 ABCI 的接口,可以直接调用适应所有应用类型的Tendermint共识机制,经过 CheckTx 的验证非攻击后提交到 mempool 交易池,在验证节点达成共识成功出块后交易被打包上链,通过 DeliverTx 成功修改状态,即交易成功。

通过 DeliverTx 的功能收到字节形式的交易后,解码提取消息,在验证交易相关的信息后,比如是否有签名,再推送到对应的模块处理,最后更新状态。更新后的状态由 SDK 里的 Multistore 的功能保存,并且还可以把信息切割开来对应到不同的模块。

1.3 SDK模块功能

基本上涵盖了应用层的必需功能,而开发者可以直接使用这些车轮开发自己的汽车了。

  • Auth - 账户模块,认证身份等。
  • bank - 管理转账模块。
  • Governance - 链上提案和投票
  • Mint - 创建新的代币。
  • Slashing - 验证者惩罚模块。
  • Staking - 代币质押模块。
  • Upgrade - 升级模块

1.4 兼容性

SDK支持开发者使用第三方的模块,但是需要做一些安全检查保证各个模块可以互相适配。

IBC 协议和 SDK 是独立运行的,使用 Cosmos SDK 模块并不强制要求绑定到 Tendermint 的共识机制,开发者可以根据自身的诉求选择底层的共识协议,而后文介绍的 IBC 模块则在一定条件下链接不同共识算法,比如,比特币和以太坊这两大公链。

1.5 支持对象模型Object-Capability Model

Cosmos SDK 支持对象能力模型,可以让每一个模块的运行逻辑被保存在 Keeper 的功能里,通过调用模块存储器件 Keeper,就可以在相应的应用中读写。这意味着,即使有未知的或者恶意的攻击,在不需要了解具体代码的情况下,也可以对引用的对象和链接的分析从而保证系统的安全,只要引用的对象之间产生了链接。

这个叫做 keeper 的逻辑控制可以藏在幕后,隔离不同的代码,最终提高系统的安全性。对于应用的架构开发者可以更清晰的梳理代码的功能、逻辑、链接,因此可以更容易的定位问题,适配其他语言,甚至更多的优化。

采用 Cosmos 构建的应用都有独立的应用层,共识层以网络层,开发者可以选择网络层的验证者,建立自己的社区以及经济体系。如果使用默认的共识层 Tendermint Core ,开发者可跨多个cosmos区块链使用,可以选择自己的验证者。而说基于 Cosmos SDK 构建的公链已经有了 Binance Chain,Terra,还有 Kava 等大型公链提供服务。

开发 Keplr 钱包的 Josh 曾经总结过,使用智能合约是租房,使用 CosmosSDK 开发才是建造属于自己的房子。

2、IBC 跨链协议:区块链互联网的TCP/IP协议

IBC 跨链协议是 Cosmos SDK 其中一个模块,使用 Cosmos SDK 构建的应用都可以通过升级兼容 IBC 协议,和我们平常升级手机软件一样。

IBC,全称 Inter Blockchain Communication 区块链间通信协议,统一了在不同的区块链之间跨链沟通的标准。可以理解成战国时期秦国统一度量衡,或者用 Tendermint 的前首席研究员 Sunny Aggarwal 的话则是,IBC 是将运输货物的集装箱标准化,实现全球经济贸易。

2.1 跨链协议设计

单条公链提供的功能和场景有限,因此需要跨链才能满足更多的需求,比如你在美团上点了外卖之后通过支付宝支付。跨链本质上是一种把数据安全、可信地转移到另一条链,并达到预期效果。IBC 协议作为跨链的标准,提供了:

  1. 互操作性

    IBC 协议作为跨链的基础,在此之上可以实现真正的跨链互操作,包括:

    1.)资产跨链:将不同链上的资产转移到目标链上,比如把 ETH 转账到 ATOM 链上

    2.)信息跨链:从其他链上获取信息并使用,比如抵押以太坊链上的资产后在 Cosmos 上借贷

    跨链的价值不仅仅体现在代币的价值上,还能带来真正的区块链构成的互联网,就像我们现在使用的互联网。

  2. 安全性

    功能越少,出现能够被攻击的安全漏洞的可能性就会越小。 且 IBC 假设不同的链互不信任,IBC 协议的安全来自 Tendermint 共识的最终性,而我们前文所讨论的 BFT 的安全性和轻节点的验证功能能给予足够的安全性,没有再引入其他的可信任假设。

  3. 通用性

    IBC 协议从通用的角度仅对应用层提出最少的要求,有利于 IBC 协议广泛部署,当越多的区块链加入 IBC 的标准,IBC 成为真正的跨链标准的可能性就越大。

  4. 兼容性

    作为通用标准,IBC 需要适应各种类型且互不信任的区块链。确保区块链作为状态机的结果是确定的,即无法撤,才能保证通信的正确的执行。这意味着区块链必须具有提供最终确定性的共识机制才能兼容,目前 POW 的比特币和以太坊还不支持,但是通过后文介绍的Gravity Bridge也能实现跨链。

2.2 跨链协议内容

类似于 TCP/IP 协议定义了不同的计算机在传输信息是采用了 IP 地址(计算机 ID)、端口号(应用程序ID)、协议号(传输层标准)的结构来传输信息。IBC 协议里,类似于定位计算机的 IP 地址是channel ID,定位应用程序的端口是 port ID ,再加上客户端同步信息构成了标准化沟通信息的方式。简洁的协议减少了跨链通信带给链本身的负担,没有过多约束参与跨链通信的应用本身,更加灵活。

我们看下是如何实现 Handshake 握手连接的:

在建立通信之后,需要确认操作模式,达成协定之才可以进行的信息的交换

1)A 链发起跨链到 B 链的 OpenInit 请求,等待 Relayer 接收到该请求。

2)Relayer 收到 OpenInit 的请求之后,构造 OpenTry 的请求发送到 B 链上。

3)B 链收到 OpenTry 请求之后,同意并确认之后生成 OpenACK 数据包,并由 Relayer 按照同样的方式发送给 A 链。

4)A链通过 OpenACK 数据包判断此次握手是否成功,成功则发送 OpenConfirm 并把包含信息的数据包返回 B 链,成功传输信息;否则握手失败

2.3 Packet 数据包

Packet 定义了跨链通信的必要信息,包含发送和接收方的 channelID,portID,sequence 序列,还有 TimeoutHeight,TimeoutTimestamp 的超时机制,保证在某个时间前完成交易,否则可以退回,防止资金长时间冻结。

三、Cosmos vs. Polkadot

Cosmos 和 Polkadot 都是面向多链的区块链生态系统,旨在实现不同区块链之间的互操作性。它们之间也存在一些异同,具体如下:

  1. 跨链协议:Cosmos 采用的是 IBC 协议,而 Polkadot 采用的是 Parachain 协议。IBC 是一种通用的跨链协议,无需信任中间的任何人;Parachain 协议是专门为 Polkadot 设计的,可以让不同的区块链在 Polkadot 上运行,并与其他区块链进行交互。
  2. 共识机制:Cosmos 采用的是 Tendermint 共识机制,而 Polkadot 采用的是 GRANDPA 共识机制。Tendermint 是一种基于拜占庭容错算法的共识机制,可以实现快速的交易确认和高吞吐量。GRANDPA 是一种基于 GHOST 协议的共识机制,可以实现高度安全性和可扩展性。
  3. 生态发展:Cosmos 和 Polkadot 都是蓬勃发展的开发社区的所在地,但是它们的生态发展方向略有不同。Cosmos 的生态系统更加注重跨链互操作性和多链协作,而 Polkadot 的生态系统更加注重可扩展性和安全性。
  4. 资产管理:Cosmos 和 Polkadot 都提供了资产管理模块,但是它们的实现方式略有不同。Cosmos 采用的是账户模型,每个账户可以拥有多种资产,而 Polkadot 采用的是链上资产模型,每个链可以拥有自己的资产。
  5. 跨链连接:Cosmos 和 Polkadot 的跨链连接方式也略有不同。Cosmos 的跨链连接是通过 IBC 协议实现的,可以实现不同区块链之间的互操作性。Polkadot 的跨链连接是通过 Parachain 协议实现的,可以让不同的区块链在 Polkadot 上运行,并与其他区块链进行交互。

总的来说,Cosmos的核心架构优先考虑应用链的最大主权,并且有意降低了主链 Cosmos Hub 的重要性。允许多个hub共存是一个自愿的设计决策,去中心化是这一选择背后的主要驱动力。该架构背后的第二个原因是:Cosmos生态系统必须不惜一切代价确保连续性,最主要的链的倒下不应该连带整个生态系统。

如果你有多个hub,那么其中一个的倒下并不足以摧毁一切。Cosmos Hub 通过避免租金提取发挥了可信中立作用。这就是IBC路由可以在Hub链之外完成的原因。

例如,Osmosis可以被认为是第二个Hub,因为它处理的IBC交易量比Cosmos Hub本身还要多。通过坚持其公共产品基础设施的角色,拒绝从生态系统中收取租金, Hub让其他应用链大放异彩。最好的例子:Terra 是Cosmos的应用链,它在巅峰时期的规模比The Hub要大得多。LUNA的历史最高市值为410亿美元,而Cosmos Hub为120亿美元。在Terra崩溃之前,Cosmos Hub只是市值第三大的Cosmos链,次于Terra($LUNA) 和Crypto.com ($CRO)应用链。

Polkadot的发展是对以太坊无法扩展的直接回答。以太坊联合创始人Gavin Wood注意到它的局限性,并继续用Polkadot建立自己的愿景。在这个愿景中,平行链专门的链,相互之间进行交互,类似于Cosmos上的应用链的想法。

Cosmos和Polkadot之间的一个关键区别是中心化的程度。

中继链是万能的,它作为该生态系统的主链,是平行链的唯一安全提供者(所有验证者只在中继链上验证),而不是像Cosmos那样,任何应用链都有可能启动自己的验证者集。

这一设计决策给中继链带来了很大的压力。如果中继链失灵,整个Polkadot生态系统将面临危险。

参考:

****Cosmos:区块链3.0:****Cosmos:区块链3.0,互联网的基础态 | 登链社区 | 区块链技术社区

**Tendermint 中文文档:**什么是Tendermint? | Tendermint 中文文档

https://twitter.com/Kaseyibcc/status/1575133500604227584

波卡和阿童木的异构跨链,相对于layerzero来说(通信协议+中继器),多一个中间共识层,layerzero更轻量,更有效率

叙事上,波卡和阿童木占上风,除了异构跨链,还有标准化区块链和同构跨链