#recovery #block #candidate #parachain #protocols #relay #po-v

cumulus-client-pov-recovery

Cumulus特定网络协议(polkadot v1.15.0)

15次重大发布

0.17.0 2024年7月19日
0.14.0 2024年6月24日
0.10.0 2024年3月19日
0.6.0 2023年12月13日
0.0.0 2022年11月21日

#1691 in 魔法豆

Download history 169/week @ 2024-04-15 246/week @ 2024-04-22 506/week @ 2024-04-29 419/week @ 2024-05-06 338/week @ 2024-05-13 545/week @ 2024-05-20 426/week @ 2024-05-27 609/week @ 2024-06-03 358/week @ 2024-06-10 338/week @ 2024-06-17 668/week @ 2024-06-24 292/week @ 2024-07-01 440/week @ 2024-07-08 487/week @ 2024-07-15 508/week @ 2024-07-22 379/week @ 2024-07-29

1,817 每月下载次数
用于 10 个crate(3个直接使用)

GPL-3.0-or-later…

74KB
2K SLoC

Parachain PoV恢复

一个 parachain 需要构建 PoVs,并将其发送到 relay chain 以进行进展。这些 PoVs 是擦除编码的,其中一部分由每个 relay chain 验证器存储。由于 relay chain 决定包含哪个 parachain 的 PoV 以及因此推进 parachain,所以对应于该 PoV 的块可能没有在 parachain 网络中传播。这可能有几个原因,可能是一个恶意聚合器成功包含了其自己的 PoV 但不想与其他网络共享,或者可能是一个聚合器在能够将块分发到网络之前就宕机了。当发生类似情况时,我们可以使用此 crate 中实现的 PoV 恢复算法来恢复 PoV 并将其传播到网络的其他部分。

它的工作方式如下

  1. 对于每个包含的 relay chain 块,我们记录我们的 parachain 的候选者。如果属于 PoV 的块已经已知,我们什么都不做。否则,我们启动一个计时器,在指定的时间间隔内等待随机时间,然后开始恢复 PoV。

  2. 如果在启动和触发计时器之间导入块,我们跳过 PoV 的恢复。

  3. 如果计时器触发,我们使用 relay chain PoV 恢复协议来恢复 PoV。

4a. 恢复后,我们恢复块并导入它。

4b. 由于我们正在尝试恢复挂起的候选者,因此不可用性无法保证。如果块 PoV 尚未可用,我们重试。

如果我们需要恢复多个 PoV 块(希望在实际生活中不会发生),我们确保块按正确顺序导入。

依赖关系

~92–135MB
~2.5M SLoC