关于Cosmos的研究

本文从 多链跨链 开始,介绍了3种常见的跨链方式。接着介绍了Cosmos核心解决了2个问题,第一个是简化区块链创建过程,第二个是标准化了Cosmos生态内部的跨链协议IBC。

多链

为什么会有多链

多链,即有多条区块链。为什么不能所有上层应用都基于以太坊这一目前主流的区块链?其他链存在的意义是什么? 这里面的原因很多,首先不同的上层应用底层链的需求不同,有的强调安全性,有的强调效率。而且很多区块链诞生之初希望解决的问题也不一样,比如BTC是为了解决金融问题,ETH则是希望成为世界计算机运行智能合约,而像FileCoin,Arweave则是为了解决存储问题。ETH虽然目前是主流的区块链,但其扩容问题迟迟没有解决,也使得其他链有了更大的发展机会,让多链成为除了以太坊Layer2扩容之外的另外一种选择。

跨链

跨链概述

上文我们论述了为什么会出现多链并存的现象,如果这些链之间不能相互交互,那么就会又形成1个个孤岛,我们希望的是每条链在很好支持其上层应用之外,能够和其他链可以进行交互,这样不会造成信息孤岛,也能让链上资产能够更好的流通。不同链之间信息/资产交互的过程,我们称之为跨链。

一般而言跨链有2种需求

  1. 跨链资产/信息证明 eg:用户X在A链上有1个NFT,希望能够在B链上证明自己拥有这个NFT。
  2. 跨链资产交易 eg: 用户X希望将A链上的10个tokenA(A链上的通用资产,相当于ETH之于以太坊)置换为B链上的50个tokenB(B链上的通用资产)。

跨链方式

面对跨链的诉求,我们接下来讨论跨链是如何完成的。跨链核心问题是不清楚传递而来的信息是否确实在另外一条链上发生,围绕着这个问题,也有3种常见的解决方案。

公证人机制

公证人机制即有可信任的中间人,如X要用10tokenA(A链资产) 换取Y的50tokenB(B链资产)。X将10tokenA,Y将50tokenB都交给中间人,中间人确认双方均收到后,将10tokenA交给Y在A链的账户,将50tokenB转交给X在B链的账户。这种方式的问题是中心化风险较高。需要引入多重签名公证人机制,分布式签名公证人机制来解决中心化问题。

可以看到无论是中间人数量的多少,公证人机制的思路都是引入第三方来验证消息可靠性。

哈希时间锁定

依然上面的那个例子X要用10tokenA换取Y的50tokenB。

  1. X生成随机数k,将10tokenA存到A链的智能合约中需要验证Y提供的k进行hash运算得到H(k)和X预先设定的H(k)相等才可以提取。
  2. Y将50tokenB存到B链的智能合约中也将提取条件设定为X提供的k进行hash运算得到H(k).
  3. X通过k提取B链中的50token,此时Y获得k。
  4. Y从A链智能合约中提取10tokenA。

特别注意:X和Y在将资产存入智能合约账户中时都需要设置超时时间,超过超时时间资产自动转回原账户,避免资产无限期锁定。而且Y设置的超时时间要小于X,这样才可以保证X提取完B链资产后,Y有充足的时间去提取X的资产。

哈希时间锁定通过资产交换这一方式巧妙得使得交易双方都保证信息可靠性,但这种方式因为本身就是基于资产交换所以也只能用在这一场景下。

中继

中继只负责将消息发送链证明发送,而验证则交由接收链。

SPV可以用较小的代价验证消息是否可靠,比特币侧链方案BTC-Relay就是基于SPV。其流程为将主链的代币发送到特定账户,然后将SPV证明发送给侧链,侧链验证通过则发放对等代币。可以回顾以太坊数据结构中轻节点是如何验证交易是否完成。

在Cosmos中中继发送的职责也被简化为通用的IBC协议,2条链之间只需要按照IBC协议发送消息即可。

中继通过发送链生成证明,接收链可以验证该证明来确认信息是否可靠。

3种跨链方式比较

公证人机制 哈希时间锁定 中继
中心化程度 需要通过多重签名和分布式签名降低中心化程度 低,验证工作接收链完成
接入链要求 需要支持智能合约 比较适合具备区块确定性的链
应用范围 可以支持信息/资产交易和信息/资产证明 只支持双方资产交换 可以支持信息/资产交易和信息/资产证明
消息可靠性验证 引入第三方 由于资产交换,双方保证 证明验证

侧链/中继链

经常提到的侧链,其实不是一种技术方案,是两条链之间相对的概念。比如上文说到的BTC-Relay就是将以太坊作为比特币的侧链。其实在接下来我们讨论的Cosmos多链中已经没有侧链的概念,大家通过统一的协议通信,没有哪条链是哪条链的侧链。中继链也是多链提出的1种方案,因为大家相互交互,随着链的数量增加,网络内连接数会爆炸增长。所以设计中继链负责消息的中转,Cosmos中的Cosmos Hub就是一条中继链。

Cosmos

Cosmos简介

Cosmos是一个区块链网络。Cosmos提供了多链世界中的2个解决方案,1.降低构建区块链的成本,构建区块链简单使得区块链数目变多 2.实现了跨链,让不同区块链可以相互通信。

  1. 降低构建区块链成本主要通过模块化方式,通过ABCI进行纵向解耦,拆分为负责业务功能的Cosmos SDK 和通用的共识机制Tendermint,然后Cosmos SDK内部又通过模块化的方式横向解耦将系统功能拆分为账户、银行等不同模块。
  2. Cosmos通过IBC跨链的方式实现了通用的生态内跨链协议,并通过Cosmos hub中继链进行通信,同时依旧可以通过常见的跨链方式完成和生态外区块链完成通信。

Tendermint

共识机制

首先我们来看看Tendermint共识机制。在之前以太坊的共识机制一文中,我们已经详细介绍过共识机制,这里不再赘述。Tendermint使用了类似PBFT的算法,Tendermint BFT相对于PBFT主要做了通信过程以及投票流程上的优化,目标是为了更快达到共识。PBFT类型的共识性算法一直被诟病的原因是去中心化程度不够。每次投票都需要多次通信,随着节点数增加通信次数会爆炸式增长,所以网络中不能有过多节点。但其优势是区块可以达到最终确定,下面会具体讨论。

再谈共识-区块确定性

我们在之前共识协议的文章中讨论过POW和POS并不是共识协议,以太坊的共识是基于最长链的。以太坊未升级之前或比特币网络中是依赖POW方式出块,也就意味着此时的最长链可能不是最终的最长链,那什么时候可以最终确定呢?基于POW是不具备最终确定性的,因为始终可能存在一条链在未来某个时间超过当前最长链,只要它汇聚了51%的算力。而采用类PBFT的Tendermint共识在每次出块的时候都会进行投票,投票完成,也就确定了区块的合法性,所以Cosmos中区块是即时确定的。在以太坊升级到POS后,以太坊也会具备终局性,只不过不是即时的,以太坊进行的投票不是每个区块都进行一次投票,而是在检查点的时候对之前出现分叉的区块进行投票以保证终局性。每次进行耗时投票随着分布式节点数增加而增长。在保障性能的情况下,频繁投票势必要减少网络中验证者的节点数。这又是不可能三角中性能、安全性、去中心化之间的权衡。

比特币/未升级前的以太坊 升级后的以太坊 Tendermint BFT
区块确定性 不具备确定性 具有最终确定性 具有即时确定性
网络节点数 理论可以很多 较多 较少
吞吐量 较高 较高

连接通道ABCI

Tendermint提供了节点之间的网络通信以及共识机制,那么上层如何使用呢?Tendermint提供了ABCI的socket通信接口。用来提供区块链上层对Tendermint底层的使用。

这里使用socket也就代表了语言无关性。所以区块链上层可以使用任意语言开发,然后使用对应语言的socket连接方式进行连接即可。注:socket是对应TCP/IP的连接方式,所以和上层使用什么语言无关。 ABCI有3种主要的消息类型:

  1. AppendTx 每一笔交易通过该消息传递,上层验证通过则更新本地数据。
  2. CheckTx 验证交易有效性,验证通过则广播给其他节点。
  3. Commit 用于计算当前区块的块哈希值,存储在下个区块中。

Cosmos SDK

具备了共识机制,我们再来看看一个区块链还需要哪些模块。 官网模块列表

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

上面列举了一些关键的模块,我们在搭建新的区块链过程中,选择合适的模块直接使用会加速我们的开发速度,同时我们也可以提供一些通用功能模块到Cosmos SDK生态中,节省遇到类似问题开发者的时间。

跨链

文章开始我们已经较为详细地介绍了跨链,在这里我们直接讨论Cosmos的跨链机制IBC。我们主要分为在Cosmos生态内的跨链和生态外的区块链(比如以太坊)跨链。

Cosmos生态内多链跨链通信 IBC

Cosmos生态内的跨链方式采用我们文章开始介绍过的中继方式。Cosmos生态内链由于区块具备确定性,所以接收链可以很好验证消息证明。Cosmos生态内的链均通过Cosmos hub中继链来进行相互通信操作。Cosmos hub是Cosmos生态的第一条链。通信协议使用IBC协议。

我们来看看IBC的通信过程,假设存在A B两条链,X需要将A链上的10tokenA需要置换到B链上。

  1. X将10tokenA存到A链某1特定账户
  2. X在A链发送IBCBlockCommitTx到hub
  3. A在A链发送IBCPacketTx到hub
  4. Hub将IBCBlockCommitTx、IBCPacketTx消息转发给B链
  5. B链通过运行A链轻客户端验证X已经在A链将10tokenA存入特定账户
  6. B链给X在B链账户发送10tokenA的劵,注:该劵可以在B链流通,不直接兑换为B链tokenB是因为可能跨链过程中存在汇率变动。

IBCBlockCommitTx、IBCPacketTx可以用来验证X在A链的发布。具体验证过程可以查阅相关资料。

与生态外链跨链通信

不仅要支持生态内的跨链通信还需要支持生态外区块链的通信,比如和主流区块链以太坊的通信,IBC协议基于区块是确定性的,不能够支持基于POW的最长链共识,所以Cosmos和以太坊的通信通过专门设计的Gravity Bridge来完成。 Gravity Bridge是Cosmos生态内的区块链,但Gravity Bridge不仅仅包含这个区块链还包含了在以太坊中的一份智能合约。这份智能合约可以和Gravity Bridge区块链进行通信,属于我们开头列举的跨链方式中的中继方式。

Cosmos生态中也有一些区块链兼容了EVM,这样就可以为以太坊扩容,将以太坊上的资产通过Gravity Bridge置换为Cosmos生态内资产,Cosmos吞吐量较高,在多次交易后,再将Cosmos资产通过Gravity Bridge资产置换回以太坊的资产。

结尾

本文从多链和跨链开始,介绍了3种常见的跨链方式。接着介绍了Cosmos核心解决了2个问题,第一个是简化区块链创建过程,其主要思路是通过纵向将区块链应用层和共识层拆开,提供统一的共识机制Tendermint并改用socket和上层通信,使上层开发语言不受限制。横向应用层通过模块化的方式提供,开发者可以从Cosmos SDK中选择适合自己区块链的模块。第二个是标准化了Cosmos生态内部的跨链协议IBC,同时也允许和生态外的区块链通过常见的跨链方式进行通信。

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

  • 发表于 2022-03-22 09:50
  • 阅读 ( 1011 )
  • 学分 ( 24 )
  • 分类:Cosmos

0 条评论

请先 登录 后评论
web3探索者
web3探索者

18 篇文章, 620 学分