#并行链 #组件 #中继 # #桥梁 #头信息 #波卡

无需std 货架-桥梁-并行链

模块允许桥梁中继链在其并行链头部交换信息。(polkadot v1.15.0)

16个重大版本更新

0.17.0 2024年7月18日
0.14.0 2024年6月24日
0.10.0 2024年3月18日
0.6.0 2023年12月13日
0.0.0 2023年6月20日

1038神奇豆子

Download history 352/week @ 2024-04-19 371/week @ 2024-04-26 146/week @ 2024-05-03 121/week @ 2024-05-10 532/week @ 2024-05-17 623/week @ 2024-05-24 329/week @ 2024-05-31 825/week @ 2024-06-07 318/week @ 2024-06-14 795/week @ 2024-06-21 602/week @ 2024-06-28 205/week @ 2024-07-05 914/week @ 2024-07-12 541/week @ 2024-07-19 677/week @ 2024-07-26 525/week @ 2024-08-02

2,703 每月下载量
8 个crate(5个直接) 中使用

GPL-3.0-or-later…

2.5MB
43K SLoC

桥梁并行链组件

桥梁并行链组件是桥梁中继链的一个或多个并行链的轻量级客户端。它作为最终确定的并行链头部的来源,并在需要与并行链建立桥梁时使用。

该组件需要桥梁GRANDPA组件在同一链上部署 — 它用于验证在桥梁中继链上生成的存储证明。

关于Parachains最终性的简介

您可以在Polkadot-SDK仓库中找到关于Parachains最终性的详细信息。本节简要概述了Parachains最终性是如何工作的以及如何为Parachains构建轻客户端。

其中最主要的是,Parachains可以自己生成块,但无法在没有其中继链的帮助下实现最终性。相反,Parachains的收集器创建一个块并将其交给中继链验证者。验证者验证该块并在Heads映射中注册新的Parachains头部,这个映射是由paras组件部署在中继链上的。请注意,这个部署在中继链上的组件不是一个桥梁组件,尽管它们的名称相似。

桥梁Parachains组件所做的,就是简单地验证那个Heads映射中Parachains头部的存储证明。它是通过使用之前由桥梁GRANDPA组件导入的中继链头部来做到这一点的。一旦证明被验证,组件就知道给定的Parachains头部已经被中继链最终化。Parachains头部字段随后可以用来验证来自Parachains的存储证明。这允许组件被用作例如消息组件最终性的来源。

组件操作

组件的主要入口点是submit_parachain_heads调用。它有三个参数

  • 来自Heads映射的Parachains头部存储证明;

  • 来自存储证明的Parachains标识符及其头部哈希;

  • 生成存储证明的中继块。

组件可以跟踪多个Parachains。Parachains可能使用不同的原语——一个可能使用128位块号,另一个可能使用32位。为了避免额外的解码操作,组件使用中继链块号来排序Parachains头部。任何已最终化的中继块的后代,在其Heads映射中包含Parachains块PB,都保证有PB或其后代。因此,Parachains块号随着中继块号的增加而增长。

如果组件已经知道更好的(或相同的)头部,它可能会拒绝Parachains头部。此外,组件还会拒绝未跟踪的Parachains的头部。

组件不跟踪Parachains头部之后的内容。因此,它不需要初始化——部署后即可接受头部。

非基本功能

在部署桥梁Parachains模块的每个运行时中,可能都有一个特殊的账户。这个账户,名为“模块所有者”,类似于模块级别的sudo账户——他可以暂停和恢复所有模块操作,而无需运行时升级。与该账户相关的调用包括:

  • fn set_owner():当前模块所有者可以调用它将“所有权”转让给另一个账户;

  • fn set_operating_mode():模块所有者(或sudo账户)可以调用此函数来停止所有模块操作。在此调用之后,所有最终性证明都将被拒绝,直到下一次set_operating_mode调用。此调用可以在桥梁发生异常情况时使用。

如果未定义pallet所有者,可以使用治理来执行这些调用。

拒绝过时头部的签名扩展

最好让任何人(对于链和提交者)都拒绝将已知的平行链头部提交给pallet的所有交易。这样,我们可以为其他有用的交易留出区块空间,并且不向同时提交的交易收取费用。

为了处理这个问题,我们有一个签名扩展,可以添加到运行时中。它正好完成所需的工作——拒绝所有带有已知头部的交易。提交者不需要为这种交易付费——它们在构建区块时直接从交易池中删除。

然而,签名扩展有点有限——它只适用于提供单个平行链头部的交易。因此,它不适用于多个平行链头部的事务。这符合我们对Kusama <> Polkadot桥梁的需求。如果您需要处理其他事务格式,您可以为您的运行时实现类似的扩展。

您还可以查看generate_bridge_reject_obsolete_headers_and_messages宏,它将多个类似的签名扩展打包成一个。

平行链最终性中继

我们有一个离线actor,它会监视新的平行链头部并将它们提交给桥梁链。这是平行链中继——您可以查看crate级别文档和代码

依赖项

~20–35MB
~598K SLoC