# Cosmos公链

By [johnnychen](https://paragraph.com/@johnnychen-2) · 2023-03-27

---

**Cosmos简介**

Cosmos 网络由不同的独立、平行区块链组成，其中的每条区块链都通过例如 Tendermint 这样的经典拜占庭容错共识运行。Cosmos 上的区块链称为“分区（zone)”。其中的一些分区又称为＂枢纽 (Hub)"，

而不同的分区可以通过共享的枢纽来互相通信与互操作。Cosmos 网络上的第一个分区就是 Cosmos 枢纽（the Cosmos Hub)。因为所有跨分区的代币转移都需要通过Cosmos 枢纽进行，所以代币可以安全、迅速地在分区之间转移。分区之间无需具有直接的汇兑流动性，而只需通过 Cosmos 枢纽来追踪记录每个分区持有的代币总量，并确保所有分区的代币总量不变。在此，Cosmos 枢纽起到了一种类似中央银行结算功能的作用。

cosmos这个项目是为了实现跨链而生的，在众多的跨链项目中，cosmos有它自己独特的特点，它把共识和P2P协议抽象出来，形成了一个单独的Tendermint的层或者叫模块。它采用Tendermint-BFT DPoS的共识引擎来解决跨链的共识问题。 众多的区块链项目，可以通过跨区块链沟通协议（IBC）来实现不同空间（cosmos用空间这个概念来表述不同的区块链）的信息传递。

**什么是Tendermint？**      _Tendermint可以理解为一个模块化的区块链软件框架，支持开发者个性化定制自己的区块链，而又不需要考虑共识以及网络传输的实现。_ **Tendermint主要概念**      _Tendermint是一个能够在不同机器上，安全一致复制应用的软件，其中安全性和一致性也是分布式账本的关键概念。      Tendermint具备拜占庭容错能力，是一种拜占庭容错共识算法。_ **Tendermint主要组成部分**      _Tendermint Core：区块链共识引擎，负责节点之间数据传输以及拜占庭共识。      ABCI：区块链应用程序接口(the Application BlockChain Interface ）也是一个协议，支持任何语言的交易处理实现。_ **_拜占庭容错_** _能够容忍机器以任何一种，甚至包括危害系统的方式发生故障，被称为拜占庭容错（BFT）_

Cosmos团队的核心产品是Cosmos-SDK，其仍然是采用了ABCI应用的架构（基于Go语言来实现）。如果使用这个SDK来开发一条自己的链，就不必过于纠结于链的底层的帐户体系，共识等技术细节，只需要关心自己的区块链的应用部分，而且在这个SDK中，还开放了一些开发的API，可以通过这些API来实现一些具体的基础实现，打造个性的区块链。

**Cosmos整体架构**

**网络共识（Tendermint）** 就如上图直观的表示一样，cosmos通过Tendermint实现了一个通用层，利用这个通用层，可以实现不同的应用的接插隔离。

**Cosmos中心（hub）** 这里的中心指是cosmos Hub，Cosmos网络中第一个公共区块链，通过Tendermint拜占庭共识算法运行。Cosmos中心通过ABCI来连接其他区块链（空间）。中心可以控制各个空间里代币。保证代币可以安全快速地从一个空间传递到另一个空间，即进行资产的跨链交易。

Cosmos中心负责管理各个独立区块链（即“空间”，或者“碎片”）。中心上的空间会源源不断地提交最新区块，这一点可以让中心跟上每个空间状态的变化。 Cosmos中心的验证人与委托人可以对提案进行投票，从而自动改变预先设置好的系统参数（比如区块容量限制），协调更新，并对人们看得懂的章程进行修订投票，从而管理Cosmos中心。这个章程允许权益相关者聚集到一起，来解决盗窃及漏洞等相关问题（比如The DAO事件），并快速得出明确的解决方案。

**空间（Zones）** 空间，也就是各个独立的区块链，连接到cosmos中心后，它们就成为了cosmos的一个空间。每个空间也会和中心的状态保持一致。信息可以从一个空间发送到另外一个空间，通过默克尔证明（Merkle-proof）来表明信息已经被传送或接收。这种机制叫做“区块链间通信”，简称为“IBC”机制。

**跨链通信协议（IBC）**

IBC是中心与空间之前通信的方法。假设现在有三个区块链，分别是“空间1”、“空间2”以及“中心”，如果想要“空间1”生成一个消息包，通过“中心”发送给“空间2”。为了让消息包从一个区块链转移到另一个区块链，需要在接收方区块链上发布一个证明，来明确发送方已经发起了一个消息包到指定地点。接收方要验证的这个证明，必须和发送方区块头保持一致。这种机制就类似与侧链采用的机制，它需要两个相互作用的链，通过双向传送存在证明数据元（交易），来“知晓”另一方的情况。

IBC协议可以自然定义为两种交易的使用：一种是IBCBlockCommitTx 交易，这种交易可以让区块链向任何观察员证明其最新区块哈希值；另一种是IBCPacketTx 交易，这种交易则可以证明某个消息包确实由发送者的应用程序，通过默克尔证明机制（Merkle-proof）传送到了最新区块的哈希值上。

通过将IBC机制分裂成两个单独的交易，即IBCBlockCommitTx交易与IBCPacketTx交易，可以让接收链的本地费用市场机制，来决定承认哪个消息包，与此同时还能确保发送方的完全自由，让其自行决定能够传出的消息包数量。

---

*Originally published on [johnnychen](https://paragraph.com/@johnnychen-2/cosmos)*
