总 PR
50
HIGH
13
MEDIUM
9
Stage2
22
Model: none Back

交叉验证

两边确认50
仅分析映射0
仅 Release Notes1
仅 Release Notes:#2681
HIGH 重要更新 (13)
#2569 extend subtensor extension MERGED feature
为所有 Pays::no 的 extrinsic 添加交易扩展层的预验证逻辑,防止恶意滥用免手续费调用
判级:此 PR 为免手续费 extrinsic 添加了关键的安全预验证层,防止滥用导致资源耗尽或逻辑绕过,是网络安全的重要加固。但未修改共识或运行时存储,故非最高危。
关键改动
  • pallets/subtensor/src/extensions/subtensor.rs: 扩展 SubtensorTransactionExtension::validate 方法,新增对 batch_commit_weights、reveal_mechanism_weights、set_mechanism_weights、batch_set_weights、commit_timelocked_mechanism_weights、commit_crv3_mechanism_weights、increase_take、decrease_take、serve_axon_tls、serve_prometheus 等 10 个调用的预检查
  • common/src/transaction_error.rs: 新增三个错误变体 NonAssociatedColdKey、DelegateTakeTooLow、DelegateTakeTooHigh,用于扩展层返回更具体的错误码
  • pallets/subtensor/src/subnets/serving.rs: 从 do_serve_prometheus 中提取 validate_serve_prometheus 公共函数,使交易扩展可在不写存储的情况下复用相同的验证逻辑
  • pallets/subtensor/src/tests/transaction_extension_pays_no.rs: 新增 687 行测试覆盖各种边界情况(stake 不足、输入长度不匹配、commit 未找到、reveal round 无效、非关联冷密钥等)
  • pallets/subtensor/src/tests/mod.rs: 添加新测试模块声明
  • pallets/subtensor/src/tests/weights.rs: 对权重测试做了小幅调整(gnereated 文件)
#2643 mainnet deploy 5/27/2026 BREAKING MERGED other
合并457个commit的主网部署,包含安全优化、子网账户ID等重大变更
判级:主网部署 PR,合并了大量涉及资金安全(imbalance消除、subnet账户ID)、共识及运行时变更的commit,已合并生效
#2650 Implement OnTransactionPayment for EVM pallet MERGED fix
为 EVM pallet 实现 OnChargeTransaction 处理程序,修复 EVM 费用绕过交易费 pallet 导致总发行量漂移的 bug
判级:该 PR 修复了 EVM 费用处理绕过核心交易费 pallet 导致总发行量漂移的关键资金 bug,直接影响链上代币发行的正确性,属于高影响改动
关键改动
  • pallets/transaction-fee/src/lib.rs: 新增 `SubtensorEvmFeeHandler` 结构体及 `OnChargeEVMTransaction` trait 实现,包含 `withdraw_fee`、`correct_and_deposit_fee`、`pay_priority_fee` 方法;添加 `pallet-evm`、`sp-core` 导入
  • pallets/transaction-fee/Cargo.toml: 添加 `pallet-evm` 和 `sp-core` 依赖
  • runtime/src/lib.rs: 将 `pallet_evm::Config::OnChargeTransaction` 从 `()` 改为 `SubtensorEvmFeeHandler<Balances, TransactionFeeHandler<Runtime>>`;版本号从 406 升到 407
  • pallets/subtensor/src/subnets/subnet.rs: 在子网注册时计算 `tao_recycled_for_registration`(锁定量超出实际池 TAO 的部分),存储到新存储项 `RAORecycledForRegistration`,并调用 `recycle_tao` 将多余 TAO 回收
  • runtime/tests/evm_transaction_fee.rs: 新增测试,验证 EVM 费用扣除、退款、小费发放过程中 `Balances::total_issuance` 与 `pallet_subtensor::get_total_issuance` 保持一致
#2653 Clear Vali Trust/Permit in `clear_neuron` BREAKING MERGED feature
在 clear_neuron 函数中新增对 ValidatorTrust 和 ValidatorPermit 存储项的清零逻辑,确保神经元注销时验证者信任和许可也被重置。
判级:该修复直接消除神经元状态残留安全隐患,避免新神经元不当继承验证者权限,影响共识公平性,且修改位于核心 pallet-subtensor 的关键函数中。
关键改动
  • pallets/subtensor/src/subnets/uids.rs: 在 clear_neuron 函数末尾添加 ValidatorTrust::<T>::mutate(...) 置0 和 ValidatorPermit::<T>::mutate(...) 置 false 两行代码。
  • pallets/subtensor/src/tests/uids.rs: 新增 test_replace_neuron_clears_validator_trust_and_permit 测试用例,验证替换神经元后 ValidatorTrust 和 ValidatorPermit 被正确清零。
  • runtime/src/lib.rs: 小幅更新 spec_version 从 406 到 407(runtime 版本号递增)。
  • pallets/*/weights.rs: weights 文件的自动生成调整(无需人工审查)。
#2656 Temporarily disable stake locking BREAKING MERGED feature
暂时禁用质押锁定(stake locking)功能,并调整子网注册时的TAO回收逻辑,以便重新设计 conviction 机制。
判级:该 PR 暂时禁用了核心质押锁定功能,直接影响所有用户的行为和链上 extrinsic 有效性,属于临时 but 重要变更。
关键改动
  • pallets/subtensor/src/staking/lock.rs:禁用 do_lock_stake 和 do_move_lock 函数体,替换为“// Temporarily disabled”和立即返回 Ok(());原有逻辑被注释掉,参数名前加下划线避免编译警告。
  • pallets/subtensor/src/tests/locks.rs:为 45 个与锁定相关的测试添加 #[ignore] 标记,使其被跳过执行。
  • pallets/subtensor/src/subnets/subnet.rs:在 do_register_network 中新增 RAORecycledForRegistration 存储记录实际锁定 TAO 与池中 TAO 的差值,并调用 recycle_tao 将多余 TAO 回收。
  • pallets/subtensor/src/benchmarks.rs:在 move_lock 基准测试中注释掉一条断言,因为它依赖被禁用的 do_move_lock 功能。
  • runtime/src/lib.rs:将 spec_version 从 406 提升至 407,表示 runtime 版本升级。
#2658 Conviction v2 BREAKING MERGED feature
对抵押锁定机制(Conviction v2)进行重大重构:移除unlocked_mass概念,引入指数衰减的locked_mass和永续/衰减双模式锁定,新增子网所有权基于conviction的自动变更逻辑。
判级:该PR完全重写了Bittensor的核心经济激励机制——锁定/conviction子系统,涉及存储结构、共识计算、调度接口、默认参数等根本性变更,直接影响所有用户的锁定资金和子网治理机制,且缺少存储迁移实现是本PR最大的安全隐患。
关键改动
  • staking/lock.rs: 完全重写LockState结构体,移除unlocked_mass字段,locked_mass现在以UnlockRate速率指数衰减;修改roll_forward_lock接口新增owner_lock/perpetual_lock参数;新增calculate_decayed_mass_and_conviction函数使用复杂的closed-form指数衰减公式;新增do_set_perpetual_lock、destroy_lock_maps、change_subnet_owner_if_needed、add_aggregate_lock等大量函数;重写subnet_king、hotkey_conviction函数支持三种聚合锁来源
  • lib.rs: 移除原有的LockState结构体定义(移到lock.rs);新增DecayingHotkeyLock、OwnerLock、DecayingLock三个存储类型;修改UnlockRate默认值从30天变为~365.25天(90%衰减)、MaturityRate从90天变为216000块;新增DefaultAccount类型
  • macros/events.rs: 新增SubnetOwnerChanged和PerpetualLockUpdated两个事件
  • macros/dispatches.rs: 移除unlock_stake调度接口(index 137);add_lock_into调度index调整为137;新增set_perpetual_lock调度接口(index 138)
  • staking/stake_utils.rs & recycle_alpha.rs: 将ensure_available_stake重命名为ensure_available_to_unstake,逻辑改为只检查locked_mass(不再减unlocked_mass)
  • swap/swap_coldkey.rs: swap_coldkey_locks改为返回DispatchResult,调用ensure_no_active_locks检查新冷密钥无锁定,新增reduce_aggregate_lock/add_aggregate_lock调用同步更新聚合锁;swap_hotkey_locks新增处理DecayingHotkeyLock的迁移
  • coinbase/root.rs: remove_network中新增destroy_lock_maps调用以清算锁定map
  • coinbase/run_coinbase.rs: 注释掉change_subnet_owner_if_needed调用,代码存在但当前不激活
  • subnets/subnet.rs: 新增RAORecycledForRegistration存储和TAO回收逻辑
  • tests/locks.rs: 大规模重写测试(+1170/-510行),新增子网所有者锁定测试、永续锁定切换测试、混合锁定汇聚测试、三个绘图测试等;移除旧unlock_stake相关测试
  • benchmarks.rs: 移除unlock_stake基准测试;LockState初始化移除unlocked_mass字段
#2670 Add migration to fix TI after evm fees divergence MERGED fix
添加一次性运行时迁移,修复 EVM 手续费问题导致的 Subtensor pallet TotalIssuance 与 balances pallet 不一致的问题,并修改子网注册逻辑以防止未来再次出现类似的发行量偏差
判级:TotalIssuance 是 Bittensor 经济模型的核心存储值,直接影响 emission 发放、质押计算和整体网络状态。EVM 手续费导致的偏差若不修复将使测试网经济逻辑持续错误,该 PR 既修复现有问题又防止复发
关键改动
  • 新增迁移文件 `migrate_fix_total_issuance_evm_fees.rs`:一次性读取 balances pallet 的 total_issuance,覆盖写入 Subtensor pallet 的 TotalIssuance 存储,并通过 HasMigrationRun 确保只执行一次
  • `macros/hooks.rs`:在 on_runtime_upgrade 钩子末尾追加该迁移,使其在每次运行时升级时被调用
  • `migrations/mod.rs`:注册新迁移模块
  • `subnets/subnet.rs`:在子网注册 (init_new_network) 中新增逻辑——计算实际锁定 TAO 与池中 TAO 的差额 (tao_recycled_for_registration),写入 RAORecycledForRegistration 存储,并调用 recycle_tao 将多余 TAO 回收,防止因未回收 TAO 导致 TotalIssuance 再次偏离
  • `tests/migration.rs`:新增 test_migrate_fix_total_issuance_evm_fees 测试用例,验证迁移正确修正 TotalIssuance 且不会重复执行
#2671 Handle tao transfer errors in root claim MERGED fix
在 root claim(根声明)过程中添加事务性错误处理和回滚机制,确保 TAO 转账失败时整个操作安全回滚,不遗留不一致链上状态。
判级:修复可能导致资金丢失或状态不一致的关键安全问题,直接涉及核心代币操作(TAO 转账与 staking),且添加了原子性保证。
关键改动
  • claim_root.rs:将 root_claim_on_subnet 返回类型改为 DispatchResult,swap 分支使用 with_transaction 包裹,当 swap 失败、获取根子网账户失败或 transfer_tao_from_subnet 失败时回滚事务;同时 root_claim_all 和 do_root_claim 改为返回 Result,do_root_claim 外层加 with_transaction,并提取 try_do_root_claim 内部函数。
  • dispatches.rs:在 claim_root 调度函数末尾添加 ? 以传播 do_root_claim 的错误。
  • claim_root.rs(测试):新增 test_claim_root_swap_failure_does_not_consume_claim 测试,模拟 swap 期间子网账户余额为 0 导致转账失败,验证所有关键状态(RootClaimed、stake、SubnetTAO、TotalStake 等)均保持不变。
#2672 Handle swap errors when taking fees in alpha MERGED fix
修复 withdraw_in_alpha 函数在 Alpha 代币 swap 失败时未正确处理错误的问题,使用事务回滚确保状态一致性并返回交易无效错误
判级:修复了当 Alpha swap 失败时可能导致用户 stake 被错误扣除且交易仍成功完成的严重 bug,直接影响资金安全和状态一致性,尽管是非 breaking 修复但仍属高风险逻辑问题
关键改动
  • pallets/transaction-fee/src/lib.rs:withdraw_in_alpha 函数返回类型从 (AlphaBalance, TaoBalance, NetUid) 改为 Result<(AlphaBalance, TaoBalance, NetUid), TransactionValidityError>;所有返回路径调整为 Ok(...) 或 Err(...)
  • pallets/transaction-fee/src/lib.rs:swap 调用(unstake_from_subnet)包装在 with_transaction 中,成功时 Commit(Ok),失败时 Rollback(Err),确保原子性回滚
  • pallets/transaction-fee/src/lib.rs:失败时记录错误日志并返回 InvalidTransaction::Payment 错误,导致整笔交易被拒绝
  • pallets/transaction-fee/src/lib.rs:调用方 OU::withdraw_in_alpha 处增加 ? 操作符传播错误
  • pallets/transaction-fee/src/tests/mod.rs:新增 test_alpha_fee_withdraw_failure_aborts_and_rolls_back 测试,验证 swap 失败后所有存储状态(stake、AMM 池、余额、事件)均回滚至原始值,且交易返回 InvalidTransaction::Payment
  • pallets/transaction-fee/src/tests/mod.rs:修改 test_rejects_multi_subnet_alpha_fee_deduction 测试中的预期值,适配新的 Result 返回类型
#2673 Drain protocol ema when net_flow disabled MERGED fix
将 update_ema_protocol_flow 调用移出 net_flow_enabled 条件分支,确保无论 net_flow 是否启用,每个区块都会消耗协议流并更新 EMA
判级:修复了一个在 net_flow 禁用状态下导致协议流无限累积、重新启用后引发排放冲击的经济模型严重 bug,虽然代码改动极小但影响网络经济稳健性
关键改动
  • pallets/subtensor/src/coinbase/subnet_emissions.rs: 将 let protocol_ema = Self::update_ema_protocol_flow(*netuid); 从 if net_flow_enabled 块内移动到块外,使得每次调用 get_subnet_block_emissions 时都执行协议流消耗和 EMA 更新
  • pallets/subtensor/src/tests/coinbase.rs: 新增测试 test_net_tao_flow_disabled_still_drains_protocol_flow_into_ema,验证当 net_flow_disabled 时协议流仍被正确消耗到 EMA 存储中
#2675 feat: normalize protocol cost in net flow EMA MERGED feature
对子网发射量计算中的净流量 EMA 进行归一化,通过归一化因子缩放协议成本,防止补贴集中;同时修复协议 EMA 在切换开关时的累积冲击。
判级:改动直接修改了子网发射量分配的核心计算逻辑——净流量归一化因子,影响所有子网的 TAO 奖励分发,属于共识级别的资金敏感变更。
关键改动
  • pallets/subtensor/src/coinbase/subnet_emissions.rs: get_shares_flow: 将原先直接返回 user_ema - protocol_ema 改为先收集所有子网的 user_ema 和 protocol_ema,计算归一化因子 norm_factor = min(1, user_positive_sum / protocol_positive_sum),仅对正的 protocol_ema 进行缩放,负的(根洞察超过排放)保持原值;net_flow 禁用时 norm_factor = 0。
  • pallets/subtensor/src/coinbase/subnet_emissions.rs: get_shares_flow: 将协议 EMA 更新(update_ema_protocol_flow)从条件触发改为无条件更新,确保开关 net flow 时协议 EMA 始终跟踪当前流量,修复 #2667。
  • pallets/subtensor/src/coinbase/subnet_emissions.rs: get_shares_flow: 变量类型从直接映射 ema_flows 改为先收集 subnet_emas 再二次映射,以支持两次遍历(一次求和,一次计算净流)。
#2682 Remove deprecated conviction maps MERGED migration
添加运行时迁移,清理 testnet 上已弃用的 conviction v1 存储(Lock、HotkeyLock、MaturityRate、UnlockRate),为 conviction v2 部署做准备。
判级:虽然是清理性迁移,但直接修改链上存储,若执行不当会影响 testnet 上后续 conviction v2 模块的正常运行;且属于运行时升级的一部分,需要对迁移逻辑和顺序进行严格审查。
关键改动
  • 新增文件 `pallets/subtensor/src/migrations/migrate_remove_deprecated_conviction_maps.rs`:定义迁移函数,使用 storage_alias 指向旧存储,通过 clear(u32::MAX, None) 删除 Lock 和 HotkeyLock 的全部条目,通过 kill() 删除 MaturityRate 和 UnlockRate 两个单值存储。
  • 修改 `pallets/subtensor/src/migrations/mod.rs`:添加 `pub mod migrate_remove_deprecated_conviction_maps;` 声明新模块。
  • 修改 `pallets/subtensor/src/macros/hooks.rs`:在 `on_runtime_upgrade` 的迁移链末尾添加对 `migrate_remove_deprecated_conviction_maps` 的调用,并紧跟 `migrate_reset_tnet_conviction_locks`(清理更多旧锁存储)。
#2687 Conviction updates MERGED feature
重构 conviction 锁定系统:引入 ConvictionModel 结构体封装锁逻辑,新增 4 个聚合桶(perpetual_general/decaying_general/perpetual_owner/decaying_owner),默认所有冷密钥的锁变为衰减模式,修改解锁和成熟速率均为 311622(约 1 个月衰减 50%),所有人对子网拥有者热密钥的 conviction 立即获得,子网拥有者可禁用自动锁仓,新增 get_coldkey_lock RPC,新增清空测试网旧锁状态的迁移。
判级:此 PR 大幅度重构了 Substrate 链上核心的 conviction 锁模型,改动量超过 1950 行新增、561 行删除,涉及存储语义翻转、关键经济参数(解锁/成熟速率)大幅调整、聚合桶从 2 个扩展到 4 个、新的 RPC 和迁移逻辑——直接影响了 Bittensor 网络的共识权重计算(Yuma 共识依赖 conviction)和用户锁定资金的经济模型,属于高风险高影响的变更。
关键改动
  • pallets/subtensor/src/staking/lock.rs:新增 ConvictionModel 结构体,封装 roll_forward、merge、add_to_aggregate、reduce 等所有锁操作;移除 Pallet 上的 roll_forward_individual_lock/roll_forward_owner_lock/roll_forward_hotkey_lock/roll_forward_decaying_hotkey_lock 等方法,改为通过 ConvictionModel 的 stateless 方法操作
  • pallets/subtensor/src/staking/lock.rs:新增 read_conviction_model_for_hotkey / read_conviction_model / save_conviction_model 三个私有方法,统一读取和写入 5 个存储桶(Lock/HotkeyLock/DecayingHotkeyLock/OwnerLock/DecayingOwnerLock)
  • pallets/subtensor/src/lib.rs:新增 DecayingOwnerLock 存储(总衰减 owner 锁)、OwnerCutAutoLockEnabled 存储(是否启用 owner cut 自动锁仓,默认 true);修改 UnlockRate 默认值从 1_142_108 改为 311_622,MaturityRate 默认值从 216_000 改为 311_622;新增 SubnetOwnerHotkey 存储引用更新
  • pallets/subtensor/src/staking/lock.rs:语义变更——DecayingLock 的缺失含义从「perpetual」翻转为「decaying」(默认衰减);is_perpetual_lock 改为检查 DecayingLock::get == Some(false)
  • pallets/subtensor/src/lib.rs:do_lock_stake 重构——使用 ConvictionModel 统一处理个体锁和聚合桶的滚动与合并;当锁定目标为子网拥有者热密钥时,conviction 立即设置为锁定数量(无需等待成熟)
  • pallets/subtensor/src/lib.rs:get_coldkey_lock 新公共方法(滚动前滚后返回 LockState),新 RPC endpoint stakeInfo_getColdkeyLock
  • pallets/subtensor/src/lib.rs:hotkey_conviction 和 get_total_conviction 方法适配新存储(加上 DecayingOwnerLock 的 conviction 求和);subnet_king 同样适配
  • pallets/subtensor/src/lib.rs:do_set_perpetual_lock 逻辑适配——通过 ConvictionModel 做滚动迁移,DecayingLock 写 true 表示 perpetual(flipped 语义)
  • pallets/subtensor/src/subnets/subnet.rs:新增 get_owner_cut_auto_lock_enabled / set_owner_cut_auto_lock_enabled 方法
  • pallets/admin-utils/src/lib.rs:新增 sudo_set_owner_cut_auto_lock_enabled 管理调用(索引 95),仅允许 root 或子网拥有者调用
  • pallets/subtensor/src/migrations/migrate_reset_tnet_conviction_locks.rs:新增迁移,清空测试网上所有旧 conviction 锁状态(Lock/HotkeyLock/DecayingHotkeyLock/OwnerLock/DecayingOwnerLock/DecayingLock),确保旧数据不会与新设计冲突
  • pallets/subtensor/src/macros/hooks.rs:在 on_runtime_upgrade 钩子中串入新的 migrate_reset_tnet_conviction_locks 迁移
  • runtime/src/lib.rs:spec_version 从 408 升至 409;实现 get_coldkey_lock runtime API
  • pallets/subtensor/rpc/src/lib.rs:新增 StakeInfoRuntimeApi 导入和 get_coldkey_lock RPC 方法实现
  • pallets/subtensor/runtime-api/src/lib.rs:在 StakeInfoRuntimeApi 中声明 get_coldkey_lock 方法,返回 Option<LockState>
  • pallets/subtensor/src/tests/locks.rs:新增 16+ 个测试用例(默认衰减锁、锁到 owner hotkey 立即 conviction、decaying owner hotkey 锁行为、owner coldkey 锁到非 owner hotkey 正常成熟、get_coldkey_lock 滚动前滚、ConvictionModel 静态方法测试等)
  • pallets/admin-utils/src/tests/mod.rs:新增 sudo_set_owner_cut_auto_lock_enabled 测试
  • pallets/subtensor/src/tests/migration.rs:新增 migration 测试
  • pallets/subtensor/src/coinbase/root.rs:销毁子网时清除 OwnerCutAutoLockEnabled 存储
MEDIUM 更新 (9)
#2630 add test and fix parameter order MERGED fix
修复 ink! 合约链扩展中 recycle_alpha/burn_alpha 参数顺序错误 和 remove_stake_full_limit 中 limit_price 类型错误,并添加 e2e 测试
判级:修复了 ink! 合约接口与链扩展的解码不匹配问题,避免合约调用失败,但仅限于合约接口层,不涉及链核心逻辑或资金安全
关键改动
  • contract-tests/bittensor/lib.rs: 将 recycle_alpha 和 burn_alpha 的参数顺序从 (hotkey, amount, netuid) 改为 (hotkey, netuid, amount);将 remove_stake_full_limit 和 caller_remove_stake_full_limit 的 limit_price 类型从 u64 改为 Option<u64>;同时修复对应实现中的调用顺序
  • contract-tests/test/wasm.contract.test.ts: 新增 getContractStake() 辅助函数减少重复代码;添加 4 个 e2e 测试(recycle_alpha、burn_alpha、add_stake_recycle、add_stake_burn);将 remove_stake_full_limit 测试中的 limit_price 从 tao(60) 改为 undefined;统一使用新辅助函数并移除冗余的 undefined 断言;优化 import 结构
  • docs/wasm-contracts.md: 更新 recycle_alpha 和 burn_alpha 的函数签名文档为正确参数顺序 (AccountId, NetUid, AlphaBalance);添加警告提示使用旧参数顺序编码的合约需要重新编译部署
#2648 Subnet owner capability to disable and enable owner cut MERGED feature
允许子网所有者(或根账户)通过新的外部调用禁用/启用子网所有者抽成(owner cut),当禁用时,完整子网排放全部分配给矿工和验证者,所有者不获取抽成。
判级:这是一个新功能,增加了子网所有者的灵活性,但未触及核心共识、资金安全或运行时迁移,影响范围可控且测试充足,属于中等重要性。
关键改动
  • pallets/subtensor/src/lib.rs: 新增存储 `OwnerCutEnabled<T>` (StorageMap<netuid -> bool>) 和默认值 `DefaultOwnerCutEnabled` (true),用于控制每个子网的所有者抽成是否启用。
  • pallets/subtensor/src/subnets/subnet.rs: 新增 `get_owner_cut_enabled()` 和 `set_owner_cut_enabled_flag()` 公共方法,供其他模块读取和设置该标志。
  • pallets/subtensor/src/coinbase/run_coinbase.rs: 在排放分配逻辑中加入条件判断 `if Self::get_owner_cut_enabled(*netuid_i)`,仅当启用时才计算并扣除所有者抽成,否则跳过。
  • pallets/admin-utils/src/lib.rs: 新增外部调用 `sudo_set_owner_cut_enabled` (call_index=92),仅允许子网所有者或 root 在管理窗口内调用,不能用于根子网;同时将原有的 `sudo_set_subnet_emission_enabled` 的 call_index 从 92 调整为 94。
  • pallets/admin-utils/src/tests/mod.rs: 新增测试 `test_sudo_set_owner_cut_enabled`,验证所有者/root 可切换标志且默认启用。
  • pallets/subtensor/src/tests/coinbase.rs: 新增测试 `test_disabling_owner_cut_sends_subnet_emission_to_miners_and_validators`,验证禁用后所有者质押不变、验证者和矿工获得更多排放、PedingOwnerCut 为零。
#2654 fix(weights): include netuid in BatchWeightItemFailed event BREAKING MERGED fix
在 BatchWeightItemFailed 事件中增加 netuid 字段,使其携带失败的子网 ID。
判级:这是一个纯可观测性改进,不改变任何链上逻辑、经济模型或共识规则,但提升了对运维和调试的重要性,且已被标记为 high 级别审查,实际上风险很低。
关键改动
  • pallets/subtensor/src/macros/events.rs:BatchWeightItemFailed 事件签名从 (DispatchError) 改为 (NetUid, DispatchError),并补全文档注释
  • pallets/subtensor/src/subnets/weights.rs:do_batch_commit_weights 和 do_batch_set_weights 内部将 results 从 Vec<DispatchResult> 改为 Vec<(NetUid, DispatchResult)>,发射事件时带上 netuid
  • runtime/src/lib.rs:spec_version 从 406 提升至 407
  • pallets/subtensor/src/tests/weights.rs:新增两个回归测试,验证批处理提交权重和批处理设置权重的失败事件中 netuid 正确传播
#2657 Subnet Emission Owner Toggle BREAKING MERGED feature
添加子网排放开关(SubnetEmissionEnabled toggle),允许所有者或根管理员禁用特定子网的池侧排放(alpha_in、tao_in、excess_tao链买),并将禁用子网的TAO排放重新分配给启用子网以保持总区块排放不变。
判级:添加了重要的子网治理功能但保持向后兼容,不破坏现有逻辑,不涉及资金安全风险,测试覆盖充分。
关键改动
  • pallets/admin-utils/src/lib.rs:新增sudo_set_subnet_emission_enabled外部调用(call_index=92),含权限检查、速率限制、事件触发
  • pallets/admin-utils/src/benchmarking.rs:新增该调用的基准测试
  • pallets/subtensor/src/lib.rs:新增SubnetEmissionEnabled存储映射,默认true
  • pallets/subtensor/src/coinbase/subnet_emissions.rs:修改get_subnet_block_emissions,禁用子网TAO排放置零并按份额重分配给启用子网
  • pallets/subtensor/src/coinbase/run_coinbase.rs:在inject_and_maybe_swap前清除SubnetExcessTao和SubnetTaoInEmission防止过时值
  • pallets/subtensor/src/subnets/subnet.rs:新子网初始化时重置SubnetEmissionEnabled为true
  • pallets/subtensor/src/utils/rate_limiting.rs:Hyperparameter枚举新增SubnetEmissionEnabled=28
  • runtime/src/lib.rs:将sudo_set_subnet_emission_enabled加入ProxyType允许调用列表
  • pallets/subtensor/src/tests/coinbase.rs:新增两个测试分别验证重分配和多次开关行为
  • pallets/crowdloan/src/weights.rs、pallets/proxy/src/weights.rs、pallets/utility/src/weights.rs:自动生成的权重文件更新(生成物,非逻辑变更)
#2660 Allow subnet owners to set minimum childkey take per subnet MERGED feature
允许子网所有者设置该子网的最小 childkey take,在全局最低值之上增加子网级下限
判级:添加了子网级 childkey take 下限功能,修改了核心取费校验和读取函数,但未触及共识或资金安全,且变更向后兼容、测试覆盖良好
关键改动
  • pallets/subtensor/src/lib.rs: 新增 MinChildkeyTakePerSubnet 存储映射,键为 NetUid,值为 u16
  • pallets/subtensor/src/macros/events.rs: 新增 MinChildKeyTakePerSubnetSet(NetUid, u16) 事件
  • pallets/subtensor/src/staking/set_children.rs: set_childkey_take 校验改为 take >= get_effective_min_childkey_take(netuid)(原仅校验 ≤ max);get_childkey_take 改为取存储值与子网有效最小值的较大者
  • pallets/subtensor/src/utils/misc.rs: 新增 set_min_childkey_take_for_subnet、get_min_childkey_take_for_subnet、get_effective_min_childkey_take 三个辅助函数
  • pallets/subtensor/src/utils/rate_limiting.rs: Hyperparameter 枚举新增 MinChildkeyTake = 29
  • pallets/admin-utils/src/lib.rs: 新增 sudo_set_min_childkey_take_per_subnet 管理调用(call_index 93),可由 root 或子网所有者调用
  • runtime/src/lib.rs: 将新管理调用加入 ProxyType::RootClaim 的过滤白名单
  • pallets/admin-utils/src/tests/mod.rs: 新增两个测试用例覆盖正常设置和低于全局最小值被拒绝的场景
  • pallets/subtensor/src/tests/children.rs: 新增 test_childkey_take_respects_effective_subnet_minimum 测试,验证 set 校验和 get 向上取整行为
  • pallets/admin-utils/src/weights.rs: 生成的新调用权重数据
#2683 Try-runtime fixes: TI check and conviction v1 removal MERGED fix
修改try-runtime逻辑:禁用总发行量检查并移除废弃的conviction映射,清理测试网链上状态。
判级:该PR合并了两个try-runtime修复:禁用总发行量检查并移除已废弃的conviction存储,影响链上状态清理,但非核心经济或共识逻辑改动,属于中期优先级的维护性更新。
#2694 Only Root Toggles Subnet Emissions BREAKING MERGED fix
将 `sudo_set_subnet_emission_enabled` 的调用权限从子网所有者或 root 改为仅限 root
判级:属于权限治理改动,影响所有子网所有者的操作能力,但不涉及共识、经济模型或存储迁移,改动范围小且不含复杂逻辑
关键改动
  • pallets/admin-utils/src/lib.rs: 将 `ensure_sn_owner_or_root_with_limits()` 替换为 `ensure_root()`,子网所有者不再具有操作权限
  • pallets/admin-utils/src/lib.rs: 移除了 `ensure_admin_window_open()` 检查,root 不受管理窗口限制
  • pallets/admin-utils/src/lib.rs: 移除了 `record_owner_rl()` 限速调用,因为 owner 不再有权调用该函数
  • pallets/admin-utils/src/lib.rs: 移除了对 `Hyperparameter::SubnetEmissionEnabled` 的传入,该参数仅在 owner 限速时使用
  • runtime/src/lib.rs: spec_version 从 408 提升至 409,用于运行时升级
  • pallets/admin-utils/src/weights.rs 等权重文件: 自动重新生成(generated 文件,非逻辑变更)
#2695 No default auto-lock BREAKING MERGED runtime
将 OwnerCutAutoLockEnabled 的默认值从 true 改为 false,即子网拥有者收益不再默认自动锁定
判级:修改了子网经济模型中锁定行为的默认值,影响所有未显式配置的子网,但改动极小且向后兼容(可显式 opt-in),不涉及核心共识算法或资金安全
关键改动
  • pallets/subtensor/src/lib.rs:DefaultOwnerCutAutoLockEnabled 返回值从 true 改为 false
  • pallets/subtensor/src/macros/dispatches.rs:set_perpetual_lock 的 rustdoc 更新,描述锁定默认是衰减(decay)而非永久
  • pallets/subtensor/src/tests/locks.rs:测试用例重命名为 test_auto_lock_owner_cut_is_disabled_by_default_and_can_be_enabled,删除了默认锁定的断言,新增显式启用后才锁定的断言
  • pallets/admin-utils/src/tests/mod.rs:sudo_set_owner_cut_auto_lock_enabled 测试中默认值的期望从 assert!(true) 改为 assert!(!true)
  • runtime/src/lib.rs:spec_version 从 409 升至 410,标识运行时行为变更
#2698 Set unlock and maturity rates to 90 days half life BREAKING MERGED fix
将锁仓解锁和 conviction maturity 的默认半衰期从约60天调整为约90天
判级:虽然只改了默认常量,但影响核心经济参数(锁仓与成熟度半衰期),需要审查正确性,但无存储迁移或复杂逻辑,风险低
关键改动
  • pallets/subtensor/src/lib.rs: DefaultUnlockRate 从 648_000 改为 934_866
  • pallets/subtensor/src/lib.rs: DefaultMaturityRate 从 648_000 改为 934_866
  • runtime/src/lib.rs: spec_version 从 410 升至 411
LOW (4)
#2668 Ai reviewer MERGED ci
添加AI驱动的PR审查流水线,包含安全 skeptics 和领域 auditor 两个角色。
判级:该PR仅添加CI/CD流水线工具(AI审查流程),未改动任何核心pallet、共识、资金或运行时状态,属于开发流程改进。
#2669 add atomic extension check MERGED chore
为验证事务性添加了合约测试用例,仅修改测试文件。
判级:PR仅添加了contract tests中的测试用例以验证add_stake_recycle和add_stake_burn的事务性,未修改任何链上状态、运行时逻辑或核心功能,属于测试增强。
#2677 add test normalization_keeps_eligible_subnet_count MERGED chore
添加子网排放资格归一化的回归测试用例
判级:该PR仅添加了回归测试代码(normalization_keeps_eligible_subnet_count),未修改任何链上逻辑或运行时状态,属于测试覆盖增强,不涉及功能变更或资金/共识安全风险。
#2696 60 day unlock and maturity rate MERGED runtime
将质押解锁和信念成熟期的默认半衰期从约30天延长至约60天,对应块数从311_622改为648_000。
判级:仅修改两个默认常量值,不涉及任何核心共识、存储迁移、资金转移或复杂逻辑变更,属低风险参数调整。
关键改动
  • pallets/subtensor/src/lib.rs: DefaultUnlockRate 从 311_622 改为 648_000 块,注释更新为 ~60 days
  • pallets/subtensor/src/lib.rs: DefaultMaturityRate 从 311_622 改为 648_000 块,注释更新为 ~60 days
  • runtime/src/lib.rs: spec_version 从 409 提升至 410,标记运行时参数变更
未分析 (24)
#2524 PalletId-based subnet account Ids maintain subnet TAO reserves MERGED
#2527 Bugfix for: `hotkey_swap` on a single subnet wipes all root dividend accumulations MERGED
#2550 add origin in extension MERGED
#2560 Feat/recycle burn chain exts MERGED
#2571 Record TAO in-flow on burned neuron registration MERGED
#2589 Make instant seal work and added interval MERGED
#2599 Convictions (stake locks) MERGED
#2602 fix benchmark remove stake MERGED
#2616 Port more precompile tests to Rust MERGED
#2617 Remove duplicate migration MERGED
#2619 fix the admin window not set in e2e MERGED
#2621 fix multiplier event type MERGED
#2622 Port more precompile tests to Rust MERGED
#2623 Port more precompile tests to rust MERGED
#2629 Pallet alpha-assets MERGED
#2631 remove subnet owner check MERGED
#2632 Conviction updates MERGED
#2634 feat: net TAO flow for emission allocation MERGED
#2635 net tao flow followup MERGED
#2640 Count burned registration in tao inflow MERGED
#2641 Lock transfers MERGED
#2642 No initial owner alpha MERGED
#2644 remove double record tao flow MERGED
#2646 Recycle logging MERGED