概述
Polkadot XCMP(Cross-chain Message Passing)是Polkadot上的链间消息传输协议,主要用于平行链间传递消息。XCMP目前处于开发中,有些内容可能会发生变动,不过其架构已经差不多成型。
根据Polkadot自己的说法,XCMP利用基于Merkle树的简单队列机制确保跨链交易的保真度(fidelity)。中继链上的验证人负责把平行链出口队列中的交易转移到目标链的入口队列中,但是中继链并不会存这个跨链交易(或者说跨链消息)的原文,而只会存一些少量的消息元数据。
XCMP的目标
-
快速:消息能快速发至目的链;
-
有序:消息能按序到达目的链;
-
可验证:能验证到达的消息确实是发送链发送的、能验证该消息在接收链已经被处理;
-
无遗漏:接受链公平地接收每条消息,发送链不会无限期等待其消息被接收链接收和处理;
XCMP的一些特点
-
跨链消息是跨平行链之间的消息,消息原文不上中继链。但是目前XCMP还没有完全实现,现在Polkadot用的是Horizontal Relay-routed Message Passing (HRMP),HRMP将所有的消息存在中继链,未来会用XCMP取代HRMP。
-
某条平行链的收集人构造新区块时会把以自己为目的地、还未被处理的跨链消息都处理下。
-
验证人需要对收集人出的块进行跨链消息的检验看看跨链消息是否真的被处理过了。因此消息的一些元数据还是会上中继链的。
-
任意两条平行链之间传递消息必须开一个通道(Channel),通道是单向的,所以双向通信必须开2个。开一个通道需要抵押DOT,通道关闭后会退回DOT。
XCMP的一个简例