跨链Cosmos异构跨链交易流程
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨链Cosmos异构跨链交易流程相关的知识,希望对你有一定的参考价值。
当应用链双方在Hub注册后,彼此发现就可以通过路由进行跨链交易。
1.1 IBC跨链流程
ChainA和ChainB都是基于CosmosSDK搭建的应用链,Relayer作为一个链下中继负责轮询和路由IBC的数据包:
ChainA -> relayer -> hub -> relayer -> ChainB
1.2 ChainA的Alice转给ChainB的Bob 100atom
step1. ChainA的Tendermint收到该笔交易,调用BaseApp的BeginBlock,检查区块的高度、Gas消耗情况和节点投票情况;
step2. 执行区块中的交易,减少Alice 100atom,增加托管账户Escrow 100atom,存储Alice和Escrow的账本(如果不是原生代币,则销毁Alice 100代币)。
step3. 构建跨链交易MsgPackage数据包,根据DestinationChannel和DestinationPort定位Outgoing队列,将MsgPackage存入该队列;
step4. 区块内交易全部执行完成后,Tendermint调用BaseApp的EndBlock收尾,包含执行完成后的事件等等, 再调用BaseApp的Commit,调用IavlStore持久化等操作;
step5. IavlStore通过当前所有的Iavl Tree Root构建Merkle Tree;
step6. ChainA的Tendermint通过Tree root生成区块哈希;
step7. ChainA的Tendermint准备进行下一轮出块;
step8. 中继器Relayer轮询ChainA的Out队列,发现Outgoing队列存在MsgPackag;
step9. 中继器Relayer解析MsgPackage数据包来源和目的;如果发现ChainB的区块高度大于超时高度,移除ChainA的MsgPackage,向ChainA的inComming队列发送MsgTimeout数据包;
step10. 中继器Relayer向ChainB的Incomming队列发送包含MsgPackage数据包,ChainB随后解析MsgPackage,验证MsgPackage的有效性;
step11. 托管账户Escrow mint 100atom,然后向Bob发送100 atom;
step12. ChainB构建MsgAcknowledgement数据包,中继器Relayer轮询ChainB的Incomming队列,将其放入ChainB的Outgoing队列;
step13. ChainA收到ChainB的MsgAcknowledgement或者MsgTimeout数据包,如果MsgAcknowledgement包含执行失败的状态或者存在MsgTimeout数据包,则根据数据包内的信息进行向托管账户赎回对应的金额。
以上是关于跨链Cosmos异构跨链交易流程的主要内容,如果未能解决你的问题,请参考以下文章