加入 PolkaWorld 社区,共建 Web 3.0!

Polkadot 的首批 5 条平行链在 12 月 18 日成功上线,这标志着波卡正式跨入 “平行链时代”。大家很期待看到的,就是平行链之间的跨链交互将带来什么样的创新和网络效应。

在这篇文章中,我们就来了解一下波卡平行链之间跨链互操作的基础 —— XCMP 协议。

XCMP 是什么

XCMP 全称是 “跨链消息传递协议(Cross-Chain Message Passing)” ,它是波卡的跨链消息传递协议之一,规范了同一中继链的平行链之间跨链传递消息的方式。

XCMP 协议用了一种基于 Merkle 树的简单排队机制,以确保跨链信息的准确性。

XCMP 的意义——平行链间的互操作性

平行链之间能够互相跨链是波卡设计的核心要素之一,它让波卡生态成为一个互联的多链生态系统。

波卡架构示意图

传统的区块链是高度孤立的,虽然在自己链的生态内的合约之间可以互相调用,但各区块链之间的跨链困难重重,就像一个个闭关锁国的国家。

而波卡的愿景是促成一个多链生态,接入波卡中继链的每条平行链不需要全能,而是可以专注做自己擅长的事,朝着那个方向去优化,再通过跨链来和其他的平行链交互来取长补短。

例如,一个游戏开发商想在波卡的多链生态中开发一款游戏,它可以让游戏运行在一条性能良好的游戏平行链上,使用 NFT 平行链提供的游戏角色作为素材,使用 DeFi 平行链提供的稳定币作为游戏道具的交易媒介。

这样一来,各条平行链就像开展自由贸易的国家一样,可以发挥自己的比较优势。随着平行链越来越多,其他平行链可以利用的 “组件” 也越来越多,从而开辟出更多新的使用场景,形成网络效应。

而做到这一切的前提,就是平行链之间要能够有一套跨链的协议,来规范整个消息传递的过程,就像国际贸易中要有通行的贸易准则一样。这套协议就是 XCMP。

需要说明的一点是,XCMP 能跨的不仅仅包括资产。平行链之间不仅可以使用 XCMP 发送 token,还可以发送任何类型的数据和消息,比如平行链之间可以跨链调用合约。这意味着,类似于以太坊中合约之间的可组合性,波卡的平行链之间可以拥有链层面的互操作性,也可以说是跨链可组合性。

如果你想进一步了解 XCMP 的意义,可以查看我们之前的这篇文章,里面有波卡生态多位开发者对 XCMP 的解读。

XCMP 如何工作?

波卡网络中有两个重要的参与者——验证人节点和收集人节点。

验证人节点在中继链上,负责中继链的出块,它们会验证收集人提供的候选区块。

收集人节点在平行链上,每条平行链的收集人都是中继链和该平行链的全节点,它们会收集平行链的交易,并为验证人提供候选区块。除此之外,收集人还会通过 XCMP 发送和接收来自其他来自其他平行链的消息。

假设平行链 A 的一个合约想要向平行链 B 发送一条消息,从而调用 B 链上的一个合约,来在 B 链中进行资产转账。

A 链的收集人会把这条消息和其目的地、时间戳一起,放到 A 链的输出队列中。

B 链的收集人向网络请求新消息时发现了这条消息,然后把它放到自己的输入队列中。

A 链和 B 链的验证人也会各自读取输出和输入队列,所以它们可以验证这条消息传递确实发生了。

当 B 链的收集人在 B 链上出下一个块的时候,就会从输入队列中处理到这条新消息,这条消息就会在 B 链上执行合约,按照计划完成资产转账。

然后收集人把这个区块提交给验证人,验证人会验证这条消息已经处理过了,并且其他方面也没问题,于是验证人就会把这个区块包含到中继链上。整个跨链消息传递的过程就结束了。

下面是一个 Parity 制作的科普视频,描述了 XCMP 如何工作。

XCMP 的设计

XCMP 目前正在开发中,细节可能会有变化。但是,总体架构和设计决策如下:

跨链消息不会传递到中继链。跨链消息的规格会有上限(为以字节为单位)。平行链可以拦截来自其他平行链的消息,在这种情况下,调度平行链将知道这个区块。收集人节点负责在链之间路由消息。收集人生成一个 “输出(engress)” 消息列表,并将从其他平行链接收 “输入(ingress)” 消息。在每个区块,平行链应该从所有其他平行链的某个子集路由消息。当收集人出了一个新的区块来交给验证人时,它将收集最新的入站队列信息并进行处理。验证人将检查下一个平行链区块的新候选块包含了对该平行链的预期入站消息的处理。

XCMP 队列必须首先通过打开两个平行链之间的通道来启动。通道由发送方和接收方的平行链辨识,这意味着它是一个单向通道。一对平行链之间最多可以有两个通道,一个用于向另一个链发送消息,另一个用于接收消息。通道的打开需要 DOT 押金,当通道关闭时将返还押金。

XCMP 方案可以实现以下属性:

去信任性:由于同一组验证人在保证正确消息传递的同时确保一个平行链与另一个平行链的安全,XCMP 所需的信任不超过单个区块链所需的信任。一致性:提供了绝对的保证,即接收到的消息与发送的消息完全一致,即使有任何链重组。有效性:Polkadot 保证消息不会丢失并保持可用。这是通过分发可用于重建消息的纠删码片段来实现的。保持正确的序列:通过输入/输出验证,可以保证保持平行链区块输出消息的正确顺序。效率:这个协议避免了太多的带宽占用,并让消息尽快到达。

XCMP vs XCM

XCMP 和 XCM 的简写相似,但实际的含义相差甚远。为了避免混淆,我们也在这里做一下区分。

XCM 是波卡中的跨共识消息格式(Cross-Consensus Message Format)的简称,它是一种消息格式,而不是一种消息传递协议。也就是说,它本身并不能在系统之间发送消息,它更像是一门语言,仅仅是表达接收者应该如何理解消息。

XCM 是 “跨共识” 的,所以它不仅可以用于通过 XCMP 、桥等来跨链发送消息,还可以用于在不同的系统(如智能合约和 Pallet)之间传递消息。

XCMP 进展

目前 XCMP 在开发中,还未上线。目前平行链间跨链通信使用的是过渡方案 HRMP(水平中继路由消息传递),比如 Karura 和 Bifrost 之间的跨链就用到了 HRMP。等到 XCMP 上线后,HRMP 就会光荣退休。

HRMP 与 XCMP 有同样的功能,区别是,它对资源的消耗要大得多,因为它将所有的消息都存在中继链存储中,而在 XCMP 中只有和消息关联的元数据会作为哈希存储在中继链存储中。

波卡创始人 Gavin Wood 博士在最近的新年社区答疑视频中也表示,2022 年 Parity 的重点开发工作就包括了继续提升 XCMP 的性能。

PolkaWorld Telegram 群:t.me/polkaworldPolkaWorld Youtube 频道:https://www.youtube.com/c/PolkaWorldPolkaWorld Twitter:@polkaworld_orgPolkaWorld 网站:https://polkaworld.pro/