总 PR
5
HIGH
3
MEDIUM
1
Stage2
0
Model: deepseek/deepseek-v4-flash Compare Back

TL;DR(PR 分析)

本版主要聚焦子网协议 Alpha 会计机制的重构(改变 TAO/Alpha 流通分配)与众贷 pallet 的 breaking 改进(新增贡献上限和调用互斥),核心涉及共识与资金流向修改;同步引入最小质押配置化与超参数 RPC v3 等提效改动。

交叉验证

两边确认4
仅分析映射1
仅 Release Notes0
仅分析映射:#2705
HIGH 重要更新 (3)
#2645 Subnet Protocol Alpha Accounting BREAKING MERGED feature
子网协议Alpha会计:协议TAO买入时不再回收Alpha,而是缓存为协议自有Alpha,并在子网注销清算时纳入按比例分配。
判级:该PR修改了核心经济逻辑(coinbase中的Alpha处理和子网注销清算的按比例分配),属于共识层面改动,直接影响TAO/Alpha的流通和分配机制。
关键改动
  • pallets/subtensor/src/lib.rs: 新增存储项 SubnetProtocolAlpha<NetUid -> AlphaBalance>,缓存每个子网的协议自有Alpha
  • pallets/subtensor/src/coinbase/run_coinbase.rs: 协议TAO买入Alpha时,不再调用 recycle_subnet_alpha,改为累加到 SubnetProtocolAlpha 中
  • pallets/subtensor/src/staking/remove_stake.rs (do_dissolve_network): 将 SubnetAlphaIn + SubnetProtocolAlpha 纳入总Alpha值进行按比例分配,为协议创建独立分配份额(is_protocol=true)并将对应TAO计入 protocal_tao_share
  • pallets/subtensor/src/staking/remove_stake.rs: 在注销清理阶段新增 SubnetProtocolAlpha::remove(netuid)
  • pallets/subtensor/src/staking/remove_stake.rs: 从子网账户退款给所有者时扣除 protocol_tao_share,确保协议份额不被误转
  • pallets/subtensor/src/tests/coinbase.rs: 更新测试验证协议买入后 SubnetProtocolAlpha 不为零,并调整 AlphaOut 断言
  • pallets/subtensor/src/tests/networks.rs: 新增 dissolve_protocol_alpha_share_is_not_paid_to_users 测试;多处已有测试初始化 SubnetAlphaIn/SubnetProtocolAlpha 为零以适配新逻辑
#2697 Crowdloan optional per-contributor maximum contribution and exclusive call/target address. BREAKING MERGED feature
对众贷 Pallet 进行 breaking 改进:要求创建时且最终确定时 `call` 和 `target_address` 严格互斥,并新增每位贡献者可选最大捐款额度及 `set_max_contribution` 外部函数。
判级:该 PR 对众贷 Pallet 的核心创建和最终确定逻辑进行了 breaking 变更,新增存储和外部函数,并且涉及运行时版本升级,虽然不直接影响共识或资金安全,但对众贷功能的所有使用者构成直接影响,需要客户端适配和升级。
关键改动
  • pallets/crowdloan/src/lib.rs: `create` 新增 `InvalidFinalizationConfig` 检查,拒绝 `call` 和 `target_address` 同时提供或都未提供;`finalize` 改用 `match` 分支强制执行同一不变性;增加 `MaxContributions` 存储映射,用于记录每位贡献者的可选最大累计捐款额;增加 `set_max_contribution` 外部函数(仅创建者可调用,需众贷未最终确定);`dissolve` 增加 `MaxContributions::remove`;`contribute` 新增基于 `MaxContributions` 和当前贡献额的动态调整逻辑(最小值检查仍保留,但接受额可低于最小值以填充剩余上限或剩余个人上限);`update_min_contribution` 新增 `MinimumContributionTooHigh` 校验;增加 `MaxContributionUpdated` 事件和多个错误枚举。
  • pallets/crowdloan/src/tests.rs: 新增 437 行测试,包括:创建时传入 `call` 和 `target_address` 均被拒绝、均缺失被拒绝;`set_max_contribution` 最大值低于最小值失败;贡献严格受 max 上限限制且超出后报 `MaxContributionReached`;贡献可在填充上限或填充个人上限时低于 `min_contribution`;`finalize` 在人为构造的双配置或空配置时失败;`update_min_contribution` 在超过 `max_contribution` 时失败;`dissolve` 后清除 `MaxContributions` 存储。
  • pallets/crowdloan/src/benchmarking.rs: 将所有基准测试从同时提供 `call` 和 `target_address` 改为仅提供 `call` 以匹配新约束;`finalize` 基准测试改用大调用强制走预映像存储路径;增加 `set_max_contribution` 基准测试。
  • pallets/crowdloan/src/weights.rs: 根据基准测试更新权重(生成文件)。
  • pallets/crowdloan/src/mock.rs: 为 `set_max_contribution` 添加权重桩实现。
  • pallets/crowdloan/README.md: 更新文档:强调 call/target_address 互斥、新增 `set_max_contribution` 函数说明、`min_contribution` 受 `max_contribution` 约束。
  • precompiles/src/crowdloan.rs: 在预编译集成测试中 `create` 调用改为提供 `target_address`(原为 `None, None`)。
  • runtime/src/lib.rs: spec_version 从 409 提升至 410。
  • scripts/benchmark_all.sh: 修复发现 pallet 输出路径时的变量命名错误(`pallet`→`pallet_name`)。
#2705 hotfix 6/1/2026 BREAKING MERGED runtime
四项核心修改:众贷pallet大重构(单目标路由、每人贡献上限)、子网协议Alpha追踪(溶解时分账正确)、前向兼容超参数RPC V3、最小质押配置化
判级:包含storage变更、extrinsic新增、API追加、溶解资金流向修改以及runtime config breaking change,均在项目背景定义的高影响范围内
关键改动
  • pallets/crowdloan/src/lib.rs: 新增MaxContributions存储映射用于每人贡献上限;新增set_max_contribution外部调用(call_index 9);create()强制要求call与target_address二选一,同时提供或同时缺失报InvalidFinalizationConfig;finalize()改用match精确处理(call, target_address)组合;contribute()增加上限校验;dissolve时清理MaxContributions;update_min_contribution校验min≤max;新增MaxContributionUpdated事件
  • pallets/crowdloan/src/tests.rs: 新增set_max_contribution/InvalidFinalizationConfig/每人上限封顶等15+测试用例
  • pallets/crowdloan/src/benchmarking.rs: 更新benchmarks适配新约束,新增set_max_contribution benchmark;finalization benchmark改为纯call路径并验证预镜像
  • pallets/subtensor/src/lib.rs: 新增SubnetProtocolAlpha存储映射(netuid→AlphaBalance)用于追踪协议自购Alpha
  • pallets/subtensor/src/coinbase/run_coinbase.rs & inject_and_maybe_swap: 链购Alpha时写入SubnetProtocolAlpha,不再调用recycle_subnet_alpha(该逻辑实际上已不存在)
  • pallets/subtensor/src/staking/remove_stake.rs: do_dissolve_network纳入协议Alpha参与总Alpha池计算;协议Alpha对应的TAO份额流向owner冷钱包而非分红给stakers;owner退款计算扣减protocol_tao_share避免重复分配;溶解时清理SubnetProtocolAlpha
  • pallets/subtensor/src/rpc_info/subnet_info.rs: 新增HyperparamValue枚举(Bool/U16/U32/U64/U128/TaoBalance/I32F32/U64F64)、HyperparamEntry结构体、SubnetHyperparamsV3(Vec<HyperparamEntry>);实现get_subnet_hyperparams_v3()将所有超参数以名称-值对列表返回
  • pallets/subtensor/runtime-api/src/lib.rs: API声明增加get_subnet_hyperparams_v3,标记V1/V2为#[deprecated]
  • pallets/subtensor/rpc/src/lib.rs: 旧API方法添加#[allow(deprecated)]
  • pallets/subtensor/src/macros/config.rs: 配置trait新增InitialMinStake常量类型
  • pallets/subtensor/src/tests/subnet_info.rs: 新增V3完整测试(名称验证、值正确性、SCALE往返、Yuma版本依赖)
  • pallets/subtensor/src/tests/networks.rs: 溶解测试适配协议Alpha:SubnetAlphaIn/SubnetProtocolAlpha初始化为零;新增dissolve_protocol_alpha_share_is_not_paid_to_users验证协议Alpha不分给stakers
  • pallets/subtensor/src/tests/coinbase.rs: coinbase测试验证SubnetProtocolAlpha非零且计入AlphaOut
  • runtime/src/lib.rs: spec_version 411→413;新增SubtensorInitialMinStake参数(2_000_000 RAO)并传入pallet_subtensor::Config;导入SubnetHyperparamsV3,注册get_subnet_hyperparams_v3 API
  • precompiles/src/crowdloan.rs: 修复测试:crete时提供target_address(满足二选一约束)
  • pallets/subtensor/src/tests/mock.rs & mock_high_ed.rs & pallets/crowdloan/src/mock.rs & eco-tests/src/mock.rs & chain-extensions/src/mock.rs & pallets/admin-utils/src/tests/mock.rs & pallets/transaction-fee/src/tests/mock.rs & precompiles/src/mock.rs: mock适配InitialMinStake
  • pallets/crowdloan/README.md: 文档更新反映最终化逻辑变更
MEDIUM 更新 (1)
#2699 Get Hyperparams v3 MERGED feature
新增 get_subnet_hyperparams_v3 运行时API,返回 Vec<HyperparamEntry> 键值对列表以替代固定结构体,并废弃旧的 V1/V2 API。
判级:虽是重要的开发者体验改进,但不涉及资金/共识/迁移等高风险区域,且完全向后兼容。
关键改动
  • pallets/subtensor/runtime-api/src/lib.rs: 声明新API get_subnet_hyperparams_v3,标记 V1/V2 为 deprecated,使用 #[api_version(2)] 版本标记
  • pallets/subtensor/src/rpc_info/subnet_info.rs: 新增 HyperparamValue 枚举(8种类型变体)、HyperparamEntry 结构体(name+value)、SubnetHyperparamsV3 类型别名(Vec<HyperparamEntry>);实现 get_subnet_hyperparams_v3 方法,一次性收集31个超参并转为带名称的条目列表
  • pallets/subtensor/rpc/src/lib.rs: 在 V1/V2 RPC 实现上添加 #[allow(deprecated)] 消除编译警告
  • runtime/src/lib.rs: 注册新API的运行时实现,导入 SubnetHyperparamsV3 类型
  • pallets/subtensor/src/tests/subnet_info.rs: 新增完整测试文件(285行),覆盖不存在的子网返回None、名称集合完整性与去重、存储值正确性、yuma_version 动态切换、SCALE编解码往返、HyperparamValue 各变体编解码
  • pallets/subtensor/src/tests/mod.rs: 添加 subnet_info 测试模块引用
LOW (1)
#2684 add min stake const MERGED feature
为最小质押金额(min stake)引入可配置的运行时常量 InitialMinStake,替代原先 pallet 内部的硬编码默认值 2_000_000(0.002 TAO)。
判级:该 PR 仅是配置提取(将硬编码值变为运行时常量),不改变任何业务逻辑、存储结构或共识规则,安全风险低,对链上用户和开发者几乎无感知。
关键改动
  • pallets/subtensor/src/macros/config.rs: 在 pallet Config trait 中新增 `type InitialMinStake: Get<TaoBalance>` 常量声明。
  • pallets/subtensor/src/lib.rs: 将 `DefaultMinStake` 函数的返回值从硬编码的 `2_000_000.into()` 改为 `T::InitialMinStake::get().into()`。
  • runtime/src/lib.rs: 定义 `SubtensorInitialMinStake = TaoBalance::new(2_000_000)` 并实现到 pallet 的配置绑定;同时 spec_version 从 411 提升至 412。
  • chain-extensions/src/mock.rs, eco-tests/src/mock.rs, pallets/admin-utils/src/tests/mock.rs, pallets/subtensor/src/tests/mock.rs, pallets/subtensor/src/tests/mock_high_ed.rs, pallets/transaction-fee/src/tests/mock.rs, precompiles/src/mock.rs: 7 个 Mock 文件同步添加 `InitialMinStake` 参数和 Config 实现。
  • contract-tests/test/alphaPool.test.ts: 导入语句重新排序并添加 `let value = await api.constants.SubtensorModule.InitialMinStake;` 读取新常量。