From 8c3ec679d4d26bc3cd80d141aa3a7433ebd9b636 Mon Sep 17 00:00:00 2001 From: open-junius Date: Tue, 10 Feb 2026 13:57:51 +0800 Subject: [PATCH 01/51] try dissolve_network benchmark --- pallets/subtensor/src/benchmarks.rs | 47 +++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/pallets/subtensor/src/benchmarks.rs b/pallets/subtensor/src/benchmarks.rs index 8a6f8d757d..d1dc40dc72 100644 --- a/pallets/subtensor/src/benchmarks.rs +++ b/pallets/subtensor/src/benchmarks.rs @@ -1764,4 +1764,51 @@ mod pallet_benchmarks { Some(limit), ); } + + #[benchmark] + fn dissolve_network() { + let netuid = NetUid::from(1); + let tempo: u16 = 1; + let coldkey: T::AccountId = account("Owner", 0, 1); + + // Initialize network + Subtensor::::init_new_network(netuid, tempo); + SubtokenEnabled::::insert(netuid, true); + Subtensor::::set_max_allowed_uids(netuid, 256); + Subtensor::::set_network_registration_allowed(netuid, true); + Subtensor::::set_burn(netuid, 1.into()); + + // Set network owner + SubnetOwner::::insert(netuid, coldkey.clone()); + + Subtensor::::set_max_registrations_per_block(netuid, 64); + + Subtensor::::set_target_registrations_per_interval(netuid, 64); + + // Add some registrations to make the benchmark realistic + let mut seed: u32 = 2; + for _ in 0..64 { + let hotkey: T::AccountId = account("Hotkey", 0, seed); + let coldkey: T::AccountId = account("Coldkey", 0, seed); + seed += 1; + + let amount_to_be_staked: u64 = 1_000_000; + Subtensor::::add_balance_to_coldkey_account(&coldkey, amount_to_be_staked); + + assert_ok!(Subtensor::::do_burned_registration( + RawOrigin::Signed(coldkey.clone()).into(), + netuid, + hotkey.clone() + )); + } + + // Add some network reserves to make it more realistic + let tao_reserve = TaoCurrency::from(10_000_000_000); + let alpha_in = AlphaCurrency::from(5_000_000_000); + SubnetTAO::::insert(netuid, tao_reserve); + SubnetAlphaIn::::insert(netuid, alpha_in); + + #[extrinsic_call] + _(RawOrigin::Root, coldkey.clone(), netuid); + } } From 9030e64d4701c32b8d678f2bd15906535c2e26ba Mon Sep 17 00:00:00 2001 From: open-junius Date: Tue, 10 Feb 2026 13:58:39 +0800 Subject: [PATCH 02/51] remove collect --- pallets/subtensor/src/staking/claim_root.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pallets/subtensor/src/staking/claim_root.rs b/pallets/subtensor/src/staking/claim_root.rs index 24a26d154c..b9fcc43332 100644 --- a/pallets/subtensor/src/staking/claim_root.rs +++ b/pallets/subtensor/src/staking/claim_root.rs @@ -390,10 +390,9 @@ impl Pallet { /// Claim all root dividends for subnet and remove all associated data. pub fn finalize_all_subnet_root_dividends(netuid: NetUid) { - let hotkeys = RootClaimable::::iter_keys().collect::>(); - - for hotkey in hotkeys.iter() { - RootClaimable::::mutate(hotkey, |claimable| { + // Iterate directly without collecting to avoid unnecessary allocation + for hotkey in RootClaimable::::iter_keys() { + RootClaimable::::mutate(&hotkey, |claimable| { claimable.remove(&netuid); }); } From f6293d7cc1b448774c6a3d9ec5dfadd8e4d3cea5 Mon Sep 17 00:00:00 2001 From: open-junius Date: Wed, 11 Feb 2026 09:20:57 +0800 Subject: [PATCH 03/51] add on idle --- pallets/subtensor/src/lib.rs | 1 + pallets/subtensor/src/macros/hooks.rs | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index ba7e3dcbf6..029be02c33 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -87,6 +87,7 @@ pub mod pallet { traits::{ OriginTrait, QueryPreimage, StorePreimage, UnfilteredDispatchable, tokens::fungible, }, + weights::WeightMeter, }; use frame_system::pallet_prelude::*; use pallet_drand::types::RoundNumber; diff --git a/pallets/subtensor/src/macros/hooks.rs b/pallets/subtensor/src/macros/hooks.rs index 899e8d32f2..facd351cc9 100644 --- a/pallets/subtensor/src/macros/hooks.rs +++ b/pallets/subtensor/src/macros/hooks.rs @@ -177,6 +177,17 @@ mod hooks { // Self::check_total_stake()?; Ok(()) } + + fn on_idle(_block: BlockNumberFor, limit: Weight) -> Weight { + let mut weight_meter = WeightMeter::with_limit(limit.saturating_div(2)); + let on_idle_weight = T::DbWeight::get().reads(1); + // let on_idle_weight = T::WeightInfo::on_idle_base(); + if !weight_meter.can_consume(on_idle_weight) { + return weight_meter.consumed(); + } + weight_meter.consume(on_idle_weight); + weight_meter.consumed() + } } impl Pallet { From fb3dc040a980adaf5eb21f4ef2608ba8c8792e0f Mon Sep 17 00:00:00 2001 From: open-junius Date: Thu, 12 Feb 2026 22:43:23 +0800 Subject: [PATCH 04/51] add weight meter --- pallets/subtensor/src/coinbase/root.rs | 19 ++++++------ pallets/subtensor/src/lib.rs | 4 +++ pallets/subtensor/src/macros/errors.rs | 2 ++ pallets/subtensor/src/macros/events.rs | 5 +++ pallets/subtensor/src/macros/hooks.rs | 42 +++++++++++++++++++++++++- 5 files changed, 61 insertions(+), 11 deletions(-) diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index 83567b6f57..ab09c99192 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -16,11 +16,9 @@ // DEALINGS IN THE SOFTWARE. use super::*; -use crate::CommitmentsInterface; use safe_math::*; use substrate_fixed::types::{I64F64, U96F32}; use subtensor_runtime_common::{AlphaCurrency, Currency, NetUid, NetUidStorageIndex, TaoCurrency}; -use subtensor_swap_interface::SwapHandler; impl Pallet { /// Fetches the total count of root network validators @@ -210,16 +208,17 @@ impl Pallet { Error::::SubnetNotExists ); - Self::finalize_all_subnet_root_dividends(netuid); + // Just remove the network from the added networks. + NetworksAdded::::remove(netuid); - // --- Perform the cleanup before removing the network. - T::SwapInterface::dissolve_all_liquidity_providers(netuid)?; - Self::destroy_alpha_in_out_stakes(netuid)?; - T::SwapInterface::clear_protocol_liquidity(netuid)?; - T::CommitmentsInterface::purge_netuid(netuid); + let mut dissolved_networks = DissolvedNetworks::::get(); + ensure!( + !dissolved_networks.contains(&netuid), + Error::::NetworkAlreadyDissolved + ); - // --- Remove the network - Self::remove_network(netuid); + dissolved_networks.push(netuid); + DissolvedNetworks::::set(dissolved_networks); // --- Emit the NetworkRemoved event log::info!("NetworkRemoved( netuid:{netuid:?} )"); diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index 029be02c33..e186fa161d 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -1890,6 +1890,10 @@ pub mod pallet { pub type SubtokenEnabled = StorageMap<_, Identity, NetUid, bool, ValueQuery, DefaultFalse>; + /// --- ITEM ( dissolved_networks ) Networks dissolved but some storage not removed yet + #[pallet::storage] + pub type DissolvedNetworks = StorageValue<_, Vec, ValueQuery>; + // ======================================= // ==== VotingPower Storage ==== // ======================================= diff --git a/pallets/subtensor/src/macros/errors.rs b/pallets/subtensor/src/macros/errors.rs index f74a7657d8..8dad82d55a 100644 --- a/pallets/subtensor/src/macros/errors.rs +++ b/pallets/subtensor/src/macros/errors.rs @@ -282,5 +282,7 @@ mod errors { Deprecated, /// Subnet buyback exceeded the operation rate limit SubnetBuybackRateLimitExceeded, + /// Network already dissolved + NetworkAlreadyDissolved, } } diff --git a/pallets/subtensor/src/macros/events.rs b/pallets/subtensor/src/macros/events.rs index 9f0c2bdfd5..f934f40923 100644 --- a/pallets/subtensor/src/macros/events.rs +++ b/pallets/subtensor/src/macros/events.rs @@ -528,5 +528,10 @@ mod events { /// Alpha burned alpha: AlphaCurrency, }, + /// data for a dissolved network has been cleaned up. + DissolvedNetworkDataCleaned { + /// The subnet ID + netuid: NetUid, + }, } } diff --git a/pallets/subtensor/src/macros/hooks.rs b/pallets/subtensor/src/macros/hooks.rs index facd351cc9..2435b802fa 100644 --- a/pallets/subtensor/src/macros/hooks.rs +++ b/pallets/subtensor/src/macros/hooks.rs @@ -1,5 +1,6 @@ use frame_support::pallet_macros::pallet_section; - +// use subtensor_commitments_interface::CommitmentsHandler; +// use subtensor_swap_interface::SwapHandler; /// A [`pallet_section`] that defines the events for a pallet. /// This can later be imported into the pallet using [`import_section`]. #[pallet_section] @@ -186,6 +187,9 @@ mod hooks { return weight_meter.consumed(); } weight_meter.consume(on_idle_weight); + weight_meter.consumed(); + + let _ = Self::remove_data_for_dissolved_networks(weight_meter.remaining()); weight_meter.consumed() } } @@ -227,5 +231,41 @@ mod hooks { } weight } + + // Clean the data for dissolved networks + // + // # Args: + // * 'remaining_weight': (Weight): + // - The remaining weight for the function. + // + // # Returns: + // * 'Weight': The weight consumed by the function. + // + fn remove_data_for_dissolved_networks(remaining_weight: Weight) -> Weight { + let dissolved_networks = DissolvedNetworks::::get(); + + for netuid in dissolved_networks.iter() { + Self::finalize_all_subnet_root_dividends(*netuid); + let _ = T::SwapInterface::dissolve_all_liquidity_providers(*netuid); + let _ = Self::destroy_alpha_in_out_stakes(*netuid); + let _ = T::SwapInterface::clear_protocol_liquidity(*netuid); + let _ = T::CommitmentsInterface::purge_netuid(*netuid); + let _ = Self::remove_network(*netuid); + + Self::deposit_event(Event::DissolvedNetworkDataCleaned { netuid: *netuid }); + } + let mut _weight_meter = WeightMeter::with_limit(remaining_weight); + Weight::from_parts(0, 0) + // Self::finalize_all_subnet_root_dividends(netuid); + + // --- Perform the cleanup before removing the network. + // T::SwapInterface::dissolve_all_liquidity_providers(netuid)?; + // Self::destroy_alpha_in_out_stakes(netuid)?; + // T::SwapInterface::clear_protocol_liquidity(netuid)?; + // T::CommitmentsInterface::purge_netuid(netuid); + + // --- Remove the network + // Self::remove_network(netuid); + } } } From e7d60f112a2b9d898541bf35957d4b201a4417bc Mon Sep 17 00:00:00 2001 From: open-junius Date: Fri, 13 Feb 2026 09:26:03 +0800 Subject: [PATCH 05/51] on_idle hook --- pallets/subtensor/src/lib.rs | 2 +- pallets/subtensor/src/macros/hooks.rs | 2 +- pallets/subtensor/src/staking/claim_root.rs | 17 +++++++++++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index e186fa161d..cf03ff0f98 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -87,7 +87,7 @@ pub mod pallet { traits::{ OriginTrait, QueryPreimage, StorePreimage, UnfilteredDispatchable, tokens::fungible, }, - weights::WeightMeter, + weights::{Weight, WeightMeter}, }; use frame_system::pallet_prelude::*; use pallet_drand::types::RoundNumber; diff --git a/pallets/subtensor/src/macros/hooks.rs b/pallets/subtensor/src/macros/hooks.rs index 2435b802fa..9b198ad478 100644 --- a/pallets/subtensor/src/macros/hooks.rs +++ b/pallets/subtensor/src/macros/hooks.rs @@ -243,6 +243,7 @@ mod hooks { // fn remove_data_for_dissolved_networks(remaining_weight: Weight) -> Weight { let dissolved_networks = DissolvedNetworks::::get(); + let mut _weight_meter = WeightMeter::with_limit(remaining_weight); for netuid in dissolved_networks.iter() { Self::finalize_all_subnet_root_dividends(*netuid); @@ -254,7 +255,6 @@ mod hooks { Self::deposit_event(Event::DissolvedNetworkDataCleaned { netuid: *netuid }); } - let mut _weight_meter = WeightMeter::with_limit(remaining_weight); Weight::from_parts(0, 0) // Self::finalize_all_subnet_root_dividends(netuid); diff --git a/pallets/subtensor/src/staking/claim_root.rs b/pallets/subtensor/src/staking/claim_root.rs index b9fcc43332..9df60610f7 100644 --- a/pallets/subtensor/src/staking/claim_root.rs +++ b/pallets/subtensor/src/staking/claim_root.rs @@ -1,5 +1,5 @@ use super::*; -use frame_support::weights::Weight; +use frame_support::weights::{Weight, WeightMeter}; use sp_core::Get; use sp_std::collections::btree_set::BTreeSet; use substrate_fixed::types::I96F32; @@ -389,14 +389,27 @@ impl Pallet { } /// Claim all root dividends for subnet and remove all associated data. - pub fn finalize_all_subnet_root_dividends(netuid: NetUid) { + pub fn finalize_all_subnet_root_dividends(netuid: NetUid, remaining_weight: Weight) -> Weight { + let mut weight_meter = WeightMeter::with_limit(remaining_weight); + + if !weight_meter.can_consume(T::DbWeight::get().reads(1)) { + return weight_meter.consumed(); + } // Iterate directly without collecting to avoid unnecessary allocation for hotkey in RootClaimable::::iter_keys() { + weight_meter.consume(T::DbWeight::get().reads(1)); + + if !weight_meter.can_consume(T::DbWeight::get().writes(1)) { + return weight_meter.consumed(); + } + RootClaimable::::mutate(&hotkey, |claimable| { claimable.remove(&netuid); }); + weight_meter.consume(T::DbWeight::get().writes(1)); } let _ = RootClaimed::::clear_prefix((netuid,), u32::MAX, None); + Weight::from_parts(0, 0) } } From 860d84d39dd8be442a63fac0a94ac36cbb2922c1 Mon Sep 17 00:00:00 2001 From: open-junius Date: Fri, 13 Feb 2026 11:34:41 +0800 Subject: [PATCH 06/51] add macro --- pallets/subtensor/src/macros/hooks.rs | 2 +- pallets/subtensor/src/staking/claim_root.rs | 13 ++- pallets/subtensor/src/utils/mod.rs | 101 ++++++++++++++++++++ 3 files changed, 112 insertions(+), 4 deletions(-) diff --git a/pallets/subtensor/src/macros/hooks.rs b/pallets/subtensor/src/macros/hooks.rs index 9b198ad478..75f7a28043 100644 --- a/pallets/subtensor/src/macros/hooks.rs +++ b/pallets/subtensor/src/macros/hooks.rs @@ -246,7 +246,7 @@ mod hooks { let mut _weight_meter = WeightMeter::with_limit(remaining_weight); for netuid in dissolved_networks.iter() { - Self::finalize_all_subnet_root_dividends(*netuid); + Self::finalize_all_subnet_root_dividends(*netuid, remaining_weight); let _ = T::SwapInterface::dissolve_all_liquidity_providers(*netuid); let _ = Self::destroy_alpha_in_out_stakes(*netuid); let _ = T::SwapInterface::clear_protocol_liquidity(*netuid); diff --git a/pallets/subtensor/src/staking/claim_root.rs b/pallets/subtensor/src/staking/claim_root.rs index 9df60610f7..f5f7804810 100644 --- a/pallets/subtensor/src/staking/claim_root.rs +++ b/pallets/subtensor/src/staking/claim_root.rs @@ -1,4 +1,5 @@ use super::*; +use crate::WeightMeterWrapper; use frame_support::weights::{Weight, WeightMeter}; use sp_core::Get; use sp_std::collections::btree_set::BTreeSet; @@ -395,6 +396,8 @@ impl Pallet { if !weight_meter.can_consume(T::DbWeight::get().reads(1)) { return weight_meter.consumed(); } + // MeterX!(weight_meter, T::DbWeight::get().reads(1)); + // Iterate directly without collecting to avoid unnecessary allocation for hotkey in RootClaimable::::iter_keys() { weight_meter.consume(T::DbWeight::get().reads(1)); @@ -403,9 +406,13 @@ impl Pallet { return weight_meter.consumed(); } - RootClaimable::::mutate(&hotkey, |claimable| { - claimable.remove(&netuid); - }); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().reads(1), + RootClaimable::::mutate(&hotkey, |claimable| { + claimable.remove(&netuid); + }) + ); weight_meter.consume(T::DbWeight::get().writes(1)); } diff --git a/pallets/subtensor/src/utils/mod.rs b/pallets/subtensor/src/utils/mod.rs index a91875da59..e3949c0821 100644 --- a/pallets/subtensor/src/utils/mod.rs +++ b/pallets/subtensor/src/utils/mod.rs @@ -6,3 +6,104 @@ pub mod rate_limiting; #[cfg(feature = "try-runtime")] pub mod try_state; pub mod voting_power; + +#[macro_export] +macro_rules! WeightMeterWrapper { + ( $meter:expr, $weight:expr, $body:expr ) => {{ + if !$meter.can_consume($weight) { + return $meter.consumed(); + } + $body; + $meter.consume($weight); + }}; +} + +#[cfg(test)] +mod tests { + use core::cell::Cell; + + /// Mock weight meter for testing the macro. + struct MockWeightMeter { + limit: u64, + used: u64, + } + + impl MockWeightMeter { + fn with_limit(limit: u64) -> Self { + Self { limit, used: 0 } + } + fn can_consume(&self, weight: u64) -> bool { + self.used.saturating_add(weight) <= self.limit + } + fn consume(&mut self, weight: u64) { + self.used = self.used.saturating_add(weight); + } + fn consumed(&self) -> u64 { + self.used + } + } + + /// Helper: the macro's early return yields u64, so it must be in a fn returning u64. + fn run_with_meter(mut meter: MockWeightMeter) -> u64 { + WeightMeterWrapper!(meter, 10u64, { + // body executes when we can consume + }); + WeightMeterWrapper!(meter, 20u64, { + // body executes + }); + meter.consumed() + } + + #[test] + fn test_weight_meter_wrapper_consumes_weight() { + let meter = MockWeightMeter::with_limit(100); + let consumed = run_with_meter(meter); + assert_eq!(consumed, 30, "should consume 10 + 20 = 30"); + } + + #[test] + fn test_weight_meter_wrapper_returns_early_when_over_limit() { + let meter = MockWeightMeter::with_limit(15); + let consumed = run_with_meter(meter); + // First block consumes 10, second would need 20 but only 5 remain -> early return + assert_eq!( + consumed, 10, + "should return after first consume when second would exceed limit" + ); + } + + #[test] + fn test_weight_meter_wrapper_body_executes() { + fn helper() -> u64 { + let executed = Cell::new(false); + let mut meter = MockWeightMeter::with_limit(100); + WeightMeterWrapper!(meter, 10u64, { + executed.set(true); + }); + assert!( + executed.get(), + "body should execute when weight is available" + ); + meter.consumed() + } + assert_eq!(helper(), 10); + } + + #[test] + fn test_weight_meter_wrapper_body_does_not_execute_when_over_limit() { + let executed = Cell::new(false); + let mut meter = MockWeightMeter::with_limit(5); + fn run(executed: &Cell, meter: &mut MockWeightMeter) -> u64 { + WeightMeterWrapper!(meter, 10u64, { + executed.set(true); + }); + meter.consumed() + } + let consumed = run(&executed, &mut meter); + assert!( + !executed.get(), + "body should not execute when weight exceeds limit" + ); + assert_eq!(consumed, 0); + } +} From 5161299bd9bed8785341c038f593f0d545a180ee Mon Sep 17 00:00:00 2001 From: open-junius Date: Fri, 13 Feb 2026 16:25:13 +0800 Subject: [PATCH 07/51] need handle remove all lp --- pallets/subtensor/src/macros/hooks.rs | 22 +++++++++++++++------ pallets/subtensor/src/staking/claim_root.rs | 22 ++++++++------------- pallets/subtensor/src/utils/mod.rs | 2 +- pallets/swap/src/pallet/impls.rs | 2 +- 4 files changed, 26 insertions(+), 22 deletions(-) diff --git a/pallets/subtensor/src/macros/hooks.rs b/pallets/subtensor/src/macros/hooks.rs index 75f7a28043..d0321744ea 100644 --- a/pallets/subtensor/src/macros/hooks.rs +++ b/pallets/subtensor/src/macros/hooks.rs @@ -242,16 +242,26 @@ mod hooks { // * 'Weight': The weight consumed by the function. // fn remove_data_for_dissolved_networks(remaining_weight: Weight) -> Weight { + let mut remaining_weight = remaining_weight; let dissolved_networks = DissolvedNetworks::::get(); let mut _weight_meter = WeightMeter::with_limit(remaining_weight); for netuid in dissolved_networks.iter() { - Self::finalize_all_subnet_root_dividends(*netuid, remaining_weight); - let _ = T::SwapInterface::dissolve_all_liquidity_providers(*netuid); - let _ = Self::destroy_alpha_in_out_stakes(*netuid); - let _ = T::SwapInterface::clear_protocol_liquidity(*netuid); - let _ = T::CommitmentsInterface::purge_netuid(*netuid); - let _ = Self::remove_network(*netuid); + let weight_used = + Self::finalize_all_subnet_root_dividends(*netuid, remaining_weight); + remaining_weight = remaining_weight.saturating_sub(weight_used); + // let weight_used = T::SwapInterface::dissolve_all_liquidity_providers(*netuid); + // remaining_weight = remaining_weight.saturating_sub(weight_used); + // let weight_used = Self::destroy_alpha_in_out_stakes(*netuid); + // remaining_weight = remaining_weight.saturating_sub(weight_used); + // let weight_used = T::SwapInterface::clear_protocol_liquidity(*netuid); + // remaining_weight = remaining_weight.saturating_sub(weight_used); + // let weight_used_ = T::CommitmentsInterface::purge_netuid(*netuid); + // remaining_weight = remaining_weight.saturating_sub(weight_used); + // let weight_used = Self::remove_network(*netuid); + // remaining_weight = remaining_weight.saturating_sub(weight_used); + + DissolvedNetworks::::mutate(|networks| networks.retain(|n| *n != *netuid)); Self::deposit_event(Event::DissolvedNetworkDataCleaned { netuid: *netuid }); } diff --git a/pallets/subtensor/src/staking/claim_root.rs b/pallets/subtensor/src/staking/claim_root.rs index f5f7804810..0619a38c04 100644 --- a/pallets/subtensor/src/staking/claim_root.rs +++ b/pallets/subtensor/src/staking/claim_root.rs @@ -393,30 +393,24 @@ impl Pallet { pub fn finalize_all_subnet_root_dividends(netuid: NetUid, remaining_weight: Weight) -> Weight { let mut weight_meter = WeightMeter::with_limit(remaining_weight); - if !weight_meter.can_consume(T::DbWeight::get().reads(1)) { - return weight_meter.consumed(); - } - // MeterX!(weight_meter, T::DbWeight::get().reads(1)); - // Iterate directly without collecting to avoid unnecessary allocation for hotkey in RootClaimable::::iter_keys() { - weight_meter.consume(T::DbWeight::get().reads(1)); - - if !weight_meter.can_consume(T::DbWeight::get().writes(1)) { - return weight_meter.consumed(); - } + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1), {}); WeightMeterWrapper!( weight_meter, - T::DbWeight::get().reads(1), + T::DbWeight::get().writes(1), RootClaimable::::mutate(&hotkey, |claimable| { claimable.remove(&netuid); }) ); - weight_meter.consume(T::DbWeight::get().writes(1)); } - let _ = RootClaimed::::clear_prefix((netuid,), u32::MAX, None); - Weight::from_parts(0, 0) + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(1), + RootClaimed::::clear_prefix((netuid,), u32::MAX, None) + ); + weight_meter.consumed() } } diff --git a/pallets/subtensor/src/utils/mod.rs b/pallets/subtensor/src/utils/mod.rs index e3949c0821..072a29c453 100644 --- a/pallets/subtensor/src/utils/mod.rs +++ b/pallets/subtensor/src/utils/mod.rs @@ -13,7 +13,7 @@ macro_rules! WeightMeterWrapper { if !$meter.can_consume($weight) { return $meter.consumed(); } - $body; + let _ = $body; $meter.consume($weight); }}; } diff --git a/pallets/swap/src/pallet/impls.rs b/pallets/swap/src/pallet/impls.rs index 6ec02879bf..f99f3330b9 100644 --- a/pallets/swap/src/pallet/impls.rs +++ b/pallets/swap/src/pallet/impls.rs @@ -871,7 +871,7 @@ impl Pallet { }; for CloseItem { owner, pos_id } in to_close.into_iter() { - match Self::do_remove_liquidity(netuid, &owner, pos_id) { + match Self::do_remove_liquixdity(netuid, &owner, pos_id) { Ok(rm) => { // α withdrawn from the pool = principal + accrued fees let alpha_total_from_pool: AlphaCurrency = From 890f68531f557fe49477bf89793bd2f179052eea Mon Sep 17 00:00:00 2001 From: open-junius Date: Fri, 13 Feb 2026 16:28:16 +0800 Subject: [PATCH 08/51] fix typo --- pallets/swap/src/pallet/impls.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/swap/src/pallet/impls.rs b/pallets/swap/src/pallet/impls.rs index f99f3330b9..6ec02879bf 100644 --- a/pallets/swap/src/pallet/impls.rs +++ b/pallets/swap/src/pallet/impls.rs @@ -871,7 +871,7 @@ impl Pallet { }; for CloseItem { owner, pos_id } in to_close.into_iter() { - match Self::do_remove_liquixdity(netuid, &owner, pos_id) { + match Self::do_remove_liquidity(netuid, &owner, pos_id) { Ok(rm) => { // α withdrawn from the pool = principal + accrued fees let alpha_total_from_pool: AlphaCurrency = From 07da3b5273c73804ce6dad093bacfac52f283db7 Mon Sep 17 00:00:00 2001 From: open-junius Date: Fri, 13 Feb 2026 17:06:00 +0800 Subject: [PATCH 09/51] update interface --- pallets/swap-interface/src/lib.rs | 3 +- pallets/swap/src/pallet/impls.rs | 74 ++++++++++++++++++++++++------- pallets/swap/src/pallet/mod.rs | 2 +- 3 files changed, 60 insertions(+), 19 deletions(-) diff --git a/pallets/swap-interface/src/lib.rs b/pallets/swap-interface/src/lib.rs index 19af1303c1..3e00dd15bb 100644 --- a/pallets/swap-interface/src/lib.rs +++ b/pallets/swap-interface/src/lib.rs @@ -48,7 +48,8 @@ pub trait SwapHandler { alpha_delta: AlphaCurrency, ); fn is_user_liquidity_enabled(netuid: NetUid) -> bool; - fn dissolve_all_liquidity_providers(netuid: NetUid) -> DispatchResult; + fn dissolve_all_liquidity_providers(netuid: NetUid, remaining_weight: Option) + -> Weight; fn toggle_user_liquidity(netuid: NetUid, enabled: bool); fn clear_protocol_liquidity(netuid: NetUid) -> DispatchResult; } diff --git a/pallets/swap/src/pallet/impls.rs b/pallets/swap/src/pallet/impls.rs index 6ec02879bf..fd2181566a 100644 --- a/pallets/swap/src/pallet/impls.rs +++ b/pallets/swap/src/pallet/impls.rs @@ -1,6 +1,6 @@ use core::ops::Neg; - use frame_support::storage::{TransactionOutcome, transactional}; +use frame_support::weights::{Weight, WeightMeter}; use frame_support::{ensure, pallet_prelude::DispatchError, traits::Get}; use safe_math::*; use sp_arithmetic::helpers_128bit; @@ -828,7 +828,18 @@ impl Pallet { } /// Dissolve all LPs and clean state. - pub fn do_dissolve_all_liquidity_providers(netuid: NetUid) -> DispatchResult { + pub fn do_dissolve_all_liquidity_providers( + netuid: NetUid, + remaining_weight: Option, + ) -> Weight { + let mut meter_weight = remaining_weight.map(|value| WeightMeter::with_limit(value)); + if let Some(meter_weight) = &mut meter_weight { + if meter_weight.can_consume(T::DbWeight::get().reads(1)) { + return meter_weight.consumed(); + } else { + meter_weight.consume(T::DbWeight::get().reads(1)); + } + } if SwapV3Initialized::::get(netuid) { // 1) Snapshot only *non‑protocol* positions: (owner, position_id). struct CloseItem { @@ -848,7 +859,11 @@ impl Pallet { log::debug!( "dissolve_all_lp: no user positions; netuid={netuid:?}, protocol liquidity untouched" ); - return Ok(()); + if let Some(meter_weight) = meter_weight { + return meter_weight.consumed(); + } else { + return Weight::from_parts(0, 0); + } } let mut user_refunded_tao = TaoCurrency::ZERO; @@ -891,20 +906,34 @@ impl Pallet { // 2) Stake ALL withdrawn α (principal + fees) to the best permitted validator. if alpha_total_from_pool > AlphaCurrency::ZERO { if let Some(target_uid) = pick_target_uid(&trust, &permit) { - let validator_hotkey: T::AccountId = + let validator_hotkey: Result = T::SubnetInfo::hotkey_of_uid(netuid.into(), target_uid).ok_or( sp_runtime::DispatchError::Other( "validator_hotkey_missing", ), - )?; - - // Stake α from LP owner (coldkey) to chosen validator (hotkey). - T::BalanceOps::increase_stake( - &owner, - &validator_hotkey, - netuid, - alpha_total_from_pool, - )?; + ); + + if let Ok(validator_hotkey) = validator_hotkey { + // Stake α from LP owner (coldkey) to chosen validator (hotkey). + if let Err(_e) = T::BalanceOps::increase_stake( + &owner, + &validator_hotkey, + netuid, + alpha_total_from_pool, + ) { + if let Some(meter_weight) = meter_weight { + return meter_weight.consumed(); + } else { + return Weight::from_parts(0, 0); + } + } + } else { + if let Some(meter_weight) = meter_weight { + return meter_weight.consumed(); + } else { + return Weight::from_parts(0, 0); + } + } user_staked_alpha = user_staked_alpha.saturating_add(alpha_total_from_pool); @@ -935,14 +964,22 @@ impl Pallet { "dissolve_all_liquidity_providers (users-only): netuid={netuid:?}, users_refunded_total_τ={user_refunded_tao:?}, users_staked_total_α={user_staked_alpha:?}; protocol liquidity untouched" ); - return Ok(()); + if let Some(meter_weight) = meter_weight { + return meter_weight.consumed(); + } else { + return Weight::from_parts(0, 0); + } } log::debug!( "dissolve_all_liquidity_providers: netuid={netuid:?}, mode=V2-or-nonV3, leaving all liquidity/state intact" ); - Ok(()) + if let Some(meter_weight) = meter_weight { + return meter_weight.consumed(); + } else { + return Weight::from_parts(0, 0); + } } /// Clear **protocol-owned** liquidity and wipe all swap state for `netuid`. @@ -1151,8 +1188,11 @@ impl SwapHandler for Pallet { fn is_user_liquidity_enabled(netuid: NetUid) -> bool { EnabledUserLiquidity::::get(netuid) } - fn dissolve_all_liquidity_providers(netuid: NetUid) -> DispatchResult { - Self::do_dissolve_all_liquidity_providers(netuid) + fn dissolve_all_liquidity_providers( + netuid: NetUid, + remaining_weight: Option, + ) -> Weight { + Self::do_dissolve_all_liquidity_providers(netuid, remaining_weight) } fn toggle_user_liquidity(netuid: NetUid, enabled: bool) { EnabledUserLiquidity::::insert(netuid, enabled) diff --git a/pallets/swap/src/pallet/mod.rs b/pallets/swap/src/pallet/mod.rs index b55df77fee..dc40512bd4 100644 --- a/pallets/swap/src/pallet/mod.rs +++ b/pallets/swap/src/pallet/mod.rs @@ -621,7 +621,7 @@ mod pallet { // Remove provided liquidity unconditionally because the network may have // user liquidity previously disabled // Ignore result to avoid early stopping - let _ = Self::do_dissolve_all_liquidity_providers(netuid); + let _ = Self::do_dissolve_all_liquidity_providers(netuid, None); } Ok(()) From 4b9a6a04af39e0a6b03a72dc1d60b09f34540fdd Mon Sep 17 00:00:00 2001 From: open-junius Date: Fri, 13 Feb 2026 20:17:45 +0800 Subject: [PATCH 10/51] cargo clippy --- pallets/swap/src/pallet/impls.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/pallets/swap/src/pallet/impls.rs b/pallets/swap/src/pallet/impls.rs index 48dd887e12..9656a81f50 100644 --- a/pallets/swap/src/pallet/impls.rs +++ b/pallets/swap/src/pallet/impls.rs @@ -1,6 +1,4 @@ -use core::ops::Neg; use frame_support::storage::{TransactionOutcome, transactional}; -use frame_support::weights::{Weight, WeightMeter}; use frame_support::{ensure, pallet_prelude::DispatchError, traits::Get}; use safe_math::*; use sp_arithmetic::{ From e9a67b8ab414aca634a458fe1c134703d8f6a1fe Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 16 Feb 2026 15:45:21 +0800 Subject: [PATCH 11/51] add weigth for all db ops --- common/src/lib.rs | 26 ++ pallets/commitments/src/lib.rs | 29 +- pallets/commitments/src/tests.rs | 2 +- pallets/subtensor/src/coinbase/root.rs | 277 +++++++++++++++--- pallets/subtensor/src/lib.rs | 3 +- pallets/subtensor/src/macros/hooks.rs | 50 ++-- pallets/subtensor/src/staking/claim_root.rs | 27 +- pallets/subtensor/src/staking/remove_stake.rs | 39 ++- pallets/subtensor/src/tests/networks.rs | 1 + pallets/subtensor/src/utils/mod.rs | 42 +-- pallets/swap-interface/src/lib.rs | 2 +- pallets/swap/src/pallet/impls.rs | 40 ++- runtime/src/lib.rs | 4 +- 13 files changed, 401 insertions(+), 141 deletions(-) diff --git a/common/src/lib.rs b/common/src/lib.rs index 658f8b2e01..ec81a874ca 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -437,6 +437,32 @@ impl TypeInfo for NetUidStorageIndex { } } +#[macro_export] +macro_rules! WeightMeterWrapper { + ( $meter:expr, $weight:expr ) => {{ + if !$meter.can_consume($weight) { + return $meter.consumed(); + } + $meter.consume($weight); + }}; +} + +#[macro_export] +macro_rules! LoopRemovePrefixWithWeightMeter { + ( $meter:expr, $weight:expr, $body:expr ) => {{ + loop { + if !$meter.can_consume($weight * 1024) { + return $meter.consumed(); + } + let result = $body; + $meter.consume($weight * result.backend as u64); + if result.maybe_cursor.is_none() { + break; + } + } + }}; +} + #[cfg(test)] mod tests { use super::*; diff --git a/pallets/commitments/src/lib.rs b/pallets/commitments/src/lib.rs index a627220f76..73cdd846ca 100644 --- a/pallets/commitments/src/lib.rs +++ b/pallets/commitments/src/lib.rs @@ -13,6 +13,7 @@ pub mod weights; use ark_serialize::CanonicalDeserialize; use codec::Encode; use frame_support::IterableStorageDoubleMap; +use frame_support::weights::WeightMeter; use frame_support::{ BoundedVec, traits::{Currency, Get}, @@ -23,7 +24,7 @@ use scale_info::prelude::collections::BTreeSet; use sp_runtime::SaturatedConversion; use sp_runtime::{Saturating, Weight, traits::Zero}; use sp_std::{boxed::Box, vec::Vec}; -use subtensor_runtime_common::NetUid; +use subtensor_runtime_common::{NetUid, WeightMeterWrapper}; use tle::{ curves::drand::TinyBLS381, stream_ciphers::AESGCMStreamCipherProvider, @@ -567,16 +568,40 @@ impl Pallet { commitments } - pub fn purge_netuid(netuid: NetUid) { + pub fn purge_netuid(netuid: NetUid, remaining_weight: Weight) -> Weight { + let mut weight_meter = WeightMeter::with_limit(remaining_weight); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(CommitmentOf::::iter_prefix(netuid).count() as u64) + ); let _ = CommitmentOf::::clear_prefix(netuid, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(LastCommitment::::iter_prefix(netuid).count() as u64) + ); let _ = LastCommitment::::clear_prefix(netuid, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(LastBondsReset::::iter_prefix(netuid).count() as u64) + ); let _ = LastBondsReset::::clear_prefix(netuid, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(RevealedCommitments::::iter_prefix(netuid).count() as u64) + ); let _ = RevealedCommitments::::clear_prefix(netuid, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(UsedSpaceOf::::iter_prefix(netuid).count() as u64) + ); let _ = UsedSpaceOf::::clear_prefix(netuid, u32::MAX, None); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); + TimelockedIndex::::mutate(|index| { index.retain(|(n, _)| *n != netuid); }); + weight_meter.consumed() } } diff --git a/pallets/commitments/src/tests.rs b/pallets/commitments/src/tests.rs index 9270a84bb7..742d28eea1 100644 --- a/pallets/commitments/src/tests.rs +++ b/pallets/commitments/src/tests.rs @@ -2265,7 +2265,7 @@ fn purge_netuid_clears_only_that_netuid() { assert!(TimelockedIndex::::get().contains(&(net_a, who_a1))); // Act - Pallet::::purge_netuid(net_a); + Pallet::::purge_netuid(net_a, Weight::from_parts(u64::MAX, u64::MAX)); // NET A: everything cleared assert_eq!(CommitmentOf::::iter_prefix(net_a).count(), 0); diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index a55766387e..a0d3cb87d2 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -16,6 +16,7 @@ // DEALINGS IN THE SOFTWARE. use super::*; +use frame_support::weights::{Weight, WeightMeter}; use safe_math::*; use substrate_fixed::types::{I64F64, U96F32}; use subtensor_runtime_common::{AlphaCurrency, Currency, NetUid, NetUidStorageIndex, TaoCurrency}; @@ -209,50 +210,71 @@ impl Pallet { Error::::SubnetNotExists ); - // Just remove the network from the added networks. - NetworksAdded::::remove(netuid); - let mut dissolved_networks = DissolvedNetworks::::get(); ensure!( !dissolved_networks.contains(&netuid), Error::::NetworkAlreadyDissolved ); - // --- Perform the cleanup before removing the network. - Self::destroy_alpha_in_out_stakes(netuid)?; - T::SwapInterface::clear_protocol_liquidity(netuid)?; - T::CommitmentsInterface::purge_netuid(netuid); + // Just remove the network from the added networks. + NetworksAdded::::remove(netuid); + TotalNetworks::::mutate(|n: &mut u16| *n = n.saturating_sub(1)); dissolved_networks.push(netuid); DissolvedNetworks::::set(dissolved_networks); - // --- Emit the NetworkRemoved event + // --- Perform the cleanup before removing the network. + // Self::destroy_alpha_in_out_stakes(netuid)?; + // T::SwapInterface::clear_protocol_liquidity(netuid)?; + // T::CommitmentsInterface::purge_netuid(netuid); + + // finalize_all_subnet_root_dividends() + // remove_network() + log::info!("NetworkRemoved( netuid:{netuid:?} )"); + + // --- Emit the NetworkRemoved event Self::deposit_event(Event::NetworkRemoved(netuid)); Ok(()) } - pub fn remove_network(netuid: NetUid) { + pub fn remove_network(netuid: NetUid, remaining_weight: Weight) -> Weight { + let mut weight_meter = WeightMeter::with_limit(remaining_weight); + // --- 1. Get the owner and remove from SubnetOwner. + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); let owner_coldkey: T::AccountId = SubnetOwner::::get(netuid); + + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetOwner::::remove(netuid); // --- 2. Remove network count. + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(3)); SubnetworkN::::remove(netuid); - // --- 3. Remove netuid from added networks. - NetworksAdded::::remove(netuid); - - // --- 4. Decrement the network counter. - TotalNetworks::::mutate(|n: &mut u16| *n = n.saturating_sub(1)); - // --- 5. Remove various network-related storages. + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); NetworkRegisteredAt::::remove(netuid); // --- 6. Remove incentive mechanism memory. + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(Uids::::iter_prefix(netuid).count() as u64) + ); + let _ = Uids::::clear_prefix(netuid, u32::MAX, None); + let keys = Keys::::iter_prefix(netuid).collect::>(); + let keys_len = keys.len() as u64; + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(keys_len)); + for (_uid, key) in keys { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); + IsNetworkMember::::remove(key, netuid); + } + + let count = Keys::::iter_prefix(netuid).count() as u64; + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(count)); let _ = Keys::::clear_prefix(netuid, u32::MAX, None); // --- 8. Iterate over stored weights and fill the matrix. @@ -262,142 +284,273 @@ impl Pallet { for (subnet_id, weight) in modified_weights.iter_mut() { // If the root network had a weight pointing to this netuid, set it to 0 if subnet_id == &u16::from(netuid) { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); *weight = 0; } } + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Weights::::insert(NetUidStorageIndex::ROOT, uid_i, modified_weights); } // --- 9. Remove various network-related parameters. + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Rank::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Trust::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Active::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Emission::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Consensus::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Dividends::::remove(netuid); PruningScores::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ValidatorPermit::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ValidatorTrust::::remove(netuid); - for (_uid, key) in keys { - IsNetworkMember::::remove(key, netuid); - } - // --- 10. Erase network parameters. + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Tempo::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Kappa::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Difficulty::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); MaxAllowedUids::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ImmunityPeriod::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ActivityCutoff::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); MinAllowedWeights::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); RegistrationsThisInterval::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); POWRegistrationsThisInterval::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); BurnRegistrationsThisInterval::::remove(netuid); // --- 11. AMM / price / accounting. // SubnetTAO, SubnetAlpha{In,InProvided,Out} are already cleared during dissolve/destroy. + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetAlphaInEmission::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetAlphaOutEmission::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetTaoInEmission::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetVolume::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetMovingPrice::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetTaoFlow::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetEmaTaoFlow::::remove(netuid); // --- 13. Token / mechanism / registration toggles. + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); TokenSymbol::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetMechanism::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetOwnerHotkey::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); NetworkRegistrationAllowed::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); NetworkPowRegistrationAllowed::::remove(netuid); // --- 14. Locks & toggles. + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); TransferToggle::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetLocked::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); LargestLocked::::remove(netuid); // --- 15. Mechanism step / emissions bookkeeping. + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); FirstEmissionBlockNumber::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); PendingValidatorEmission::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); PendingServerEmission::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); PendingRootAlphaDivs::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); PendingOwnerCut::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); BlocksSinceLastStep::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); LastMechansimStepBlock::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); LastAdjustmentBlock::::remove(netuid); // --- 16. Serving / rho / curves, and other per-net controls. + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ServingRateLimit::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Rho::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); AlphaSigmoidSteepness::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); MaxAllowedValidators::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); AdjustmentInterval::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); BondsMovingAverage::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); BondsPenalty::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); BondsResetOn::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); WeightsSetRateLimit::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ValidatorPruneLen::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ScalingLawPower::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); TargetRegistrationsPerInterval::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); AdjustmentAlpha::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); CommitRevealWeightsEnabled::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Burn::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); MinBurn::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); MaxBurn::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); MinDifficulty::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); MaxDifficulty::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); RegistrationsThisBlock::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); EMAPriceHalvingBlocks::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); RAORecycledForRegistration::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); MaxRegistrationsPerBlock::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); WeightsVersionKey::::remove(netuid); // --- 17. Subtoken / feature flags. + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); LiquidAlphaOn::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Yuma3On::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); AlphaValues::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubtokenEnabled::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ImmuneOwnerUidsLimit::::remove(netuid); // --- 18. Consensus aux vectors. + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); StakeWeight::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); LoadedEmission::::remove(netuid); // --- 19. DMAPs where netuid is the FIRST key: clear by prefix. + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(BlockAtRegistration::::iter_prefix(netuid).count() as u64) + ); let _ = BlockAtRegistration::::clear_prefix(netuid, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(Axons::::iter_prefix(netuid).count() as u64) + ); let _ = Axons::::clear_prefix(netuid, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(NeuronCertificates::::iter_prefix(netuid).count() as u64) + ); let _ = NeuronCertificates::::clear_prefix(netuid, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(Prometheus::::iter_prefix(netuid).count() as u64) + ); let _ = Prometheus::::clear_prefix(netuid, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get() + .writes(AlphaDividendsPerSubnet::::iter_prefix(netuid).count() as u64) + ); let _ = AlphaDividendsPerSubnet::::clear_prefix(netuid, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(PendingChildKeys::::iter_prefix(netuid).count() as u64) + ); let _ = PendingChildKeys::::clear_prefix(netuid, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get() + .writes(AssociatedEvmAddress::::iter_prefix(netuid).count() as u64) + ); let _ = AssociatedEvmAddress::::clear_prefix(netuid, u32::MAX, None); // Commit-reveal / weights commits (all per-net prefixes): let mechanisms: u8 = MechanismCountCurrent::::get(netuid).into(); for subid in 0..mechanisms { let netuid_index = Self::get_mechanism_storage_index(netuid, subid.into()); + LastUpdate::::remove(netuid_index); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Incentive::::remove(netuid_index); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get() + .writes(WeightCommits::::iter_prefix(netuid_index).count() as u64) + ); let _ = WeightCommits::::clear_prefix(netuid_index, u32::MAX, None); let _ = TimelockedWeightCommits::::clear_prefix(netuid_index, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get() + .writes(CRV3WeightCommits::::iter_prefix(netuid_index).count() as u64) + ); let _ = CRV3WeightCommits::::clear_prefix(netuid_index, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get() + .writes(CRV3WeightCommitsV2::::iter_prefix(netuid_index).count() as u64) + ); let _ = CRV3WeightCommitsV2::::clear_prefix(netuid_index, u32::MAX, None); - let _ = Bonds::::clear_prefix(netuid_index, u32::MAX, None); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().writes(Weights::::iter_prefix(netuid_index).count() as u64) + ); let _ = Weights::::clear_prefix(netuid_index, u32::MAX, None); } + + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); RevealPeriodEpochs::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); MechanismCountCurrent::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); MechanismEmissionSplit::::remove(netuid); // Last hotkey swap (DMAP where netuid is FIRST key → easy) + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get() + .writes(LastHotkeySwapOnNetuid::::iter_prefix(netuid).count() as u64) + ); let _ = LastHotkeySwapOnNetuid::::clear_prefix(netuid, u32::MAX, None); // --- 20. Identity maps across versions (netuid-scoped). if SubnetIdentitiesV3::::contains_key(netuid) { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetIdentitiesV3::::remove(netuid); Self::deposit_event(Event::SubnetIdentityRemoved(netuid)); } @@ -406,88 +559,142 @@ impl Pallet { // ChildkeyTake: (hot, netuid) → u16 { + let mut read_count = 0_u64; let to_rm: sp_std::vec::Vec = ChildkeyTake::::iter() - .filter_map(|(hot, n, _)| if n == netuid { Some(hot) } else { None }) + .filter(|(_, n, _)| { + read_count = read_count.saturating_add(1); + *n == netuid + }) + .map(|(hot, _, _)| hot) .collect(); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); for hot in to_rm { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ChildkeyTake::::remove(&hot, netuid); } } // ChildKeys: (parent, netuid) → Vec<...> { + let mut read_count = 0_u64; let to_rm: sp_std::vec::Vec = ChildKeys::::iter() - .filter_map(|(parent, n, _)| if n == netuid { Some(parent) } else { None }) + .filter(|(_, n, _)| { + read_count = read_count.saturating_add(1); + *n == netuid + }) + .map(|(parent, _, _)| parent) .collect(); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); for parent in to_rm { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ChildKeys::::remove(&parent, netuid); } } // ParentKeys: (child, netuid) → Vec<...> { + let mut read_count = 0_u64; let to_rm: sp_std::vec::Vec = ParentKeys::::iter() - .filter_map(|(child, n, _)| if n == netuid { Some(child) } else { None }) + .filter(|(_, n, _)| { + read_count = read_count.saturating_add(1); + *n == netuid + }) + .map(|(child, _, _)| child) .collect(); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); for child in to_rm { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ParentKeys::::remove(&child, netuid); } } // LastHotkeyEmissionOnNetuid: (hot, netuid) → α { + let mut read_count = 0_u64; let to_rm: sp_std::vec::Vec = LastHotkeyEmissionOnNetuid::::iter() - .filter_map(|(hot, n, _)| if n == netuid { Some(hot) } else { None }) + .filter(|(_, n, _)| { + read_count = read_count.saturating_add(1); + *n == netuid + }) + .map(|(hot, _, _)| hot) .collect(); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); for hot in to_rm { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); LastHotkeyEmissionOnNetuid::::remove(&hot, netuid); } } // TotalHotkeyAlphaLastEpoch: (hot, netuid) → ... // (TotalHotkeyAlpha and TotalHotkeyShares were already removed during dissolve.) { + let mut read_count = 0_u64; let to_rm_alpha_last: sp_std::vec::Vec = TotalHotkeyAlphaLastEpoch::::iter() - .filter_map(|(hot, n, _)| if n == netuid { Some(hot) } else { None }) + .filter(|(_, n, _)| { + read_count = read_count.saturating_add(1); + *n == netuid + }) + .map(|(hot, _, _)| hot) .collect(); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); for hot in to_rm_alpha_last { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); TotalHotkeyAlphaLastEpoch::::remove(&hot, netuid); } } // TransactionKeyLastBlock NMAP: (hot, netuid, name) → u64 { + let mut read_count = 0_u64; let to_rm: sp_std::vec::Vec<(T::AccountId, u16)> = TransactionKeyLastBlock::::iter() - .filter_map( - |((hot, n, name), _)| if n == netuid { Some((hot, name)) } else { None }, - ) + .filter(|((_, n, _), _)| { + read_count = read_count.saturating_add(1); + *n == netuid + }) + .map(|((hot, _, name), _)| (hot, name)) .collect(); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); for (hot, name) in to_rm { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); TransactionKeyLastBlock::::remove((hot, netuid, name)); } } // StakingOperationRateLimiter NMAP: (hot, cold, netuid) → bool { + let mut read_count = 0_u64; let to_rm: sp_std::vec::Vec<(T::AccountId, T::AccountId)> = StakingOperationRateLimiter::::iter() - .filter_map( - |((hot, cold, n), _)| { - if n == netuid { Some((hot, cold)) } else { None } - }, - ) + .filter(|((_, _, n), _)| { + read_count = read_count.saturating_add(1); + *n == netuid + }) + .map(|((hot, cold, _), _)| (hot, cold)) .collect(); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); + for (hot, cold) in to_rm { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); StakingOperationRateLimiter::::remove((hot, cold, netuid)); } } // --- 22. Subnet leasing: remove mapping and any lease-scoped state linked to this netuid. - if let Some(lease_id) = SubnetUidToLeaseId::::take(netuid) { + if let Some(lease_id) = SubnetUidToLeaseId::::get(netuid) { + // Fixed: Import the macro type to resolve the error + LoopRemovePrefixWithWeightMeter!( + weight_meter, + T::DbWeight::get().writes(1), + SubnetLeaseShares::::clear_prefix(lease_id, 1024, None) + ); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetLeases::::remove(lease_id); - let _ = SubnetLeaseShares::::clear_prefix(lease_id, u32::MAX, None); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); AccumulatedLeaseDividends::::remove(lease_id); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); + SubnetUidToLeaseId::::remove(netuid); } // --- Final removal logging. log::debug!( "remove_network: netuid={netuid}, owner={owner_coldkey:?} removed successfully" ); + weight_meter.consumed() } #[allow(clippy::arithmetic_side_effects)] diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index 64b2c3684b..7e46f1e2a6 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -25,6 +25,7 @@ use sp_core::Get; use sp_runtime::{DispatchError, transaction_validity::TransactionValidityError}; use sp_std::marker::PhantomData; use subtensor_runtime_common::{AlphaCurrency, Currency, CurrencyReserve, NetUid, TaoCurrency}; +pub use subtensor_runtime_common::{LoopRemovePrefixWithWeightMeter, WeightMeterWrapper}; // ============================ // ==== Benchmark Imports ===== @@ -2740,5 +2741,5 @@ impl ProxyInterface for () { /// Pallets that hold per-subnet commitments implement this to purge all state for `netuid`. pub trait CommitmentsInterface { - fn purge_netuid(netuid: NetUid); + fn purge_netuid(netuid: NetUid, remaining_weight: Weight) -> Weight; } diff --git a/pallets/subtensor/src/macros/hooks.rs b/pallets/subtensor/src/macros/hooks.rs index d0321744ea..97e4a107d0 100644 --- a/pallets/subtensor/src/macros/hooks.rs +++ b/pallets/subtensor/src/macros/hooks.rs @@ -180,17 +180,9 @@ mod hooks { } fn on_idle(_block: BlockNumberFor, limit: Weight) -> Weight { - let mut weight_meter = WeightMeter::with_limit(limit.saturating_div(2)); - let on_idle_weight = T::DbWeight::get().reads(1); - // let on_idle_weight = T::WeightInfo::on_idle_base(); - if !weight_meter.can_consume(on_idle_weight) { - return weight_meter.consumed(); - } - weight_meter.consume(on_idle_weight); - weight_meter.consumed(); - - let _ = Self::remove_data_for_dissolved_networks(weight_meter.remaining()); - weight_meter.consumed() + limit.saturating_sub(Self::remove_data_for_dissolved_networks( + limit.saturating_div(2), + )) } } @@ -244,38 +236,30 @@ mod hooks { fn remove_data_for_dissolved_networks(remaining_weight: Weight) -> Weight { let mut remaining_weight = remaining_weight; let dissolved_networks = DissolvedNetworks::::get(); - let mut _weight_meter = WeightMeter::with_limit(remaining_weight); for netuid in dissolved_networks.iter() { let weight_used = Self::finalize_all_subnet_root_dividends(*netuid, remaining_weight); remaining_weight = remaining_weight.saturating_sub(weight_used); - // let weight_used = T::SwapInterface::dissolve_all_liquidity_providers(*netuid); - // remaining_weight = remaining_weight.saturating_sub(weight_used); - // let weight_used = Self::destroy_alpha_in_out_stakes(*netuid); - // remaining_weight = remaining_weight.saturating_sub(weight_used); - // let weight_used = T::SwapInterface::clear_protocol_liquidity(*netuid); - // remaining_weight = remaining_weight.saturating_sub(weight_used); - // let weight_used_ = T::CommitmentsInterface::purge_netuid(*netuid); - // remaining_weight = remaining_weight.saturating_sub(weight_used); - // let weight_used = Self::remove_network(*netuid); - // remaining_weight = remaining_weight.saturating_sub(weight_used); + + let weight_used = Self::destroy_alpha_in_out_stakes(*netuid, remaining_weight); + remaining_weight = remaining_weight.saturating_sub(weight_used); + + let weight_used = + T::SwapInterface::clear_protocol_liquidity(*netuid, remaining_weight); + remaining_weight = remaining_weight.saturating_sub(weight_used); + + let weight_used = T::CommitmentsInterface::purge_netuid(*netuid, remaining_weight); + remaining_weight = remaining_weight.saturating_sub(weight_used); + + let weight_used = Self::remove_network(*netuid, remaining_weight); + remaining_weight = remaining_weight.saturating_sub(weight_used); DissolvedNetworks::::mutate(|networks| networks.retain(|n| *n != *netuid)); Self::deposit_event(Event::DissolvedNetworkDataCleaned { netuid: *netuid }); } - Weight::from_parts(0, 0) - // Self::finalize_all_subnet_root_dividends(netuid); - - // --- Perform the cleanup before removing the network. - // T::SwapInterface::dissolve_all_liquidity_providers(netuid)?; - // Self::destroy_alpha_in_out_stakes(netuid)?; - // T::SwapInterface::clear_protocol_liquidity(netuid)?; - // T::CommitmentsInterface::purge_netuid(netuid); - - // --- Remove the network - // Self::remove_network(netuid); + remaining_weight } } } diff --git a/pallets/subtensor/src/staking/claim_root.rs b/pallets/subtensor/src/staking/claim_root.rs index 0619a38c04..24a55163f8 100644 --- a/pallets/subtensor/src/staking/claim_root.rs +++ b/pallets/subtensor/src/staking/claim_root.rs @@ -392,25 +392,22 @@ impl Pallet { /// Claim all root dividends for subnet and remove all associated data. pub fn finalize_all_subnet_root_dividends(netuid: NetUid, remaining_weight: Weight) -> Weight { let mut weight_meter = WeightMeter::with_limit(remaining_weight); - + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); // Iterate directly without collecting to avoid unnecessary allocation for hotkey in RootClaimable::::iter_keys() { - WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1), {}); - - WeightMeterWrapper!( - weight_meter, - T::DbWeight::get().writes(1), - RootClaimable::::mutate(&hotkey, |claimable| { - claimable.remove(&netuid); - }) - ); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); + let mut claimable = RootClaimable::::get(&hotkey); + if claimable.contains_key(&netuid) { + claimable.remove(&netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); + RootClaimable::::insert(&hotkey, claimable); + } + + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); } - WeightMeterWrapper!( - weight_meter, - T::DbWeight::get().writes(1), - RootClaimed::::clear_prefix((netuid,), u32::MAX, None) - ); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); + let _ = RootClaimed::::clear_prefix((netuid,), u32::MAX, None); weight_meter.consumed() } } diff --git a/pallets/subtensor/src/staking/remove_stake.rs b/pallets/subtensor/src/staking/remove_stake.rs index 735ec804df..dd855d51f0 100644 --- a/pallets/subtensor/src/staking/remove_stake.rs +++ b/pallets/subtensor/src/staking/remove_stake.rs @@ -1,4 +1,5 @@ use super::*; +use frame_support::weights::WeightMeter; use substrate_fixed::types::U96F32; use subtensor_runtime_common::{AlphaCurrency, Currency, NetUid, TaoCurrency}; use subtensor_swap_interface::{Order, SwapHandler}; @@ -433,16 +434,24 @@ impl Pallet { } } - pub fn destroy_alpha_in_out_stakes(netuid: NetUid) -> DispatchResult { + pub fn destroy_alpha_in_out_stakes(netuid: NetUid, remaining_weight: Weight) -> Weight { // 1) Ensure the subnet exists. - ensure!(Self::if_subnet_exist(netuid), Error::::SubnetNotExists); + if !Self::if_subnet_exist(netuid) { + return Weight::from_parts(0, 0); + } + + let mut meter_weight = WeightMeter::with_limit(remaining_weight); // 2) Owner / lock cost. + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(1)); let owner_coldkey: T::AccountId = SubnetOwner::::get(netuid); + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(1)); let lock_cost: TaoCurrency = Self::get_subnet_locked_balance(netuid); // Determine if this subnet is eligible for a lock refund (legacy). + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(1)); let reg_at: u64 = NetworkRegisteredAt::::get(netuid); + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(1)); let start_block: u64 = NetworkRegistrationStartBlock::::get(); let should_refund_owner: bool = reg_at < start_block; @@ -453,9 +462,11 @@ impl Pallet { // - price that α using a *simulated* AMM swap. let mut owner_emission_tao = TaoCurrency::ZERO; if should_refund_owner && !lock_cost.is_zero() { + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(1)); let total_emitted_alpha_u128: u128 = Self::get_alpha_issuance(netuid).to_u64() as u128; if total_emitted_alpha_u128 > 0 { + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(1)); let owner_fraction: U96F32 = Self::get_float_subnet_owner_cut(); let owner_alpha_u64 = U96F32::from_num(total_emitted_alpha_u128) .saturating_mul(owner_fraction) @@ -463,6 +474,8 @@ impl Pallet { .saturating_to_num::(); owner_emission_tao = if owner_alpha_u64 > 0 { + // Need max 3 reads for current_alpha_price + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(3)); let cur_price: U96F32 = U96F32::saturating_from_num( T::SwapInterface::current_alpha_price(netuid.into()), ); @@ -490,8 +503,15 @@ impl Pallet { .map(|(hot, _, _)| hot.clone()) .collect::>(); + WeightMeterWrapper!( + meter_weight, + T::DbWeight::get().reads(hotkeys_in_subnet.len() as u64) + ); + for hot in hotkeys_in_subnet.iter() { - for ((cold, this_netuid), share_u64f64) in Alpha::::iter_prefix((hot,)) { + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(1)); + for ((cold, this_netuid), share_u64f64) in Alpha::::iter_prefix((hot.clone(),)) { + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(1)); if this_netuid != netuid { continue; } @@ -517,11 +537,14 @@ impl Pallet { } // 5) Determine the TAO pot and pre-adjust accounting to avoid double counting. + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(1)); let pot_tao: TaoCurrency = SubnetTAO::::get(netuid); let pot_u64: u64 = pot_tao.into(); if pot_u64 > 0 { + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(1)); SubnetTAO::::remove(netuid); + WeightMeterWrapper!(meter_weight, T::DbWeight::get().writes(1)); TotalStake::::mutate(|total| *total = total.saturating_sub(pot_tao)); } @@ -577,15 +600,20 @@ impl Pallet { Alpha::::remove((hot, cold, netuid)); } // 7.b) Clear share‑pool totals for each hotkey on this subnet. - for hot in hotkeys_in_subnet { + for hot in hotkeys_in_subnet.iter() { + WeightMeterWrapper!(meter_weight, T::DbWeight::get().writes(1)); TotalHotkeyAlpha::::remove(&hot, netuid); + WeightMeterWrapper!(meter_weight, T::DbWeight::get().writes(1)); TotalHotkeyShares::::remove(&hot, netuid); } // 7.c) Remove α‑in/α‑out counters (fully destroyed). + WeightMeterWrapper!(meter_weight, T::DbWeight::get().writes(1)); SubnetAlphaIn::::remove(netuid); + WeightMeterWrapper!(meter_weight, T::DbWeight::get().writes(1)); SubnetAlphaOut::::remove(netuid); // Clear the locked balance on the subnet. + WeightMeterWrapper!(meter_weight, T::DbWeight::get().writes(1)); Self::set_subnet_locked_balance(netuid, TaoCurrency::ZERO); // 8) Finalize lock handling: @@ -599,9 +627,10 @@ impl Pallet { }; if !refund.is_zero() { + WeightMeterWrapper!(meter_weight, T::DbWeight::get().writes(1)); Self::add_balance_to_coldkey_account(&owner_coldkey, refund.to_u64()); } - Ok(()) + meter_weight.consumed() } } diff --git a/pallets/subtensor/src/tests/networks.rs b/pallets/subtensor/src/tests/networks.rs index 5176ae05dc..148ec429b7 100644 --- a/pallets/subtensor/src/tests/networks.rs +++ b/pallets/subtensor/src/tests/networks.rs @@ -642,6 +642,7 @@ fn dissolve_alpha_out_but_zero_tao_no_rewards() { SubnetTAO::::insert(net, TaoCurrency::from(0)); // zero TAO SubtensorModule::set_subnet_locked_balance(net, TaoCurrency::from(0)); Emission::::insert(net, Vec::::new()); + TotalHotkeyAlpha::::insert(sh, net, AlphaCurrency::from(1_000u64)); let before = SubtensorModule::get_coldkey_balance(&sc); diff --git a/pallets/subtensor/src/utils/mod.rs b/pallets/subtensor/src/utils/mod.rs index 072a29c453..b997605779 100644 --- a/pallets/subtensor/src/utils/mod.rs +++ b/pallets/subtensor/src/utils/mod.rs @@ -7,20 +7,8 @@ pub mod rate_limiting; pub mod try_state; pub mod voting_power; -#[macro_export] -macro_rules! WeightMeterWrapper { - ( $meter:expr, $weight:expr, $body:expr ) => {{ - if !$meter.can_consume($weight) { - return $meter.consumed(); - } - let _ = $body; - $meter.consume($weight); - }}; -} - #[cfg(test)] mod tests { - use core::cell::Cell; /// Mock weight meter for testing the macro. struct MockWeightMeter { @@ -45,12 +33,8 @@ mod tests { /// Helper: the macro's early return yields u64, so it must be in a fn returning u64. fn run_with_meter(mut meter: MockWeightMeter) -> u64 { - WeightMeterWrapper!(meter, 10u64, { - // body executes when we can consume - }); - WeightMeterWrapper!(meter, 20u64, { - // body executes - }); + WeightMeterWrapper!(meter, 10u64); + WeightMeterWrapper!(meter, 20u64); meter.consumed() } @@ -75,15 +59,8 @@ mod tests { #[test] fn test_weight_meter_wrapper_body_executes() { fn helper() -> u64 { - let executed = Cell::new(false); let mut meter = MockWeightMeter::with_limit(100); - WeightMeterWrapper!(meter, 10u64, { - executed.set(true); - }); - assert!( - executed.get(), - "body should execute when weight is available" - ); + WeightMeterWrapper!(meter, 10u64); meter.consumed() } assert_eq!(helper(), 10); @@ -91,19 +68,12 @@ mod tests { #[test] fn test_weight_meter_wrapper_body_does_not_execute_when_over_limit() { - let executed = Cell::new(false); let mut meter = MockWeightMeter::with_limit(5); - fn run(executed: &Cell, meter: &mut MockWeightMeter) -> u64 { - WeightMeterWrapper!(meter, 10u64, { - executed.set(true); - }); + fn run(meter: &mut MockWeightMeter) -> u64 { + WeightMeterWrapper!(meter, 10u64); meter.consumed() } - let consumed = run(&executed, &mut meter); - assert!( - !executed.get(), - "body should not execute when weight exceeds limit" - ); + let consumed = run(&mut meter); assert_eq!(consumed, 0); } } diff --git a/pallets/swap-interface/src/lib.rs b/pallets/swap-interface/src/lib.rs index 9c22ca95e8..300a12be0f 100644 --- a/pallets/swap-interface/src/lib.rs +++ b/pallets/swap-interface/src/lib.rs @@ -47,7 +47,7 @@ pub trait SwapHandler { alpha_delta: AlphaCurrency, ) -> (TaoCurrency, AlphaCurrency); - fn clear_protocol_liquidity(netuid: NetUid) -> DispatchResult; + fn clear_protocol_liquidity(netuid: NetUid, remaining_weight: Weight) -> Weight; fn init_swap(netuid: NetUid, maybe_price: Option); } diff --git a/pallets/swap/src/pallet/impls.rs b/pallets/swap/src/pallet/impls.rs index 9656a81f50..19fe48a18c 100644 --- a/pallets/swap/src/pallet/impls.rs +++ b/pallets/swap/src/pallet/impls.rs @@ -1,5 +1,13 @@ +use super::pallet::*; +use super::swap_step::{BasicSwapStep, SwapStep}; +use crate::{pallet::Balancer, pallet::balancer::BalancerError}; use frame_support::storage::{TransactionOutcome, transactional}; -use frame_support::{ensure, pallet_prelude::DispatchError, traits::Get}; +use frame_support::{ + ensure, + pallet_prelude::DispatchError, + traits::Get, + weights::{Weight, WeightMeter}, +}; use safe_math::*; use sp_arithmetic::{ //helpers_128bit, @@ -7,6 +15,7 @@ use sp_arithmetic::{ }; use sp_runtime::{DispatchResult, traits::AccountIdConversion}; use substrate_fixed::types::U64F64; +use subtensor_runtime_common::WeightMeterWrapper; use subtensor_runtime_common::{ AlphaCurrency, // BalanceOps, @@ -20,10 +29,6 @@ use subtensor_swap_interface::{ DefaultPriceLimit, Order as OrderT, SwapEngine, SwapHandler, SwapResult, }; -use super::pallet::*; -use super::swap_step::{BasicSwapStep, SwapStep}; -use crate::{pallet::Balancer, pallet::balancer::BalancerError}; - impl Pallet { pub fn current_price(netuid: NetUid) -> U64F64 { match T::SubnetInfo::mechanism(netuid.into()) { @@ -285,27 +290,42 @@ impl Pallet { } /// Clear **protocol-owned** liquidity and wipe all swap state for `netuid`. - pub fn do_clear_protocol_liquidity(netuid: NetUid) -> DispatchResult { + pub fn do_clear_protocol_liquidity(netuid: NetUid, remaining_weight: Weight) -> Weight { + let mut weight_meter = WeightMeter::with_limit(remaining_weight); + // let protocol_account = Self::protocol_account_id(); // 1) Force-close protocol liquidity, burning proceeds. + + // Record a database read (for reserve state). + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); + + // Burn all protocol reserves for τ and α. let burned_tao = T::TaoReserve::reserve(netuid.into()); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); let burned_alpha = T::AlphaReserve::reserve(netuid.into()); - + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); T::TaoReserve::decrease_provided(netuid.into(), burned_tao); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); T::AlphaReserve::decrease_provided(netuid.into(), burned_alpha); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); FeesTao::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); FeesAlpha::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); PalSwapInitialized::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); FeeRate::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SwapBalancer::::remove(netuid); log::debug!( "clear_protocol_liquidity: netuid={netuid:?}, protocol_burned: τ={burned_tao:?}, α={burned_alpha:?}; state cleared" ); - Ok(()) + weight_meter.consumed() } } @@ -431,8 +451,8 @@ impl SwapHandler for Pallet { // fn toggle_user_liquidity(netuid: NetUid, enabled: bool) { // EnabledUserLiquidity::::insert(netuid, enabled) // } - fn clear_protocol_liquidity(netuid: NetUid) -> DispatchResult { - Self::do_clear_protocol_liquidity(netuid) + fn clear_protocol_liquidity(netuid: NetUid, remaining_weight: Weight) -> Weight { + Self::do_clear_protocol_liquidity(netuid, remaining_weight) } fn init_swap(netuid: NetUid, maybe_price: Option) { Self::maybe_initialize_palswap(netuid, maybe_price).unwrap_or_default(); diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 89735b1011..2c38ad14ce 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -770,8 +770,8 @@ impl ProxyInterface for Proxier { pub struct CommitmentsI; impl CommitmentsInterface for CommitmentsI { - fn purge_netuid(netuid: NetUid) { - pallet_commitments::Pallet::::purge_netuid(netuid); + fn purge_netuid(netuid: NetUid, remaining_weight: Weight) -> Weight { + pallet_commitments::Pallet::::purge_netuid(netuid, remaining_weight) } } From 8f17e842279da2e9c551d52294883a64b01ecb75 Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 16 Feb 2026 15:48:20 +0800 Subject: [PATCH 12/51] commit Cargo.lock --- pallets/commitments/src/tests.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pallets/commitments/src/tests.rs b/pallets/commitments/src/tests.rs index 742d28eea1..57d0b329d7 100644 --- a/pallets/commitments/src/tests.rs +++ b/pallets/commitments/src/tests.rs @@ -18,6 +18,7 @@ use frame_support::pallet_prelude::Hooks; use frame_support::{ BoundedVec, assert_noop, assert_ok, traits::{Currency, Get, ReservableCurrency}, + weights::Weight, }; use frame_system::{Pallet as System, RawOrigin}; @@ -2298,7 +2299,7 @@ fn purge_netuid_clears_only_that_netuid() { assert!(idx_after.contains(&(net_b, who_b))); // Idempotency - Pallet::::purge_netuid(net_a); + Pallet::::purge_netuid(net_a, Weight::from_parts(u64::MAX, u64::MAX)); assert_eq!(CommitmentOf::::iter_prefix(net_a).count(), 0); assert!(!TimelockedIndex::::get().contains(&(net_a, who_a1))); }); From f932ae6777a6ce4eb9017ec19392ae9441a3ce7e Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 16 Feb 2026 15:49:57 +0800 Subject: [PATCH 13/51] commit Cargo.lock --- pallets/subtensor/src/coinbase/root.rs | 1 - pallets/subtensor/src/lib.rs | 2 +- pallets/swap/src/pallet/impls.rs | 2 +- pallets/swap/src/pallet/tests.rs | 6 +++--- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index a0d3cb87d2..3b1970c26d 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -20,7 +20,6 @@ use frame_support::weights::{Weight, WeightMeter}; use safe_math::*; use substrate_fixed::types::{I64F64, U96F32}; use subtensor_runtime_common::{AlphaCurrency, Currency, NetUid, NetUidStorageIndex, TaoCurrency}; -use subtensor_swap_interface::SwapHandler; impl Pallet { /// Fetches the total count of root network validators diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index 7e46f1e2a6..9e9304aa63 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -88,7 +88,7 @@ pub mod pallet { traits::{ OriginTrait, QueryPreimage, StorePreimage, UnfilteredDispatchable, tokens::fungible, }, - weights::{Weight, WeightMeter}, + weights::Weight, }; use frame_system::pallet_prelude::*; use pallet_drand::types::RoundNumber; diff --git a/pallets/swap/src/pallet/impls.rs b/pallets/swap/src/pallet/impls.rs index 19fe48a18c..9e6640303a 100644 --- a/pallets/swap/src/pallet/impls.rs +++ b/pallets/swap/src/pallet/impls.rs @@ -13,7 +13,7 @@ use sp_arithmetic::{ //helpers_128bit, Perquintill, }; -use sp_runtime::{DispatchResult, traits::AccountIdConversion}; +use sp_runtime::traits::AccountIdConversion; use substrate_fixed::types::U64F64; use subtensor_runtime_common::WeightMeterWrapper; use subtensor_runtime_common::{ diff --git a/pallets/swap/src/pallet/tests.rs b/pallets/swap/src/pallet/tests.rs index 912c89bbe8..a954b3f57a 100644 --- a/pallets/swap/src/pallet/tests.rs +++ b/pallets/swap/src/pallet/tests.rs @@ -801,7 +801,7 @@ fn test_liquidate_pal_simple_ok_and_clears() { assert!(PalSwapInitialized::::get(netuid)); // ACT - assert_ok!(Pallet::::do_clear_protocol_liquidity(netuid)); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::MAX, u64::MAX)); // All single-key maps should not have the key after liquidation assert!(!FeeRate::::contains_key(netuid)); @@ -827,7 +827,7 @@ fn test_clear_protocol_liquidity_green_path() { // --- Act --- // Green path: just clear protocol liquidity and wipe all V3 state. - assert_ok!(Pallet::::do_clear_protocol_liquidity(netuid)); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::MAX, u64::MAX)); // Fee globals assert!(!FeesTao::::contains_key(netuid)); @@ -840,7 +840,7 @@ fn test_clear_protocol_liquidity_green_path() { assert!(!FeeRate::::contains_key(netuid)); // --- And it's idempotent --- - assert_ok!(Pallet::::do_clear_protocol_liquidity(netuid)); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::MAX, u64::MAX)); assert!(!PalSwapInitialized::::contains_key(netuid)); }); } From 71668dea08ba2b89c1d4ca9c9b45939ee1bed693 Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 16 Feb 2026 15:52:17 +0800 Subject: [PATCH 14/51] commit Cargo.lock --- chain-extensions/src/mock.rs | 4 +++- pallets/admin-utils/src/tests/mock.rs | 4 +++- pallets/subtensor/src/tests/mock.rs | 4 +++- pallets/transaction-fee/src/tests/mock.rs | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/chain-extensions/src/mock.rs b/chain-extensions/src/mock.rs index 69fb9de089..4ad9fbea0a 100644 --- a/chain-extensions/src/mock.rs +++ b/chain-extensions/src/mock.rs @@ -443,7 +443,9 @@ impl PrivilegeCmp for OriginPrivilegeCmp { pub struct CommitmentsI; impl CommitmentsInterface for CommitmentsI { - fn purge_netuid(_netuid: NetUid) {} + fn purge_netuid(_netuid: NetUid, remaining_weight: Weight) -> Weight { + remaining_weight + } } parameter_types! { diff --git a/pallets/admin-utils/src/tests/mock.rs b/pallets/admin-utils/src/tests/mock.rs index c28755802f..9bb8cb757e 100644 --- a/pallets/admin-utils/src/tests/mock.rs +++ b/pallets/admin-utils/src/tests/mock.rs @@ -348,7 +348,9 @@ impl PrivilegeCmp for OriginPrivilegeCmp { pub struct CommitmentsI; impl pallet_subtensor::CommitmentsInterface for CommitmentsI { - fn purge_netuid(_netuid: NetUid) {} + fn purge_netuid(_netuid: NetUid, remaining_weight: Weight) -> Weight { + remaining_weight + } } pub struct GrandpaInterfaceImpl; diff --git a/pallets/subtensor/src/tests/mock.rs b/pallets/subtensor/src/tests/mock.rs index 62f11ad4d0..36f6d9766b 100644 --- a/pallets/subtensor/src/tests/mock.rs +++ b/pallets/subtensor/src/tests/mock.rs @@ -334,7 +334,9 @@ impl PrivilegeCmp for OriginPrivilegeCmp { pub struct CommitmentsI; impl CommitmentsInterface for CommitmentsI { - fn purge_netuid(_netuid: NetUid) {} + fn purge_netuid(_netuid: NetUid, remaining_weight: Weight) -> Weight { + remaining_weight + } } parameter_types! { diff --git a/pallets/transaction-fee/src/tests/mock.rs b/pallets/transaction-fee/src/tests/mock.rs index 56b7b77308..c8d80117b2 100644 --- a/pallets/transaction-fee/src/tests/mock.rs +++ b/pallets/transaction-fee/src/tests/mock.rs @@ -413,7 +413,9 @@ impl PrivilegeCmp for OriginPrivilegeCmp { pub struct CommitmentsI; impl pallet_subtensor::CommitmentsInterface for CommitmentsI { - fn purge_netuid(_netuid: NetUid) {} + fn purge_netuid(_netuid: NetUid, remaining_weight: Weight) -> Weight { + remaining_weight + } } parameter_types! { From 85d33d6e703f0db854cc83716147714fadca0ade Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 16 Feb 2026 15:53:39 +0800 Subject: [PATCH 15/51] commit Cargo.lock --- pallets/subtensor/src/tests/networks.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pallets/subtensor/src/tests/networks.rs b/pallets/subtensor/src/tests/networks.rs index 148ec429b7..7e98ccab57 100644 --- a/pallets/subtensor/src/tests/networks.rs +++ b/pallets/subtensor/src/tests/networks.rs @@ -1052,7 +1052,10 @@ fn destroy_alpha_out_refund_gating_by_registration_block() { let owner_before = SubtensorModule::get_coldkey_balance(&owner_cold); // Run the path under test - assert_ok!(SubtensorModule::destroy_alpha_in_out_stakes(netuid)); + SubtensorModule::destroy_alpha_in_out_stakes( + netuid, + Weight::from_parts(u64::MAX, u64::MAX), + ); // No refund for non‑legacy let owner_after = SubtensorModule::get_coldkey_balance(&owner_cold); @@ -1086,7 +1089,10 @@ fn destroy_alpha_out_refund_gating_by_registration_block() { SubnetOwnerCut::::put(32_768u16); // ~50% let owner_before = SubtensorModule::get_coldkey_balance(&owner_cold); - assert_ok!(SubtensorModule::destroy_alpha_in_out_stakes(netuid)); + SubtensorModule::destroy_alpha_in_out_stakes( + netuid, + Weight::from_parts(u64::MAX, u64::MAX), + ); let owner_after = SubtensorModule::get_coldkey_balance(&owner_cold); // No refund possible when lock = 0 From dc8b74456c7c3de0d4f7f0bbb71d71c46050b8db Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 16 Feb 2026 15:56:37 +0800 Subject: [PATCH 16/51] commit Cargo.lock --- pallets/subtensor/src/tests/networks.rs | 15 ++++-- pallets/subtensor/src/utils/mod.rs | 71 ------------------------- 2 files changed, 12 insertions(+), 74 deletions(-) diff --git a/pallets/subtensor/src/tests/networks.rs b/pallets/subtensor/src/tests/networks.rs index 7e98ccab57..c90e46baa5 100644 --- a/pallets/subtensor/src/tests/networks.rs +++ b/pallets/subtensor/src/tests/networks.rs @@ -767,7 +767,10 @@ fn destroy_alpha_out_multiple_stakers_pro_rata() { let owner_before = SubtensorModule::get_coldkey_balance(&owner_cold); // 7. Run the (now credit-to-coldkey) logic - assert_ok!(SubtensorModule::destroy_alpha_in_out_stakes(netuid)); + SubtensorModule::destroy_alpha_in_out_stakes( + netuid, + Weight::from_parts(u64::MAX, u64::MAX), + ); // 8. Expected τ shares via largest remainder let prod1 = (tao_pot as u128) * a1; @@ -922,7 +925,10 @@ fn destroy_alpha_out_many_stakers_complex_distribution() { let expected_refund = lock.saturating_sub(owner_emission_tao); // ── 6) run distribution (credits τ to coldkeys, wipes α state) ───── - assert_ok!(SubtensorModule::destroy_alpha_in_out_stakes(netuid)); + SubtensorModule::destroy_alpha_in_out_stakes( + netuid, + Weight::from_parts(u64::MAX, u64::MAX), + ); // ── 7) post checks ────────────────────────────────────────────────── for i in 0..N { @@ -1006,7 +1012,10 @@ fn destroy_alpha_out_refund_gating_by_registration_block() { let owner_before = SubtensorModule::get_coldkey_balance(&owner_cold); // Run the path under test - assert_ok!(SubtensorModule::destroy_alpha_in_out_stakes(netuid)); + SubtensorModule::destroy_alpha_in_out_stakes( + netuid, + Weight::from_parts(u64::MAX, u64::MAX), + ); // Owner received their refund… let owner_after = SubtensorModule::get_coldkey_balance(&owner_cold); diff --git a/pallets/subtensor/src/utils/mod.rs b/pallets/subtensor/src/utils/mod.rs index b997605779..a91875da59 100644 --- a/pallets/subtensor/src/utils/mod.rs +++ b/pallets/subtensor/src/utils/mod.rs @@ -6,74 +6,3 @@ pub mod rate_limiting; #[cfg(feature = "try-runtime")] pub mod try_state; pub mod voting_power; - -#[cfg(test)] -mod tests { - - /// Mock weight meter for testing the macro. - struct MockWeightMeter { - limit: u64, - used: u64, - } - - impl MockWeightMeter { - fn with_limit(limit: u64) -> Self { - Self { limit, used: 0 } - } - fn can_consume(&self, weight: u64) -> bool { - self.used.saturating_add(weight) <= self.limit - } - fn consume(&mut self, weight: u64) { - self.used = self.used.saturating_add(weight); - } - fn consumed(&self) -> u64 { - self.used - } - } - - /// Helper: the macro's early return yields u64, so it must be in a fn returning u64. - fn run_with_meter(mut meter: MockWeightMeter) -> u64 { - WeightMeterWrapper!(meter, 10u64); - WeightMeterWrapper!(meter, 20u64); - meter.consumed() - } - - #[test] - fn test_weight_meter_wrapper_consumes_weight() { - let meter = MockWeightMeter::with_limit(100); - let consumed = run_with_meter(meter); - assert_eq!(consumed, 30, "should consume 10 + 20 = 30"); - } - - #[test] - fn test_weight_meter_wrapper_returns_early_when_over_limit() { - let meter = MockWeightMeter::with_limit(15); - let consumed = run_with_meter(meter); - // First block consumes 10, second would need 20 but only 5 remain -> early return - assert_eq!( - consumed, 10, - "should return after first consume when second would exceed limit" - ); - } - - #[test] - fn test_weight_meter_wrapper_body_executes() { - fn helper() -> u64 { - let mut meter = MockWeightMeter::with_limit(100); - WeightMeterWrapper!(meter, 10u64); - meter.consumed() - } - assert_eq!(helper(), 10); - } - - #[test] - fn test_weight_meter_wrapper_body_does_not_execute_when_over_limit() { - let mut meter = MockWeightMeter::with_limit(5); - fn run(meter: &mut MockWeightMeter) -> u64 { - WeightMeterWrapper!(meter, 10u64); - meter.consumed() - } - let consumed = run(&mut meter); - assert_eq!(consumed, 0); - } -} From 08d2d34a4bc26cdcbf79a3d74645fb0b1245af95 Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 16 Feb 2026 17:15:25 +0800 Subject: [PATCH 17/51] optimize some db ops --- pallets/commitments/src/lib.rs | 36 ++++--- pallets/subtensor/src/coinbase/root.rs | 133 +++++++++++++------------ pallets/swap/src/pallet/impls.rs | 15 +-- 3 files changed, 89 insertions(+), 95 deletions(-) diff --git a/pallets/commitments/src/lib.rs b/pallets/commitments/src/lib.rs index 73cdd846ca..5284c3eb68 100644 --- a/pallets/commitments/src/lib.rs +++ b/pallets/commitments/src/lib.rs @@ -24,7 +24,7 @@ use scale_info::prelude::collections::BTreeSet; use sp_runtime::SaturatedConversion; use sp_runtime::{Saturating, Weight, traits::Zero}; use sp_std::{boxed::Box, vec::Vec}; -use subtensor_runtime_common::{NetUid, WeightMeterWrapper}; +use subtensor_runtime_common::{LoopRemovePrefixWithWeightMeter, NetUid, WeightMeterWrapper}; use tle::{ curves::drand::TinyBLS381, stream_ciphers::AESGCMStreamCipherProvider, @@ -570,31 +570,35 @@ impl Pallet { pub fn purge_netuid(netuid: NetUid, remaining_weight: Weight) -> Weight { let mut weight_meter = WeightMeter::with_limit(remaining_weight); - WeightMeterWrapper!( + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get().writes(CommitmentOf::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + CommitmentOf::::clear_prefix(netuid, 1024, None) ); - let _ = CommitmentOf::::clear_prefix(netuid, u32::MAX, None); - WeightMeterWrapper!( + + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get().writes(LastCommitment::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + LastCommitment::::clear_prefix(netuid, 1024, None) ); - let _ = LastCommitment::::clear_prefix(netuid, u32::MAX, None); - WeightMeterWrapper!( + + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get().writes(LastBondsReset::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + LastBondsReset::::clear_prefix(netuid, 1024, None) ); - let _ = LastBondsReset::::clear_prefix(netuid, u32::MAX, None); - WeightMeterWrapper!( + + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get().writes(RevealedCommitments::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + RevealedCommitments::::clear_prefix(netuid, 1024, None) ); - let _ = RevealedCommitments::::clear_prefix(netuid, u32::MAX, None); - WeightMeterWrapper!( + + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get().writes(UsedSpaceOf::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + UsedSpaceOf::::clear_prefix(netuid, 1024, None) ); - let _ = UsedSpaceOf::::clear_prefix(netuid, u32::MAX, None); WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index 3b1970c26d..a0d7fa55f7 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -222,14 +222,6 @@ impl Pallet { dissolved_networks.push(netuid); DissolvedNetworks::::set(dissolved_networks); - // --- Perform the cleanup before removing the network. - // Self::destroy_alpha_in_out_stakes(netuid)?; - // T::SwapInterface::clear_protocol_liquidity(netuid)?; - // T::CommitmentsInterface::purge_netuid(netuid); - - // finalize_all_subnet_root_dividends() - // remove_network() - log::info!("NetworkRemoved( netuid:{netuid:?} )"); // --- Emit the NetworkRemoved event @@ -249,7 +241,7 @@ impl Pallet { SubnetOwner::::remove(netuid); // --- 2. Remove network count. - WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(3)); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetworkN::::remove(netuid); // --- 5. Remove various network-related storages. @@ -257,30 +249,36 @@ impl Pallet { NetworkRegisteredAt::::remove(netuid); // --- 6. Remove incentive mechanism memory. - WeightMeterWrapper!( + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get().writes(Uids::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + Uids::::clear_prefix(netuid, 1024, None) ); - let _ = Uids::::clear_prefix(netuid, u32::MAX, None); - let keys = Keys::::iter_prefix(netuid).collect::>(); let keys_len = keys.len() as u64; - WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(keys_len)); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().reads_writes(keys_len, keys_len) + ); + for (_uid, key) in keys { - WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); IsNetworkMember::::remove(key, netuid); } - let count = Keys::::iter_prefix(netuid).count() as u64; - WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(count)); - let _ = Keys::::clear_prefix(netuid, u32::MAX, None); + LoopRemovePrefixWithWeightMeter!( + weight_meter, + T::DbWeight::get().writes(1), + Keys::::clear_prefix(netuid, 1024, None) + ); // --- 8. Iterate over stored weights and fill the matrix. for (uid_i, weights_i) in Weights::::iter_prefix(NetUidStorageIndex::ROOT) { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); // Create a new vector to hold modified weights. let mut modified_weights = weights_i.clone(); for (subnet_id, weight) in modified_weights.iter_mut() { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); // If the root network had a weight pointing to this netuid, set it to 0 if subnet_id == &u16::from(netuid) { WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); @@ -459,77 +457,80 @@ impl Pallet { LoadedEmission::::remove(netuid); // --- 19. DMAPs where netuid is the FIRST key: clear by prefix. - WeightMeterWrapper!( + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get().writes(BlockAtRegistration::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + BlockAtRegistration::::clear_prefix(netuid, 1024, None) ); - let _ = BlockAtRegistration::::clear_prefix(netuid, u32::MAX, None); - WeightMeterWrapper!( + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get().writes(Axons::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + Axons::::clear_prefix(netuid, 1024, None) ); - let _ = Axons::::clear_prefix(netuid, u32::MAX, None); - WeightMeterWrapper!( + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get().writes(NeuronCertificates::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + Prometheus::::clear_prefix(netuid, 1024, None) ); - let _ = NeuronCertificates::::clear_prefix(netuid, u32::MAX, None); - WeightMeterWrapper!( + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get().writes(Prometheus::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + AlphaDividendsPerSubnet::::clear_prefix(netuid, 1024, None) ); - let _ = Prometheus::::clear_prefix(netuid, u32::MAX, None); - WeightMeterWrapper!( + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get() - .writes(AlphaDividendsPerSubnet::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + PendingChildKeys::::clear_prefix(netuid, 1024, None) ); - let _ = AlphaDividendsPerSubnet::::clear_prefix(netuid, u32::MAX, None); - WeightMeterWrapper!( + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get().writes(PendingChildKeys::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + AssociatedEvmAddress::::clear_prefix(netuid, 1024, None) ); - let _ = PendingChildKeys::::clear_prefix(netuid, u32::MAX, None); - WeightMeterWrapper!( - weight_meter, - T::DbWeight::get() - .writes(AssociatedEvmAddress::::iter_prefix(netuid).count() as u64) - ); - let _ = AssociatedEvmAddress::::clear_prefix(netuid, u32::MAX, None); // Commit-reveal / weights commits (all per-net prefixes): + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); let mechanisms: u8 = MechanismCountCurrent::::get(netuid).into(); + + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(mechanisms as u64)); for subid in 0..mechanisms { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); let netuid_index = Self::get_mechanism_storage_index(netuid, subid.into()); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); LastUpdate::::remove(netuid_index); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); Incentive::::remove(netuid_index); - WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); - WeightMeterWrapper!( + + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get() - .writes(WeightCommits::::iter_prefix(netuid_index).count() as u64) + T::DbWeight::get().writes(1), + WeightCommits::::clear_prefix(netuid_index, 1024, None) ); - let _ = WeightCommits::::clear_prefix(netuid_index, u32::MAX, None); - let _ = TimelockedWeightCommits::::clear_prefix(netuid_index, u32::MAX, None); - WeightMeterWrapper!( + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get() - .writes(CRV3WeightCommits::::iter_prefix(netuid_index).count() as u64) + T::DbWeight::get().writes(1), + TimelockedWeightCommits::::clear_prefix(netuid_index, 1024, None) ); - let _ = CRV3WeightCommits::::clear_prefix(netuid_index, u32::MAX, None); - WeightMeterWrapper!( + + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get() - .writes(CRV3WeightCommitsV2::::iter_prefix(netuid_index).count() as u64) + T::DbWeight::get().writes(1), + CRV3WeightCommits::::clear_prefix(netuid_index, 1024, None) ); - let _ = CRV3WeightCommitsV2::::clear_prefix(netuid_index, u32::MAX, None); - WeightMeterWrapper!( + + LoopRemovePrefixWithWeightMeter!( + weight_meter, + T::DbWeight::get().writes(1), + CRV3WeightCommitsV2::::clear_prefix(netuid_index, 1024, None) + ); + + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get().writes(Weights::::iter_prefix(netuid_index).count() as u64) + T::DbWeight::get().writes(1), + Weights::::clear_prefix(netuid_index, 1024, None) ); - let _ = Weights::::clear_prefix(netuid_index, u32::MAX, None); } WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); @@ -540,12 +541,11 @@ impl Pallet { MechanismEmissionSplit::::remove(netuid); // Last hotkey swap (DMAP where netuid is FIRST key → easy) - WeightMeterWrapper!( + LoopRemovePrefixWithWeightMeter!( weight_meter, - T::DbWeight::get() - .writes(LastHotkeySwapOnNetuid::::iter_prefix(netuid).count() as u64) + T::DbWeight::get().writes(1), + LastHotkeySwapOnNetuid::::clear_prefix(netuid, 1024, None) ); - let _ = LastHotkeySwapOnNetuid::::clear_prefix(netuid, u32::MAX, None); // --- 20. Identity maps across versions (netuid-scoped). if SubnetIdentitiesV3::::contains_key(netuid) { @@ -566,7 +566,10 @@ impl Pallet { }) .map(|(hot, _, _)| hot) .collect(); - WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().reads_writes(read_count, read_count) + ); for hot in to_rm { WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ChildkeyTake::::remove(&hot, netuid); diff --git a/pallets/swap/src/pallet/impls.rs b/pallets/swap/src/pallet/impls.rs index 9e6640303a..d9db04d650 100644 --- a/pallets/swap/src/pallet/impls.rs +++ b/pallets/swap/src/pallet/impls.rs @@ -437,23 +437,10 @@ impl SwapHandler for Pallet { Self::adjust_protocol_liquidity(netuid, tao_delta, alpha_delta) } - // fn is_user_liquidity_enabled(netuid: NetUid) -> bool { - // EnabledUserLiquidity::::get(netuid) - // } - - // fn dissolve_all_liquidity_providers( - // netuid: NetUid, - // remaining_weight: Option, - // ) -> Weight { - // Self::do_dissolve_all_liquidity_providers(netuid, remaining_weight) - // } - - // fn toggle_user_liquidity(netuid: NetUid, enabled: bool) { - // EnabledUserLiquidity::::insert(netuid, enabled) - // } fn clear_protocol_liquidity(netuid: NetUid, remaining_weight: Weight) -> Weight { Self::do_clear_protocol_liquidity(netuid, remaining_weight) } + fn init_swap(netuid: NetUid, maybe_price: Option) { Self::maybe_initialize_palswap(netuid, maybe_price).unwrap_or_default(); } From 50cd88ca7f6a275c47ef273741167b3ce6a50094 Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 16 Feb 2026 18:21:44 +0800 Subject: [PATCH 18/51] add unit test for macro --- common/src/lib.rs | 83 +++++++++++++++++++++ pallets/subtensor/src/staking/claim_root.rs | 7 +- 2 files changed, 88 insertions(+), 2 deletions(-) diff --git a/common/src/lib.rs b/common/src/lib.rs index ec81a874ca..1a94118a5c 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -455,20 +455,103 @@ macro_rules! LoopRemovePrefixWithWeightMeter { return $meter.consumed(); } let result = $body; + $meter.consume($weight * result.backend as u64); if result.maybe_cursor.is_none() { break; } } + $meter.consumed() }}; } #[cfg(test)] mod tests { use super::*; + use frame_support::weights::WeightMeter; + + struct TestBody { + count: u64, + } + + struct TestResult { + backend: u64, + maybe_cursor: Option<()>, + } + + impl TestBody { + fn new(count: u64) -> Self { + Self { count: count } + } + + fn execute(&mut self, number: u64) -> TestResult { + if self.count >= number { + self.count -= number; + TestResult { + backend: number, + maybe_cursor: Some(()), + } + } else { + let tmp = self.count; + self.count = 0; + TestResult { + backend: tmp, + maybe_cursor: None, + } + } + } + } #[test] fn netuid_has_u16_bin_repr() { assert_eq!(NetUid(5).encode(), 5u16.encode()); } + + fn test_weight(remaining_weight: Weight, weight: Weight) -> Weight { + let mut weight_meter = WeightMeter::with_limit(remaining_weight); + WeightMeterWrapper!(weight_meter, weight); + weight_meter.consumed() + } + + fn test_loop( + remaining_weight: Weight, + weight: Weight, + mut body: TestBody, + number: u64, + ) -> Weight { + let mut weight_meter = WeightMeter::with_limit(remaining_weight); + LoopRemovePrefixWithWeightMeter!(weight_meter, weight, body.execute(number)); + weight_meter.consumed() + } + + #[test] + fn test_weight_meter_wrapper() { + let remaining_weight = Weight::from_parts(200, 200); + let used_weight = test_weight(remaining_weight, Weight::from_parts(100, 100)); + assert_eq!(used_weight, Weight::from_parts(100, 100)); + + let used_weight = test_weight(remaining_weight, Weight::from_parts(300, 300)); + assert_eq!(used_weight, Weight::from_parts(0, 0)); + } + + #[test] + fn test_loop_remove_prefix_with_weight_meter() { + // remaining weight matches the body count + let body = TestBody::new(1024); + let remaining_weight = Weight::from_parts(100 * 1024, 100 * 1024); + let used_weight = test_loop(remaining_weight, Weight::from_parts(100, 100), body, 1024); + assert_eq!(used_weight, Weight::from_parts(100, 100) * 1024); + + // remaining weight is less than the body count + let body = TestBody::new(1025); + let remaining_weight = Weight::from_parts(100 * 1024, 100 * 1024); + let used_weight = test_loop(remaining_weight, Weight::from_parts(100, 100), body, 1024); + assert_eq!(used_weight, Weight::from_parts(100, 100) * 1024); + + // remaining weight is more than the body count + let body = TestBody::new(1025); + let remaining_weight = Weight::from_parts(100 * 1024 * 2, 100 * 1024 * 2); + let used_weight = test_loop(remaining_weight, Weight::from_parts(100, 100), body, 1024); + assert_eq!(used_weight, Weight::from_parts(100, 100) * 1025); + } } diff --git a/pallets/subtensor/src/staking/claim_root.rs b/pallets/subtensor/src/staking/claim_root.rs index 24a55163f8..4e84a58626 100644 --- a/pallets/subtensor/src/staking/claim_root.rs +++ b/pallets/subtensor/src/staking/claim_root.rs @@ -406,8 +406,11 @@ impl Pallet { WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); } - WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); - let _ = RootClaimed::::clear_prefix((netuid,), u32::MAX, None); + LoopRemovePrefixWithWeightMeter!( + weight_meter, + T::DbWeight::get().writes(1), + RootClaimed::::clear_prefix((netuid,), u32::MAX, None) + ); weight_meter.consumed() } } From 2dc8630c189c5715ca6709d5d5b28c17b5cca71a Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 16 Feb 2026 18:41:49 +0800 Subject: [PATCH 19/51] cargo clippy --- common/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/lib.rs b/common/src/lib.rs index 1a94118a5c..3e8e56550a 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -481,12 +481,12 @@ mod tests { impl TestBody { fn new(count: u64) -> Self { - Self { count: count } + Self { count } } fn execute(&mut self, number: u64) -> TestResult { if self.count >= number { - self.count -= number; + self.count = self.count.saturating_sub(number); TestResult { backend: number, maybe_cursor: Some(()), From f3eb5bdf4d3c81e8336374c527170313b9099226 Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 16 Feb 2026 18:42:57 +0800 Subject: [PATCH 20/51] commit Cargo.lock --- common/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/lib.rs b/common/src/lib.rs index 3e8e56550a..2d991fffdf 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -451,12 +451,12 @@ macro_rules! WeightMeterWrapper { macro_rules! LoopRemovePrefixWithWeightMeter { ( $meter:expr, $weight:expr, $body:expr ) => {{ loop { - if !$meter.can_consume($weight * 1024) { + if !$meter.can_consume($weight.saturating_mul(1024)) { return $meter.consumed(); } let result = $body; - $meter.consume($weight * result.backend as u64); + $meter.consume($weight.saturating_mul(result.backend as u64)); if result.maybe_cursor.is_none() { break; } From cc033e6f1fa81eb1f5b43e94c94c6486ba81dd7c Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 16 Feb 2026 19:49:55 +0800 Subject: [PATCH 21/51] exclude the dissolved network id when registration --- pallets/subtensor/src/subnets/subnet.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pallets/subtensor/src/subnets/subnet.rs b/pallets/subtensor/src/subnets/subnet.rs index 86462dd06d..4500bea3a9 100644 --- a/pallets/subtensor/src/subnets/subnet.rs +++ b/pallets/subtensor/src/subnets/subnet.rs @@ -53,6 +53,10 @@ impl Pallet { let mut next_netuid = NetUid::from(1); // do not allow creation of root let netuids = Self::get_all_subnet_netuids(); loop { + if DissolvedNetworks::::get().contains(&next_netuid) { + next_netuid = next_netuid.next(); + continue; + } if !netuids.contains(&next_netuid) { break next_netuid; } From 8f2add81cf43c008bceff00f86aef196be352079 Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 16 Feb 2026 22:07:21 +0800 Subject: [PATCH 22/51] fix unit test --- pallets/subtensor/src/coinbase/root.rs | 13 +++++-------- pallets/subtensor/src/staking/claim_root.rs | 7 ++++++- pallets/subtensor/src/tests/claim_root.rs | 14 ++++++++++---- pallets/subtensor/src/tests/mock.rs | 9 +++++++++ 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index a0d7fa55f7..4d3afb21c9 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -215,9 +215,12 @@ impl Pallet { Error::::NetworkAlreadyDissolved ); - // Just remove the network from the added networks. + // Just remove the network from the added networks, it is used to check if the network is existed. NetworksAdded::::remove(netuid); + // Reduce the total networks count. TotalNetworks::::mutate(|n: &mut u16| *n = n.saturating_sub(1)); + // Remove the network owner, to avoid a lots of owner only extrinsics. + SubnetOwner::::remove(netuid); dissolved_networks.push(netuid); DissolvedNetworks::::set(dissolved_networks); @@ -233,10 +236,6 @@ impl Pallet { pub fn remove_network(netuid: NetUid, remaining_weight: Weight) -> Weight { let mut weight_meter = WeightMeter::with_limit(remaining_weight); - // --- 1. Get the owner and remove from SubnetOwner. - WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); - let owner_coldkey: T::AccountId = SubnetOwner::::get(netuid); - WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetOwner::::remove(netuid); @@ -693,9 +692,7 @@ impl Pallet { } // --- Final removal logging. - log::debug!( - "remove_network: netuid={netuid}, owner={owner_coldkey:?} removed successfully" - ); + log::debug!("remove_network: netuid={netuid} removed successfully"); weight_meter.consumed() } diff --git a/pallets/subtensor/src/staking/claim_root.rs b/pallets/subtensor/src/staking/claim_root.rs index 4e84a58626..06962657ac 100644 --- a/pallets/subtensor/src/staking/claim_root.rs +++ b/pallets/subtensor/src/staking/claim_root.rs @@ -132,6 +132,10 @@ impl Pallet { root_claim_type: RootClaimTypeEnum, ignore_minimum_condition: bool, ) { + if DissolvedNetworks::::get().contains(&netuid) { + log::debug!("root claim on subnet {netuid} is skipped, network is dissolved"); + return; // no-op + } // Subtract the root claimed. let owed: I96F32 = Self::get_root_owed_for_hotkey_coldkey_float(hotkey, coldkey, netuid); @@ -393,6 +397,7 @@ impl Pallet { pub fn finalize_all_subnet_root_dividends(netuid: NetUid, remaining_weight: Weight) -> Weight { let mut weight_meter = WeightMeter::with_limit(remaining_weight); WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); + // Iterate directly without collecting to avoid unnecessary allocation for hotkey in RootClaimable::::iter_keys() { WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); @@ -409,7 +414,7 @@ impl Pallet { LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - RootClaimed::::clear_prefix((netuid,), u32::MAX, None) + RootClaimed::::clear_prefix((netuid,), 1024, None) ); weight_meter.consumed() } diff --git a/pallets/subtensor/src/tests/claim_root.rs b/pallets/subtensor/src/tests/claim_root.rs index 9d08c65e3c..6157e36e98 100644 --- a/pallets/subtensor/src/tests/claim_root.rs +++ b/pallets/subtensor/src/tests/claim_root.rs @@ -1,14 +1,16 @@ #![allow(clippy::expect_used)] +use super::mock::run_block_idle; use crate::RootAlphaDividendsPerSubnet; use crate::tests::mock::{ RuntimeOrigin, SubtensorModule, Test, add_dynamic_network, new_test_ext, run_to_block, }; use crate::{ - DefaultMinRootClaimAmount, Error, MAX_NUM_ROOT_CLAIMS, MAX_ROOT_CLAIM_THRESHOLD, NetworksAdded, - NumRootClaim, NumStakingColdkeys, PendingRootAlphaDivs, RootClaimable, RootClaimableThreshold, - StakingColdkeys, StakingColdkeysByIndex, SubnetAlphaIn, SubnetMechanism, SubnetMovingPrice, - SubnetTAO, SubnetTaoFlow, SubtokenEnabled, Tempo, pallet, + DefaultMinRootClaimAmount, DissolvedNetworks, Error, MAX_NUM_ROOT_CLAIMS, + MAX_ROOT_CLAIM_THRESHOLD, NetworksAdded, NumRootClaim, NumStakingColdkeys, + PendingRootAlphaDivs, RootClaimable, RootClaimableThreshold, StakingColdkeys, + StakingColdkeysByIndex, SubnetAlphaIn, SubnetMechanism, SubnetMovingPrice, SubnetTAO, + SubnetTaoFlow, SubtokenEnabled, Tempo, pallet, }; use crate::{RootClaimType, RootClaimTypeEnum, RootClaimed}; use approx::assert_abs_diff_eq; @@ -1387,6 +1389,10 @@ fn test_claim_root_on_network_deregistration() { assert_ok!(SubtensorModule::do_dissolve_network(netuid)); + DissolvedNetworks::::set(vec![netuid]); + + run_block_idle(); + assert!(!RootClaimed::::contains_key(( netuid, &hotkey, &coldkey, ))); diff --git a/pallets/subtensor/src/tests/mock.rs b/pallets/subtensor/src/tests/mock.rs index 36f6d9766b..97fd0de9b8 100644 --- a/pallets/subtensor/src/tests/mock.rs +++ b/pallets/subtensor/src/tests/mock.rs @@ -5,6 +5,7 @@ )] use core::num::NonZeroU64; +use std::u64; use crate::utils::rate_limiting::TransactionType; use crate::*; @@ -688,6 +689,14 @@ pub(crate) fn run_to_block_ext(n: u64, enable_events: bool) { } } +#[allow(dead_code)] +pub(crate) fn run_block_idle() { + SubtensorModule::on_idle( + System::block_number(), + Weight::from_parts(u64::MAX, u64::MAX), + ); +} + #[allow(dead_code)] pub(crate) fn next_block_no_epoch(netuid: NetUid) -> u64 { // high tempo to skip automatic epochs in on_initialize From cbc441b8ce69d5a9ac721013790b1eaed45b018f Mon Sep 17 00:00:00 2001 From: open-junius Date: Wed, 25 Feb 2026 17:53:15 +0800 Subject: [PATCH 23/51] fix unit test --- pallets/subtensor/src/coinbase/root.rs | 2 -- pallets/subtensor/src/tests/networks.rs | 8 ++++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index 4d3afb21c9..a803f4e9a7 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -219,8 +219,6 @@ impl Pallet { NetworksAdded::::remove(netuid); // Reduce the total networks count. TotalNetworks::::mutate(|n: &mut u16| *n = n.saturating_sub(1)); - // Remove the network owner, to avoid a lots of owner only extrinsics. - SubnetOwner::::remove(netuid); dissolved_networks.push(netuid); DissolvedNetworks::::set(dissolved_networks); diff --git a/pallets/subtensor/src/tests/networks.rs b/pallets/subtensor/src/tests/networks.rs index 02c7aef628..9eee3dee84 100644 --- a/pallets/subtensor/src/tests/networks.rs +++ b/pallets/subtensor/src/tests/networks.rs @@ -90,6 +90,7 @@ fn dissolve_refunds_full_lock_cost_when_no_emission() { let before = SubtensorModule::get_coldkey_balance(&cold); assert_ok!(SubtensorModule::do_dissolve_network(net)); + run_block_idle(); let after = SubtensorModule::get_coldkey_balance(&cold); assert_eq!(TaoCurrency::from(after), TaoCurrency::from(before) + lock); @@ -119,6 +120,7 @@ fn dissolve_single_alpha_out_staker_gets_all_tao() { // Dissolve assert_ok!(SubtensorModule::do_dissolve_network(net)); + run_block_idle(); // Cold-key received full pot let after = SubtensorModule::get_coldkey_balance(&s_cold); @@ -190,6 +192,7 @@ fn dissolve_two_stakers_pro_rata_distribution() { // Dissolve assert_ok!(SubtensorModule::do_dissolve_network(net)); + run_block_idle(); // Cold-keys received their τ shares assert_eq!( @@ -267,6 +270,7 @@ fn dissolve_owner_cut_refund_logic() { let before = SubtensorModule::get_coldkey_balance(&oc); assert_ok!(SubtensorModule::do_dissolve_network(net)); + run_block_idle(); let after = SubtensorModule::get_coldkey_balance(&oc); assert!(after > before); // some refund is expected @@ -460,6 +464,7 @@ fn dissolve_clears_all_per_subnet_storages() { // Dissolve // ------------------------------------------------------------------ assert_ok!(SubtensorModule::do_dissolve_network(net)); + run_block_idle(); // ------------------------------------------------------------------ // Items that must be COMPLETELY REMOVED @@ -647,6 +652,7 @@ fn dissolve_alpha_out_but_zero_tao_no_rewards() { let before = SubtensorModule::get_coldkey_balance(&sc); assert_ok!(SubtensorModule::do_dissolve_network(net)); + run_block_idle(); let after = SubtensorModule::get_coldkey_balance(&sc); // No reward distributed, α-out cleared. @@ -698,6 +704,7 @@ fn dissolve_rounding_remainder_distribution() { // 3. Run full dissolve flow assert_ok!(SubtensorModule::do_dissolve_network(net)); + run_block_idle(); // 4. s1 (larger remainder) should get +1 τ on cold-key let c1_after = SubtensorModule::get_coldkey_balance(&s1c); @@ -1858,6 +1865,7 @@ fn dissolve_clears_all_mechanism_scoped_maps_for_all_mechanisms() { // --- Dissolve the subnet --- assert_ok!(SubtensorModule::do_dissolve_network(net)); + run_block_idle(); // After dissolve, ALL mechanism-scoped items must be cleared for ALL mechanisms. From 21d8e4f48ae998c901e1983d7f6da25d2a2adfe8 Mon Sep 17 00:00:00 2001 From: open-junius Date: Wed, 25 Feb 2026 17:54:14 +0800 Subject: [PATCH 24/51] fix clippy --- pallets/subtensor/src/tests/mock.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/pallets/subtensor/src/tests/mock.rs b/pallets/subtensor/src/tests/mock.rs index 3b4e09c021..79376c8ca7 100644 --- a/pallets/subtensor/src/tests/mock.rs +++ b/pallets/subtensor/src/tests/mock.rs @@ -5,7 +5,6 @@ )] use core::num::NonZeroU64; -use std::u64; use crate::utils::rate_limiting::TransactionType; use crate::*; From f2ed907608f4e3152a1b15925498a9a19a72baf9 Mon Sep 17 00:00:00 2001 From: open-junius Date: Wed, 25 Feb 2026 18:09:44 +0800 Subject: [PATCH 25/51] reduce benchmark for dissolve_network --- pallets/subtensor/src/benchmarks.rs | 31 ----------------------------- 1 file changed, 31 deletions(-) diff --git a/pallets/subtensor/src/benchmarks.rs b/pallets/subtensor/src/benchmarks.rs index e11159fc88..3febd7d2ce 100644 --- a/pallets/subtensor/src/benchmarks.rs +++ b/pallets/subtensor/src/benchmarks.rs @@ -1797,41 +1797,10 @@ mod pallet_benchmarks { // Initialize network Subtensor::::init_new_network(netuid, tempo); - SubtokenEnabled::::insert(netuid, true); - Subtensor::::set_max_allowed_uids(netuid, 256); - Subtensor::::set_network_registration_allowed(netuid, true); - Subtensor::::set_burn(netuid, 1.into()); // Set network owner SubnetOwner::::insert(netuid, coldkey.clone()); - Subtensor::::set_max_registrations_per_block(netuid, 64); - - Subtensor::::set_target_registrations_per_interval(netuid, 64); - - // Add some registrations to make the benchmark realistic - let mut seed: u32 = 2; - for _ in 0..64 { - let hotkey: T::AccountId = account("Hotkey", 0, seed); - let coldkey: T::AccountId = account("Coldkey", 0, seed); - seed += 1; - - let amount_to_be_staked: u64 = 1_000_000; - Subtensor::::add_balance_to_coldkey_account(&coldkey, amount_to_be_staked); - - assert_ok!(Subtensor::::do_burned_registration( - RawOrigin::Signed(coldkey.clone()).into(), - netuid, - hotkey.clone() - )); - } - - // Add some network reserves to make it more realistic - let tao_reserve = TaoCurrency::from(10_000_000_000); - let alpha_in = AlphaCurrency::from(5_000_000_000); - SubnetTAO::::insert(netuid, tao_reserve); - SubnetAlphaIn::::insert(netuid, alpha_in); - #[extrinsic_call] _(RawOrigin::Root, coldkey.clone(), netuid); } From d489382fe456854f38fc88fc401f6e58e5ad7c99 Mon Sep 17 00:00:00 2001 From: open-junius Date: Wed, 25 Feb 2026 18:27:07 +0800 Subject: [PATCH 26/51] fix unit test --- pallets/subtensor/src/coinbase/root.rs | 2 ++ pallets/subtensor/src/staking/remove_stake.rs | 6 +----- scripts/benchmark.sh | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index a803f4e9a7..e238ab8faa 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -215,6 +215,8 @@ impl Pallet { Error::::NetworkAlreadyDissolved ); + // TODO Most of data cleanup is done in the block hook, should we charge the user for this? + // Just remove the network from the added networks, it is used to check if the network is existed. NetworksAdded::::remove(netuid); // Reduce the total networks count. diff --git a/pallets/subtensor/src/staking/remove_stake.rs b/pallets/subtensor/src/staking/remove_stake.rs index dd855d51f0..3e902a1d17 100644 --- a/pallets/subtensor/src/staking/remove_stake.rs +++ b/pallets/subtensor/src/staking/remove_stake.rs @@ -435,11 +435,7 @@ impl Pallet { } pub fn destroy_alpha_in_out_stakes(netuid: NetUid, remaining_weight: Weight) -> Weight { - // 1) Ensure the subnet exists. - if !Self::if_subnet_exist(netuid) { - return Weight::from_parts(0, 0); - } - + // 1) Initialize the weight meter from the remaining weight. let mut meter_weight = WeightMeter::with_limit(remaining_weight); // 2) Owner / lock cost. diff --git a/scripts/benchmark.sh b/scripts/benchmark.sh index 4a1c99a62c..d82a9a5a1f 100755 --- a/scripts/benchmark.sh +++ b/scripts/benchmark.sh @@ -16,6 +16,6 @@ RUNTIME_WASM=./target/production/wbuild/node-subtensor-runtime/node_subtensor_ru --genesis-builder-preset=benchmark \ --wasm-execution=compiled \ --pallet=pallet_subtensor \ - --extrinsic="$EXTRINSIC" \ + --extrinsic="$dissolve_network" \ --steps 50 \ --repeat 5 \ From aabec8c6e8d8de4a046ca0843020953451c8fb26 Mon Sep 17 00:00:00 2001 From: open-junius Date: Wed, 25 Feb 2026 19:24:13 +0800 Subject: [PATCH 27/51] update purge netuid in mock --- pallets/subtensor/src/tests/mock.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pallets/subtensor/src/tests/mock.rs b/pallets/subtensor/src/tests/mock.rs index 79376c8ca7..5e14aec0dd 100644 --- a/pallets/subtensor/src/tests/mock.rs +++ b/pallets/subtensor/src/tests/mock.rs @@ -343,8 +343,8 @@ impl PrivilegeCmp for OriginPrivilegeCmp { pub struct CommitmentsI; impl CommitmentsInterface for CommitmentsI { - fn purge_netuid(_netuid: NetUid, remaining_weight: Weight) -> Weight { - remaining_weight + fn purge_netuid(_netuid: NetUid, _remaining_weight: Weight) -> Weight { + Weight::from(0) } } From 06f5cdc76de98f949e37c01ddb314263857d0936 Mon Sep 17 00:00:00 2001 From: open-junius Date: Wed, 25 Feb 2026 19:31:02 +0800 Subject: [PATCH 28/51] fix bug, missed bonds removal --- pallets/subtensor/src/coinbase/root.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index e238ab8faa..9253157bd4 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -525,6 +525,12 @@ impl Pallet { CRV3WeightCommitsV2::::clear_prefix(netuid_index, 1024, None) ); + LoopRemovePrefixWithWeightMeter!( + weight_meter, + T::DbWeight::get().writes(1), + Bonds::::clear_prefix(netuid_index, 1024, None) + ); + LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), From 203628c3d00ec5d846902e56ead386454fd026e0 Mon Sep 17 00:00:00 2001 From: open-junius Date: Wed, 25 Feb 2026 21:56:31 +0800 Subject: [PATCH 29/51] correct weights for dissolve network --- pallets/subtensor/src/macros/dispatches.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pallets/subtensor/src/macros/dispatches.rs b/pallets/subtensor/src/macros/dispatches.rs index 6330e07d1c..14b7828ac1 100644 --- a/pallets/subtensor/src/macros/dispatches.rs +++ b/pallets/subtensor/src/macros/dispatches.rs @@ -1243,8 +1243,8 @@ mod dispatches { /// The caller must be the owner of the network #[pallet::call_index(61)] #[pallet::weight(Weight::from_parts(119_000_000, 0) - .saturating_add(T::DbWeight::get().reads(6)) - .saturating_add(T::DbWeight::get().writes(31)))] + .saturating_add(T::DbWeight::get().reads(3)) + .saturating_add(T::DbWeight::get().writes(3)))] pub fn dissolve_network( origin: OriginFor, _coldkey: T::AccountId, From 984f14cdfb2133203c8263dbd8c0f43ba84d82a9 Mon Sep 17 00:00:00 2001 From: open-junius Date: Thu, 26 Feb 2026 22:13:02 +0800 Subject: [PATCH 30/51] fix benchmark --- pallets/subtensor/src/macros/dispatches.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pallets/subtensor/src/macros/dispatches.rs b/pallets/subtensor/src/macros/dispatches.rs index 14b7828ac1..48cad8b2a7 100644 --- a/pallets/subtensor/src/macros/dispatches.rs +++ b/pallets/subtensor/src/macros/dispatches.rs @@ -1242,7 +1242,7 @@ mod dispatches { /// Remove a user's subnetwork /// The caller must be the owner of the network #[pallet::call_index(61)] - #[pallet::weight(Weight::from_parts(119_000_000, 0) + #[pallet::weight(Weight::from_parts(28_560_000, 0) .saturating_add(T::DbWeight::get().reads(3)) .saturating_add(T::DbWeight::get().writes(3)))] pub fn dissolve_network( From 936181397eb345a3af35c7608777db0716cd7fe6 Mon Sep 17 00:00:00 2001 From: open-junius Date: Thu, 26 Feb 2026 22:41:33 +0800 Subject: [PATCH 31/51] commit Cargo.lock --- pallets/swap/src/pallet/tests.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/pallets/swap/src/pallet/tests.rs b/pallets/swap/src/pallet/tests.rs index 36f537a5b3..6e931b95bf 100644 --- a/pallets/swap/src/pallet/tests.rs +++ b/pallets/swap/src/pallet/tests.rs @@ -2001,7 +2001,10 @@ fn test_liquidate_v3_removes_positions_ticks_and_state() { // ACT: users-only liquidation then protocol clear assert_ok!(Pallet::::do_dissolve_all_liquidity_providers(netuid)); - assert_ok!(Pallet::::do_clear_protocol_liquidity(netuid)); + Pallet::::do_clear_protocol_liquidity( + netuid, + Weight::from_parts(u64::Max, U64F64::MAX) + ); // ASSERT: positions cleared (both user and protocol) assert_eq!( @@ -2086,7 +2089,7 @@ fn test_liquidate_v3_removes_positions_ticks_and_state() { // // Users-only dissolve, then clear protocol liquidity/state. // assert_ok!(Pallet::::do_dissolve_all_liquidity_providers(netuid)); -// assert_ok!(Pallet::::do_clear_protocol_liquidity(netuid)); +// Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX))); // // ASSERT: positions & ticks gone, state reset // assert_eq!( @@ -2188,8 +2191,8 @@ fn test_liquidate_idempotent() { assert_ok!(Pallet::::do_dissolve_all_liquidity_providers(netuid)); // Now clear protocol liquidity/state—also idempotent. - assert_ok!(Pallet::::do_clear_protocol_liquidity(netuid)); - assert_ok!(Pallet::::do_clear_protocol_liquidity(netuid)); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX))); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX))); // State remains empty assert!( @@ -2297,7 +2300,7 @@ fn liquidate_v3_refunds_user_funds_and_clears_state() { ); // Clear protocol liquidity and V3 state now. - assert_ok!(Pallet::::do_clear_protocol_liquidity(netuid)); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX))); // User position(s) are gone and all V3 state cleared. assert_eq!(Pallet::::count_positions(netuid, &cold), 0); @@ -2359,7 +2362,7 @@ fn refund_alpha_single_provider_exact() { ); // Clear protocol liquidity and V3 state now. - assert_ok!(Pallet::::do_clear_protocol_liquidity(netuid)); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX))); // --- State is cleared. assert!(Ticks::::iter_prefix(netuid).next().is_none()); @@ -2629,7 +2632,7 @@ fn test_dissolve_v3_green_path_refund_tao_stake_alpha_and_clear_state() { } // Now clear protocol liquidity & state and assert full reset. - assert_ok!(Pallet::::do_clear_protocol_liquidity(netuid)); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX))); let protocol_id = Pallet::::protocol_account_id(); assert_eq!(Pallet::::count_positions(netuid, &cold), 0); From 694b833a8f3ceea87766872086a81bbf27f55a5a Mon Sep 17 00:00:00 2001 From: open-junius Date: Thu, 26 Feb 2026 22:42:46 +0800 Subject: [PATCH 32/51] commit Cargo.lock --- pallets/swap/src/pallet/tests.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pallets/swap/src/pallet/tests.rs b/pallets/swap/src/pallet/tests.rs index 6e931b95bf..84108ced02 100644 --- a/pallets/swap/src/pallet/tests.rs +++ b/pallets/swap/src/pallet/tests.rs @@ -2191,8 +2191,7 @@ fn test_liquidate_idempotent() { assert_ok!(Pallet::::do_dissolve_all_liquidity_providers(netuid)); // Now clear protocol liquidity/state—also idempotent. - Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX))); - Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX))); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX)); // State remains empty assert!( @@ -2300,7 +2299,7 @@ fn liquidate_v3_refunds_user_funds_and_clears_state() { ); // Clear protocol liquidity and V3 state now. - Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX))); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX)); // User position(s) are gone and all V3 state cleared. assert_eq!(Pallet::::count_positions(netuid, &cold), 0); From ed7b2e335bca997f64a51e01df29ba1e34a5798e Mon Sep 17 00:00:00 2001 From: open-junius Date: Thu, 26 Feb 2026 22:45:23 +0800 Subject: [PATCH 33/51] commit Cargo.lock --- pallets/swap/src/pallet/tests.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pallets/swap/src/pallet/tests.rs b/pallets/swap/src/pallet/tests.rs index 84108ced02..9de8aa87c4 100644 --- a/pallets/swap/src/pallet/tests.rs +++ b/pallets/swap/src/pallet/tests.rs @@ -2001,10 +2001,7 @@ fn test_liquidate_v3_removes_positions_ticks_and_state() { // ACT: users-only liquidation then protocol clear assert_ok!(Pallet::::do_dissolve_all_liquidity_providers(netuid)); - Pallet::::do_clear_protocol_liquidity( - netuid, - Weight::from_parts(u64::Max, U64F64::MAX) - ); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::MAX, u64::MAX)); // ASSERT: positions cleared (both user and protocol) assert_eq!( @@ -2089,7 +2086,7 @@ fn test_liquidate_v3_removes_positions_ticks_and_state() { // // Users-only dissolve, then clear protocol liquidity/state. // assert_ok!(Pallet::::do_dissolve_all_liquidity_providers(netuid)); -// Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX))); +// Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::MAX, u64::MAX))); // // ASSERT: positions & ticks gone, state reset // assert_eq!( @@ -2191,7 +2188,7 @@ fn test_liquidate_idempotent() { assert_ok!(Pallet::::do_dissolve_all_liquidity_providers(netuid)); // Now clear protocol liquidity/state—also idempotent. - Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX)); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::MAX, u64::MAX)); // State remains empty assert!( @@ -2299,7 +2296,7 @@ fn liquidate_v3_refunds_user_funds_and_clears_state() { ); // Clear protocol liquidity and V3 state now. - Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX)); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::MAX, u64::MAX)); // User position(s) are gone and all V3 state cleared. assert_eq!(Pallet::::count_positions(netuid, &cold), 0); @@ -2361,7 +2358,10 @@ fn refund_alpha_single_provider_exact() { ); // Clear protocol liquidity and V3 state now. - Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX))); + Pallet::::do_clear_protocol_liquidity( + netuid, + Weight::from_parts(u64::MAX, U64F64::MAX), + ); // --- State is cleared. assert!(Ticks::::iter_prefix(netuid).next().is_none()); @@ -2631,7 +2631,7 @@ fn test_dissolve_v3_green_path_refund_tao_stake_alpha_and_clear_state() { } // Now clear protocol liquidity & state and assert full reset. - Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::Max, U64F64::MAX))); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::MAX, u64::MAX)); let protocol_id = Pallet::::protocol_account_id(); assert_eq!(Pallet::::count_positions(netuid, &cold), 0); From 951d04ab54008d7196b9d2c3881d886eb9c6c8af Mon Sep 17 00:00:00 2001 From: open-junius Date: Thu, 26 Feb 2026 22:50:37 +0800 Subject: [PATCH 34/51] commit Cargo.lock --- pallets/swap/src/pallet/tests.rs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/pallets/swap/src/pallet/tests.rs b/pallets/swap/src/pallet/tests.rs index 9de8aa87c4..1ca5881726 100644 --- a/pallets/swap/src/pallet/tests.rs +++ b/pallets/swap/src/pallet/tests.rs @@ -2358,10 +2358,7 @@ fn refund_alpha_single_provider_exact() { ); // Clear protocol liquidity and V3 state now. - Pallet::::do_clear_protocol_liquidity( - netuid, - Weight::from_parts(u64::MAX, U64F64::MAX), - ); + Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::MAX, u64::MAX)); // --- State is cleared. assert!(Ticks::::iter_prefix(netuid).next().is_none()); @@ -2731,7 +2728,6 @@ fn test_clear_protocol_liquidity_green_path() { assert!(!EnabledUserLiquidity::::contains_key(netuid)); // --- And it's idempotent --- - assert!(!PalSwapInitialized::::contains_key(netuid)); Pallet::::do_clear_protocol_liquidity(netuid, Weight::from_parts(u64::MAX, u64::MAX)); assert!( From 453db3fb42ec1911f50a3c9c97a797ad1601795a Mon Sep 17 00:00:00 2001 From: open-junius Date: Fri, 27 Feb 2026 00:31:14 +0800 Subject: [PATCH 35/51] fix unit test --- pallets/subtensor/src/tests/networks.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/pallets/subtensor/src/tests/networks.rs b/pallets/subtensor/src/tests/networks.rs index b13ed9e6d3..4923d83682 100644 --- a/pallets/subtensor/src/tests/networks.rs +++ b/pallets/subtensor/src/tests/networks.rs @@ -2045,6 +2045,7 @@ fn massive_dissolve_refund_and_reregistration_flow_is_lossless_and_cleans_state( for &net in nets.iter() { assert_ok!(SubtensorModule::do_dissolve_network(net)); } + run_block_idle(); // ──────────────────────────────────────────────────────────────────── // 7) Assertions: τ balances, α gone, nets removed, swap state clean From a8616726a0d12ad3da71d67b5fcd8f41dc33109c Mon Sep 17 00:00:00 2001 From: open-junius Date: Fri, 27 Feb 2026 17:17:03 +0800 Subject: [PATCH 36/51] add subnet exist check in admin util --- pallets/admin-utils/src/lib.rs | 53 +++++++++++++++++++++++++ pallets/subtensor/src/tests/networks.rs | 53 +++++++++++++++++++++++++ 2 files changed, 106 insertions(+) diff --git a/pallets/admin-utils/src/lib.rs b/pallets/admin-utils/src/lib.rs index 654f7207b8..86f5fbd166 100644 --- a/pallets/admin-utils/src/lib.rs +++ b/pallets/admin-utils/src/lib.rs @@ -655,6 +655,11 @@ pub mod pallet { registration_allowed: bool, ) -> DispatchResult { ensure_root(origin)?; + + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::Pallet::::set_network_registration_allowed( netuid, registration_allowed, @@ -1258,6 +1263,10 @@ pub mod pallet { netuid, &[Hyperparameter::LiquidAlphaEnabled.into()], )?; + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::Pallet::::ensure_admin_window_open(netuid)?; pallet_subtensor::Pallet::::set_liquid_alpha_enabled(netuid, enabled); log::debug!("LiquidAlphaEnableToggled( netuid: {netuid:?}, Enabled: {enabled:?} ) "); @@ -1285,6 +1294,10 @@ pub mod pallet { netuid, &[Hyperparameter::AlphaValues.into()], )?; + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::Pallet::::ensure_admin_window_open(netuid)?; let res = pallet_subtensor::Pallet::::do_set_alpha_values( origin, netuid, alpha_low, alpha_high, @@ -1458,6 +1471,10 @@ pub mod pallet { netuid, &[Hyperparameter::TransferEnabled.into()], )?; + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::Pallet::::ensure_admin_window_open(netuid)?; let res = pallet_subtensor::Pallet::::toggle_transfer(netuid, toggle); if res.is_ok() { @@ -1493,6 +1510,10 @@ pub mod pallet { netuid, &[Hyperparameter::RecycleOrBurn.into()], )?; + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::Pallet::::ensure_admin_window_open(netuid)?; pallet_subtensor::Pallet::::set_recycle_or_burn(netuid, recycle_or_burn); @@ -1604,6 +1625,10 @@ pub mod pallet { ema_halving: u64, ) -> DispatchResult { ensure_root(origin)?; + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::EMAPriceHalvingBlocks::::set(netuid, ema_halving); log::debug!( @@ -1688,6 +1713,10 @@ pub mod pallet { netuid, &[Hyperparameter::Yuma3Enabled.into()], )?; + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::Pallet::::ensure_admin_window_open(netuid)?; pallet_subtensor::Pallet::::set_yuma3_enabled(netuid, enabled); @@ -1724,6 +1753,10 @@ pub mod pallet { netuid, &[Hyperparameter::BondsResetEnabled.into()], )?; + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::Pallet::::ensure_admin_window_open(netuid)?; pallet_subtensor::Pallet::::set_bonds_reset(netuid, enabled); @@ -1839,6 +1872,10 @@ pub mod pallet { netuid, &[Hyperparameter::ImmuneNeuronLimit.into()], )?; + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::Pallet::::ensure_admin_window_open(netuid)?; pallet_subtensor::Pallet::::set_owner_immune_neuron_limit(netuid, immune_neurons)?; pallet_subtensor::Pallet::::record_owner_rl( @@ -1907,6 +1944,10 @@ pub mod pallet { netuid, &[TransactionType::MechanismCountUpdate], )?; + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::Pallet::::ensure_admin_window_open(netuid)?; pallet_subtensor::Pallet::::do_set_mechanism_count(netuid, mechanism_count)?; @@ -1934,6 +1975,10 @@ pub mod pallet { netuid, &[TransactionType::MechanismEmission], )?; + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::Pallet::::ensure_admin_window_open(netuid)?; pallet_subtensor::Pallet::::do_set_emission_split(netuid, maybe_split)?; @@ -1965,6 +2010,10 @@ pub mod pallet { netuid, &[TransactionType::MaxUidsTrimming], )?; + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::Pallet::::ensure_admin_window_open(netuid)?; pallet_subtensor::Pallet::::trim_to_max_allowed_uids(netuid, max_n)?; @@ -2090,6 +2139,10 @@ pub mod pallet { min: u16, ) -> DispatchResult { ensure_root(origin)?; + ensure!( + pallet_subtensor::Pallet::::if_subnet_exist(netuid), + Error::::SubnetDoesNotExist + ); pallet_subtensor::Pallet::::set_min_non_immune_uids(netuid, min); Ok(()) } diff --git a/pallets/subtensor/src/tests/networks.rs b/pallets/subtensor/src/tests/networks.rs index 4923d83682..0fe0df0331 100644 --- a/pallets/subtensor/src/tests/networks.rs +++ b/pallets/subtensor/src/tests/networks.rs @@ -66,6 +66,34 @@ fn dissolve_no_stakers_no_alpha_no_emission() { }); } +#[test] +fn dissolve_defers_cleanup_until_on_idle() { + new_test_ext(0).execute_with(|| { + let owner_cold = U256::from(11); + let owner_hot = U256::from(12); + let net = add_dynamic_network(&owner_hot, &owner_cold); + + assert!(SubnetOwner::::contains_key(net)); + assert!(NetworkRegisteredAt::::contains_key(net)); + assert!(!DissolvedNetworks::::get().contains(&net)); + + assert_ok!(SubtensorModule::do_dissolve_network(net)); + + // Network is no longer considered "existing" but data is not cleaned yet. + assert!(!SubtensorModule::if_subnet_exist(net)); + assert!(DissolvedNetworks::::get().contains(&net)); + assert!(SubnetOwner::::contains_key(net)); + assert!(NetworkRegisteredAt::::contains_key(net)); + + // Cleanup happens in on_idle. + run_block_idle(); + + assert!(!SubnetOwner::::contains_key(net)); + assert!(!NetworkRegisteredAt::::contains_key(net)); + assert!(!DissolvedNetworks::::get().contains(&net)); + }); +} + #[test] fn dissolve_refunds_full_lock_cost_when_no_emission() { new_test_ext(0).execute_with(|| { @@ -1424,6 +1452,31 @@ fn register_network_prunes_and_recycles_netuid() { }); } +#[test] +fn register_network_skips_dissolved_netuid() { + new_test_ext(0).execute_with(|| { + let dissolved = NetUid::from(1); + DissolvedNetworks::::put(vec![dissolved]); + + let cold = U256::from(60); + let hot = U256::from(61); + let needed: u64 = SubtensorModule::get_network_lock_cost().into(); + SubtensorModule::add_balance_to_coldkey_account(&cold, needed.saturating_mul(10)); + + assert_ok!(SubtensorModule::do_register_network( + RuntimeOrigin::signed(cold), + &hot, + 1, + None, + )); + + assert!(!NetworksAdded::::get(dissolved)); + let expected = NetUid::from(2); + assert!(NetworksAdded::::get(expected)); + assert_eq!(SubnetOwner::::get(expected), cold); + }); +} + #[test] fn register_network_fails_before_prune_keeps_existing() { new_test_ext(0).execute_with(|| { From b8eac0cc56bf17ac50aa7fc0cc30c32eab9ea146 Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 2 Mar 2026 13:50:47 +0800 Subject: [PATCH 37/51] add netuid exist check --- runtime/src/lib.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index c2aa1190d3..104415335c 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -959,7 +959,8 @@ pub struct AllowCommitments; impl CanCommit for AllowCommitments { #[cfg(not(feature = "runtime-benchmarks"))] fn can_commit(netuid: NetUid, address: &AccountId) -> bool { - SubtensorModule::is_hotkey_registered_on_network(netuid, address) + SubtensorModule::if_subnet_exist(netuid) + && SubtensorModule::is_hotkey_registered_on_network(netuid, address) } #[cfg(feature = "runtime-benchmarks")] From f40789660193c1de58f8497f9c54c8f817800a63 Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 2 Mar 2026 15:17:21 +0800 Subject: [PATCH 38/51] check all clean up function --- pallets/subtensor/src/staking/claim_root.rs | 1 - pallets/subtensor/src/staking/remove_stake.rs | 8 +++- pallets/swap/src/pallet/impls.rs | 44 ++++++++++++++++--- 3 files changed, 46 insertions(+), 7 deletions(-) diff --git a/pallets/subtensor/src/staking/claim_root.rs b/pallets/subtensor/src/staking/claim_root.rs index 06962657ac..a1a28f0242 100644 --- a/pallets/subtensor/src/staking/claim_root.rs +++ b/pallets/subtensor/src/staking/claim_root.rs @@ -396,7 +396,6 @@ impl Pallet { /// Claim all root dividends for subnet and remove all associated data. pub fn finalize_all_subnet_root_dividends(netuid: NetUid, remaining_weight: Weight) -> Weight { let mut weight_meter = WeightMeter::with_limit(remaining_weight); - WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); // Iterate directly without collecting to avoid unnecessary allocation for hotkey in RootClaimable::::iter_keys() { diff --git a/pallets/subtensor/src/staking/remove_stake.rs b/pallets/subtensor/src/staking/remove_stake.rs index 95bc5420c2..1cac603a80 100644 --- a/pallets/subtensor/src/staking/remove_stake.rs +++ b/pallets/subtensor/src/staking/remove_stake.rs @@ -448,6 +448,7 @@ impl Pallet { WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(1)); let reg_at: u64 = NetworkRegisteredAt::::get(netuid); WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads(1)); + let start_block: u64 = NetworkRegistrationStartBlock::::get(); let should_refund_owner: bool = reg_at < start_block; @@ -583,6 +584,7 @@ impl Pallet { // Credit each share directly to coldkey free balance. for p in portions { if p.share > 0 { + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads_writes(1, 1)); Self::add_balance_to_coldkey_account(&p.cold, p.share); } } @@ -591,6 +593,7 @@ impl Pallet { // 7) Destroy all α-in/α-out state for this subnet. // 7.a) Remove every (hot, cold, netuid) α entry. for (hot, cold) in keys_to_remove { + WeightMeterWrapper!(meter_weight, T::DbWeight::get().writes(1)); Alpha::::remove((hot, cold, netuid)); } // 7.b) Clear share‑pool totals for each hotkey on this subnet. @@ -623,7 +626,10 @@ impl Pallet { }; if !refund.is_zero() { - WeightMeterWrapper!(meter_weight, T::DbWeight::get().writes(1)); + WeightMeterWrapper!( + meter_weight, + T::DbWeight::get().reads(1) + T::DbWeight::get().writes(1) + ); Self::add_balance_to_coldkey_account(&owner_coldkey, refund.to_u64()); } diff --git a/pallets/swap/src/pallet/impls.rs b/pallets/swap/src/pallet/impls.rs index 4c0d3ed25d..e40578fcfb 100644 --- a/pallets/swap/src/pallet/impls.rs +++ b/pallets/swap/src/pallet/impls.rs @@ -20,7 +20,8 @@ use sp_arithmetic::helpers_128bit; use sp_runtime::{DispatchResult, Vec, traits::AccountIdConversion}; use substrate_fixed::types::{I64F64, U64F64, U96F32}; use subtensor_runtime_common::{ - AlphaCurrency, BalanceOps, Currency, CurrencyReserve, NetUid, SubnetInfo, TaoCurrency, + AlphaCurrency, BalanceOps, Currency, CurrencyReserve, LoopRemovePrefixWithWeightMeter, NetUid, + SubnetInfo, TaoCurrency, WeightMeterWrapper, }; use subtensor_swap_interface::{ DefaultPriceLimit, Order as OrderT, SwapEngine, SwapHandler, SwapResult, @@ -957,8 +958,9 @@ impl Pallet { /// Clear **protocol-owned** liquidity and wipe all swap state for `netuid`. pub fn do_clear_protocol_liquidity(netuid: NetUid, remaining_weight: Weight) -> Weight { - let weight_meter = WeightMeter::with_limit(remaining_weight); + let mut weight_meter = WeightMeter::with_limit(remaining_weight); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); let protocol_account = Self::protocol_account_id(); // 1) Force-close only protocol positions, burning proceeds. @@ -976,9 +978,16 @@ impl Pallet { }) .collect(); + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().reads(protocol_pos_ids.len() as u64) + ); + for pos_id in protocol_pos_ids { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads_writes(2, 2)); match Self::do_remove_liquidity(netuid, &protocol_account, pos_id) { Ok(rm) => { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); let alpha_total_from_pool: AlphaCurrency = rm.alpha.saturating_add(rm.fee_alpha); let tao_total_from_pool: TaoCurrency = rm.tao.saturating_add(rm.fee_tao); @@ -1006,22 +1015,47 @@ impl Pallet { // 2) Clear active tick index entries, then all swap state (idempotent even if empty/non‑V3). let active_ticks: sp_std::vec::Vec = Ticks::::iter_prefix(netuid).map(|(ti, _)| ti).collect(); + + WeightMeterWrapper!( + weight_meter, + T::DbWeight::get().reads_writes(active_ticks.len() as u64, active_ticks.len() as u64) + ); for ti in active_ticks { ActiveTickIndexManager::::remove(netuid, ti); } - let _ = Positions::::clear_prefix((netuid,), u32::MAX, None); - let _ = Ticks::::clear_prefix(netuid, u32::MAX, None); + LoopRemovePrefixWithWeightMeter!( + weight_meter, + T::DbWeight::get().writes(1), + Positions::::clear_prefix((netuid,), 1024, None) + ); + LoopRemovePrefixWithWeightMeter!( + weight_meter, + T::DbWeight::get().writes(1), + Ticks::::clear_prefix(netuid, 1024, None) + ); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); FeeGlobalTao::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); FeeGlobalAlpha::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); CurrentLiquidity::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); CurrentTick::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); AlphaSqrtPrice::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SwapV3Initialized::::remove(netuid); - let _ = TickIndexBitmapWords::::clear_prefix((netuid,), u32::MAX, None); + LoopRemovePrefixWithWeightMeter!( + weight_meter, + T::DbWeight::get().writes(1), + TickIndexBitmapWords::::clear_prefix((netuid,), 1024, None) + ); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); FeeRate::::remove(netuid); + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); EnabledUserLiquidity::::remove(netuid); log::debug!( From 0ec605feac1cb15eb663a2d456671867d138aae8 Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 2 Mar 2026 15:46:12 +0800 Subject: [PATCH 39/51] cargo clippy --- pallets/admin-utils/src/tests/mod.rs | 1 + pallets/subtensor/src/staking/remove_stake.rs | 5 +---- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pallets/admin-utils/src/tests/mod.rs b/pallets/admin-utils/src/tests/mod.rs index f87ba31bba..219c1dfdd8 100644 --- a/pallets/admin-utils/src/tests/mod.rs +++ b/pallets/admin-utils/src/tests/mod.rs @@ -1168,6 +1168,7 @@ fn test_sudo_set_liquid_alpha_enabled() { new_test_ext().execute_with(|| { let netuid = NetUid::from(1); let enabled: bool = true; + NetworksAdded::::insert(netuid, true); assert_eq!(!enabled, SubtensorModule::get_liquid_alpha_enabled(netuid)); assert_ok!(AdminUtils::sudo_set_liquid_alpha_enabled( diff --git a/pallets/subtensor/src/staking/remove_stake.rs b/pallets/subtensor/src/staking/remove_stake.rs index 1cac603a80..9418187871 100644 --- a/pallets/subtensor/src/staking/remove_stake.rs +++ b/pallets/subtensor/src/staking/remove_stake.rs @@ -626,10 +626,7 @@ impl Pallet { }; if !refund.is_zero() { - WeightMeterWrapper!( - meter_weight, - T::DbWeight::get().reads(1) + T::DbWeight::get().writes(1) - ); + WeightMeterWrapper!(meter_weight, T::DbWeight::get().reads_writes(1, 1)); Self::add_balance_to_coldkey_account(&owner_coldkey, refund.to_u64()); } From f30093ea733b010b7bf8919869a1cab457c422b6 Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 2 Mar 2026 15:52:54 +0800 Subject: [PATCH 40/51] fix unit test --- pallets/admin-utils/src/lib.rs | 2 ++ pallets/admin-utils/src/tests/mod.rs | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pallets/admin-utils/src/lib.rs b/pallets/admin-utils/src/lib.rs index 86f5fbd166..0b63bf8500 100644 --- a/pallets/admin-utils/src/lib.rs +++ b/pallets/admin-utils/src/lib.rs @@ -2010,10 +2010,12 @@ pub mod pallet { netuid, &[TransactionType::MaxUidsTrimming], )?; + ensure!( pallet_subtensor::Pallet::::if_subnet_exist(netuid), Error::::SubnetDoesNotExist ); + pallet_subtensor::Pallet::::ensure_admin_window_open(netuid)?; pallet_subtensor::Pallet::::trim_to_max_allowed_uids(netuid, max_n)?; diff --git a/pallets/admin-utils/src/tests/mod.rs b/pallets/admin-utils/src/tests/mod.rs index 219c1dfdd8..c3e5ac717f 100644 --- a/pallets/admin-utils/src/tests/mod.rs +++ b/pallets/admin-utils/src/tests/mod.rs @@ -2750,7 +2750,7 @@ fn test_trim_to_max_allowed_uids() { NetUid::from(42), new_max_n ), - pallet_subtensor::Error::::SubnetNotExists + Error::::SubnetDoesNotExist ); // New max n less than lower bound From 9cca3c64852b9b397a8d02a6bddff0384164e37f Mon Sep 17 00:00:00 2001 From: open-junius Date: Tue, 3 Mar 2026 12:11:19 +0800 Subject: [PATCH 41/51] increase balance diff --- contract-tests/package.json | 1 + contract-tests/test/crowdloan.precompile.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/contract-tests/package.json b/contract-tests/package.json index 3acf069c1d..ac78b06b02 100644 --- a/contract-tests/package.json +++ b/contract-tests/package.json @@ -12,6 +12,7 @@ "@polkadot-labs/hdkd": "^0.0.25", "@polkadot-labs/hdkd-helpers": "^0.0.25", "@polkadot/api": "^16.4.6", + "@polkadot/util": "^14.0.1", "@polkadot/util-crypto": "^14.0.1", "@types/mocha": "^10.0.10", "dotenv": "17.2.1", diff --git a/contract-tests/test/crowdloan.precompile.test.ts b/contract-tests/test/crowdloan.precompile.test.ts index 70c93ca5f4..a15704790b 100644 --- a/contract-tests/test/crowdloan.precompile.test.ts +++ b/contract-tests/test/crowdloan.precompile.test.ts @@ -139,7 +139,7 @@ describe("Test Crowdloan precompile", () => { await tx.wait(); let balanceAfter = await api.query.System.Account.getValue(convertH160ToSS58(wallet1.address)); - assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(contribution) < 1_000_000); + assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(contribution) < 20_000_000); crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -189,7 +189,7 @@ describe("Test Crowdloan precompile", () => { await tx.wait(); let balanceAfter = await api.query.System.Account.getValue(convertH160ToSS58(wallet1.address)); - assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(deposit) < 1_000_000); + assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(deposit) < 20_000_000); let crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); From 3c524f86edf9e8e28b4fcb3173ffd84c33c90624 Mon Sep 17 00:00:00 2001 From: open-junius Date: Tue, 3 Mar 2026 14:09:55 +0800 Subject: [PATCH 42/51] update yarn lock file --- contract-tests/yarn.lock | 2187 ++++++++++++++++++++------------------ scripts/benchmark.sh | 2 +- 2 files changed, 1167 insertions(+), 1022 deletions(-) diff --git a/contract-tests/yarn.lock b/contract-tests/yarn.lock index 080ecb1325..ef52e6be10 100644 --- a/contract-tests/yarn.lock +++ b/contract-tests/yarn.lock @@ -2,55 +2,180 @@ # yarn lockfile v1 -"@adraffy/ens-normalize@^1.10.1", "@adraffy/ens-normalize@^1.11.0": - version "1.11.1" - resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz" - integrity sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ== - "@adraffy/ens-normalize@1.10.1": version "1.10.1" - resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== +"@adraffy/ens-normalize@^1.10.1", "@adraffy/ens-normalize@^1.11.0": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.11.1.tgz#6c2d657d4b2dfb37f8ea811dcb3e60843d4ac24a" + integrity sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ== + "@babel/code-frame@^7.26.2": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz" - integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== dependencies: - "@babel/helper-validator-identifier" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/helper-validator-identifier@^7.27.1": +"@babel/helper-validator-identifier@^7.28.5": version "7.28.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== "@commander-js/extra-typings@^14.0.0": version "14.0.0" - resolved "https://registry.npmjs.org/@commander-js/extra-typings/-/extra-typings-14.0.0.tgz" + resolved "https://registry.yarnpkg.com/@commander-js/extra-typings/-/extra-typings-14.0.0.tgz#a48b73e8e9c80d5c7538d361f9c1fb9b231643d7" integrity sha512-hIn0ncNaJRLkZrxBIp5AsW/eXEHNKYQBh0aPdoUqNgD+Io3NIykQqpKFyKcuasZhicGaEZJX/JBSIkZ4e5x8Dg== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@esbuild/aix-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz#80fcbe36130e58b7670511e888b8e88a259ed76c" + integrity sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA== + +"@esbuild/android-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz#8aa4965f8d0a7982dc21734bf6601323a66da752" + integrity sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg== + +"@esbuild/android-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz#300712101f7f50f1d2627a162e6e09b109b6767a" + integrity sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg== + +"@esbuild/android-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz#87dfb27161202bdc958ef48bb61b09c758faee16" + integrity sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg== + "@esbuild/darwin-arm64@0.25.12": version "0.25.12" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz#79197898ec1ff745d21c071e1c7cc3c802f0c1fd" integrity sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg== +"@esbuild/darwin-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz#146400a8562133f45c4d2eadcf37ddd09718079e" + integrity sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA== + +"@esbuild/freebsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz#1c5f9ba7206e158fd2b24c59fa2d2c8bb47ca0fe" + integrity sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg== + +"@esbuild/freebsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz#ea631f4a36beaac4b9279fa0fcc6ca29eaeeb2b3" + integrity sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ== + +"@esbuild/linux-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz#e1066bce58394f1b1141deec8557a5f0a22f5977" + integrity sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ== + +"@esbuild/linux-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz#452cd66b20932d08bdc53a8b61c0e30baf4348b9" + integrity sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw== + +"@esbuild/linux-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz#b24f8acc45bcf54192c7f2f3be1b53e6551eafe0" + integrity sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA== + +"@esbuild/linux-loong64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz#f9cfffa7fc8322571fbc4c8b3268caf15bd81ad0" + integrity sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng== + +"@esbuild/linux-mips64el@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz#575a14bd74644ffab891adc7d7e60d275296f2cd" + integrity sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw== + +"@esbuild/linux-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz#75b99c70a95fbd5f7739d7692befe60601591869" + integrity sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA== + +"@esbuild/linux-riscv64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz#2e3259440321a44e79ddf7535c325057da875cd6" + integrity sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w== + +"@esbuild/linux-s390x@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz#17676cabbfe5928da5b2a0d6df5d58cd08db2663" + integrity sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg== + +"@esbuild/linux-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz#0583775685ca82066d04c3507f09524d3cd7a306" + integrity sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw== + +"@esbuild/netbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz#f04c4049cb2e252fe96b16fed90f70746b13f4a4" + integrity sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg== + +"@esbuild/netbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz#77da0d0a0d826d7c921eea3d40292548b258a076" + integrity sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ== + +"@esbuild/openbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz#6296f5867aedef28a81b22ab2009c786a952dccd" + integrity sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A== + +"@esbuild/openbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz#f8d23303360e27b16cf065b23bbff43c14142679" + integrity sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw== + +"@esbuild/openharmony-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz#49e0b768744a3924be0d7fd97dd6ce9b2923d88d" + integrity sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg== + +"@esbuild/sunos-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz#a6ed7d6778d67e528c81fb165b23f4911b9b13d6" + integrity sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w== + +"@esbuild/win32-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz#9ac14c378e1b653af17d08e7d3ce34caef587323" + integrity sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg== + +"@esbuild/win32-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz#918942dcbbb35cc14fca39afb91b5e6a3d127267" + integrity sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ== + +"@esbuild/win32-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz#9bdad8176be7811ad148d1f8772359041f46c6c5" + integrity sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA== + "@ethereumjs/rlp@^10.0.0": - version "10.1.0" - resolved "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-10.1.0.tgz" - integrity sha512-r67BJbwilammAqYI4B5okA66cNdTlFzeWxPNJOolKV52ZS/flo0tUBf4x4gxWXBgh48OgsdFV1Qp5pRoSe8IhQ== + version "10.1.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-10.1.1.tgz#c8a752a5ab27a9b6c22c45230e41e4fbb5959a6b" + integrity sha512-jbnWTEwcpoY+gE0r+wxfDG9zgiu54DcTcwnc9sX3DsqKR4l5K7x2V8mQL3Et6hURa4DuT9g7z6ukwpBLFchszg== "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -62,7 +187,7 @@ "@jridgewell/gen-mapping@^0.3.2": version "0.3.13" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" @@ -70,167 +195,133 @@ "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": version "1.5.5" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== -"@jridgewell/trace-mapping@^0.3.24": - version "0.3.31" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz" - integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/trace-mapping@^0.3.24": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@noble/ciphers@^1.3.0": version "1.3.0" - resolved "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.3.0.tgz#f64b8ff886c240e644e5573c097f86e5b43676dc" integrity sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw== -"@noble/curves@^1.3.0", "@noble/curves@^1.6.0", "@noble/curves@~1.9.0", "@noble/curves@~1.9.2": - version "1.9.7" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz" - integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw== - dependencies: - "@noble/hashes" "1.8.0" - -"@noble/curves@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz" - integrity sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw== - dependencies: - "@noble/hashes" "2.0.1" - -"@noble/curves@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz" - integrity sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw== - dependencies: - "@noble/hashes" "2.0.1" - -"@noble/curves@~1.8.1": - version "1.8.2" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz" - integrity sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g== - dependencies: - "@noble/hashes" "1.7.2" - -"@noble/curves@~2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz" - integrity sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw== - dependencies: - "@noble/hashes" "2.0.1" - "@noble/curves@1.2.0": version "1.2.0" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== dependencies: "@noble/hashes" "1.3.2" "@noble/curves@1.8.1": version "1.8.1" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== dependencies: "@noble/hashes" "1.7.1" "@noble/curves@1.9.1": version "1.9.1" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.1.tgz#9654a0bc6c13420ae252ddcf975eaf0f58f0a35c" integrity sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA== dependencies: "@noble/hashes" "1.8.0" -"@noble/hashes@^1.3.1": - version "1.8.0" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz" - integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== - -"@noble/hashes@^1.3.3", "@noble/hashes@~1.8.0": - version "1.8.0" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz" - integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== - -"@noble/hashes@^1.5.0": - version "1.8.0" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz" - integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== - -"@noble/hashes@^1.8.0", "@noble/hashes@1.8.0": - version "1.8.0" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz" - integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== +"@noble/curves@^1.3.0", "@noble/curves@^1.6.0", "@noble/curves@~1.9.0", "@noble/curves@~1.9.2": + version "1.9.7" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.7.tgz#79d04b4758a43e4bca2cbdc62e7771352fa6b951" + integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw== + dependencies: + "@noble/hashes" "1.8.0" -"@noble/hashes@^2.0.0", "@noble/hashes@^2.0.1", "@noble/hashes@~2.0.0", "@noble/hashes@2.0.1": +"@noble/curves@^2.0.0", "@noble/curves@^2.0.1", "@noble/curves@~2.0.0": version "2.0.1" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz" - integrity sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw== - -"@noble/hashes@~1.7.1", "@noble/hashes@1.7.1": - version "1.7.1" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz" - integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-2.0.1.tgz#64ba8bd5e8564a02942655602515646df1cdb3ad" + integrity sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw== + dependencies: + "@noble/hashes" "2.0.1" -"@noble/hashes@~1.8.0": - version "1.8.0" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz" - integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== +"@noble/curves@~1.8.1": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.2.tgz#8f24c037795e22b90ae29e222a856294c1d9ffc7" + integrity sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g== + dependencies: + "@noble/hashes" "1.7.2" "@noble/hashes@1.3.2": version "1.3.2" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== -"@noble/hashes@1.7.2": +"@noble/hashes@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" + integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== + +"@noble/hashes@1.7.2", "@noble/hashes@~1.7.1": version "1.7.2" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== +"@noble/hashes@1.8.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.3.3", "@noble/hashes@^1.5.0", "@noble/hashes@^1.8.0", "@noble/hashes@~1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== + +"@noble/hashes@2.0.1", "@noble/hashes@^2.0.0", "@noble/hashes@^2.0.1", "@noble/hashes@~2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-2.0.1.tgz#fc1a928061d1232b0a52bb754393c37a5216c89e" + integrity sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw== + "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@polkadot-api/cli@0.16.3": - version "0.16.3" - resolved "https://registry.npmjs.org/@polkadot-api/cli/-/cli-0.16.3.tgz" - integrity sha512-s+p3dFw1vOeyMMqhUbt1RFyqPZdR7vg6joS0v9wBvK3qX5xU+QfOOaMxXJ8fl0mJEbwoJnJsvVl4MzjsABaKCg== +"@polkadot-api/cli@0.18.1": + version "0.18.1" + resolved "https://registry.yarnpkg.com/@polkadot-api/cli/-/cli-0.18.1.tgz#ec8f22822df91d72d0d2905e4130f34bc652151d" + integrity sha512-jPa8WSNPZWdy372sBAUnm0nU1XX5mLbmgkOOU39+zpYPSE12mYXyM3r7JuT5IHdAccEJr6qK2DplPFTeNSyq9A== dependencies: "@commander-js/extra-typings" "^14.0.0" - "@polkadot-api/codegen" "0.20.0" - "@polkadot-api/ink-contracts" "0.4.3" + "@polkadot-api/codegen" "0.21.2" + "@polkadot-api/ink-contracts" "0.4.6" "@polkadot-api/json-rpc-provider" "0.0.4" - "@polkadot-api/known-chains" "0.9.15" - "@polkadot-api/legacy-provider" "0.3.6" - "@polkadot-api/metadata-compatibility" "0.4.1" - "@polkadot-api/observable-client" "0.17.0" - "@polkadot-api/polkadot-sdk-compat" "2.3.3" - "@polkadot-api/sm-provider" "0.1.14" - "@polkadot-api/smoldot" "0.3.14" - "@polkadot-api/substrate-bindings" "0.16.5" - "@polkadot-api/substrate-client" "0.4.7" + "@polkadot-api/known-chains" "0.9.18" + "@polkadot-api/legacy-provider" "0.3.8" + "@polkadot-api/metadata-compatibility" "0.4.4" + "@polkadot-api/observable-client" "0.17.3" + "@polkadot-api/polkadot-sdk-compat" "2.4.1" + "@polkadot-api/sm-provider" "0.1.16" + "@polkadot-api/smoldot" "0.3.15" + "@polkadot-api/substrate-bindings" "0.17.0" + "@polkadot-api/substrate-client" "0.5.0" "@polkadot-api/utils" "0.2.0" - "@polkadot-api/wasm-executor" "^0.2.2" - "@polkadot-api/ws-provider" "0.7.4" - "@types/node" "^24.10.1" + "@polkadot-api/wasm-executor" "^0.2.3" + "@polkadot-api/ws-provider" "0.7.5" + "@types/node" "^25.0.10" commander "^14.0.2" - execa "^9.6.0" + execa "^9.6.1" fs.promises.exists "^1.1.4" - ora "^9.0.0" + ora "^9.1.0" read-pkg "^10.0.0" rxjs "^7.8.2" tsc-prog "^2.3.0" @@ -238,162 +329,161 @@ typescript "^5.9.3" write-package "^7.2.0" -"@polkadot-api/codegen@0.20.0": - version "0.20.0" - resolved "https://registry.npmjs.org/@polkadot-api/codegen/-/codegen-0.20.0.tgz" - integrity sha512-akwPArm35UZcebUFtTKcEkdBLCjYyKweGw3/tT04p/EtM4OsQ1FxhRdXZ51ScBC3JVGCFQTUO2hNsd1E6YXvlw== +"@polkadot-api/codegen@0.21.2": + version "0.21.2" + resolved "https://registry.yarnpkg.com/@polkadot-api/codegen/-/codegen-0.21.2.tgz#805d33a2c474b5edbd38fe10933e329df75cf098" + integrity sha512-e1Of2TfB13YndPQ71WrtOIPfRrSlkG6wGprP8/VHC484kkt2JPDOY+io3NdPWkafDblDQ47aG0368sxT+4RSZA== dependencies: - "@polkadot-api/ink-contracts" "0.4.3" - "@polkadot-api/metadata-builders" "0.13.7" - "@polkadot-api/metadata-compatibility" "0.4.1" - "@polkadot-api/substrate-bindings" "0.16.5" + "@polkadot-api/ink-contracts" "0.4.6" + "@polkadot-api/metadata-builders" "0.13.9" + "@polkadot-api/metadata-compatibility" "0.4.4" + "@polkadot-api/substrate-bindings" "0.17.0" "@polkadot-api/utils" "0.2.0" "@polkadot-api/common-sdk-utils@0.1.0": version "0.1.0" - resolved "https://registry.npmjs.org/@polkadot-api/common-sdk-utils/-/common-sdk-utils-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/common-sdk-utils/-/common-sdk-utils-0.1.0.tgz#01e62f512c9e9bff2c938ecc69f508040521e64c" integrity sha512-cgA9fh8dfBai9b46XaaQmj9vwzyHStQjc/xrAvQksgF6SqvZ0yAfxVqLvGrsz/Xi3dsAdKLg09PybC7MUAMv9w== "@polkadot-api/descriptors@file:.papi/descriptors": - version "0.1.0-autogenerated.5063582544821983772" - resolved "file:.papi/descriptors" + version "0.1.0-autogenerated.13981338386861156638" -"@polkadot-api/ink-contracts@^0.4.1", "@polkadot-api/ink-contracts@>=0.4.0", "@polkadot-api/ink-contracts@0.4.3": - version "0.4.3" - resolved "https://registry.npmjs.org/@polkadot-api/ink-contracts/-/ink-contracts-0.4.3.tgz" - integrity sha512-Wl+4Dxjt0GAl+rADZEgrrqEesqX/xygTpX18TmzmspcKhb9QIZf9FJI8A5Sgtq0TKAOwsd1d/hbHVX3LgbXFXg== +"@polkadot-api/ink-contracts@0.4.6", "@polkadot-api/ink-contracts@^0.4.1": + version "0.4.6" + resolved "https://registry.yarnpkg.com/@polkadot-api/ink-contracts/-/ink-contracts-0.4.6.tgz#fe02da2074712adb7f8832353c7388463e073f45" + integrity sha512-wpFPa8CnGnmq+cFYMzuTEDmtt3ElBM0UWgTz4RpmI9E7knZ1ctWBhO7amXxOWcILqIG6sqWIE95x0cfF1PRcQg== dependencies: - "@polkadot-api/metadata-builders" "0.13.7" - "@polkadot-api/substrate-bindings" "0.16.5" + "@polkadot-api/metadata-builders" "0.13.9" + "@polkadot-api/substrate-bindings" "0.17.0" "@polkadot-api/utils" "0.2.0" +"@polkadot-api/json-rpc-provider-proxy@0.2.8": + version "0.2.8" + resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.2.8.tgz#3b4c0df61c5e32ab04285284d7032768f43da7af" + integrity sha512-AC5KK4p2IamAQuqR0S3YaiiUDRB2r1pWNrdF0Mntm5XGYEmeiAILBmnFa7gyWwemhkTWPYrK5HCurlGfw2EsDA== + "@polkadot-api/json-rpc-provider-proxy@^0.1.0": version "0.1.0" - resolved "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz#6e191f28e7d0fbbe8b540fc51d12a0adaeba297e" integrity sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg== -"@polkadot-api/json-rpc-provider-proxy@0.2.7": - version "0.2.7" - resolved "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.2.7.tgz" - integrity sha512-+HM4JQXzO2GPUD2++4GOLsmFL6LO8RoLvig0HgCLuypDgfdZMlwd8KnyGHjRnVEHA5X+kvXbk84TDcAXVxTazQ== - -"@polkadot-api/json-rpc-provider@^0.0.1", "@polkadot-api/json-rpc-provider@0.0.1": +"@polkadot-api/json-rpc-provider@0.0.1", "@polkadot-api/json-rpc-provider@^0.0.1": version "0.0.1" - resolved "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz#333645d40ccd9bccfd1f32503f17e4e63e76e297" integrity sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA== "@polkadot-api/json-rpc-provider@0.0.4": version "0.0.4" - resolved "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.4.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.4.tgz#15d0c6a7ec14aa6d0dd64039f931bebea83ffdb3" integrity sha512-9cDijLIxzHOBuq6yHqpqjJ9jBmXrctjc1OFqU+tQrS96adQze3mTIH6DTgfb/0LMrqxzxffz1HQGrIlEH00WrA== -"@polkadot-api/known-chains@0.9.15": - version "0.9.15" - resolved "https://registry.npmjs.org/@polkadot-api/known-chains/-/known-chains-0.9.15.tgz" - integrity sha512-VQGu2Anvnx0y0Ltd6sQB3aYzQFGsaQwf2znh+w4Oflaxln5lsjO/+trpXz/rdrdgyi0iafkhpeho/p/EGBwJ+A== +"@polkadot-api/known-chains@0.9.18": + version "0.9.18" + resolved "https://registry.yarnpkg.com/@polkadot-api/known-chains/-/known-chains-0.9.18.tgz#354f1d07b93a331d0acef31ef29f05e71fe8d628" + integrity sha512-zdU4FA01lXcpNXUiFgSmFKIwDKbTw15KT4U6Zlqo6FPUMZgncVEbbS4dSgVrf+TGw9SDOUjGlEdyTHAiOAG5Tw== -"@polkadot-api/legacy-provider@0.3.6": - version "0.3.6" - resolved "https://registry.npmjs.org/@polkadot-api/legacy-provider/-/legacy-provider-0.3.6.tgz" - integrity sha512-JZQg0HVtBowFKxNrZdnMBKXmeSBD4yFlz6egEpvE97RXRvjaBzTaVuFFhBchngq9YmgFQewuWSoX5XSUW6hcEg== +"@polkadot-api/legacy-provider@0.3.8": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@polkadot-api/legacy-provider/-/legacy-provider-0.3.8.tgz#1e6360657c224e08f934afb2dfd7fc92f039d62e" + integrity sha512-Q747MN/7IUxxXGLWLQfhmSLqFyOLUsUFqQQytlEBjt66ZAv9VwYiHZ8JMBCnMzFuaUpKEWDT62ESKhgXn/hmEQ== dependencies: "@polkadot-api/json-rpc-provider" "0.0.4" "@polkadot-api/raw-client" "0.1.1" - "@polkadot-api/substrate-bindings" "0.16.5" + "@polkadot-api/substrate-bindings" "0.17.0" "@polkadot-api/utils" "0.2.0" "@polkadot-api/logs-provider@0.0.6": version "0.0.6" - resolved "https://registry.npmjs.org/@polkadot-api/logs-provider/-/logs-provider-0.0.6.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/logs-provider/-/logs-provider-0.0.6.tgz#a22f6abf937208cea44c6722a80ce0e6eadfd116" integrity sha512-4WgHlvy+xee1ADaaVf6+MlK/+jGMtsMgAzvbQOJZnP4PfQuagoTqaeayk8HYKxXGphogLlPbD06tANxcb+nvAg== dependencies: "@polkadot-api/json-rpc-provider" "0.0.4" -"@polkadot-api/merkleize-metadata@1.1.27": - version "1.1.27" - resolved "https://registry.npmjs.org/@polkadot-api/merkleize-metadata/-/merkleize-metadata-1.1.27.tgz" - integrity sha512-OdKwOzzrLL0Ju3pQA9LjeQEquMcD+KtLybUAO3fVxwjxD5cyI0RwillGoAIBJvfMaZpNxnxJnD+WzNjRcr7FiQ== +"@polkadot-api/merkleize-metadata@1.1.29": + version "1.1.29" + resolved "https://registry.yarnpkg.com/@polkadot-api/merkleize-metadata/-/merkleize-metadata-1.1.29.tgz#a01a1dbab688c3d8ba7246b26b2f06b30cb50a98" + integrity sha512-z8ivYDdr4xlh50MQ7hLaSVw4VM6EV7gGgd+v/ej09nue0W08NG77zf7pXWeRKgOXe3+hPOSQQRSZT2OlIYRfqA== dependencies: - "@polkadot-api/metadata-builders" "0.13.7" - "@polkadot-api/substrate-bindings" "0.16.5" + "@polkadot-api/metadata-builders" "0.13.9" + "@polkadot-api/substrate-bindings" "0.17.0" "@polkadot-api/utils" "0.2.0" -"@polkadot-api/metadata-builders@0.13.7": - version "0.13.7" - resolved "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.13.7.tgz" - integrity sha512-xwggY8F/gtX7qGzz+jzP3DZvWgBWIIFQhk+r2MJ431CR+tNKeTtzGdwNocVrb9NYTK2naC9ckJS14nrNM6LWLw== +"@polkadot-api/metadata-builders@0.13.9": + version "0.13.9" + resolved "https://registry.yarnpkg.com/@polkadot-api/metadata-builders/-/metadata-builders-0.13.9.tgz#030f585f31bada2c22c9dc8df9207ec57a6ddb5f" + integrity sha512-V2GljT6StuK40pfmO5l53CvgFNgy60Trrv20mOZDCsFU9J82F+a1HYAABDYlRgoZ9d0IDwc+u+vI+RHUJoR4xw== dependencies: - "@polkadot-api/substrate-bindings" "0.16.5" + "@polkadot-api/substrate-bindings" "0.17.0" "@polkadot-api/utils" "0.2.0" "@polkadot-api/metadata-builders@0.3.2": version "0.3.2" - resolved "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz#007f158c9e0546cf79ba440befc0c753ab1a6629" integrity sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg== dependencies: "@polkadot-api/substrate-bindings" "0.6.0" "@polkadot-api/utils" "0.1.0" -"@polkadot-api/metadata-compatibility@0.4.1": - version "0.4.1" - resolved "https://registry.npmjs.org/@polkadot-api/metadata-compatibility/-/metadata-compatibility-0.4.1.tgz" - integrity sha512-mZt4Af6oPXEHAprrckJiSZkWRVf0mqwF+Bm+703rPsezLptQid9AjSzh1hkgIkOrPbg6IhWbmMhbuJVjx9VeQA== +"@polkadot-api/metadata-compatibility@0.4.4": + version "0.4.4" + resolved "https://registry.yarnpkg.com/@polkadot-api/metadata-compatibility/-/metadata-compatibility-0.4.4.tgz#9b035cefdc5d9db48e2fe270278763a93d961943" + integrity sha512-V4ye5d2ns32YC45Fdc/IF9Y7CgM8inzJbmHQ2DCPSNd6omTRLJd81gU9zU88QAqPAcH2gKGnS5UF+wLL2VagSQ== dependencies: - "@polkadot-api/metadata-builders" "0.13.7" - "@polkadot-api/substrate-bindings" "0.16.5" + "@polkadot-api/metadata-builders" "0.13.9" + "@polkadot-api/substrate-bindings" "0.17.0" + +"@polkadot-api/observable-client@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@polkadot-api/observable-client/-/observable-client-0.17.3.tgz#da5b7093ea6f5d9323dc42ce97462a90bd2eca24" + integrity sha512-SJhbMKBIzxNgUUy7ZWflYf/TX9soMqiR2WYyggA7U3DLhgdx4wzFjOSbxCk8RuX9Kf/AmJE4dfleu9HBSCZv6g== + dependencies: + "@polkadot-api/metadata-builders" "0.13.9" + "@polkadot-api/substrate-bindings" "0.17.0" + "@polkadot-api/substrate-client" "0.5.0" + "@polkadot-api/utils" "0.2.0" "@polkadot-api/observable-client@^0.3.0": version "0.3.2" - resolved "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz#fd91efee350595a6e0ecfd3f294cc80de86c0cf7" integrity sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug== dependencies: "@polkadot-api/metadata-builders" "0.3.2" "@polkadot-api/substrate-bindings" "0.6.0" "@polkadot-api/utils" "0.1.0" -"@polkadot-api/observable-client@0.17.0": - version "0.17.0" - resolved "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.17.0.tgz" - integrity sha512-hilb12Fg1JrlM/0nucMT85//EQltB53fmoh7YNBsZMiNpavn/3qGTO4s0JMlC/LBbddYg0nxA+DMkSVlapo7cQ== +"@polkadot-api/pjs-signer@0.6.19": + version "0.6.19" + resolved "https://registry.yarnpkg.com/@polkadot-api/pjs-signer/-/pjs-signer-0.6.19.tgz#7b437194bb96e084e42d7cc25239d78df9803bd0" + integrity sha512-jTHKoanZg9ewupthOczWNb2pici+GK+TBQmp9MwhwGs/3uMD2144aA8VNNBEi8rMxOBZlvKYfGkgjiTEGbBwuQ== dependencies: - "@polkadot-api/metadata-builders" "0.13.7" - "@polkadot-api/substrate-bindings" "0.16.5" - "@polkadot-api/substrate-client" "0.4.7" - "@polkadot-api/utils" "0.2.0" - -"@polkadot-api/pjs-signer@0.6.17": - version "0.6.17" - resolved "https://registry.npmjs.org/@polkadot-api/pjs-signer/-/pjs-signer-0.6.17.tgz" - integrity sha512-bxFtyiNOchV0osh6m+1CaN4tkWF7Mo4IT9XPLZBwSybpHZgwmu2wbhgqBkVL98QMyGzud7NHfrJsTCgFU6jHGg== - dependencies: - "@polkadot-api/metadata-builders" "0.13.7" + "@polkadot-api/metadata-builders" "0.13.9" "@polkadot-api/polkadot-signer" "0.1.6" - "@polkadot-api/signers-common" "0.1.18" - "@polkadot-api/substrate-bindings" "0.16.5" + "@polkadot-api/signers-common" "0.1.20" + "@polkadot-api/substrate-bindings" "0.17.0" "@polkadot-api/utils" "0.2.0" -"@polkadot-api/polkadot-sdk-compat@2.3.3": - version "2.3.3" - resolved "https://registry.npmjs.org/@polkadot-api/polkadot-sdk-compat/-/polkadot-sdk-compat-2.3.3.tgz" - integrity sha512-p30po+iv4trniSJ7UZiIt/rFInvtA9Tzg65EzuRkCaQAnh54a3MPp9w/q+x+SNLEcfzVLvf8LyPnMPOIpKuj5w== +"@polkadot-api/polkadot-sdk-compat@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@polkadot-api/polkadot-sdk-compat/-/polkadot-sdk-compat-2.4.1.tgz#128630be41c8d6025ca391aef7f29bc232ce07cd" + integrity sha512-+sET0N3GpnKkLvsazBZEC5vhqAlamlL1KkJK9STB1tRxHSZcY/yBBa1Udn9DXJfX48kE9cnzfYldl9zsjqpARg== dependencies: "@polkadot-api/json-rpc-provider" "0.0.4" "@polkadot-api/polkadot-signer@0.1.6": version "0.1.6" - resolved "https://registry.npmjs.org/@polkadot-api/polkadot-signer/-/polkadot-signer-0.1.6.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/polkadot-signer/-/polkadot-signer-0.1.6.tgz#6870fd9827b282838a074380ba1a02fb3bdd5e83" integrity sha512-X7ghAa4r7doETtjAPTb50IpfGtrBmy3BJM5WCfNKa1saK04VFY9w+vDn+hwEcM4p0PcDHt66Ts74hzvHq54d9A== "@polkadot-api/raw-client@0.1.1": version "0.1.1" - resolved "https://registry.npmjs.org/@polkadot-api/raw-client/-/raw-client-0.1.1.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/raw-client/-/raw-client-0.1.1.tgz#4b4aac274b3de60f5d838ec5d1b2d8b041cd682d" integrity sha512-HxalpNEo8JCYXfxKM5p3TrK8sEasTGMkGjBNLzD4TLye9IK2smdb5oTvp2yfkU1iuVBdmjr69uif4NaukOYo2g== dependencies: "@polkadot-api/json-rpc-provider" "0.0.4" "@polkadot-api/sdk-ink@^0.5.1": version "0.5.1" - resolved "https://registry.npmjs.org/@polkadot-api/sdk-ink/-/sdk-ink-0.5.1.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/sdk-ink/-/sdk-ink-0.5.1.tgz#a19c5d18e1adcfa2ceb8da07265c1d82d3c828f6" integrity sha512-9pRnghjigivvgq7375hzkoazstvPDbc0YB01Jzw1/MYKcX+YJn1p/H8SAQTWbKlz2ohFgi1nwU52a0bsmKqb/Q== dependencies: "@ethereumjs/rlp" "^10.0.0" @@ -402,48 +492,48 @@ abitype "^1.1.1" viem "^2.37.9" -"@polkadot-api/signer@0.2.11": - version "0.2.11" - resolved "https://registry.npmjs.org/@polkadot-api/signer/-/signer-0.2.11.tgz" - integrity sha512-32tqbJo6JDfc/lHg+nTveeunFRULonWoTQX9xbs70arr/tAyyZfljupdECRK8CVRx1777es/CQO3QVj8EpWtYg== +"@polkadot-api/signer@0.2.13": + version "0.2.13" + resolved "https://registry.yarnpkg.com/@polkadot-api/signer/-/signer-0.2.13.tgz#b84a0028ffd22c669b73f7d57cbcda8e69ae3877" + integrity sha512-XBOtjFsRGETVm/aXeZnsvFcJ1qvtZhRtwUMmpCOBt9s8PWfILaQH/ecOegzda3utNIZGmXXaOoJ5w9Hc/6I3ww== dependencies: "@noble/hashes" "^2.0.1" - "@polkadot-api/merkleize-metadata" "1.1.27" + "@polkadot-api/merkleize-metadata" "1.1.29" "@polkadot-api/polkadot-signer" "0.1.6" - "@polkadot-api/signers-common" "0.1.18" - "@polkadot-api/substrate-bindings" "0.16.5" + "@polkadot-api/signers-common" "0.1.20" + "@polkadot-api/substrate-bindings" "0.17.0" "@polkadot-api/utils" "0.2.0" -"@polkadot-api/signers-common@0.1.18": - version "0.1.18" - resolved "https://registry.npmjs.org/@polkadot-api/signers-common/-/signers-common-0.1.18.tgz" - integrity sha512-UQXuRZoQ+jMolEpIPF0mVXcoqQ/382fHrSOgfK5sIvjeH0HPf4P+s3IwcnwyAdpHY2gdHXYlHd/SAw7Q1gJ4EA== +"@polkadot-api/signers-common@0.1.20": + version "0.1.20" + resolved "https://registry.yarnpkg.com/@polkadot-api/signers-common/-/signers-common-0.1.20.tgz#356098c5062b396875ea2078f095ea2561ba6111" + integrity sha512-v1mrTdRjQOV17riZ8172OsOQ/RJbv1QsEpjwnvxzvdCnjuNpYwtYHZaE+cSdDBb4n1p73XIBMvB/uAK/QFC2JA== dependencies: - "@polkadot-api/metadata-builders" "0.13.7" + "@polkadot-api/metadata-builders" "0.13.9" "@polkadot-api/polkadot-signer" "0.1.6" - "@polkadot-api/substrate-bindings" "0.16.5" + "@polkadot-api/substrate-bindings" "0.17.0" "@polkadot-api/utils" "0.2.0" -"@polkadot-api/sm-provider@0.1.14": - version "0.1.14" - resolved "https://registry.npmjs.org/@polkadot-api/sm-provider/-/sm-provider-0.1.14.tgz" - integrity sha512-QQvoeBSIwnEm8IUhGA6sBU6LNh2v7SOuVOnF77ZD7P5ELTrdmQH2Tcn0W15qGTmTG45b3Z52XsKpuQbIJ7c7XA== +"@polkadot-api/sm-provider@0.1.16": + version "0.1.16" + resolved "https://registry.yarnpkg.com/@polkadot-api/sm-provider/-/sm-provider-0.1.16.tgz#79c369136fb0f740f4f698740586d3762142badf" + integrity sha512-3LEDU7nkgtDx1A6ATHLLm3+nFAY6cdkNA9tGltfDzW0efACrhhfDjNqJdI1qLNY0wDyT1aGdoWr5r+4CckRpXA== dependencies: "@polkadot-api/json-rpc-provider" "0.0.4" - "@polkadot-api/json-rpc-provider-proxy" "0.2.7" + "@polkadot-api/json-rpc-provider-proxy" "0.2.8" -"@polkadot-api/smoldot@>=0.3", "@polkadot-api/smoldot@0.3.14": - version "0.3.14" - resolved "https://registry.npmjs.org/@polkadot-api/smoldot/-/smoldot-0.3.14.tgz" - integrity sha512-eWqO0xFQaKzqY5mRYxYuZcj1IiaLcQP+J38UQyuJgEorm+9yHVEQ/XBWoM83P+Y8TwE5IWTICp1LCVeiFQTGPQ== +"@polkadot-api/smoldot@0.3.15": + version "0.3.15" + resolved "https://registry.yarnpkg.com/@polkadot-api/smoldot/-/smoldot-0.3.15.tgz#d37b64378ab29535a5d2241b06663cf7b5f342ed" + integrity sha512-YyV+ytP8FcmKEgLRV7uXepJ5Y6md/7u2F8HKxmkWytmnGXO1z+umg2pHbOxLGifD9V2NhkPY+awpzErtVIzqAA== dependencies: - "@types/node" "^24.5.2" - smoldot "2.0.39" + "@types/node" "^24.10.1" + smoldot "2.0.40" -"@polkadot-api/substrate-bindings@^0.16.3", "@polkadot-api/substrate-bindings@0.16.5": - version "0.16.5" - resolved "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.16.5.tgz" - integrity sha512-QFgNlBmtLtiUGTCTurxcE6UZrbI2DaQ5/gyIiC2FYfEhStL8tl20b09FRYHcSjY+lxN42Rcf9HVX+MCFWLYlpQ== +"@polkadot-api/substrate-bindings@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-bindings/-/substrate-bindings-0.17.0.tgz#e136159655f2536f871c9c3f2de3e1efcce2e6e8" + integrity sha512-YdbkvG/27N5A94AiKE4soVjDy0Nw74Nn+KD29mUnFmIZvL3fsN/DTYkxvMDVsOuanFXyAIXmzDMoi7iky0fyIw== dependencies: "@noble/hashes" "^2.0.1" "@polkadot-api/utils" "0.2.0" @@ -452,7 +542,7 @@ "@polkadot-api/substrate-bindings@0.6.0": version "0.6.0" - resolved "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz#889b0c3ba19dc95282286506bf6e370a43ce119a" integrity sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw== dependencies: "@noble/hashes" "^1.3.1" @@ -460,51 +550,61 @@ "@scure/base" "^1.1.1" scale-ts "^1.6.0" -"@polkadot-api/substrate-client@^0.1.2", "@polkadot-api/substrate-client@0.1.4": - version "0.1.4" - resolved "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz" - integrity sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A== +"@polkadot-api/substrate-bindings@^0.16.3": + version "0.16.6" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-bindings/-/substrate-bindings-0.16.6.tgz#34bbe78297a270f4e8b1ee0f4e8565312707db7d" + integrity sha512-cATY7HWU5hWd09C1MUEddechq7JT7QAciKL2/N/1wv5rxGcAFyAD9ZtaKBXVI4Aui9RSeGh8KvHdgKFLoozMyQ== dependencies: - "@polkadot-api/json-rpc-provider" "0.0.1" - "@polkadot-api/utils" "0.1.0" + "@noble/hashes" "^2.0.1" + "@polkadot-api/utils" "0.2.0" + "@scure/base" "^2.0.0" + scale-ts "^1.6.1" -"@polkadot-api/substrate-client@0.4.7": - version "0.4.7" - resolved "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.4.7.tgz" - integrity sha512-Mmx9VKincVqfVQmq89gzDk4DN3uKwf8CxoqYvq+EiPUZ1QmMUc7X4QMwG1MXIlYdnm5LSXzn+2Jn8ik8xMgL+w== +"@polkadot-api/substrate-client@0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-client/-/substrate-client-0.5.0.tgz#b1c70c2407340186e66eecd59321911af62fb6bd" + integrity sha512-J+gyZONCak+n6NxADZWtldH+gatYORqEScMAgI9gGu43pHUe7/xNRCqnin0dgDIzmuL3m1ERglF8LR7YhB0nHQ== dependencies: "@polkadot-api/json-rpc-provider" "0.0.4" "@polkadot-api/raw-client" "0.1.1" "@polkadot-api/utils" "0.2.0" +"@polkadot-api/substrate-client@^0.1.2": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz#7a808e5cb85ecb9fa2b3a43945090a6c807430ce" + integrity sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A== + dependencies: + "@polkadot-api/json-rpc-provider" "0.0.1" + "@polkadot-api/utils" "0.1.0" + "@polkadot-api/utils@0.1.0": version "0.1.0" - resolved "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/utils/-/utils-0.1.0.tgz#d36937cdc465c2ea302f3278cf53157340ab33a0" integrity sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA== "@polkadot-api/utils@0.2.0": version "0.2.0" - resolved "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/utils/-/utils-0.2.0.tgz#812d4c4ee282691440aed4b6ddf863651e804444" integrity sha512-nY3i5fQJoAxU4n3bD7Fs208/KR2J95SGfVc58kDjbRYN5a84kWaGEqzjBNtP9oqht49POM8Bm9mbIrkvC1Bzuw== -"@polkadot-api/wasm-executor@^0.2.2": +"@polkadot-api/wasm-executor@^0.2.3": version "0.2.3" - resolved "https://registry.npmjs.org/@polkadot-api/wasm-executor/-/wasm-executor-0.2.3.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-api/wasm-executor/-/wasm-executor-0.2.3.tgz#a77d74bf95dbdec2dfa815b278a78af1cf628635" integrity sha512-B2h1o+Qlo9idpASaHvMSoViB2I5ko5OAfwfhYF8LQDkTADK0B+SeStzNj1Qn+FG34wqTuv7HzBCdjaUgzYINJQ== -"@polkadot-api/ws-provider@0.7.4": - version "0.7.4" - resolved "https://registry.npmjs.org/@polkadot-api/ws-provider/-/ws-provider-0.7.4.tgz" - integrity sha512-mkk2p8wPht+ljU1xULCPMsLpNF7NHuGaufuDCIZZgopALaZpfVFJxc3qa9s6Xv8X3hM+TRoC5WknuD1ykRY99A== +"@polkadot-api/ws-provider@0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@polkadot-api/ws-provider/-/ws-provider-0.7.5.tgz#0fc72f60d4046c4dcbfd6c11b7c4a4e9895f118c" + integrity sha512-2ZLEo0PAFeuOx2DUDkbex85HZMf9lgnmZ8oGB5+NaButIydkoqXy5SHYJNPc45GcZy2tvwzImMZInNMLa5GJhg== dependencies: "@polkadot-api/json-rpc-provider" "0.0.4" - "@polkadot-api/json-rpc-provider-proxy" "0.2.7" + "@polkadot-api/json-rpc-provider-proxy" "0.2.8" "@types/ws" "^8.18.1" - ws "^8.18.3" + ws "^8.19.0" "@polkadot-labs/hdkd-helpers@^0.0.25": version "0.0.25" - resolved "https://registry.npmjs.org/@polkadot-labs/hdkd-helpers/-/hdkd-helpers-0.0.25.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-labs/hdkd-helpers/-/hdkd-helpers-0.0.25.tgz#6f70f4836acc3f821521babd17d52ab1a92ef13a" integrity sha512-GwHayBuyHKfzvGD0vG47NbjFeiK6rRQHQAn1syut9nt0mhXMg4yb3tJ//IyM317qWuDU3HbD2OIp5jKDEQz2/A== dependencies: "@noble/curves" "^2.0.0" @@ -514,149 +614,140 @@ scale-ts "^1.6.1" "@polkadot-labs/hdkd-helpers@~0.0.26": - version "0.0.26" - resolved "https://registry.npmjs.org/@polkadot-labs/hdkd-helpers/-/hdkd-helpers-0.0.26.tgz" - integrity sha512-mp3GCSiOQeh4aPt+DYBQq6UnX/tKgYUH5F75knjW3ATSA90ifEEWWjRan0Bddt4QKYKamaDGadK9GbVREgzQFw== + version "0.0.27" + resolved "https://registry.yarnpkg.com/@polkadot-labs/hdkd-helpers/-/hdkd-helpers-0.0.27.tgz#5478d42826a09c3b5724a6a371debbec2858adeb" + integrity sha512-GTSj/Mw5kwtZbefvq2BhvBnHvs7AY4OnJgppO0kE2S/AuDbD6288C9rmO6qwMNmiNVX8OrYMWaJcs46Mt1UbBw== dependencies: "@noble/curves" "^2.0.1" "@noble/hashes" "^2.0.1" "@scure/base" "^2.0.0" - "@scure/sr25519" "^0.3.0" + "@scure/sr25519" "^1.0.0" scale-ts "^1.6.1" "@polkadot-labs/hdkd@^0.0.25": version "0.0.25" - resolved "https://registry.npmjs.org/@polkadot-labs/hdkd/-/hdkd-0.0.25.tgz" + resolved "https://registry.yarnpkg.com/@polkadot-labs/hdkd/-/hdkd-0.0.25.tgz#cb7725792485ee5dcf0a7a8491dff1989adf5cd3" integrity sha512-+yZJC1TE4ZKdfoILw8nGxu3H/klrYXm9GdVB0kcyQDecq320ThUmM1M4l8d1F/3QD0Nez9NwHi9t5B++OgJU5A== dependencies: "@polkadot-labs/hdkd-helpers" "~0.0.26" -"@polkadot/api-augment@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-16.5.3.tgz" - integrity sha512-9+8YKSS66x9qpWS+ZQ/FSm9P4mgE+icD53oAmeIykriPW2gcSTAiNufLwAjmAJAkOLcqbTD7LPjFW6xFlmtYsA== - dependencies: - "@polkadot/api-base" "16.5.3" - "@polkadot/rpc-augment" "16.5.3" - "@polkadot/types" "16.5.3" - "@polkadot/types-augment" "16.5.3" - "@polkadot/types-codec" "16.5.3" - "@polkadot/util" "^13.5.9" +"@polkadot/api-augment@16.5.4": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-16.5.4.tgz#40084178849c50681b78da1650c55ee2335f2bdf" + integrity sha512-9FTohz13ih458V2JBFjRACKHPqfM6j4bmmTbcSaE7hXcIOYzm4ABFo7xq5osLyvItganjsICErL2vRn2zULycw== + dependencies: + "@polkadot/api-base" "16.5.4" + "@polkadot/rpc-augment" "16.5.4" + "@polkadot/types" "16.5.4" + "@polkadot/types-augment" "16.5.4" + "@polkadot/types-codec" "16.5.4" + "@polkadot/util" "^14.0.1" tslib "^2.8.1" -"@polkadot/api-base@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/api-base/-/api-base-16.5.3.tgz" - integrity sha512-M1+pY6OFQ1uOB73VQMt2JAGq/UVISVQJISqyfjiUllUc0qIzaDMkcZxRqE34Lwaib3fD3RuIpG6dXqCL9rdzJQ== +"@polkadot/api-base@16.5.4": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-16.5.4.tgz#4a81109b24ed348aefa388a568f3266e66a1c691" + integrity sha512-V69v3ieg5+91yRUCG1vFRSLr7V7MvHPvo/QrzleIUu8tPXWldJ0kyXbWKHVNZEpVBA9LpjGvII+MHUW7EaKMNg== dependencies: - "@polkadot/rpc-core" "16.5.3" - "@polkadot/types" "16.5.3" - "@polkadot/util" "^13.5.9" + "@polkadot/rpc-core" "16.5.4" + "@polkadot/types" "16.5.4" + "@polkadot/util" "^14.0.1" rxjs "^7.8.1" tslib "^2.8.1" -"@polkadot/api-derive@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-16.5.3.tgz" - integrity sha512-nMsnSC/N1SK1kNhgh2FhrrR1S8bTVH+3WsuBHFRzl+txKHq232IeIn9LpebSvgZdd77PaKaYBxbhYcNaA8Ypew== - dependencies: - "@polkadot/api" "16.5.3" - "@polkadot/api-augment" "16.5.3" - "@polkadot/api-base" "16.5.3" - "@polkadot/rpc-core" "16.5.3" - "@polkadot/types" "16.5.3" - "@polkadot/types-codec" "16.5.3" - "@polkadot/util" "^13.5.9" - "@polkadot/util-crypto" "^13.5.9" +"@polkadot/api-derive@16.5.4": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-16.5.4.tgz#d4bdbd09af817003a92cdc2cccb5e315cb3c2970" + integrity sha512-0JP2a6CaqTviacHsmnUKF4VLRsKdYOzQCqdL9JpwY/QBz/ZLqIKKPiSRg285EVLf8n/hWdTfxbWqQCsRa5NL+Q== + dependencies: + "@polkadot/api" "16.5.4" + "@polkadot/api-augment" "16.5.4" + "@polkadot/api-base" "16.5.4" + "@polkadot/rpc-core" "16.5.4" + "@polkadot/types" "16.5.4" + "@polkadot/types-codec" "16.5.4" + "@polkadot/util" "^14.0.1" + "@polkadot/util-crypto" "^14.0.1" rxjs "^7.8.1" tslib "^2.8.1" -"@polkadot/api@^16.4.6", "@polkadot/api@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/api/-/api-16.5.3.tgz" - integrity sha512-Ptwo0f5Qonmus7KIklsbFcGTdHtNjbTAwl5GGI8Mp0dmBc7Y/ISJpIJX49UrG6FhW6COMa0ItsU87XIWMRwI/Q== - dependencies: - "@polkadot/api-augment" "16.5.3" - "@polkadot/api-base" "16.5.3" - "@polkadot/api-derive" "16.5.3" - "@polkadot/keyring" "^13.5.9" - "@polkadot/rpc-augment" "16.5.3" - "@polkadot/rpc-core" "16.5.3" - "@polkadot/rpc-provider" "16.5.3" - "@polkadot/types" "16.5.3" - "@polkadot/types-augment" "16.5.3" - "@polkadot/types-codec" "16.5.3" - "@polkadot/types-create" "16.5.3" - "@polkadot/types-known" "16.5.3" - "@polkadot/util" "^13.5.9" - "@polkadot/util-crypto" "^13.5.9" +"@polkadot/api@16.5.4", "@polkadot/api@^16.4.6": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-16.5.4.tgz#d46be46f9f2a26650884fb256dae343692cae536" + integrity sha512-mX1fwtXCBAHXEyZLSnSrMDGP+jfU2rr7GfDVQBz0cBY1nmY8N34RqPWGrZWj8o4DxVu1DQ91sGncOmlBwEl0Qg== + dependencies: + "@polkadot/api-augment" "16.5.4" + "@polkadot/api-base" "16.5.4" + "@polkadot/api-derive" "16.5.4" + "@polkadot/keyring" "^14.0.1" + "@polkadot/rpc-augment" "16.5.4" + "@polkadot/rpc-core" "16.5.4" + "@polkadot/rpc-provider" "16.5.4" + "@polkadot/types" "16.5.4" + "@polkadot/types-augment" "16.5.4" + "@polkadot/types-codec" "16.5.4" + "@polkadot/types-create" "16.5.4" + "@polkadot/types-known" "16.5.4" + "@polkadot/util" "^14.0.1" + "@polkadot/util-crypto" "^14.0.1" eventemitter3 "^5.0.1" rxjs "^7.8.1" tslib "^2.8.1" -"@polkadot/keyring@^13.5.9": - version "13.5.9" - resolved "https://registry.npmjs.org/@polkadot/keyring/-/keyring-13.5.9.tgz" - integrity sha512-bMCpHDN7U8ytxawjBZ89/he5s3AmEZuOdkM/ABcorh/flXNPfyghjFK27Gy4OKoFxX52yJ2sTHR4NxM87GuFXQ== - dependencies: - "@polkadot/util" "13.5.9" - "@polkadot/util-crypto" "13.5.9" - tslib "^2.8.0" - -"@polkadot/networks@^13.5.9", "@polkadot/networks@13.5.9": - version "13.5.9" - resolved "https://registry.npmjs.org/@polkadot/networks/-/networks-13.5.9.tgz" - integrity sha512-nmKUKJjiLgcih0MkdlJNMnhEYdwEml2rv/h59ll2+rAvpsVWMTLCb6Cq6q7UC44+8kiWK2UUJMkFU+3PFFxndA== +"@polkadot/keyring@^14.0.1": + version "14.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-14.0.1.tgz#3937ebfd1da9f1f6cd008b72270d141e459f9c21" + integrity sha512-kHydQPCeTvJrMC9VQO8LPhAhTUxzxfNF1HEknhZDBPPsxP/XpkYsEy/Ln1QzJmQqD5VsgwzLDE6cExbJ2CT9CA== dependencies: - "@polkadot/util" "13.5.9" - "@substrate/ss58-registry" "^1.51.0" + "@polkadot/util" "14.0.1" + "@polkadot/util-crypto" "14.0.1" tslib "^2.8.0" -"@polkadot/networks@14.0.1": +"@polkadot/networks@14.0.1", "@polkadot/networks@^14.0.1": version "14.0.1" - resolved "https://registry.npmjs.org/@polkadot/networks/-/networks-14.0.1.tgz" + resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-14.0.1.tgz#18845225e415b492dda0b1af72e6f5965f004501" integrity sha512-wGlBtXDkusRAj4P7uxfPz80gLO1+j99MLBaQi3bEym2xrFrFhgIWVHOZlBit/1PfaBjhX2Z8XjRxaM2w1p7w2w== dependencies: "@polkadot/util" "14.0.1" "@substrate/ss58-registry" "^1.51.0" tslib "^2.8.0" -"@polkadot/rpc-augment@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-16.5.3.tgz" - integrity sha512-q3Y+b0FSwbYe8Qopd4In+9KCL3eH5QmGVvimX7Z8+cvQ9+h+JUA6TP1bfpWBmYJRKlolaljsBQPBWoubchmxSw== +"@polkadot/rpc-augment@16.5.4": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-16.5.4.tgz#b861d11a987a6e99fd250f6504a91488288d5787" + integrity sha512-j9v3Ttqv/EYGezHtVksGJAFZhE/4F7LUWooOazh/53ATowMby3lZUdwInrK6bpYmG2whmYMw/Fo283fwDroBtQ== dependencies: - "@polkadot/rpc-core" "16.5.3" - "@polkadot/types" "16.5.3" - "@polkadot/types-codec" "16.5.3" - "@polkadot/util" "^13.5.9" + "@polkadot/rpc-core" "16.5.4" + "@polkadot/types" "16.5.4" + "@polkadot/types-codec" "16.5.4" + "@polkadot/util" "^14.0.1" tslib "^2.8.1" -"@polkadot/rpc-core@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-16.5.3.tgz" - integrity sha512-UYEIRhO/1uTz/rpWLwUN9Re3c4fuTs0I9RR8dHKpKsH3jZTs1M3CtqME3NNzpGqApY1xb9tZemU/0GfHjCpeBQ== +"@polkadot/rpc-core@16.5.4": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-16.5.4.tgz#bc390b3faf5e8520cf8e17b5ca6e40b7bef71b40" + integrity sha512-92LOSTWujPjtmKOPvfCPs8rAaPFU+18wTtkIzwPwKxvxkN/SWsYSGIxmsoags9ramyHB6jp7Lr59TEuGMxIZzQ== dependencies: - "@polkadot/rpc-augment" "16.5.3" - "@polkadot/rpc-provider" "16.5.3" - "@polkadot/types" "16.5.3" - "@polkadot/util" "^13.5.9" + "@polkadot/rpc-augment" "16.5.4" + "@polkadot/rpc-provider" "16.5.4" + "@polkadot/types" "16.5.4" + "@polkadot/util" "^14.0.1" rxjs "^7.8.1" tslib "^2.8.1" -"@polkadot/rpc-provider@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-16.5.3.tgz" - integrity sha512-O7hD82HwjT4XJ4i/G58B52RSDM7arHXSpzahZKz4/wtb4x6d6b4JVdfZoskInadARFi5RwIWCrftwPtpRH81Fw== - dependencies: - "@polkadot/keyring" "^13.5.9" - "@polkadot/types" "16.5.3" - "@polkadot/types-support" "16.5.3" - "@polkadot/util" "^13.5.9" - "@polkadot/util-crypto" "^13.5.9" - "@polkadot/x-fetch" "^13.5.9" - "@polkadot/x-global" "^13.5.9" - "@polkadot/x-ws" "^13.5.9" +"@polkadot/rpc-provider@16.5.4": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-16.5.4.tgz#3aaa26f0dec59ca4474c85ac874ff498847a657f" + integrity sha512-mNAIBRA3jMvpnHsuqAX4InHSIqBdgxFD6ayVUFFAzOX8Fh6Xpd4RdI1dqr6a1pCzjnPSby4nbg+VuadWwauVtg== + dependencies: + "@polkadot/keyring" "^14.0.1" + "@polkadot/types" "16.5.4" + "@polkadot/types-support" "16.5.4" + "@polkadot/util" "^14.0.1" + "@polkadot/util-crypto" "^14.0.1" + "@polkadot/x-fetch" "^14.0.1" + "@polkadot/x-global" "^14.0.1" + "@polkadot/x-ws" "^14.0.1" eventemitter3 "^5.0.1" mock-socket "^9.3.1" nock "^13.5.5" @@ -664,87 +755,71 @@ optionalDependencies: "@substrate/connect" "0.8.11" -"@polkadot/types-augment@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-16.5.3.tgz" - integrity sha512-SfS4arJUxW6BeCEhLMVPrZwWOLte69k5+/lvEKOKHQA8Mz0MEkD4uqGZGibDjgBgdnu8N+3b+rs+Fn3YfZu4yA== +"@polkadot/types-augment@16.5.4": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-16.5.4.tgz#24668c1f9e46c16a3fb5468bae0a7eaf13ebd454" + integrity sha512-AGjXR+Q9O9UtVkGw/HuOXlbRqVpvG6H8nr+taXP71wuC6RD9gznFBFBqoNkfWHD2w89esNVQLTvXHVxlLpTXqA== dependencies: - "@polkadot/types" "16.5.3" - "@polkadot/types-codec" "16.5.3" - "@polkadot/util" "^13.5.9" + "@polkadot/types" "16.5.4" + "@polkadot/types-codec" "16.5.4" + "@polkadot/util" "^14.0.1" tslib "^2.8.1" -"@polkadot/types-codec@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-16.5.3.tgz" - integrity sha512-b+oKMrIZrsFH4pPwvGQ6lMS8oFrYAGMy9QSbytA+KDmXAgTCtShz5XGvdQabvsGCjJ45EKgkKpKynVcYh3gk8g== +"@polkadot/types-codec@16.5.4": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-16.5.4.tgz#df19c54e26b59396c72cd916ebecd9a956eb2577" + integrity sha512-OQtT1pmJu2F3/+Vh1OiXifKoeRy+CU1+Lu7dgTcdO705dnxU4447Zup5JVCJDnxBmMITts/38vbFN2pD225AnA== dependencies: - "@polkadot/util" "^13.5.9" - "@polkadot/x-bigint" "^13.5.9" + "@polkadot/util" "^14.0.1" + "@polkadot/x-bigint" "^14.0.1" tslib "^2.8.1" -"@polkadot/types-create@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/types-create/-/types-create-16.5.3.tgz" - integrity sha512-XGnBLNamPh7eQGcHNGFghA/prH7z2BsQ+9EVSbHCvw9ENr/Ow24mmmkZyMG5WM/5I6/4HRdfwFJucYt1GL/p9g== +"@polkadot/types-create@16.5.4": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-16.5.4.tgz#4feb6cbb9ea0f452eef98a098292f975dab1534b" + integrity sha512-URQnvr/sgvgIRSxIW3lmml6HMSTRRj2hTZIm6nhMTlYSVT4rLWx0ZbYUAjoPBbaJ+BmoqZ6Bbs+tA+5cQViv5Q== dependencies: - "@polkadot/types-codec" "16.5.3" - "@polkadot/util" "^13.5.9" + "@polkadot/types-codec" "16.5.4" + "@polkadot/util" "^14.0.1" tslib "^2.8.1" -"@polkadot/types-known@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/types-known/-/types-known-16.5.3.tgz" - integrity sha512-ZLAZI24bQD0C9CJWYHxrLG8QSmzRzfWa51rlSNwZ9Atsc3R+GeX1YZGc9IljpQxYJCHrCqd6X8TXpAmEJdnbKw== +"@polkadot/types-known@16.5.4": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-16.5.4.tgz#c6eb756d9158b0600d5876c7732bc73f0ef6d898" + integrity sha512-Dd59y4e3AFCrH9xiqMU4xlG5+Zy0OTy7GQvqJVYXZFyAH+4HYDlxXjJGcSidGAmJcclSYfS3wyEkfw+j1EOVEw== dependencies: - "@polkadot/networks" "^13.5.9" - "@polkadot/types" "16.5.3" - "@polkadot/types-codec" "16.5.3" - "@polkadot/types-create" "16.5.3" - "@polkadot/util" "^13.5.9" + "@polkadot/networks" "^14.0.1" + "@polkadot/types" "16.5.4" + "@polkadot/types-codec" "16.5.4" + "@polkadot/types-create" "16.5.4" + "@polkadot/util" "^14.0.1" tslib "^2.8.1" -"@polkadot/types-support@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/types-support/-/types-support-16.5.3.tgz" - integrity sha512-ggyIRV+4Kn+aG1PiVT0PE00pAqMveyS3CuFsW9gJnKxeev4VrGfr08R4vw/61D7uIfpilkQdkXNgXAbeN09Mxg== +"@polkadot/types-support@16.5.4": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-16.5.4.tgz#a8d1543b8cbfd8cadf02faee151bc2016e49caba" + integrity sha512-Ra6keCaO73ibxN6MzA56jFq9EReje7jjE4JQfzV5IpyDZdXcmPyJiEfa2Yps/YSP13Gc2e38t9FFyVau0V+SFQ== dependencies: - "@polkadot/util" "^13.5.9" + "@polkadot/util" "^14.0.1" tslib "^2.8.1" -"@polkadot/types@16.5.3": - version "16.5.3" - resolved "https://registry.npmjs.org/@polkadot/types/-/types-16.5.3.tgz" - integrity sha512-xy9uv/X4iT7uJ7TNCoqbcMkR8ePHwNW6DgpOU+1y1zc/KSu9ZC5i+haFOL68BpmR/QXk99YfuHoKwXvteDmykw== - dependencies: - "@polkadot/keyring" "^13.5.9" - "@polkadot/types-augment" "16.5.3" - "@polkadot/types-codec" "16.5.3" - "@polkadot/types-create" "16.5.3" - "@polkadot/util" "^13.5.9" - "@polkadot/util-crypto" "^13.5.9" +"@polkadot/types@16.5.4": + version "16.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-16.5.4.tgz#32372abf736b95924cf0ab8fd5200929f82febf5" + integrity sha512-8Oo1QWaL0DkIc/n2wKBIozPWug/0b2dPVhL+XrXHxJX7rIqS0x8sXDRbM9r166sI0nTqJiUho7pRIkt2PR/DMQ== + dependencies: + "@polkadot/keyring" "^14.0.1" + "@polkadot/types-augment" "16.5.4" + "@polkadot/types-codec" "16.5.4" + "@polkadot/types-create" "16.5.4" + "@polkadot/util" "^14.0.1" + "@polkadot/util-crypto" "^14.0.1" rxjs "^7.8.1" tslib "^2.8.1" -"@polkadot/util-crypto@^13.5.9": - version "13.5.9" - resolved "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.5.9.tgz" - integrity sha512-foUesMhxkTk8CZ0/XEcfvHk6I0O+aICqqVJllhOpyp/ZVnrTBKBf59T6RpsXx2pCtBlMsLRvg/6Mw7RND1HqDg== - dependencies: - "@noble/curves" "^1.3.0" - "@noble/hashes" "^1.3.3" - "@polkadot/networks" "13.5.9" - "@polkadot/util" "13.5.9" - "@polkadot/wasm-crypto" "^7.5.3" - "@polkadot/wasm-util" "^7.5.3" - "@polkadot/x-bigint" "13.5.9" - "@polkadot/x-randomvalues" "13.5.9" - "@scure/base" "^1.1.7" - tslib "^2.8.0" - -"@polkadot/util-crypto@^14.0.1": +"@polkadot/util-crypto@14.0.1", "@polkadot/util-crypto@^14.0.1": version "14.0.1" - resolved "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-14.0.1.tgz" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-14.0.1.tgz#51a6cae461620d9f7b5bcb67e4899135ac072643" integrity sha512-Cu7AKUzBTsUkbOtyuNzXcTpDjR9QW0fVR56o3gBmzfUCmvO1vlsuGzmmPzqpHymQQ3rrfqV78CPs62EGhw0R+A== dependencies: "@noble/curves" "^1.3.0" @@ -759,38 +834,9 @@ "@scure/sr25519" "^0.2.0" tslib "^2.8.0" -"@polkadot/util-crypto@13.5.9": - version "13.5.9" - resolved "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-13.5.9.tgz" - integrity sha512-foUesMhxkTk8CZ0/XEcfvHk6I0O+aICqqVJllhOpyp/ZVnrTBKBf59T6RpsXx2pCtBlMsLRvg/6Mw7RND1HqDg== - dependencies: - "@noble/curves" "^1.3.0" - "@noble/hashes" "^1.3.3" - "@polkadot/networks" "13.5.9" - "@polkadot/util" "13.5.9" - "@polkadot/wasm-crypto" "^7.5.3" - "@polkadot/wasm-util" "^7.5.3" - "@polkadot/x-bigint" "13.5.9" - "@polkadot/x-randomvalues" "13.5.9" - "@scure/base" "^1.1.7" - tslib "^2.8.0" - -"@polkadot/util@*", "@polkadot/util@^13.5.9", "@polkadot/util@13.5.9": - version "13.5.9" - resolved "https://registry.npmjs.org/@polkadot/util/-/util-13.5.9.tgz" - integrity sha512-pIK3XYXo7DKeFRkEBNYhf3GbCHg6dKQisSvdzZwuyzA6m7YxQq4DFw4IE464ve4Z7WsJFt3a6C9uII36hl9EWw== - dependencies: - "@polkadot/x-bigint" "13.5.9" - "@polkadot/x-global" "13.5.9" - "@polkadot/x-textdecoder" "13.5.9" - "@polkadot/x-textencoder" "13.5.9" - "@types/bn.js" "^5.1.6" - bn.js "^5.2.1" - tslib "^2.8.0" - -"@polkadot/util@14.0.1": +"@polkadot/util@14.0.1", "@polkadot/util@^14.0.1": version "14.0.1" - resolved "https://registry.npmjs.org/@polkadot/util/-/util-14.0.1.tgz" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-14.0.1.tgz#2587bda312be5809e0dcdd60fd8c5daccff59579" integrity sha512-764HhxkPV3x5rM0/p6QdynC2dw26n+SaE+jisjx556ViCd4E28Ke4xSPef6C0Spy4aoXf2gt0PuLEcBvd6fVZg== dependencies: "@polkadot/x-bigint" "14.0.1" @@ -801,212 +847,293 @@ bn.js "^5.2.1" tslib "^2.8.0" -"@polkadot/wasm-bridge@7.5.3": - version "7.5.3" - resolved "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.5.3.tgz" - integrity sha512-mUvwwNH+uP1wqpMuHjmEwHxRIaVc5csmb+ukycWQGhzwhpXe/0fvBEU2TQ8kwgqO2MU0FS3hN/QcIWKfPRJgxQ== +"@polkadot/wasm-bridge@7.5.4": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-bridge/-/wasm-bridge-7.5.4.tgz#8b938b3def8f6b0bccbe5555c076efafe484fbc5" + integrity sha512-6xaJVvoZbnbgpQYXNw9OHVNWjXmtcoPcWh7hlwx3NpfiLkkjljj99YS+XGZQlq7ks2fVCg7FbfknkNb8PldDaA== dependencies: - "@polkadot/wasm-util" "7.5.3" + "@polkadot/wasm-util" "7.5.4" tslib "^2.7.0" -"@polkadot/wasm-crypto-asmjs@7.5.3": - version "7.5.3" - resolved "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.5.3.tgz" - integrity sha512-fSbbjI+4p0U3PQ8nOz/3p7euHriSdh+2CSywNuXHa8fMaYlMqCKt9K7+HI8CQ4RZNvZWDq+Py1nEDEkM4rZrvw== +"@polkadot/wasm-crypto-asmjs@7.5.4": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.5.4.tgz#d5ef668e0fa194cec5d54c11388359447b466ad0" + integrity sha512-ZYwxQHAJ8pPt6kYk9XFmyuFuSS+yirJLonvP+DYbxOrARRUHfN4nzp4zcZNXUuaFhpbDobDSFn6gYzye6BUotA== dependencies: tslib "^2.7.0" -"@polkadot/wasm-crypto-init@7.5.3": - version "7.5.3" - resolved "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.5.3.tgz" - integrity sha512-KvUpxqvW70XhuDiw/N6rM8fQ7zRjIFblw+vdJ0/wwyagwg9jrYNA9TMei5ksQd9sxGCGXN/xJmwHJXuUjkocmg== +"@polkadot/wasm-crypto-init@7.5.4": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.5.4.tgz#3ebb59a76a7a2ec05bde3fd619197fb1a164aff9" + integrity sha512-U6s4Eo2rHs2n1iR01vTz/sOQ7eOnRPjaCsGWhPV+ZC/20hkVzwPAhiizu/IqMEol4tO2yiSheD4D6bn0KxUJhg== dependencies: - "@polkadot/wasm-bridge" "7.5.3" - "@polkadot/wasm-crypto-asmjs" "7.5.3" - "@polkadot/wasm-crypto-wasm" "7.5.3" - "@polkadot/wasm-util" "7.5.3" + "@polkadot/wasm-bridge" "7.5.4" + "@polkadot/wasm-crypto-asmjs" "7.5.4" + "@polkadot/wasm-crypto-wasm" "7.5.4" + "@polkadot/wasm-util" "7.5.4" tslib "^2.7.0" -"@polkadot/wasm-crypto-wasm@7.5.3": - version "7.5.3" - resolved "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.5.3.tgz" - integrity sha512-fc88+HyVxebB/40GVgGUOLBqyO3C571DXWPTFmtt5EX9H8gw7Jg0Bkitz7hgSVP2x4FjXpqS9UNTJ8trVH0x1A== +"@polkadot/wasm-crypto-wasm@7.5.4": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.5.4.tgz#bc4fb9aa707cd8218c8143d330ccf2db989a2726" + integrity sha512-PsHgLsVTu43eprwSvUGnxybtOEuHPES6AbApcs7y5ZbM2PiDMzYbAjNul098xJK/CPtrxZ0ePDFnaQBmIJyTFw== dependencies: - "@polkadot/wasm-util" "7.5.3" + "@polkadot/wasm-util" "7.5.4" tslib "^2.7.0" "@polkadot/wasm-crypto@^7.5.3": - version "7.5.3" - resolved "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.5.3.tgz" - integrity sha512-dmKUM9vw1wrnCHGuIeOtQo1pwuSF7fkyF4TYimTn3tAa0+3cDctYBErtGxgUeqP0Bo4Q0Of4/vnHlSk5Rbt9Uw== - dependencies: - "@polkadot/wasm-bridge" "7.5.3" - "@polkadot/wasm-crypto-asmjs" "7.5.3" - "@polkadot/wasm-crypto-init" "7.5.3" - "@polkadot/wasm-crypto-wasm" "7.5.3" - "@polkadot/wasm-util" "7.5.3" + version "7.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-7.5.4.tgz#c83b91623e96e168262935a7f2e7c1ffd1875249" + integrity sha512-1seyClxa7Jd7kQjfnCzTTTfYhTa/KUTDUaD3DMHBk5Q4ZUN1D1unJgX+v1aUeXSPxmzocdZETPJJRZjhVOqg9g== + dependencies: + "@polkadot/wasm-bridge" "7.5.4" + "@polkadot/wasm-crypto-asmjs" "7.5.4" + "@polkadot/wasm-crypto-init" "7.5.4" + "@polkadot/wasm-crypto-wasm" "7.5.4" + "@polkadot/wasm-util" "7.5.4" tslib "^2.7.0" -"@polkadot/wasm-util@*", "@polkadot/wasm-util@^7.5.3", "@polkadot/wasm-util@7.5.3": - version "7.5.3" - resolved "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.5.3.tgz" - integrity sha512-hBr9bbjS+Yr7DrDUSkIIuvlTSoAlI8WXuo9YEB4C76j130u/cl+zyq6Iy/WnaTE6QH+8i9DhM8QTety6TqYnUQ== +"@polkadot/wasm-util@7.5.4", "@polkadot/wasm-util@^7.5.3": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-7.5.4.tgz#dcaad33f44dc18ff22762c4f1572a5c9bfa77579" + integrity sha512-hqPpfhCpRAqCIn/CYbBluhh0TXmwkJnDRjxrU9Bnqtw9nMNa97D8JuOjdd2pi0rxm+eeLQ/f1rQMp71RMM9t4w== dependencies: tslib "^2.7.0" -"@polkadot/x-bigint@^13.5.9", "@polkadot/x-bigint@13.5.9": - version "13.5.9" - resolved "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-13.5.9.tgz" - integrity sha512-JVW6vw3e8fkcRyN9eoc6JIl63MRxNQCP/tuLdHWZts1tcAYao0hpWUzteqJY93AgvmQ91KPsC1Kf3iuuZCi74g== - dependencies: - "@polkadot/x-global" "13.5.9" - tslib "^2.8.0" - -"@polkadot/x-bigint@14.0.1": +"@polkadot/x-bigint@14.0.1", "@polkadot/x-bigint@^14.0.1": version "14.0.1" - resolved "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-14.0.1.tgz" + resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-14.0.1.tgz#e34dc77e9e4c3e283b09ba89d9f9a6323ecab9af" integrity sha512-gfozjGnebr2rqURs31KtaWumbW4rRZpbiluhlmai6luCNrf5u8pB+oLA35kPEntrsLk9PnIG9OsC/n4hEtx4OQ== dependencies: "@polkadot/x-global" "14.0.1" tslib "^2.8.0" -"@polkadot/x-fetch@^13.5.9": - version "13.5.9" - resolved "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-13.5.9.tgz" - integrity sha512-urwXQZtT4yYROiRdJS6zHu18J/jCoAGpbgPIAjwdqjT11t9XIq4SjuPMxD19xBRhbYe9ocWV8i1KHuoMbZgKbA== +"@polkadot/x-fetch@^14.0.1": + version "14.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-14.0.1.tgz#66c0f949fb11f8fd07f8c78bab36ea335eb1e93b" + integrity sha512-yFsnO0xfkp3bIcvH70ZvmeUINYH1YnjOIS1B430f3w6axkqKhAOWCgzzKGMSRgn4dtm3YgwMBKPQ4nyfIsGOJQ== dependencies: - "@polkadot/x-global" "13.5.9" + "@polkadot/x-global" "14.0.1" node-fetch "^3.3.2" tslib "^2.8.0" -"@polkadot/x-global@^13.5.9", "@polkadot/x-global@13.5.9": - version "13.5.9" - resolved "https://registry.npmjs.org/@polkadot/x-global/-/x-global-13.5.9.tgz" - integrity sha512-zSRWvELHd3Q+bFkkI1h2cWIqLo1ETm+MxkNXLec3lB56iyq/MjWBxfXnAFFYFayvlEVneo7CLHcp+YTFd9aVSA== - dependencies: - tslib "^2.8.0" - -"@polkadot/x-global@14.0.1": +"@polkadot/x-global@14.0.1", "@polkadot/x-global@^14.0.1": version "14.0.1" - resolved "https://registry.npmjs.org/@polkadot/x-global/-/x-global-14.0.1.tgz" + resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-14.0.1.tgz#a268dc4b5d380b204c161977f75d0468cfe479d3" integrity sha512-aCI44DJU4fU0XXqrrSGIpi7JrZXK2kpe0jaQ2p6oDVXOOYEnZYXnMhTTmBE1lF/xtxzX50MnZrrU87jziU0qbA== dependencies: tslib "^2.8.0" -"@polkadot/x-randomvalues@*", "@polkadot/x-randomvalues@13.5.9": - version "13.5.9" - resolved "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-13.5.9.tgz" - integrity sha512-Uuuz3oubf1JCCK97fsnVUnHvk4BGp/W91mQWJlgl5TIOUSSTIRr+lb5GurCfl4kgnQq53Zi5fJV+qR9YumbnZw== - dependencies: - "@polkadot/x-global" "13.5.9" - tslib "^2.8.0" - "@polkadot/x-randomvalues@14.0.1": version "14.0.1" - resolved "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-14.0.1.tgz" + resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-14.0.1.tgz#6cdf67f9afeb98f2f4f2862def4b1d5ae97378af" integrity sha512-/XkQcvshzJLHITuPrN3zmQKuFIPdKWoaiHhhVLD6rQWV60lTXA3ajw3ocju8ZN7xRxnweMS9Ce0kMPYa0NhRMg== dependencies: "@polkadot/x-global" "14.0.1" tslib "^2.8.0" -"@polkadot/x-textdecoder@13.5.9": - version "13.5.9" - resolved "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-13.5.9.tgz" - integrity sha512-W2HhVNUbC/tuFdzNMbnXAWsIHSg9SC9QWDNmFD3nXdSzlXNgL8NmuiwN2fkYvCQBtp/XSoy0gDLx0C+Fo19cfw== - dependencies: - "@polkadot/x-global" "13.5.9" - tslib "^2.8.0" - "@polkadot/x-textdecoder@14.0.1": version "14.0.1" - resolved "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-14.0.1.tgz" + resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-14.0.1.tgz#7835f686728b9d1d70f204e843d7f6c0b53c8e1d" integrity sha512-CcWiPCuPVJsNk4Vq43lgFHqLRBQHb4r9RD7ZIYgmwoebES8TNm4g2ew9ToCzakFKSpzKu6I07Ne9wv/dt5zLuw== dependencies: "@polkadot/x-global" "14.0.1" tslib "^2.8.0" -"@polkadot/x-textencoder@13.5.9": - version "13.5.9" - resolved "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-13.5.9.tgz" - integrity sha512-SG0MHnLUgn1ZxFdm0KzMdTHJ47SfqFhdIPMcGA0Mg/jt2rwrfrP3jtEIJMsHfQpHvfsNPfv55XOMmoPWuQnP/Q== - dependencies: - "@polkadot/x-global" "13.5.9" - tslib "^2.8.0" - "@polkadot/x-textencoder@14.0.1": version "14.0.1" - resolved "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-14.0.1.tgz" + resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-14.0.1.tgz#a07c9b69da4425688af2d131aaf0c154abe69fb2" integrity sha512-VY51SpQmF1ccmAGLfxhYnAe95Spfz049WZ/+kK4NfsGF9WejxVdU53Im5C80l45r8qHuYQsCWU3+t0FNunh2Kg== dependencies: "@polkadot/x-global" "14.0.1" tslib "^2.8.0" -"@polkadot/x-ws@^13.5.9": - version "13.5.9" - resolved "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-13.5.9.tgz" - integrity sha512-NKVgvACTIvKT8CjaQu9d0dERkZsWIZngX/4NVSjc01WHmln4F4y/zyBdYn/Z2V0Zw28cISx+lB4qxRmqTe7gbg== +"@polkadot/x-ws@^14.0.1": + version "14.0.1" + resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-14.0.1.tgz#1ec2d0832922fc485f5fe490438ec852d6c63ca9" + integrity sha512-Q18hoSuOl7F4aENNGNt9XYxkrjwZlC6xye9OQrPDeHam1SrvflGv9mSZHyo+mwJs0z1PCz2STpPEN9PKfZvHng== dependencies: - "@polkadot/x-global" "13.5.9" + "@polkadot/x-global" "14.0.1" tslib "^2.8.0" ws "^8.18.0" -"@rollup/rollup-darwin-arm64@4.53.3": - version "4.53.3" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz" - integrity sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA== +"@rollup/rollup-android-arm-eabi@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz#a6742c74c7d9d6d604ef8a48f99326b4ecda3d82" + integrity sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg== + +"@rollup/rollup-android-arm64@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz#97247be098de4df0c11971089fd2edf80a5da8cf" + integrity sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q== + +"@rollup/rollup-darwin-arm64@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz#674852cf14cf11b8056e0b1a2f4e872b523576cf" + integrity sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg== + +"@rollup/rollup-darwin-x64@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz#36dfd7ed0aaf4d9d89d9ef983af72632455b0246" + integrity sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w== + +"@rollup/rollup-freebsd-arm64@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz#2f87c2074b4220260fdb52a9996246edfc633c22" + integrity sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA== + +"@rollup/rollup-freebsd-x64@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz#9b5a26522a38a95dc06616d1939d4d9a76937803" + integrity sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg== + +"@rollup/rollup-linux-arm-gnueabihf@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz#86aa4859385a8734235b5e40a48e52d770758c3a" + integrity sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw== + +"@rollup/rollup-linux-arm-musleabihf@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz#cbe70e56e6ece8dac83eb773b624fc9e5a460976" + integrity sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA== + +"@rollup/rollup-linux-arm64-gnu@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz#d14992a2e653bc3263d284bc6579b7a2890e1c45" + integrity sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA== + +"@rollup/rollup-linux-arm64-musl@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz#2fdd1ddc434ea90aeaa0851d2044789b4d07f6da" + integrity sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA== + +"@rollup/rollup-linux-loong64-gnu@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz#8a181e6f89f969f21666a743cd411416c80099e7" + integrity sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg== + +"@rollup/rollup-linux-loong64-musl@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz#904125af2babc395f8061daa27b5af1f4e3f2f78" + integrity sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q== + +"@rollup/rollup-linux-ppc64-gnu@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz#a57970ac6864c9a3447411a658224bdcf948be22" + integrity sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA== + +"@rollup/rollup-linux-ppc64-musl@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz#bb84de5b26870567a4267666e08891e80bb56a63" + integrity sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA== + +"@rollup/rollup-linux-riscv64-gnu@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz#72d00d2c7fb375ce3564e759db33f17a35bffab9" + integrity sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg== + +"@rollup/rollup-linux-riscv64-musl@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz#4c166ef58e718f9245bd31873384ba15a5c1a883" + integrity sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg== + +"@rollup/rollup-linux-s390x-gnu@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz#bb5025cde9a61db478c2ca7215808ad3bce73a09" + integrity sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w== + +"@rollup/rollup-linux-x64-gnu@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz#9b66b1f9cd95c6624c788f021c756269ffed1552" + integrity sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg== + +"@rollup/rollup-linux-x64-musl@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz#b007ca255dc7166017d57d7d2451963f0bd23fd9" + integrity sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg== + +"@rollup/rollup-openbsd-x64@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz#e8b357b2d1aa2c8d76a98f5f0d889eabe93f4ef9" + integrity sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ== + +"@rollup/rollup-openharmony-arm64@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz#96c2e3f4aacd3d921981329831ff8dde492204dc" + integrity sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA== + +"@rollup/rollup-win32-arm64-msvc@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz#2d865149d706d938df8b4b8f117e69a77646d581" + integrity sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A== + +"@rollup/rollup-win32-ia32-msvc@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz#abe1593be0fa92325e9971c8da429c5e05b92c36" + integrity sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA== + +"@rollup/rollup-win32-x64-gnu@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz#c4af3e9518c9a5cd4b1c163dc81d0ad4d82e7eab" + integrity sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA== + +"@rollup/rollup-win32-x64-msvc@4.59.0": + version "4.59.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz#4584a8a87b29188a4c1fe987a9fcf701e256d86c" + integrity sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA== "@rx-state/core@^0.1.4": version "0.1.4" - resolved "https://registry.npmjs.org/@rx-state/core/-/core-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/@rx-state/core/-/core-0.1.4.tgz#586dde80be9dbdac31844006a0dcaa2bc7f35a5c" integrity sha512-Z+3hjU2xh1HisLxt+W5hlYX/eGSDaXXP+ns82gq/PLZpkXLu0uwcNUh9RLY3Clq4zT+hSsA3vcpIGt6+UAb8rQ== "@scure/base@^1.1.1", "@scure/base@^1.1.7", "@scure/base@~1.2.2", "@scure/base@~1.2.4", "@scure/base@~1.2.5": version "1.2.6" - resolved "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg== "@scure/base@^2.0.0": version "2.0.0" - resolved "https://registry.npmjs.org/@scure/base/-/base-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-2.0.0.tgz#ba6371fddf92c2727e88ad6ab485db6e624f9a98" integrity sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w== -"@scure/bip32@^1.5.0", "@scure/bip32@^1.7.0", "@scure/bip32@1.7.0": - version "1.7.0" - resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz" - integrity sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw== - dependencies: - "@noble/curves" "~1.9.0" - "@noble/hashes" "~1.8.0" - "@scure/base" "~1.2.5" - "@scure/bip32@1.6.2": version "1.6.2" - resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.2.tgz" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.2.tgz#093caa94961619927659ed0e711a6e4bf35bffd0" integrity sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw== dependencies: "@noble/curves" "~1.8.1" "@noble/hashes" "~1.7.1" "@scure/base" "~1.2.2" -"@scure/bip39@^1.4.0", "@scure/bip39@^1.6.0", "@scure/bip39@1.6.0": - version "1.6.0" - resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz" - integrity sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A== +"@scure/bip32@1.7.0", "@scure/bip32@^1.5.0", "@scure/bip32@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.7.0.tgz#b8683bab172369f988f1589640e53c4606984219" + integrity sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw== dependencies: + "@noble/curves" "~1.9.0" "@noble/hashes" "~1.8.0" "@scure/base" "~1.2.5" "@scure/bip39@1.5.4": version "1.5.4" - resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.4.tgz" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.4.tgz#07fd920423aa671be4540d59bdd344cc1461db51" integrity sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA== dependencies: "@noble/hashes" "~1.7.1" "@scure/base" "~1.2.4" +"@scure/bip39@1.6.0", "@scure/bip39@^1.4.0", "@scure/bip39@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.6.0.tgz#475970ace440d7be87a6086cbee77cb8f1a684f9" + integrity sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A== + dependencies: + "@noble/hashes" "~1.8.0" + "@scure/base" "~1.2.5" + "@scure/sr25519@^0.2.0": version "0.2.0" - resolved "https://registry.npmjs.org/@scure/sr25519/-/sr25519-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/@scure/sr25519/-/sr25519-0.2.0.tgz#b2de2407a2d59522d7d0f26fafbac260fd9314d2" integrity sha512-uUuLP7Z126XdSizKtrCGqYyR3b3hYtJ6Fg/XFUXmc2//k2aXHDLqZwFeXxL97gg4XydPROPVnuaHGF2+xriSKg== dependencies: "@noble/curves" "~1.9.2" @@ -1014,35 +1141,43 @@ "@scure/sr25519@^0.3.0": version "0.3.0" - resolved "https://registry.npmjs.org/@scure/sr25519/-/sr25519-0.3.0.tgz" + resolved "https://registry.yarnpkg.com/@scure/sr25519/-/sr25519-0.3.0.tgz#1fb075ef05086c1dc59f16bdda1327627a552352" integrity sha512-SKsinX2sImunfcsH3seGrwH/OayBwwaJqVN8J1cJBNRCfbBq5q0jyTKGa9PcW1HWv9vXT6Yuq41JsxFLvF59ew== dependencies: "@noble/curves" "~2.0.0" "@noble/hashes" "~2.0.0" +"@scure/sr25519@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@scure/sr25519/-/sr25519-1.0.0.tgz#27b61458c6038e42d00ddb220188cdb3ebd32c60" + integrity sha512-b+uhK5akMINXZP95F3gJGcb5CMKYxf+q55fwMl0GoBwZDbWolmGNi1FrBSwuaZX5AhqS2byHiAueZgtDNpot2A== + dependencies: + "@noble/curves" "~2.0.0" + "@noble/hashes" "~2.0.0" + "@sec-ant/readable-stream@^0.4.1": version "0.4.1" - resolved "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== "@sindresorhus/merge-streams@^4.0.0": version "4.0.0" - resolved "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz#abb11d99aeb6d27f1b563c38147a72d50058e339" integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== "@substrate/connect-extension-protocol@^2.0.0": version "2.2.2" - resolved "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.2.tgz" + resolved "https://registry.yarnpkg.com/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.2.tgz#2cf8f2eaf1879308d307a1a08df83cd5db918fe0" integrity sha512-t66jwrXA0s5Goq82ZtjagLNd7DPGCNjHeehRlE/gcJmJ+G56C0W+2plqOMRicJ8XGR1/YFnUSEqUFiSNbjGrAA== "@substrate/connect-known-chains@^1.1.5": version "1.10.3" - resolved "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.10.3.tgz" + resolved "https://registry.yarnpkg.com/@substrate/connect-known-chains/-/connect-known-chains-1.10.3.tgz#71a89864f13626c412fa0a9d0ffc4f6ca39fdcec" integrity sha512-OJEZO1Pagtb6bNE3wCikc2wrmvEU5x7GxFFLqqbz1AJYYxSlrPCGu4N2og5YTExo4IcloNMQYFRkBGue0BKZ4w== "@substrate/connect@0.8.11": version "0.8.11" - resolved "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.11.tgz" + resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.8.11.tgz#983ec69a05231636e217b573b8130a6b942af69f" integrity sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw== dependencies: "@substrate/connect-extension-protocol" "^2.0.0" @@ -1052,7 +1187,7 @@ "@substrate/light-client-extension-helpers@^1.0.0": version "1.0.0" - resolved "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz#7b60368c57e06e5cf798c6557422d12e6d81f1ff" integrity sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg== dependencies: "@polkadot-api/json-rpc-provider" "^0.0.1" @@ -1065,39 +1200,39 @@ "@substrate/ss58-registry@^1.51.0": version "1.51.0" - resolved "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz" + resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz#39e0341eb4069c2d3e684b93f0d8cb0bec572383" integrity sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ== "@tsconfig/node10@^1.0.7": version "1.0.12" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.12.tgz#be57ceac1e4692b41be9de6be8c32a106636dba4" integrity sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/bn.js@^5.1.6": version "5.2.0" - resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.2.0.tgz#4349b9710e98f9ab3cdc50f1c5e4dcbd8ef29c80" integrity sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q== dependencies: "@types/node" "*" "@types/chai@^5.0.1": version "5.2.3" - resolved "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.3.tgz#8e9cd9e1c3581fa6b341a5aed5588eb285be0b4a" integrity sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA== dependencies: "@types/deep-eql" "*" @@ -1105,131 +1240,126 @@ "@types/deep-eql@*": version "4.0.2" - resolved "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== "@types/estree@1.0.8": version "1.0.8" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/mocha@^10.0.10": version "10.0.10" - resolved "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0" integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== -"@types/node@*", "@types/node@^22.18.0": - version "22.19.1" - resolved "https://registry.npmjs.org/@types/node/-/node-22.19.1.tgz" - integrity sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ== +"@types/node@*", "@types/node@^25.0.10": + version "25.3.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.3.3.tgz#605862544ee7ffd7a936bcbf0135a14012f1e549" + integrity sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ== dependencies: - undici-types "~6.21.0" - -"@types/node@^24.10.1": - version "24.10.1" - resolved "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz" - integrity sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ== - dependencies: - undici-types "~7.16.0" - -"@types/node@^24.5.2": - version "24.10.1" - resolved "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz" - integrity sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ== - dependencies: - undici-types "~7.16.0" + undici-types "~7.18.0" "@types/node@22.7.5": version "22.7.5" - resolved "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== dependencies: undici-types "~6.19.2" +"@types/node@^22.18.0": + version "22.19.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.19.13.tgz#c03cab3d1f0e5542fa358ecfff08f9b34834884e" + integrity sha512-akNQMv0wW5uyRpD2v2IEyRSZiR+BeGuoB6L310EgGObO44HSMNT8z1xzio28V8qOrgYaopIDNA18YgdXd+qTiw== + dependencies: + undici-types "~6.21.0" + +"@types/node@^24.10.1": + version "24.11.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.11.0.tgz#34e8f9603ada03fdc36a532faefdb8e1bb3693a0" + integrity sha512-fPxQqz4VTgPI/IQ+lj9r0h+fDR66bzoeMGHp8ASee+32OSGIkeASsoZuJixsQoVef1QJbeubcPBxKk22QVoWdw== + dependencies: + undici-types "~7.16.0" + "@types/normalize-package-data@^2.4.3", "@types/normalize-package-data@^2.4.4": version "2.4.4" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== "@types/ws@^8.18.1": version "8.18.1" - resolved "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== dependencies: "@types/node" "*" -abitype@^1.0.6, abitype@^1.0.9, abitype@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/abitype/-/abitype-1.2.0.tgz" - integrity sha512-fD3ROjckUrWsybaSor2AdWxzA0e/DSyV2dA4aYd7bd8orHsoJjl09fOgKfUkTDfk0BsDGBf4NBgu/c7JoS2Npw== - abitype@1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/abitype/-/abitype-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.8.tgz#3554f28b2e9d6e9f35eb59878193eabd1b9f46ba" integrity sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg== -abitype@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/abitype/-/abitype-1.1.0.tgz" - integrity sha512-6Vh4HcRxNMLA0puzPjM5GBgT4aAcFGKZzSgAXvuZ27shJP6NEpielTuqbBmZILR5/xd0PizkBGy5hReKz9jl5A== +abitype@1.2.3, abitype@^1.0.6, abitype@^1.1.1, abitype@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.2.3.tgz#bec3e09dea97d99ef6c719140bee663a329ad1f4" + integrity sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg== acorn-walk@^8.1.1: - version "8.3.4" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz" - integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + version "8.3.5" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.5.tgz#8a6b8ca8fc5b34685af15dabb44118663c296496" + integrity sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw== dependencies: acorn "^8.11.0" acorn@^8.11.0, acorn@^8.15.0, acorn@^8.4.1: - version "8.15.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" - integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== aes-js@4.0.0-beta.5: version "4.0.0-beta.5" - resolved "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: +ansi-regex@^6.2.2: version "6.2.2" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^6.1.0: version "6.2.3" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== any-promise@^1.0.0: version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== arg@^4.1.0: version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== assert@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== dependencies: call-bind "^1.0.2" @@ -1240,53 +1370,53 @@ assert@^2.1.0: assertion-error@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== available-typed-arrays@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== dependencies: possible-typed-array-names "^1.0.0" balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== bn.js@^5.2.1: - version "5.2.2" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz" - integrity sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw== + version "5.2.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.3.tgz#16a9e409616b23fef3ccbedb8d42f13bff80295e" + integrity sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w== -brace-expansion@^2.0.1: +brace-expansion@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: balanced-match "^1.0.0" browser-stdout@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== bundle-require@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-5.1.0.tgz#8db66f41950da3d77af1ef3322f4c3e04009faee" integrity sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA== dependencies: load-tsconfig "^0.2.3" cac@^6.7.14: version "6.7.14" - resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" @@ -1294,7 +1424,7 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.7, call-bind@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== dependencies: call-bind-apply-helpers "^1.0.0" @@ -1304,7 +1434,7 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.7, call-bind@^1.0.8: call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: call-bind-apply-helpers "^1.0.2" @@ -1312,17 +1442,17 @@ call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: camelcase@^6.0.0: version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== chai@^6.0.1: - version "6.2.1" - resolved "https://registry.npmjs.org/chai/-/chai-6.2.1.tgz" - integrity sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg== + version "6.2.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-6.2.2.tgz#ae41b52c9aca87734505362717f3255facda360e" + integrity sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg== chalk@^4.1.0: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -1330,31 +1460,31 @@ chalk@^4.1.0: chalk@^5.6.2: version "5.6.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== chokidar@^4.0.1, chokidar@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== dependencies: readdirp "^4.0.1" cli-cursor@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== dependencies: restore-cursor "^5.0.0" cli-spinners@^3.2.0: - version "3.3.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.3.0.tgz" - integrity sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ== + version "3.4.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-3.4.0.tgz#1f11f6d48c4e5bc6849fcb4efa0dc98f9e7299ea" + integrity sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw== cliui@^8.0.1: version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -1363,44 +1493,44 @@ cliui@^8.0.1: color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -commander@^14.0.2, commander@~14.0.0: - version "14.0.2" - resolved "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz" - integrity sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ== +commander@^14.0.2: + version "14.0.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== commander@^4.0.0: version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== confbox@^0.1.8: version "0.1.8" - resolved "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== consola@^3.4.0: version "3.4.2" - resolved "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== create-require@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-spawn@^7.0.6: version "7.0.6" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" @@ -1409,29 +1539,29 @@ cross-spawn@^7.0.6: data-uri-to-buffer@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== debug@^4.1.0, debug@^4.3.5, debug@^4.4.0: version "4.4.3" - resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" decamelize@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== deepmerge-ts@^7.1.0: version "7.1.5" - resolved "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz" + resolved "https://registry.yarnpkg.com/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz#ff818564007f5c150808d2b7b732cac83aa415ab" integrity sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw== define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: es-define-property "^1.0.0" @@ -1440,7 +1570,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: define-properties@^1.1.3, define-properties@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: define-data-property "^1.0.1" @@ -1449,27 +1579,27 @@ define-properties@^1.1.3, define-properties@^1.2.1: detect-indent@^7.0.1: version "7.0.2" - resolved "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.2.tgz" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-7.0.2.tgz#16c516bf75d4b2f759f68214554996d467c8d648" integrity sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A== diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + version "4.0.4" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.4.tgz#7a6dbfda325f25f07517e9b518f897c08332e07d" + integrity sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ== diff@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a" integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== dotenv@17.2.1: version "17.2.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-17.2.1.tgz" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.1.tgz#6f32e10faf014883515538dc922a0fb8765d9b32" integrity sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ== dunder-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: call-bind-apply-helpers "^1.0.1" @@ -1478,39 +1608,39 @@ dunder-proto@^1.0.1: eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" -esbuild@^0.25.0, esbuild@>=0.18: +esbuild@^0.25.0: version "0.25.12" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.12.tgz#97a1d041f4ab00c2fce2f838d2b9969a2d2a97a5" integrity sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg== optionalDependencies: "@esbuild/aix-ppc64" "0.25.12" @@ -1542,17 +1672,17 @@ esbuild@^0.25.0, esbuild@>=0.18: escalade@^3.1.1: version "3.2.0" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== ethers@^6.13.5: version "6.16.0" - resolved "https://registry.npmjs.org/ethers/-/ethers-6.16.0.tgz" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.16.0.tgz#fff9b4f05d7a359c774ad6e91085a800f7fccf65" integrity sha512-U1wulmetNymijEhpSEQ7Ct/P/Jw9/e7R1j5XIbPRydgV2DjLVMsULDlNksq3RQnFgKoLlZf88ijYtWEXcPa07A== dependencies: "@adraffy/ens-normalize" "1.10.1" @@ -1563,14 +1693,19 @@ ethers@^6.13.5: tslib "2.7.0" ws "8.17.1" -eventemitter3@^5.0.1, eventemitter3@5.0.1: +eventemitter3@5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -execa@^9.6.0: +eventemitter3@^5.0.1: + version "5.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.4.tgz#a86d66170433712dde814707ac52b5271ceb1feb" + integrity sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw== + +execa@^9.6.1: version "9.6.1" - resolved "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz" + resolved "https://registry.yarnpkg.com/execa/-/execa-9.6.1.tgz#5b90acedc6bdc0fa9b9a6ddf8f9cbb0c75a7c471" integrity sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA== dependencies: "@sindresorhus/merge-streams" "^4.0.0" @@ -1588,12 +1723,12 @@ execa@^9.6.0: fdir@^6.5.0: version "6.5.0" - resolved "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== fetch-blob@^3.1.2, fetch-blob@^3.1.4: version "3.2.0" - resolved "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== dependencies: node-domexception "^1.0.0" @@ -1601,14 +1736,14 @@ fetch-blob@^3.1.2, fetch-blob@^3.1.4: figures@^6.1.0: version "6.1.0" - resolved "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a" integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== dependencies: is-unicode-supported "^2.0.0" find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -1616,7 +1751,7 @@ find-up@^5.0.0: fix-dts-default-cjs-exports@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz#955cb6b3d519691c57828b078adadf2cb92e9549" integrity sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg== dependencies: magic-string "^0.30.17" @@ -1625,19 +1760,19 @@ fix-dts-default-cjs-exports@^1.0.0: flat@^5.0.2: version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== for-each@^0.3.5: version "0.3.5" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: is-callable "^1.2.7" foreground-child@^3.1.0: version "3.3.1" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: cross-spawn "^7.0.6" @@ -1645,44 +1780,44 @@ foreground-child@^3.1.0: formdata-polyfill@^4.0.10: version "4.0.10" - resolved "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== dependencies: fetch-blob "^3.1.2" fs.promises.exists@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/fs.promises.exists/-/fs.promises.exists-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/fs.promises.exists/-/fs.promises.exists-1.1.4.tgz#6a1d8fd24df79248eda19a8ba9dd7fd68b941921" integrity sha512-lJzUGWbZn8vhGWBedA+RYjB/BeJ+3458ljUfmplqhIeb6ewzTFWNPCR1HCiYCkXV9zxcHz9zXkJzMsEgDLzh3Q== fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== generator-function@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-east-asian-width@^1.3.0: - version "1.4.0" - resolved "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz" - integrity sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q== +get-east-asian-width@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz#ce7008fe345edcf5497a6f557cfa54bc318a9ce7" + integrity sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA== get-intrinsic@^1.2.4, get-intrinsic@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: call-bind-apply-helpers "^1.0.2" @@ -1698,7 +1833,7 @@ get-intrinsic@^1.2.4, get-intrinsic@^1.3.0: get-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: dunder-proto "^1.0.1" @@ -1706,7 +1841,7 @@ get-proto@^1.0.1: get-stream@^9.0.0: version "9.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== dependencies: "@sec-ant/readable-stream" "^0.4.1" @@ -1714,7 +1849,7 @@ get-stream@^9.0.0: glob@^10.4.5: version "10.5.0" - resolved "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== dependencies: foreground-child "^3.1.0" @@ -1726,82 +1861,82 @@ glob@^10.4.5: gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" hasown@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" he@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== hosted-git-info@^7.0.0: version "7.0.2" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== dependencies: lru-cache "^10.0.1" hosted-git-info@^9.0.0: version "9.0.2" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-9.0.2.tgz#b38c8a802b274e275eeeccf9f4a1b1a0a8557ada" integrity sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg== dependencies: lru-cache "^11.1.0" human-signals@^8.0.1: version "8.0.1" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-8.0.1.tgz#f08bb593b6d1db353933d06156cedec90abe51fb" integrity sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ== imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== index-to-position@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-1.2.0.tgz#c800eb34dacf4dbf96b9b06c7eb78d5f704138b4" integrity sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw== inherits@^2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== is-arguments@^1.0.4: version "1.2.0" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== dependencies: call-bound "^1.0.2" @@ -1809,17 +1944,17 @@ is-arguments@^1.0.4: is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-function@^1.0.7: version "1.1.2" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== dependencies: call-bound "^1.0.4" @@ -1830,12 +1965,12 @@ is-generator-function@^1.0.7: is-interactive@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== is-nan@^1.3.2: version "1.3.2" - resolved "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== dependencies: call-bind "^1.0.0" @@ -1843,22 +1978,22 @@ is-nan@^1.3.2: is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-obj@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== is-plain-obj@^4.0.0, is-plain-obj@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== is-regex@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: call-bound "^1.0.2" @@ -1868,44 +2003,44 @@ is-regex@^1.2.1: is-stream@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== is-typed-array@^1.1.3: version "1.1.15" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: which-typed-array "^1.1.16" is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== is-unicode-supported@^2.0.0, is-unicode-supported@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isows@1.0.6: version "1.0.6" - resolved "https://registry.npmjs.org/isows/-/isows-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.6.tgz#0da29d706fa51551c663c627ace42769850f86e7" integrity sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw== isows@1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/isows/-/isows-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.7.tgz#1c06400b7eed216fbba3bcbd68f12490fc342915" integrity sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg== jackspeak@^3.1.2: version "3.4.3" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" @@ -1914,56 +2049,56 @@ jackspeak@^3.1.2: joycon@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^4.1.0: version "4.1.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: argparse "^2.0.1" json-stringify-safe@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== lilconfig@^3.1.1: version "3.1.3" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== load-tsconfig@^0.2.3: version "0.2.5" - resolved "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz" + resolved "https://registry.yarnpkg.com/load-tsconfig/-/load-tsconfig-0.2.5.tgz#453b8cd8961bfb912dea77eb6c168fe8cca3d3a1" integrity sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg== locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.sortby@^4.7.0: version "4.7.0" - resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -1971,7 +2106,7 @@ log-symbols@^4.1.0: log-symbols@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-7.0.1.tgz#f52e68037d96f589fc572ff2193dc424d48c195b" integrity sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg== dependencies: is-unicode-supported "^2.0.0" @@ -1979,51 +2114,51 @@ log-symbols@^7.0.1: lru-cache@^10.0.1, lru-cache@^10.2.0: version "10.4.3" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^11.1.0: - version "11.2.4" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz" - integrity sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg== + version "11.2.6" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.2.6.tgz#356bf8a29e88a7a2945507b31f6429a65a192c58" + integrity sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ== magic-string@^0.30.17: version "0.30.21" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== dependencies: "@jridgewell/sourcemap-codec" "^1.5.5" make-error@^1.1.1: version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== math-intrinsics@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== mimic-function@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== minimatch@^9.0.4, minimatch@^9.0.5: - version "9.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" - integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + version "9.0.9" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" + integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== dependencies: - brace-expansion "^2.0.1" + brace-expansion "^2.0.2" "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" - integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + version "7.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" + integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== mlly@^1.7.4: version "1.8.0" - resolved "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.8.0.tgz#e074612b938af8eba1eaf43299cbc89cb72d824e" integrity sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g== dependencies: acorn "^8.15.0" @@ -2033,7 +2168,7 @@ mlly@^1.7.4: mocha@^11.1.0: version "11.7.5" - resolved "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-11.7.5.tgz#58f5bbfa5e0211ce7e5ee6128107cefc2515a627" integrity sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig== dependencies: browser-stdout "^1.3.1" @@ -2060,17 +2195,17 @@ mocha@^11.1.0: mock-socket@^9.3.1: version "9.3.1" - resolved "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz" + resolved "https://registry.yarnpkg.com/mock-socket/-/mock-socket-9.3.1.tgz#24fb00c2f573c84812aa4a24181bb025de80cc8e" integrity sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw== ms@^2.1.3: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== mz@^2.7.0: version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== dependencies: any-promise "^1.0.0" @@ -2079,7 +2214,7 @@ mz@^2.7.0: nock@^13.5.5: version "13.5.6" - resolved "https://registry.npmjs.org/nock/-/nock-13.5.6.tgz" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.6.tgz#5e693ec2300bbf603b61dae6df0225673e6c4997" integrity sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ== dependencies: debug "^4.1.0" @@ -2088,12 +2223,12 @@ nock@^13.5.5: node-domexception@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== node-fetch@^3.3.2: version "3.3.2" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== dependencies: data-uri-to-buffer "^4.0.0" @@ -2102,7 +2237,7 @@ node-fetch@^3.3.2: normalize-package-data@^6.0.0: version "6.0.2" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== dependencies: hosted-git-info "^7.0.0" @@ -2111,7 +2246,7 @@ normalize-package-data@^6.0.0: normalize-package-data@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-8.0.0.tgz#bdce7ff2d6ba891b853e179e45a5337766e304a7" integrity sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ== dependencies: hosted-git-info "^9.0.0" @@ -2120,7 +2255,7 @@ normalize-package-data@^8.0.0: npm-run-path@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-6.0.0.tgz#25cfdc4eae04976f3349c0b1afc089052c362537" integrity sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA== dependencies: path-key "^4.0.0" @@ -2128,12 +2263,12 @@ npm-run-path@^6.0.0: object-assign@^4.0.1: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-is@^1.1.5: version "1.1.6" - resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== dependencies: call-bind "^1.0.7" @@ -2141,12 +2276,12 @@ object-is@^1.1.5: object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: version "4.1.7" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: call-bind "^1.0.8" @@ -2158,15 +2293,15 @@ object.assign@^4.1.4: onetime@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== dependencies: mimic-function "^5.0.0" -ora@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/ora/-/ora-9.0.0.tgz" - integrity sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A== +ora@^9.1.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-9.3.0.tgz#187c87cc1062350f549f481de32bf91424c2b0e3" + integrity sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw== dependencies: chalk "^5.6.2" cli-cursor "^5.0.0" @@ -2174,13 +2309,26 @@ ora@^9.0.0: is-interactive "^2.0.0" is-unicode-supported "^2.1.0" log-symbols "^7.0.1" - stdin-discarder "^0.2.2" + stdin-discarder "^0.3.1" string-width "^8.1.0" - strip-ansi "^7.1.2" + +ox@0.12.4: + version "0.12.4" + resolved "https://registry.yarnpkg.com/ox/-/ox-0.12.4.tgz#469a1b3cfb033d92bc615567875942173a2ddeb5" + integrity sha512-+P+C7QzuwPV8lu79dOwjBKfB2CbnbEXe/hfyyrff1drrO1nOOj3Hc87svHfcW1yneRr3WXaKr6nz11nq+/DF9Q== + dependencies: + "@adraffy/ens-normalize" "^1.11.0" + "@noble/ciphers" "^1.3.0" + "@noble/curves" "1.9.1" + "@noble/hashes" "^1.8.0" + "@scure/bip32" "^1.7.0" + "@scure/bip39" "^1.6.0" + abitype "^1.2.3" + eventemitter3 "5.0.1" ox@0.6.7: version "0.6.7" - resolved "https://registry.npmjs.org/ox/-/ox-0.6.7.tgz" + resolved "https://registry.yarnpkg.com/ox/-/ox-0.6.7.tgz#afd53f2ecef68b8526660e9d29dee6e6b599a832" integrity sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA== dependencies: "@adraffy/ens-normalize" "^1.10.1" @@ -2191,42 +2339,28 @@ ox@0.6.7: abitype "^1.0.6" eventemitter3 "5.0.1" -ox@0.9.6: - version "0.9.6" - resolved "https://registry.npmjs.org/ox/-/ox-0.9.6.tgz" - integrity sha512-8SuCbHPvv2eZLYXrNmC0EC12rdzXQLdhnOMlHDW2wiCPLxBrOOJwX5L5E61by+UjTPOryqQiRSnjIKCI+GykKg== - dependencies: - "@adraffy/ens-normalize" "^1.11.0" - "@noble/ciphers" "^1.3.0" - "@noble/curves" "1.9.1" - "@noble/hashes" "^1.8.0" - "@scure/bip32" "^1.7.0" - "@scure/bip39" "^1.6.0" - abitype "^1.0.9" - eventemitter3 "5.0.1" - p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" package-json-from-dist@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== parse-json@^8.0.0, parse-json@^8.3.0: version "8.3.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.3.0.tgz#88a195a2157025139a2317a4f2f9252b61304ed5" integrity sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ== dependencies: "@babel/code-frame" "^7.26.2" @@ -2235,27 +2369,27 @@ parse-json@^8.0.0, parse-json@^8.3.0: parse-ms@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-4.0.0.tgz#c0c058edd47c2a590151a718990533fd62803df4" integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-key@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== path-scurry@^1.11.1: version "1.11.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: lru-cache "^10.2.0" @@ -2263,113 +2397,113 @@ path-scurry@^1.11.1: pathe@^2.0.1, pathe@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== picocolors@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== -"picomatch@^3 || ^4", picomatch@^4.0.3: +picomatch@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== pirates@^4.0.1: version "4.0.7" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== pkg-types@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df" integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== dependencies: confbox "^0.1.8" mlly "^1.7.4" pathe "^2.0.1" -polkadot-api@^1.22.0, polkadot-api@^1.8.1, polkadot-api@>=1.19.0, polkadot-api@>=1.21.0: - version "1.22.0" - resolved "https://registry.npmjs.org/polkadot-api/-/polkadot-api-1.22.0.tgz" - integrity sha512-uREBLroPbnJxBBQ+qSkKLF493qukX4PAg32iThlELrZdxfNNgro6nvWRdVmBv73tFHvf+nyWWHKTx1c57nbixg== +polkadot-api@^1.22.0: + version "1.23.3" + resolved "https://registry.yarnpkg.com/polkadot-api/-/polkadot-api-1.23.3.tgz#8d70dc4afd8e00c736a5657342db18be489984e6" + integrity sha512-wOWli6Cfk3bO1u/W8qmwriCIKxATkNea8Jyg1jj7GzAqafxy295BYPzYHy2mJZCQ0PAVFPR4/JvCXocTLBsp5A== dependencies: - "@polkadot-api/cli" "0.16.3" - "@polkadot-api/ink-contracts" "0.4.3" + "@polkadot-api/cli" "0.18.1" + "@polkadot-api/ink-contracts" "0.4.6" "@polkadot-api/json-rpc-provider" "0.0.4" - "@polkadot-api/known-chains" "0.9.15" + "@polkadot-api/known-chains" "0.9.18" "@polkadot-api/logs-provider" "0.0.6" - "@polkadot-api/metadata-builders" "0.13.7" - "@polkadot-api/metadata-compatibility" "0.4.1" - "@polkadot-api/observable-client" "0.17.0" - "@polkadot-api/pjs-signer" "0.6.17" - "@polkadot-api/polkadot-sdk-compat" "2.3.3" + "@polkadot-api/metadata-builders" "0.13.9" + "@polkadot-api/metadata-compatibility" "0.4.4" + "@polkadot-api/observable-client" "0.17.3" + "@polkadot-api/pjs-signer" "0.6.19" + "@polkadot-api/polkadot-sdk-compat" "2.4.1" "@polkadot-api/polkadot-signer" "0.1.6" - "@polkadot-api/signer" "0.2.11" - "@polkadot-api/sm-provider" "0.1.14" - "@polkadot-api/smoldot" "0.3.14" - "@polkadot-api/substrate-bindings" "0.16.5" - "@polkadot-api/substrate-client" "0.4.7" + "@polkadot-api/signer" "0.2.13" + "@polkadot-api/sm-provider" "0.1.16" + "@polkadot-api/smoldot" "0.3.15" + "@polkadot-api/substrate-bindings" "0.17.0" + "@polkadot-api/substrate-client" "0.5.0" "@polkadot-api/utils" "0.2.0" - "@polkadot-api/ws-provider" "0.7.4" + "@polkadot-api/ws-provider" "0.7.5" "@rx-state/core" "^0.1.4" possible-typed-array-names@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== postcss-load-config@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-6.0.1.tgz#6fd7dcd8ae89badcf1b2d644489cbabf83aa8096" integrity sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g== dependencies: lilconfig "^3.1.1" prettier@^3.3.3: - version "3.7.4" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz" - integrity sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA== + version "3.8.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.8.1.tgz#edf48977cf991558f4fcbd8a3ba6015ba2a3a173" + integrity sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg== pretty-ms@^9.2.0: version "9.3.0" - resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-9.3.0.tgz#dd2524fcb3c326b4931b2272dfd1e1a8ed9a9f5a" integrity sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ== dependencies: parse-ms "^4.0.0" propagate@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== punycode@^2.1.0: version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== randombytes@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" read-pkg@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-10.0.0.tgz" - integrity sha512-A70UlgfNdKI5NSvTTfHzLQj7NJRpJ4mT5tGafkllJ4wh71oYuGm/pzphHcmW4s35iox56KSK721AihodoXSc/A== + version "10.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-10.1.0.tgz#eff31c7e505a4995a85c5af017b3dc413745431c" + integrity sha512-I8g2lArQiP78ll51UeMZojewtYgIRCKCWqZEgOO8c/uefTI+XDXvCSXu3+YNUaTNvZzobrL5+SqHjBrByRRTdg== dependencies: "@types/normalize-package-data" "^2.4.4" normalize-package-data "^8.0.0" parse-json "^8.3.0" - type-fest "^5.2.0" - unicorn-magic "^0.3.0" + type-fest "^5.4.4" + unicorn-magic "^0.4.0" read-pkg@^9.0.1: version "9.0.1" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-9.0.1.tgz#b1b81fb15104f5dbb121b6bbdee9bbc9739f569b" integrity sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA== dependencies: "@types/normalize-package-data" "^2.4.3" @@ -2380,73 +2514,76 @@ read-pkg@^9.0.1: readdirp@^4.0.1: version "4.1.2" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== restore-cursor@^5.0.0: version "5.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== dependencies: onetime "^7.0.0" signal-exit "^4.1.0" rollup@^4.34.8: - version "4.53.3" - resolved "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz" - integrity sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA== + version "4.59.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.59.0.tgz#cf74edac17c1486f562d728a4d923a694abdf06f" + integrity sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.53.3" - "@rollup/rollup-android-arm64" "4.53.3" - "@rollup/rollup-darwin-arm64" "4.53.3" - "@rollup/rollup-darwin-x64" "4.53.3" - "@rollup/rollup-freebsd-arm64" "4.53.3" - "@rollup/rollup-freebsd-x64" "4.53.3" - "@rollup/rollup-linux-arm-gnueabihf" "4.53.3" - "@rollup/rollup-linux-arm-musleabihf" "4.53.3" - "@rollup/rollup-linux-arm64-gnu" "4.53.3" - "@rollup/rollup-linux-arm64-musl" "4.53.3" - "@rollup/rollup-linux-loong64-gnu" "4.53.3" - "@rollup/rollup-linux-ppc64-gnu" "4.53.3" - "@rollup/rollup-linux-riscv64-gnu" "4.53.3" - "@rollup/rollup-linux-riscv64-musl" "4.53.3" - "@rollup/rollup-linux-s390x-gnu" "4.53.3" - "@rollup/rollup-linux-x64-gnu" "4.53.3" - "@rollup/rollup-linux-x64-musl" "4.53.3" - "@rollup/rollup-openharmony-arm64" "4.53.3" - "@rollup/rollup-win32-arm64-msvc" "4.53.3" - "@rollup/rollup-win32-ia32-msvc" "4.53.3" - "@rollup/rollup-win32-x64-gnu" "4.53.3" - "@rollup/rollup-win32-x64-msvc" "4.53.3" + "@rollup/rollup-android-arm-eabi" "4.59.0" + "@rollup/rollup-android-arm64" "4.59.0" + "@rollup/rollup-darwin-arm64" "4.59.0" + "@rollup/rollup-darwin-x64" "4.59.0" + "@rollup/rollup-freebsd-arm64" "4.59.0" + "@rollup/rollup-freebsd-x64" "4.59.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.59.0" + "@rollup/rollup-linux-arm-musleabihf" "4.59.0" + "@rollup/rollup-linux-arm64-gnu" "4.59.0" + "@rollup/rollup-linux-arm64-musl" "4.59.0" + "@rollup/rollup-linux-loong64-gnu" "4.59.0" + "@rollup/rollup-linux-loong64-musl" "4.59.0" + "@rollup/rollup-linux-ppc64-gnu" "4.59.0" + "@rollup/rollup-linux-ppc64-musl" "4.59.0" + "@rollup/rollup-linux-riscv64-gnu" "4.59.0" + "@rollup/rollup-linux-riscv64-musl" "4.59.0" + "@rollup/rollup-linux-s390x-gnu" "4.59.0" + "@rollup/rollup-linux-x64-gnu" "4.59.0" + "@rollup/rollup-linux-x64-musl" "4.59.0" + "@rollup/rollup-openbsd-x64" "4.59.0" + "@rollup/rollup-openharmony-arm64" "4.59.0" + "@rollup/rollup-win32-arm64-msvc" "4.59.0" + "@rollup/rollup-win32-ia32-msvc" "4.59.0" + "@rollup/rollup-win32-x64-gnu" "4.59.0" + "@rollup/rollup-win32-x64-msvc" "4.59.0" fsevents "~2.3.2" -rxjs@^7.8.1, rxjs@^7.8.2, rxjs@>=7, rxjs@>=7.8.0, rxjs@>=7.8.1: +rxjs@^7.8.1, rxjs@^7.8.2: version "7.8.2" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== dependencies: tslib "^2.1.0" safe-buffer@^5.1.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex-test@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== dependencies: call-bound "^1.0.2" @@ -2455,24 +2592,24 @@ safe-regex-test@^1.1.0: scale-ts@^1.6.0, scale-ts@^1.6.1: version "1.6.1" - resolved "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.1.tgz" + resolved "https://registry.yarnpkg.com/scale-ts/-/scale-ts-1.6.1.tgz#45151e156d6c04792223c39d8e7484ce926445f2" integrity sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g== semver@^7.3.5: - version "7.7.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz" - integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + version "7.7.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a" + integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA== serialize-javascript@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== dependencies: randombytes "^2.1.0" set-function-length@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: define-data-property "^1.1.4" @@ -2484,52 +2621,52 @@ set-function-length@^1.2.2: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -smoldot@2.0.26, smoldot@2.x: +smoldot@2.0.26: version "2.0.26" - resolved "https://registry.npmjs.org/smoldot/-/smoldot-2.0.26.tgz" + resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-2.0.26.tgz#0e64c7fcd26240fbe4c8d6b6e4b9a9aca77e00f6" integrity sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig== dependencies: ws "^8.8.1" -smoldot@2.0.39: - version "2.0.39" - resolved "https://registry.npmjs.org/smoldot/-/smoldot-2.0.39.tgz" - integrity sha512-yFMSzI6nkqWFTNao99lBA/TguUFU+bR3A5UGTDd/QqqB12jqzvZnmW/No6l2rKmagt8Qx/KybMNowV/E28znhA== +smoldot@2.0.40: + version "2.0.40" + resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-2.0.40.tgz#c898b303d6b2bd512c3b7cbad1799fecc9aa7fb5" + integrity sha512-h6XC/kKDLdZBBTI0X8y4ZxmaZ2KYVVB0+5isCQm6j26ljeNjHZUDOV+hf8VyoE23+jg00wrxNJ2IVcIAURxwtg== dependencies: ws "^8.8.1" sort-keys@^5.0.0: version "5.1.0" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-5.1.0.tgz#50a3f3d1ad3c5a76d043e0aeeba7299241e9aa5c" integrity sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ== dependencies: is-plain-obj "^4.0.0" source-map@0.8.0-beta.0: version "0.8.0-beta.0" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== dependencies: whatwg-url "^7.0.0" spdx-correct@^3.0.0: version "3.2.0" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" @@ -2537,30 +2674,30 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.5.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.22" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz" - integrity sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ== + version "3.0.23" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz#b069e687b1291a32f126893ed76a27a745ee2133" + integrity sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw== -stdin-discarder@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz" - integrity sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ== +stdin-discarder@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.3.1.tgz#92a1e741e709248865d0562bb7babe84d350ae6a" + integrity sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA== "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -2569,7 +2706,7 @@ stdin-discarder@^0.2.2: string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -2578,7 +2715,7 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" @@ -2586,54 +2723,47 @@ string-width@^5.0.1, string-width@^5.1.2: strip-ansi "^7.0.1" string-width@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz" - integrity sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg== + version "8.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-8.2.0.tgz#bdb6a9bd6d7800db635adae96cdb0443fec56c42" + integrity sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw== dependencies: - get-east-asian-width "^1.3.0" - strip-ansi "^7.1.0" + get-east-asian-width "^1.5.0" + strip-ansi "^7.1.2" "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: - version "7.1.2" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz" - integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== - dependencies: - ansi-regex "^6.0.1" - -strip-ansi@^7.1.0, strip-ansi@^7.1.2: - version "7.1.2" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz" - integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== +strip-ansi@^7.0.1, strip-ansi@^7.1.2: + version "7.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3" + integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== dependencies: - ansi-regex "^6.0.1" + ansi-regex "^6.2.2" strip-final-newline@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz#35a369ec2ac43df356e3edd5dcebb6429aa1fa5c" integrity sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== sucrase@^3.35.0: version "3.35.1" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.1.tgz#4619ea50393fe8bd0ae5071c26abd9b2e346bfe1" integrity sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw== dependencies: "@jridgewell/gen-mapping" "^0.3.2" @@ -2646,45 +2776,45 @@ sucrase@^3.35.0: supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.1.1: version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" tagged-tag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/tagged-tag/-/tagged-tag-1.0.0.tgz#a0b5917c2864cba54841495abfa3f6b13edcf4d6" integrity sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng== thenify-all@^1.0.0: version "1.6.0" - resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== dependencies: thenify ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== dependencies: any-promise "^1.0.0" tinyexec@^0.3.2: version "0.3.2" - resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== tinyglobby@^0.2.11: version "0.2.15" - resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== dependencies: fdir "^6.5.0" @@ -2692,24 +2822,24 @@ tinyglobby@^0.2.11: tr46@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== dependencies: punycode "^2.1.0" tree-kill@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== ts-interface-checker@^0.1.9: version "0.1.13" - resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== ts-node@^10.9.2: version "10.9.2" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -2728,22 +2858,22 @@ ts-node@^10.9.2: tsc-prog@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/tsc-prog/-/tsc-prog-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/tsc-prog/-/tsc-prog-2.3.0.tgz#b14ffb4e9487cca5cf42185f2a94963978faf8ee" integrity sha512-ycET2d75EgcX7y8EmG4KiZkLAwUzbY4xRhA6NU0uVbHkY4ZjrAAuzTMxXI85kOwATqPnBI5C/7y7rlpY0xdqHA== -tslib@^2.1.0, tslib@^2.7.0, tslib@^2.8.0, tslib@^2.8.1: - version "2.8.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - tslib@2.7.0: version "2.7.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== +tslib@^2.1.0, tslib@^2.7.0, tslib@^2.8.0, tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tsup@8.5.0: version "8.5.0" - resolved "https://registry.npmjs.org/tsup/-/tsup-8.5.0.tgz" + resolved "https://registry.yarnpkg.com/tsup/-/tsup-8.5.0.tgz#4b1e25b1a8f4e4f89b764207bf37cfe2d7411d31" integrity sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ== dependencies: bundle-require "^5.1.0" @@ -2766,54 +2896,64 @@ tsup@8.5.0: type-fest@^4.23.0, type-fest@^4.39.1, type-fest@^4.6.0: version "4.41.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== -type-fest@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-5.3.0.tgz" - integrity sha512-d9CwU93nN0IA1QL+GSNDdwLAu1Ew5ZjTwupvedwg3WdfoH6pIDvYQ2hV0Uc2nKBLPq7NB5apCx57MLS5qlmO5g== +type-fest@^5.4.4: + version "5.4.4" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-5.4.4.tgz#577f165b5ecb44cfc686559cc54ca77f62aa374d" + integrity sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw== dependencies: tagged-tag "^1.0.0" -typescript@^5.7.2, typescript@^5.9.3, typescript@>=2.7, typescript@>=4, typescript@>=4.5.0, typescript@>=5.0.4, typescript@>=5.4.0: +typescript@^5.7.2, typescript@^5.9.3: version "5.9.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== ufo@^1.6.1: - version "1.6.1" - resolved "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz" - integrity sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA== + version "1.6.3" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.3.tgz#799666e4e88c122a9659805e30b9dc071c3aed4f" + integrity sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q== undici-types@~6.19.2: version "6.19.8" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== undici-types@~6.21.0: version "6.21.0" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== undici-types@~7.16.0: version "7.16.0" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== +undici-types@~7.18.0: + version "7.18.2" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" + integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== + unicorn-magic@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== unicorn-magic@^0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104" integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== +unicorn-magic@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.4.0.tgz#78c6a090fd6d07abd2468b83b385603e00dfdb24" + integrity sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw== + util@^0.12.5: version "0.12.5" - resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: inherits "^2.0.3" @@ -2824,34 +2964,20 @@ util@^0.12.5: v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== validate-npm-package-license@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -viem@^2.37.9: - version "2.41.2" - resolved "https://registry.npmjs.org/viem/-/viem-2.41.2.tgz" - integrity sha512-LYliajglBe1FU6+EH9mSWozp+gRA/QcHfxeD9Odf83AdH5fwUS7DroH4gHvlv6Sshqi1uXrYFA2B/EOczxd15g== - dependencies: - "@noble/curves" "1.9.1" - "@noble/hashes" "1.8.0" - "@scure/bip32" "1.7.0" - "@scure/bip39" "1.6.0" - abitype "1.1.0" - isows "1.0.7" - ox "0.9.6" - ws "8.18.3" - viem@2.23.4: version "2.23.4" - resolved "https://registry.npmjs.org/viem/-/viem-2.23.4.tgz" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.23.4.tgz#164279352d7b5df2603e3d338386b026dc355b80" integrity sha512-UQquuolKlS1w5H5e0Fd1KKoUlIPJryIEBzY5AUhGyV1ka+9O6+3uYVhUzj6RbvGK0PtsMKn2ddwPZFwjNDVU/A== dependencies: "@noble/curves" "1.8.1" @@ -2863,19 +2989,33 @@ viem@2.23.4: ox "0.6.7" ws "8.18.0" +viem@^2.37.9: + version "2.46.3" + resolved "https://registry.yarnpkg.com/viem/-/viem-2.46.3.tgz#0927e4da4380d6c87c7506a7c6b14cbdc0f3802f" + integrity sha512-2LJS+Hyh2sYjHXQtzfv1kU9pZx9dxFzvoU/ZKIcn0FNtOU0HQuIICuYdWtUDFHaGXbAdVo8J1eCvmjkL9JVGwg== + dependencies: + "@noble/curves" "1.9.1" + "@noble/hashes" "1.8.0" + "@scure/bip32" "1.7.0" + "@scure/bip39" "1.6.0" + abitype "1.2.3" + isows "1.0.7" + ox "0.12.4" + ws "8.18.3" + web-streams-polyfill@^3.0.3: version "3.3.3" - resolved "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== webidl-conversions@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== whatwg-url@^7.0.0: version "7.1.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== dependencies: lodash.sortby "^4.7.0" @@ -2883,9 +3023,9 @@ whatwg-url@^7.0.0: webidl-conversions "^4.0.2" which-typed-array@^1.1.16, which-typed-array@^1.1.2: - version "1.1.19" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz" - integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + version "1.1.20" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" + integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== dependencies: available-typed-arrays "^1.0.7" call-bind "^1.0.8" @@ -2897,19 +3037,19 @@ which-typed-array@^1.1.16, which-typed-array@^1.1.2: which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" workerpool@^9.2.0: version "9.3.4" - resolved "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-9.3.4.tgz#f6c92395b2141afd78e2a889e80cb338fe9fca41" integrity sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg== "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -2918,7 +3058,7 @@ workerpool@^9.2.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -2927,7 +3067,7 @@ wrap-ansi@^7.0.0: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -2936,7 +3076,7 @@ wrap-ansi@^8.1.0: write-file-atomic@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== dependencies: imurmurhash "^0.1.4" @@ -2944,7 +3084,7 @@ write-file-atomic@^5.0.1: write-json-file@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-6.0.0.tgz#52f5d8178c5beb543ed14a2a24195b696b27e7cb" integrity sha512-MNHcU3f9WxnNyR6MxsYSj64Jz0+dwIpisWKWq9gqLj/GwmA9INg3BZ3vt70/HB3GEwrnDQWr4RPrywnhNzmUFA== dependencies: detect-indent "^7.0.1" @@ -2954,7 +3094,7 @@ write-json-file@^6.0.0: write-package@^7.2.0: version "7.2.0" - resolved "https://registry.npmjs.org/write-package/-/write-package-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/write-package/-/write-package-7.2.0.tgz#d84e5a0dfe92cb7d17399adc8c083d38671cd871" integrity sha512-uMQTubF/vcu+Wd0b5BGtDmiXePd/+44hUWQz2nZPbs92/BnxRo74tqs+hqDo12RLiEd+CXFKUwxvvIZvtt34Jw== dependencies: deepmerge-ts "^7.1.0" @@ -2963,34 +3103,39 @@ write-package@^7.2.0: type-fest "^4.23.0" write-json-file "^6.0.0" -ws@*, ws@^8.18.0, ws@^8.18.2, ws@^8.18.3, ws@^8.8.1, ws@8.18.3: - version "8.18.3" - resolved "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== - ws@8.17.1: version "8.17.1" - resolved "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== ws@8.18.0: version "8.18.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== +ws@8.18.3: + version "8.18.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== + +ws@^8.18.0, ws@^8.18.2, ws@^8.19.0, ws@^8.8.1: + version "8.19.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" + integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== + y18n@^5.0.5: version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs-unparser@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== dependencies: camelcase "^6.0.0" @@ -3000,7 +3145,7 @@ yargs-unparser@^2.0.0: yargs@^17.7.2: version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -3013,15 +3158,15 @@ yargs@^17.7.2: yn@3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yoctocolors@^2.1.1: version "2.1.2" - resolved "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.1.2.tgz#d795f54d173494e7d8db93150cec0ed7f678c83a" integrity sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug== diff --git a/scripts/benchmark.sh b/scripts/benchmark.sh index d82a9a5a1f..4a1c99a62c 100755 --- a/scripts/benchmark.sh +++ b/scripts/benchmark.sh @@ -16,6 +16,6 @@ RUNTIME_WASM=./target/production/wbuild/node-subtensor-runtime/node_subtensor_ru --genesis-builder-preset=benchmark \ --wasm-execution=compiled \ --pallet=pallet_subtensor \ - --extrinsic="$dissolve_network" \ + --extrinsic="$EXTRINSIC" \ --steps 50 \ --repeat 5 \ From 9eb810cf45d571e4dc87c6bc108578ab0813e7ae Mon Sep 17 00:00:00 2001 From: open-junius Date: Tue, 3 Mar 2026 15:53:42 +0800 Subject: [PATCH 43/51] not lock yarn dep --- contract-tests/package.json | 2 +- contract-tests/run-ci.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/contract-tests/package.json b/contract-tests/package.json index ac78b06b02..f7369c501f 100644 --- a/contract-tests/package.json +++ b/contract-tests/package.json @@ -12,13 +12,13 @@ "@polkadot-labs/hdkd": "^0.0.25", "@polkadot-labs/hdkd-helpers": "^0.0.25", "@polkadot/api": "^16.4.6", - "@polkadot/util": "^14.0.1", "@polkadot/util-crypto": "^14.0.1", "@types/mocha": "^10.0.10", "dotenv": "17.2.1", "ethers": "^6.13.5", "mocha": "^11.1.0", "polkadot-api": "^1.22.0", + "@polkadot/keyring": "^14.0.1", "rxjs": "^7.8.2", "scale-ts": "^1.6.1", "viem": "2.23.4", diff --git a/contract-tests/run-ci.sh b/contract-tests/run-ci.sh index 0ea0e72297..509e6322cd 100755 --- a/contract-tests/run-ci.sh +++ b/contract-tests/run-ci.sh @@ -45,7 +45,7 @@ bash get-metadata.sh sleep 5 -yarn install --frozen-lockfile +yarn install yarn run test TEST_EXIT_CODE=$? From ebee8a9ab2b228aa9e66e29e9b67b6e99f20b2b4 Mon Sep 17 00:00:00 2001 From: open-junius Date: Tue, 3 Mar 2026 16:50:17 +0800 Subject: [PATCH 44/51] upgrade polkadot-api --- contract-tests/package.json | 3 +-- contract-tests/yarn.lock | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/contract-tests/package.json b/contract-tests/package.json index f7369c501f..62c7d0fcdc 100644 --- a/contract-tests/package.json +++ b/contract-tests/package.json @@ -17,8 +17,7 @@ "dotenv": "17.2.1", "ethers": "^6.13.5", "mocha": "^11.1.0", - "polkadot-api": "^1.22.0", - "@polkadot/keyring": "^14.0.1", + "polkadot-api": "^1.23.3", "rxjs": "^7.8.2", "scale-ts": "^1.6.1", "viem": "2.23.4", diff --git a/contract-tests/yarn.lock b/contract-tests/yarn.lock index ef52e6be10..c5ff9bcd84 100644 --- a/contract-tests/yarn.lock +++ b/contract-tests/yarn.lock @@ -2424,7 +2424,7 @@ pkg-types@^1.3.1: mlly "^1.7.4" pathe "^2.0.1" -polkadot-api@^1.22.0: +polkadot-api@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/polkadot-api/-/polkadot-api-1.23.3.tgz#8d70dc4afd8e00c736a5657342db18be489984e6" integrity sha512-wOWli6Cfk3bO1u/W8qmwriCIKxATkNea8Jyg1jj7GzAqafxy295BYPzYHy2mJZCQ0PAVFPR4/JvCXocTLBsp5A== From 7fbca9a7d481831f3d97982e7994d5238a3edffd Mon Sep 17 00:00:00 2001 From: open-junius Date: Tue, 3 Mar 2026 20:53:33 +0800 Subject: [PATCH 45/51] fix low tx fee --- .../test/crowdloan.precompile.test.ts | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/contract-tests/test/crowdloan.precompile.test.ts b/contract-tests/test/crowdloan.precompile.test.ts index a15704790b..369c73d298 100644 --- a/contract-tests/test/crowdloan.precompile.test.ts +++ b/contract-tests/test/crowdloan.precompile.test.ts @@ -17,6 +17,8 @@ describe("Test Crowdloan precompile", () => { let publicClient: PublicClient; let api: TypedApi + const transactionFeeTolerance = 10_000_000; + const alice = getAliceSigner(); const wallet1 = generateRandomEthersWallet(); const wallet2 = generateRandomEthersWallet(); @@ -139,7 +141,7 @@ describe("Test Crowdloan precompile", () => { await tx.wait(); let balanceAfter = await api.query.System.Account.getValue(convertH160ToSS58(wallet1.address)); - assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(contribution) < 20_000_000); + assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(contribution) < transactionFeeTolerance); crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -156,7 +158,7 @@ describe("Test Crowdloan precompile", () => { await tx2.wait(); balanceAfter = await api.query.System.Account.getValue(convertH160ToSS58(wallet1.address)); - assert.ok(Number(balanceAfter.data.free) - Number(balanceBefore.data.free + contribution) < 1_000_000); + assert.ok(Number(balanceBefore.data.free + contribution) - Number(balanceAfter.data.free) < transactionFeeTolerance); crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -189,7 +191,7 @@ describe("Test Crowdloan precompile", () => { await tx.wait(); let balanceAfter = await api.query.System.Account.getValue(convertH160ToSS58(wallet1.address)); - assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(deposit) < 20_000_000); + assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(deposit) < transactionFeeTolerance); let crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -208,7 +210,7 @@ describe("Test Crowdloan precompile", () => { await tx.wait(); balanceAfter = await api.query.System.Account.getValue(convertH160ToSS58(wallet2.address)); - assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(contribution) < 1_000_000); + assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(contribution) < transactionFeeTolerance); crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -225,7 +227,7 @@ describe("Test Crowdloan precompile", () => { await tx2.wait(); balanceAfter = await api.query.System.Account.getValue(convertH160ToSS58(wallet2.address)); - assert.ok(Number(balanceAfter.data.free) - Number(balanceBefore.data.free + contribution) < 1_000_000); + assert.ok(Number(balanceAfter.data.free) - Number(balanceBefore.data.free + contribution) < transactionFeeTolerance); crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -329,11 +331,11 @@ describe("Test Crowdloan precompile", () => { await tx.wait(); const balanceAfter2 = await api.query.System.Account.getValue(convertH160ToSS58(wallet2.address)); - assert.ok(Number(balanceAfter2.data.free) - Number(balanceBefore2.data.free) < 1_000_000); + assert.ok(Number(balanceAfter2.data.free) - Number(balanceBefore2.data.free) < transactionFeeTolerance); const balanceAfter3 = await api.query.System.Account.getValue(convertH160ToSS58(wallet3.address)); - assert.ok(Number(balanceAfter3.data.free) - Number(balanceBefore3.data.free) < 1_000_000); + assert.ok(Number(balanceAfter3.data.free) - Number(balanceBefore3.data.free) < transactionFeeTolerance); const balanceAfter4 = await api.query.System.Account.getValue(convertH160ToSS58(wallet4.address)); - assert.ok(Number(balanceAfter4.data.free) - Number(balanceBefore4.data.free) < 1_000_000); + assert.ok(Number(balanceAfter4.data.free) - Number(balanceBefore4.data.free) < transactionFeeTolerance); crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -351,7 +353,7 @@ describe("Test Crowdloan precompile", () => { assert.equal(crowdloan, undefined); const balanceAfter1 = await api.query.System.Account.getValue(convertH160ToSS58(wallet1.address)); - assert.ok(Number(balanceAfter1.data.free) - Number(balanceBefore1.data.free) < 2_000_000); + assert.ok(Number(balanceAfter1.data.free) - Number(balanceBefore1.data.free) < transactionFeeTolerance); }); it("updates the min contribution", async () => { From f9191d61cd00aa60e43e5c10c244333f1a09ed2b Mon Sep 17 00:00:00 2001 From: open-junius Date: Tue, 3 Mar 2026 22:16:13 +0800 Subject: [PATCH 46/51] correct weigth in on_idle --- .../test/crowdloan.precompile.test.ts | 20 +++++++++---------- pallets/subtensor/src/macros/hooks.rs | 6 ++---- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/contract-tests/test/crowdloan.precompile.test.ts b/contract-tests/test/crowdloan.precompile.test.ts index 369c73d298..70c93ca5f4 100644 --- a/contract-tests/test/crowdloan.precompile.test.ts +++ b/contract-tests/test/crowdloan.precompile.test.ts @@ -17,8 +17,6 @@ describe("Test Crowdloan precompile", () => { let publicClient: PublicClient; let api: TypedApi - const transactionFeeTolerance = 10_000_000; - const alice = getAliceSigner(); const wallet1 = generateRandomEthersWallet(); const wallet2 = generateRandomEthersWallet(); @@ -141,7 +139,7 @@ describe("Test Crowdloan precompile", () => { await tx.wait(); let balanceAfter = await api.query.System.Account.getValue(convertH160ToSS58(wallet1.address)); - assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(contribution) < transactionFeeTolerance); + assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(contribution) < 1_000_000); crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -158,7 +156,7 @@ describe("Test Crowdloan precompile", () => { await tx2.wait(); balanceAfter = await api.query.System.Account.getValue(convertH160ToSS58(wallet1.address)); - assert.ok(Number(balanceBefore.data.free + contribution) - Number(balanceAfter.data.free) < transactionFeeTolerance); + assert.ok(Number(balanceAfter.data.free) - Number(balanceBefore.data.free + contribution) < 1_000_000); crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -191,7 +189,7 @@ describe("Test Crowdloan precompile", () => { await tx.wait(); let balanceAfter = await api.query.System.Account.getValue(convertH160ToSS58(wallet1.address)); - assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(deposit) < transactionFeeTolerance); + assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(deposit) < 1_000_000); let crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -210,7 +208,7 @@ describe("Test Crowdloan precompile", () => { await tx.wait(); balanceAfter = await api.query.System.Account.getValue(convertH160ToSS58(wallet2.address)); - assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(contribution) < transactionFeeTolerance); + assert.ok(Number(balanceBefore.data.free - balanceAfter.data.free) - Number(contribution) < 1_000_000); crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -227,7 +225,7 @@ describe("Test Crowdloan precompile", () => { await tx2.wait(); balanceAfter = await api.query.System.Account.getValue(convertH160ToSS58(wallet2.address)); - assert.ok(Number(balanceAfter.data.free) - Number(balanceBefore.data.free + contribution) < transactionFeeTolerance); + assert.ok(Number(balanceAfter.data.free) - Number(balanceBefore.data.free + contribution) < 1_000_000); crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -331,11 +329,11 @@ describe("Test Crowdloan precompile", () => { await tx.wait(); const balanceAfter2 = await api.query.System.Account.getValue(convertH160ToSS58(wallet2.address)); - assert.ok(Number(balanceAfter2.data.free) - Number(balanceBefore2.data.free) < transactionFeeTolerance); + assert.ok(Number(balanceAfter2.data.free) - Number(balanceBefore2.data.free) < 1_000_000); const balanceAfter3 = await api.query.System.Account.getValue(convertH160ToSS58(wallet3.address)); - assert.ok(Number(balanceAfter3.data.free) - Number(balanceBefore3.data.free) < transactionFeeTolerance); + assert.ok(Number(balanceAfter3.data.free) - Number(balanceBefore3.data.free) < 1_000_000); const balanceAfter4 = await api.query.System.Account.getValue(convertH160ToSS58(wallet4.address)); - assert.ok(Number(balanceAfter4.data.free) - Number(balanceBefore4.data.free) < transactionFeeTolerance); + assert.ok(Number(balanceAfter4.data.free) - Number(balanceBefore4.data.free) < 1_000_000); crowdloan = await api.query.Crowdloan.Crowdloans.getValue(nextId); assert.ok(crowdloan); @@ -353,7 +351,7 @@ describe("Test Crowdloan precompile", () => { assert.equal(crowdloan, undefined); const balanceAfter1 = await api.query.System.Account.getValue(convertH160ToSS58(wallet1.address)); - assert.ok(Number(balanceAfter1.data.free) - Number(balanceBefore1.data.free) < transactionFeeTolerance); + assert.ok(Number(balanceAfter1.data.free) - Number(balanceBefore1.data.free) < 2_000_000); }); it("updates the min contribution", async () => { diff --git a/pallets/subtensor/src/macros/hooks.rs b/pallets/subtensor/src/macros/hooks.rs index 97e4a107d0..8f07091d4b 100644 --- a/pallets/subtensor/src/macros/hooks.rs +++ b/pallets/subtensor/src/macros/hooks.rs @@ -180,9 +180,7 @@ mod hooks { } fn on_idle(_block: BlockNumberFor, limit: Weight) -> Weight { - limit.saturating_sub(Self::remove_data_for_dissolved_networks( - limit.saturating_div(2), - )) + limit.saturating_sub(Self::remove_data_for_dissolved_networks(limit)) } } @@ -231,7 +229,7 @@ mod hooks { // - The remaining weight for the function. // // # Returns: - // * 'Weight': The weight consumed by the function. + // * 'Weight': The weight remaining after the function. // fn remove_data_for_dissolved_networks(remaining_weight: Weight) -> Weight { let mut remaining_weight = remaining_weight; From 3adb0b8b6539b18520221b18e5e8fec875fd05a9 Mon Sep 17 00:00:00 2001 From: open-junius Date: Fri, 6 Mar 2026 19:07:08 +0800 Subject: [PATCH 47/51] add batch size parameter --- common/src/lib.rs | 88 ++++++++++++++++----- pallets/commitments/src/lib.rs | 19 +++-- pallets/subtensor/src/coinbase/root.rs | 46 +++++++---- pallets/subtensor/src/lib.rs | 4 +- pallets/subtensor/src/staking/claim_root.rs | 3 +- pallets/swap/src/pallet/impls.rs | 13 +-- 6 files changed, 126 insertions(+), 47 deletions(-) diff --git a/common/src/lib.rs b/common/src/lib.rs index 8bdb1dfce1..c62cf3642c 100644 --- a/common/src/lib.rs +++ b/common/src/lib.rs @@ -455,11 +455,13 @@ macro_rules! WeightMeterWrapper { }}; } +pub const BATCH_SIZE: u32 = 1024; + #[macro_export] macro_rules! LoopRemovePrefixWithWeightMeter { - ( $meter:expr, $weight:expr, $body:expr ) => {{ + ( $meter:expr, $weight:expr, $batch_size:expr, $body:expr ) => {{ loop { - if !$meter.can_consume($weight.saturating_mul(1024)) { + if !$meter.can_consume($weight.saturating_mul($batch_size as u64)) { return $meter.consumed(); } let result = $body; @@ -477,6 +479,9 @@ macro_rules! LoopRemovePrefixWithWeightMeter { mod tests { use super::*; use frame_support::weights::WeightMeter; + const REF_TIME_WEIGHT: u64 = 100; + const PROOF_SIZE_WEIGHT: u64 = 100; + const BATCH_SIZE_U64: u64 = BATCH_SIZE as u64; struct TestBody { count: u64, @@ -524,42 +529,87 @@ mod tests { fn test_loop( remaining_weight: Weight, weight: Weight, - mut body: TestBody, + body: &mut TestBody, number: u64, ) -> Weight { let mut weight_meter = WeightMeter::with_limit(remaining_weight); - LoopRemovePrefixWithWeightMeter!(weight_meter, weight, body.execute(number)); + LoopRemovePrefixWithWeightMeter!(weight_meter, weight, BATCH_SIZE, body.execute(number)); weight_meter.consumed() } #[test] fn test_weight_meter_wrapper() { - let remaining_weight = Weight::from_parts(200, 200); - let used_weight = test_weight(remaining_weight, Weight::from_parts(100, 100)); + // enough to consume one ref and one proof + let remaining_weight = Weight::from_parts(REF_TIME_WEIGHT * 2, PROOF_SIZE_WEIGHT * 2); + let used_weight = test_weight( + remaining_weight, + Weight::from_parts(REF_TIME_WEIGHT, PROOF_SIZE_WEIGHT), + ); assert_eq!(used_weight, Weight::from_parts(100, 100)); - let used_weight = test_weight(remaining_weight, Weight::from_parts(300, 300)); + // not enough to consume three ref and three proof + let used_weight = test_weight( + remaining_weight, + Weight::from_parts(REF_TIME_WEIGHT * 3, PROOF_SIZE_WEIGHT * 3), + ); assert_eq!(used_weight, Weight::from_parts(0, 0)); } #[test] fn test_loop_remove_prefix_with_weight_meter() { // remaining weight matches the body count - let body = TestBody::new(1024); - let remaining_weight = Weight::from_parts(100 * 1024, 100 * 1024); - let used_weight = test_loop(remaining_weight, Weight::from_parts(100, 100), body, 1024); - assert_eq!(used_weight, Weight::from_parts(100, 100) * 1024); + let mut body = TestBody::new(BATCH_SIZE as u64); + let remaining_weight = Weight::from_parts( + REF_TIME_WEIGHT * BATCH_SIZE as u64, + PROOF_SIZE_WEIGHT * BATCH_SIZE as u64, + ); + let used_weight = test_loop( + remaining_weight, + Weight::from_parts(REF_TIME_WEIGHT, PROOF_SIZE_WEIGHT), + &mut body, + BATCH_SIZE as u64, + ); + assert_eq!( + used_weight, + Weight::from_parts(REF_TIME_WEIGHT, PROOF_SIZE_WEIGHT) * BATCH_SIZE as u64 + ); + assert_eq!(body.count, 0); // remaining weight is less than the body count - let body = TestBody::new(1025); - let remaining_weight = Weight::from_parts(100 * 1024, 100 * 1024); - let used_weight = test_loop(remaining_weight, Weight::from_parts(100, 100), body, 1024); - assert_eq!(used_weight, Weight::from_parts(100, 100) * 1024); + let count = BATCH_SIZE_U64 + 1; + let mut body = TestBody::new(count); + let remaining_weight = Weight::from_parts( + REF_TIME_WEIGHT * BATCH_SIZE_U64, + PROOF_SIZE_WEIGHT * BATCH_SIZE_U64, + ); + let used_weight = test_loop( + remaining_weight, + Weight::from_parts(REF_TIME_WEIGHT, PROOF_SIZE_WEIGHT), + &mut body, + BATCH_SIZE_U64, + ); + assert_eq!( + used_weight, + Weight::from_parts(REF_TIME_WEIGHT, PROOF_SIZE_WEIGHT) * BATCH_SIZE_U64 + ); + assert_eq!(body.count, 1); // remaining weight is more than the body count - let body = TestBody::new(1025); - let remaining_weight = Weight::from_parts(100 * 1024 * 2, 100 * 1024 * 2); - let used_weight = test_loop(remaining_weight, Weight::from_parts(100, 100), body, 1024); - assert_eq!(used_weight, Weight::from_parts(100, 100) * 1025); + let mut body = TestBody::new(count); + let remaining_weight = Weight::from_parts( + REF_TIME_WEIGHT * BATCH_SIZE_U64 * 2, + PROOF_SIZE_WEIGHT * BATCH_SIZE_U64 * 2, + ); + let used_weight = test_loop( + remaining_weight, + Weight::from_parts(REF_TIME_WEIGHT, PROOF_SIZE_WEIGHT), + &mut body, + BATCH_SIZE_U64, + ); + assert_eq!( + used_weight, + Weight::from_parts(REF_TIME_WEIGHT, PROOF_SIZE_WEIGHT) * count + ); + assert_eq!(body.count, 0); } } diff --git a/pallets/commitments/src/lib.rs b/pallets/commitments/src/lib.rs index 7c3423ccf3..3840fa7de8 100644 --- a/pallets/commitments/src/lib.rs +++ b/pallets/commitments/src/lib.rs @@ -24,7 +24,9 @@ use scale_info::prelude::collections::BTreeSet; use sp_runtime::SaturatedConversion; use sp_runtime::{Saturating, Weight, traits::Zero}; use sp_std::{boxed::Box, vec::Vec}; -use subtensor_runtime_common::{LoopRemovePrefixWithWeightMeter, NetUid, WeightMeterWrapper}; +use subtensor_runtime_common::{ + BATCH_SIZE, LoopRemovePrefixWithWeightMeter, NetUid, WeightMeterWrapper, +}; use tle::{ curves::drand::TinyBLS381, stream_ciphers::AESGCMStreamCipherProvider, @@ -569,31 +571,36 @@ impl Pallet { LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - CommitmentOf::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + CommitmentOf::::clear_prefix(netuid, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - LastCommitment::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + LastCommitment::::clear_prefix(netuid, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - LastBondsReset::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + LastBondsReset::::clear_prefix(netuid, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - RevealedCommitments::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + RevealedCommitments::::clear_prefix(netuid, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - UsedSpaceOf::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + UsedSpaceOf::::clear_prefix(netuid, BATCH_SIZE, None) ); WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index b740d58c98..ad9c834df0 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -251,7 +251,8 @@ impl Pallet { LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - Uids::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + Uids::::clear_prefix(netuid, BATCH_SIZE, None) ); let keys = Keys::::iter_prefix(netuid).collect::>(); @@ -268,7 +269,8 @@ impl Pallet { LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - Keys::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + Keys::::clear_prefix(netuid, BATCH_SIZE, None) ); // --- 8. Iterate over stored weights and fill the matrix. @@ -460,32 +462,38 @@ impl Pallet { LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - BlockAtRegistration::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + BlockAtRegistration::::clear_prefix(netuid, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - Axons::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + Axons::::clear_prefix(netuid, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - Prometheus::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + Prometheus::::clear_prefix(netuid, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - AlphaDividendsPerSubnet::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + AlphaDividendsPerSubnet::::clear_prefix(netuid, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - PendingChildKeys::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + PendingChildKeys::::clear_prefix(netuid, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - AssociatedEvmAddress::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + AssociatedEvmAddress::::clear_prefix(netuid, BATCH_SIZE, None) ); // Commit-reveal / weights commits (all per-net prefixes): @@ -506,36 +514,42 @@ impl Pallet { LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - WeightCommits::::clear_prefix(netuid_index, 1024, None) + BATCH_SIZE, + WeightCommits::::clear_prefix(netuid_index, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - TimelockedWeightCommits::::clear_prefix(netuid_index, 1024, None) + BATCH_SIZE, + TimelockedWeightCommits::::clear_prefix(netuid_index, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - CRV3WeightCommits::::clear_prefix(netuid_index, 1024, None) + BATCH_SIZE, + CRV3WeightCommits::::clear_prefix(netuid_index, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - CRV3WeightCommitsV2::::clear_prefix(netuid_index, 1024, None) + BATCH_SIZE, + CRV3WeightCommitsV2::::clear_prefix(netuid_index, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - Bonds::::clear_prefix(netuid_index, 1024, None) + BATCH_SIZE, + Bonds::::clear_prefix(netuid_index, BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - Weights::::clear_prefix(netuid_index, 1024, None) + BATCH_SIZE, + Weights::::clear_prefix(netuid_index, BATCH_SIZE, None) ); } @@ -550,6 +564,7 @@ impl Pallet { LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), + BATCH_SIZE, LastHotkeySwapOnNetuid::::clear_prefix(netuid, 1024, None) ); @@ -688,7 +703,8 @@ impl Pallet { LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - SubnetLeaseShares::::clear_prefix(lease_id, 1024, None) + BATCH_SIZE, + SubnetLeaseShares::::clear_prefix(lease_id, BATCH_SIZE, None) ); WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); SubnetLeases::::remove(lease_id); diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index a18f9778f3..a7ab67a854 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -25,7 +25,9 @@ use sp_core::Get; use sp_runtime::{DispatchError, transaction_validity::TransactionValidityError}; use sp_std::marker::PhantomData; use subtensor_runtime_common::{AlphaCurrency, Currency, CurrencyReserve, NetUid, TaoCurrency}; -pub use subtensor_runtime_common::{LoopRemovePrefixWithWeightMeter, WeightMeterWrapper}; +pub use subtensor_runtime_common::{ + BATCH_SIZE, LoopRemovePrefixWithWeightMeter, WeightMeterWrapper, +}; // ============================ // ==== Benchmark Imports ===== diff --git a/pallets/subtensor/src/staking/claim_root.rs b/pallets/subtensor/src/staking/claim_root.rs index a1a28f0242..963828fdd3 100644 --- a/pallets/subtensor/src/staking/claim_root.rs +++ b/pallets/subtensor/src/staking/claim_root.rs @@ -413,7 +413,8 @@ impl Pallet { LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - RootClaimed::::clear_prefix((netuid,), 1024, None) + BATCH_SIZE, + RootClaimed::::clear_prefix((netuid,), BATCH_SIZE, None) ); weight_meter.consumed() } diff --git a/pallets/swap/src/pallet/impls.rs b/pallets/swap/src/pallet/impls.rs index e40578fcfb..7113bab8f3 100644 --- a/pallets/swap/src/pallet/impls.rs +++ b/pallets/swap/src/pallet/impls.rs @@ -20,8 +20,8 @@ use sp_arithmetic::helpers_128bit; use sp_runtime::{DispatchResult, Vec, traits::AccountIdConversion}; use substrate_fixed::types::{I64F64, U64F64, U96F32}; use subtensor_runtime_common::{ - AlphaCurrency, BalanceOps, Currency, CurrencyReserve, LoopRemovePrefixWithWeightMeter, NetUid, - SubnetInfo, TaoCurrency, WeightMeterWrapper, + AlphaCurrency, BATCH_SIZE, BalanceOps, Currency, CurrencyReserve, + LoopRemovePrefixWithWeightMeter, NetUid, SubnetInfo, TaoCurrency, WeightMeterWrapper, }; use subtensor_swap_interface::{ DefaultPriceLimit, Order as OrderT, SwapEngine, SwapHandler, SwapResult, @@ -1027,12 +1027,14 @@ impl Pallet { LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - Positions::::clear_prefix((netuid,), 1024, None) + BATCH_SIZE, + Positions::::clear_prefix((netuid,), BATCH_SIZE, None) ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - Ticks::::clear_prefix(netuid, 1024, None) + BATCH_SIZE, + Ticks::::clear_prefix(netuid, BATCH_SIZE, None) ); WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); @@ -1051,7 +1053,8 @@ impl Pallet { LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), - TickIndexBitmapWords::::clear_prefix((netuid,), 1024, None) + BATCH_SIZE, + TickIndexBitmapWords::::clear_prefix((netuid,), BATCH_SIZE, None) ); WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); FeeRate::::remove(netuid); From ff91f52170a53e4f566c32a2c24d95e57a0dfa40 Mon Sep 17 00:00:00 2001 From: open-junius Date: Fri, 6 Mar 2026 21:26:32 +0800 Subject: [PATCH 48/51] fix benchmark --- pallets/admin-utils/src/lib.rs | 38 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/pallets/admin-utils/src/lib.rs b/pallets/admin-utils/src/lib.rs index 1830af0e6e..1b4237d038 100644 --- a/pallets/admin-utils/src/lib.rs +++ b/pallets/admin-utils/src/lib.rs @@ -646,8 +646,8 @@ pub mod pallet { /// It is only callable by the root account or subnet owner. /// The extrinsic will call the Subtensor pallet to set the network registration allowed. #[pallet::call_index(19)] - #[pallet::weight(Weight::from_parts(7_343_000, 0) - .saturating_add(::DbWeight::get().reads(0)) + #[pallet::weight(Weight::from_parts(15_960_000, 0) + .saturating_add(::DbWeight::get().reads(1)) .saturating_add(::DbWeight::get().writes(1)))] pub fn sudo_set_network_registration_allowed( origin: OriginFor, @@ -1250,8 +1250,8 @@ pub mod pallet { /// # Weight /// This function has a fixed weight of 0 and is classified as an operational transaction that does not incur any fees. #[pallet::call_index(50)] - #[pallet::weight(Weight::from_parts(18_300_000, 0) - .saturating_add(T::DbWeight::get().reads(2_u64)) + #[pallet::weight(Weight::from_parts(25_030_000, 0) + .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)))] pub fn sudo_set_liquid_alpha_enabled( origin: OriginFor, @@ -1280,8 +1280,8 @@ pub mod pallet { /// Sets values for liquid alpha #[pallet::call_index(51)] - #[pallet::weight(Weight::from_parts(25_280_000, 4089) - .saturating_add(T::DbWeight::get().reads(3_u64)) + #[pallet::weight(Weight::from_parts(28_630_000, 4089) + .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)))] pub fn sudo_set_alpha_values( origin: OriginFor, @@ -1458,8 +1458,8 @@ pub mod pallet { /// # Weight /// This function has a fixed weight of 0 and is classified as an operational transaction that does not incur any fees. #[pallet::call_index(61)] - #[pallet::weight(Weight::from_parts(20_460_000, 0) - .saturating_add(T::DbWeight::get().reads(2_u64)) + #[pallet::weight(Weight::from_parts(26_350_000, 0) + .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)))] pub fn sudo_set_toggle_transfer( origin: OriginFor, @@ -1616,8 +1616,8 @@ pub mod pallet { /// # Weight /// Weight is handled by the `#[pallet::weight]` attribute. #[pallet::call_index(65)] - #[pallet::weight(Weight::from_parts(6_201_000, 0) - .saturating_add(T::DbWeight::get().reads(0_u64)) + #[pallet::weight(Weight::from_parts(13_030_000, 0) + .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)))] pub fn sudo_set_ema_price_halving_period( origin: OriginFor, @@ -1700,8 +1700,8 @@ pub mod pallet { /// # Weight /// This function has a fixed weight of 0 and is classified as an operational transaction that does not incur any fees. #[pallet::call_index(69)] - #[pallet::weight(Weight::from_parts(20_460_000, 0) - .saturating_add(T::DbWeight::get().reads(2_u64)) + #[pallet::weight(Weight::from_parts(27_490_000, 0) + .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)))] pub fn sudo_set_yuma3_enabled( origin: OriginFor, @@ -1740,8 +1740,8 @@ pub mod pallet { /// # Weight /// This function has a fixed weight of 0 and is classified as an operational transaction that does not incur any fees. #[pallet::call_index(70)] - #[pallet::weight(Weight::from_parts(32_930_000, 0) - .saturating_add(T::DbWeight::get().reads(2_u64)) + #[pallet::weight(Weight::from_parts(29_200_000, 0) + .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)))] pub fn sudo_set_bonds_reset_enabled( origin: OriginFor, @@ -1859,8 +1859,8 @@ pub mod pallet { /// Sets the number of immune owner neurons #[pallet::call_index(72)] - #[pallet::weight(Weight::from_parts(18_020_000, 0) - .saturating_add(::DbWeight::get().reads(2_u64)) + #[pallet::weight(Weight::from_parts(23_540_000, 0) + .saturating_add(::DbWeight::get().reads(3_u64)) .saturating_add(::DbWeight::get().writes(1_u64)))] pub fn sudo_set_owner_immune_neuron_limit( origin: OriginFor, @@ -2132,9 +2132,9 @@ pub mod pallet { /// Sets the minimum number of non-immortal & non-immune UIDs that must remain in a subnet #[pallet::call_index(84)] - #[pallet::weight(Weight::from_parts(7_114_000, 0) - .saturating_add(::DbWeight::get().writes(1)) - .saturating_add(::DbWeight::get().reads(0_u64)))] + #[pallet::weight(Weight::from_parts(15_820_000, 0) + .saturating_add(::DbWeight::get().writes(1_u64)) + .saturating_add(::DbWeight::get().reads(1_u64)))] pub fn sudo_set_min_non_immune_uids( origin: OriginFor, netuid: NetUid, From 807ce96477f01964db08a8576f76ef9d0c696823 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 6 Mar 2026 14:10:36 +0000 Subject: [PATCH 49/51] auto-update benchmark weights --- pallets/subtensor/src/macros/dispatches.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pallets/subtensor/src/macros/dispatches.rs b/pallets/subtensor/src/macros/dispatches.rs index 93f9ace3bc..f73441d19c 100644 --- a/pallets/subtensor/src/macros/dispatches.rs +++ b/pallets/subtensor/src/macros/dispatches.rs @@ -1212,7 +1212,7 @@ mod dispatches { /// User register a new subnetwork #[pallet::call_index(59)] #[pallet::weight((Weight::from_parts(235_400_000, 0) - .saturating_add(T::DbWeight::get().reads(36_u64)) + .saturating_add(T::DbWeight::get().reads(37_u64)) .saturating_add(T::DbWeight::get().writes(52_u64)), DispatchClass::Normal, Pays::Yes))] pub fn register_network(origin: OriginFor, hotkey: T::AccountId) -> DispatchResult { Self::do_register_network(origin, &hotkey, 1, None) @@ -1421,7 +1421,7 @@ mod dispatches { /// User register a new subnetwork #[pallet::call_index(79)] #[pallet::weight((Weight::from_parts(396_000_000, 0) - .saturating_add(T::DbWeight::get().reads(35_u64)) + .saturating_add(T::DbWeight::get().reads(36_u64)) .saturating_add(T::DbWeight::get().writes(51_u64)), DispatchClass::Normal, Pays::Yes))] pub fn register_network_with_identity( origin: OriginFor, @@ -2233,7 +2233,7 @@ mod dispatches { #[pallet::call_index(121)] #[pallet::weight(( Weight::from_parts(117_000_000, 7767) - .saturating_add(T::DbWeight::get().reads(12_u64)) + .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)), DispatchClass::Normal, Pays::Yes From 4c025b04ba23c6b255869755e3cbaa79a623d2a9 Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 9 Mar 2026 19:28:06 +0800 Subject: [PATCH 50/51] fix meter compute --- contract-tests/run-ci.sh | 2 +- pallets/subtensor/src/coinbase/root.rs | 136 +++++++++++-------------- 2 files changed, 63 insertions(+), 75 deletions(-) diff --git a/contract-tests/run-ci.sh b/contract-tests/run-ci.sh index 509e6322cd..0ea0e72297 100755 --- a/contract-tests/run-ci.sh +++ b/contract-tests/run-ci.sh @@ -45,7 +45,7 @@ bash get-metadata.sh sleep 5 -yarn install +yarn install --frozen-lockfile yarn run test TEST_EXIT_CODE=$? diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index cab20bf2a9..2482d8df1c 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -471,6 +471,12 @@ impl Pallet { BATCH_SIZE, Axons::::clear_prefix(netuid, BATCH_SIZE, None) ); + LoopRemovePrefixWithWeightMeter!( + weight_meter, + T::DbWeight::get().writes(1), + BATCH_SIZE, + NeuronCertificates::::clear_prefix(netuid, BATCH_SIZE, None) + ); LoopRemovePrefixWithWeightMeter!( weight_meter, T::DbWeight::get().writes(1), @@ -565,7 +571,7 @@ impl Pallet { weight_meter, T::DbWeight::get().writes(1), BATCH_SIZE, - LastHotkeySwapOnNetuid::::clear_prefix(netuid, 1024, None) + LastHotkeySwapOnNetuid::::clear_prefix(netuid, BATCH_SIZE, None) ); // --- 20. Identity maps across versions (netuid-scoped). @@ -576,103 +582,89 @@ impl Pallet { } // --- 21. DMAP / NMAP where netuid is NOT the first key → iterate & remove. - - // ChildkeyTake: (hot, netuid) → u16 { - let mut read_count = 0_u64; - let to_rm: sp_std::vec::Vec = ChildkeyTake::::iter() - .filter(|(_, n, _)| { - read_count = read_count.saturating_add(1); - *n == netuid - }) - .map(|(hot, _, _)| hot) - .collect(); - WeightMeterWrapper!( - weight_meter, - T::DbWeight::get().reads_writes(read_count, read_count) - ); + let mut to_rm: sp_std::vec::Vec = Vec::new(); + for (hot, _netuid, _) in ChildkeyTake::::iter() { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); + if _netuid == netuid { + to_rm.push(hot); + } + } for hot in to_rm { WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ChildkeyTake::::remove(&hot, netuid); } } + // ChildKeys: (parent, netuid) → Vec<...> { - let mut read_count = 0_u64; - let to_rm: sp_std::vec::Vec = ChildKeys::::iter() - .filter(|(_, n, _)| { - read_count = read_count.saturating_add(1); - *n == netuid - }) - .map(|(parent, _, _)| parent) - .collect(); - WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); + let mut to_rm: sp_std::vec::Vec = Vec::new(); + for (parent, _netuid, _) in ChildKeys::::iter() { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); + if _netuid == netuid { + to_rm.push(parent); + } + } for parent in to_rm { WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ChildKeys::::remove(&parent, netuid); } } + // ParentKeys: (child, netuid) → Vec<...> { - let mut read_count = 0_u64; - let to_rm: sp_std::vec::Vec = ParentKeys::::iter() - .filter(|(_, n, _)| { - read_count = read_count.saturating_add(1); - *n == netuid - }) - .map(|(child, _, _)| child) - .collect(); - WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); + let mut to_rm: sp_std::vec::Vec = Vec::new(); + for (child, _netuid, _) in ParentKeys::::iter() { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); + if _netuid == netuid { + to_rm.push(child); + } + } for child in to_rm { WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); ParentKeys::::remove(&child, netuid); } } + // LastHotkeyEmissionOnNetuid: (hot, netuid) → α { - let mut read_count = 0_u64; - let to_rm: sp_std::vec::Vec = LastHotkeyEmissionOnNetuid::::iter() - .filter(|(_, n, _)| { - read_count = read_count.saturating_add(1); - *n == netuid - }) - .map(|(hot, _, _)| hot) - .collect(); - WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); + let mut to_rm: sp_std::vec::Vec = Vec::new(); + for (hot, _netuid, _) in LastHotkeyEmissionOnNetuid::::iter() { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); + if _netuid == netuid { + to_rm.push(hot); + } + } for hot in to_rm { WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); LastHotkeyEmissionOnNetuid::::remove(&hot, netuid); } } + // TotalHotkeyAlphaLastEpoch: (hot, netuid) → ... - // (TotalHotkeyAlpha and TotalHotkeyShares were already removed during dissolve.) { - let mut read_count = 0_u64; - let to_rm_alpha_last: sp_std::vec::Vec = - TotalHotkeyAlphaLastEpoch::::iter() - .filter(|(_, n, _)| { - read_count = read_count.saturating_add(1); - *n == netuid - }) - .map(|(hot, _, _)| hot) - .collect(); - WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); - for hot in to_rm_alpha_last { + let mut to_rm: sp_std::vec::Vec = Vec::new(); + for (hot, _netuid, _) in TotalHotkeyAlphaLastEpoch::::iter() { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); + if _netuid == netuid { + to_rm.push(hot); + } + } + for hot in to_rm { WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); TotalHotkeyAlphaLastEpoch::::remove(&hot, netuid); } } + // TransactionKeyLastBlock NMAP: (hot, netuid, name) → u64 { - let mut read_count = 0_u64; - let to_rm: sp_std::vec::Vec<(T::AccountId, u16)> = TransactionKeyLastBlock::::iter() - .filter(|((_, n, _), _)| { - read_count = read_count.saturating_add(1); - *n == netuid - }) - .map(|((hot, _, name), _)| (hot, name)) - .collect(); - WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); + let mut to_rm: sp_std::vec::Vec<(T::AccountId, u16)> = Vec::new(); + for ((hot, _netuid, name), _) in TransactionKeyLastBlock::::iter() { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); + if _netuid == netuid { + to_rm.push((hot, name)); + } + } for (hot, name) in to_rm { WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); TransactionKeyLastBlock::::remove((hot, netuid, name)); @@ -680,17 +672,13 @@ impl Pallet { } // StakingOperationRateLimiter NMAP: (hot, cold, netuid) → bool { - let mut read_count = 0_u64; - let to_rm: sp_std::vec::Vec<(T::AccountId, T::AccountId)> = - StakingOperationRateLimiter::::iter() - .filter(|((_, _, n), _)| { - read_count = read_count.saturating_add(1); - *n == netuid - }) - .map(|((hot, cold, _), _)| (hot, cold)) - .collect(); - WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(read_count)); - + let mut to_rm: sp_std::vec::Vec<(T::AccountId, T::AccountId)> = Vec::new(); + for ((hot, cold, _netuid), _) in StakingOperationRateLimiter::::iter() { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); + if _netuid == netuid { + to_rm.push((hot, cold)); + } + } for (hot, cold) in to_rm { WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); StakingOperationRateLimiter::::remove((hot, cold, netuid)); From 6e59f7a7de9ab741f1c20e286940a3dabb9ca397 Mon Sep 17 00:00:00 2001 From: open-junius Date: Mon, 9 Mar 2026 21:16:23 +0800 Subject: [PATCH 51/51] optimize a data remove --- pallets/subtensor/src/coinbase/root.rs | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index 2482d8df1c..6b7673d0ea 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -18,9 +18,9 @@ use super::*; use frame_support::weights::{Weight, WeightMeter}; use safe_math::*; +use sp_std::collections::btree_set::BTreeSet; use substrate_fixed::types::{I64F64, U96F32}; use subtensor_runtime_common::{AlphaBalance, NetUid, NetUidStorageIndex, TaoBalance, Token}; - impl Pallet { /// Fetches the total count of root network validators /// @@ -255,15 +255,14 @@ impl Pallet { Uids::::clear_prefix(netuid, BATCH_SIZE, None) ); - let keys = Keys::::iter_prefix(netuid).collect::>(); - let keys_len = keys.len() as u64; - WeightMeterWrapper!( - weight_meter, - T::DbWeight::get().reads_writes(keys_len, keys_len) - ); - - for (_uid, key) in keys { - IsNetworkMember::::remove(key, netuid); + let mut keys_set = BTreeSet::new(); + for (_uid, key) in Keys::::iter_prefix(netuid) { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); + if !keys_set.contains(&key) { + WeightMeterWrapper!(weight_meter, T::DbWeight::get().writes(1)); + IsNetworkMember::::remove(&key, netuid); + keys_set.insert(key); + } } LoopRemovePrefixWithWeightMeter!( @@ -506,7 +505,6 @@ impl Pallet { WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); let mechanisms: u8 = MechanismCountCurrent::::get(netuid).into(); - WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(mechanisms as u64)); for subid in 0..mechanisms { WeightMeterWrapper!(weight_meter, T::DbWeight::get().reads(1)); let netuid_index = Self::get_mechanism_storage_index(netuid, subid.into());