跨链消息传递 - Interchain Message Pass
2019-09-16 本文已影响0人
空乱木
原文链接:https://research.web3.foundation/en/latest/polkadot/ICMP/
ICMP Scheme -关于Web3基金会研究wiki的完整技术描述
术语
- parachains 平行链
- relay chain中继链
- collator 排序器
动机
我们希望在内部链之间启用链间消息传递。我们想要一个保证,当我们发送一个块时,我们确信我们已经收到了所有之前的消息。此外,我们希望限制传入消息的大小,以避免溢出。
链间消息传递方案假设
我们假设所有内部链都有一个内部输入和输出队列。此外,每个parachain可以向另一个parachain发送固定数量的数据。
为了避免parachain被淹没和过度加载,parachain可以阻止来自其他parachain的消息。桥接到阻塞的通知,并将其传递给相应parachain上的用户。
PoV块是执行证明证人的数据。这可能包括:
- 输出消息(作为消息束散列预映像)
- 外部数据(“事务”、“extrinsics”或任何其他与Polkadot无关的数据)
- 证人(资料有效性的密码证明声明)
- 新的头文件(可能只适用于zkSTARKs之类的只验证STFs)
接收和发送属于Parachain Blob的消息的步骤(顺序):
1.collator需要首先检查是否有任何传入消息(可能没有)
- Collator运行中继链的轻客户端来决定中继链的Header
- Collator将parachain头和该parachain的输入队列跟踪为一组消息包的散列(这需要跟踪parachain上次接受输入以来的所有输出队列)
- Collator查询parachain验证器、排序器或可用性保证器(基于中继链数据),以便从包中获取实际的消息数据
2.Collator有一个事务池
3.collator根据这个事务池、以前的Header和任何其他数据(例如继承)以及传入的消息创建候选块
4.Collator根据来自3的数据为这个parachain构建一个PoV块候选,这包括传出消息
5.Collator将其分发给所有parachain验证器
6.Parachain验证器在某些有效PoV候选子集上生成认证,它接收这些认证并将其重新分发给其他Parachain验证器和块作者
7.Block author选择一组PoV候选人,每个parachain最多一个,由他们的组完全验证
8.Block author将中继链块候选分发给其他验证器
Compact Routing Proofs
考虑到暂时脱机的平行链,可以使用某种知识证明来证明输出队列已正确路由到正确的输入队列。