总 PR
3
HIGH
2
MEDIUM
1
Stage2
0
Model: deepseek/deepseek-v4-flash Compare Back

官方 Release Notes 总结

- 本次提案将运行环境升级至 spec_version 478,部署需由 sudo multisig(triumvirate)的第二个签名完成。 - 升级不涉及明确的安全修复、资金、共识或账户相关变更,也未提及 breaking change。 - 提供了独立验证方法:从该标签使用 srtool 构建运行时,并通过 `btcli upgrade check` 对比字节码。 - 部署关键信息:commit `850f2755bb05a3851f948489f0ab27b0645cebce`、proposal call hash、部署时间点及 multisig 地址均已列出。

TL;DR(PR 分析)

本版 runtime 升级(spec 477→478)主要包含两项变更:优化 EVM/合约路径 stake-exit 的 gas 预收逻辑,以及新增多区块迁移以恢复缺失的 StakingHotkeys 关联。其中存储迁移直接修复合约质押热键关联,涉及资金安全,属于本次升级的关键变更。

交叉验证

两边确认0
仅分析映射3
仅 Release Notes0
仅分析映射:#3233#3235#3237
HIGH 重要更新 (2)
#3235 Restore missing staking hotkey associations in bounded migration batches BREAKING MERGED migration
新增多区块迁移,通过扫描 AlphaV2 和 BasketClaimed 权威数据源来恢复缺失的 StakingHotkeys 关联,并将 spec_version 从 477 升至 478
判级:包含 spec_version bump(477→478)且新增主网迁移模块,直接修改链上 StakingHotkeys 存储,属于运行时升级关键变更
关键改动
  • pallets/subtensor/src/migrations/migrate_restore_staking_hotkeys.rs:新增迁移文件,实现 kickoff 和 continue_restore 逻辑,每区块最多处理 64 行,分三阶段扫描(AlphaV2 → BasketClaimed → 完成),支持 try-runtime 验证
  • pallets/subtensor/src/macros/hooks.rs:在 on_idle hook 中添加条件调用 continue_restore 的逻辑,仅在 alpha 转换完成、storage bloat cleanup 完成且 destructive cleanup migration 已标记完成后才执行修复
  • runtime/src/lib.rs:spec_version 从 477 升至 478,并在 Migrations 列表中注册新迁移(位于 alpha conversion 之后)
  • pallets/subtensor/src/migrations/mod.rs:声明新模块 migrate_restore_staking_hotkeys
  • pallets/subtensor/src/tests/migration.rs:新增 4 个测试用例,覆盖边界限制、保留现有关联、等待 destructive cleanup、零份额后续分红场景
#3237 Release 478 BREAKING MERGED runtime
Runtime 升级 spec 478,优化 EVM/合约 stake-exit gas 估算,并加入多区块迁移恢复缺失的 StakingHotkeys 关联,已合并入 main。
判级:已合并的 runtime release(spec 477→478),包含存储迁移修复 StakingHotkeys 关联以及 EVM/合约路径 stake-exit gas 行为变更,将随发布流水线进入主网
MEDIUM 更新 (1)
#3233 Size the stake-exit walk to the caller's list in the EVM and contract paths BREAKING MERGED runtime
将EVM预编译和合约链扩展中stake-exit调用的StakingHotkeys遍历权重从按最大上限(256)预收改为按签名者当前列表长度+1预收,显著降低gas需求。
判级:这是一次正式runtime升级(spec_version 477→478),修改了EVM预编译和合约链扩展的gas预收逻辑,影响面较大,但未触及staking/emission核心逻辑、无migration,不属于必须评HIGH的资金/共识核心变更。
关键改动
  • pallets/subtensor/src/staking/stake_utils.rs:新增 staking_hotkeys_walk_immediate_bound(当前列表长度+1,不超声明上限)、declared_staking_hotkeys_walks(识别各类stake-exit调用声明的walk次数)、staking_hotkeys_walk_unused(计算可缩减的未使用walk权重)三个辅助函数
  • pallets/subtensor/src/staking/remove_stake.rs:新增 unstake_all_declared_walks(),返回 unstake_all/unstake_all_alpha 声明权重中包含的walk次数(基于worst-case validated槽位数)
  • chain-extensions/src/lib.rs:新增 stake_exit_weight 和 unstake_all_exit_weight,将 remove_stake/move_stake/transfer_stake/swap_stake 及其 limit 变体和 unstake_all* 的预收权重从固定加 staking_hotkeys_walk_bound() 改为基于签名者当前列表的 immediate bound 加一次读取
  • precompiles/src/extensions.rs:新增 try_dispatch_stake_exit,在dispatch前按签名者当前列表调整 info.call_weight;将原 try_dispatch_runtime_call 的gas检查/收费逻辑抽取为 dispatch_with_info 复用
  • precompiles/src/staking.rs:所有stake-exit相关precompile方法(removeStake、removeStakeFull、moveStake、transferStake、swapStake、unstakeAll等)改用 try_dispatch_stake_exit
  • runtime/src/lib.rs:spec_version 477 → 478,随runtime升级发布
  • runtime/tests/stake_exit_gas.rs:新增集成测试,覆盖短列表在300k gas内完成、移动到新hotkey后实际walk仍在预留内、满列表仍需要完整walk、unstake_all在3M gas内完成
  • docs/tx/*.mdx 与 ts-tests/utils/wasm-contract.ts:文档和测试同步更新