Release v445
Runtime 445 (proposed)
Published
2026-08-12 21:03:55
Generated
2026-08-12 22:05:37
总 PR
8
HIGH
2
MEDIUM
4
Stage2
0
官方 Release Notes 总结
本次发布的 runtime 升级为 spec 445,已在 finney 网络上提交 2/2 部署多签的 CI 部分,等待三巨头多签批准后执行。该版本未提及安全修复、资金/共识/账户变更或 breaking change。spec_version 升级至 445,对应 commit `d3f40e44bda9019c606aeb0c907bb52ba7fe386c`,并提供了独立的 srtool 构建验证方法。
TL;DR(PR 分析)
本版核心为两笔 emission 逻辑变更——先后移除和恢复 miner-burn 缩放因子,均属高影响资金/共识改动;同时并行清理了缺失的押金释放与过期存储,降低链状态膨胀,并在交易验证前提前过滤频繁的确定性失败以优化区块空间利用率。
HIGH 重要更新 (2)
#3058
Release v444: remove miner-burn scaling from subnet emission shares
BREAKING
emission
MERGED
runtime
发布 v444,移除子网排放份额中的 miner-burn 缩放,回收交易费代替奖励区块作者,完成 EVM 预编译实现及文档工具
判级:涉及 emission 核心逻辑变更、交易费经济模型重构、大量新的 EVM 预编译状态修改方法,直接触及资金分发与链上行为,spec_version 升级且包含存储迁移,属于高风险高影响改动。
关键改动
- pallets/subtensor/emission 逻辑:移除 (1 - MinerBurned) 权重,子网排放份额改为仅通过 emission gate 由价格 EMA 决定
- pallets/transaction-fee:原生 TAO 手续费和 tip 不再支付给区块作者,而是通过减少发行量(recycle)回收;Alpha 支付的手续费先 swap 成 TAO 再回收
- pallets/* + precompiles:新增 Scheduler (0x80f)、Drand (0x810)、Timestamp (0x811)、RuntimeConfiguration (0x812)、PrecompileRegistry (0x813) 五个预编译地址,共 31 个函数;现有预编译追加 68 个状态修改方法和 67 个类型化视图
- runtime:spec_version 升级至 444,包含存储迁移(total-voting-power migration)
- chain-extensions / 文档:添加预编译文档和维护工具
恢复子网 emission 分配中的 MinerBurned 缩放因子:价格份额乘以 (1 - MinerBurned) 后再归一化并通过 emission gate
判级:变更涉及 emission 分配核心逻辑,影响所有子网的代币排放量,spec_version 升级表明将部署至主网。属于高影响资金/共识相关改动。
关键改动
- pallets/subtensor/src/coinbase/subnet_emissions.rs: 新增 scale_price_shares_by_miner_burn 函数,对每个子网的 EMA 价格份额乘以 (1 - MinerBurned),若所有调整后权重为零则回退至原始价格份额;get_shares 流程改为先计算价格份额,再应用 MinerBurned 缩放,然后通过 emission gate
- pallets/subtensor/src/coinbase/run_coinbase.rs: 更新 withheld_incentive 注释,明确无论 recycle 还是 burn 都计入 withheld proportion,避免通过选择 Recycle 逃避 emission penalty
- runtime/src/lib.rs: spec_version 从 444 升至 445,标志此变更即将部署至主网
- pallets/subtensor/src/tests/subnet_emissions.rs: 将原有测试 get_shares_independent_of_miner_burned 改为 get_shares_scales_by_miner_burn_before_gate,验证 MinerBurned 对份额的影响;新增边界测试:全 burn 子网份额为 0、所有子网全 burn 回退到价格份额
- docs/concepts/emissions.mdx 及其他文档/网站文件:更新 emission 公式说明,添加 (1 - MinerBurned) 缩放步骤
MEDIUM 更新 (4)
在交易验证阶段(区块包含前)提前拒绝两个最频繁的确定性失败:set_commitment 的子网不存在或调用者未注册,以及 commit_timelocked_weights/mechanism_weights/crv3 的速率限制超限。
判级:阻止了大量的确定性失败,优化了区块空间利用率,但未触及核心资金/共识逻辑;trait 签名变化属于 breaking,但仅限于框架内部实现。
关键改动
- pallets/subtensor/src/extensions/subtensor.rs: 在 SubtensorTransactionExtension::check 中添加对 set_commitment 的 `CanCommit::validate` 预检查;在 validate() 中为 commit 类调用提供 provides 标签;新增 commitment_weight() 计入验证权重。
- pallets/subtensor/src/guards/check_rate_limits.rs: 将 commit_timelocked_weights、commit_timelocked_mechanism_weights、commit_crv3_mechanism_weights 纳入 CheckRateLimits 的 applies_to 和 check 逻辑,并根据子网/机制解析特定速率限制通道;新增 provides_tags() 使同一冷热键+机制的交易在交易池中冲突,防止重复提交。
- pallets/commitments/src/lib.rs: 修改 CanCommit trait,将 `fn can_commit` 改为返回 Result 的 `fn validate` 和 `fn validation_weight`;调用了新的 validate 方法并加上验证权重;为默认实现提供空实现。
- runtime/src/lib.rs: AllowCommitments 实现更新后的 CanCommit trait,validate 返回具体错误(SubnetNotExists / HotKeyNotRegisteredInSubNet),validation_weight 返回2次读的权重。
- pallets/commitments/src/mock.rs: TestCanCommit 适配新 trait 接口。
- pallets/subtensor/src/tests/mock.rs: TestCanCommit 实现模拟了真实校验逻辑(子网存在+注册检查),以便测试覆盖。
- pallets/subtensor/src/extensions/subtensor.rs: 新增两个测试:validate_rejects_ineligible_metadata_commitment(测试 set_commitment 预检查)和 timelocked_commits_reject_at_validity_and_conflict_in_pool(测试速率限制和 provides 标签),以及零速率边界测试。
移除已废弃的旧存储前缀和显式零值/默认行,减少链状态大小,同时保留所有非零有效状态。
判级:涉及 spec_version 升级和存储迁移,需节点协调升级,但核心逻辑(资金、共识、emission)未受影响,风险可控,属于中等影响。
关键改动
- pallets/subtensor/src/migrations/migrate_storage_bloat_v2.rs: 新增可恢复的 Subtensor 存储清理迁移,定义清理目标列表(13 个废弃存储前缀/条目),通过 on_runtime_upgrade 启动并在 on_idle 中分块执行,进度持久化到 StorageBloatCleanupMigration 存储项,完成时记录 HasMigrationRun 标记。
- pallets/subtensor/src/macros/hooks.rs: 在 on_runtime_upgrade 末尾添加 kickoff_storage_bloat_cleanup 调用;在 on_idle hook 中,当 beta-basket 迁移未进行且剩余权重足够时,调用 continue_storage_bloat_cleanup 进行增量清理。
- pallets/swap/src/pallet/migrations/migrate_storage_cleanup_v2.rs: 新增 Swap 存储清理迁移,替代旧的 swapv3_to_balancer 迁移,只清除废弃的 V3 前缀(13 个)和零值 BalancerTaoReservoir/BalancerAlphaReservoir 条目,保留非零挂起余额。
- pallets/swap/src/pallet/hooks.rs: 将 on_runtime_upgrade 中的迁移调用从 migrate_swapv3_to_balancer 替换为 migrate_storage_cleanup_v2。
- runtime/src/lib.rs: spec_version 从 443 提升至 444。
- pallets/subtensor/src/migrations/mod.rs、pallets/swap/src/pallet/migrations/mod.rs: 注册新的迁移模块。
- 测试文件(migration.rs、tests.rs、swap_hotkey.rs 等):新增测试覆盖分块清理、非零状态保留、完成守卫、Swap 前缀清除、零 reservoir 移除、RootStakeUnlockInterval 保护等场景。
在 neurons 被注销或替换时,清理其在 commitment pallet 中的所有状态并释放关联的押金。
判级:虽涉及资金操作(unreserve),但并非新增直接操作锁定质押的 extrinsic,也未改动 emission/共识核心逻辑;属于清理遗漏状态的中等风险修复。
关键改动
- pallets/commitments/src/lib.rs:新增 `purge_neuron` 函数,移除 `CommitmentOf`、`LastCommitment`、`LastBondsReset`、`RevealedCommitments`、`UsedSpaceOf` 以及 `TimelockedIndex` 中的条目并释放 deposit(unreserve)
- pallets/subtensor/src/lib.rs:`CommitmentsInterface` trait 增加泛型参数 `AccountId` 和 `purge_neuron` 方法
- pallets/subtensor/src/subnets/uids.rs:在 `replace_neuron` 和 `trim_to_max_allowed_uids` 中新增对 `CommitmentsInterface::purge_neuron` 的调用
- runtime/src/lib.rs:实现 `CommitmentsInterface<AccountId>` 并为 `purge_neuron` 绑定 `pallet_commitments::Pallet::purge_neuron`
- pallets/subtensor/src/tests/uids.rs:新增回归测试验证修剪后被删除 neuron 的 commitment 被清除、正常替换后 binding 也被清除
- 多个 mock 文件:适配新 trait 签名(添加泛型参数 `AccountId`)
在时间锁承诺的解密前增加ciphertext头部校验,拒绝畸形的v或w字段(长度不为32字节),并更新spec_version至445。
判级:虽涉及spec_version升级(breaking),但改动本身是防御性输入验证,不触及资金、共识、emission等核心逻辑,影响范围可控。
关键改动
- pallets/commitments/src/lib.rs:在reveal_timelocked_commitments循环中添加if commit.header.v.len() != 32 || commit.header.w.len() != 32检查,无效时跳过该承诺并记录warn日志。
- pallets/subtensor/src/coinbase/reveal_commits.rs:在CRv3权重揭示路径中添加相同的头部长度校验,无效时跳过并记录trace日志。
- pallets/commitments/src/tests.rs:新增回归测试reveal_timelocked_commitment_rejects_invalid_ciphertext_header,构造v/w长度异常的密文并验证揭示后承诺被清除。
- pallets/subtensor/src/tests/weights.rs:生成物文件(generated=true),包含权重测试的更新,无需人工审查。
- runtime/src/lib.rs:spec_version从444升至445。
- sdk/bittensor-core-wasm/tests/smoke.mjs:更新构建命令添加--no-opt。
- .github/workflows/check-rust.yml:CI中WASM构建命令添加--no-opt。
LOW (2)
为 limit-orders pallet 新增人类可读(clear-signing)的订单签名验证方式,支持 Ledger 硬件钱包的用户友好签名
判级:纯新增功能,不涉及共识、资金、emission 或 runtime 核心逻辑,不破坏现有行为,安全风险低
关键改动
- pallets/limit-orders/src/lib.rs:新增 LEDGER_MAX_SIGN_SIZE(256 字节),定义 verify_order、verify_wrapped、verify_readable 三个签名验证函数,新增 render_account、render_order 函数构建可读消息,修改 is_order_valid 使其依次尝试三种签名形式(raw→wrapped→readable)
- pallets/limit-orders/Cargo.toml:为 sp-core 启用 serde 特性以支持 SS58Prefix 渲染
- pallets/limit-orders/src/benchmarking.rs:将基准测试的签名方式改为 readable 形式(最重路径)以确保权重反映最坏情况
- pallets/limit-orders/src/tests/:新增 readable.rs(可读签名单元测试)、ledger_vector.rs(硬件测试向量,包含真实 Ledger 签名捕获)、修改 auxiliary.rs(适配新签名辅助函数、增加 verify_order/verify_wrapped 单元测试)、修改 mock.rs(增加 SS58Prefix 配置和 order_signing_payload 辅助函数)
- runtime/tests/limit_orders.rs:新增 ed25519 包装签名的端到端测试和可读签名的端到端集成测试
- ts-tests/suites/dev/subtensor/limit-orders/:新增 TypeScript 端到端测试(可读消息格式、可读签名执行、Ledger 原始签名向量)
- ts-tests/utils/limit-orders.ts:新增 formatOrderMessage、buildReadableSignedOrder 等工具函数
修复 Proxy::proxy 与 proxy_announced 未回传内部调用实际权重、导致代理交易多扣手续费的问题,并补充回归测试。
判级:PR 修复的是代理调用中 inner call 实际权重未回传导致多扣手续费的问题,属于非破坏性 bug fix,不涉及共识/资金存储变更,且已合并但影响面限定在代理路径的手续费精度。