引自:
Cosmos概述
Cosmos是Tendermint团队推出的一个支持跨链交互的异构网络,它最终的目标是创建一个区块链互联网,允许大量自主且易开发的区块链互相扩展和交互。基于Tendermint开发,采用的Tendermint共识算法,是一个类似实用拜占庭容错共识引擎,具有高性能、一致性、具备拜占庭容错等特点。
Cosmos架构
不难看出cosmos-sdk其实就是一个ABCI应用。主要有:
-
baseapp:定义了一个基本ABCI应用的模版,与Tendermint通信。开发者也可以根据自己的需求重写。
-
应用程序:包括gaia、basecoin、democoin。其中gaia就是hub主程序,basecoin以及democoin是提供的两个示例应用。
-
plugins:cosmos-sdk的基本单元,每个plugin都是baseapp的功能扩展,包含各自的消息和交易处理逻辑。目前SDK已经集成了一些重要的plugin:
-
staking:POS相关的实现,包括:绑定,解绑,通货膨胀,费用等操作。
-
ibc:跨链协议IBC的实现,也是Cosmos支持跨链的主要插件。
-
governance:治理相关的实现,如提议、投票等。
-
auth:定义了一个标准的多资产账户结构(BaseAccount),开发者可以直接嵌入自己的账户体系中。
-
bank:定义资产的转移。
Cosmos跨链
实现跨链需要做到:
-
共识算法需要具备及时最终性,也就是说在出块之后,需要能够快速确认为不可逆(固定不变)。
-
交易确认需要高效独立的证明方法,目前的做法都是基于Merkle证明。
基于cosmos-sdk的区块链使用了Tendermint共识算法就非常容易能够做到。
Cosmos的区块链间通信协议(IBC)将不同区块链连接起来,达到价值转移的目的。
IBC协议
IBC协议是针对Cosmos网络设计的,依赖其及时最终性的特点,用于Hub与Zone之间消息传递。IBC协议中设计了两个消息:
-
IBCBlockCommitTx:发送方所在区块链的最新的区块信息。
-
IBCPacketTx:跨链交易本身的信息,及其在发送方链中被打包的区块信息。
在IBC协议设计里,两个链建立连接之前需要进行彼此注册,有两个作用:
-
保存对方链验证者集合以及Merkle证明的算法,这样接收链才能确保消息的正确性和来源的可靠性。
-
为对方链创建两个可靠队列,一个队列存放所有对方链的消息(outgoing),一个队列存放来自对方链的消息(incoming)。
我们以chain1中用户User A转100mycoin 给test-hub用户User B为例看看IBC整个的工作流程如下(基于目前IBC实现代码):
整个工作流程可以分为三个阶段:
-
User A向chain1提交跨链交易,chain1执行该交易,并将交易存入outgoing队列。
-
relayer从chain1中对应test-hub的outgoing消息队列取出跨链交易,提交到test-hub。
-
test-hub执行交易,放入incoming消息队列。
PegZone
现存的Bitcoin和Ethereum这类使用POW共识的区块链并不具备此特点,只能属于概率最终性,无法防止区块链的回滚。对于这类链,团队采用PegZone方案来解决。
PegZone本身其实是一条代理链,实时跟踪原始链的状态,通过设定一个安全阀值,等待原始链区块增长数达到安全阀值时就认为原始链的状态达到了伪实时最终性(回滚概率小),这点和轻客户端钱包验证是相同的原理,例如比特币安全阀值通常设置为6,以太坊安全阀值可以设置为20或者100。而PegZone本身具备实时最终性,就可以通过IBC与Hub相连,从而实现跨链。
上图我们可以看出PegZone可以分为5个部分:
-
Smart Contract:资产托管的角色,保管以太坊中的代币和Cosmos中的代币。主要提供了lock、unlock、mint、burn四个方法。
-
Witness:是一个以太坊全节点,监听以太坊合约的event,并等待100个区块产生后,封装WitnessTx提交到PegZone中来证明在以太坊内状态更改。
-
PegZone:PegZone是基于Tendermint的区块链,负责维护用户的账户信息,允许用户之间资产的转移,并提供交易查询。
-
Signer:使用secp256k1对交易进行签名,以便签名能够高效的被智能合约验证,对应于智能合约的校验者公钥集合。
-
Relayer: 中继器负责交易转发。将所有Signer签名后的SignTx转发到smart contract中。
现状
跨链是Cosmos的重要特性,但在从目前的代码实现上感觉有些遗憾:
-
IBC协议目前只完成了基本消息的传递功能,并没有安全校验、注册机制以及一些异常的处理。
-
PegZone机制处于暂停状态,机制设计上团队也称处于实验性质。
-
对于没有基于cosmos-sdk开发,但符合实时最终性的链无法使用IBC,无法做到异构链的兼容。它们可能使用不同的:
-
签名算法
-
序列化方法
-
Merkle证明的方式
总结
通过上下两篇文章,从架构,核心技术——Tendermint、跨链、源码以及现状等方面对Cosmos进行了详细介绍。整体来讲,Cosmos更偏向于一个区块链开发框架,让开发者可以只需要专注于自身业务而不需要考虑区块链底层技术实现,所以在架构设计上采用了灵巧的插件设计,开发者可以按需使用。
Cosmos跨链协议部分从代码上看,完成度还不太高,有些遗憾。并且设计上跨链交易都需要通过Cosmos Hub,这样会过于依赖Hub,对Hub本身的承载压力是个考验,目前其他的一些跨链实现方案也都需要依赖自身的一条链,都会存在这个问题。笔者觉得跨链未来会发展成标准化协议,就像TCP之于互联网,而不是依赖某条具体链,通过定义标准化的模块,通过路由将跨链交易转到目标链,目标链完成对原始链的校验后,确认交易合法性,并执行交易。设想示意图如下:
相关荐文