Release v459
Runtime 459 (proposed)
Published
2026-09-15 21:10:06
Generated
2026-09-15 22:01:53
总 PR
4
HIGH
3
MEDIUM
1
Stage2
0
官方 Release Notes 总结
本次发布的运行时升级提案为 **spec_version 459**,正在等待 finney 网络的三头治理(triumvirate)多签批准后执行。发布内容未提及任何安全修复、资金/共识/账户相关变更或破坏性变更(breaking change)。核心变更仅为将运行时版本提升至 459,对应提交哈希 `7037840...`,部署多签地址 `5CzMP6...`,并由 CI 密钥 `5EqaWf...` 发起了部署多签的第一步。验证可通过 `btcli upgrade check` 或使用 srtool 本地构建 WASM 进行字节级比对。
TL;DR(PR 分析)
本版包含三次 high 级别运行时升级(v456、v458、v459),核心修复集中在质押核算漏洞、共享池分母膨胀与根子网资金短缺,直接修正资金安全与账本一致性问题。此外,v455 对代理权限进行了安全收紧,限制非转账类代理调用关键 Pallet。未涉及共识或 emission 逻辑变更。
HIGH 重要更新 (3)
发布runtime456,包含授权、租赁、众贷结算、质押/会计安全修复及spec-version升级
判级:此PR是已合并的发布版本,部署了runtime456的多个核心修复(授权、密钥/租赁所有权、众贷结算、质押/会计),并包含spec-version升级,直接影响链上状态和资产安全
修复当股权份额因舍入漂移偏离池分母时,质押账户的价值核算漏洞,确保成员估值不超过池子总价值,并修正所有质押扣减路径使用实际扣减量而非请求量。
判级:修复直接触及资金安全的质押核算漏洞,且 spec_version 已落地升级,属于核心逻辑改变。
关键改动
- primitives/share-pool/src/lib.rs: 将成员估值改为 `min(floor(V×S/D), V)`,即上限为池子总价值,防止因舍入漂移导致引用超过池子实际持有量。
- pallets/subtensor/src/staking/stake_utils.rs: `decrease_stake_for_hotkey_and_coldkey_on_subnet` 函数改为返回实际从池子扣除的 Alpha 量(测量池子价值减少额),而非 void;调用方必须使用该返回值而非原始请求量,确保资产守恒。
- pallets/subtensor/src/staking/claim_root.rs: 篮仓热键迁移中贷记新热键时使用 `alpha_moved`(实际扣减量)而非原金额。
- pallets/subtensor/src/staking/order_swap.rs: 订单交换中增加 `removed == amount` 检查,拒绝实际扣减不足的请求,并贷记实际扣减量。
- pallets/subtensor/src/swap/swap_coldkey.rs: 冷热键交换中贷记新冷键使用实际移出的 Alpha 量。
- pallets/subtensor/src/swap/swap_hotkey.rs: 热键交换中贷记新热键使用实际移出的 Alpha 量。
- pallets/subtensor/src/tests/mock.rs: 新增 `inflate_alpha_share` 辅助函数,用于构造份额膨胀的测试状态。
- pallets/subtensor/src/tests/staking.rs: 新增三个回归测试:单成员膨胀不能提取超过池值、两个膨胀成员不能提取超过池值、扣减报告实际扣减量。
- pallets/subtensor/src/tests/move_stake.rs: 新增两个回归测试:同子网转账在起源引用膨胀时守恒 alpha、拒绝贷记未扣减的 alpha。
- runtime/src/lib.rs: spec_version 从 456 升至 458。
#3162
share-pool: keep denominator consistent with stored shares; reconcile root pot
BREAKING
emission
MERGED
fix
两个会计修复合为一个运行时升级(spec_version 458→459):(1) 共享池分母始终等于存储份额之和,防止 S/D 无限膨胀;(2) 修复根子网 TAO pot 短缺,铸造差额使根 staker 可退出。附带 childkey 阈值门禁、根注册增强、代理过滤器安全加固。
判级:spec_version 升级 + 运行时迁移直接修改总发行量和根子网账本,共享池修复防止资金损失,均属高影响改动。
关键改动
- primitives/share-pool/src/lib.rs: 新增 SafeFloat::sub_exact_floor 精确减法,update_value_for_one 改为先调分母、再按分母实际变动调成员份额,池关闭时分母置零并退役所有份额,大量 grind 测试验证 sum(S) ≤ D。
- pallets/subtensor/src/migrations/migrate_fix_root_pot_shortfall.rs: 一次性迁移,计算 TotalAlphaStaked[0] - SubnetTAO[0] 缺口,铸造 TAO 进入根子网账户并更新计数,带 try-runtime 验证。
- pallets/subtensor/src/staking/set_children.rs: 新增 ChildkeyThresholdChecks / ChildkeyThresholdSuspended 存储,父母 stake 低于阈值时孩子关系惰性隐藏(get_children 返回空),on_idle 中按权重处理。
- pallets/subtensor/src/coinbase/root.rs: 根注册需注册人 stake ≥ 被替换席位 stake,防止无 stake 的 key 取代有 stake 的验证者。
- pallets/subtensor/src/staking/remove_stake.rs: alpha 迭代跳过已关闭池的旧份额(alpha_share_is_retired),清理时额外删除 AlphaSharePoolEpoch。
- runtime/src/proxy_filters/: 新增 SubtensorValueCalls 组(包含锁定/销毁/注册网络等),从 NonFungible/NonTransfer 中排除 Sudo 调用,加固代理安全。
- runtime/src/lib.rs: spec_version 458→459,注册 migrate_fix_root_pot_shortfall 迁移。
- pallets/subtensor/src/lib.rs: 新增 AlphaSharePoolEpoch、AlphaShareEpoch、ChildkeyThresholdChecks、ChildkeyThresholdSuspended 存储。
- pallets/subtensor/src/macros/hooks.rs: on_idle 中增加 process_childkey_threshold_checks 调用。
- pallets/subtensor/src/tests/staking.rs 和 children.rs: 大量集成测试覆盖共享池不变式和 childkey 阈值生命周期。
MEDIUM 更新 (1)
限制 NonTransfer 和 NonFungible 代理类型对 EVM、Contracts、Crowdloan 三个 pallet 的调用,移出 InfraCommonCalls 并仅保留在 NonCriticalAllowed 中,同时更新测试和运行时 API 元数据。
判级:属于安全增强,影响用户代理权限行为,但未触及资金、共识或 emission 核心逻辑,非新增重大功能或破坏性设计变更。
关键改动
- runtime/src/lib.rs:spec_version 从 454 自增到 455。
- runtime/src/proxy_filters/call_groups.rs:从 InfraCommonCalls 中移除 EvmCalls、CrowdloanCalls、ContractsCalls;在测试用的 WholesalePalletCalls 中显式加入这三个组。
- runtime/src/proxy_filters/mod.rs:NonTransferAllowed 注释更新,NonFungibleAllowed 注释更新;在 NonCriticalAllowed 中新增 EvmCalls、CrowdloanCalls、ContractsCalls;新增非转移测试补充拒绝集合;新增 indirect_value_calls_match_proxy_permissions_and_runtime_api_metadata 测试,验证 EVM、Contracts、Crowdloan 在 Any 和 NonCritical 下允许,在 NonTransfer 和 NonFungible 下拒绝,且运行时 API 元数据与过滤器一致。