#candidate #subsystem #parachain #leave #backing #active #statement

polkadot-node-core-backing

候选人支持子系统。跟踪可支持的中继链候选人,以及关于候选人的声明发行。(polkadot v1.15.0)

16次重大版本更新

17.0.0 2024年7月19日
15.0.0 2024年7月13日
14.0.0 2024年6月24日
13.0.0 2024年5月24日
0.0.0 2022年11月21日

12 in #parachain

Download history 499/week @ 2024-05-03 536/week @ 2024-05-10 777/week @ 2024-05-17 858/week @ 2024-05-24 833/week @ 2024-05-31 1121/week @ 2024-06-07 529/week @ 2024-06-14 889/week @ 2024-06-21 733/week @ 2024-06-28 264/week @ 2024-07-05 539/week @ 2024-07-12 544/week @ 2024-07-19 412/week @ 2024-07-26 412/week @ 2024-08-02 484/week @ 2024-08-09 679/week @ 2024-08-16

2,050 每月下载量
用于 3 个crate(2个直接使用)

GPL-3.0-only

220KB
5.5K SLoC

实现了 CandidateBackingSubsystem

此子系统负责跟踪所有可支持的中继链候选人,以及在验证节点上运行时对候选人的声明发行。

有两种类型的声明: SecondedValidSeconded 意味着 Valid,除非已经经过 Seconded 的声明,否则不应将其声明为 Valid

验证者只能对其自身组分配下的候选人进行第二次投票,并且每个活跃叶子节点只能进行一次投票。如果大多数分配的验证者组将候选人声明为 SecondValid,则可以在链上支持这些候选人并进入可用阶段。

深度是异步支持的概念,通过它支持候选人的短期子链,并在链下扩展,然后异步放入中继链的块中。异步支持允许中继链主要独立于中继链的状态增长,这为验证中继链提供了更多时间,从而提高了性能。

异步支持的大部分工作由预期中继链子系统处理。就中继链块相对于中继链块而言,中继链块的 '深度' 是衡量从中继链块后状态中最最近包含的中继链块到候选人的中继链块数量。例如,直接从中继链状态中最最近的中继链块派生的候选人深度为0。该候选人的子代将具有深度1。依此类推。

候选支撑子系统跟踪一组“活动叶子”,即可以作为构建基础的最新区块(实际上是一个树)。深度总是相对于活动叶子来衡量的,每个候选者可以拥有的有效中继父节点由活动叶子决定。预期的平行链子系统强制中继父节点单调增加,因此这里的逻辑没有处理。通过与预期的平行链子系统通信,该子系统从当前活动叶子集中推断出一个“隐式视图”,这决定了所有可能的最近中继链区块哈希,这些哈希可以作为支持在活动叶子的子节点中候选者的中继父节点。

实际上,这个子系统依赖于声明分布子系统来防止垃圾邮件,通过强制每个验证器在每个活动叶子的每个深度最多只能支持一个候选者的规则。这限制了系统需要考虑的候选者数量,并且除了本地支持的候选者之外,不在本子系统中处理。

此子系统还处理不支持异步支撑的中继链头部。对于此类活动叶子,唯一的有效中继父节点是该叶子的哈希本身,唯一允许的深度是0。

依赖关系

~92–135MB
~2.5M SLoC