行业资讯
📅 2026/8/26 20:26:45
cumulus collator-selection Pallet 解析:Parachain 如何实现开放出块与提名集(完整指南)
cumulus collator-selection Pallet 解析Parachain 如何实现开放出块与提名集完整指南【免费下载链接】cumulusWrite Parachains on Substrate项目地址: https://gitcode.com/gh_mirrors/cum/cumuluscumulus是 Polkadot 生态中用于在 Substrate 上编写 Parachain平行链的官方框架而collator-selection Pallet正是它实现「开放出块」的核心组件它管理出块者Collator的提名集与最终集通过「不可变出块者 社区候选者」两层结构让任何满足条件的账户都能质押押金参与 Parachain 出块。本文带你快速读懂这套提名集机制的设计思路。 它解决什么问题在 Parachain 中出块者Collator负责组装区块候选并提交给 Relay Chain 验证。与传统链的固定验证者不同Parachain 往往希望开放出块权限任何人都可以注册成为候选出块者。collator-selection Pallet 就是为这件事而生的「提名集管理器」源码位于 pallets/collator-selection/src/lib.rs。官方在模块文档中明确了一个重要定位出块本身不是高安全活动最终安全性由 Relay Chain 保障因此该 Pallet 不做复杂的博弈论机制而是用简单透明的规则维护一个健康的出块者集合。️ 两层结构Invulnerable 与 Candidates最终生效的 Collator 集合由两个名单聚合而成名单谁任命是否可被踢除特点Invulnerables不可变出块者治理层❌ 永不淘汰永远在出块集合中Candidates社区候选者自我提名✅ 长时间不在线会被踢先到先得上限MaxCandidatesInvulnerables必须由治理UpdateOrigin设置且账户必须先注册 Session 密钥未注册的账户会被跳过并触发InvalidInvulnerableSkipped事件。Candidates通过register_as_candidate调用自我提名核心条件是已注册 Session 密钥 能质押CandidacyBond候选押金会被 reserve 锁定。两个集合应当互斥调用add_invulnerable时若该账户是候选者会自动从 Candidates 中移除。 提名集如何运转押金、踢除与最小保证这是本 Pallet 最有「治理感」的部分押金机制注册候选时锁定CandidacyBond调用leave_intent退出时押金立即退还但实际退出要等下一个 Session 切换才生效。踢除懒惰者每次新 Session 开始时new_sessionPallet 会调用kick_stale_candidates——凡是在KickThreshold个区块内没有出过块的候选者会被移出集合并退还押金。最小出块保证任何操作退出、移除 Invulnerable如果会让总出块者数量跌破MinEligibleCollators都会被拒绝报TooFewEligibleCollators确保链上永远有人能出块。上线保护候选者注册时的「首次出块时间」被记为当前区块 KickThreshold避免新注册者因 Session 延迟而被误踢。每个 Session 切换: Candidates ──踢除懒惰者── 活跃候选 Invulnerables 活跃候选 ── 最终 Collator 集合 奖励分配Pot 账户是怎么分钱的Pallet 维护一个链上「金库」账户由PotId生成官方链上为PotStake。每出一个区块出块者自动获得两笔奖励Pot 余额的一半扣除最小存在量 ED区块内交易费的一半另一半交易费回流进 Pot。这意味着想让出块者拿到奖励只需先向 Pot 账户转入一笔资金即可实现极简。⚙️ 关键配置参数速查以 Asset HubPolkadot的 Runtime 配置为例参见 parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs参数取值含义MaxCandidates100社区候选者上限MinEligibleCollators4出块者下限保底出块能力MaxInvulnerables20治理任命出块者上限KickThreshold1 个 Session6 小时不在线超过此值即被踢除UpdateOriginRoot 或 StakingAdminXCM 治理谁有权改参数值得注意的是UpdateOrigin采用了EitherOfDiverseEnsureRoot, EnsureXcmIsVoiceOfBody...的组合——不仅 Root 可以管理Relay Chain 通过 XCM 发出的治理指令也能直接操作提名集这是开放出块治理化的关键设计。 新手动手如何成为候选出块者在类似 parachain-template/runtime/src/lib.rs 的链上参与开放出块的步骤是使用session setKeys为本账户注册 Session/Aura 出块密钥未注册会报ValidatorNotRegistered确保余额可质押CandidacyBond调用collatorSelection registerAsCandidate完成提名先到先得超过DesiredCandidates时会被TooManyCandidates拒绝保持节点在线——每个 Session 结束时KickThreshold内没出过块就会被踢出并退还押金。 源码地图核心逻辑提名、踢除、奖励、Session 管理pallets/collator-selection/src/lib.rs权重与基准测试pallets/collator-selection/src/weights.rs、pallets/collator-selection/src/benchmarking.rs存储版本迁移pallets/collator-selection/src/migration.rs集成示例parachains/runtimes/assets/asset-hub-polkadot/src/lib.rs与parachains/runtimes/bridge-hubs/bridge-hub-polkadot/src/lib.rs✅ 小结cumulus 的 collator-selection Pallet 用「两层提名集 押金 懒惰踢除 最小保底」四个简单机制就实现了 Parachain 的开放出块治理者提供稳定底座Invulnerables社区通过质押押金自由进出候选池Candidates出块奖励通过 Pot 自动分配。规则简单透明却恰好满足了开放出块所需的弹性与安全底线。【免费下载链接】cumulusWrite Parachains on Substrate项目地址: https://gitcode.com/gh_mirrors/cum/cumulus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考