Release v437
Runtime 437 (proposed)
Published
2026-07-22 18:09:20
Generated
2026-07-23 03:29:04
总 PR
9
HIGH
2
MEDIUM
0
Stage2
0
官方 Release Notes 总结
- 本次发布正式宣布了 subtensor 运行时升级至 **spec_version 437**,部署代码已提交至 finney 网络的 2/2 多签账户,等待 sudo 多签(triumvirate)的第二次批准后执行。
- 提供了独立的验证方法:建议使用 srtool 从标签 `v437` 本地构建 wasm,再通过 `btcli upgrade check` 进行字节级比对,以确保链上部署的 wasm 与发布工件一致。
- 公布的关键部署参数包括:commit `2d52647c`、call hash `0x8efef...`、部署时间点 `8678970:17`、CI 密钥、多签地址及 wasm sha256 哈希。
- 该版本说明中**未提及**任何安全修复(含 advisory 及严重性)、资金/共识/账户相关变更或 breaking change,仅聚焦于版本升级的部署流程与验证指引。
TL;DR(PR 分析)
本版重点包含两笔高影响运行时升级:v435 新增矿工注册抵押金机制,v437 修改抵押品索引、密钥谱系、排放分配及热键交换硬化逻辑,均涉及 spec_version 升级、存储迁移与资金流向变更。其余为低影响部署与客户端修复,不触及共识、资金或存储迁移。
HIGH 重要更新 (2)
v435 运行时升级:引入矿工注册抵押金机制(CollateralLockShare / CollateralDrainRatio)
判级:新增矿工注册抵押金机制直接改变了资金流向(部分费用从燃烧变为锁定),涉及核心经济模型和存储变更,且 spec_version 升级带 migration
关键改动
- pallets/subtensor/src/subnets/ 新增 collateral.rs:实现抵押金锁定、解锁逻辑(CollateralLockShare 和 CollateralDrainRatio 参数)
- 注册流程修改:注册成本拆分为燃烧部分 (1-p) 和锁定抵押部分 (p),抵押金随赚取的激励按 drain ratio 逐步释放
- runtime spec_version 从 434 升至 435(包含 storage migration)
- 同步引入 transfer_stake_and_hotkey、质押转账最小值、Polkadot Vault 签名支持、benchmarked weights 等先前已开发但未正式落地的功能
- 更新 SDK 读取/意图(intents)、CLI 以及文档和 release page
#2960
Runtime 437: collateral, key lineage, and bonded swap hardening
BREAKING
emission
MERGED
runtime
Runtime 437: 矿工抵押品索引、密钥谱系追踪、交换硬化、排放分配逻辑修改及存储迁移
判级:涉及 spec_version 升级、存储迁移、核心排放/抵押品逻辑修改(emission 释放参数变更、新索引存储)、热键交换硬化(带事务回滚和容量检查)、冷键交换中抵押品迁移,均属高影响变更,可能引发共识分歧或资金风险。
关键改动
- runtime/src/lib.rs: spec_version 从 435 升级到 437
- pallets/subtensor/src/subnets/collateral.rs: 新增 ColdkeyCollateralHotkeys 索引存储及其同步方法;修改 settle_miner_collateral 签名增加 emission 和 capturable 参数;修改 do_add_collateral 参数从 tao 改为 alpha;新增 swap_miner_collateral 返回 Result 并支持索引;新增 transfer_miner_collateral_coldkey / transfer_coldkey_miner_collateral 用于冷键交换时迁移抵押品;新增 ensure_hotkey_collateral_index_can_swap / ensure_hotkey_collateral_swappable / prepare_hotkey_collateral_index_swap 预检查索引容量;do_set_min_collateral 中维护索引
- pallets/subtensor/src/swap/hotkey_lineage.rs: 新增热键谱系存储(HotkeySuccessor、HotkeyRoot)及 record/clear/root/lineage_tip 方法
- pallets/subtensor/src/swap/coldkey_lineage.rs: 新增冷键谱系存储(ColdkeySuccessor、ColdkeyRoot)及 record/root/lineage_tip 方法
- pallets/subtensor/src/swap/swap_hotkey.rs: 整个 do_swap_hotkey 包装进 with_transaction 实现原子性;移除旧 HotKeyHasCollateral 错误,新增 KeepStakeBlockedByCollateral 仅 keep_stake 时拒绝;新增预检查 collateral 索引容量;调用 record_hotkey_swap_on_netuid / record_hotkey_swap_lineage;调整 weights
- pallets/subtensor/src/swap/swap_coldkey.rs: do_swap_coldkey 包装进 with_transaction;新增 transfer_coldkey_miner_collateral 循环迁移每个子网的抵押品索引;新增 record_coldkey_swap_lineage
- pallets/subtensor/src/coinbase/run_coinbase.rs: 修改排放分配逻辑:矿工激励和验证者分红均传入 emission 和 capturable(仅验证者take),防止提名者份额被捕获
- pallets/subtensor/src/migrations/migrate_coldkey_collateral_hotkeys.rs: 新增迁移回填 ColdkeyCollateralHotkeys 索引
- pallets/subtensor/src/macros/hooks.rs: 在 on_idle hook 中调用新迁移
- pallets/subtensor/src/macros/errors.rs: 新增 ColdkeyCollateralIncomplete、ColdkeyCollateralPositionsFull 错误;移除 HotKeyHasCollateral,新增 KeepStakeBlockedByCollateral
- pallets/subtensor/src/macros/dispatches.rs: add_collateral extrinsic 参数从 tao 改为 alpha 并更新文档注释
- pallets/subtensor/src/subnets/dissolution.rs: 子网溶解时清理 ColdkeyCollateralHotkeys、HotkeySuccessor、HotkeyRoot
- pallets/subtensor/src/subnets/uids.rs: replace_hotkey_on_subnet 和 append_hotkey_on_subnet 中调用 clear_stale_hotkey_successor
- pallets/subtensor/src/subnets/registration.rs: 注册时使用 get_keep_alive_balance 确保全款支付
- pallets/admin-utils/src/lib.rs: 更新事件注释
- pallets/subtensor/src/lib.rs: 新增 MAX_COLDKEY_COLLATERAL_HOTKEYS 常量和 ColdkeyCollateralHotkeys、HotkeySuccessor、HotkeyRoot、ColdkeySuccessor、ColdkeyRoot 存储定义;更新 MinerCollateralState 结构体注释和冻结标识
- docs/ 和 sdk/python/ 目录:大量文档更新和 SDK 调整以匹配新参数和错误
LOW (7)
修复运行时升级多签审批流程中 execuing approval 因 max_weight 过小导致的 MaxWeightTooLow 错误
判级:纯客户端工具修复,未改动任何 runtime pallet、存储、共识、emission 或 spec_version,不涉及资金安全,不引入 breaking change。
关键改动
- .github/scripts/deploy/approve-upgrade-multisig.js:将三个多签审批路径的 max_weight 从 60e9/10k 提升至 80e9/50k
- sdk/python/bittensor/client.py:新增 _AddressView 辅助类和 estimate_weight(call, address=...) 方法,用于从链上实时查询调用的声明权重
- sdk/python/bittensor/sync.py:为同步接口新增 estimate_weight 方法代理
- sdk/python/bittensor/cli/upgrade_helpers.py:新增 finalizing_max_weight() 函数,调用 estimate_weight 后上浮 10% 作为 max_weight
- sdk/python/bittensor/cli/commands/upgrade.py:将三个多签审批路径的 max_weight 从硬编码 FINALIZE_WEIGHT 替换为动态估算的 finalizing_max_weight()
升级部署脚本中 FINALIZE_WEIGHT.proof_size 从 10k 提升至 50k(refTime 同步 60B→80B),并增强代码浏览器的行范围高亮功能
判级:全量改动仅涉及部署脚本常量调整和官网前端 UI 增强,无任何 pallet/runtime 源码变更,不触及资金、共识、emission、存储迁移或 spec_version,严格符合 LOW 判定标准
关键改动
- .github/scripts/deploy/approve-upgrade-multisig.js:as_multi weight 参数 proofSize 10k→50k,refTime 60B→80B
- sdk/python/bittensor/cli/upgrade_helpers.py:FINALIZE_WEIGHT proof_size 10k→50k,ref_time 60B→80B,添加注释说明 v432 测量值 ~13.4k proof_size
- website/scripts/generate.py:扩展 PALLET_DIRS 与 UPSTREAM_PALLETS 映射(新增 Commitments/Drand/LimitOrders/MevShield/Swap 及 Contracts/Ethereum/Grandpa/Preimage/SafeMode/Scheduler/System),新增 end_line 字段与 range_anchor() 函数,代码链接从单行锚点升级为行范围锚点
- website/src/app/code/[[...slug]]/page.tsx:引入 LineRangeHighlight 组件,在文件页脚添加 #L12 / #L12-L34 用法提示
- website/src/app/code/code.css:行高亮样式改为红色(rgba(209,81,104,0.12)背景+左侧红色色条),替代原 hover 色,提高可识别性
回退#2932不慎引入的网站文件修改,仅保留权重修复
判级:回退意外引入的网站文件修改,不影响链上逻辑或运行时
将 multisig 升级审批流程中的 FINALIZE_WEIGHT 常量从 80B/50k 提升至 200B ref_time / 1M proof_size
判级:纯部署工具层常量替换,不涉及任何 pallet、runtime、共识、存储或资金相关代码,无逻辑变更,无迁移,无 spec_version 变更
关键改动
- .github/scripts/deploy/approve-upgrade-multisig.js:4 处 weight 参数从 { refTime: 80_000_000_000, proofSize: 50_000 } 改为 { refTime: 200_000_000_000, proofSize: 1_000_000 }
- sdk/python/bittensor/cli/upgrade_helpers.py:FINALIZE_WEIGHT 常量从 {"ref_time": 80_000_000_000, "proof_size": 50_000} 改为 {"ref_time": 200_000_000_000, "proof_size": 1_000_000}
添加临时stamp步骤修复v432 SDK发布为稳定版11.0.0
判级:仅修改CI发布脚本,添加版本重写和验证步骤,不影响链上逻辑、共识或资金
修复Vercel部署因文件超限失败的问题,添加--archive=tgz参数
判级:纯CI/CD部署脚本修复,无链上逻辑变更,不影响核心功能
将15个工作区crate的publish设为false,避免因依赖fork版polkadot-sdk导致发布失败
判级:仅修改工作流和Cargo.toml的publish字段以停止发布crate至crates.io,不涉及任何运行时逻辑、存储或共识变更