售前客服二维码
文章均源于网络收集编辑侵删
提示:仅接受技术开发咨询!
交叉链作为近两年区块链科技的一个热点方向,已经引起了很多人的关注。
从技术角度来说,Cosmos与Polkadot无疑可以称之为“跨链二人组”。他们的技术路线没有明显的优劣,但是他们的发展理念各有千秋。
Cosmos最初是由嫩薄荷团队构建的开源社区项目,它将自己定义为“由多个独立的并行区块链组成的分散网络”。和波尔卡多一样,也是通过接力技术实现的。
毕竟Cosmos是如何解决跨链过程中遇到的所有问题的?本文通过解释宇宙的体系结构和跨链交易过程,使我们进一步了解宇宙。
作为跨链竞争对手之一,
首先,介绍了宇宙的三个重要组成部分
枢纽:本质上是一个接力链,由政府维护,被视为跨链消息的信任中心;
专区:参与宇宙网的应用链,允许不同类型的区块链加盟;
Ibc(区块链间通信协议):链间通信协议。
这里的ABCI是应用层区块链如何与共识层交互的接口,共识层和网络层由CosmosSDK的底层实现,所以只有实现相关的ABCI接口,才能自己构建一个链。
ABCI接口和CosmosSDK将在下一个Cosmos系列中详细介绍。
普通交易消息:
msg发送结构{ from address github _ com _ cosmos _ cosmos _ SDK _ types }类型ACC address to address github _ com _ cosmos _ cosmos _ SDK _ types .ACC地址量github _ com _ cosmos _ cosmos _ SDK _ type .角点}
ChainA的Alice转给ChainB的Bob 100atom
1. ChainA的Tendermint收到该笔交易,调用BaseApp的BeginBlock,检查区块的高度、Gas消耗情况和节点投票情况;
2. 执行区块中的交易,减少Alice 100atom,增加托管账户Escrow 100atom,存储Alice和Escrow的账本(如果不是原生代币,则销毁Alice 100代币)。
3. 构建跨链交易MsgPackage数据包,根据DestinationChannel和DestinationPort定位Outgoing队列,将MsgPackage存入该队列;
4. 区块内交易全部执行完成后,Tendermint调用BaseApp的EndBlock收尾,包含执行完成后的事件等等, 再调用BaseApp的Commit,调用IavlStore持久化等操作;
5. IavlStore通过当前所有的Iavl Tree Root构建Merkle Tree;
6. ChainA的Tendermint通过Tree root生成区块哈希;
7. ChainA的Tendermint准备进行下一轮出块;
8. 中继器Relayer轮询ChainA的Out队列,发现Outgoing队列存在MsgPackag;
9. 中继器Relayer解析MsgPackage数据包来源和目的;如果发现ChainB的区块高度大于超时高度,移除ChainA的MsgPackage,向ChainA的inComming队列发送MsgTimeout数据包;
10. 中继器Relayer向ChainB的Incomming队列发送包含MsgPackage数据包,ChainB随后解析MsgPackage,验证MsgPackage的有效性;
11. 托管账户Escrow mint 100atom,然后向Bob发送100 atom;
12. ChainB构建MsgAcknowledgement数据包,中继器Relayer轮询ChainB的Incomming队列,将其放入ChainB的Outgoing队列;
13. ChainA收到ChainB的MsgAcknowledgement或者MsgTimeout数据包,如果MsgAcknowledgement包含执行失败的状态或者存在MsgTimeout数据包,则根据数据包内的信息进行向托管账户赎回对应的金额。
场景描述:Relayer是链下的一个传递跨链消息的组件,任何人可以启动Relayer来传递消息。
方案:所有验证在链上进行,Relayer只做消息传递。
效果:可多个Relayer同时工作,跨链消息的有效性和有序性的保证和Relayer无关,至少一个不作恶Relayer即可工作
我们可以看到,在每个IBC数据包的结构中都包含:
struct { Proof commitmentexported.Proof ProofHeight uint64 Signer sdk.AccAddress }
其中ProofHeight是对应的区块高度,Proof是Merkle Proof,Signer是发送者的地址,跨链双方维护对方的轻节点,提供类似SPV证明的机制。
IBC跨链协议中定义了两种关于包含状态的跨链交易数据包:
MsgAcknowledgement:定义IBC协议的响应数据包,包含跨链交易执行成功或者失败的状态。
// MsgAcknowledgement receives incoming IBC acknowledgementtype MsgAcknowledgement struct { Packet Acknowledgement []byte Proof commitmentexported.Proof ProofHeight uint64 Signer sdk.AccAddress }
MsgTimeout:定义IBC协议的超时数据包,包含下一个接收包的序列号。
// MsgTimeout receives timed-out packettype MsgTimeout struct { Packet NextSequenceRecv uint64 Proof commitmentexported.Proof ProofHeight uint64 Signer sdk.AccAddress }
来源链通过MsgAcknowledgement数据包,可以判断跨链交易是否执行成功,如果执行失败来源链做出相对的回滚。
来源链通过MsgTimeout数据包,可以判断一个跨链交易的数据包是否超时,如果超时来源链做出相对的回滚。
总体来说,Cosmos作为与Polkadot齐名的跨链双雄之一,在架构设计和IBC跨链协议上有许多值得我们学习借鉴的地方。
接下来的Cosmos系列文中会详细介绍IBC协议和Tendermint共识详解,敬请期待!
作者简介
江哲
来自数据网格实验室BitXHub团队主要负责区块链账本互操作技术相关研究工作
文章均源于网络收集编辑侵删
提示:仅接受技术开发咨询!