浅谈波卡平行链消息传递机制 HRMP

摘要:
本文根据 Polkadot github 第 1900 号合并–Implement HRMP,先介绍了 Polkadot 跨链相关的背景知识、HRMP 相关的基本概念,然后分析了 HRMP channel 通信的基本过程, 并与 Polkadot 跨链最终方案 XCMP 进行了对比分析。
背景:
Polkadot 是一个 Relaychain+Parachain 组合的多链系统。
Parachain 的提出背景是为了解决区块链可扩展性 (Scalability) 和灵活性 (Flexibility):
· (1)通过累加多个 Parachain 的 TPS,提高整个多链系统的吞吐量。
· (2)针对不同的业务场景,Parachain 可进行专门定制。简单说, Parachain 就是一个实现分片 (Shard) 的例子。而 Relaychain 做为 Polkadot 多链系统的中枢, 则为 Parachain 提供了一致性安全保证及跨链消息路由机制。那么 Parachains 之间如何进行跨链通信呢?  HRMP(Horizontally Relay-routed Message Passing – 水平中继路由消息传递)便是其当前的解决方案。

一、 Relaychain 和 Parachain 拓扑边界

上图中: 1 Relaychain + Parachain A + Parachain B
· Relaychain: 4 个 Validator (Relay1,Relay2,Relay3,Relay4)
· Parachain A: 1 个 Collator + 1 个 Full node + 1 个 Light node, 及 2 个 Validator(Relay1,Relay3)
· Parachain B: 1 个 Collator + 1 个 Full node + 1 个 Light node, 及 2 个 Validator(Relay2,Relay4) 。Collator 是一类连接在每· 个 Parachain 和 Relaychain 之间的特殊节点, 即一部分连接 Parachain,一部分连接 Relaychain。这样做至少有两个理由:
· (1) 通过它可以直接将 Parachain block 发送到 Relaychain 网络,从而被随机分配的 Validator 接收并验证。
· (2) Collator 做为 Relaychain 的 Full 或 Light 节点保持和 Relaychain 的同步, 能及时接收到新的 Relaychain block 通知,这个信息被用于 Parachain 的共识和出块机制。
二、 HRMP 相关概念

根据 Web3 基金会的术语表,和 HRMP 相关的概念如下:
· UMP: (Upward Message Passing) A vertical message passing mechanism from a Parachain to the relay chain。
· DMP: (Downward Message Passing)。Message passing from the relay-chain to a Parachain。
· VMP: (Vertical Message Passing) A family of mechanisms that are responsible for message exchange between the relay chain and Parachains。
· HRMP: (Horizontally Relay-routed Message Passing)。A mechanism for message passing between Parachains (hence horizontal) that leverages the relay-chain storage。Predates XCMP。
· XCMP (Cross-Chain Message Passing) A type of horizontal message passing (i。e。between Parachains) that allows secure message passing directly between Parachains and has minimal resource requirements from the relay chain, thus highly scalable。
总结一下:
UMP 是 Parachain 到 Relaychain 的消息传递。
DMP 是 Relaychain 到 Parachain 的消息传递。
VMP = UMP + DMP
HRMP 是 Parachain 之间消息传递的过渡方案,它把跨链消息存在了 Relaychain 上,严重占用 Relaychain 的存储资源。
XCMP 是 Parachain 之间消息传递的终极方案, 允许 Parachain 之间直接传递信息且只占用 Relaychain 最小的资源。
三、HRMP Channel 时序图

(1) Parachain A 和 Parachain B 都向 Relaychain 提交注册。
(2) Parachain A 向 Relaychain 发起建立到 Parachain B 的消息通道的请求 (cap: 当前允许接收的最大消息数, max: 当前允许接收消息的最大字节数)。
(3) Router::init_open_channel 被调用的同时, Relaychain 通过 DMP 机制向 Parachain B 发送 HrmpNewChannelOpenRequest 消息。
(4) Parachain B 收到 HrmpNewChannelOpenRequest 消息后, 向 Relaychain 回复接受建立 (para_a, para_b) 的消息通道的请求。
(5) Router::accept_open_channel 被调用的同时, 通道被建立, Relaychain 通过 DMP 机制向 Parachain A 发送 HrmpChannelAccepted 消息。
(6) Parachain A 收到 HrmpChannelAccepted 消息后, 向 Relaychain 发送到 Parachain B 的消息 data
(7) Router::queue_outbound_hrmp 将 Parachain A 的消息出口队列 data 转移到 Parachain B 的消息入口队列
(8) Router::prune_hrmp 从 Parachain B 的消息入口队列查询并返回消息 data (watermark 是 Relaychain blocknumber, 表示小于这个高度的传入消息都已被处理)
(9) Parachain A 向 Relaychain 发起注销到 Parachain B 的消息通道的请求。
(10) Router::close_channel 被调用的同时, Relaychain 通过 DMP 机制向 Parachain B 发送 HrmpChannelClosing 消息。
(11)  通道元数据被删除。
四、HRMP vs XCMP
我们对比一下 Web3 基金会定义的 XCMP, 假定按照 Gossip 算法发送消息。
(1) Parachain 之间有相同节点

图中显示了基于 Gossip 算法传递消息的情况,假定由最新产生 ParaBlock 的 Parachain A 网络中的 Collator 节点发起
跨链消息将直接从 Parachain A 网络传递到 Parachain B 网络。
(2) Parachain 之间没有相同节点

图中显示了 FallBack 方式传递消息的情况,他们之间没有共同的全节点
我们假设 Parachain A 向 Parachain C 发送跨链消息。
当 Parachain C 的 Validator 通知跨链消息没有被传递到 Parachain C 时,它们将会向 Parachain A 的 Validator 请求他们 Parachain 出口队列中的跨链消息,收到相应的回应后,再按照 Gossip 算法将跨链消息传递到 Parachain C 网络。
当跨链消息被加入到他们的消息出口队列时, 跨链消息被保存在他们平行链中的 Collator 节点和Full 节点上。当平行链的区块头被纳入中继链上时, 平行链的 Validators 也会保存这些跨链消息。
为了保证跨链消息的可用性,要求所有的 Validator 保存跨链消息的纠删码,纠删码由发送跨链消息的平行链中的 valiadators 生成和分发。只要 Validators 至少保存了三分之二, 跨链消息就能复原。如果低于三分之二, Validators 将会受到经济惩罚。以此来保证跨链消息的可用性。
综上, XCMP 机制中, Relaychain 只保留了跨链消息的 hash, 而跨链消息则以纠删码的方式保存在了发送跨链消息的平行链中的 Collator, FullNode 和 Validator 上。
五、 总结
从语义上讲, HRMP 模仿了 XCMP 的业务接口, 将跨链消息存储在 Relaychain 上使事情变得简单,同时对 Relaychain 资源要求较高,价格昂贵。
而 XCMP 比较灵活,扩展性高,但实现难度大,方案还在演进中。当 XCMP 实现后, HRMP 自然会被遗弃。
参考链接:
Polkadot’s Messaging Scheme
Parachain Implementation Guide
Implement HRMP
Research At Web3
Cumulus Overview
欢迎学习 Substrate: 
https://substrate.dev/
关注 Substrate 进展:
https://github.com/paritytech/substrate
关注 Polkadot 进展:
https://github.com/paritytech/polkadot