Domain之间的消息传递,都必须通过consensuschain;consensuschain当做domain之间的一个gossip网络,因为每一个domain的会链接consensuschain,从而接受到domaingossip到consensuschain的xdm消息;每个dom
Domain之间的消息传递,都必须通过consensus chain;consensus chain当做domain之间的一个gossip网络,因为每一个domain的会链接consensus chain,从而接受到domain gossip到consensus chain的xdm消息;
每个domain代码里面包含了relayer的代码,所以每个operator会把消息发送给consensus chain,domain的relayer会监听consensus chain的事件,然后把消息发送到domain的的inbox和outbox; 为了保证消息的原子性,从domain-a发送到daomain-b的消息,会等到domain-a的消息在consensu chain上面的挑战期过期后,domain-b才会执行这条xdm消息,就是为了保证xdm消息的正确性;
domain-b执行完xdm消息后,会发送一个response xdm消息给domain-a来确认消息已经被执行,收到了domain-b的reponse消息后,domain-a会删除自己outinbox的xdm消息;从这里我们可以知道,可能会有重试的可能性;比如,经过多少高度以后,还没有收到reponse消息,就会重新replay xdm消息到domain-b;
domain-a会在发送下一条xdm消息时,添加上一次domain-b reponse消息的index号,从而让domian-b知道domain-a收到了domain-b的哪条回复;从这里我们知道,domain-b也可以知道domain-a是否已经收到了自己回复的reponse消息,从而是否决定重发;
跨链牵涉到几个必须要处理的部分:
现在跨链只有两种交易,跨链资产转移和跨链资产交换。 跨链资产转移的例子是:sol转移到以太坊,变成wsol,其中wsol属于以太坊上面的一个erc20合约代币; 跨链资产交换其实是跨链资产转移的升级版,就是包含了资产转移+资产交易;其中的资产交易可以用dex,也可以用cex。
因为只有资产类跨链,还没有跨链消息调用类的跨链消息;所以现在的跨链方案基本都不考虑执行失败的情况,默认执行都会成功;在现实的实践中,合约的资产类行为失败的原因只有以下几种:
所以跨链合约的原子性问题比较简单;
其实不光是资产类的交易不会失败,其实跨链消息调用应该也不会失败。原因是区块链是一种永不停机的世界计算机,不会有点单问题,那怕一台机器因为各种原因(比如硬件故障,突然断电等)计算失败,但是一个交易是否执行成功的衡量标准是交易在整个网络中是否执行成功,考验的是整个网络的稳定性。我们一般都假设整个网络协议不会出问题,所以当然每条交易都会执行成功,这里的成功不是说都返回成功,而是说大家执行的结果达成共识,即都一样。
但就像上面所说的一样,除非gas费不足,或者程序本身有bug,执行一定会会成功的;
很多跨链桥因为没有权限对目标链上的资产进行铸造(这也是大部分情况),所以跨链桥事实上是拥有很多链的token资产,用户发起跨链资产转移的本质是把资产发送给跨链桥,跨链桥收到用户的源链资产以后,在目标链把自己的token资产发送给用户在目标链上的地址;
所以跨链交易不是用户自己随意调用目标链上的所有合约接口,只能调用跨链桥支持的接口,而且调用方式也需要按照跨链桥提供的方式进行调用,不然跨链桥无法理解用户的交易如何执行;
从上面原理我们可以知道,跨链其实是跨链桥起到一个翻译作用。所以跨链交易的格式需要按照跨链桥要求的,跨链桥理解的格式进行组装交易。不管cosmos 的ibc,还是polkadot的xcmp,还是layerzero都差不多;
所以跨链交易不是源链和目的链的两笔交易的简单组合,而是一种由跨链协议(跨链桥或者relayer能识别)支持的一种全新交易类型;
跨链因为牵扯到多个独立链,所以跨链交易就必须处理多个链上面地址类型不同的问题,还有多个链交易的签名问题,还有多个链的gas费问题;
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!