Release v446
Runtime 446 (proposed)
Published
2026-08-14 12:08:05
Generated
2026-08-14 13:01:24
总 PR
5
HIGH
5
MEDIUM
0
Stage2
0
官方 Release Notes 总结
- 官方宣布在 finney 上提议将运行时升级至 **spec 446**,CI 已完成 2-of-2 部署多签的一半,待 triumvirate 成员的 sudo 多签二次批准后即执行。
- 提供 `btcli upgrade sign` 签名流程,并推荐通过 srtool 本地构建进行字节级独立校验;发布包含 spec_version `446`、commit `52d7e7c…`、call hash 等参数。
- 原文**未提及任何安全修复(advisory)或严重性说明**,也未包含资金、共识、账户相关变更或 breaking change 描述;唯一明确的升级点是 spec_version 升至 446。
TL;DR(PR 分析)
本次版本聚焦于三项高优先级改动:修复 GRANDPA 共识 set ID 管理漏洞,确保最终性机制正确性;修正子网 Alpha 会计偏差并调整所有权转移阈值,直接影响资金核算准确性;新增液态 Alpha 共识模式选择功能,改变子网经济计算逻辑。以上均涉及共识安全与存储迁移,无直接资金池变动。
HIGH 重要更新 (5)
修复 GRANDPA set ID 在管理调度路径上的处理,强制立即生效并显式推进 set ID;同时修正 Finney 链 warp sync 初始 set ID 只应用一次
判级:修正 GRANDPA 共识 set ID 管理 bug,直接影响最终性机制的正确性与链状态的持久一致性
关键改动
- pallets/admin-utils/src/lib.rs: 新增 `GrandpaChangeDelayMustBeZero` 错误;`schedule_grandpa_change` 要求 `in_blocks` 必须为 0,否则返回错误
- runtime/src/lib.rs: `GrandpaInterfaceImpl` 中在调用 `schedule_change` 前计算 next_set_id(checked_add),成功后显式写入 `CurrentSetId` 存储
- node/src/service/grandpa_warp_sync.rs: 对 Finney 链使用 `OneTimeInitialSetId(3)` 配置,通过包装器只在 set_id==0 时应用偏移,而非每个 proof 片段
- pallets/admin-utils/src/tests/mod.rs: 新增测试覆盖延迟非零拒绝、溢出保护、set ID 推进与状态一致性
- pallets/admin-utils/src/benchmarking.rs: 将 `in_blocks` 从 42 改为 0 以匹配新语义
- pallets/admin-utils/src/weights.rs: 更新权重和存储读写计数(增加 `CurrentSetId` 的读写)
- Python SDK 生成文件、错误描述、文档等同步更新
在 liquid alpha 债券计算中增加每个子网的共识模式选择功能,支持 Current、Previous 和 Auto 三种模式,默认 Auto(在最大债券惩罚时使用前一 epoch 共识,否则使用当前共识)。
判级:涉及 spec_version 升级、新增链上存储和核心外部调用,修改了 liquid alpha 的共识选择逻辑,对子网经济计算有直接影响。
关键改动
- pallets/subtensor/src/lib.rs: 新增 ConsensusMode 枚举(Current/Previous/Auto)、LiquidAlphaConsensusMode 存储、ConsensusByMechanism 存储(保存每个机制的前一轮共识),以及常量 MAX_BONDS_MOVING_AVERAGE 和 MIN_ALPHA_LOW
- pallets/subtensor/src/epoch/run_epoch.rs: 在 persist_mechanism_epoch_terms 中写入 ConsensusByMechanism;修改 compute_bonds 和 compute_bonds_sparse 根据 ConsensusMode 选择共识(调用 compute_consensus_for_liquid_alpha);新增 compute_consensus_for_liquid_alpha 函数处理 Previous 模式及向量长度不匹配
- pallets/subtensor/src/subnets/dissolution.rs: 解散子网或清理机制时移除 ConsensusByMechanism 和 LiquidAlphaConsensusMode 存储
- pallets/subtensor/src/subnets/mechanism.rs: 减少机制数量时同步清理 ConsensusByMechanism
- pallets/subtensor/src/subnets/uids.rs: 神经元注销和 UID 调整时同步处理 ConsensusByMechanism 向量
- pallets/subtensor/src/utils/misc.rs: 新增 get_liquid_alpha_consensus_mode 和 set_liquid_alpha_consensus_mode 函数(触发事件)
- pallets/admin-utils/src/lib.rs: 新增 sudo_set_liquid_alpha_consensus_mode 外部调用(call_index=104),支持子网所有者/根调用的速率限制和代理
- pallets/admin-utils/src/benchmarking.rs: 为新调用添加基准测试
- runtime/src/lib.rs: spec_version 从 445 升至 446
- runtime/src/proxy_filters/call_groups.rs: 将新调用加入 liquid_alpha 代理调用组
- pallets/subtensor/src/macros/events.rs: 新增事件 LiquidAlphaConsensusModeSet(事件索引 146)
- pallets/subtensor/src/utils/rate_limiting.rs: 新增 Hyperparameter::LiquidAlphaConsensusMode(索引 34)
- 测试文件: 大量测试覆盖共识模式选择、回归索引、解散清理、神经元操作等
spec_version 升至 446,包含三项存储迁移(修复 AlphaOut 欠计数、重置回收子网的 alpha 计数器、回填历史 alpha burned)、液态 alpha 共识模式选择、conviction 所有权门限修正、时间锁承诺审计增强、GRANDPA warp sync 主网 set_id 补丁,以及多个相关 pallet 的配套修改。
判级:涉及三项存储迁移、核心共识参数(液态 alpha 模式、所有权门限)修改、alpha 计数器修正、GRANDPA 节点侧 warp sync 修复,均为生产环境关键路径改动
关键改动
- runtime/src/lib.rs: spec_version 445→446;GRANDPA interface 实现手动维护 CurrentSetId 并要求 in_blocks==0
- pallets/subtensor/src/macros/hooks.rs: 在 on_runtime_upgrade 中按顺序添加三个新的存储迁移(fix_rao_alpha_out_accounting, rebase_recycled_alpha_asset_counters, backfill_historical_alpha_burned)
- pallets/subtensor/src/macros/events.rs: 新增 LiquidAlphaConsensusModeSet 事件
- pallets/subtensor/src/lib.rs: 新增 ConsensusMode 枚举(Current/Previous/Auto)、LiquidAlphaConsensusMode、ConsensusByMechanism 存储、MAX_BONDS_MOVING_AVERAGE 和 MIN_ALPHA_LOW 常量
- pallets/subtensor/src/epoch/run_epoch.rs: compute_bonds 和 compute_bonds_sparse 中引入 compute_consensus_for_liquid_alpha,根据 ConsensusMode 选择当前或上一个 epoch 的 consensus 用于液态 alpha 计算;ConsensusByMechanism 写入与读取
- pallets/subtensor/src/staking/lock.rs: change_subnet_owner_if_needed 中 ownership 门限改为 eligible_alpha = SubnetAlphaOut - SubnetProtocolAlpha - AlphaBurned,饱和减法处理
- pallets/subtensor/src/subnets/dissolution.rs: 新增 DissolveCleanupPhase::NetworkAlphaAssetCounters、清理 ConsensusByMechanism/LiquidAlphaConsensusMode/alpha 计数器
- pallets/subtensor/src/migrations/: 新增三个迁移文件,包含硬编码的主网 constants,仅在 mainnet genesis hash 匹配时执行
- pallets/commitments/src/lib.rs: 重写 reveal_timelocked_commitments 逻辑,支持 SDK UserData 信封、新增 TimelockRevealFailed 事件/字段/错误、清除陈旧代码
- pallets/commitments/src/types.rs: 新增 TimelockRevealFailed 数据变体(index 137)、RevealFailure 枚举
- pallets/admin-utils/src/lib.rs: 新增 sudo_set_liquid_alpha_consensus_mode extrinsic;schedule_grandpa_change 增加 in_blocks==0 检查
- pallets/alpha-assets/src/lib.rs: 新增 alpha_burned、clear_alpha_counters、rebase_alpha_counters 接口及实现
- node/src/service/grandpa_warp_sync.rs: 新增 InitialSetIdProvider 和 Finney 主网 one-time set_id=3 补丁
- node/src/service.rs: 根据 warp_sync_config 决定是否包装 InitialSetIdProvider
- sdk/python/bittensor/reads/locks.py 等: 适配读取 alpha_burned 和新的共识模式
修复三个历史 Alpha 会计偏差(SubnetAlphaOut 修正、回收代币生成计数器重置、历史燃烧回填)并调整子网所有权转移阈值排除协议持有和已销毁的 Alpha。
判级:包含三个直接影响 Alpha 计数存储的运行时迁移以及所有权转移核心逻辑变更,涉及共识安全与资金会计准确性,必须严格审查。
关键改动
- pallets/alpha-assets/src/lib.rs: 新增 AlphaAssetsInterface trait 方法 alpha_burned/clear_alpha_counters/rebase_alpha_counters,允许其他 pallet 读取和修正 alpha 计数器
- pallets/subtensor/src/staking/lock.rs: 修改 change_subnet_owner_if_needed 函数,将原本 10%×SubnetAlphaOut 的门槛改为 10%×(SubnetAlphaOut - SubnetProtocolAlpha - AlphaBurned)
- pallets/subtensor/src/subnets/dissolution.rs: 在溶解清理阶段末尾新增 NetworkAlphaAssetCounters 阶段,调用 clear_alpha_counters 清除已溶解网路的 alpha 计数器
- pallets/subtensor/src/subnets/subnet.rs: 在 register_network 中注册新网络时调用 clear_alpha_counters 防御性清除过去的计数器
- pallets/subtensor/src/migrations/migrate_fix_rao_alpha_out_accounting.rs: 新增迁移,根据离线重构的 56 条常数对主网 SubnetAlphaOut 进行加法修正(净增约 1.618 TAO)
- pallets/subtensor/src/migrations/migrate_rebase_recycled_alpha_asset_counters.rs: 新增迁移,从 10 个已回收 netuid 的 TotalAlphaIssuance/AlphaBurned/AlphaRecycled 中减去前一代的偏移量
- pallets/subtensor/src/migrations/migrate_backfill_historical_alpha_burned.rs: 新增迁移,将主网 119 个子网在 AlphaBurned 追踪前产生的历史燃烧量写入 AlphaBurned 计数器
- pallets/subtensor/src/macros/hooks.rs: 在 on_runtime_upgrade 中按顺序注册上述三个迁移,确保先修复 AlphaOut,再 rebase 计数器,最后回填燃烧
- pallets/subtensor/src/tests/: 新增多个单元测试验证迁移的正确性、生成安全性、非主网跳过逻辑等;同时调整现有锁定测试以映射新的所有权门槛
- precompiles/src/subnet.rs: 为新的 NetworkAlphaAssetCounters 溶解阶段代号注册 26
修改pallet-commitments的reveal_timelocked_commitments钩子,在解密失败或脉冲过期时保留时间锁数据不丢失,并新增TimelockRevealFailed存储变体和CommitmentRevealFailed事件
判级:spec_version升级(445->446)标志着runtime级别的改变,且核心on_idle逻辑重构修复了矿工收益丢失的生产缺陷,影响SN120的实质经济
关键改动
- pallets/commitments/src/types.rs: 新增Data::TimelockRevealFailed变体(含encrypted和reveal_round),实现Encode/Decode/TypeInfo;新增RevealFailure枚举(SignatureDeserialize, CiphertextDeserialize, Decrypt, EmptyPlaintext, PulseExpired, RoundMismatch)
- pallets/commitments/src/lib.rs: 重构reveal_timelocked_commitments函数:从旧版本仅log warn并跳过改为在解密/反序列化失败时写入TimelockRevealFailed;新增tle_ciphertext_from_bytes和decrypt_timelock_ciphertext辅助函数,同时支持原始压缩TLE和SCALE UserData信封;新增事件CommitmentRevealFailed;新增错误TimelockRevealFailedNotAllowed禁止外部设置该变体;处理脉冲过期(reveal_round < OldestStoredRound)时标记PulseExpired并保留数据
- pallets/commitments/src/mock.rs: 新增wrap_userdata_envelope测试辅助函数
- pallets/commitments/src/tests.rs: 新增379行测试覆盖解密失败、脉冲过期、UserData信封解码等场景
- runtime/src/lib.rs: spec_version从445提升至446
- sdk/bittensor-core/src/timelock/mod.rs: 新增inner_ciphertext函数用于从UserData信封提取内部TLE密文;新增对应单元测试
- sdk/bittensor-core-py/src/timelock.rs 和 sdk/bittensor-core-wasm/src/timelock.rs: 同步暴露inner_ciphertext
- sdk/python/bittensor/timelock.py: 新增inner_ciphertext方法