Release v464
Runtime 464 (proposed)
Published
2026-09-17 12:58:31
Generated
2026-09-17 13:02:15
总 PR
17
HIGH
4
MEDIUM
2
Stage2
0
官方 Release Notes 总结
- 本版宣布**运行时升级至 spec 464**,目前 CI 已提交多签的一半签名,需等待 sudo 多签(triumvirate)的第二批准后方可执行。
- 提案细节包括 spec_version 464、commit `5cd66b85`、call hash 等关键信息,部署时间点为区块 `9087523:10`。
- 提供了签名方法(`btcli upgrade sign`)与独立验证流程(建议用 srtool 本地构建并与链上 wasm 做字节对比)。
- **未提及**任何安全修复(advisory 或严重性)、资金/共识/账户相关变更或 breaking change,本次仅涉及运行时版本号升级。
TL;DR(PR 分析)
本版本主网运行时升级至 spec 464,合并篮子交易替换权重机制、nonce 持久化、费用豁免定价、质押记账修复及多项安全加固,同时调整共享池 epoch 逻辑,直接影响资金、共识与安全;其余为 CI/测试/文档/CLI 的低风险优化。
交叉验证
两边确认0
仅分析映射17
仅 Release Notes0
HIGH 重要更新 (4)
新增 swap_basket 外部调用取代 set_root_weights,实现验证器主导的 Beta 篮子再平衡交易,同时移除旧权重向量设计并将分红累积方式从权重定向部署改为原地累积
判级:spec_version 从 460 升至 461 且包含运行时迁移(清除根权重向量、搬运集中度上限);新增直接操作篮子持仓价值的 swap_basket 外部调用;移除了 set_root_weights 外部调用(对现有接口消费者的破坏性变更);RPC API 版本 3→4 且移除公共查询方法;核心存款/赎回路径的语义和签名均发生变更
关键改动
- pallets/subtensor/src/macros/dispatches.rs: 新增 call_index=150 的 swap_basket(hotkey, origin_netuid, destination_netuid, amount, min_amount_out) 外部调用;彻底移除 call_index=146 的 set_root_weights
- pallets/subtensor/src/staking/basket_trade.rs (新文件 481行): 实现 swap_basket 核心逻辑——do_swap_basket → try_swap_basket 事务性双段交易(卖出段 sell_basket_leg→买入段 buy_basket_leg),包含价格极限计算 basket_trade_price_limit(取 slow EMA、fast EMA、spot 三者最严格值 ±2%)、成交量预算 consume_basket_trade_budget、流动性检查 ensure_within_liquidity_cap、集中度检查 ensure_within_concentration_cap
- pallets/subtensor/src/lib.rs: 新增 7 个存储项——BasketTradingEnabled(全局开关默认关)、BasketTradingFrozen(逐热键冻结)、BasketDailyTurnoverCap(NAV 的 10% 日周转上限)、BasketLiquidityCap(子网 Alpha 储备的 10% 流动性上限)、BasketConcentrationCap(NAV 的 1/16 集中度上限)、BasketTradeBucket(每基金周转桶)、SubnetFastMovingPrice(600块半衰期的快速 EMA,用作交易价格锚点);移除 RootWeightSettingEnabled、RootWeightsCap、MIN_ROOT_BASKET_WEIGHTS、DEFAULT_ROOT_WEIGHTS_CAP
- pallets/subtensor/src/staking/claim_root.rs: 移除整个 curated 分发路径(try_distribute_root_alpha_batch、get_valid_basket_weights、BasketFunding 枚举)——存款 deploy_tao_into_basket 改为按持仓市值比镜像买入;新增 credit_root_slot/debit_root_slot 封装根槽位记账;移除 drop_fees 参数(用户存款不再免手续费);集中度检查从权重向量改为实际持仓
- pallets/subtensor/src/staking/basket_flush.rs: 重构 pending-deposit flush 模型——新增 BasketFlushWork/BasketFlushWork 精确计量报价行数与执行行数;所有刷新的外部调用声明统一的扁平预扣 basket_flush_weight_bound;单批次内逐信用隔离(isolate_basket_credit)防止一个坏来源拖垮整批
- pallets/subtensor/src/staking/basket_views.rs: 新增 try_valued_basket_holdings 统一估值入口;get_validator_basket_guarded_nav_tao(受护 NAV=realizable 与 slow EMA 取小,防单块拉盘);basket_trade_budget_at/basket_trade_budget_tao 周转桶计算;get_basket_trading_status RPC 视图;移除 get_validator_root_weights
- pallets/subtensor/src/staking/stake_utils.rs: 新增 update_fast_moving_price 跟随 update_moving_price 更新快速 EMA;提取 settle_alpha_fee_to_author/settle_tao_fee_to_author 统一手续费结算
- pallets/subtensor/src/macros/errors.rs: 新增 7 个篮子交易错误(BasketTradingDisabled/Frozen/TurnoverBudgetExceeded/SameSubnet/LiquidityCapExceeded/MinOutNotMet/ConcentrationCapExceeded);RootWeightCapExceeded/RootWeightSettingDisabled 标记为已退役
- pallets/subtensor/src/macros/events.rs: 新增 BasketSwapped 事件;BasketDeposited 从权重部署改为原地累积语义
- pallets/subtensor/src/migrations/migrate_remove_root_weights.rs (新文件): 运行时迁移——清除所有 Weights[ROOT] 权重向量、删除 RootWeightSettingEnabled、将 RootWeightsCap[ROOT] 搬运到 BasketConcentrationCap
- common/src/proxy.rs: ProxyType 新增 BasketTrading 代理类型(索引 18)
- runtime/src/proxy_filters/call_groups.rs: 新增 BasketTradingCalls 过滤组(仅 swap_basket);从 SubtensorCommonCalls 移除 set_root_weights;CriticalNetworkCalls 新旧接口替换
- runtime/src/proxy_filters/mod.rs: 新增 BasketTrading 代理路由;NonTransfer/NonFungible/NonCritical 排除篮子交易(必须显式授权);详尽的代理权限测试
- runtime/src/lib.rs: spec_version 460→461;runtime API 版本 3→4;移除 get_validator_weights RPC,新增 get_basket_trading_status;注册新迁移 migrate_remove_root_weights
- pallets/admin-utils/src/lib.rs: 新增 5 个 sudo 管理调用——sudo_set_basket_concentration_cap/trading_enabled/trading_frozen/daily_turnover_cap/liquidity_cap;移除 sudo_set_root_weight_setting_enabled/root_weights_cap
- pallets/subtensor/src/tests/: 新增 3 个测试文件 swap_basket.rs(1586行)、swap_basket_liquidity_cap.rs(910行)、swap_basket_stale_ema.rs(714行)
- SDK/Python/文档: 更新 CLI、intents、错误描述、存储定义、fixtures;新增 basket-trading 指南文档
- pallets/subtensor/src/weights.rs: 新增 swap_basket 权重条目(benchmark 生成)
#3169
Hotfix 2 (spec 462): nonce persistence, fee-exempt call pricing, staking bookkeeping
BREAKING
MERGED
fix
热修复运行时升级:修复nonce持久化、费用豁免调用定价和质押记账问题,spec_version 461→462
判级:这是一个热修复运行时升级(spec_version 461→462),包含多项核心修复:nonce持久化(影响交易有效性)、费用豁免调用定价(影响TAO/Alpha交易费)、质押记账修复(影响资金安全),且已合并到主分支
将多个安全修复整合为spec_version 463运行时升级,含质押/费用/锁定等方面的硬化和边界检查
判级:该PR将多个安全修复合并为一个运行时升级(spec_version 459→463),包含CheckNonce、费用豁免权调用限制、锁定揭露计量、StakingHotkeys绑定等直接影响链上状态和资金安全的实质性改动,且已合并到release分支即将落地
运行时统一至 spec 464,合并 baskets、安全及 torsion 修复,含质押和共享池关键修复,spec_version 升级。
判级:该 PR 将 main 与安全修复合并到 spec 464,包含共享池、质押相关修复及运行时升级,直接影响主网资金与质押逻辑。
MEDIUM 更新 (2)
#3164
share-pool: start a pool epoch on open so pre-upgrade leftover rows are retired
BREAKING
MERGED
fix
将 share-pool epoch 递增时机从池子关闭改为池子开启(denominator 从零变非零或非零变零),并允许存入只有 shares 没有价值的池子,从而修复升级前遗留份额行在新池子被错误认领的问题
判级:属于核心 pallet 的存储逻辑修改,影响 share-pool 的 epoch 机制和遗留数据清理,但未触及资金/共识/emission 核心逻辑,无 breaking 变更
关键改动
- primitives/share-pool/src/lib.rs:在 sim_update_value_for_one 中增加条件,允许存入 shared_value == 0 但有 shares 的池子(update > 0 && shared_value == 0)
- pallets/subtensor/src/staking/stake_utils.rs:将 epoch 递增逻辑从仅关闭时(!previous.is_zero() 且 update 变为零)改为 denominator 从零变非零或非零变零时都触发
- runtime/src/lib.rs:spec_version 从 459 升至 460
- pallets/subtensor/src/tests/staking.rs:新增测试 test_legacy_leftover_rows_cannot_claim_reopened_pool;修改现有测试验证 epoch 计数和遗留行退休
- pallets/subtensor/src/tests/destroy_alpha_tests.rs:修改断言,确保遗留行在池子重新打开后仍保持退休状态
将#3059的per-runtime watcher slot修复合入main,避免过期主网审批阻塞新runtime
判级:该PR是一个cherry-pick的fix,将#3059的per-runtime watcher slot修复合并到main,防止旧的主网审批阻塞更新后的finalized runtime,虽不直接改动资金或共识核心逻辑,但影响runtime部署流程
LOW (11)
修复CI中TypeScript E2E测试的流水线阻塞问题,优化构建依赖和超时机制
判级:纯CI/CD流程改进,解决TypeScript E2E测试的管道依赖和超时问题,不影响任何链上逻辑、状态或共识
修改CI流水线,使最新main分支构建自动成为:latest节点镜像标签
判级:纯CI/CD流程改进,仅修改Docker镜像发布策略,不涉及任何链上逻辑、资金或共识变更
修复一个使用随机性构造导致不稳定的单元测试,改为确定性构造
判级:仅修复测试中非确定性构造,不修改任何生产代码、存储或共识逻辑,对链上行为无影响
简化btcli钱包余额显示为三位小数,保留精确数值用于JSON输出
判级:仅修改btcli命令行工具的钱包余额显示格式(三位小数),不影响链上状态、共识或资金逻辑。
修复最新 typer 版本中 vendored click 缺失 Exit/Abort 异常的 CLI 崩溃问题
判级:纯 CLI 工具链兼容性修复,不涉及链上存储、共识、资金或 runtime 逻辑,用户交互错误修复
SDK 新增 childkey_threshold_suspended 只读接口,刷新文档预览依赖锁文件
判级:纯只读 SDK 扩展和文档/依赖更新,无任何运行时或链上状态变更
#3167
chore(deps): bump the npm_and_yarn group across 1 directory with 4 updates
MERGED
dependencies
升级 website 目录下 4 个 npm 依赖版本(brace-expansion等)
判级:仅更新 website 目录下的 4 个 npm/yarn 依赖版本,属于依赖升级的 chore,不涉及任何链上逻辑或运行时变更
#3170
test(clone): credit in-window basket-flush and user TAO inflows in balancer edge emission check
MERGED
test
增强平衡器边缘排放检查测试,考虑篮子刷新带来的非排放TAO流入
判级:纯测试变更,仅修改克隆仓库下的测试文件,未触及任何运行时代码或链上状态
修复 Frontier KV 映射同步工作线程在 warp 同步后因缺失区块头而无限重试同一个块、导致 eth RPC 返回 null 的死循环 Bug
判级:改动位于 vendor 目录下的副业客户端库,不触及运行时/pallet 核心逻辑、不动资金/共识/emission/存储迁移,按项目重要性分级上限为 low。
关键改动
- vendor/frontier/client/mapping-sync/src/kv/mod.rs 第 296 行:将 `Ok(None) | Err(_) => Err(...)` 拆分为 `Ok(None) => Ok(None)` 与 `Err(e) => Err(format!(...))` —— 缺失区块头时优雅停止回退扫描而非报错重试
将篮子交易等文档中的 SDK 安装命令固定为 bittensor 11.3.0rc47 版本
判级:纯文档更新,仅修改了 SDK 安装版本号,未改动任何运行时/链上代码或状态
在安全升级运行时中新增两个安全检查:拒绝Ed25519小阶公钥签名者和EVM零地址来源
判级:仅增加运行时安全检查,不涉及存储/资金/共识/emission变更,无新增DispatchExtension,属于纯加强性防御。已在未发布的安全分支上,不影响主网运行逻辑
关键改动
- runtime/src/small_order.rs: 新增包含7个小阶Ed25519公钥编码的查询函数,支持sign-bit孪生检测
- runtime/src/check_nonzero_sender.rs: 新增CheckNonZeroSender替代品,在validate中额外调用is_small_order_ed25519_encoding拒绝小阶密钥,保持相同IDENTIFIER和SCALE payload
- runtime/src/evm_origin.rs: 新增EnsureAddressTruncatedNonZero,在截断匹配基础上拒绝address(0)来源
- runtime/src/lib.rs: 将pallet_evm::Config的CallOrigin/WithdrawOrigin替换为evm_origin::EnsureAddressTruncatedNonZero,将SystemTxExtension中的frame_system::CheckNonZeroSender替换为check_nonzero_sender::CheckNonZeroSender
- node/src/benchmarking.rs和runtime/tests/claim_root_weight.rs: 同步更新对CheckNonZeroSender的引用