# Cosmos技术分析

By [Yu](https://paragraph.com/@yu-4) · 2022-03-25

---

![Cosmos](https://storage.googleapis.com/papyrus_images/750e6a62c4bfb2261d25cc97bb33f103f72ee71ee19ebe722561aa06b0ebe879.png)

Cosmos

一、简介
----

Cosmos 是一个由独立并行区块链组成的去中心化网络，每个区块链采用的共识算法都需要是BFT。Cosmos 是一个生态系统，区块链可以相互扩展和互操作。在 Cosmos 之前，区块链是孤立的，无法相互通信。它们很难建造，只能处理少量交易每秒。Cosmos 以全新的技术愿景解决了这些问题。

二、Cosmos技术推导
------------

### 1、架构划分

从架构的角度来看，Cosmos认为区块链可以分为三个概念层：

A、应用：负责更新给定一组交易的状态，即处理交易。（数据的使用和生产）

B、网络：负责交易和共识相关消息的传播。

C、共识：使节点能够就系统的当前状态达成统一。

### 2、区块链的演化：

区块链1.0： 比特币，三个部分都混合在一直。比特币脚本语言非图灵完备，且不易于使用。

区块链2.0： 以太坊提出了构建去中心化应用程序的新主张。在应用层中加入虚拟机（EVM）来实现这一点。任何开发人员都可以部署智能合约到以太坊区块链。

这种新方法允许成千上万的开发人员开始构建去中心化应用程序 (dApp)。然而，这种方法的局限性很快就变得明显，现在区块链2.0主要有3个的痛点：

A、交易量小：ETH每秒只有15笔。

B、可用性：开发语言少，可选模型少（如ETH采用的是账户余额模型，对于更适合UTXO模型的应用，就无能为力）。

C、主权：开发DAPP的项目方，本质上有两层治理：应用程序的，以及底层环境的。前者受后者限制。如果应用程序中存在错误，未经以太坊平台本身的治理批准，将无能为力。如果应用程序需要 EVM 中的新功能，它又必须完全依赖以太坊平台的治理来接受它。Cocmos能解决上面的问题。

### 区块链3.0：借助 Cosmos，打通区块链之间的通信。让应用拥有自己的区块链，这样应用可自己维护主权，快速处理交易并与生态系统中的其他区块链进行通信，使其成为各种用例的最佳选择。

![Cosmos](https://storage.googleapis.com/papyrus_images/8bbdbe29524b3a2dcdf628a86d7167a41121201404155915361c48b32dedad81.png)

Cosmos

三、Cosmos架构
----------

Cosmos为了实际链之间的互连互通，需要通过一套开源工具集实现，主要工具集是**Tendermint BFT，ABCI和Cosmos SDK**。

### 1、Tendermint BFT和ABCI

过去构建区块链需要从头开始构建所有三层（网络、共识和应用程序）。以太坊通过提供虚拟机区块链简化了去中心化应用程序的开发，任何人都可以在其上以智能合约的形式部署自定义逻辑。但是，它并没有简化区块链本身的开发。就像比特币一样，Go-Ethereum 仍然是一个难以分叉和定制的单一技术堆栈。

Tendermint BFT 是一种将区块链的网络和共识层打包到通用引擎中的解决方案，允许开发人员专注于应用程序开发，而不是复杂的底层协议。因此，Tendermint 节省了数百小时的开发时间。请注意，Tendermint 还指定了拜占庭容错 (BFT)的名称共识算在 Tendermint BFT 引擎中使用。

使用Tendermint BFT有如特性：

A、高性能：Tendermint BFT 的出块时间约为 1 秒，每秒处理多达数千笔交易

B、即时确定性：Tendermint 共识算法的一个属性是即时确定性。这意味着只要超过三分之一的验证者是诚实的（拜占庭式），就永远不会创建分叉。用户可以确保他们的交易在创建区块后立即完成（比特币和以太坊等工作量证明区块链并非如此）。

C、安全性：Tendermint 共识不仅是容错的，而且是负责任的。如果区块链分叉，有一种方法可以确定责任。

D、公共或私有区块链： Tendermint BFT 仅处理区块链的网络和共识，意味着它可以帮助节点传播交易，并且验证者同意一组交易以附加到区块链。应用层的作用是定义如何验证器集构成。因此，开发人员可以在 Tendermint BFT 引擎之上构建公共和私有区块链。如果应用程序定义验证者是根据他们有多少代币来选举的，那么区块链可以被描述为权益证明 (PoS)。然而，如果应用程序定义只有一组受限的预授权实体可以成为验证者，那么区块链可以被描述为许可或私有。开发人员可以自由地自定义定义其区块链验证器集如何更改的规则。Tendermint BFT是通过 Application Blockchain Interface (ABCI)。该协议可以包装在任何编程语言中，使开发人员可以选择适合他们需求的语言。

### 2、Cosmos SDK

Tendermint BFT 将区块链的开发时间从几年缩短到几周，但从头开始构建安全的 ABCI 应用程序仍然是一项艰巨的任务。这就是为什么Cosmos SDK 的存在。

Cosmos SDK是一个通用框架，它简化了在Tendermint BFT 之上构建安全区块链应用程序的过程。它基于两个主要原则：

A、模块化： Cosmos SDK的目标是创建由许多模块组成的生态。允许开发人员灵活轻松轻松的定制区块链应用，无需从头开始编写应用程序的每个功能。任何人都可以为Cosmos SDK创建一个模块，并且在你的区块链中使用现成的模块就像将它们导入你的应用程序一样简单。例如，Tendermint 团队正在构建一组基本模块，这些模块是宇宙枢纽。 任何开发人员在构建自己的应用程序时都可以使用这些模块。此外，开发人员可以创建新模块来定制他们的应用程序。随着 Cosmos 网络的发展，SDK 模块的生态系统将会扩展，使得开发复杂的区块链应用变得越来越容易。

B、基于功能的安全性：使开发人员能够更好地推理模块的可组合性并限制恶意或意外交互的范围。（类似Rust语言，在编译阶段就能找到可能的内存泄露。Cosmos SDK应该添加了类似的检测，最小特权原则就是一个例子。）

C、Cosmos SDK 还附带了一组有用的开发人员工具，用于构建命令行界面 (CLI)、REST 服务器和各种其他常用实用程序库。

最后一点：与所有 Cosmos 工具一样，Cosmos SDK 被设计为模块化的。如今，它允许开发人员在 Tendermint BFT 之上进行构建。但是，它可以与任何其他实现 ABCI 的共识引擎一起使用。随着时间的推移，会出现多个 SDK，使用不同的架构模型构建并与多个共识引擎兼容——所有这些都在一个生态系统中：Cosmos 网络。

### 3、支持EVM: ETHERMINT

Cosmos SDK 的模块化允许开发人员在其之上移植几乎任何已经存在于 Golang 中的现有区块链代码库。例如，ETHERMINT是一个将以太坊虚拟机移植到 SDK 模块中的项目。Ethermint 的工作方式与以太坊完全一样，但也受益于 Tendermint BFT 的所有属性。所有现有的以太坊工具（Truffle、Metamask 等）都与 Ethermint 兼容，您无需额外工作即可移植您的智能合约。

### 4、跨链: Connecting Blockchains Together - IBC

既然开发者有办法快速构建自定义区块链，那么现在看看如何将这些区块链连接在一起。区块链之间的连接是通过称为 Inter-Blockchain Communication protocol（IBC）\[区块链间通信协议\]的协议实现的。IBC 利用 Tendermint 共识的即时确定性属性来允许异构链相互传输价值（即代币）或数据。

什么是异构链：

不同的层：异构链有不同的层，这意味着它们在实现网络、共识和应用程序部分的方式上可能不同。为了与 IBC 兼容，区块链只需要遵循一些要求，主要是共识层必须具有快速确定性。工作量证明链（如比特币和以太坊）不属于这一类，因为它们具有概率确定性。

主权：有一组验证者维护。验证者的工作是就下一个区块达成一致以提交给区块链。在工作量证明区块链中，这些验证者被称为矿工。主权区块链是具有自己的验证器集的区块链。

IBC 允许异构区块链相互传输代币和数据，这意味着具有不同应用程序和验证器集的区块链是可互操作的。例如，它允许公共和私有区块链相互转移代币。

### 5、IBC 的工作流程

IBC背后的原理相当简单。举个例子：链 A 上的一个账户想要发送 10 个代币（如ATOM) 到链 B。

A、追踪

链 B 需要持续接收链 A 的标头。这允许每个链跟踪另一个的验证器集。本质上，每条链都运行另一条链的轻客户端。

B、粘合

当 IBC 转账开始时，ATOM 被锁定（保税) 在链 A 上。

C、中继证明

然后，将 10 个 ATOM 绑定的证明从链 A 传递到链 B。

D、验证

在链 B 上针对链 A 的标头进行验证，如果有效，则在链 B 上创建 10 个 ATOM

请注意，在链 B 上创建的 ATOM 不是真正的 ATOM，因为 ATOM 仅存在于链 A 上。它们是来自链 A 的 ATOM 在 B 上的表示，以及这些 ATOM 被冻结在链 A 上的证明。

当 ATOM 返回其原始链时，使用类似的机制来解锁 ATOM。

### 6、区块链网络

IBC 是一种允许两个异构区块链相互传输代币的协议。那我们如何创建区块链网络？

一个想法是通过直接 IBC 连接将网络中的每个区块链相互连接起来。这种方法的主要问题是网络中的连接数量随着区块链的数量呈二次方增长。如果网络中有 100 条区块链，并且每个区块链之间都需要保持一个 IBC 连接，那就是 4950 个连接。这很快就会失控。

### 7、Hubs 和 Zones

为了解决这个问题，Cosmos 提出了一种具有两类区块链模块化架构：

Hubs 和 Zones。 Zones 是常规的异构区块链，Hubs 是专门设计用于将 Zones 连接在一起的区块链。当一个Zones 创建一个与Hubs 的 IBC 连接时，它可以自动访问（即发送和接收）连接到它的每个其他Zones 。因此每个 Zone 只需要与一组受限的 Hubs 建立有限数量的连接。

Cosmos 网络中启动的第一个 Hub 是 Cosmos Hub。Cosmos Hub 是一个公共的权益证明区块链，其原生权益代币称为 ATOM，其中交易费用将以多种代币支付。Hub的启动也标志着 Cosmos 网络的启动。

### 8、连接非Tendermint 链

到目前为止，展示的 Cosmos 架构展示了基于 Tendermint 的链如何互操作。但 Cosmos 不仅限于 Tendermint 链。事实上，任何类型的区块链都可以连接到 Cosmos。

我们有两种情况需要区分：快速终结链和概率终结链。

A、快速终结链：使用任何快速确定性共识算法的区块链都可以通过适配IBC与 Cosmos 连接。例如，如果以太坊要切换到 Casper FFG（Friendly Finality Gadget），则可以通过调整Casper兼容IBC，这样ETH就能与 Cosmos 生态系统之间建立直接连接。

B、概率确定性链：对于没有快速确定性的区块链，比如工作量证明链，事情变得有点棘手。对于这些链，Cosmos使用一种称为 Peg-Zone的特殊代理链。一个挂钩区是一个跟踪另一个区块链状态的区块链。Peg-Zone 本身具有快速终结性，因此与 IBC 兼容。它的作用是为其桥接的区块链建立最终确定性。

让我们看下面的例子。示例：以太坊 Peg-Zone

现在连接工作量共识的ETH链，以使在ETH和 Cosmos 之间来回发送代币成为可能。由于工作量证明以太坊没有快速确定性，我们需要创建一个 Peg-Zone 来充当两者之间的桥梁。

首先，Peg-Zone 需要决定原始链的最终性阈值。例如，某个区块后又新增了 100 个块时，这个区块就当做最终确定了。。

其次，合约部署在以太坊主区块链上。当用户想要将代币从以太坊发送到 Cosmos 时，他们首先将代币发送到该合约。然后合约冻结资产，在 100 个区块后，这些资产的代表在 Peg-Zone 上发布。类似的机制用于将资产发送回以太坊链。

Peg-Zone 还允许用户将 Cosmos 上的任何代币发送到以太坊链（Cosmos 代币在以太坊链上将表示为 ERC20）。Tendermint 团队目前正在为名为Peggy的以太坊链开发 Peg-Zone 实现。

Peg-Zone 需要针对它们桥接的特定链进行定制。构建以太坊 Peg-Zone 相对简单，因为以太坊是基于账户的并且具有智能合约。但是，建立比特币挂钩区更具挑战性。

### 9、可扩展性

最后一个问题需要解决，可扩展性。Cosmos 从两方面提高可扩展性：

A、垂直可扩展性：垂直扩张是对区块链本身的扩展。通过摆脱工作量证明并优化其组件，Tendermint BFT 每秒可以处理数千笔交易。瓶颈因素是应用层。例如，像虚拟机这样的应用程序（例如以太坊虚拟机）的吞吐量要比直接将交易类型和状态转换嵌入程序的低 （例如标准 Cosmos SDK 应用程序）。这是特定于应用程序的区块链有意义的原因之一。

B、即使共识引擎和应用程序高度优化，单链的交易吞吐量在某些时候也不可避免地碰壁，无法超越。这就是垂直缩放的极限。为了超越它，解决方案是转向多链架构。这个想法是让多个并行链运行相同的应用程序并由一个共同的验证器集操作，从而使区块链在理论上具有无限可扩展性。(估计还未实现)

以上参考Cosmos白皮书及相关文献，如有不妥，欢迎联系交流。

---

*Originally published on [Yu](https://paragraph.com/@yu-4/cosmos)*
