总结
Polkadot-xcmp(cross-chain-messagepassing)是Polkadot上的一种链间消息传输协议,主要用于在并行链之间传递消息。Xcmp目前正在开发中,一些内容可能会改变,但它的架构已经基本成。
根据Polkadot,xcmp使用基于Merkle树的简单队列机制来确保跨链事务的保真度。中继链中的验证器负责将并行链出口队列中的事务传输到目标链的入口队列,但中继链不存储跨链事务(或跨链消息)的原始文本,而只存储少量的消息元数据。
xcmp的目标
1快速:消息可以快速发送到目的链;
2顺序:消息可以按顺序到达目的链;
3可验证:可以验证到达消息确实是由发送链发送的,以及该消息在接收链中已被处理;
4无遗漏:接收链公平地接收每一条消息,发送链不会无限期地等待接收链接收和处理其消息;
xcmp的一些特性
1交叉链消息是跨越平行链的消息,原始消息不在中继链上。但是,xcmp目前还没有完全实现。Polkadot使用水平中继路由消息传递(HRMP)。HRMP将所有消息存储在中继链中,将来xcmp将取代HRMP。
2当一个并行链的收集器构造一个新的块时,它将处理尚未用其自己的目的地处理的跨链消息。
3验证器需要检查来自收集器的跨链消息,以查看是否已处理跨链消息。因此,消息的某些元数据仍将放在中继链上。
4任何两个平行链之间的消息传输必须打开一个通道。信道是单向的,因此必须打开两个信道进行双向通信。要开通一个渠道,你需要抵押网点。通道关闭后,点将返回。
xcmp的一个简单示例
Polkadot的官方网站给出了一个简单的例子:假设部署在并行链a上的契约向并行链B发送跨链调用消息,从而调用链B上的契约来完成资产转移。整个过程如下:
1(如图1所示),调用者(用户)调用部署在a链上的智能合约,初始化一条以链B为目的地的跨链消息m;
2(如图2所示)链a的collator节点将消息M及其目的地和时间戳一起放入a的退出队列中;
3(如图3.1和3.2所示)正常情况下,B链的收集器将轮询并行链的所有其他收集器节点,查看它们是否有自己的消息(发往B链的消息)。如果在新一轮查询中发现有自己目的地的消息,它会将该消息(如这里的消息m)放入自己的入口队列中,待下一个块生成时进行处理;
另外,a链的验证器会通过读取a链的出口队列知道这个消息,B链的验证器也会知道,验证器也需要知道这些消息,因为稍后(见步骤6),他们会验证这个消息(例如这里的消息m);
5(如图5所示)当B链的collator节点开始构建一个新的块时,它将处理当前进入队列中的所有消息(包括消息M);在处理过程中,消息M将在B链中执行相应的智能合约,完成预期的(跨链)资产转移;
6(如图6所示),然后收集器将块提交给验证器,验证器将验证消息M(以及其他消息)是否已被实际处理;如果消息被验证为已处理,并且块中没有其他非法位置,则验证器将该块包含到中继链中。
这个例子相对简单。这只是xcmp的一瞥,也留下了一些漏洞。例如,链B如何知道链a向自身发送了消息?B链真的会得到交叉链的信息吗?这些问题将在以下内容中予以澄清。
一般来说,xcmp主要分为xcmp消息分发和xcmp消息访问两部分。
Xcmp消息分发
Xcmp消息分发实际上是Polkadot网络的一部分。Xcmp不仅需要实现来自接收链的跨链消息,还需要实现高效的捕获,从而降低整个网络的通信成本。
虽然xcmp的设计尽可能减轻中继链的负担,但中继链作为跨链消息双方之间唯一的信任中介仍然不可或缺。中继链主要负责与交叉链路消息元数据相关的工作(例如,中继链的信道状态表记录了交叉链路消息传输信道的状态,将在“xmcp消息的访问”中详细描述)。
当发送链发送交叉链接消息时,它将在其新块中包含该消息。经过验证器验证后,将并行链的块头放在中继链上,这样中继链就可以知道发送链已经向接收链发送了消息,并将消息更新到自己的状态。然后接收链通过向中继链询问相关消息的元数据来判断是否要接收跨链消息。
如果接收链知道发送链有一条消息通过中继链发送给自己,那么如何传递消息取决于xcmp消息路由方法。
xcmp消息有几种路由方法:
1当发送链中有一个完整的节点同时也是接收链域的一部分时,发送链可以发送带有八卦消息的消息,从而使接收链接收消息(通过整个节点的转发)。
2如果在中继链中有一个完整的节点,它同时位于发送链的域和接收链的域中,那么发送链可以用八卦消息发送消息,这也可以使接收链最终接收(通过中继链的整个节点转发)。
3如果以上所有条件都不满足,则接收链的验证器将发现没有收到跨链消息。因此,接收链验证器会主动找到该消息的发送链验证器,然后验证器节点需要在链的网络中对该消息进行八卦,这样其他节点才能得到该消息。
因此,消息传递可以由发送链直接发送,也可以由接收链自己接收。
“概述”中的一个简单例子是,接收链会自行接收,收集器会要求收集器接收,这不是上述三种情况之一。为什么?
这是因为“xcmp消息分发”部分的内容还没有完全设计好,它是一个有更多变化的部分。
待续
文章链接:https://www.btchangqing.cn/112428.html
更新时间:2020年09月29日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。