跨链Cosmos(9)异构跨链交易流程
當應用鏈雙方在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(9)异构跨链交易流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跨链Cosmos(8)同构跨链交易流程
- 下一篇: 跨链Cosmos(11) 消息结构