总 PR
40
HIGH
15
MEDIUM
12
Stage2
0
Model: deepseek/deepseek-v4-flash Compare Back

官方 Release Notes 总结

- **治理重构**:将治理系统从V1升级至V2(PR #2620),并提取出 `pallet-signed-voting` 模块(PR #2713)。 - **质押与速率限制**:移除了按区块的质押操作速率限制(PR #2712),并相应调整了限速逻辑(PR #2720);新增 `StakeInfoRuntimeApi.get_stake_availability_for_coldkeys` 运行时API(PR #2742)。 - **子网排放变更**:子网排放计算切换为基于价格的份额机制(PR #2779),并后向传播新子网排放关闭逻辑(PR #2788, #2790)。 - **其他重要变更**:新增 `pallet-advanced-limit-orders` 限价订单托盘(PR #2554, #2732, #2791);添加可配置的Tempo与所有者触发的Epoch功能(PR #2638);移除 `pallet-registry` 运行时(PR #2747);将交易扩展转换为调度扩展(PR #2773);新增 `min_childkey_take` 超参数(PR #2761)。 - **性能与修复**:优化锁机制避免全局遍历(PR #2701),修复 conviction 计算问题(PR #2744),并修复多个基准测试与权重信息。 - **版本升级**:版本号从 `v3.4.7-422` 升至 `v3.4.8-423`,未提及具体 spec_version 数字,但按惯例应包含 spec_version 升级。

TL;DR(PR 分析)

本版主要进行了交换引擎重构(Balancer替代Uniswap V3)、子网排放机制切换为基于EMA价格份额、共识时序可配置化及锁存储优化等重大变更,其中多项直接涉及资金分配、共识核心逻辑或资金安全修复(如限价订单漏洞、conviction锁清理缺陷、算术溢出修复)。此外,新增了多项治理基础设施(multi-collective、referenda、signed-voting)及DispatchExtension迁移,是近期最核心的代码库更新。

交叉验证

两边确认40
仅分析映射0
仅 Release Notes0
HIGH 重要更新 (15)
#2505 Re-enable balancer BREAKING MERGED feature
重新启用 Balancer 风格交换引擎,用加权池(Weighted Pool)替换原有的 Uniswap V3 风格交换引擎(含 sqrt price、tick、position),并附带完整存储迁移与清理。
判级:替换整个交换核心引擎、存储结构完全重构、影响定价、emission、staking 等关键子系统、涉及两个阶段存储迁移,是近期最重大的基础设施变更。
关键改动
  • pallets/swap/src/pallet/balancer.rs:新增 1339 行完整 Balancer 数学模块,实现加权池的交换、限价单、流动性添加/移除、价格计算等所有高精度运算,权重范围限制在 [0.1, 0.9]。
  • pallets/swap/src/pallet/mod.rs:彻底重构 pallet 存储结构,移除 AlphaSqrtPrice、CurrentTick、CurrentLiquidity、Ticks、Positions 等所有 V3 存储,新增 SwapBalancer(Balancer 权重存储)和 PalSwapInitialized 标记;所有 V3 的公开接口(add_liquidity、remove_liquidity、modify_position、toggle_user_liquidity、disable_lp)均标记为已废弃并返回 Deprecated 错误;新增 hooks.rs 和 migrations/ 模块以支持运行时升级迁移。
  • pallets/swap/src/pallet/impls.rs:大幅简化实现,移除所有 V3 的 position、tick、liquidity 操作逻辑,重写 swap_inner、adjust_protocol_liquidity、do_swap、do_clear_protocol_liquidity、current_price 等核心方法以基于 Balancer 公式;价格类型从 U96F32 改为 U64F64。
  • pallets/swap/src/pallet/swap_step.rs:重写为单步交换逻辑,不再依赖 tick crossing 和 liquidity 计算,直接使用 Balancer 的 exp 公式进行 delta_in 和 convert_deltas。
  • pallets/swap/src/pallet/hooks.rs + migrations/mod.rs + migrate_swapv3_to_balancer.rs:新增运行时升级迁移,从现有的 AlphaSqrtPrice 中读取旧 sqrt price,计算价格并初始化 Balancer 权重映射。
  • pallets/subtensor/src/migrations/migrate_cleanup_swap_v3.rs:新增清理迁移,将废弃的 SubnetTaoProvided 和 SubnetAlphaInProvided 存储中的用户提供流动性合并回主储备,并移除旧存储。
  • pallets/subtensor/src/lib.rs:移除 SubnetTaoProvided 和 SubnetAlphaInProvided 存储定义,TaoBalanceReserve::reserve() 和 AlphaBalanceReserve::reserve() 不再累加用户提供的流动性。
  • pallets/subtensor/src/coinbase/run_coinbase.rs:重写 emission 注入逻辑,调用 adjust_protocol_liquidity 返回实际注入量,使用实际注入值而非预先计算的 tao_in_i/alpha_in_i 来更新存储和进行 swap,新增对超额支出的拒绝(spend_tao 检查 credit.peek() < part)。
  • pallets/subtensor/src/coinbase/root.rs:移除已废弃的 dissolve_all_liquidity_providers 调用,移除 SubnetTaoProvided 的清理。
  • pallets/subtensor/src/coinbase/subnet_emissions.rs + tao.rs + stake_utils.rs + helpers.rs:多处将价格类型从 U96F32 改为 U64F64,更新计算逻辑适配新定价模型。
  • pallets/subtensor/src/staking/helpers.rs + stake_utils.rs:移除 is_user_liquidity_enabled,更新价格获取与 TAO 等价计算类型。
  • pallet-subtensor 和 pallet-swap 的测试文件大规模重写:移除所有 V3 相关的测试用例(add/remove/modify liquidity、tick crossing、position 管理等),新增 Balancer 相关的单元测试(exp 精度、权重更新、价格计算边界、大规模 fuzz 测试)。
  • primitives/swap-interface/src/lib.rs:SwapHandler trait 移除 get_protocol_tao、is_user_liquidity_enabled、dissolve_all_liquidity_providers、toggle_user_liquidity,新增 init_swap,adjust_protocol_liquidity 返回 (TaoBalance, AlphaBalance),current_alpha_price 返回类型从 U96F32 改为 U64F64。
  • runtime/src/lib.rs:移除 SwapMaxPositions 配置参数,WeightInfo 改为 DefaultWeight,API 实现中价格乘法类型从 U96F32 改为 U64F64,移除不再使用的 U96F32 导入。
  • pallets/swap/rpc/src/lib.rs + runtime-api/src/lib.rs:新增 current_alpha_price_all RPC 方法用于批量获取所有子网的 Alpha 价格。
  • pallets/swap/src/position.rs + tick.rs:完全删除(共删除 ~2396 行 V3 的 position 和 tick 实现)。
  • pallets/swap/src/lib.rs:移除 SqrtPrice 类型别名,移除 position 和 tick 模块导出。
  • pallets/swap/src/pallet/migrations/mod.rs:新增通用的 remove_prefix 辅助函数用于在迁移中按存储前缀删除旧 storage map。
  • 链扩展与多个模拟文件中移除或调整 U96F32 引用,适配类型变更。
#2554 Pallet advanced limit orders MERGED feature
新增 pallet-limit-orders 限价订单模块,支持用户链下签名限价订单、通过中继者提交上链执行,并提供两种执行路径(逐单最佳努力与批量原子执行),同时将 swap-interface 从 pallet 迁移至 primitives 并新增 OrderSwapInterface trait
判级:引入新 FRAME pallet 和原语库,修改 AMM 交互路径和 runtime 存储,涉及资金转账和链下签名验证,对网络功能和安全性有显著影响
关键改动
  • pallets/limit-orders/:新增完整 FRAME pallet(~1236 行),包含 Order/SignedOrder 数据结构、OrderType(LimitBuy/TakeProfit/StopLoss)、链下签名验证(sr25519)、过期检查、价格条件检查、部分填充、chain-id 防重放、on_runtime_upgrade 迁移、genesis 构建等
  • pallets/limit-orders/src/lib.rs:核心执行逻辑 execute_orders(逐单最佳努力/skip 模式)和 execute_batched_orders(同子网批量原子执行,先内部轧差后仅净额触碰池),含 validate_and_classify、collect_assets、net_pool_swap、distribute_alpha_pro_rata、distribute_tao_pro_rata、collect_fees 等完整管道
  • primitives/swap-interface/:从 pallets/swap-interface 迁移至 primitives,新增 OrderSwapInterface trait(buy_alpha/sell_alpha/transfer_tao/transfer_staked_alpha/register_pallet_hotkey 等)作为限价订单与 AMM 池之间的抽象接口
  • pallets/subtensor/src/staking/order_swap.rs:实现 OrderSwapInterface,包装现有的 stake_into_subnet/unstake_from_subnet 逻辑,支持 validate=false 的内部调用路径(用于批量执行中的 pallet 中间账户操作),含机制 1 子网的滑点检查
  • runtime/src/lib.rs:将 LimitOrders pallet 注册到 runtime(index 32),配置 PalletId(bt/limit)、PalletHotkey、MaxOrdersPerBatch(100)、ChainId 等参数
  • node/src/dev_keystore.rs + node/src/service.rs:新增 DevShieldKeystore(固定密钥对的 shield keystore)解决单验证人 manual-seal 模式下密钥滚动漂移问题
  • pallets/limit-orders/src/migrations/migrate_register_pallet_hotkey.rs:runtime 升级时自动注册 pallet hotkey 到 pallet 账户
  • Cargo.toml/runtime/Cargo.toml:添加 pallet-limit-orders 依赖,subtensor-swap-interface 路径从 pallets/swap-interface 改为 primitives/swap-interface
  • 大量测试:~3105 行 extrinsics 测试、~1647 行辅助函数、~2457 行 runtime 集成测试、多个 TypeScript 端到端测试覆盖各种场景
#2638 [Feature] Configurable Tempo & Owner-Triggered Epochs BREAKING MERGED feature
实现可配置 tempo(子网周期)与所有者触发的 epoch,将模运算调度替换为基于 LastEpochBlock 的有状态调度器
判级:改动核心共识时序(epoch 调度方式从模运算改为有状态 LastEpochBlock)、新增 4 个存储项、包含数据迁移、新增 3 个 extrinsic、修改 runtime Config trait,直接影响所有子网的 epoch 执行和 emission 发放。
关键改动
  • pallets/subtensor/src/lib.rs:新增 LastEpochBlock、PendingEpochAt、SubnetEpochIndex、ActivityCutoffFactorMilli 四个存储项,定义 MIN_TEMPO/MAX_TEMPO 等常量
  • pallets/subtensor/src/coinbase/tempo_control.rs:新增 do_set_tempo、do_set_activity_cutoff_factor、do_trigger_epoch 三个核心函数实现
  • pallets/subtensor/src/macros/dispatches.rs:新增 set_tempo(call_index=139)、set_activity_cutoff_factor(call_index=140)、trigger_epoch(call_index=141) 三个 extrinsic
  • pallets/subtensor/src/coinbase/run_coinbase.rs:重写 should_run_epoch 和 drain_pending,使用 LastEpochBlock + PendingEpochAt 驱动调度;新增 epochs_deferred_this_block;引入 MaxEpochsPerBlock 限流机制
  • pallets/subtensor/src/epoch/run_epoch.rs:修改 activity_cutoff 取值来源(改为 get_activity_cutoff_blocks);修改 last_tempo 变量使用 LastMechansimStepBlock;修复 CR-v2/v4 提交过期检查以使用 commit_epoch
  • pallets/subtensor/src/coinbase/block_step.rs:try_set_pending_children 改为检查 LastEpochBlock==当前块;reveal_crv3_commits 跳过因限流被延迟的子网
  • pallets/subtensor/src/coinbase/reveal_commits.rs:reveal_crv3_commits_for_subnet 使用 current_epoch_with_lookahead 替代 get_epoch_index
  • pallets/subtensor/src/coinbase/root.rs:subnet_teardown 中清除新增的四个存储项
  • pallets/subtensor/src/macros/events.rs:新增 ActivityCutoffFactorMilliSet、EpochTriggered、EpochDeferred、EpochSkipped 四个事件
  • pallets/subtensor/src/macros/errors.rs:新增 TempoOutOfBounds、ActivityCutoffFactorMilliOutOfBounds、EpochTriggerAlreadyPending、AutoEpochAlreadyImminent、DynamicTempoBlockedByCommitReveal 五个错误
  • pallets/subtensor/src/macros/config.rs:Config trait 新增 MinTempo、MaxTempo、MinActivityCutoffFactorMilli、MaxActivityCutoffFactorMilli、MaxEpochsPerBlock 五个关联类型
  • pallets/subtensor/src/migrations/migrate_dynamic_tempo.rs:新增数据迁移:回填 LastEpochBlock、Seed SubnetEpochIndex、转换 ActivityCutoff→ActivityCutoffFactorMilli、重写 WeightCommits 字段布局
  • pallets/subtensor/src/macros/hooks.rs:on_runtime_upgrade 中注册 migrate_dynamic_tempo 迁移
  • pallets/subtensor/src/utils/misc.rs:is_in_admin_freeze_window 增加 PendingEpochAt 判断;set_tempo 重命名为 set_tempo_unchecked,新增 apply_tempo_with_cycle_reset
  • pallets/subtensor/src/utils/rate_limiting.rs:TransactionType 新增 TempoUpdate;Hyperparameter 新增 ActivityCutoffFactorMilli=30、TriggerEpoch=31
  • pallets/subtensor/src/subnets/subnet.rs:init_new_network 中新增 LastEpochBlock 错开初始化逻辑
  • runtime/src/lib.rs:为 Runtime 实现新增 MinTempo/MaxTempo 等 Config 关联类型;新增 MaxEpochsPerBlock 常量;添加 get_next_epoch_start_block RPC
  • pallets/subtensor/src/tests/tempo_control.rs:新增完整的 tempo_control 单元测试(245行)
  • pallets/subtensor/src/tests/migration.rs:新增迁移测试
  • pallets/subtensor/src/benchmarks.rs:添加 set_tempo、set_activity_cutoff_factor、trigger_epoch 的 weight 基准测试
  • precompiles/src/subnet.rs、precompiles/src/neuron.rs、precompiles/src/solidity/subnet.sol:新增预编译合约接口
  • pallets/admin-utils/src/lib.rs:更新 admin 相关逻辑
  • 多个 mock 文件(chain-extensions、eco-tests、precompiles、transaction-fee):添加 MinTempo 等 mock 配置
#2701 Optimize locks to avoid full iteration of lock map MERGED feature
优化锁存储,通过引入尘土阈值和LockingColdkeys索引避免全Map扫描
判级:引入了存储索引和尘土归一化,优化了核心性能路径(hotkey swap和子网解散),同时包含两个数据迁移,改动涉及锁核心逻辑和存储结构,对网络性能和状态一致性有显著影响。
关键改动
  • pallets/subtensor/src/staking/lock.rs: 新增 LockState::is_zero() 方法及LOCK_STATE_ZERO_THRESHOLD=100,当locked_mass<100且conviction<100时视为零;roll_forward_lock返回(RollDelta, LockState),新roll_forward方法利用delta更新聚合锁而非直接重新roll所有聚合
  • pallets/subtensor/src/lib.rs: 新增 LockingColdkeys 存储 (netuid, hotkey, coldkey) -> () 作为反向索引
  • pallets/subtensor/src/staking/lock.rs: insert_lock_state 在锁为零时移除 LockingColdkeys 条目并删除 Lock;新增 add_locking_coldkey / maybe_remove_locking_coldkey 辅助函数
  • pallets/subtensor/src/staking/lock.rs: 重命名 roll_forward_individual 为 roll_forward,内部加入尘土归一化逻辑
  • pallets/subtensor/src/staking/lock.rs: 多处将roll_forward_lock调用改为返回.0 (只取LockState)
  • pallets/subtensor/src/staking/lock.rs: swap_hotkey_locks_for_netuids 改为使用 LockingColdkeys::iter_prefix((netuid, old_hotkey)) 代替全局 Lock::iter()
  • pallets/subtensor/src/staking/lock.rs: destroy_lock_maps 使用 LockingColdkeys::iter_prefix((netuid,)) 高效获取需删除的锁条目
  • pallets/subtensor/src/swap/swap_hotkey.rs: 在hotkey swap中新增调用 swap_hotkey_locks_on_subnet (单子网版),避免全局扫描
  • pallets/subtensor/src/staking/remove_stake.rs: 子网锁清理时添加 maybe_remove_locking_coldkey 同步删除索引
  • pallets/subtensor/src/migrations/migrate_populate_locking_coldkeys.rs: 新迁移,遍历所有Lock条目,roll forward后对非零锁插入LockingColdkeys索引,对零锁直接删除
  • pallets/subtensor/src/migrations/migrate_fix_subnet_hotkey_lock_swaps.rs: 新迁移,修复因早期子网级hotkey swap遗漏的锁状态(未正确转移锁)
  • pallets/subtensor/src/macros/hooks.rs: 在on_runtime_upgrade中依次加入两个新迁移
  • pallets/subtensor/src/tests/locks.rs: 大量新增和修改测试,覆盖LockingColdkeys插入/删除、dust阈值、hotkey swap锁定索引、迁移等
#2732 fixes pallet limit orders MERGED fix
修复 pallet-limit-orders 的两个 bug:为 try_execute_order 添加事务性保证,并在 execute_batched_orders 中添加批次内 order ID 去重检查
判级:修复了两个可能导致资金损失或状态不一致的严重 bug:非事务性执行可造成 swap 已执行但手续费未付的残留状态,重复订单可导致重复扣款/重复领取手续费,直接影响用户资金安全和链状态正确性
关键改动
  • pallets/limit-orders/src/lib.rs: 在 try_execute_order 函数上添加 #[transactional] 属性,使整个执行过程(swap、手续费转账、订单状态写入)成为原子操作,任何失败都回滚全部存储变更
  • pallets/limit-orders/src/lib.rs: 在 execute_batched_orders 中引入 BTreeSet<H256> 记录已处理的 order_id,遇到重复订单时返回新的 DuplicateOrderInBatch 错误
  • pallets/limit-orders/src/lib.rs: 新增 DuplicateOrderInBatch 错误枚举项
  • pallets/limit-orders/src/tests/extrinsics.rs: 添加两个单元测试验证重复订单在完整填充和部分填充场景下均被拒绝
  • runtime/tests/limit_orders.rs: 添加两个集成测试,分别验证重复订单批次在真实存储上完整回滚,以及手续费失败后 buy_alpha swap 原子回滚(含余额、质押、订单状态、手续费接收方余额的全面校验)
#2744 Fix issues in conviction MERGED fix
修复 conviction 锁在冷 key 交换中子网销毁时的两个清理缺陷:冷 key 交换时自动转移 DecayingLock 元数据,子网销毁时改用统一 destroy_lock_maps 函数确保所有锁存储被完全清除
判级:修复了两处与锁状态存储一致性直接相关的 bug,影响核心的 staking 锁定机制,关系资金安全与状态正确性,且测试充分覆盖低风险场景。
关键改动
  • pallets/subtensor/src/staking/lock.rs:冷 key 交换时先复制 DecayingLock 条目到新冷 key,迁移锁时使用保存的 perpetual_lock 标志进行衰减计算,最后删除旧冷 key 上的 DecayingLock 条目
  • pallets/subtensor/src/staking/remove_stake.rs:destroy_alpha_in_out_stakes 中删除手动清理 Lock/HotkeyLock 的代码,改为调用 Self::destroy_lock_maps(netuid) 一次性清理所有锁存储(individual locks、locking-coldkey indexes、hotkey aggregates、owner aggregates、decaying aggregates、DecayingLock)
  • pallets/subtensor/src/tests/locks.rs:在冷 key 交换测试中增加对 DecayingLock 从旧冷 key 消失、新冷 key 出现以及 perpetual_lock 标志保持的断言
  • pallets/subtensor/src/tests/networks.rs:新增两个测试函数验证子网销毁时 LockingColdkeys 和其他子网不受影响,以及所有锁聚合(HotkeyLock、DecayingHotkeyLock、OwnerLock、DecayingOwnerLock、DecayingLock)被正确清除且不影响其他子网;修改 dissolve_clears_all_lock_maps_for_removed_network 测试增加对 LockingColdkeys 的验证
#2747 Remove pallet-registry from runtime BREAKING MERGED runtime
从运行时中移除整个 `pallet_registry` 模块(身份注册),并添加一个运行时迁移以清理已存在的 `Balances::Holds` 中的旧注册身份押金,将释放的余额从 `reserved` 移至 `free`,同时保持总发行量不变。
判级:删除了一个完整的 pallet 及其存储,并添加了处理链上已有押金的迁移逻辑,直接影响用户余额和运行时升级安全。
关键改动
  • `pallets/registry/` 整个目录(`lib.rs`、`types.rs`、`benchmarking.rs`、`mock.rs`、`tests.rs`、`weights.rs`、`Cargo.toml`)全部删除
  • `Cargo.toml`(根)移除 `pallet-registry` 依赖
  • `runtime/Cargo.toml` 移除 `pallet-registry` 依赖、dev-dependency `sp-io` 改为主依赖、移除 `pallet-registry/std` 等
  • `runtime/src/lib.rs`:移除 `use pallet_registry::CanRegisterIdentity`、`AllowIdentityReg` 实现、`pallet_registry::Config` impl、`parameter_types!`(`MaxAdditionalFields`、`InitialDeposit`、`FieldDeposit`)、`construct_runtime!` 中注释掉 `Registry`(原 index=17)、`mod benches` 中移除 `[pallet_registry, Registry]`
  • `runtime/src/lib.rs`:`spec_version` 从 418 提升到 419
  • `runtime/src/lib.rs`:在 `type Migrations` 元组中添加 `migrations::PalletRegistryCleanupMigration`
  • `runtime/src/migrations/pallet_registry_cleanup_migration.rs`:新增 539 行迁移代码,解码旧 `Balances::Holds` 中的 `RegistryHoldReason`,释放注册押金,保留其他押金,并清理 `Registry` 存储前缀
  • `runtime/src/migrations/mod.rs`:导出新迁移模块
  • `support/linting/src/pallet_index.rs`:移除对 `Registry` 的索引引用
  • `runtime/tests/metadata.rs`:移除 `pallet_registry` 相关测试
#2752 fix pallet_subtensor_swap weight info MERGED fix
修复 pallet_subtensor_swap 的 WeightInfo 配置,将错误的 DefaultWeight 替换为生成的 SubstrateWeight
判级:虽然改动量很小,但权重信息错误可能导致区块权重计算不准确、交易费用偏差以及潜在的拒绝服务攻击向量。此修复对链的安全性和经济模型的正确运行至关重要,属于需要严格审查的高影响范畴。
关键改动
  • runtime/src/lib.rs:在 impl pallet_subtensor_swap::Config for Runtime 中,将 type WeightInfo = pallet_subtensor_swap::weights::DefaultWeight<Runtime>; 改为 type WeightInfo = pallet_subtensor_swap::weights::SubstrateWeight<Runtime>;
#2769 mainnet deploy June 24th, 2026 BREAKING MERGED feature
主网部署PR,合并了多个子PR,新增民主治理pallet并包含大量相关逻辑和测试。
判级:该PR为合并到main的主网部署,包含大量commit,新增了民主/治理pallet(scaffold democracy pallet),属于核心功能变更,已生效。
#2770 Added a possibility to configure max epochs per block. BREAKING MERGED feature
将每个区块的最大子网 epoch 数量从编译时常量改为通过 root 调用动态可配置,并新增 sudo 外部调用和存储项。
判级:此 PR 修改了 trait 关联类型(breaking change),新增核心存储和 sudo 调用,影响 epoch 调度决策逻辑,属于共识层配置可编程化改动,且已包含 spec_version 升级。
关键改动
  • pallets/subtensor/src/macros/config.rs: 将 trait 关联类型 `MaxEpochsPerBlock` 重命名为 `InitialMaxEpochsPerBlock`,类型从 `u32` 改为 `u8`,语义改为‘初始默认值’。
  • pallets/subtensor/src/lib.rs: 新增存储项 `MaxEpochsPerBlock`(StorageValue<u8>),默认值从 `InitialMaxEpochsPerBlock` 获取。
  • pallets/subtensor/src/utils/misc.rs: 新增 `get_max_epochs_per_block()` 和 `set_max_epochs_per_block()` 访问/设置方法,设置时触发 `MaxEpochsPerBlockSet` 事件。
  • pallets/subtensor/src/macros/events.rs: 新增 `MaxEpochsPerBlockSet(u8)` 事件。
  • pallets/subtensor/src/coinbase/run_coinbase.rs: 将 `epochs_deferred_this_block` 和 `block_step` 中对编译时常量 `T::MaxEpochsPerBlock::get()` 的引用改为运行时存储 `Self::get_max_epochs_per_block() as u32`。
  • pallets/admin-utils/src/lib.rs: 新增 sudo 外部调用 `sudo_set_max_epochs_per_block`(call_index 96),`ensure_root` + 值 >= 1 校验。
  • pallets/admin-utils/src/benchmarking.rs: 新增该调用的 benchmark。
  • pallets/admin-utils/src/tests/mod.rs: 新增两个测试:值范围测试和实际 deferral 行为测试。
  • runtime/src/lib.rs: spec_version 从 420 升至 421,更改关联类型绑定为 `InitialMaxEpochsPerBlock`,常量类型改为 `u8`。
  • 所有 mock 文件(chain-extensions, eco-tests, pallets/admin-utils, pallets/subtensor/tests, pallets/transaction-fee, precompiles):同步更改常量类型和 trait 关联名称。
  • pallets/admin-utils/src/weights.rs: 新增 `sudo_set_max_epochs_per_block` 权重常量(生成文件已更新)。
#2773 Convert transaction extensions to dispatch extensions MERGED feature
将 Subtensor 特有的预调度检查从 TransactionExtension 迁移到 FRAME DispatchExtension,新增五个 DispatchExtension 并接入运行时
判级:在 runtime 的 frame_system::Config::DispatchExtension 元组中新增了五项 DispatchExtension,根据校准规则此项改动必须评为 HIGH
关键改动
  • pallets/subtensor/src/guards/mod.rs: 新增并导出 check_delegate_take、check_evm_key_association、check_rate_limits、check_serving_endpoints、check_weights 五个检查组模块
  • pallets/subtensor/src/guards/check_weights.rs: 新增 CheckWeights DispatchExtension,包含权重调用的输入长度校验、最低质押检查、提交/揭示验证、无效揭示轮次检查
  • pallets/subtensor/src/guards/check_rate_limits.rs: 新增 CheckRateLimits DispatchExtension,包含权重提交/设置频率限制和网络注册频率限制
  • pallets/subtensor/src/guards/check_delegate_take.rs: 新增 CheckDelegateTake DispatchExtension,包含委托 take 上下界和 hotkey 所有者检查
  • pallets/subtensor/src/guards/check_serving_endpoints.rs: 新增 CheckServingEndpoints DispatchExtension,包含 axon、axon TLS、prometheus 服务端点校验
  • pallets/subtensor/src/guards/check_evm_key_association.rs: 新增 CheckEvmKeyAssociation DispatchExtension,包含子网 UID 存在性和 EVM 密钥关联冷却检查
  • pallets/subtensor/src/guards/check_coldkey_swap.rs: CheckColdkeySwap 重构,提取 check 公共方法,权重改为使用 WeightInfo,测试改用 dispatch_with_extension
  • pallets/subtensor/src/extensions/subtensor.rs: SubtensorTransactionExtension 大幅简化,去除重复校验逻辑,validate 方法调用 dispatch extensions 的 check;新增 Error→CustomTransactionError 转换;新增 weight 方法聚合所有 extension 权重
  • runtime/src/lib.rs: 将五个新 DispatchExtension 加入 frame_system::Config::DispatchExtension 元组
  • precompiles/src/extensions.rs: 简化预编译调度路径,移除手动调用 SubtensorTransactionExtension validate/prepare/post_dispatch 的代码
  • precompiles/src/neuron.rs: 新增测试验证预编译调度时 dispatch extension 生效
  • pallets/subtensor/src/benchmarks.rs: 为六个 dispatch extension 新增 benchmark 函数和辅助方法
  • pallets/subtensor/src/weights.rs: 新增六个 dispatch extension 的权重类型和基准值;移除 outdated 测试文件
  • pallets/subtensor/src/macros/errors.rs: 新增 InvalidRevealRound 错误类型
#2779 Switch subnet emissions to price-based shares BREAKING MERGED feature
子网排放从基于TAO流量份额切换为基于EMA价格份额,同时将Alpha注入上限从块排放最小值改为根比例乘以Alpha排放
判级:核心排放机制从TAO流量改为EMA价格,并修改Alpha注入上限公式,直接影响子网间的TAO和Alpha分配,且spec_version升级表示breaking change
关键改动
  • pallets/subtensor/src/coinbase/subnet_emissions.rs: get_shares() 从调用 get_shares_flow() 改为 get_shares_price_ema(),子网排放份额现在基于SubnetMovingPrice(EMA价格)而非TAO流量
  • pallets/subtensor/src/coinbase/run_coinbase.rs: 移除 tao_block_emission 的计算,alpha_injection_cap 从 alpha_emission_i.min(tao_block_emission) 改为 root_proportion_i * alpha_emission_i,其中 root_proportion = tao_weight / (tao_weight + alpha_issuance)
  • pallets/subtensor/src/tests/subnet_emissions.rs: 删除旧的 TAO 流量份额测试 protocol_normalization_keeps_eligible_subnet_count_from_collapsing
  • pallets/subtensor/src/tests/coinbase.rs: 删除 test_net_tao_flow_disabled_still_drains_protocol_flow_into_ema;修改多个测试用例以设置 SubnetMovingPrice 和根比例,适配新逻辑
  • pallets/subtensor/src/tests/coinbase.rs: 调整 test_coinbase_subnet_terms_with_alpha_in_gt_alpha_emission 和 test_get_subnet_terms_alpha_emissions_cap 等测试的断言,验证注入上限变为根比例乘 alpha_emission
  • runtime/src/lib.rs: spec_version 从 420 升至 421
  • pallets/subtensor/src/tests/claim_root.rs: 修改 test_claim_root_coinbase_distribution 以验证新的注入行为(增长小于两个排放)
#2788 Back propagate new subnet emission off BREAKING MERGED fix
新注册的子网默认关闭 emission(back-propagation of hotfix #2787)
判级:改动直接修改了子网 emission 的默认启用策略,属于 emission 核心逻辑变更,且为已落地的 hotfix 的回溯合并,影响所有新子网创建行为和 emission 分配流程。
关键改动
  • pallets/subtensor/src/subnets/subnet.rs: 在 do_register_network 函数最后增加 SubnetEmissionEnabled::<T>::insert(netuid_to_register, false),新子网注册时默认将 emission 置为禁用
  • pallets/subtensor/src/tests/coinbase.rs: 在 test_coinbase_tao_issuance_base 测试中,手动将新子网 emission 设置为 true,保证测试原有行为不受影响
#2790 Back propagate new subnet emission off - clean merge BREAKING MERGED feature
回传锁定的Alpha接收标志与子网emission缩放改动:添加AccountFlags和MinerBurned存储,允许冷键拒绝接收锁定Alpha,并按root_proportion和miner_burned加权子网emission
判级:改动触及锁定质押转账、冷键交换、子网emission分配等核心资金/共识逻辑,并包含spec_version升级
关键改动
  • pallets/subtensor/src/lib.rs: 新增AccountFlags存储map(u128)和常量ACCOUNT_FLAGS_ACCEPT_LOCKED_ALPHA,新增MinerBurned存储map(U96F32)跟踪每个子网tempo中被扣留的矿工emission比例
  • pallets/subtensor/src/macros/dispatches.rs: 新增extrinsic set_reject_locked_alpha(call index 142),允许冷键设置是否接收锁定Alpha(默认拒绝)
  • pallets/subtensor/src/macros/errors.rs: 新增错误AccountRejectsLockedAlpha
  • pallets/subtensor/src/macros/events.rs: 新增事件RejectLockedAlphaUpdated
  • pallets/subtensor/src/staking/lock.rs: 在do_transfer_stake中新增ensure_can_receive_locked_alpha检查阻止锁定Alpha转账到拒绝的冷键;在coldkey swap中新增检查,并在转账前提前计算rolled_locks以验证所有锁的状态
  • pallets/subtensor/src/coinbase/run_coinbase.rs: 在分配矿工激励时记录total_incentive和withheld_incentive,计算withheld_proportion并写入MinerBurned存储
  • pallets/subtensor/src/coinbase/subnet_emissions.rs: 修改get_shares:基于price shares乘以root_proportion * (1 - miner_burned)进行加权并重新归一化
  • pallets/subtensor/src/coinbase/root.rs: 子网溶解时清除MinerBurned存储
  • runtime/src/lib.rs: spec_version从421提升至422
  • pallets/subtensor/src/weights.rs: 更新transfer_stake权重增加一个AccountFlags读取
  • pallets/subtensor/src/tests/locks.rs: 新增测试确保AccountFlags默认为0、set_reject_locked_alpha付费、锁定Alpha转账被拒绝、未锁定转账通过、coldkey swap被拒绝、溶解清除MinerBurned等
  • pallets/subtensor/src/tests/networks.rs: 在溶解测试中添加MinerBurned验证
  • pallets/subtensor/src/tests/subnet_emissions.rs: 引入AlphaBalance类型使用
#2791 Girazoki fix pallet limit orders bugs MERGED fix
修复 pallet-limit-orders 中两个资金安全漏洞:零份额批次分发静默偷钱 + 部分成交后全量补单重复扣款
判级:修复的是直接导致资金丢失(signer 付全款收零回报)且订单永久关闭的安全漏洞,触及资产转移和守恒约束核心逻辑。虽未改动共识/emission,但资金安全相关变动属于高风险必须严格审查类别。
关键改动
  • pallets/limit-orders/src/lib.rs: 新增 Error 枚举变体 ZeroShareInBatch
  • pallets/limit-orders/src/lib.rs: distribute_alpha_pro_rata 中将 `if share > 0` 静默跳过替换为 `ensure!(share > 0, ZeroShareInBatch)` 硬失败回滚整批
  • pallets/limit-orders/src/lib.rs: distribute_tao_pro_rata 中对 `net_share` 增加 `ensure!(net_share > 0, ZeroShareInBatch)` 硬失败保护
  • pallets/limit-orders/src/lib.rs: 在订单验证逻辑中对 `partial_fill == None` 且 `order_status == PartiallyFilled(n)` 的情况增加 `ensure!` 拒绝,返回 IncorrectPartialFillAmount
  • pallets/limit-orders/src/tests/extrinsics.rs: 新增4个测试用例:零份额买方硬失败回归、零份额卖方硬失败回归、全非零份额正常成功、partial_fill=None+PartiallyFilled订单被跳过
MEDIUM 更新 (12)
#2198 Governance MERGED feature
新增多集体治理pallet,作为Subtensor治理栈的第一部分,尚未接入运行时。
判级:引入新的治理pallet(multi-collective)到代码库但明确未接入运行时,属于治理栈的基础设施部分,尚未生效。
#2620 Governance refactoring (V1 -> V2) BREAKING MERGED feature
将治理系统从单体的 pallet-governance(V1)迁移到模块化 V2 栈:pallet-multi-collective、pallet-referenda、pallet-signed-voting 和可选的匿名投票
判级:不涉及 emission 核心逻辑、stake 锁定、共识机制或资金直接操作;未带来 DispatchExtension 变更;无存储迁移;但 runtime 中替换关键治理模块属于高影响改动但不符合 HIGH 的精确条件
关键改动
  • runtime/src/lib.rs: 新增 pub mod governance; 移除旧的 pallet_governance Config 实现和依赖;替换 construct_runtime! 中的 Governance 为 MultiCollective(31)、SignedVoting(32)、Referenda(33)
  • pallets/multi-collective/src/lib.rs: 大量扩展——添加 integrity_test、force_rotate 调用、CanRotate trait、OnMembersChanged/OnNewTerm 的元组实现,完善存储访问和事件
  • pallets/referenda/src/lib.rs: 完全重写——实现两种策略(PassOrFail 和 Adjustable),完整的状态机(Ongoing→Approved/Rejected/Expired/FastTracked/Cancelled/Delegated/Enacted/Killed),集成 PollHooks、alarm/task 调度
  • pallets/referenda/src/types.rs: 新增类型定义:Proposal、DecisionStrategy、ApprovalAction、TracksInfo trait 等,并提供 integrity_test 保证轨道配置合法
  • pallets/signed-voting/src/lib.rs: 新增 remove_votes_for 方法(支持集体轮换时清除投票),调整 tally 计算逻辑,添加 VoteInvalidated 事件
  • runtime/src/governance/mod.rs: 新增模块声明 collective_management 和 tracks
  • runtime/src/governance/collective_management.rs: 实现 OnNewTerm 具体逻辑——根据链上 stake 和 subnet 价格自动轮换 Economic/Building 集体成员
  • runtime/src/governance/tracks.rs: 定义两条轨道:track 0(triumvirate,PassOrFail,2/3 批准后转 review)和 track 1(review,Adjustable,Economic+Building 投票)
  • common/src/lib.rs: VoteTally 增加 Copy、Default 实现(默认全体弃权)
  • common/src/traits.rs: SetLike 增加 is_empty 默认方法;PollHooks 增加元组实现
  • ts-tests/suites/dev/subtensor/governance-v2/: 新增端到端测试(test-full-flow、test-guards、test-track0-approval)
  • pallets/anonymous-voting/src/lib.rs: 简化,保持 stubbed 状态
  • primitives/crypto: 添加依赖用于 freeze_struct
  • Cargo.toml / Cargo.lock: 更新依赖条目
#2626 Referenda benchmarks BREAKING MERGED feature
为 pallet-referenda 和 pallet-multi-collective 添加真实基准权重,拆分跨 pallet 钩子 trait 使其携带权重量级约束,并修复成员管理逻辑中的低效/正确性问题
判级:此 PR 未触及 TAO/Alpha 转账、质押、emission/共识等核心资金逻辑,也未新增 DispatchExtension 或直接操作锁定质押的 extrinsic。但 trait 签名变更(breaking)、从 dev_mode 零权重切换到真实基准权重、成员管理逻辑重构(有序存储 + diff 计算)以及运行时配置参数的调整均有中等风险,故评为 MEDIUM
关键改动
  • common/src/traits.rs: 将 PollHooks 拆分为 OnPollCreated + OnPollCompleted,各增加 weight() 方法;为 Polls trait 增加 on_tally_updated_weight();新增 OnMembersChanged trait(从 multi-collective 移入)并增加 weight() 方法
  • pallets/referenda/src/lib.rs: 移除 dev_mode;新增 WeightInfo trait + BenchmarkHelper;submit/kill/advance_referendum 挂载真实 weight 注解(含钩子权重累加);conclude 和 kill 改为报告调度器错误而非静默忽略;on_tally_updated 中增加重试位置守卫(reaper guard)防止调度器延期导致的异常状态
  • pallets/referenda/src/benchmarking.rs: 新增 submit/kill/advance_referendum/on_tally_updated 四个基准测试,advance_referendum 以最坏分支(approve-with-Review)覆盖双钩子场景
  • pallets/referenda/src/weights.rs: 自动生成的权重文件,包含 ref time 和 proof size
  • pallets/multi-collective/src/lib.rs: 移除 dev_mode;成员存储保证有序(binary_search/try_insert/remove 替代 contains/retain/position);set_members 改用 compute_members_diff_sorted 计算 diff;OnNewTerm 增加 weight();force_rotate 改为 DispatchResult(权重预扣);check_integrity() 提取为公开方法;OnMembersChanged 移入 common
  • pallets/multi-collective/src/benchmarking.rs: 新增 add_member/remove_member/swap_member/set_members/force_rotate 五个基准测试,fill_members 绕过 add_member 直接写存储以加速设置
  • pallets/signed-voting/src/lib.rs: 适配拆分后的 OnPollCreated/OnPollCompleted 双 trait,两钩子 weight() 均返回 Weight::zero()
  • runtime/src/governance/collective_management.rs: CollectiveManagement 实现 OnNewTerm::weight(),基于 5000 次排名迭代 × 8 reads 给出保守上限
  • runtime/src/lib.rs: 运行时集成:SetMembersOrigin→SetOrigin;PollHooks→OnPollCreated+OnPollCompleted;增加 WeightInfo 和 BenchmarkHelper 配置;GovernanceVoteCleanup 实现 weight()(outgoing_max × polls_max 最坏 bound);GovernanceMemberSet::Union len() 改为去重计数;各集体 min_members 上调(Proposers: 0→1, Triumvirate: 0→3, Economic: 0→1, Building: 0→1);MaxScheduledPerBlock: 50→70;referenda 加入 benchmark 列表
#2627 Governance update 1 BREAKING MERGED runtime
清理废弃的 governance pallet,重命名 multi-collective pallet 中的成员管理接口,调整治理参数(初始延迟、快速通道阈值、集合名称)
判级:删除未使用的 governance pallet 和重命名 multi-collective 接口属于代码清理和命名优化,未改动资金/共识/emission 核心逻辑,也未新增 DispatchExtension 或锁定质押相关 extrinsic,按校准规则上限为 MEDIUM
关键改动
  • 删除 pallets/governance 整个目录(lib.rs、benchmarking、mock、tests、weights、Cargo.toml),并从 workspace Cargo.toml 的 exclude 列表移除
  • 文档 docs/governance/README.md 和 DESIGN.md 被移入(?),但代码中路径不存在,可能为移动操作未显示
  • pallets/multi-collective: 重命名关联类型 ResetOrigin→SetMembersOrigin,extrinsic reset_members→set_members,事件 MembersReset→MembersSet,更新所有引用及注释
  • runtime/src/governance/tracks.rs: Track 1 fast_track_threshold 从 67% 改为 75%
  • runtime/src/lib.rs: GovernanceCollectiveInitialDelay 从 300 块(~1h)改为 7200 块(~24h),Proposers 集合名称从 'proposers' 改为 'otf'
  • pallets/referenda、signed-voting、multi-collective 的 Cargo.toml 添加 runtime-benchmarks 和 try-runtime 特性依赖
  • primitives/crypto/Cargo.toml 在 std 特性中添加 zeroize?/std
  • runtime/Cargo.toml 添加上述 pallet 的 benchmark/try-runtime 特性
  • 测试 mock 和测试用例全部同步更新命名
#2712 Remove the per-block staking operation rate limiter MERGED feature
移除每区块每(hotkey,coldkey,netuid)的质押操作速率限制器StakingOperationRateLimiter
判级:虽然不涉及资金安全或共识变更,但改动了质押操作的核心逻辑流,影响所有用户的使用行为,且涉及pallet-subtensor大量文件的系统化修改,需要谨慎审查测试覆盖和边缘情况
关键改动
  • pallets/subtensor/src/lib.rs: 移除StakingOperationRateLimiter存储映射定义
  • pallets/subtensor/src/macros/errors.rs: 移除StakingOperationRateLimitExceeded错误枚举
  • pallets/subtensor/src/macros/hooks.rs: 移除on_finalize中每区块清空限速器的逻辑
  • pallets/subtensor/src/staking/stake_utils.rs: 移除set_stake_operation_limit和ensure_stake_operation_limit_not_exceeded函数,移除所有调用点
  • pallets/subtensor/src/staking/add_stake.rs: 移除调用stake_into_subnet时的set_limit=true参数
  • pallets/subtensor/src/staking/remove_stake.rs: 移除调用stake_into_subnet时的set_limit参数
  • pallets/subtensor/src/staking/move_stake.rs: 移除do_move_stake的set_limit参数及所有调用点
  • pallets/subtensor/src/coinbase/root.rs: 移除子网删除时清理StakingOperationRateLimiter的逻辑
  • pallets/subtensor/src/benchmarks.rs: 移除基准测试中人工重置限速器的代码
  • pallets/subtensor/src/tests/staking.rs: 移除test_stake_rate_limits测试用例,移除所有remove_stake_rate_limit_for_tests调用
  • pallets/subtensor/src/tests/move_stake.rs: 重命名test_transfer_stake_rate_limited为test_transfer_stake_same_netuid_not_rate_limited,移除限速器检查逻辑
  • pallets/subtensor/src/tests/mock.rs, chain-extensions/src/mock.rs, eco-tests/src/helpers.rs, pallets/transaction-fee/src/tests/mock.rs: 移除remove_stake_rate_limit_for_tests辅助函数
  • precompiles/src/staking.rs: 移除预编译测试中手动删除限速器的代码
  • ts-tests/suites/dev/subtensor/staking/test-transfer-stake-rate-limit.ts: 新增TypeScript集成测试,验证同区块多操作成功
  • runtime/src/lib.rs: spec_version从415提升至416
  • pallets/subtensor/src/weights.rs: 自动生成的权重文件更新
#2713 pallet-signed-voting extracted from governance umbrella PR MERGED feature
新增 pallet-signed-voting 治理投票后端及共享 trait/类型
判级:新增独立 pallet 但未接入运行时,不触碰资金/共识/emission,且从治理大 PR 提取,属于基础设施层扩展,重要性适中。
关键改动
  • common/src/traits.rs: 新增 SetLike、Polls、OnPollCreated、OnPollCompleted 四个 trait,定义投票生产者与后端之间的协调接口。
  • common/src/lib.rs: 新增 VoteTally 结构体(approval/rejection/abstention 的 Perbill 百分比),用于向生产者报告实时计票比例。
  • pallets/signed-voting/ 新目录:包含 pallet 主体(lib.rs)、基准测试(benchmarking.rs)、模拟测试支持(mock.rs)、单元测试(tests.rs)、权重定义(weights.rs,生成文件)和 README。
  • pallets/signed-voting/src/lib.rs: 实现 signed-voting pallet,提供 vote 和 remove_vote 外部调用,冻结选民快照,按投票方案管理计票,惰性清理投票记录(on_idle 分批处理)。
  • pallets/signed-voting/src/tests.rs: 1075 行全面测试,覆盖投票、撤票、生命周期钩子、清理、计票转换及配置完整性。
  • pallets/signed-voting/src/benchmarking.rs: 定义了 vote、remove_vote、on_poll_created、on_poll_completed、idle_cleanup_chunk 五个基准用例。
  • common/Cargo.toml: 添加 Perbill 依赖(来自 sp_runtime)。
#2722 [Re-merge] Fix for arithmetic side effect MERGED fix
修复限价订单pallet中算术溢出问题,将未检测的固定点溢出转换为可传播的错误
判级:修复了算术溢出可能导致的静默错误,属于bug修复和安全增强,但未更改共识逻辑、存储结构或资金操作,影响范围限于限价订单模块
关键改动
  • pallets/limit-orders/src/lib.rs:新增ArithmeticOverflow错误变体,将tao_to_alpha从u128返回改为Result<u128, DispatchError>并移除clippy抑制注释,所有调用点增加?传播错误
  • pallets/limit-orders/src/lib.rs:将net_amount_for_event的返回值从u64改为Result<u64, DispatchError>,调用tao_to_alpha处传播错误
  • pallets/limit-orders/src/lib.rs:alpha_to_tao改用U96F32::saturating_from_num替代U96F32::from_num,避免from_num可能引发的溢出恐慌
  • pallets/limit-orders/src/tests/auxiliary.rs:现有3个测试用例增加.expect调用以适配Result返回类型
  • pallets/limit-orders/src/tests/auxiliary.rs:新增net_amount_for_event_sell_overflow_returns_error测试用例,验证极小价格下u128::MAX触发ArithmeticOverflow错误
#2742 Add `StakeInfoRuntimeApi.get_stake_availability_for_coldkeys` runtime API MERGED feature
为 StakeInfoRuntimeApi 新增 get_stake_availability_for_coldkeys 运行时 API,允许批量查询冷密钥在各子网上的总质押、锁定质量和可解锁数量,并重构 available_to_unstake 为公共辅助函数 stake_availability。
判级:功能性增强,提升查询效率,但不涉及共识、资金安全或存储变更,重要性中等。
关键改动
  • pallets/subtensor/runtime-api/src/lib.rs: 在 StakeInfoRuntimeApi trait 中声明新的 API 方法 get_stake_availability_for_coldkeys,返回 BTreeMap<AccountId32, BTreeMap<NetUid, StakeAvailability>>,并导入 BTreeMap。
  • pallets/subtensor/src/rpc_info/stake_info.rs: 新增 StakeAvailability 结构体(带 freeze_struct 注解)、get_stake_availability_for_coldkeys 实现方法,处理空冷密钥、空 netuid、无效 netuid、去重、过滤零数据行等边界情况。
  • pallets/subtensor/src/staking/lock.rs: 将 available_to_unstake 重构为返回 (total, locked, available) 三元组的 pub(crate) stake_availability 辅助函数,并让 available_to_unstake 调用它。
  • runtime/src/lib.rs: 在 impl_runtime_apis! 中添加 get_stake_availability_for_coldkeys 的实现,导入 BTreeMap 和 StakeAvailability 类型;spec_version 从 417 升级到 418。
  • pallets/subtensor/src/tests/locks.rs: 新增约 300 行测试覆盖:空输入、过滤零数据、部分锁定、完全锁定、多子网、指定 netuid 过滤、去重、不存在的 netuid、超长 netuid 列表、滚动锁状态等场景。
#2751 Improve Efficiency of Timelocked Commitments MERGED feature
优化 pallet-commitments 中定时锁承诺的自动揭示 hook,减少无效存储写入并清理过期的索引条目
判级:虽然这是一个运行时层面、影响区块执行的内部优化,但改动范围小(仅一个函数 +29/-4 行),不涉及共识更改、存储迁移或资金安全,属于性能提升而非功能变更
关键改动
  • pallets/commitments/src/lib.rs: 在循环字段前引入 saw_timelock 和 processed_timelock 布尔标记,分别记录是否存在定时锁字段以及是否有至少一个字段实际因脉冲可用而进入揭示处理
  • pallets/commitments/src/lib.rs: 当 saw_timelock 为 false 时(即承诺不再含任何定时锁字段),调用 TimelockedIndex::mutate 移除该 (netuid, who) 条目,并继续下一轮处理
  • pallets/commitments/src/lib.rs: 当 processed_timelock 为 false(所有定时锁字段均因 drand 脉冲不可用而未处理)时,直接跳过 CommitmentOf 重写与 RevealedCommitments 更新,避免每块一次的无用写操作
  • pallets/commitments/src/lib.rs: 将 BoundedVec::try_from(remain_fields) 提取为提前声明的 remaining_fields 变量,并用 if let Ok(remaining_fields) 替代原有的 map_err(?) 模式,使跳过早重写路径时不会因 ? 提前 return 而打乱流程
  • pallets/commitments/src/lib.rs: 移除几处多余的空行(代码规范微调)
#2757 record db cost for precompile view functions MERGED feature
在预编译视图函数中记录数据库读取/写入的Gas成本,统一通过新辅助方法替代手动计算。
判级:此改动仅影响预编译视图函数的Gas计量精度,不涉及核心共识、资金安全或存储迁移,且所有改动仅限于视图函数(view),不会修改链状态。
关键改动
  • precompiles/src/extensions.rs:新增 record_db_reads 和 record_db_writes 两个辅助方法,封装数据库读写成本计算。
  • precompiles/src/alpha.rs:在 get_alpha_price、get_moving_alpha_price 等19个视图函数中调用 record_db_reads 记录具体次数的DB读取成本。
  • precompiles/src/crowdloan.rs:get_crowdloan 和 get_contribution 函数增加 DB 读取成本记录。
  • precompiles/src/leasing.rs:get_lease、get_contributor_share、get_lease_id_for_subnet 函数增加 DB 读取成本记录。
  • precompiles/src/metagraph.rs:MetagraphPrecompile 增加 pallet_evm::Config 泛型约束,所有视图函数新增 record_db_reads 调用记录读取次数。
  • precompiles/src/proxy.rs:get_proxies 函数增加 record_db_reads 调用。
  • precompiles/src/staking.rs:替换原有手动计算 db_read_gas_cost / db_write_gas_cost 的方式,改用 record_db_reads / record_db_writes 并统一记录次数;视图函数也增加记录。
  • precompiles/src/subnet.rs:原有 subnet.rs 中已手动记录成本的函数改用新方法,其余视图函数统一增加 record_db_reads 调用。
  • precompiles/src/uid_lookup.rs:uid_lookup 函数增加基于 limit 参数的动态 DB 读取次数记录。
  • precompiles/src/voting_power.rs:增加 pallet_evm::Config 泛型约束;所有视图函数添加 record_db_reads 记录,get_total_voting_power 在迭代中逐条记录每条读取。
  • precompiles/src/lib.rs:调整 import 顺序以适配变更。
  • runtime/src/lib.rs:spec_version 从 418 增至 419(常规版本号更新)。
#2761 Adds `min_childkey_take` to hyperparams v3 MERGED feature
在 Hyperparams V3 运行时调用中添加 `min_childkey_take` 超参数的输出
判级:属于新功能添加,影响运行时 RPC 输出,但未动核心 pallet 逻辑或资金/共识,因此定为 medium 而非 high 或 low
关键改动
  • pallets/subtensor/src/rpc_info/subnet_info.rs:在 get_subnet_hyperparams_v3 函数末尾新增一个 HyperparamEntry,name 为 "min_childkey_take",value 为 HyperparamValue::U16(Self::get_effective_min_childkey_take(netuid).into())
  • pallets/subtensor/src/tests/subnet_info.rs:在 EXPECTED_V3_NAMES 常量中添加 b"min_childkey_take" 以确保 V3 输出名称集合正确
  • pallets/subtensor/src/tests/subnet_info.rs:在 test_get_subnet_hyperparams_v3_values_reflect_storage 测试中调用 set_min_childkey_take(31) 和 set_min_childkey_take_for_subnet(netuid, 32),并断言输出的有效值为 Compact(32)(即全局 31 与子网 32 的最大值)
#2796 Postpone gov preparation MERGED other
移除治理准备代码以便后续统一合并,属于有计划的回退操作。
判级:该PR虽仅删除两行代码(回退gov准备代码),且已合并至devnet-ready分支,但涉及的是治理模块(pallet-signed-voting和pallet-multi-collective)的重新整合计划,属于有意图的功能回退和重新聚合,非纯粹文档/测试变更。
LOW (13)
#2479 Remove CreateSignedTransaction deadcode MERGED chore
清理pallet-drand中未使用的CreateSignedTransaction代码,将CreateInherent替换为CreateBare。
判级:移除未使用的死代码并替换弃用API,不涉及资金、共识、存储或运行时行为变更,属于清理维护。
#2624 Added eco-tests for indexer + CI job to notify the indexer team MERGED chore
为indexer添加生态测试及CI通知工作流
判级:仅添加了针对indexer的测试和CI通知工作流,未修改任何链上逻辑、资金或共识代码
#2628 Added dev test for the setCode tx MERGED test
为主网 setCode 操作新增 dev moonwall 测试用例
判级:纯测试新增,添加 setCode 操作的 dev moonwall 测试,无链上状态变更或 runtime 逻辑改动,base branch 为 governance 非 main
#2674 Add getNetworkRegistrationBlock view to SubnetPrecompile MERGED feature
在SubnetPrecompile中添加getNetworkRegistrationBlock视图函数,用于查询子网注册区块,并补充ABI与测试。
判级:新增只读视图函数 getNetworkRegistrationBlock,允许合约查询子网注册区块号,不改链上状态,属于非破坏性新功能。
#2716 migrate contract e2e MERGED chore
将合约端到端测试迁移到新测试框架,重构测试文件并添加ink相关工具。
判级:纯测试框架迁移,修改87个测试文件,不涉及任何链上逻辑、共识、资金或运行时变更
#2720 Adapt rate limits after disabling in-block staking rate limit MERGED chore
移除质押操作速率限制相关的检查和状态更新调用
判级:仅为已禁用功能的后续代码清理,不改变任何实际行为,不涉及资金、共识或存储变更
关键改动
  • pallets/subtensor/src/staking/order_swap.rs: 移除了 `stake_into_subnet` 调用末尾的 `false` 参数(从6参变为5参),适配上游函数签名的变更
  • pallets/subtensor/src/staking/order_swap.rs: 删除了在质押成功后 `if validate { set_stake_operation_limit(...) }` 的速率限制状态更新
  • pallets/subtensor/src/staking/order_swap.rs: 删除了在解质押路径中的 `ensure_stake_operation_limit_not_exceeded(...)` 速率限制检查
  • pallets/subtensor/src/staking/order_swap.rs: 删除了在接收质押方一侧的 `set_stake_operation_limit(...)` 速率限制跟踪调用
#2725 fix failed eco test MERGED fix
修复失败的生态测试并移除未用参数,改动微小
判级:修复失败的eco测试并移除未使用的参数SwapMaxPositions,无核心逻辑或链上状态变更,且已合并
#2749 Fix & Add Benchmarks MERGED chore
为pallet-subtensor的associate_evm_key添加基准测试,不影响链上状态
判级:仅添加`associate_evm_key`的运行时基准测试,无生产逻辑、存储、迁移或经济行为变更,属于纯辅助性改动
#2756 fix timeout in ts e2e dev test MERGED chore
修复ts e2e dev测试的超时参数和工作区配置
判级:修复测试超时和依赖安装配置,仅影响dev测试环境,不涉及链上状态、资金或共识
#2762 fix eco test with two deprecated variables MERGED fix
从生态测试中移除两个已弃用的存储引用,修复测试。
判级:仅修复生态测试中已弃用的存储变量引用,无运行时、核心逻辑或资金改动,已合并但仅影响测试文件,且变更行数为0。
#2768 feat(chain-extensions): add read-only WASM queries for subnet registration, coldkey lock, and stake availability MERGED feature
为 ink! 合约添加三个只读链扩展查询接口:子网注册状态、冷锁信息和质押可用性。
判级:新增三个只读 WASM 链扩展函数,仅提供合约查询能力,不修改任何链上存储或共识逻辑,且 base branch 为 devnet-ready,未影响主网。
#2776 Fixed dev tests MERGED chore
修复因基础镜像缺失 lsof 导致的 dev 测试失败。
判级:纯修复测试环境工具的 PR,仅安装 lsof 依赖,不影响链上状态、共识或资金逻辑。
#2783 Fix contract tests balance checks + benchmarks MERGED chore
修复crowdloan预编译测试的余额检查容差,提升精度以适配先前交易扩展变更后的费用
判级:纯测试文件改动,仅调整余额检查容差,不改变任何运行时逻辑、存储或共识,无生产影响