From fb47d0cc311000b55306f1ea45a1d70b1cada9a5 Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Wed, 10 Jun 2026 18:12:29 -0300 Subject: [PATCH 01/63] Merge mock and mock_high_ed --- pallets/subtensor/src/tests/mock.rs | 57 +- pallets/subtensor/src/tests/mock_high_ed.rs | 578 -------------------- pallets/subtensor/src/tests/mod.rs | 1 - pallets/subtensor/src/tests/tao.rs | 54 +- runtime/src/lib.rs | 7 +- 5 files changed, 90 insertions(+), 607 deletions(-) delete mode 100644 pallets/subtensor/src/tests/mock_high_ed.rs diff --git a/pallets/subtensor/src/tests/mock.rs b/pallets/subtensor/src/tests/mock.rs index 795b2ea8cf..cd07691d60 100644 --- a/pallets/subtensor/src/tests/mock.rs +++ b/pallets/subtensor/src/tests/mock.rs @@ -84,6 +84,46 @@ pub type Balance = TaoBalance; #[allow(dead_code)] pub type BlockNumber = u64; +const DEFAULT_EXISTENTIAL_DEPOSIT: Balance = TaoBalance::new(1); + +std::thread_local! { + static TEST_EXISTENTIAL_DEPOSIT: RefCell = + const { RefCell::new(DEFAULT_EXISTENTIAL_DEPOSIT) }; +} + +pub struct ExistentialDeposit; + +impl ExistentialDeposit { + pub fn get() -> Balance { + >::get() + } +} + +impl Get for ExistentialDeposit { + fn get() -> Balance { + TEST_EXISTENTIAL_DEPOSIT.with(|ed| *ed.borrow()) + } +} + +pub struct TestExternalitiesWithExistentialDeposit { + previous_existential_deposit: Balance, + ext: sp_io::TestExternalities, +} + +impl TestExternalitiesWithExistentialDeposit { + pub fn execute_with(mut self, execute: impl FnOnce() -> R) -> R { + self.ext.execute_with(execute) + } +} + +impl Drop for TestExternalitiesWithExistentialDeposit { + fn drop(&mut self) { + TEST_EXISTENTIAL_DEPOSIT.with(|ed| { + ed.replace(self.previous_existential_deposit); + }); + } +} + #[derive_impl(pallet_balances::config_preludes::TestDefaultConfig)] impl pallet_balances::Config for Test { type Balance = Balance; @@ -157,7 +197,7 @@ impl system::Config for Test { type MaxConsumers = frame_support::traits::ConstU32<16>; type Nonce = u64; type Block = Block; - type DispatchExtension = crate::CheckColdkeySwap; + type DispatchExtension = (crate::CheckColdkeySwap, crate::CheckSubnetSale); } parameter_types! { @@ -182,7 +222,6 @@ parameter_types! { Weight::from_parts(2_000_000_000_000, u64::MAX), Perbill::from_percent(75), ); - pub const ExistentialDeposit: Balance = TaoBalance::new(1); pub const TransactionByteFee: Balance = TaoBalance::new(100); pub const SDebug:u64 = 1; pub const InitialRho: u16 = 30; @@ -630,6 +669,20 @@ pub fn new_test_ext(block_number: BlockNumber) -> sp_io::TestExternalities { ext } +pub fn test_ext_with_existential_deposit( + block_number: BlockNumber, + existential_deposit: Balance, +) -> TestExternalitiesWithExistentialDeposit { + let previous_existential_deposit = + TEST_EXISTENTIAL_DEPOSIT.with(|ed| ed.replace(existential_deposit)); + let ext = new_test_ext(block_number); + + TestExternalitiesWithExistentialDeposit { + previous_existential_deposit, + ext, + } +} + #[allow(dead_code)] pub fn test_ext_with_balances(balances: Vec<(U256, u128)>) -> sp_io::TestExternalities { init_logs_for_tests(); diff --git a/pallets/subtensor/src/tests/mock_high_ed.rs b/pallets/subtensor/src/tests/mock_high_ed.rs deleted file mode 100644 index 74d1cb75fe..0000000000 --- a/pallets/subtensor/src/tests/mock_high_ed.rs +++ /dev/null @@ -1,578 +0,0 @@ -#![allow( - clippy::arithmetic_side_effects, - clippy::expect_used, - clippy::unwrap_used -)] - -use core::num::NonZeroU64; - -use crate::*; -use frame_support::traits::{Everything, InherentBuilder, InstanceFilter}; -use frame_support::weights::Weight; -use frame_support::weights::constants::RocksDbWeight; -use frame_support::{PalletId, derive_impl}; -use frame_support::{parameter_types, traits::PrivilegeCmp}; -use frame_system as system; -use frame_system::{EnsureRoot, limits, offchain::CreateTransactionBase}; -use pallet_subtensor_proxy as pallet_proxy; -use sp_core::{ConstU64, H256, U256, offchain::KeyTypeId}; -use sp_runtime::Perbill; -use sp_runtime::{ - BuildStorage, Percent, - traits::{BlakeTwo256, IdentityLookup}, -}; -use sp_std::{cmp::Ordering, sync::OnceLock}; -use sp_tracing::tracing_subscriber; -use substrate_fixed::types::U64F64; -use subtensor_runtime_common::{AuthorshipInfo, NetUid, TaoBalance}; -use tracing_subscriber::{EnvFilter, layer::SubscriberExt, util::SubscriberInitExt}; -type Block = frame_system::mocking::MockBlock; - -// Configure a mock runtime to test the pallet. -frame_support::construct_runtime!( - pub enum Test - { - System: frame_system = 1, - Balances: pallet_balances = 2, - Shield: pallet_shield = 3, - SubtensorModule: crate = 4, - AlphaAssets: pallet_alpha_assets = 5, - Scheduler: pallet_scheduler = 6, - Preimage: pallet_preimage = 7, - Drand: pallet_drand = 8, - Swap: pallet_subtensor_swap = 9, - Crowdloan: pallet_crowdloan = 10, - Proxy: pallet_subtensor_proxy = 11, - } -); - -#[allow(dead_code)] -pub type TestRuntimeCall = frame_system::Call; - -pub const KEY_TYPE: KeyTypeId = KeyTypeId(*b"test"); - -#[allow(dead_code)] -pub type AccountId = U256; - -// The address format for describing accounts. -#[allow(dead_code)] -pub type Address = AccountId; - -// Balance of an account. -#[allow(dead_code)] -pub type Balance = TaoBalance; - -// An index to a block. -#[allow(dead_code)] -pub type BlockNumber = u64; - -#[derive_impl(pallet_balances::config_preludes::TestDefaultConfig)] -impl pallet_balances::Config for Test { - type Balance = Balance; - type RuntimeEvent = RuntimeEvent; - type DustRemoval = (); - type ExistentialDeposit = ExistentialDeposit; - type AccountStore = System; - type MaxLocks = (); - type WeightInfo = (); - type MaxReserves = (); - type ReserveIdentifier = (); - type RuntimeHoldReason = (); - type FreezeIdentifier = (); - type MaxFreezes = (); -} - -impl pallet_shield::Config for Test { - type AuthorityId = sp_core::sr25519::Public; - type FindAuthors = (); - type RuntimeCall = RuntimeCall; - type ExtrinsicDecryptor = (); - type WeightInfo = (); -} - -impl pallet_alpha_assets::Config for Test {} - -#[derive_impl(frame_system::config_preludes::TestDefaultConfig)] -impl system::Config for Test { - type BaseCallFilter = Everything; - type BlockWeights = BlockWeights; - type BlockLength = (); - type DbWeight = RocksDbWeight; - type RuntimeOrigin = RuntimeOrigin; - type RuntimeCall = RuntimeCall; - type Hash = H256; - type Hashing = BlakeTwo256; - type AccountId = U256; - type Lookup = IdentityLookup; - type RuntimeEvent = RuntimeEvent; - type BlockHashCount = BlockHashCount; - type Version = (); - type PalletInfo = PalletInfo; - type AccountData = pallet_balances::AccountData; - type OnNewAccount = (); - type OnKilledAccount = (); - type SystemWeightInfo = (); - type SS58Prefix = SS58Prefix; - type OnSetCode = (); - type MaxConsumers = frame_support::traits::ConstU32<16>; - type Nonce = u64; - type Block = Block; - type DispatchExtension = crate::CheckColdkeySwap; -} - -parameter_types! { - pub const BlockHashCount: u64 = 250; - pub const SS58Prefix: u8 = 42; -} - -pub const MOCK_BLOCK_BUILDER: u64 = 12345u64; - -pub struct MockAuthorshipProvider; - -impl AuthorshipInfo for MockAuthorshipProvider { - fn author() -> Option { - Some(U256::from(MOCK_BLOCK_BUILDER)) - } -} - -parameter_types! { - pub const InitialMinAllowedWeights: u16 = 0; - pub const InitialEmissionValue: u16 = 0; - pub BlockWeights: limits::BlockWeights = limits::BlockWeights::with_sensible_defaults( - Weight::from_parts(2_000_000_000_000, u64::MAX), - Perbill::from_percent(75), - ); - pub const ExistentialDeposit: Balance = TaoBalance::new(100); - pub const TransactionByteFee: Balance = TaoBalance::new(100); - pub const SDebug:u64 = 1; - pub const InitialRho: u16 = 30; - pub const InitialAlphaSigmoidSteepness: i16 = 1000; - pub const InitialKappa: u16 = 32_767; - pub const InitialTempo: u16 = 360; - pub const SelfOwnership: u64 = 2; - pub const InitialImmunityPeriod: u16 = 2; - pub const InitialMinAllowedUids: u16 = 2; - pub const InitialMaxAllowedUids: u16 = 256; - pub const InitialBondsMovingAverage: u64 = 900_000; - pub const InitialBondsPenalty:u16 = u16::MAX; - pub const InitialBondsResetOn: bool = false; - pub const InitialStakePruningMin: u16 = 0; - pub const InitialFoundationDistribution: u64 = 0; - pub const InitialDefaultDelegateTake: u16 = 11_796; // 18%, same as in production - pub const InitialMinDelegateTake: u16 = 5_898; // 9%; - pub const InitialDefaultChildKeyTake: u16 = 0 ;// 0 % - pub const InitialMinChildKeyTake: u16 = 0; // 0 %; - pub const InitialMaxChildKeyTake: u16 = 11_796; // 18 %; - pub const InitialWeightsVersionKey: u16 = 0; - pub const InitialServingRateLimit: u64 = 0; // No limit. - pub const InitialTxRateLimit: u64 = 0; // Disable rate limit for testing - pub const InitialTxDelegateTakeRateLimit: u64 = 1; // 1 block take rate limit for testing - pub const InitialTxChildKeyTakeRateLimit: u64 = 1; // 1 block take rate limit for testing - pub const InitialBurn: u64 = 0; - pub const InitialMinBurn: u64 = 500_000; - pub const InitialMinStake: u64 = 2_000_000; - pub const InitialMaxBurn: u64 = 1_000_000_000; - pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO - pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO - pub const InitialValidatorPruneLen: u64 = 0; - pub const InitialScalingLawPower: u16 = 50; - pub const InitialMaxAllowedValidators: u16 = 100; - pub const InitialIssuance: u64 = 0; - pub const InitialDifficulty: u64 = 10000; - pub const InitialActivityCutoff: u16 = 5000; - pub const InitialAdjustmentInterval: u16 = 100; - pub const InitialAdjustmentAlpha: u64 = 0; // no weight to previous value. - pub const InitialMaxRegistrationsPerBlock: u16 = 3; - pub const InitialTargetRegistrationsPerInterval: u16 = 2; - pub const InitialPruningScore : u16 = u16::MAX; - pub const InitialRegistrationRequirement: u16 = u16::MAX; // Top 100% - pub const InitialMinDifficulty: u64 = 1; - pub const InitialMaxDifficulty: u64 = u64::MAX; - pub const InitialRAORecycledForRegistration: u64 = 0; - pub const InitialNetworkImmunityPeriod: u64 = 1_296_000; - pub const InitialNetworkMinLockCost: u64 = 100_000_000_000; - pub const InitialSubnetOwnerCut: u16 = 0; // 0%. 100% of rewards go to validators + miners. - pub const InitialNetworkLockReductionInterval: u64 = 2; // 2 blocks. - pub const InitialNetworkRateLimit: u64 = 0; - pub const InitialKeySwapCost: u64 = 1_000_000_000; - pub const InitialAlphaHigh: u16 = 58982; // Represents 0.9 as per the production default - pub const InitialAlphaLow: u16 = 45875; // Represents 0.7 as per the production default - pub const InitialLiquidAlphaOn: bool = false; // Default value for LiquidAlphaOn - pub const InitialYuma3On: bool = false; // Default value for Yuma3On - pub const InitialColdkeySwapAnnouncementDelay: u64 = 50; - pub const InitialColdkeySwapReannouncementDelay: u64 = 10; - pub const InitialDissolveNetworkScheduleDuration: u64 = 5 * 24 * 60 * 60 / 12; // Default as 5 days - pub const InitialTaoWeight: u64 = 0; // 100% global weight. - pub const InitialEmaPriceHalvingPeriod: u64 = 201_600_u64; // 4 weeks - pub const InitialStartCallDelay: u64 = 0; // 0 days - pub const InitialKeySwapOnSubnetCost: u64 = 10_000_000; - pub const HotkeySwapOnSubnetInterval: u64 = 15; // 15 block, should be bigger than subnet number, then trigger clean up for all subnets - pub const MaxContributorsPerLeaseToRemove: u32 = 3; - pub const LeaseDividendsDistributionInterval: u32 = 100; - pub const MaxImmuneUidsPercentage: Percent = Percent::from_percent(80); - pub const EvmKeyAssociateRateLimit: u64 = 10; - pub const SubtensorPalletId: PalletId = PalletId(*b"subtensr"); - pub const BurnAccountId: PalletId = PalletId(*b"burntnsr"); -} - -impl crate::Config for Test { - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type InitialIssuance = InitialIssuance; - type SudoRuntimeCall = TestRuntimeCall; - type Scheduler = Scheduler; - type InitialMinAllowedWeights = InitialMinAllowedWeights; - type InitialEmissionValue = InitialEmissionValue; - type InitialTempo = InitialTempo; - type InitialDifficulty = InitialDifficulty; - type InitialAdjustmentInterval = InitialAdjustmentInterval; - type InitialAdjustmentAlpha = InitialAdjustmentAlpha; - type InitialTargetRegistrationsPerInterval = InitialTargetRegistrationsPerInterval; - type InitialRho = InitialRho; - type InitialAlphaSigmoidSteepness = InitialAlphaSigmoidSteepness; - type InitialKappa = InitialKappa; - type InitialMinAllowedUids = InitialMinAllowedUids; - type InitialMaxAllowedUids = InitialMaxAllowedUids; - type InitialValidatorPruneLen = InitialValidatorPruneLen; - type InitialScalingLawPower = InitialScalingLawPower; - type InitialImmunityPeriod = InitialImmunityPeriod; - type InitialActivityCutoff = InitialActivityCutoff; - type InitialMaxRegistrationsPerBlock = InitialMaxRegistrationsPerBlock; - type InitialPruningScore = InitialPruningScore; - type InitialBondsMovingAverage = InitialBondsMovingAverage; - type InitialBondsPenalty = InitialBondsPenalty; - type InitialBondsResetOn = InitialBondsResetOn; - type InitialMaxAllowedValidators = InitialMaxAllowedValidators; - type InitialDefaultDelegateTake = InitialDefaultDelegateTake; - type InitialMinDelegateTake = InitialMinDelegateTake; - type InitialDefaultChildKeyTake = InitialDefaultChildKeyTake; - type InitialMinChildKeyTake = InitialMinChildKeyTake; - type InitialMaxChildKeyTake = InitialMaxChildKeyTake; - type InitialTxChildKeyTakeRateLimit = InitialTxChildKeyTakeRateLimit; - type InitialWeightsVersionKey = InitialWeightsVersionKey; - type InitialMaxDifficulty = InitialMaxDifficulty; - type InitialMinDifficulty = InitialMinDifficulty; - type InitialServingRateLimit = InitialServingRateLimit; - type InitialTxRateLimit = InitialTxRateLimit; - type InitialTxDelegateTakeRateLimit = InitialTxDelegateTakeRateLimit; - type InitialBurn = InitialBurn; - type InitialMaxBurn = InitialMaxBurn; - type InitialMinBurn = InitialMinBurn; - type InitialMinStake = InitialMinStake; - type MinBurnUpperBound = MinBurnUpperBound; - type MaxBurnLowerBound = MaxBurnLowerBound; - type InitialRAORecycledForRegistration = InitialRAORecycledForRegistration; - type InitialNetworkImmunityPeriod = InitialNetworkImmunityPeriod; - type InitialNetworkMinLockCost = InitialNetworkMinLockCost; - type InitialSubnetOwnerCut = InitialSubnetOwnerCut; - type InitialNetworkLockReductionInterval = InitialNetworkLockReductionInterval; - type InitialNetworkRateLimit = InitialNetworkRateLimit; - type KeySwapCost = InitialKeySwapCost; - type AlphaHigh = InitialAlphaHigh; - type AlphaLow = InitialAlphaLow; - type LiquidAlphaOn = InitialLiquidAlphaOn; - type Yuma3On = InitialYuma3On; - type Preimages = Preimage; - type InitialColdkeySwapAnnouncementDelay = InitialColdkeySwapAnnouncementDelay; - type InitialColdkeySwapReannouncementDelay = InitialColdkeySwapReannouncementDelay; - type InitialDissolveNetworkScheduleDuration = InitialDissolveNetworkScheduleDuration; - type InitialTaoWeight = InitialTaoWeight; - type InitialEmaPriceHalvingPeriod = InitialEmaPriceHalvingPeriod; - type InitialStartCallDelay = InitialStartCallDelay; - type SwapInterface = pallet_subtensor_swap::Pallet; - type KeySwapOnSubnetCost = InitialKeySwapOnSubnetCost; - type HotkeySwapOnSubnetInterval = HotkeySwapOnSubnetInterval; - type ProxyInterface = (); - type LeaseDividendsDistributionInterval = LeaseDividendsDistributionInterval; - type GetCommitments = (); - type MaxImmuneUidsPercentage = MaxImmuneUidsPercentage; - type CommitmentsInterface = CommitmentsI; - type AlphaAssets = AlphaAssets; - type EvmKeyAssociateRateLimit = EvmKeyAssociateRateLimit; - type AuthorshipProvider = MockAuthorshipProvider; - type SubtensorPalletId = SubtensorPalletId; - type BurnAccountId = BurnAccountId; - type WeightInfo = (); -} - -// Swap-related parameter types -parameter_types! { - pub const SwapProtocolId: PalletId = PalletId(*b"ten/swap"); - pub const SwapMaxFeeRate: u16 = 10000; // 15.26% - pub const SwapMinimumLiquidity: u64 = 1_000; - pub const SwapMinimumReserve: NonZeroU64 = NonZeroU64::new(100).unwrap(); -} - -impl pallet_subtensor_swap::Config for Test { - type SubnetInfo = SubtensorModule; - type BalanceOps = SubtensorModule; - type ProtocolId = SwapProtocolId; - type TaoReserve = TaoBalanceReserve; - type AlphaReserve = AlphaBalanceReserve; - type MaxFeeRate = SwapMaxFeeRate; - type MinimumLiquidity = SwapMinimumLiquidity; - type MinimumReserve = SwapMinimumReserve; - type WeightInfo = (); - #[cfg(feature = "runtime-benchmarks")] - type BenchmarkHelper = (); -} - -pub struct OriginPrivilegeCmp; - -impl PrivilegeCmp for OriginPrivilegeCmp { - fn cmp_privilege(_left: &OriginCaller, _right: &OriginCaller) -> Option { - Some(Ordering::Less) - } -} - -pub struct CommitmentsI; -impl CommitmentsInterface for CommitmentsI { - fn purge_netuid(_netuid: NetUid) {} -} - -parameter_types! { - pub MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * - BlockWeights::get().max_block; - pub const MaxScheduledPerBlock: u32 = 50; - pub const NoPreimagePostponement: Option = Some(10); -} - -impl pallet_scheduler::Config for Test { - type RuntimeOrigin = RuntimeOrigin; - type RuntimeEvent = RuntimeEvent; - type PalletsOrigin = OriginCaller; - type RuntimeCall = RuntimeCall; - type MaximumWeight = MaximumSchedulerWeight; - type ScheduleOrigin = EnsureRoot; - type MaxScheduledPerBlock = MaxScheduledPerBlock; - type WeightInfo = pallet_scheduler::weights::SubstrateWeight; - type OriginPrivilegeCmp = OriginPrivilegeCmp; - type Preimages = Preimage; - type BlockNumberProvider = System; -} - -parameter_types! { - pub const PreimageMaxSize: u32 = 4096 * 1024; - pub const PreimageBaseDeposit: Balance = TaoBalance::new(1); - pub const PreimageByteDeposit: Balance = TaoBalance::new(1); -} - -impl pallet_preimage::Config for Test { - type WeightInfo = pallet_preimage::weights::SubstrateWeight; - type RuntimeEvent = RuntimeEvent; - type Currency = Balances; - type ManagerOrigin = EnsureRoot; - type Consideration = (); -} - -parameter_types! { - pub const CrowdloanPalletId: PalletId = PalletId(*b"bt/cloan"); - pub const MinimumDeposit: u64 = 50; - pub const AbsoluteMinimumContribution: u64 = 10; - pub const MinimumBlockDuration: u64 = 20; - pub const MaximumBlockDuration: u64 = 100; - pub const RefundContributorsLimit: u32 = 5; - pub const MaxContributors: u32 = 10; -} - -impl pallet_crowdloan::Config for Test { - type PalletId = CrowdloanPalletId; - type Currency = Balances; - type RuntimeCall = RuntimeCall; - type WeightInfo = pallet_crowdloan::weights::SubstrateWeight; - type Preimages = Preimage; - type MinimumDeposit = MinimumDeposit; - type AbsoluteMinimumContribution = AbsoluteMinimumContribution; - type MinimumBlockDuration = MinimumBlockDuration; - type MaximumBlockDuration = MaximumBlockDuration; - type RefundContributorsLimit = RefundContributorsLimit; - type MaxContributors = MaxContributors; -} - -// Proxy Pallet config -parameter_types! { - // Set as 1 for testing purposes - pub const ProxyDepositBase: Balance = TaoBalance::new(1); - // Set as 1 for testing purposes - pub const ProxyDepositFactor: Balance = TaoBalance::new(1); - // Set as 20 for testing purposes - pub const MaxProxies: u32 = 20; // max num proxies per acct - // Set as 15 for testing purposes - pub const MaxPending: u32 = 15; // max blocks pending ~15min - // Set as 1 for testing purposes - pub const AnnouncementDepositBase: Balance = TaoBalance::new(1); - // Set as 1 for testing purposes - pub const AnnouncementDepositFactor: Balance = TaoBalance::new(1); -} - -impl pallet_proxy::Config for Test { - type RuntimeCall = RuntimeCall; - type Currency = Balances; - type ProxyType = subtensor_runtime_common::ProxyType; - type ProxyDepositBase = ProxyDepositBase; - type ProxyDepositFactor = ProxyDepositFactor; - type MaxProxies = MaxProxies; - type WeightInfo = pallet_proxy::weights::SubstrateWeight; - type MaxPending = MaxPending; - type CallHasher = BlakeTwo256; - type AnnouncementDepositBase = AnnouncementDepositBase; - type AnnouncementDepositFactor = AnnouncementDepositFactor; - type BlockNumberProvider = System; -} - -impl InstanceFilter for subtensor_runtime_common::ProxyType { - fn filter(&self, _c: &RuntimeCall) -> bool { - // In tests, allow all proxy types to pass through - true - } - fn is_superset(&self, o: &Self) -> bool { - match (self, o) { - (x, y) if x == y => true, - (subtensor_runtime_common::ProxyType::Any, _) => true, - _ => false, - } - } -} - -mod test_crypto { - use super::KEY_TYPE; - use sp_core::{ - U256, - sr25519::{Public as Sr25519Public, Signature as Sr25519Signature}, - }; - use sp_runtime::{ - app_crypto::{app_crypto, sr25519}, - traits::IdentifyAccount, - }; - - app_crypto!(sr25519, KEY_TYPE); - - pub struct TestAuthId; - - impl frame_system::offchain::AppCrypto for TestAuthId { - type RuntimeAppPublic = Public; - type GenericSignature = Sr25519Signature; - type GenericPublic = Sr25519Public; - } - - impl IdentifyAccount for Public { - type AccountId = U256; - - fn into_account(self) -> U256 { - let mut bytes = [0u8; 32]; - bytes.copy_from_slice(self.as_ref()); - U256::from_big_endian(&bytes) - } - } -} - -pub type TestAuthId = test_crypto::TestAuthId; - -impl pallet_drand::Config for Test { - type AuthorityId = TestAuthId; - type Verifier = pallet_drand::verifier::QuicknetVerifier; - type UnsignedPriority = ConstU64<{ 1 << 20 }>; - type HttpFetchTimeout = ConstU64<1_000>; - type WeightInfo = (); -} - -impl frame_system::offchain::SigningTypes for Test { - type Public = test_crypto::Public; - type Signature = test_crypto::Signature; -} - -pub type UncheckedExtrinsic = sp_runtime::testing::TestXt; - -impl frame_system::offchain::CreateTransactionBase for Test -where - RuntimeCall: From, -{ - type Extrinsic = UncheckedExtrinsic; - type RuntimeCall = RuntimeCall; -} - -impl frame_system::offchain::CreateInherent for Test -where - RuntimeCall: From, -{ - fn create_bare(call: Self::RuntimeCall) -> Self::Extrinsic { - UncheckedExtrinsic::new_inherent(call) - } -} - -impl frame_system::offchain::CreateSignedTransaction for Test -where - RuntimeCall: From, -{ - fn create_signed_transaction< - C: frame_system::offchain::AppCrypto, - >( - call: >::RuntimeCall, - _public: Self::Public, - _account: Self::AccountId, - nonce: Self::Nonce, - ) -> Option { - Some(UncheckedExtrinsic::new_signed(call, nonce.into(), (), ())) - } -} - -static TEST_LOGS_INIT: OnceLock<()> = OnceLock::new(); - -pub fn init_logs_for_tests() { - if TEST_LOGS_INIT.get().is_some() { - return; - } - - // RUST_LOG (full syntax) or "off" if unset - let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("off")); - - // Bridge log -> tracing (ok if already set) - let _ = tracing_log::LogTracer::init(); - - // Simple formatter - let fmt_layer = tracing_subscriber::fmt::layer() - .with_ansi(false) - .with_target(true) - .with_level(true) - .without_time(); - - let _ = tracing_subscriber::registry() - .with(filter) - .with(fmt_layer) - .try_init(); - - let _ = TEST_LOGS_INIT.set(()); -} - -#[allow(dead_code)] -// Build genesis storage according to the mock runtime. -pub fn new_test_ext(block_number: BlockNumber) -> sp_io::TestExternalities { - init_logs_for_tests(); - let t = frame_system::GenesisConfig::::default() - .build_storage() - .unwrap(); - let mut ext = sp_io::TestExternalities::new(t); - ext.execute_with(|| System::set_block_number(block_number)); - ext -} - -#[allow(dead_code)] -pub fn add_network(netuid: NetUid, tempo: u16, _modality: u16) { - SubtensorModule::init_new_network(netuid, tempo); - SubtensorModule::set_network_registration_allowed(netuid, true); - FirstEmissionBlockNumber::::insert(netuid, 1); - SubtokenEnabled::::insert(netuid, true); - - // make interval 1 block so tests can register by stepping 1 block. - BurnHalfLife::::insert(netuid, 1); - BurnIncreaseMult::::insert(netuid, U64F64::from_num(1)); -} - -#[allow(dead_code)] -pub fn add_balance_to_coldkey_account(coldkey: &U256, tao: TaoBalance) { - let ed = ExistentialDeposit::get(); - if tao >= ed { - let credit = SubtensorModule::mint_tao(tao); - let _ = SubtensorModule::spend_tao(coldkey, credit, tao).unwrap(); - } -} diff --git a/pallets/subtensor/src/tests/mod.rs b/pallets/subtensor/src/tests/mod.rs index be37a9227b..5c7e7f2227 100644 --- a/pallets/subtensor/src/tests/mod.rs +++ b/pallets/subtensor/src/tests/mod.rs @@ -16,7 +16,6 @@ mod math; mod mechanism; mod migration; pub(crate) mod mock; -pub(crate) mod mock_high_ed; mod move_stake; mod networks; mod neuron_info; diff --git a/pallets/subtensor/src/tests/tao.rs b/pallets/subtensor/src/tests/tao.rs index b79b80e3f3..ab8cf40839 100644 --- a/pallets/subtensor/src/tests/tao.rs +++ b/pallets/subtensor/src/tests/tao.rs @@ -6,8 +6,7 @@ clippy::expect_used )] -use super::mock_high_ed::*; -use crate::tests::mock_high_ed; +use super::mock::*; use crate::*; use frame_support::{ assert_noop, assert_ok, @@ -21,6 +20,11 @@ use sp_runtime::traits::{AccountIdConversion, Zero}; use subtensor_runtime_common::TaoBalance; const MAX_TAO_ISSUANCE: u64 = 21_000_000_000_000_000_u64; +const HIGH_EXISTENTIAL_DEPOSIT: TaoBalance = TaoBalance::new(100); + +fn new_high_ed_test_ext(block_number: BlockNumber) -> TestExternalitiesWithExistentialDeposit { + test_ext_with_existential_deposit(block_number, HIGH_EXISTENTIAL_DEPOSIT) +} /// Helper: balances-pallet total issuance. fn balances_total_issuance() -> TaoBalance { @@ -48,7 +52,7 @@ fn total_balance(account: &U256) -> TaoBalance { #[test] fn test_transfer_tao_normal_case() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -69,7 +73,7 @@ fn test_transfer_tao_normal_case() { #[test] fn test_transfer_tao_zero_balance_zero_amount() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let origin = U256::from(10_001); let dest = U256::from(10_002); @@ -86,7 +90,7 @@ fn test_transfer_tao_zero_balance_zero_amount() { #[test] fn test_transfer_tao_zero_balance_non_zero_amount_fails() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let origin = U256::from(10_011); let dest = U256::from(10_012); @@ -104,7 +108,7 @@ fn test_transfer_tao_zero_balance_non_zero_amount_fails() { #[test] fn test_transfer_tao_amount_greater_than_transferrable_fails() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -120,7 +124,7 @@ fn test_transfer_tao_amount_greater_than_transferrable_fails() { #[test] fn test_transfer_tao_transfer_exactly_transferrable_succeeds() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -137,7 +141,7 @@ fn test_transfer_tao_transfer_exactly_transferrable_succeeds() { #[test] fn test_transfer_tao_can_reap_origin_when_amount_brings_it_below_ed() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -161,7 +165,7 @@ fn test_transfer_tao_can_reap_origin_when_amount_brings_it_below_ed() { #[test] fn test_transfer_tao_to_self_is_ok_and_no_net_balance_change() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let who = U256::from(1); let before = total_balance(&who); let amount = reducible_balance(&who).min(10.into()); @@ -178,7 +182,7 @@ fn test_transfer_tao_to_self_is_ok_and_no_net_balance_change() { #[test] fn test_transfer_all_tao_and_kill_normal_case() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -206,7 +210,7 @@ fn test_transfer_all_tao_and_kill_normal_case() { #[test] fn test_transfer_all_tao_and_kill_non_existing_origin_is_noop() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let origin = U256::from(20_001); let dest = U256::from(20_002); @@ -224,7 +228,7 @@ fn test_transfer_all_tao_and_kill_non_existing_origin_is_noop() { #[test] fn test_transfer_all_tao_and_kill_preexisting_destination() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -247,7 +251,7 @@ fn test_transfer_all_tao_and_kill_preexisting_destination() { #[test] fn test_transfer_all_tao_and_kill_to_self_is_noop() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let who = U256::from(1); let before_total = total_balance(&who); let before_reducible = reducible_balance(&who); @@ -265,7 +269,7 @@ fn test_transfer_all_tao_and_kill_to_self_is_noop() { #[test] fn test_burn_tao_increases_burn_address_balance() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let coldkey = U256::from(1); let burn_address: U256 = ::BurnAccountId::get().into_account_truncating(); @@ -285,7 +289,7 @@ fn test_burn_tao_increases_burn_address_balance() { #[test] fn test_burn_tao_zero_amount_is_ok() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let coldkey = U256::from(1); let burn_address: U256 = ::BurnAccountId::get().into_account_truncating(); @@ -301,7 +305,7 @@ fn test_burn_tao_zero_amount_is_ok() { #[test] fn test_burn_tao_insufficient_balance_fails() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let coldkey = U256::from(30_001); assert_noop!( @@ -317,7 +321,7 @@ fn test_burn_tao_insufficient_balance_fails() { #[test] fn test_recycle_tao_reduces_both_balances_and_subtensor_total_issuance() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let coldkey = U256::from(1); let max_preserving = SubtensorModule::get_coldkey_balance(&coldkey); let amount = max_preserving.min(10.into()); @@ -343,7 +347,7 @@ fn test_recycle_tao_reduces_both_balances_and_subtensor_total_issuance() { #[test] fn test_recycle_tao_amount_greater_than_max_preserving_fails() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let coldkey = U256::from(1); let max_preserving: u64 = ::Currency::reducible_balance( &coldkey, @@ -365,7 +369,7 @@ fn test_recycle_tao_amount_greater_than_max_preserving_fails() { #[test] fn test_recycle_tao_zero_amount_keeps_issuance_equal() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let coldkey = U256::from(1); let balances_before = balances_total_issuance(); let subtensor_before = subtensor_total_issuance(); @@ -385,7 +389,7 @@ fn test_recycle_tao_zero_amount_keeps_issuance_equal() { /// and recycle should reduce both by the same amount. #[test] fn test_total_issuance_subtensor_matches_balances_across_tao_operations() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let a = U256::from(1); let b = U256::from(2); @@ -423,7 +427,7 @@ fn test_total_issuance_subtensor_matches_balances_across_tao_operations() { /// SubtensorModule::TotalIssuance. #[test] fn test_mint_tao_increases_total_issuance_in_balances_and_subtensor() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let amount = TaoBalance::from(123); let balances_before = balances_total_issuance(); @@ -443,7 +447,7 @@ fn test_mint_tao_increases_total_issuance_in_balances_and_subtensor() { #[test] fn test_mint_tao_zero_amount() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let balances_before = balances_total_issuance(); let subtensor_before = subtensor_total_issuance(); @@ -457,7 +461,7 @@ fn test_mint_tao_zero_amount() { #[test] fn test_mint_tao_respects_max_issuance_cap_in_balances() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { // We cannot directly force balances-pallet issuance above the cap in every mock, // but we *can* set subtensor's mirror and still verify that mint_tao uses the // balances-pallet total issuance as its source of truth. @@ -477,7 +481,7 @@ fn test_mint_tao_respects_max_issuance_cap_in_balances() { #[test] fn test_transfer_tao_reaps_origin() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -502,7 +506,7 @@ fn test_transfer_tao_reaps_origin() { #[test] fn test_recycle_tao_cannot_cross_preserve_threshold_in_high_ed_runtime() { - new_test_ext(1).execute_with(|| { + new_high_ed_test_ext(1).execute_with(|| { let origin = U256::from(1); let max_preserving = diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 7eb03654f2..75db66b8e6 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -335,6 +335,11 @@ impl Contains for NoNestingCallFilter { } } +pub type DispatchExtension = ( + pallet_subtensor::CheckColdkeySwap, + pallet_subtensor::CheckSubnetSale, +); + // Configure FRAME pallets to include in runtime. impl frame_system::Config for Runtime { @@ -391,7 +396,7 @@ impl frame_system::Config for Runtime { type PostInherents = (); type PostTransactions = (); type ExtensionsWeightInfo = frame_system::SubstrateExtensionsWeight; - type DispatchExtension = pallet_subtensor::CheckColdkeySwap; + type DispatchExtension = DispatchExtension; } impl pallet_insecure_randomness_collective_flip::Config for Runtime {} From 485f4bf492cb7261ef43f70021799773e9bac94c Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Wed, 10 Jun 2026 18:22:02 -0300 Subject: [PATCH 02/63] Added SubnetSaleOffers and frozen coldkey/hotkey storage --- pallets/subtensor/src/lib.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index e20e9da4d4..5782a0fe1f 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -83,7 +83,10 @@ pub mod pallet { use crate::RateLimitKey; use crate::migrations; use crate::staking::lock::LockState; - use crate::subnets::leasing::{LeaseId, SubnetLeaseOf}; + use crate::subnets::{ + leasing::{LeaseId, SubnetLeaseOf}, + sale_offer::SubnetSaleOfferOf, + }; use frame_support::Twox64Concat; use frame_support::{ BoundedVec, @@ -2531,6 +2534,24 @@ pub mod pallet { pub type AccumulatedLeaseDividends = StorageMap<_, Twox64Concat, LeaseId, AlphaBalance, ValueQuery, DefaultZeroAlpha>; + /// =========================== + /// ==== Subnet Sale Offers ==== + /// =========================== + /// --- MAP ( netuid ) --> subnet sale offer | Active sale offer for a subnet. + #[pallet::storage] + pub type SubnetSaleOffers = + StorageMap<_, Twox64Concat, NetUid, SubnetSaleOfferOf, OptionQuery>; + + /// --- MAP ( coldkey ) --> () | Owner coldkeys frozen by an active subnet sale offer. + #[pallet::storage] + pub type SubnetSaleFrozenColdkeys = + StorageMap<_, Identity, T::AccountId, (), OptionQuery>; + + /// --- MAP ( hotkey ) --> () | Owner hotkeys frozen by an active subnet sale offer. + #[pallet::storage] + pub type SubnetSaleFrozenHotkeys = + StorageMap<_, Identity, T::AccountId, (), OptionQuery>; + /// --- ITEM ( CommitRevealWeightsVersion ) #[pallet::storage] pub type CommitRevealWeightsVersion = From 25d83ba5ffe48a83502e173fd209c72836dfedb7 Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Wed, 10 Jun 2026 18:36:48 -0300 Subject: [PATCH 03/63] Added extrinsic to create/cancel sale offer --- pallets/subtensor/src/macros/dispatches.rs | 26 +++++ pallets/subtensor/src/macros/errors.rs | 8 ++ pallets/subtensor/src/macros/events.rs | 20 ++++ pallets/subtensor/src/subnets/mod.rs | 1 + pallets/subtensor/src/subnets/sale_offer.rs | 103 ++++++++++++++++++++ 5 files changed, 158 insertions(+) create mode 100644 pallets/subtensor/src/subnets/sale_offer.rs diff --git a/pallets/subtensor/src/macros/dispatches.rs b/pallets/subtensor/src/macros/dispatches.rs index b471328aec..db11427752 100644 --- a/pallets/subtensor/src/macros/dispatches.rs +++ b/pallets/subtensor/src/macros/dispatches.rs @@ -2593,5 +2593,31 @@ mod dispatches { let coldkey = ensure_signed(origin)?; Self::do_set_perpetual_lock(&coldkey, netuid, enabled) } + + /// Create a sale offer for an owned subnet. + /// + /// While the offer exists, the seller coldkey, subnet, and owner hotkey are locked. + /// The seller can optionally restrict the future buyer to a specific coldkey. + #[pallet::call_index(139)] + #[pallet::weight(::WeightInfo::create_sale_offer())] + pub fn create_sale_offer( + origin: OriginFor, + netuid: NetUid, + price: TaoBalance, + authorized_buyer: Option, + ) -> DispatchResult { + let who = ensure_signed(origin)?; + Self::do_create_sale_offer(who, netuid, price, authorized_buyer) + } + + /// Cancel an active subnet sale offer. + /// + /// The seller that created the offer or root can cancel it. + #[pallet::call_index(140)] + #[pallet::weight(::WeightInfo::cancel_sale_offer())] + pub fn cancel_sale_offer(origin: OriginFor, netuid: NetUid) -> DispatchResult { + let maybe_who = crate::system::ensure_signed_or_root(origin)?; + Self::do_cancel_sale_offer(maybe_who, netuid) + } } } diff --git a/pallets/subtensor/src/macros/errors.rs b/pallets/subtensor/src/macros/errors.rs index 46343b6ed1..d4d3d8e429 100644 --- a/pallets/subtensor/src/macros/errors.rs +++ b/pallets/subtensor/src/macros/errors.rs @@ -229,6 +229,14 @@ mod errors { LeaseHasNoEndBlock, /// Lease has not ended. LeaseHasNotEnded, + /// Active subnet sale offer already exists for this subnet. + SaleOfferAlreadyExists, + /// No active subnet sale offer exists for this subnet. + SaleOfferNotFound, + /// The seller coldkey is locked by an active subnet sale offer. + ColdkeyLockedDuringSale, + /// The subnet owner hotkey is locked by an active subnet sale offer. + HotkeyLockedDuringSale, /// An overflow occurred. Overflow, /// Beneficiary does not own hotkey. diff --git a/pallets/subtensor/src/macros/events.rs b/pallets/subtensor/src/macros/events.rs index 918baf1107..b8f20aee5e 100644 --- a/pallets/subtensor/src/macros/events.rs +++ b/pallets/subtensor/src/macros/events.rs @@ -394,6 +394,26 @@ mod events { netuid: NetUid, }, + /// A subnet sale offer has been created and the seller coldkey has been locked. + SubnetSaleOfferCreated { + /// The subnet owner selling the subnet. + seller: T::AccountId, + /// The subnet ID. + netuid: NetUid, + /// The sale price. + price: TaoBalance, + /// Optional buyer coldkey authorized to consume the offer. + authorized_buyer: Option, + }, + + /// A subnet sale offer has been cancelled and its locks have been released. + SubnetSaleOfferCancelled { + /// The subnet owner that cancelled the offer. + seller: T::AccountId, + /// The subnet ID. + netuid: NetUid, + }, + /// The symbol for a subnet has been updated. SymbolUpdated { /// The subnet ID diff --git a/pallets/subtensor/src/subnets/mod.rs b/pallets/subtensor/src/subnets/mod.rs index e93628eef4..e8ed889456 100644 --- a/pallets/subtensor/src/subnets/mod.rs +++ b/pallets/subtensor/src/subnets/mod.rs @@ -2,6 +2,7 @@ use super::*; pub mod leasing; pub mod mechanism; pub mod registration; +pub mod sale_offer; pub mod serving; pub mod subnet; pub mod symbols; diff --git a/pallets/subtensor/src/subnets/sale_offer.rs b/pallets/subtensor/src/subnets/sale_offer.rs new file mode 100644 index 0000000000..243c580583 --- /dev/null +++ b/pallets/subtensor/src/subnets/sale_offer.rs @@ -0,0 +1,103 @@ +//! Subnet sale offers and sale-time freezes. +//! +//! This module intentionally only owns the seller-side primitive: listing a subnet +//! for sale freezes the seller coldkey, subnet, and owner hotkey until the offer is +//! cancelled or later consumed by a sale finalization path. + +use super::*; +use frame_support::traits::fungible; +use subtensor_runtime_common::{NetUid, TaoBalance}; + +pub type CurrencyOf = ::Currency; + +pub type BalanceOf = + as fungible::Inspect<::AccountId>>::Balance; + +#[freeze_struct("7e8727dabcea5026")] +#[derive(Encode, Decode, Eq, PartialEq, Ord, PartialOrd, RuntimeDebug, TypeInfo, MaxEncodedLen)] +pub struct SubnetSaleOffer { + /// The subnet being sold. + pub netuid: NetUid, + /// The subnet owner coldkey that created the offer. + pub seller: AccountId, + /// Optional coldkey that is allowed to consume this offer. + pub authorized_buyer: Option, + /// Sale price expected by the seller. + pub price: Balance, +} + +pub type SubnetSaleOfferOf = SubnetSaleOffer, BalanceOf>; + +impl Pallet { + pub fn do_create_sale_offer( + seller: T::AccountId, + netuid: NetUid, + price: TaoBalance, + authorized_buyer: Option, + ) -> DispatchResult { + ensure!(price > TaoBalance::from(0_u64), Error::::AmountTooLow); + ensure!(Self::if_subnet_exist(netuid), Error::::SubnetNotExists); + ensure!( + SubnetOwner::::get(netuid) == seller, + Error::::NotSubnetOwner + ); + ensure!( + !SubnetSaleOffers::::contains_key(netuid), + Error::::SaleOfferAlreadyExists + ); + ensure!( + !SubnetSaleFrozenColdkeys::::contains_key(&seller), + Error::::ColdkeyLockedDuringSale + ); + let owner_hotkey = SubnetOwnerHotkey::::try_get(netuid) + .map_err(|_| Error::::HotKeyAccountNotExists)?; + ensure!( + !SubnetSaleFrozenHotkeys::::contains_key(&owner_hotkey), + Error::::HotkeyLockedDuringSale + ); + + SubnetSaleOffers::::insert( + netuid, + SubnetSaleOffer { + netuid, + seller: seller.clone(), + authorized_buyer: authorized_buyer.clone(), + price: price.into(), + }, + ); + SubnetSaleFrozenColdkeys::::insert(&seller, ()); + SubnetSaleFrozenHotkeys::::insert(&owner_hotkey, ()); + + Self::deposit_event(Event::SubnetSaleOfferCreated { + seller, + netuid, + price, + authorized_buyer, + }); + + Ok(()) + } + + pub fn do_cancel_sale_offer( + maybe_seller: Option, + netuid: NetUid, + ) -> DispatchResult { + let offer = SubnetSaleOffers::::get(netuid).ok_or(Error::::SaleOfferNotFound)?; + + // If the caller is not the seller, they are root. + if let Some(seller) = maybe_seller { + ensure!(seller == offer.seller, Error::::NotSubnetOwner); + } + + let seller = offer.seller.clone(); + SubnetSaleOffers::::remove(offer.netuid); + SubnetSaleFrozenColdkeys::::remove(&offer.seller); + if let Ok(owner_hotkey) = SubnetOwnerHotkey::::try_get(offer.netuid) { + SubnetSaleFrozenHotkeys::::remove(owner_hotkey); + } + + Self::deposit_event(Event::SubnetSaleOfferCancelled { seller, netuid }); + + Ok(()) + } +} From 5e9801f613a0190acf12015b8c481b233d3445a1 Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Wed, 10 Jun 2026 18:46:31 -0300 Subject: [PATCH 04/63] Cleanup sale offer on subnet removal --- pallets/subtensor/src/coinbase/root.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index c61a71aa65..e38689ef72 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -304,7 +304,7 @@ impl Pallet { // --- 13. Token / mechanism / registration toggles. TokenSymbol::::remove(netuid); SubnetMechanism::::remove(netuid); - SubnetOwnerHotkey::::remove(netuid); + let owner_hotkey = SubnetOwnerHotkey::::take(netuid); NetworkRegistrationAllowed::::remove(netuid); NetworkPowRegistrationAllowed::::remove(netuid); @@ -466,6 +466,12 @@ impl Pallet { AccumulatedLeaseDividends::::remove(lease_id); } + // --- 23. Subnet sale offers: release sale locks. + if let Some(offer) = SubnetSaleOffers::::take(netuid) { + SubnetSaleFrozenColdkeys::::remove(&offer.seller); + SubnetSaleFrozenHotkeys::::remove(&owner_hotkey); + } + // --- 23: Locks cleanup Self::destroy_lock_maps(netuid); From a93d4a96dc398aeaf231a85c18310e07edac6fcb Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Wed, 10 Jun 2026 19:06:14 -0300 Subject: [PATCH 05/63] Added tests --- pallets/subtensor/src/tests/mod.rs | 1 + pallets/subtensor/src/tests/sale_offer.rs | 290 ++++++++++++++++++++++ 2 files changed, 291 insertions(+) create mode 100644 pallets/subtensor/src/tests/sale_offer.rs diff --git a/pallets/subtensor/src/tests/mod.rs b/pallets/subtensor/src/tests/mod.rs index 5c7e7f2227..7f2a078359 100644 --- a/pallets/subtensor/src/tests/mod.rs +++ b/pallets/subtensor/src/tests/mod.rs @@ -21,6 +21,7 @@ mod networks; mod neuron_info; mod recycle_alpha; mod registration; +mod sale_offer; mod serving; mod staking; mod staking2; diff --git a/pallets/subtensor/src/tests/sale_offer.rs b/pallets/subtensor/src/tests/sale_offer.rs new file mode 100644 index 0000000000..b7632d2b04 --- /dev/null +++ b/pallets/subtensor/src/tests/sale_offer.rs @@ -0,0 +1,290 @@ +#![allow(clippy::unwrap_used)] + +use super::mock::*; +use crate::*; +use frame_support::{assert_noop, assert_ok}; +use sp_core::U256; +use subtensor_runtime_common::{NetUid, TaoBalance}; + +const SELLER: u64 = 1; +const OWNER_HOTKEY: u64 = 2; +const BUYER: u64 = 3; + +fn sale_fixture() -> (NetUid, U256, U256, U256) { + let seller = U256::from(SELLER); + let owner_hotkey = U256::from(OWNER_HOTKEY); + let buyer = U256::from(BUYER); + let netuid = add_dynamic_network(&owner_hotkey, &seller); + + (netuid, seller, owner_hotkey, buyer) +} + +fn create_offer(netuid: NetUid, seller: U256, buyer: Option) { + assert_ok!(SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + TaoBalance::from(1_000_000_000_u64), + buyer, + )); +} + +#[test] +fn create_sale_offer_stores_offer_and_freezes_keys() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, owner_hotkey, buyer) = sale_fixture(); + let price = TaoBalance::from(1_000_000_000_u64); + + assert_ok!(SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + price, + Some(buyer), + )); + + let offer = SubnetSaleOffers::::get(netuid).unwrap(); + assert_eq!(offer.netuid, netuid); + assert_eq!(offer.seller, seller); + assert_eq!(offer.authorized_buyer, Some(buyer)); + assert_eq!(offer.price, price); + assert!(SubnetSaleFrozenColdkeys::::contains_key(seller)); + assert!(SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); + assert_eq!( + last_event(), + RuntimeEvent::SubtensorModule(Event::SubnetSaleOfferCreated { + seller, + netuid, + price, + authorized_buyer: Some(buyer), + }) + ); + }); +} + +#[test] +fn create_sale_offer_allows_open_offer() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, _owner_hotkey, _buyer) = sale_fixture(); + + assert_ok!(SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + TaoBalance::from(1_000_000_000_u64), + None, + )); + + let offer = SubnetSaleOffers::::get(netuid).unwrap(); + assert_eq!(offer.authorized_buyer, None); + }); +} + +#[test] +fn create_sale_offer_rejects_zero_price() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, _owner_hotkey, buyer) = sale_fixture(); + + assert_noop!( + SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + TaoBalance::from(0_u64), + Some(buyer), + ), + Error::::AmountTooLow, + ); + }); +} + +#[test] +fn create_sale_offer_rejects_missing_subnet() { + new_test_ext(1).execute_with(|| { + let seller = U256::from(SELLER); + let missing_netuid = NetUid::from(99); + + assert_noop!( + SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(seller), + missing_netuid, + TaoBalance::from(1_000_000_000_u64), + None, + ), + Error::::SubnetNotExists, + ); + }); +} + +#[test] +fn create_sale_offer_rejects_non_owner() { + new_test_ext(1).execute_with(|| { + let (netuid, _seller, _owner_hotkey, buyer) = sale_fixture(); + let not_owner = U256::from(99); + + assert_noop!( + SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(not_owner), + netuid, + TaoBalance::from(1_000_000_000_u64), + Some(buyer), + ), + Error::::NotSubnetOwner, + ); + }); +} + +#[test] +fn create_sale_offer_rejects_existing_offer() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, _owner_hotkey, buyer) = sale_fixture(); + create_offer(netuid, seller, Some(buyer)); + + assert_noop!( + SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + TaoBalance::from(2_000_000_000_u64), + None, + ), + Error::::SaleOfferAlreadyExists, + ); + }); +} + +#[test] +fn create_sale_offer_rejects_frozen_seller() { + new_test_ext(1).execute_with(|| { + let (first_netuid, seller, _first_owner_hotkey, buyer) = sale_fixture(); + let second_owner_hotkey = U256::from(20); + let second_netuid = add_dynamic_network(&second_owner_hotkey, &seller); + create_offer(first_netuid, seller, Some(buyer)); + + assert_noop!( + SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(seller), + second_netuid, + TaoBalance::from(2_000_000_000_u64), + None, + ), + Error::::ColdkeyLockedDuringSale, + ); + }); +} + +#[test] +fn create_sale_offer_rejects_missing_owner_hotkey() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, _owner_hotkey, buyer) = sale_fixture(); + SubnetOwnerHotkey::::remove(netuid); + + assert_noop!( + SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + TaoBalance::from(1_000_000_000_u64), + Some(buyer), + ), + Error::::HotKeyAccountNotExists, + ); + }); +} + +#[test] +fn create_sale_offer_rejects_frozen_owner_hotkey() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, owner_hotkey, buyer) = sale_fixture(); + SubnetSaleFrozenHotkeys::::insert(owner_hotkey, ()); + + assert_noop!( + SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + TaoBalance::from(1_000_000_000_u64), + Some(buyer), + ), + Error::::HotkeyLockedDuringSale, + ); + }); +} + +#[test] +fn cancel_sale_offer_unfreezes_keys() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, owner_hotkey, buyer) = sale_fixture(); + create_offer(netuid, seller, Some(buyer)); + + assert_ok!(SubtensorModule::cancel_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + )); + + assert!(!SubnetSaleOffers::::contains_key(netuid)); + assert!(!SubnetSaleFrozenColdkeys::::contains_key(seller)); + assert!(!SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); + assert_eq!( + last_event(), + RuntimeEvent::SubtensorModule(Event::SubnetSaleOfferCancelled { seller, netuid }) + ); + }); +} + +#[test] +fn cancel_sale_offer_root_unfreezes_keys() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, owner_hotkey, buyer) = sale_fixture(); + create_offer(netuid, seller, Some(buyer)); + + assert_ok!(SubtensorModule::cancel_sale_offer( + RuntimeOrigin::root(), + netuid, + )); + + assert!(!SubnetSaleOffers::::contains_key(netuid)); + assert!(!SubnetSaleFrozenColdkeys::::contains_key(seller)); + assert!(!SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); + assert_eq!( + last_event(), + RuntimeEvent::SubtensorModule(Event::SubnetSaleOfferCancelled { seller, netuid }) + ); + }); +} + +#[test] +fn cancel_sale_offer_rejects_missing_offer() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, _owner_hotkey, _buyer) = sale_fixture(); + + assert_noop!( + SubtensorModule::cancel_sale_offer(RuntimeOrigin::signed(seller), netuid), + Error::::SaleOfferNotFound, + ); + }); +} + +#[test] +fn cancel_sale_offer_rejects_non_seller() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, _owner_hotkey, buyer) = sale_fixture(); + let not_seller = U256::from(99); + create_offer(netuid, seller, Some(buyer)); + + assert_noop!( + SubtensorModule::cancel_sale_offer(RuntimeOrigin::signed(not_seller), netuid), + Error::::NotSubnetOwner, + ); + }); +} + +#[test] +fn remove_network_cleans_sale_offer() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, owner_hotkey, buyer) = sale_fixture(); + create_offer(netuid, seller, Some(buyer)); + + assert_ok!(SubtensorModule::root_dissolve_network( + RuntimeOrigin::root(), + netuid, + )); + + assert!(!SubnetSaleOffers::::contains_key(netuid)); + assert!(!SubnetSaleFrozenColdkeys::::contains_key(seller)); + assert!(!SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); + }); +} From 35bf96ba88c3680373a38a693e198e5381cd6f1b Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Wed, 10 Jun 2026 19:16:04 -0300 Subject: [PATCH 06/63] Added CheckSubnetSale dispatch extension --- .../src/guards/check_coldkey_swap.rs | 19 +- .../subtensor/src/guards/check_subnet_sale.rs | 304 ++++++++++++++++++ pallets/subtensor/src/guards/mod.rs | 2 + 3 files changed, 318 insertions(+), 7 deletions(-) create mode 100644 pallets/subtensor/src/guards/check_subnet_sale.rs diff --git a/pallets/subtensor/src/guards/check_coldkey_swap.rs b/pallets/subtensor/src/guards/check_coldkey_swap.rs index 14b1a25ac9..22067bb0cf 100644 --- a/pallets/subtensor/src/guards/check_coldkey_swap.rs +++ b/pallets/subtensor/src/guards/check_coldkey_swap.rs @@ -83,7 +83,7 @@ where #[allow(clippy::expect_used, clippy::unwrap_used)] mod tests { use crate::{ColdkeySwapAnnouncements, ColdkeySwapDisputes, Error, tests::mock::*}; - use frame_support::{BoundedVec, assert_ok}; + use frame_support::{BoundedVec, assert_noop, assert_ok}; use frame_system::Call as SystemCall; use pallet_subtensor_proxy::Call as ProxyCall; use sp_core::U256; @@ -115,6 +115,11 @@ mod tests { RuntimeCall::SubtensorModule(crate::Call::register_network { hotkey: U256::from(1), }), + RuntimeCall::SubtensorModule(crate::Call::create_sale_offer { + netuid: 1u16.into(), + price: TaoBalance::from(1_000_u64), + authorized_buyer: None, + }), ] } @@ -189,9 +194,9 @@ mod tests { setup_swap_announced(&who); for call in forbidden_calls() { - assert_eq!( - call.dispatch(RuntimeOrigin::signed(who)).unwrap_err().error, - Error::::ColdkeySwapAnnounced.into() + assert_noop!( + call.dispatch(RuntimeOrigin::signed(who)), + Error::::ColdkeySwapAnnounced ); } }); @@ -228,9 +233,9 @@ mod tests { .collect::>(); for call in all_calls { - assert_eq!( - call.dispatch(RuntimeOrigin::signed(who)).unwrap_err().error, - Error::::ColdkeySwapDisputed.into() + assert_noop!( + call.dispatch(RuntimeOrigin::signed(who)), + Error::::ColdkeySwapDisputed ); } }); diff --git a/pallets/subtensor/src/guards/check_subnet_sale.rs b/pallets/subtensor/src/guards/check_subnet_sale.rs new file mode 100644 index 0000000000..742ddcba85 --- /dev/null +++ b/pallets/subtensor/src/guards/check_subnet_sale.rs @@ -0,0 +1,304 @@ +use crate::{Call, Config, Error, SubnetSaleFrozenColdkeys, SubnetSaleFrozenHotkeys}; +use frame_support::{ + dispatch::{DispatchErrorWithPostInfo, DispatchExtension, DispatchInfo, PostDispatchInfo}, + pallet_prelude::*, + traits::{IsSubType, OriginTrait}, +}; +use sp_runtime::traits::Dispatchable; +use sp_std::marker::PhantomData; + +type CallOf = ::RuntimeCall; +type DispatchableOriginOf = as Dispatchable>::RuntimeOrigin; + +/// Dispatch extension that blocks seller coldkey and owner hotkey calls during a subnet sale. +/// +/// When a subnet sale offer is active: +/// - The frozen seller coldkey can only cancel the sale offer or submit MEV-protected calls. +/// - The frozen owner hotkey can only submit MEV-protected calls. +/// +/// Root origin bypasses this extension entirely. +/// Non-signed origins pass through. +/// +/// Because this is a `DispatchExtension` (not a `TransactionExtension`), it fires at every +/// `call.dispatch(origin)` site, including inside proxy dispatch with the resolved origin. +pub struct CheckSubnetSale(PhantomData); + +impl DispatchExtension<::RuntimeCall> for CheckSubnetSale +where + T: Config + pallet_shield::Config, + ::RuntimeCall: Dispatchable + + IsSubType> + + IsSubType>, + DispatchableOriginOf: OriginTrait, +{ + type Pre = (); + + fn weight(_call: &CallOf) -> Weight { + T::DbWeight::get().reads(2) + } + + fn pre_dispatch( + origin: &DispatchableOriginOf, + call: &CallOf, + ) -> Result { + let Some(who) = origin.as_signer() else { + return Ok(()); + }; + + let is_mev_protected = matches!( + IsSubType::>::is_sub_type(call), + Some(pallet_shield::Call::submit_encrypted { .. }) + ); + let is_sale_frozen_coldkey = SubnetSaleFrozenColdkeys::::contains_key(who); + let is_sale_frozen_owner_hotkey = SubnetSaleFrozenHotkeys::::contains_key(who); + let is_sale_cancel = matches!(call.is_sub_type(), Some(Call::cancel_sale_offer { .. })); + + if is_sale_frozen_coldkey && !is_sale_cancel && !is_mev_protected { + return Err(Error::::ColdkeyLockedDuringSale.into()); + } + + if is_sale_frozen_owner_hotkey && !is_mev_protected { + return Err(Error::::HotkeyLockedDuringSale.into()); + } + + Ok(()) + } +} + +#[cfg(test)] +#[allow(clippy::expect_used, clippy::unwrap_used)] +mod tests { + use crate::{Error, SubnetSaleFrozenColdkeys, SubnetSaleFrozenHotkeys, tests::mock::*}; + use frame_support::{ + BoundedVec, assert_noop, assert_ok, + dispatch::{DispatchErrorWithPostInfo, DispatchExtension}, + }; + use frame_system::Call as SystemCall; + use pallet_subtensor_proxy::Call as ProxyCall; + use sp_core::U256; + use sp_runtime::traits::Dispatchable; + use subtensor_runtime_common::{NetUid, ProxyType, TaoBalance}; + + type SaleGuard = super::CheckSubnetSale; + + fn pre_dispatch( + origin: RuntimeOrigin, + call: &RuntimeCall, + ) -> Result<(), DispatchErrorWithPostInfo> { + >::pre_dispatch(&origin, call) + } + + fn sale_netuid() -> NetUid { + NetUid::from(1) + } + + fn freeze_coldkey(who: U256) { + SubnetSaleFrozenColdkeys::::insert(who, ()); + } + + fn freeze_owner_hotkey(who: U256) { + SubnetSaleFrozenHotkeys::::insert(who, ()); + } + + fn remark_call() -> RuntimeCall { + RuntimeCall::System(SystemCall::remark { remark: vec![] }) + } + + fn cancel_call() -> RuntimeCall { + RuntimeCall::SubtensorModule(crate::Call::cancel_sale_offer { + netuid: sale_netuid(), + }) + } + + fn shielded_call() -> RuntimeCall { + RuntimeCall::Shield(pallet_shield::Call::submit_encrypted { + ciphertext: BoundedVec::truncate_from(vec![1, 2, 3, 4]), + }) + } + + fn add_balance_to_coldkey_account(coldkey: &U256, tao: TaoBalance) { + let credit = SubtensorModule::mint_tao(tao); + let _ = SubtensorModule::spend_tao(coldkey, credit, tao).unwrap(); + } + + #[test] + fn no_sale_freeze_allows_signed_calls() { + new_test_ext(1).execute_with(|| { + let who = U256::from(1); + + assert_ok!(pre_dispatch(RuntimeOrigin::signed(who), &remark_call())); + }); + } + + #[test] + fn none_and_root_bypass_sale_freezes() { + new_test_ext(1).execute_with(|| { + let who = U256::from(1); + freeze_coldkey(who); + freeze_owner_hotkey(who); + + assert_ok!(pre_dispatch(RuntimeOrigin::none(), &remark_call())); + assert_ok!(pre_dispatch(RuntimeOrigin::root(), &remark_call())); + }); + } + + #[test] + fn freeze_coldkey_blocks_regular_signed_calls() { + new_test_ext(1).execute_with(|| { + let seller = U256::from(1); + freeze_coldkey(seller); + + assert_noop!( + pre_dispatch(RuntimeOrigin::signed(seller), &remark_call()), + Error::::ColdkeyLockedDuringSale + ); + }); + } + + #[test] + fn freeze_owner_hotkey_blocks_regular_signed_calls() { + new_test_ext(1).execute_with(|| { + let owner_hotkey = U256::from(2); + freeze_owner_hotkey(owner_hotkey); + + assert_noop!( + pre_dispatch(RuntimeOrigin::signed(owner_hotkey), &remark_call()), + Error::::HotkeyLockedDuringSale + ); + }); + } + + #[test] + fn freeze_coldkey_allows_sale_cancellation() { + new_test_ext(1).execute_with(|| { + let seller = U256::from(1); + freeze_coldkey(seller); + + assert_ok!(pre_dispatch(RuntimeOrigin::signed(seller), &cancel_call())); + }); + } + + #[test] + fn freeze_owner_hotkey_does_not_allow_sale_cancellation() { + new_test_ext(1).execute_with(|| { + let owner_hotkey = U256::from(2); + freeze_owner_hotkey(owner_hotkey); + + assert_noop!( + pre_dispatch(RuntimeOrigin::signed(owner_hotkey), &cancel_call()), + Error::::HotkeyLockedDuringSale + ); + }); + } + + #[test] + fn frozen_owner_hotkey_rejects_sale_cancellation_even_if_coldkey() { + new_test_ext(1).execute_with(|| { + let seller_and_owner_hotkey = U256::from(1); + freeze_coldkey(seller_and_owner_hotkey); + freeze_owner_hotkey(seller_and_owner_hotkey); + + assert_noop!( + pre_dispatch( + RuntimeOrigin::signed(seller_and_owner_hotkey), + &cancel_call() + ), + Error::::HotkeyLockedDuringSale + ); + }); + } + + #[test] + fn mev_protected_calls_are_allowed_for_sale_frozen_accounts() { + new_test_ext(1).execute_with(|| { + let seller = U256::from(1); + let owner_hotkey = U256::from(2); + freeze_coldkey(seller); + freeze_owner_hotkey(owner_hotkey); + + assert_ok!(pre_dispatch( + RuntimeOrigin::signed(seller), + &shielded_call() + )); + assert_ok!(pre_dispatch( + RuntimeOrigin::signed(owner_hotkey), + &shielded_call() + )); + }); + } + + #[test] + fn proxied_call_from_sale_frozen_coldkey_is_blocked() { + new_test_ext(1).execute_with(|| { + let real = U256::from(1); + let delegate = U256::from(2); + freeze_coldkey(real); + + add_balance_to_coldkey_account(&real, 1_000_000_000.into()); + add_balance_to_coldkey_account(&delegate, 1_000_000_000.into()); + + assert_ok!(Proxy::add_proxy( + RuntimeOrigin::signed(real), + delegate, + ProxyType::Any, + 0 + )); + + let proxy_call = RuntimeCall::Proxy(ProxyCall::proxy { + real, + force_proxy_type: None, + call: Box::new(remark_call()), + }); + + assert_ok!(proxy_call.dispatch(RuntimeOrigin::signed(delegate))); + assert_eq!( + pallet_subtensor_proxy::LastCallResult::::get(real), + Some(Err(Error::::ColdkeyLockedDuringSale.into())) + ); + }); + } + + #[test] + fn nested_proxied_call_from_sale_frozen_owner_hotkey_is_blocked() { + new_test_ext(1).execute_with(|| { + let real = U256::from(1); + let delegate1 = U256::from(2); + let delegate2 = U256::from(3); + freeze_owner_hotkey(real); + + add_balance_to_coldkey_account(&real, 1_000_000_000.into()); + add_balance_to_coldkey_account(&delegate1, 1_000_000_000.into()); + add_balance_to_coldkey_account(&delegate2, 1_000_000_000.into()); + + assert_ok!(Proxy::add_proxy( + RuntimeOrigin::signed(real), + delegate1, + ProxyType::Any, + 0 + )); + assert_ok!(Proxy::add_proxy( + RuntimeOrigin::signed(delegate1), + delegate2, + ProxyType::Any, + 0 + )); + + let inner_proxy = RuntimeCall::Proxy(ProxyCall::proxy { + real, + force_proxy_type: None, + call: Box::new(remark_call()), + }); + let outer_proxy = RuntimeCall::Proxy(ProxyCall::proxy { + real: delegate1, + force_proxy_type: None, + call: Box::new(inner_proxy), + }); + + assert_ok!(outer_proxy.dispatch(RuntimeOrigin::signed(delegate2))); + assert_eq!( + pallet_subtensor_proxy::LastCallResult::::get(real), + Some(Err(Error::::HotkeyLockedDuringSale.into())) + ); + }); + } +} diff --git a/pallets/subtensor/src/guards/mod.rs b/pallets/subtensor/src/guards/mod.rs index 44fba0c50f..ba46739007 100644 --- a/pallets/subtensor/src/guards/mod.rs +++ b/pallets/subtensor/src/guards/mod.rs @@ -1,3 +1,5 @@ mod check_coldkey_swap; +mod check_subnet_sale; pub use check_coldkey_swap::*; +pub use check_subnet_sale::*; From 54cf5021914f75805367881d07de3fca088b3237 Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Wed, 10 Jun 2026 19:18:31 -0300 Subject: [PATCH 07/63] Added benchmarks and weights placeholder --- pallets/subtensor/src/benchmarks.rs | 60 ++++++++++++++++++++++++++++ pallets/subtensor/src/weights.rs | 62 +++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) diff --git a/pallets/subtensor/src/benchmarks.rs b/pallets/subtensor/src/benchmarks.rs index e8796c9d4f..54f279928f 100644 --- a/pallets/subtensor/src/benchmarks.rs +++ b/pallets/subtensor/src/benchmarks.rs @@ -85,6 +85,24 @@ mod pallet_benchmarks { ); } + fn setup_subnet_sale_offer() + -> (NetUid, T::AccountId, T::AccountId, T::AccountId, TaoBalance) { + let netuid = NetUid::from(1); + let seller: T::AccountId = whitelisted_caller(); + let owner_hotkey: T::AccountId = account("owner_hotkey", 0, 0); + let authorized_buyer: T::AccountId = account("authorized_buyer", 0, 0); + let price = TaoBalance::from(1_000_000_000_u64); + + Subtensor::::init_new_network(netuid, 1); + SubnetOwner::::insert(netuid, seller.clone()); + assert_ok!(Subtensor::::set_subnet_owner_hotkey( + netuid, + &owner_hotkey + )); + + (netuid, seller, owner_hotkey, authorized_buyer, price) + } + #[benchmark] fn register() { let netuid = NetUid::from(1); @@ -1769,6 +1787,48 @@ mod pallet_benchmarks { assert!(!AccumulatedLeaseDividends::::contains_key(lease_id)); } + #[benchmark] + fn create_sale_offer() { + let (netuid, seller, owner_hotkey, authorized_buyer, price) = + setup_subnet_sale_offer::(); + + #[extrinsic_call] + _( + RawOrigin::Signed(seller.clone()), + netuid, + price, + Some(authorized_buyer.clone()), + ); + + let offer = SubnetSaleOffers::::get(netuid).unwrap(); + assert_eq!(offer.netuid, netuid); + assert_eq!(offer.seller, seller); + assert_eq!(offer.authorized_buyer, Some(authorized_buyer)); + assert_eq!(offer.price, price.into()); + assert!(SubnetSaleFrozenColdkeys::::contains_key(&offer.seller)); + assert!(SubnetSaleFrozenHotkeys::::contains_key(&owner_hotkey)); + } + + #[benchmark] + fn cancel_sale_offer() { + let (netuid, seller, owner_hotkey, authorized_buyer, price) = + setup_subnet_sale_offer::(); + + assert_ok!(Subtensor::::create_sale_offer( + RawOrigin::Signed(seller.clone()).into(), + netuid, + price, + Some(authorized_buyer), + )); + + #[extrinsic_call] + _(RawOrigin::Signed(seller.clone()), netuid); + + assert!(!SubnetSaleOffers::::contains_key(netuid)); + assert!(!SubnetSaleFrozenColdkeys::::contains_key(seller)); + assert!(!SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); + } + #[benchmark] fn update_symbol() { let coldkey: T::AccountId = whitelisted_caller(); diff --git a/pallets/subtensor/src/weights.rs b/pallets/subtensor/src/weights.rs index e6e1d497de..89ed188a9c 100644 --- a/pallets/subtensor/src/weights.rs +++ b/pallets/subtensor/src/weights.rs @@ -80,6 +80,8 @@ pub trait WeightInfo { fn remove_stake_full_limit() -> Weight; fn register_leased_network(k: u32, ) -> Weight; fn terminate_lease(k: u32, ) -> Weight; + fn create_sale_offer() -> Weight; + fn cancel_sale_offer() -> Weight; fn update_symbol() -> Weight; fn commit_timelocked_weights() -> Weight; fn set_coldkey_auto_stake_hotkey() -> Weight; @@ -2150,6 +2152,36 @@ impl WeightInfo for SubstrateWeight { .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) .saturating_add(Weight::from_parts(0, 2514).saturating_mul(k.into())) } + /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) + /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetSaleOffers` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn create_sale_offer() -> Weight { + Weight::from_parts(25_000_000, 0) + .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } + /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetSaleOffers` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn cancel_sale_offer() -> Weight { + Weight::from_parts(15_000_000, 0) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TokenSymbol` (r:3 w:1) @@ -4508,6 +4540,36 @@ impl WeightInfo for () { .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(k.into()))) .saturating_add(Weight::from_parts(0, 2514).saturating_mul(k.into())) } + /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) + /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetSaleOffers` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn create_sale_offer() -> Weight { + Weight::from_parts(25_000_000, 0) + .saturating_add(RocksDbWeight::get().reads(6_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } + /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetSaleOffers` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn cancel_sale_offer() -> Weight { + Weight::from_parts(15_000_000, 0) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TokenSymbol` (r:3 w:1) From 79fbaad6f74f760b8eda7946ea87bcf32e2d5584 Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Wed, 10 Jun 2026 19:26:16 -0300 Subject: [PATCH 08/63] Added creation date for later use --- pallets/subtensor/src/benchmarks.rs | 1 + pallets/subtensor/src/subnets/sale_offer.rs | 10 +++++++--- pallets/subtensor/src/tests/sale_offer.rs | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pallets/subtensor/src/benchmarks.rs b/pallets/subtensor/src/benchmarks.rs index 54f279928f..458a41655a 100644 --- a/pallets/subtensor/src/benchmarks.rs +++ b/pallets/subtensor/src/benchmarks.rs @@ -1805,6 +1805,7 @@ mod pallet_benchmarks { assert_eq!(offer.seller, seller); assert_eq!(offer.authorized_buyer, Some(authorized_buyer)); assert_eq!(offer.price, price.into()); + assert_eq!(offer.created_at, frame_system::Pallet::::block_number()); assert!(SubnetSaleFrozenColdkeys::::contains_key(&offer.seller)); assert!(SubnetSaleFrozenHotkeys::::contains_key(&owner_hotkey)); } diff --git a/pallets/subtensor/src/subnets/sale_offer.rs b/pallets/subtensor/src/subnets/sale_offer.rs index 243c580583..5ba1cbd516 100644 --- a/pallets/subtensor/src/subnets/sale_offer.rs +++ b/pallets/subtensor/src/subnets/sale_offer.rs @@ -6,6 +6,7 @@ use super::*; use frame_support::traits::fungible; +use frame_system::pallet_prelude::BlockNumberFor; use subtensor_runtime_common::{NetUid, TaoBalance}; pub type CurrencyOf = ::Currency; @@ -13,9 +14,9 @@ pub type CurrencyOf = ::Currency; pub type BalanceOf = as fungible::Inspect<::AccountId>>::Balance; -#[freeze_struct("7e8727dabcea5026")] +#[freeze_struct("801dda6b57266829")] #[derive(Encode, Decode, Eq, PartialEq, Ord, PartialOrd, RuntimeDebug, TypeInfo, MaxEncodedLen)] -pub struct SubnetSaleOffer { +pub struct SubnetSaleOffer { /// The subnet being sold. pub netuid: NetUid, /// The subnet owner coldkey that created the offer. @@ -24,9 +25,11 @@ pub struct SubnetSaleOffer { pub authorized_buyer: Option, /// Sale price expected by the seller. pub price: Balance, + /// Block at which the sale offer was created. + pub created_at: BlockNumber, } -pub type SubnetSaleOfferOf = SubnetSaleOffer, BalanceOf>; +pub type SubnetSaleOfferOf = SubnetSaleOffer, BalanceOf, BlockNumberFor>; impl Pallet { pub fn do_create_sale_offer( @@ -63,6 +66,7 @@ impl Pallet { seller: seller.clone(), authorized_buyer: authorized_buyer.clone(), price: price.into(), + created_at: frame_system::Pallet::::block_number(), }, ); SubnetSaleFrozenColdkeys::::insert(&seller, ()); diff --git a/pallets/subtensor/src/tests/sale_offer.rs b/pallets/subtensor/src/tests/sale_offer.rs index b7632d2b04..0950abfa56 100644 --- a/pallets/subtensor/src/tests/sale_offer.rs +++ b/pallets/subtensor/src/tests/sale_offer.rs @@ -46,6 +46,7 @@ fn create_sale_offer_stores_offer_and_freezes_keys() { assert_eq!(offer.seller, seller); assert_eq!(offer.authorized_buyer, Some(buyer)); assert_eq!(offer.price, price); + assert_eq!(offer.created_at, System::block_number()); assert!(SubnetSaleFrozenColdkeys::::contains_key(seller)); assert!(SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); assert_eq!( From d664ff9a80257e5a8f75fe791a7aa2aebbbdabcc Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Sun, 5 Jul 2026 16:22:05 +0100 Subject: [PATCH 09/63] Fix some issues --- pallets/subtensor/src/benchmarks.rs | 5 +- pallets/subtensor/src/coinbase/root.rs | 4 +- pallets/subtensor/src/extensions/subtensor.rs | 22 +- .../src/guards/check_coldkey_swap.rs | 2 +- .../subtensor/src/guards/check_subnet_sale.rs | 59 +- pallets/subtensor/src/macros/errors.rs | 4 + pallets/subtensor/src/subnets/sale_offer.rs | 25 +- pallets/subtensor/src/swap/swap_hotkey.rs | 8 + pallets/subtensor/src/tests/mock.rs | 75 +-- pallets/subtensor/src/tests/mock_high_ed.rs | 579 ++++++++++++++++++ pallets/subtensor/src/tests/mod.rs | 1 + pallets/subtensor/src/tests/sale_offer.rs | 93 ++- pallets/subtensor/src/tests/tao.rs | 54 +- pallets/subtensor/src/weights.rs | 8 +- runtime/src/lib.rs | 20 +- 15 files changed, 818 insertions(+), 141 deletions(-) create mode 100644 pallets/subtensor/src/tests/mock_high_ed.rs diff --git a/pallets/subtensor/src/benchmarks.rs b/pallets/subtensor/src/benchmarks.rs index 3d0bc7c324..90a6374ffb 100644 --- a/pallets/subtensor/src/benchmarks.rs +++ b/pallets/subtensor/src/benchmarks.rs @@ -1885,11 +1885,14 @@ mod pallet_benchmarks { let offer = SubnetSaleOffers::::get(netuid).unwrap(); assert_eq!(offer.netuid, netuid); assert_eq!(offer.seller, seller); + assert_eq!(offer.owner_hotkey, owner_hotkey); assert_eq!(offer.authorized_buyer, Some(authorized_buyer)); assert_eq!(offer.price, price.into()); assert_eq!(offer.created_at, frame_system::Pallet::::block_number()); assert!(SubnetSaleFrozenColdkeys::::contains_key(&offer.seller)); - assert!(SubnetSaleFrozenHotkeys::::contains_key(&owner_hotkey)); + assert!(SubnetSaleFrozenHotkeys::::contains_key( + &offer.owner_hotkey + )); } #[benchmark] diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index 395d91d123..c9ca71561e 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -308,7 +308,7 @@ impl Pallet { // --- 13. Token / mechanism / registration toggles. TokenSymbol::::remove(netuid); SubnetMechanism::::remove(netuid); - let owner_hotkey = SubnetOwnerHotkey::::take(netuid); + SubnetOwnerHotkey::::remove(netuid); NetworkRegistrationAllowed::::remove(netuid); NetworkPowRegistrationAllowed::::remove(netuid); @@ -474,7 +474,7 @@ impl Pallet { // --- 23. Subnet sale offers: release sale locks. if let Some(offer) = SubnetSaleOffers::::take(netuid) { SubnetSaleFrozenColdkeys::::remove(&offer.seller); - SubnetSaleFrozenHotkeys::::remove(&owner_hotkey); + SubnetSaleFrozenHotkeys::::remove(&offer.owner_hotkey); } // --- 23: Locks cleanup diff --git a/pallets/subtensor/src/extensions/subtensor.rs b/pallets/subtensor/src/extensions/subtensor.rs index 7899ed855e..4a2ab4e97c 100644 --- a/pallets/subtensor/src/extensions/subtensor.rs +++ b/pallets/subtensor/src/extensions/subtensor.rs @@ -1,6 +1,6 @@ use crate::{ Call, CheckColdkeySwap, CheckDelegateTake, CheckEvmKeyAssociation, CheckRateLimits, - CheckServingEndpoints, CheckWeights, Config, Error, guards::applicable_call, + CheckServingEndpoints, CheckSubnetSale, CheckWeights, Config, Error, guards::applicable_call, }; use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::{ @@ -88,6 +88,7 @@ impl SubtensorTransactionExtension { }; CheckColdkeySwap::::check(who, call)?; + CheckSubnetSale::::check(who, call)?; if let Some(call) = applicable_call(call, CheckWeights::::applies_to) { CheckWeights::::check(who, call)?; @@ -126,6 +127,7 @@ where fn weight(&self, call: &CallOf) -> Weight { use DispatchExtension as DE; as DE>>::weight(call) + .saturating_add( as DE>>::weight(call)) .saturating_add( as DE>>::weight(call)) .saturating_add( as DE>>::weight(call)) .saturating_add( as DE>>::weight(call)) @@ -157,8 +159,8 @@ mod tests { use super::SubtensorTransactionExtension; use crate::{ CheckColdkeySwap, CheckDelegateTake, CheckEvmKeyAssociation, CheckRateLimits, - CheckServingEndpoints, CheckWeights, ColdkeySwapAnnouncements, ColdkeySwapDisputes, - tests::mock::*, + CheckServingEndpoints, CheckSubnetSale, CheckWeights, ColdkeySwapAnnouncements, + ColdkeySwapDisputes, SubnetSaleFrozenColdkeys, tests::mock::*, }; use frame_support::{ assert_ok, @@ -197,6 +199,7 @@ mod tests { fn expected_transaction_extension_weight(call: &RuntimeCall) -> frame_support::weights::Weight { use DispatchExtension as DE; as DE>::weight(call) + .saturating_add( as DE>::weight(call)) .saturating_add( as DE>::weight(call)) .saturating_add( as DE>::weight(call)) .saturating_add( as DE>::weight(call)) @@ -278,6 +281,19 @@ mod tests { }); } + #[test] + fn validate_rejects_sale_frozen_coldkey_call() { + new_test_ext(1).execute_with(|| { + let seller = U256::from(1); + let call = RuntimeCall::System(frame_system::Call::remark { remark: vec![] }); + + SubnetSaleFrozenColdkeys::::insert(seller, ()); + + let err = validate_signed(seller, &call).unwrap_err(); + assert_eq!(err, CustomTransactionError::BadRequest.into()); + }); + } + #[test] fn weight_matches_top_level_dispatch_extension_checks() { new_test_ext(1).execute_with(|| { diff --git a/pallets/subtensor/src/guards/check_coldkey_swap.rs b/pallets/subtensor/src/guards/check_coldkey_swap.rs index cca6dda1aa..683bc43025 100644 --- a/pallets/subtensor/src/guards/check_coldkey_swap.rs +++ b/pallets/subtensor/src/guards/check_coldkey_swap.rs @@ -99,7 +99,7 @@ mod tests { weights::WeightInfo as _, }; use frame_support::{ - BoundedVec, assert_noop, assert_ok, + BoundedVec, assert_ok, dispatch::{DispatchExtension, DispatchResultWithPostInfo}, traits::ExtendedDispatchable, }; diff --git a/pallets/subtensor/src/guards/check_subnet_sale.rs b/pallets/subtensor/src/guards/check_subnet_sale.rs index 742ddcba85..6834cb2440 100644 --- a/pallets/subtensor/src/guards/check_subnet_sale.rs +++ b/pallets/subtensor/src/guards/check_subnet_sale.rs @@ -1,3 +1,4 @@ +use super::{CallOf, DispatchableOriginOf}; use crate::{Call, Config, Error, SubnetSaleFrozenColdkeys, SubnetSaleFrozenHotkeys}; use frame_support::{ dispatch::{DispatchErrorWithPostInfo, DispatchExtension, DispatchInfo, PostDispatchInfo}, @@ -7,9 +8,6 @@ use frame_support::{ use sp_runtime::traits::Dispatchable; use sp_std::marker::PhantomData; -type CallOf = ::RuntimeCall; -type DispatchableOriginOf = as Dispatchable>::RuntimeOrigin; - /// Dispatch extension that blocks seller coldkey and owner hotkey calls during a subnet sale. /// /// When a subnet sale offer is active: @@ -23,6 +21,43 @@ type DispatchableOriginOf = as Dispatchable>::RuntimeOrigin; /// `call.dispatch(origin)` site, including inside proxy dispatch with the resolved origin. pub struct CheckSubnetSale(PhantomData); +impl CheckSubnetSale +where + T: Config + pallet_shield::Config, + CallOf: IsSubType> + IsSubType>, +{ + pub fn check(who: &T::AccountId, call: &CallOf) -> Result<(), Error> { + let is_sale_frozen_coldkey = SubnetSaleFrozenColdkeys::::contains_key(who); + let is_sale_frozen_owner_hotkey = SubnetSaleFrozenHotkeys::::contains_key(who); + + if is_sale_frozen_coldkey && !Self::is_allowed_for_frozen_coldkey(call) { + return Err(Error::::ColdkeyLockedDuringSale); + } + + if is_sale_frozen_owner_hotkey && !Self::is_allowed_for_frozen_owner_hotkey(call) { + return Err(Error::::HotkeyLockedDuringSale); + } + + Ok(()) + } + + fn is_allowed_for_frozen_coldkey(call: &CallOf) -> bool { + matches!(call.is_sub_type(), Some(Call::cancel_sale_offer { .. })) + || Self::is_mev_protected(call) + } + + fn is_allowed_for_frozen_owner_hotkey(call: &CallOf) -> bool { + Self::is_mev_protected(call) + } + + fn is_mev_protected(call: &CallOf) -> bool { + matches!( + IsSubType::>::is_sub_type(call), + Some(pallet_shield::Call::submit_encrypted { .. }) + ) + } +} + impl DispatchExtension<::RuntimeCall> for CheckSubnetSale where T: Config + pallet_shield::Config, @@ -45,23 +80,7 @@ where return Ok(()); }; - let is_mev_protected = matches!( - IsSubType::>::is_sub_type(call), - Some(pallet_shield::Call::submit_encrypted { .. }) - ); - let is_sale_frozen_coldkey = SubnetSaleFrozenColdkeys::::contains_key(who); - let is_sale_frozen_owner_hotkey = SubnetSaleFrozenHotkeys::::contains_key(who); - let is_sale_cancel = matches!(call.is_sub_type(), Some(Call::cancel_sale_offer { .. })); - - if is_sale_frozen_coldkey && !is_sale_cancel && !is_mev_protected { - return Err(Error::::ColdkeyLockedDuringSale.into()); - } - - if is_sale_frozen_owner_hotkey && !is_mev_protected { - return Err(Error::::HotkeyLockedDuringSale.into()); - } - - Ok(()) + Self::check(who, call).map_err(Into::into) } } diff --git a/pallets/subtensor/src/macros/errors.rs b/pallets/subtensor/src/macros/errors.rs index 469d99b9cb..d1e6bcafe1 100644 --- a/pallets/subtensor/src/macros/errors.rs +++ b/pallets/subtensor/src/macros/errors.rs @@ -233,6 +233,10 @@ mod errors { SaleOfferAlreadyExists, /// No active subnet sale offer exists for this subnet. SaleOfferNotFound, + /// The subnet owner hotkey cannot be the same account as the owner coldkey. + SubnetOwnerHotkeyCannotBeOwnerColdkey, + /// The subnet is under an active lease and cannot be listed for sale. + SubnetIsLeased, /// The seller coldkey is locked by an active subnet sale offer. ColdkeyLockedDuringSale, /// The subnet owner hotkey is locked by an active subnet sale offer. diff --git a/pallets/subtensor/src/subnets/sale_offer.rs b/pallets/subtensor/src/subnets/sale_offer.rs index 5ba1cbd516..d1cd021771 100644 --- a/pallets/subtensor/src/subnets/sale_offer.rs +++ b/pallets/subtensor/src/subnets/sale_offer.rs @@ -1,8 +1,8 @@ //! Subnet sale offers and sale-time freezes. //! //! This module intentionally only owns the seller-side primitive: listing a subnet -//! for sale freezes the seller coldkey, subnet, and owner hotkey until the offer is -//! cancelled or later consumed by a sale finalization path. +//! for sale freezes the seller coldkey and owner hotkey until the offer is cancelled +//! or later consumed by a sale finalization path. use super::*; use frame_support::traits::fungible; @@ -14,13 +14,19 @@ pub type CurrencyOf = ::Currency; pub type BalanceOf = as fungible::Inspect<::AccountId>>::Balance; -#[freeze_struct("801dda6b57266829")] +#[freeze_struct("d7b8c7328636281a")] #[derive(Encode, Decode, Eq, PartialEq, Ord, PartialOrd, RuntimeDebug, TypeInfo, MaxEncodedLen)] pub struct SubnetSaleOffer { /// The subnet being sold. pub netuid: NetUid, /// The subnet owner coldkey that created the offer. pub seller: AccountId, + /// The subnet owner hotkey frozen by this offer. + /// + /// Kept here (rather than re-read from `SubnetOwnerHotkey` at unfreeze time) so + /// cancellation and subnet dissolution unfreeze exactly the hotkey that was frozen, + /// even if the subnet owner hotkey changed while the offer was active. + pub owner_hotkey: AccountId, /// Optional coldkey that is allowed to consume this offer. pub authorized_buyer: Option, /// Sale price expected by the seller. @@ -44,6 +50,10 @@ impl Pallet { SubnetOwner::::get(netuid) == seller, Error::::NotSubnetOwner ); + ensure!( + !SubnetUidToLeaseId::::contains_key(netuid), + Error::::SubnetIsLeased + ); ensure!( !SubnetSaleOffers::::contains_key(netuid), Error::::SaleOfferAlreadyExists @@ -54,6 +64,10 @@ impl Pallet { ); let owner_hotkey = SubnetOwnerHotkey::::try_get(netuid) .map_err(|_| Error::::HotKeyAccountNotExists)?; + ensure!( + owner_hotkey != seller, + Error::::SubnetOwnerHotkeyCannotBeOwnerColdkey + ); ensure!( !SubnetSaleFrozenHotkeys::::contains_key(&owner_hotkey), Error::::HotkeyLockedDuringSale @@ -64,6 +78,7 @@ impl Pallet { SubnetSaleOffer { netuid, seller: seller.clone(), + owner_hotkey: owner_hotkey.clone(), authorized_buyer: authorized_buyer.clone(), price: price.into(), created_at: frame_system::Pallet::::block_number(), @@ -96,9 +111,7 @@ impl Pallet { let seller = offer.seller.clone(); SubnetSaleOffers::::remove(offer.netuid); SubnetSaleFrozenColdkeys::::remove(&offer.seller); - if let Ok(owner_hotkey) = SubnetOwnerHotkey::::try_get(offer.netuid) { - SubnetSaleFrozenHotkeys::::remove(owner_hotkey); - } + SubnetSaleFrozenHotkeys::::remove(&offer.owner_hotkey); Self::deposit_event(Event::SubnetSaleOfferCancelled { seller, netuid }); diff --git a/pallets/subtensor/src/swap/swap_hotkey.rs b/pallets/subtensor/src/swap/swap_hotkey.rs index 43b901927b..1eaca6daec 100644 --- a/pallets/subtensor/src/swap/swap_hotkey.rs +++ b/pallets/subtensor/src/swap/swap_hotkey.rs @@ -59,6 +59,14 @@ impl Pallet { // 5. Ensure the new hotkey is different from the old one ensure!(old_hotkey != new_hotkey, Error::::NewHotKeyIsSameWithOld); + // 5.1 Ensure the old hotkey is not frozen by an active subnet sale offer. + // Swapping it would rewrite SubnetOwnerHotkey while the sale freeze maps still + // reference the old hotkey, bypassing the freeze and leaving it frozen forever. + ensure!( + !SubnetSaleFrozenHotkeys::::contains_key(old_hotkey), + Error::::HotkeyLockedDuringSale + ); + // 6. Get the current block number let block: u64 = Self::get_current_block_as_u64(); diff --git a/pallets/subtensor/src/tests/mock.rs b/pallets/subtensor/src/tests/mock.rs index 930cf1590d..99233f0e45 100644 --- a/pallets/subtensor/src/tests/mock.rs +++ b/pallets/subtensor/src/tests/mock.rs @@ -84,46 +84,6 @@ pub type Balance = TaoBalance; #[allow(dead_code)] pub type BlockNumber = u64; -const DEFAULT_EXISTENTIAL_DEPOSIT: Balance = TaoBalance::new(1); - -std::thread_local! { - static TEST_EXISTENTIAL_DEPOSIT: RefCell = - const { RefCell::new(DEFAULT_EXISTENTIAL_DEPOSIT) }; -} - -pub struct ExistentialDeposit; - -impl ExistentialDeposit { - pub fn get() -> Balance { - >::get() - } -} - -impl Get for ExistentialDeposit { - fn get() -> Balance { - TEST_EXISTENTIAL_DEPOSIT.with(|ed| *ed.borrow()) - } -} - -pub struct TestExternalitiesWithExistentialDeposit { - previous_existential_deposit: Balance, - ext: sp_io::TestExternalities, -} - -impl TestExternalitiesWithExistentialDeposit { - pub fn execute_with(mut self, execute: impl FnOnce() -> R) -> R { - self.ext.execute_with(execute) - } -} - -impl Drop for TestExternalitiesWithExistentialDeposit { - fn drop(&mut self) { - TEST_EXISTENTIAL_DEPOSIT.with(|ed| { - ed.replace(self.previous_existential_deposit); - }); - } -} - #[derive_impl(pallet_balances::config_preludes::TestDefaultConfig)] impl pallet_balances::Config for Test { type Balance = Balance; @@ -172,16 +132,6 @@ impl Contains for NoNestingCallFilter { } } -type DispatchExtension = ( - crate::CheckColdkeySwap, - crate::CheckWeights, - crate::CheckRateLimits, - crate::CheckDelegateTake, - crate::CheckServingEndpoints, - crate::CheckEvmKeyAssociation, - crate::CheckSubnetSale, -); - #[derive_impl(frame_system::config_preludes::TestDefaultConfig)] impl system::Config for Test { type BaseCallFilter = InsideBoth; @@ -207,7 +157,15 @@ impl system::Config for Test { type MaxConsumers = frame_support::traits::ConstU32<16>; type Nonce = u64; type Block = Block; - type DispatchExtension = DispatchExtension; + type DispatchExtension = ( + crate::CheckColdkeySwap, + crate::CheckSubnetSale, + crate::CheckWeights, + crate::CheckRateLimits, + crate::CheckDelegateTake, + crate::CheckServingEndpoints, + crate::CheckEvmKeyAssociation, + ); } parameter_types! { @@ -232,6 +190,7 @@ parameter_types! { Weight::from_parts(2_000_000_000_000, u64::MAX), Perbill::from_percent(75), ); + pub const ExistentialDeposit: Balance = TaoBalance::new(1); pub const TransactionByteFee: Balance = TaoBalance::new(100); pub const SDebug:u64 = 1; pub const InitialRho: u16 = 30; @@ -673,20 +632,6 @@ pub fn new_test_ext(block_number: BlockNumber) -> sp_io::TestExternalities { ext } -pub fn test_ext_with_existential_deposit( - block_number: BlockNumber, - existential_deposit: Balance, -) -> TestExternalitiesWithExistentialDeposit { - let previous_existential_deposit = - TEST_EXISTENTIAL_DEPOSIT.with(|ed| ed.replace(existential_deposit)); - let ext = new_test_ext(block_number); - - TestExternalitiesWithExistentialDeposit { - previous_existential_deposit, - ext, - } -} - #[allow(dead_code)] pub fn test_ext_with_balances(balances: Vec<(U256, u128)>) -> sp_io::TestExternalities { init_logs_for_tests(); diff --git a/pallets/subtensor/src/tests/mock_high_ed.rs b/pallets/subtensor/src/tests/mock_high_ed.rs new file mode 100644 index 0000000000..6f5c69a89c --- /dev/null +++ b/pallets/subtensor/src/tests/mock_high_ed.rs @@ -0,0 +1,579 @@ +#![allow( + clippy::arithmetic_side_effects, + clippy::expect_used, + clippy::unwrap_used +)] + +use core::num::NonZeroU64; + +use crate::*; +use frame_support::traits::{Everything, InstanceFilter}; +use frame_support::weights::Weight; +use frame_support::weights::constants::RocksDbWeight; +use frame_support::{PalletId, derive_impl}; +use frame_support::{parameter_types, traits::PrivilegeCmp}; +use frame_system as system; +use frame_system::{EnsureRoot, limits}; +use pallet_subtensor_proxy as pallet_proxy; +use sp_core::{ConstU64, H256, U256, offchain::KeyTypeId}; +use sp_runtime::Perbill; +use sp_runtime::{ + BuildStorage, Percent, + traits::{BlakeTwo256, IdentityLookup}, +}; +use sp_std::{cmp::Ordering, sync::OnceLock}; +use sp_tracing::tracing_subscriber; +use substrate_fixed::types::U64F64; +use subtensor_runtime_common::{AuthorshipInfo, NetUid, TaoBalance}; +use tracing_subscriber::{EnvFilter, layer::SubscriberExt, util::SubscriberInitExt}; +type Block = frame_system::mocking::MockBlock; + +// Configure a mock runtime to test the pallet. +frame_support::construct_runtime!( + pub enum Test + { + System: frame_system = 1, + Balances: pallet_balances = 2, + Shield: pallet_shield = 3, + SubtensorModule: crate = 4, + AlphaAssets: pallet_alpha_assets = 5, + Scheduler: pallet_scheduler = 6, + Preimage: pallet_preimage = 7, + Drand: pallet_drand = 8, + Swap: pallet_subtensor_swap = 9, + Crowdloan: pallet_crowdloan = 10, + Proxy: pallet_subtensor_proxy = 11, + } +); + +#[allow(dead_code)] +pub type TestRuntimeCall = frame_system::Call; + +pub const KEY_TYPE: KeyTypeId = KeyTypeId(*b"test"); + +#[allow(dead_code)] +pub type AccountId = U256; + +// The address format for describing accounts. +#[allow(dead_code)] +pub type Address = AccountId; + +// Balance of an account. +#[allow(dead_code)] +pub type Balance = TaoBalance; + +// An index to a block. +#[allow(dead_code)] +pub type BlockNumber = u64; + +#[derive_impl(pallet_balances::config_preludes::TestDefaultConfig)] +impl pallet_balances::Config for Test { + type Balance = Balance; + type RuntimeEvent = RuntimeEvent; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type MaxLocks = (); + type WeightInfo = (); + type MaxReserves = (); + type ReserveIdentifier = (); + type RuntimeHoldReason = (); + type FreezeIdentifier = (); + type MaxFreezes = (); +} + +impl pallet_shield::Config for Test { + type AuthorityId = sp_core::sr25519::Public; + type FindAuthors = (); + type RuntimeCall = RuntimeCall; + type ExtrinsicDecryptor = (); + type WeightInfo = (); +} + +impl pallet_alpha_assets::Config for Test {} + +#[derive_impl(frame_system::config_preludes::TestDefaultConfig)] +impl system::Config for Test { + type BaseCallFilter = Everything; + type BlockWeights = BlockWeights; + type BlockLength = (); + type DbWeight = RocksDbWeight; + type RuntimeOrigin = RuntimeOrigin; + type RuntimeCall = RuntimeCall; + type Hash = H256; + type Hashing = BlakeTwo256; + type AccountId = U256; + type Lookup = IdentityLookup; + type RuntimeEvent = RuntimeEvent; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = SS58Prefix; + type OnSetCode = (); + type MaxConsumers = frame_support::traits::ConstU32<16>; + type Nonce = u64; + type Block = Block; + type DispatchExtension = ( + crate::CheckColdkeySwap, + crate::CheckWeights, + crate::CheckRateLimits, + crate::CheckDelegateTake, + crate::CheckServingEndpoints, + crate::CheckEvmKeyAssociation, + ); +} + +parameter_types! { + pub const BlockHashCount: u64 = 250; + pub const SS58Prefix: u8 = 42; +} + +pub const MOCK_BLOCK_BUILDER: u64 = 12345u64; + +pub struct MockAuthorshipProvider; + +impl AuthorshipInfo for MockAuthorshipProvider { + fn author() -> Option { + Some(U256::from(MOCK_BLOCK_BUILDER)) + } +} + +parameter_types! { + pub const InitialMinAllowedWeights: u16 = 0; + pub const InitialEmissionValue: u16 = 0; + pub BlockWeights: limits::BlockWeights = limits::BlockWeights::with_sensible_defaults( + Weight::from_parts(2_000_000_000_000, u64::MAX), + Perbill::from_percent(75), + ); + pub const ExistentialDeposit: Balance = TaoBalance::new(100); + pub const TransactionByteFee: Balance = TaoBalance::new(100); + pub const SDebug:u64 = 1; + pub const InitialRho: u16 = 30; + pub const InitialAlphaSigmoidSteepness: i16 = 1000; + pub const InitialKappa: u16 = 32_767; + pub const InitialTempo: u16 = 360; + pub const SelfOwnership: u64 = 2; + pub const InitialImmunityPeriod: u16 = 2; + pub const InitialMinAllowedUids: u16 = 2; + pub const InitialMaxAllowedUids: u16 = 256; + pub const InitialBondsMovingAverage: u64 = 900_000; + pub const InitialBondsPenalty:u16 = u16::MAX; + pub const InitialBondsResetOn: bool = false; + pub const InitialStakePruningMin: u16 = 0; + pub const InitialFoundationDistribution: u64 = 0; + pub const InitialDefaultDelegateTake: u16 = 11_796; // 18%, same as in production + pub const InitialMinDelegateTake: u16 = 5_898; // 9%; + pub const InitialDefaultChildKeyTake: u16 = 0 ;// 0 % + pub const InitialMinChildKeyTake: u16 = 0; // 0 %; + pub const InitialMaxChildKeyTake: u16 = 11_796; // 18 %; + pub const InitialWeightsVersionKey: u16 = 0; + pub const InitialServingRateLimit: u64 = 0; // No limit. + pub const InitialTxRateLimit: u64 = 0; // Disable rate limit for testing + pub const InitialTxDelegateTakeRateLimit: u64 = 1; // 1 block take rate limit for testing + pub const InitialTxChildKeyTakeRateLimit: u64 = 1; // 1 block take rate limit for testing + pub const InitialBurn: u64 = 0; + pub const InitialMinBurn: u64 = 500_000; + pub const InitialMinStake: u64 = 2_000_000; + pub const InitialMaxBurn: u64 = 1_000_000_000; + pub const MinBurnUpperBound: TaoBalance = TaoBalance::new(1_000_000_000); // 1 TAO + pub const MaxBurnLowerBound: TaoBalance = TaoBalance::new(100_000_000); // 0.1 TAO + pub const MinTempo: u16 = crate::MIN_TEMPO; + pub const MaxTempo: u16 = crate::MAX_TEMPO; + pub const MinActivityCutoffFactorMilli: u32 = crate::MIN_ACTIVITY_CUTOFF_FACTOR_MILLI; + pub const MaxActivityCutoffFactorMilli: u32 = crate::MAX_ACTIVITY_CUTOFF_FACTOR_MILLI; + pub const InitialValidatorPruneLen: u64 = 0; + pub const InitialScalingLawPower: u16 = 50; + pub const InitialMaxAllowedValidators: u16 = 100; + pub const InitialIssuance: u64 = 0; + pub const InitialDifficulty: u64 = 10000; + pub const InitialActivityCutoff: u16 = 5000; + pub const InitialAdjustmentInterval: u16 = 100; + pub const InitialAdjustmentAlpha: u64 = 0; // no weight to previous value. + pub const InitialMaxRegistrationsPerBlock: u16 = 3; + pub const InitialTargetRegistrationsPerInterval: u16 = 2; + pub const InitialPruningScore : u16 = u16::MAX; + pub const InitialRegistrationRequirement: u16 = u16::MAX; // Top 100% + pub const InitialMinDifficulty: u64 = 1; + pub const InitialMaxDifficulty: u64 = u64::MAX; + pub const InitialRAORecycledForRegistration: u64 = 0; + pub const InitialNetworkImmunityPeriod: u64 = 1_296_000; + pub const InitialNetworkMinLockCost: u64 = 100_000_000_000; + pub const InitialSubnetOwnerCut: u16 = 0; // 0%. 100% of rewards go to validators + miners. + pub const InitialNetworkLockReductionInterval: u64 = 2; // 2 blocks. + pub const InitialNetworkRateLimit: u64 = 0; + pub const InitialKeySwapCost: u64 = 1_000_000_000; + pub const InitialAlphaHigh: u16 = 58982; // Represents 0.9 as per the production default + pub const InitialAlphaLow: u16 = 45875; // Represents 0.7 as per the production default + pub const InitialLiquidAlphaOn: bool = false; // Default value for LiquidAlphaOn + pub const InitialYuma3On: bool = false; // Default value for Yuma3On + pub const InitialColdkeySwapAnnouncementDelay: u64 = 50; + pub const InitialColdkeySwapReannouncementDelay: u64 = 10; + pub const InitialDissolveNetworkScheduleDuration: u64 = 5 * 24 * 60 * 60 / 12; // Default as 5 days + pub const InitialTaoWeight: u64 = 0; // 100% global weight. + pub const InitialEmaPriceHalvingPeriod: u64 = 201_600_u64; // 4 weeks + pub const InitialStartCallDelay: u64 = 0; // 0 days + pub const InitialKeySwapOnSubnetCost: u64 = 10_000_000; + pub const HotkeySwapOnSubnetInterval: u64 = 15; // 15 block, should be bigger than subnet number, then trigger clean up for all subnets + pub const MaxContributorsPerLeaseToRemove: u32 = 3; + pub const LeaseDividendsDistributionInterval: u32 = 100; + pub const MaxImmuneUidsPercentage: Percent = Percent::from_percent(80); + pub const EvmKeyAssociateRateLimit: u64 = 10; + pub const SubtensorPalletId: PalletId = PalletId(*b"subtensr"); + pub const BurnAccountId: PalletId = PalletId(*b"burntnsr"); + pub const MaxEpochsPerBlock: u8 = 32; +} + +impl crate::Config for Test { + type RuntimeCall = RuntimeCall; + type Currency = Balances; + type InitialIssuance = InitialIssuance; + type SudoRuntimeCall = TestRuntimeCall; + type Scheduler = Scheduler; + type InitialMinAllowedWeights = InitialMinAllowedWeights; + type InitialEmissionValue = InitialEmissionValue; + type InitialTempo = InitialTempo; + type InitialDifficulty = InitialDifficulty; + type InitialAdjustmentInterval = InitialAdjustmentInterval; + type InitialAdjustmentAlpha = InitialAdjustmentAlpha; + type InitialTargetRegistrationsPerInterval = InitialTargetRegistrationsPerInterval; + type InitialRho = InitialRho; + type InitialAlphaSigmoidSteepness = InitialAlphaSigmoidSteepness; + type InitialKappa = InitialKappa; + type InitialMinAllowedUids = InitialMinAllowedUids; + type InitialMaxAllowedUids = InitialMaxAllowedUids; + type InitialValidatorPruneLen = InitialValidatorPruneLen; + type InitialScalingLawPower = InitialScalingLawPower; + type InitialImmunityPeriod = InitialImmunityPeriod; + type InitialActivityCutoff = InitialActivityCutoff; + type InitialMaxRegistrationsPerBlock = InitialMaxRegistrationsPerBlock; + type InitialPruningScore = InitialPruningScore; + type InitialBondsMovingAverage = InitialBondsMovingAverage; + type InitialBondsPenalty = InitialBondsPenalty; + type InitialBondsResetOn = InitialBondsResetOn; + type InitialMaxAllowedValidators = InitialMaxAllowedValidators; + type InitialDefaultDelegateTake = InitialDefaultDelegateTake; + type InitialMinDelegateTake = InitialMinDelegateTake; + type InitialDefaultChildKeyTake = InitialDefaultChildKeyTake; + type InitialMinChildKeyTake = InitialMinChildKeyTake; + type InitialMaxChildKeyTake = InitialMaxChildKeyTake; + type InitialTxChildKeyTakeRateLimit = InitialTxChildKeyTakeRateLimit; + type InitialWeightsVersionKey = InitialWeightsVersionKey; + type InitialMaxDifficulty = InitialMaxDifficulty; + type InitialMinDifficulty = InitialMinDifficulty; + type InitialServingRateLimit = InitialServingRateLimit; + type InitialTxRateLimit = InitialTxRateLimit; + type InitialTxDelegateTakeRateLimit = InitialTxDelegateTakeRateLimit; + type InitialBurn = InitialBurn; + type InitialMaxBurn = InitialMaxBurn; + type InitialMinBurn = InitialMinBurn; + type InitialMinStake = InitialMinStake; + type MinBurnUpperBound = MinBurnUpperBound; + type MaxBurnLowerBound = MaxBurnLowerBound; + type MinTempo = MinTempo; + type MaxTempo = MaxTempo; + type MinActivityCutoffFactorMilli = MinActivityCutoffFactorMilli; + type MaxActivityCutoffFactorMilli = MaxActivityCutoffFactorMilli; + type InitialRAORecycledForRegistration = InitialRAORecycledForRegistration; + type InitialNetworkImmunityPeriod = InitialNetworkImmunityPeriod; + type InitialNetworkMinLockCost = InitialNetworkMinLockCost; + type InitialSubnetOwnerCut = InitialSubnetOwnerCut; + type InitialNetworkLockReductionInterval = InitialNetworkLockReductionInterval; + type InitialNetworkRateLimit = InitialNetworkRateLimit; + type KeySwapCost = InitialKeySwapCost; + type AlphaHigh = InitialAlphaHigh; + type AlphaLow = InitialAlphaLow; + type LiquidAlphaOn = InitialLiquidAlphaOn; + type Yuma3On = InitialYuma3On; + type Preimages = Preimage; + type InitialColdkeySwapAnnouncementDelay = InitialColdkeySwapAnnouncementDelay; + type InitialColdkeySwapReannouncementDelay = InitialColdkeySwapReannouncementDelay; + type InitialDissolveNetworkScheduleDuration = InitialDissolveNetworkScheduleDuration; + type InitialTaoWeight = InitialTaoWeight; + type InitialEmaPriceHalvingPeriod = InitialEmaPriceHalvingPeriod; + type InitialStartCallDelay = InitialStartCallDelay; + type SwapInterface = pallet_subtensor_swap::Pallet; + type KeySwapOnSubnetCost = InitialKeySwapOnSubnetCost; + type HotkeySwapOnSubnetInterval = HotkeySwapOnSubnetInterval; + type ProxyInterface = (); + type LeaseDividendsDistributionInterval = LeaseDividendsDistributionInterval; + type GetCommitments = (); + type MaxImmuneUidsPercentage = MaxImmuneUidsPercentage; + type CommitmentsInterface = CommitmentsI; + type AlphaAssets = AlphaAssets; + type EvmKeyAssociateRateLimit = EvmKeyAssociateRateLimit; + type AuthorshipProvider = MockAuthorshipProvider; + type SubtensorPalletId = SubtensorPalletId; + type BurnAccountId = BurnAccountId; + type InitialMaxEpochsPerBlock = MaxEpochsPerBlock; + type WeightInfo = (); +} + +// Swap-related parameter types +parameter_types! { + pub const SwapProtocolId: PalletId = PalletId(*b"ten/swap"); + pub const SwapMaxFeeRate: u16 = 10000; // 15.26% + pub const SwapMinimumLiquidity: u64 = 1_000; + pub const SwapMinimumReserve: NonZeroU64 = NonZeroU64::new(100).unwrap(); +} + +impl pallet_subtensor_swap::Config for Test { + type SubnetInfo = SubtensorModule; + type BalanceOps = SubtensorModule; + type ProtocolId = SwapProtocolId; + type TaoReserve = TaoBalanceReserve; + type AlphaReserve = AlphaBalanceReserve; + type MaxFeeRate = SwapMaxFeeRate; + type MinimumLiquidity = SwapMinimumLiquidity; + type MinimumReserve = SwapMinimumReserve; + type WeightInfo = (); + #[cfg(feature = "runtime-benchmarks")] + type BenchmarkHelper = (); +} + +pub struct OriginPrivilegeCmp; + +impl PrivilegeCmp for OriginPrivilegeCmp { + fn cmp_privilege(_left: &OriginCaller, _right: &OriginCaller) -> Option { + Some(Ordering::Less) + } +} + +pub struct CommitmentsI; +impl CommitmentsInterface for CommitmentsI { + fn purge_netuid(_netuid: NetUid) {} +} + +parameter_types! { + pub MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * + BlockWeights::get().max_block; + pub const MaxScheduledPerBlock: u32 = 50; + pub const NoPreimagePostponement: Option = Some(10); +} + +impl pallet_scheduler::Config for Test { + type RuntimeOrigin = RuntimeOrigin; + type RuntimeEvent = RuntimeEvent; + type PalletsOrigin = OriginCaller; + type RuntimeCall = RuntimeCall; + type MaximumWeight = MaximumSchedulerWeight; + type ScheduleOrigin = EnsureRoot; + type MaxScheduledPerBlock = MaxScheduledPerBlock; + type WeightInfo = pallet_scheduler::weights::SubstrateWeight; + type OriginPrivilegeCmp = OriginPrivilegeCmp; + type Preimages = Preimage; + type BlockNumberProvider = System; +} + +parameter_types! { + pub const PreimageMaxSize: u32 = 4096 * 1024; + pub const PreimageBaseDeposit: Balance = TaoBalance::new(1); + pub const PreimageByteDeposit: Balance = TaoBalance::new(1); +} + +impl pallet_preimage::Config for Test { + type WeightInfo = pallet_preimage::weights::SubstrateWeight; + type RuntimeEvent = RuntimeEvent; + type Currency = Balances; + type ManagerOrigin = EnsureRoot; + type Consideration = (); +} + +parameter_types! { + pub const CrowdloanPalletId: PalletId = PalletId(*b"bt/cloan"); + pub const MinimumDeposit: u64 = 50; + pub const AbsoluteMinimumContribution: u64 = 10; + pub const MinimumBlockDuration: u64 = 20; + pub const MaximumBlockDuration: u64 = 100; + pub const RefundContributorsLimit: u32 = 5; + pub const MaxContributors: u32 = 10; +} + +impl pallet_crowdloan::Config for Test { + type PalletId = CrowdloanPalletId; + type Currency = Balances; + type RuntimeCall = RuntimeCall; + type WeightInfo = pallet_crowdloan::weights::SubstrateWeight; + type Preimages = Preimage; + type MinimumDeposit = MinimumDeposit; + type AbsoluteMinimumContribution = AbsoluteMinimumContribution; + type MinimumBlockDuration = MinimumBlockDuration; + type MaximumBlockDuration = MaximumBlockDuration; + type RefundContributorsLimit = RefundContributorsLimit; + type MaxContributors = MaxContributors; +} + +// Proxy Pallet config +parameter_types! { + // Set as 1 for testing purposes + pub const ProxyDepositBase: Balance = TaoBalance::new(1); + // Set as 1 for testing purposes + pub const ProxyDepositFactor: Balance = TaoBalance::new(1); + // Set as 20 for testing purposes + pub const MaxProxies: u32 = 20; // max num proxies per acct + // Set as 15 for testing purposes + pub const MaxPending: u32 = 15; // max blocks pending ~15min + // Set as 1 for testing purposes + pub const AnnouncementDepositBase: Balance = TaoBalance::new(1); + // Set as 1 for testing purposes + pub const AnnouncementDepositFactor: Balance = TaoBalance::new(1); +} + +impl pallet_proxy::Config for Test { + type RuntimeCall = RuntimeCall; + type Currency = Balances; + type ProxyType = subtensor_runtime_common::ProxyType; + type ProxyDepositBase = ProxyDepositBase; + type ProxyDepositFactor = ProxyDepositFactor; + type MaxProxies = MaxProxies; + type WeightInfo = pallet_proxy::weights::SubstrateWeight; + type MaxPending = MaxPending; + type CallHasher = BlakeTwo256; + type AnnouncementDepositBase = AnnouncementDepositBase; + type AnnouncementDepositFactor = AnnouncementDepositFactor; + type BlockNumberProvider = System; +} + +impl InstanceFilter for subtensor_runtime_common::ProxyType { + fn filter(&self, _c: &RuntimeCall) -> bool { + // In tests, allow all proxy types to pass through + true + } + fn is_superset(&self, o: &Self) -> bool { + match (self, o) { + (x, y) if x == y => true, + (subtensor_runtime_common::ProxyType::Any, _) => true, + _ => false, + } + } +} + +mod test_crypto { + use super::KEY_TYPE; + use sp_core::{ + U256, + sr25519::{Public as Sr25519Public, Signature as Sr25519Signature}, + }; + use sp_runtime::{ + app_crypto::{app_crypto, sr25519}, + traits::IdentifyAccount, + }; + + app_crypto!(sr25519, KEY_TYPE); + + pub struct TestAuthId; + + impl frame_system::offchain::AppCrypto for TestAuthId { + type RuntimeAppPublic = Public; + type GenericSignature = Sr25519Signature; + type GenericPublic = Sr25519Public; + } + + impl IdentifyAccount for Public { + type AccountId = U256; + + fn into_account(self) -> U256 { + let mut bytes = [0u8; 32]; + bytes.copy_from_slice(self.as_ref()); + U256::from_big_endian(&bytes) + } + } +} + +pub type TestAuthId = test_crypto::TestAuthId; + +impl pallet_drand::Config for Test { + type AuthorityId = TestAuthId; + type Verifier = pallet_drand::verifier::QuicknetVerifier; + type UnsignedPriority = ConstU64<{ 1 << 20 }>; + type HttpFetchTimeout = ConstU64<1_000>; + type WeightInfo = (); +} + +impl frame_system::offchain::SigningTypes for Test { + type Public = test_crypto::Public; + type Signature = test_crypto::Signature; +} + +pub type UncheckedExtrinsic = sp_runtime::testing::TestXt; + +impl frame_system::offchain::CreateTransactionBase for Test +where + RuntimeCall: From, +{ + type Extrinsic = UncheckedExtrinsic; + type RuntimeCall = RuntimeCall; +} + +impl frame_system::offchain::CreateBare for Test +where + RuntimeCall: From, +{ + fn create_bare(call: Self::RuntimeCall) -> Self::Extrinsic { + UncheckedExtrinsic::new_bare(call) + } +} + +static TEST_LOGS_INIT: OnceLock<()> = OnceLock::new(); + +pub fn init_logs_for_tests() { + if TEST_LOGS_INIT.get().is_some() { + return; + } + + // RUST_LOG (full syntax) or "off" if unset + let filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("off")); + + // Bridge log -> tracing (ok if already set) + let _ = tracing_log::LogTracer::init(); + + // Simple formatter + let fmt_layer = tracing_subscriber::fmt::layer() + .with_ansi(false) + .with_target(true) + .with_level(true) + .without_time(); + + let _ = tracing_subscriber::registry() + .with(filter) + .with(fmt_layer) + .try_init(); + + let _ = TEST_LOGS_INIT.set(()); +} + +#[allow(dead_code)] +// Build genesis storage according to the mock runtime. +pub fn new_test_ext(block_number: BlockNumber) -> sp_io::TestExternalities { + init_logs_for_tests(); + let t = frame_system::GenesisConfig::::default() + .build_storage() + .unwrap(); + let mut ext = sp_io::TestExternalities::new(t); + ext.execute_with(|| System::set_block_number(block_number)); + ext +} + +#[allow(dead_code)] +pub fn add_network(netuid: NetUid, tempo: u16, _modality: u16) { + SubtensorModule::init_new_network(netuid, tempo); + SubtensorModule::set_network_registration_allowed(netuid, true); + FirstEmissionBlockNumber::::insert(netuid, 1); + SubtokenEnabled::::insert(netuid, true); + + // make interval 1 block so tests can register by stepping 1 block. + BurnHalfLife::::insert(netuid, 1); + BurnIncreaseMult::::insert(netuid, U64F64::from_num(1)); +} + +#[allow(dead_code)] +pub fn add_balance_to_coldkey_account(coldkey: &U256, tao: TaoBalance) { + let ed = ExistentialDeposit::get(); + if tao >= ed { + let credit = SubtensorModule::mint_tao(tao); + let _ = SubtensorModule::spend_tao(coldkey, credit, tao).unwrap(); + } +} diff --git a/pallets/subtensor/src/tests/mod.rs b/pallets/subtensor/src/tests/mod.rs index 97fbb14e2e..c9913424d9 100644 --- a/pallets/subtensor/src/tests/mod.rs +++ b/pallets/subtensor/src/tests/mod.rs @@ -16,6 +16,7 @@ mod math; mod mechanism; mod migration; pub(crate) mod mock; +pub(crate) mod mock_high_ed; mod move_stake; mod networks; mod neuron_info; diff --git a/pallets/subtensor/src/tests/sale_offer.rs b/pallets/subtensor/src/tests/sale_offer.rs index 0950abfa56..289d5d5a4a 100644 --- a/pallets/subtensor/src/tests/sale_offer.rs +++ b/pallets/subtensor/src/tests/sale_offer.rs @@ -2,7 +2,7 @@ use super::mock::*; use crate::*; -use frame_support::{assert_noop, assert_ok}; +use frame_support::{assert_err, assert_noop, assert_ok}; use sp_core::U256; use subtensor_runtime_common::{NetUid, TaoBalance}; @@ -44,6 +44,7 @@ fn create_sale_offer_stores_offer_and_freezes_keys() { let offer = SubnetSaleOffers::::get(netuid).unwrap(); assert_eq!(offer.netuid, netuid); assert_eq!(offer.seller, seller); + assert_eq!(offer.owner_hotkey, owner_hotkey); assert_eq!(offer.authorized_buyer, Some(buyer)); assert_eq!(offer.price, price); assert_eq!(offer.created_at, System::block_number()); @@ -187,6 +188,43 @@ fn create_sale_offer_rejects_missing_owner_hotkey() { }); } +#[test] +fn create_sale_offer_rejects_owner_hotkey_same_as_seller() { + new_test_ext(1).execute_with(|| { + let seller = U256::from(SELLER); + let buyer = U256::from(BUYER); + let netuid = add_dynamic_network(&seller, &seller); + + assert_noop!( + SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + TaoBalance::from(1_000_000_000_u64), + Some(buyer), + ), + Error::::SubnetOwnerHotkeyCannotBeOwnerColdkey, + ); + }); +} + +#[test] +fn create_sale_offer_rejects_leased_subnet() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, _owner_hotkey, buyer) = sale_fixture(); + SubnetUidToLeaseId::::insert(netuid, 0); + + assert_noop!( + SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + TaoBalance::from(1_000_000_000_u64), + Some(buyer), + ), + Error::::SubnetIsLeased, + ); + }); +} + #[test] fn create_sale_offer_rejects_frozen_owner_hotkey() { new_test_ext(1).execute_with(|| { @@ -273,6 +311,59 @@ fn cancel_sale_offer_rejects_non_seller() { }); } +#[test] +fn cancel_sale_offer_unfreezes_original_hotkey_after_owner_hotkey_change() { + new_test_ext(1).execute_with(|| { + let (netuid, seller, owner_hotkey, buyer) = sale_fixture(); + create_offer(netuid, seller, Some(buyer)); + + // Simulate the subnet owner hotkey changing mid-sale (only root can do this + // while the seller is frozen). + let new_owner_hotkey = U256::from(99); + SubnetOwnerHotkey::::insert(netuid, new_owner_hotkey); + + assert_ok!(SubtensorModule::cancel_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + )); + + // The hotkey frozen at offer creation is unfrozen, not the current one. + assert!(!SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); + assert!(!SubnetSaleFrozenHotkeys::::contains_key( + new_owner_hotkey + )); + assert!(!SubnetSaleFrozenColdkeys::::contains_key(seller)); + }); +} + +#[test] +fn swap_hotkey_rejects_sale_frozen_owner_hotkey() { + new_test_ext(1).execute_with(|| { + // The subnet owner hotkey is owned by a coldkey other than the seller, so the + // sale freeze on the seller coldkey alone would not stop the owner from + // swapping the hotkey out from under the offer. + let (netuid, seller, _owner_hotkey, buyer) = sale_fixture(); + let other_coldkey = U256::from(50); + let other_hotkey = U256::from(51); + let new_hotkey = U256::from(52); + register_ok_neuron(netuid, other_hotkey, other_coldkey, 0); + SubnetOwnerHotkey::::insert(netuid, other_hotkey); + create_offer(netuid, seller, Some(buyer)); + assert!(SubnetSaleFrozenHotkeys::::contains_key(other_hotkey)); + + assert_err!( + SubtensorModule::do_swap_hotkey( + RuntimeOrigin::signed(other_coldkey), + &other_hotkey, + &new_hotkey, + None, + false, + ), + Error::::HotkeyLockedDuringSale + ); + }); +} + #[test] fn remove_network_cleans_sale_offer() { new_test_ext(1).execute_with(|| { diff --git a/pallets/subtensor/src/tests/tao.rs b/pallets/subtensor/src/tests/tao.rs index ab8cf40839..b79b80e3f3 100644 --- a/pallets/subtensor/src/tests/tao.rs +++ b/pallets/subtensor/src/tests/tao.rs @@ -6,7 +6,8 @@ clippy::expect_used )] -use super::mock::*; +use super::mock_high_ed::*; +use crate::tests::mock_high_ed; use crate::*; use frame_support::{ assert_noop, assert_ok, @@ -20,11 +21,6 @@ use sp_runtime::traits::{AccountIdConversion, Zero}; use subtensor_runtime_common::TaoBalance; const MAX_TAO_ISSUANCE: u64 = 21_000_000_000_000_000_u64; -const HIGH_EXISTENTIAL_DEPOSIT: TaoBalance = TaoBalance::new(100); - -fn new_high_ed_test_ext(block_number: BlockNumber) -> TestExternalitiesWithExistentialDeposit { - test_ext_with_existential_deposit(block_number, HIGH_EXISTENTIAL_DEPOSIT) -} /// Helper: balances-pallet total issuance. fn balances_total_issuance() -> TaoBalance { @@ -52,7 +48,7 @@ fn total_balance(account: &U256) -> TaoBalance { #[test] fn test_transfer_tao_normal_case() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -73,7 +69,7 @@ fn test_transfer_tao_normal_case() { #[test] fn test_transfer_tao_zero_balance_zero_amount() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let origin = U256::from(10_001); let dest = U256::from(10_002); @@ -90,7 +86,7 @@ fn test_transfer_tao_zero_balance_zero_amount() { #[test] fn test_transfer_tao_zero_balance_non_zero_amount_fails() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let origin = U256::from(10_011); let dest = U256::from(10_012); @@ -108,7 +104,7 @@ fn test_transfer_tao_zero_balance_non_zero_amount_fails() { #[test] fn test_transfer_tao_amount_greater_than_transferrable_fails() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -124,7 +120,7 @@ fn test_transfer_tao_amount_greater_than_transferrable_fails() { #[test] fn test_transfer_tao_transfer_exactly_transferrable_succeeds() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -141,7 +137,7 @@ fn test_transfer_tao_transfer_exactly_transferrable_succeeds() { #[test] fn test_transfer_tao_can_reap_origin_when_amount_brings_it_below_ed() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -165,7 +161,7 @@ fn test_transfer_tao_can_reap_origin_when_amount_brings_it_below_ed() { #[test] fn test_transfer_tao_to_self_is_ok_and_no_net_balance_change() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let who = U256::from(1); let before = total_balance(&who); let amount = reducible_balance(&who).min(10.into()); @@ -182,7 +178,7 @@ fn test_transfer_tao_to_self_is_ok_and_no_net_balance_change() { #[test] fn test_transfer_all_tao_and_kill_normal_case() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -210,7 +206,7 @@ fn test_transfer_all_tao_and_kill_normal_case() { #[test] fn test_transfer_all_tao_and_kill_non_existing_origin_is_noop() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let origin = U256::from(20_001); let dest = U256::from(20_002); @@ -228,7 +224,7 @@ fn test_transfer_all_tao_and_kill_non_existing_origin_is_noop() { #[test] fn test_transfer_all_tao_and_kill_preexisting_destination() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -251,7 +247,7 @@ fn test_transfer_all_tao_and_kill_preexisting_destination() { #[test] fn test_transfer_all_tao_and_kill_to_self_is_noop() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let who = U256::from(1); let before_total = total_balance(&who); let before_reducible = reducible_balance(&who); @@ -269,7 +265,7 @@ fn test_transfer_all_tao_and_kill_to_self_is_noop() { #[test] fn test_burn_tao_increases_burn_address_balance() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let coldkey = U256::from(1); let burn_address: U256 = ::BurnAccountId::get().into_account_truncating(); @@ -289,7 +285,7 @@ fn test_burn_tao_increases_burn_address_balance() { #[test] fn test_burn_tao_zero_amount_is_ok() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let coldkey = U256::from(1); let burn_address: U256 = ::BurnAccountId::get().into_account_truncating(); @@ -305,7 +301,7 @@ fn test_burn_tao_zero_amount_is_ok() { #[test] fn test_burn_tao_insufficient_balance_fails() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let coldkey = U256::from(30_001); assert_noop!( @@ -321,7 +317,7 @@ fn test_burn_tao_insufficient_balance_fails() { #[test] fn test_recycle_tao_reduces_both_balances_and_subtensor_total_issuance() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let coldkey = U256::from(1); let max_preserving = SubtensorModule::get_coldkey_balance(&coldkey); let amount = max_preserving.min(10.into()); @@ -347,7 +343,7 @@ fn test_recycle_tao_reduces_both_balances_and_subtensor_total_issuance() { #[test] fn test_recycle_tao_amount_greater_than_max_preserving_fails() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let coldkey = U256::from(1); let max_preserving: u64 = ::Currency::reducible_balance( &coldkey, @@ -369,7 +365,7 @@ fn test_recycle_tao_amount_greater_than_max_preserving_fails() { #[test] fn test_recycle_tao_zero_amount_keeps_issuance_equal() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let coldkey = U256::from(1); let balances_before = balances_total_issuance(); let subtensor_before = subtensor_total_issuance(); @@ -389,7 +385,7 @@ fn test_recycle_tao_zero_amount_keeps_issuance_equal() { /// and recycle should reduce both by the same amount. #[test] fn test_total_issuance_subtensor_matches_balances_across_tao_operations() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let a = U256::from(1); let b = U256::from(2); @@ -427,7 +423,7 @@ fn test_total_issuance_subtensor_matches_balances_across_tao_operations() { /// SubtensorModule::TotalIssuance. #[test] fn test_mint_tao_increases_total_issuance_in_balances_and_subtensor() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let amount = TaoBalance::from(123); let balances_before = balances_total_issuance(); @@ -447,7 +443,7 @@ fn test_mint_tao_increases_total_issuance_in_balances_and_subtensor() { #[test] fn test_mint_tao_zero_amount() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let balances_before = balances_total_issuance(); let subtensor_before = subtensor_total_issuance(); @@ -461,7 +457,7 @@ fn test_mint_tao_zero_amount() { #[test] fn test_mint_tao_respects_max_issuance_cap_in_balances() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { // We cannot directly force balances-pallet issuance above the cap in every mock, // but we *can* set subtensor's mirror and still verify that mint_tao uses the // balances-pallet total issuance as its source of truth. @@ -481,7 +477,7 @@ fn test_mint_tao_respects_max_issuance_cap_in_balances() { #[test] fn test_transfer_tao_reaps_origin() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let origin = U256::from(1); let dest = U256::from(2); @@ -506,7 +502,7 @@ fn test_transfer_tao_reaps_origin() { #[test] fn test_recycle_tao_cannot_cross_preserve_threshold_in_high_ed_runtime() { - new_high_ed_test_ext(1).execute_with(|| { + new_test_ext(1).execute_with(|| { let origin = U256::from(1); let max_preserving = diff --git a/pallets/subtensor/src/weights.rs b/pallets/subtensor/src/weights.rs index 67dda63f17..c48ed0005e 100644 --- a/pallets/subtensor/src/weights.rs +++ b/pallets/subtensor/src/weights.rs @@ -2098,6 +2098,8 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetUidToLeaseId` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetUidToLeaseId` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) /// Proof: `SubtensorModule::SubnetSaleOffers` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:1) @@ -2108,7 +2110,7 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_sale_offer() -> Weight { Weight::from_parts(25_000_000, 0) - .saturating_add(T::DbWeight::get().reads(6_u64)) + .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) @@ -4612,6 +4614,8 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetUidToLeaseId` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetUidToLeaseId` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) /// Proof: `SubtensorModule::SubnetSaleOffers` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:1) @@ -4622,7 +4626,7 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn create_sale_offer() -> Weight { Weight::from_parts(25_000_000, 0) - .saturating_add(RocksDbWeight::get().reads(6_u64)) + .saturating_add(RocksDbWeight::get().reads(7_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 66140ec03d..6337577772 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -291,16 +291,6 @@ impl Contains for NoNestingCallFilter { } } -pub type DispatchExtension = ( - pallet_subtensor::CheckColdkeySwap, - pallet_subtensor::CheckWeights, - pallet_subtensor::CheckRateLimits, - pallet_subtensor::CheckDelegateTake, - pallet_subtensor::CheckServingEndpoints, - pallet_subtensor::CheckEvmKeyAssociation, - pallet_subtensor::CheckSubnetSale, -); - // Configure FRAME pallets to include in runtime. impl frame_system::Config for Runtime { @@ -357,7 +347,15 @@ impl frame_system::Config for Runtime { type PostInherents = (); type PostTransactions = (); type ExtensionsWeightInfo = frame_system::SubstrateExtensionsWeight; - type DispatchExtension = DispatchExtension; + type DispatchExtension = ( + pallet_subtensor::CheckColdkeySwap, + pallet_subtensor::CheckSubnetSale, + pallet_subtensor::CheckWeights, + pallet_subtensor::CheckRateLimits, + pallet_subtensor::CheckDelegateTake, + pallet_subtensor::CheckServingEndpoints, + pallet_subtensor::CheckEvmKeyAssociation, + ); } impl pallet_insecure_randomness_collective_flip::Config for Runtime {} From 1733a3bbe0f7e1775c14b7fd47f7cfdb0b233a66 Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Sun, 5 Jul 2026 18:11:43 +0100 Subject: [PATCH 10/63] Added SaleOfferId and harden protection against swaps --- pallets/subtensor/src/benchmarks.rs | 11 ++- pallets/subtensor/src/coinbase/root.rs | 4 +- .../subtensor/src/guards/check_subnet_sale.rs | 71 ++++------------ pallets/subtensor/src/lib.rs | 9 +- pallets/subtensor/src/macros/errors.rs | 2 - pallets/subtensor/src/macros/events.rs | 12 ++- pallets/subtensor/src/subnets/sale_offer.rs | 82 +++++++++++++------ pallets/subtensor/src/tests/sale_offer.rs | 69 ++++++++++++---- 8 files changed, 152 insertions(+), 108 deletions(-) diff --git a/pallets/subtensor/src/benchmarks.rs b/pallets/subtensor/src/benchmarks.rs index 90a6374ffb..59fd41a7a9 100644 --- a/pallets/subtensor/src/benchmarks.rs +++ b/pallets/subtensor/src/benchmarks.rs @@ -1883,15 +1883,18 @@ mod pallet_benchmarks { ); let offer = SubnetSaleOffers::::get(netuid).unwrap(); + assert_eq!(offer.id, 0); assert_eq!(offer.netuid, netuid); - assert_eq!(offer.seller, seller); - assert_eq!(offer.owner_hotkey, owner_hotkey); + assert_eq!(offer.seller_coldkey, seller); + assert_eq!(offer.seller_hotkey, owner_hotkey); assert_eq!(offer.authorized_buyer, Some(authorized_buyer)); assert_eq!(offer.price, price.into()); assert_eq!(offer.created_at, frame_system::Pallet::::block_number()); - assert!(SubnetSaleFrozenColdkeys::::contains_key(&offer.seller)); + assert!(SubnetSaleFrozenColdkeys::::contains_key( + &offer.seller_coldkey + )); assert!(SubnetSaleFrozenHotkeys::::contains_key( - &offer.owner_hotkey + &offer.seller_hotkey )); } diff --git a/pallets/subtensor/src/coinbase/root.rs b/pallets/subtensor/src/coinbase/root.rs index c9ca71561e..9879500134 100644 --- a/pallets/subtensor/src/coinbase/root.rs +++ b/pallets/subtensor/src/coinbase/root.rs @@ -473,8 +473,8 @@ impl Pallet { // --- 23. Subnet sale offers: release sale locks. if let Some(offer) = SubnetSaleOffers::::take(netuid) { - SubnetSaleFrozenColdkeys::::remove(&offer.seller); - SubnetSaleFrozenHotkeys::::remove(&offer.owner_hotkey); + SubnetSaleFrozenColdkeys::::remove(&offer.seller_coldkey); + SubnetSaleFrozenHotkeys::::remove(&offer.seller_hotkey); } // --- 23: Locks cleanup diff --git a/pallets/subtensor/src/guards/check_subnet_sale.rs b/pallets/subtensor/src/guards/check_subnet_sale.rs index 6834cb2440..bea1a6b8c2 100644 --- a/pallets/subtensor/src/guards/check_subnet_sale.rs +++ b/pallets/subtensor/src/guards/check_subnet_sale.rs @@ -11,59 +11,47 @@ use sp_std::marker::PhantomData; /// Dispatch extension that blocks seller coldkey and owner hotkey calls during a subnet sale. /// /// When a subnet sale offer is active: -/// - The frozen seller coldkey can only cancel the sale offer or submit MEV-protected calls. -/// - The frozen owner hotkey can only submit MEV-protected calls. +/// - The frozen seller coldkey can only cancel the sale offer. +/// - The frozen owner hotkey is fully locked and can submit no calls. /// /// Root origin bypasses this extension entirely. /// Non-signed origins pass through. /// /// Because this is a `DispatchExtension` (not a `TransactionExtension`), it fires at every /// `call.dispatch(origin)` site, including inside proxy dispatch with the resolved origin. +/// Any indirectly dispatched call that resolves to a frozen signer is therefore re-checked +/// here, so the freeze cannot be bypassed by wrapping a call in another dispatch layer. pub struct CheckSubnetSale(PhantomData); impl CheckSubnetSale where - T: Config + pallet_shield::Config, - CallOf: IsSubType> + IsSubType>, + T: Config, + CallOf: IsSubType>, { pub fn check(who: &T::AccountId, call: &CallOf) -> Result<(), Error> { - let is_sale_frozen_coldkey = SubnetSaleFrozenColdkeys::::contains_key(who); - let is_sale_frozen_owner_hotkey = SubnetSaleFrozenHotkeys::::contains_key(who); - - if is_sale_frozen_coldkey && !Self::is_allowed_for_frozen_coldkey(call) { + // A frozen seller coldkey may only cancel the sale offer. + if SubnetSaleFrozenColdkeys::::contains_key(who) + && !matches!(call.is_sub_type(), Some(Call::cancel_sale_offer { .. })) + { return Err(Error::::ColdkeyLockedDuringSale); } - if is_sale_frozen_owner_hotkey && !Self::is_allowed_for_frozen_owner_hotkey(call) { + // A frozen seller hotkey is fully locked while the sale is active. Cancellation is a + // coldkey action, so the seller cancels through the (also frozen) seller coldkey, + // which is why a same-account seller hotkey is never frozen here (see do_create_sale_offer). + if SubnetSaleFrozenHotkeys::::contains_key(who) { return Err(Error::::HotkeyLockedDuringSale); } Ok(()) } - - fn is_allowed_for_frozen_coldkey(call: &CallOf) -> bool { - matches!(call.is_sub_type(), Some(Call::cancel_sale_offer { .. })) - || Self::is_mev_protected(call) - } - - fn is_allowed_for_frozen_owner_hotkey(call: &CallOf) -> bool { - Self::is_mev_protected(call) - } - - fn is_mev_protected(call: &CallOf) -> bool { - matches!( - IsSubType::>::is_sub_type(call), - Some(pallet_shield::Call::submit_encrypted { .. }) - ) - } } impl DispatchExtension<::RuntimeCall> for CheckSubnetSale where - T: Config + pallet_shield::Config, + T: Config, ::RuntimeCall: Dispatchable - + IsSubType> - + IsSubType>, + + IsSubType>, DispatchableOriginOf: OriginTrait, { type Pre = (); @@ -89,7 +77,7 @@ where mod tests { use crate::{Error, SubnetSaleFrozenColdkeys, SubnetSaleFrozenHotkeys, tests::mock::*}; use frame_support::{ - BoundedVec, assert_noop, assert_ok, + assert_noop, assert_ok, dispatch::{DispatchErrorWithPostInfo, DispatchExtension}, }; use frame_system::Call as SystemCall; @@ -129,12 +117,6 @@ mod tests { }) } - fn shielded_call() -> RuntimeCall { - RuntimeCall::Shield(pallet_shield::Call::submit_encrypted { - ciphertext: BoundedVec::truncate_from(vec![1, 2, 3, 4]), - }) - } - fn add_balance_to_coldkey_account(coldkey: &U256, tao: TaoBalance) { let credit = SubtensorModule::mint_tao(tao); let _ = SubtensorModule::spend_tao(coldkey, credit, tao).unwrap(); @@ -227,25 +209,6 @@ mod tests { }); } - #[test] - fn mev_protected_calls_are_allowed_for_sale_frozen_accounts() { - new_test_ext(1).execute_with(|| { - let seller = U256::from(1); - let owner_hotkey = U256::from(2); - freeze_coldkey(seller); - freeze_owner_hotkey(owner_hotkey); - - assert_ok!(pre_dispatch( - RuntimeOrigin::signed(seller), - &shielded_call() - )); - assert_ok!(pre_dispatch( - RuntimeOrigin::signed(owner_hotkey), - &shielded_call() - )); - }); - } - #[test] fn proxied_call_from_sale_frozen_coldkey_is_blocked() { new_test_ext(1).execute_with(|| { diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index e4d948b77d..d2c308d62f 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -86,7 +86,7 @@ pub mod pallet { use crate::staking::lock::LockState; use crate::subnets::{ leasing::{LeaseId, SubnetLeaseOf}, - sale_offer::SubnetSaleOfferOf, + sale_offer::{SaleOfferId, SubnetSaleOfferOf}, }; use frame_support::Twox64Concat; use frame_support::{ @@ -101,7 +101,7 @@ pub mod pallet { use pallet_drand::types::RoundNumber; use runtime_common::prod_or_fast; use share_pool::SafeFloat; - use sp_core::{ConstU32, H160, H256}; + use sp_core::{ConstU32, ConstU64, H160, H256}; use sp_runtime::traits::{Dispatchable, TrailingZeroInput}; use sp_std::collections::btree_map::BTreeMap; use sp_std::collections::btree_set::BTreeSet; @@ -2627,6 +2627,11 @@ pub mod pallet { /// =========================== /// ==== Subnet Sale Offers ==== /// =========================== + /// --- ITEM ( next_sale_offer_id ) | The next subnet sale offer id. + #[pallet::storage] + pub type NextSubnetSaleOfferId = + StorageValue<_, SaleOfferId, ValueQuery, ConstU64<0>>; + /// --- MAP ( netuid ) --> subnet sale offer | Active sale offer for a subnet. #[pallet::storage] pub type SubnetSaleOffers = diff --git a/pallets/subtensor/src/macros/errors.rs b/pallets/subtensor/src/macros/errors.rs index d1e6bcafe1..1dbfea7afd 100644 --- a/pallets/subtensor/src/macros/errors.rs +++ b/pallets/subtensor/src/macros/errors.rs @@ -233,8 +233,6 @@ mod errors { SaleOfferAlreadyExists, /// No active subnet sale offer exists for this subnet. SaleOfferNotFound, - /// The subnet owner hotkey cannot be the same account as the owner coldkey. - SubnetOwnerHotkeyCannotBeOwnerColdkey, /// The subnet is under an active lease and cannot be listed for sale. SubnetIsLeased, /// The seller coldkey is locked by an active subnet sale offer. diff --git a/pallets/subtensor/src/macros/events.rs b/pallets/subtensor/src/macros/events.rs index 17e4460a2f..dcbd75d9a8 100644 --- a/pallets/subtensor/src/macros/events.rs +++ b/pallets/subtensor/src/macros/events.rs @@ -398,8 +398,10 @@ mod events { /// A subnet sale offer has been created and the seller coldkey has been locked. SubnetSaleOfferCreated { - /// The subnet owner selling the subnet. - seller: T::AccountId, + /// The unique id of the sale offer. + id: SaleOfferId, + /// The subnet owner coldkey selling the subnet. + seller_coldkey: T::AccountId, /// The subnet ID. netuid: NetUid, /// The sale price. @@ -410,8 +412,10 @@ mod events { /// A subnet sale offer has been cancelled and its locks have been released. SubnetSaleOfferCancelled { - /// The subnet owner that cancelled the offer. - seller: T::AccountId, + /// The unique id of the sale offer. + id: SaleOfferId, + /// The subnet owner coldkey that cancelled the offer. + seller_coldkey: T::AccountId, /// The subnet ID. netuid: NetUid, }, diff --git a/pallets/subtensor/src/subnets/sale_offer.rs b/pallets/subtensor/src/subnets/sale_offer.rs index d1cd021771..18909518f0 100644 --- a/pallets/subtensor/src/subnets/sale_offer.rs +++ b/pallets/subtensor/src/subnets/sale_offer.rs @@ -1,7 +1,7 @@ //! Subnet sale offers and sale-time freezes. //! //! This module intentionally only owns the seller-side primitive: listing a subnet -//! for sale freezes the seller coldkey and owner hotkey until the offer is cancelled +//! for sale freezes the seller coldkey and seller hotkey until the offer is cancelled //! or later consumed by a sale finalization path. use super::*; @@ -14,19 +14,30 @@ pub type CurrencyOf = ::Currency; pub type BalanceOf = as fungible::Inspect<::AccountId>>::Balance; -#[freeze_struct("d7b8c7328636281a")] +/// Monotonically increasing identifier minted for every subnet sale offer. +/// +/// A fresh id is assigned on each creation so that a consumer that binds to an +/// offer (e.g. a crowdloan raising funds to buy the subnet) can detect a +/// cancel-and-recreate: the recreated offer carries a new id and no longer +/// matches the one that was bound, so the stale binding fails instead of being +/// silently satisfied by a different offer with modified terms. +pub type SaleOfferId = u64; + +#[freeze_struct("6adb80684dface3a")] #[derive(Encode, Decode, Eq, PartialEq, Ord, PartialOrd, RuntimeDebug, TypeInfo, MaxEncodedLen)] pub struct SubnetSaleOffer { + /// Unique identifier for this offer. + pub id: SaleOfferId, /// The subnet being sold. pub netuid: NetUid, /// The subnet owner coldkey that created the offer. - pub seller: AccountId, + pub seller_coldkey: AccountId, /// The subnet owner hotkey frozen by this offer. /// /// Kept here (rather than re-read from `SubnetOwnerHotkey` at unfreeze time) so /// cancellation and subnet dissolution unfreeze exactly the hotkey that was frozen, /// even if the subnet owner hotkey changed while the offer was active. - pub owner_hotkey: AccountId, + pub seller_hotkey: AccountId, /// Optional coldkey that is allowed to consume this offer. pub authorized_buyer: Option, /// Sale price expected by the seller. @@ -39,7 +50,7 @@ pub type SubnetSaleOfferOf = SubnetSaleOffer, BalanceOf, Bl impl Pallet { pub fn do_create_sale_offer( - seller: T::AccountId, + seller_coldkey: T::AccountId, netuid: NetUid, price: TaoBalance, authorized_buyer: Option, @@ -47,7 +58,7 @@ impl Pallet { ensure!(price > TaoBalance::from(0_u64), Error::::AmountTooLow); ensure!(Self::if_subnet_exist(netuid), Error::::SubnetNotExists); ensure!( - SubnetOwner::::get(netuid) == seller, + SubnetOwner::::get(netuid) == seller_coldkey, Error::::NotSubnetOwner ); ensure!( @@ -59,36 +70,42 @@ impl Pallet { Error::::SaleOfferAlreadyExists ); ensure!( - !SubnetSaleFrozenColdkeys::::contains_key(&seller), + !SubnetSaleFrozenColdkeys::::contains_key(&seller_coldkey), Error::::ColdkeyLockedDuringSale ); - let owner_hotkey = SubnetOwnerHotkey::::try_get(netuid) + let seller_hotkey = SubnetOwnerHotkey::::try_get(netuid) .map_err(|_| Error::::HotKeyAccountNotExists)?; ensure!( - owner_hotkey != seller, - Error::::SubnetOwnerHotkeyCannotBeOwnerColdkey - ); - ensure!( - !SubnetSaleFrozenHotkeys::::contains_key(&owner_hotkey), + !SubnetSaleFrozenHotkeys::::contains_key(&seller_hotkey), Error::::HotkeyLockedDuringSale ); + let id = Self::get_next_sale_offer_id()?; + SubnetSaleOffers::::insert( netuid, SubnetSaleOffer { + id, netuid, - seller: seller.clone(), - owner_hotkey: owner_hotkey.clone(), + seller_coldkey: seller_coldkey.clone(), + seller_hotkey: seller_hotkey.clone(), authorized_buyer: authorized_buyer.clone(), price: price.into(), created_at: frame_system::Pallet::::block_number(), }, ); - SubnetSaleFrozenColdkeys::::insert(&seller, ()); - SubnetSaleFrozenHotkeys::::insert(&owner_hotkey, ()); + SubnetSaleFrozenColdkeys::::insert(&seller_coldkey, ()); + // When the seller coldkey and seller hotkey are the same account, the coldkey freeze + // already locks it (and still permits cancellation). Freezing it in the hotkey map as + // well would block cancellation, permanently locking the seller out of their own + // offer, so we skip it in that case. + if seller_hotkey != seller_coldkey { + SubnetSaleFrozenHotkeys::::insert(&seller_hotkey, ()); + } Self::deposit_event(Event::SubnetSaleOfferCreated { - seller, + id, + seller_coldkey, netuid, price, authorized_buyer, @@ -97,23 +114,38 @@ impl Pallet { Ok(()) } + /// Mint the next unique sale offer id, incrementing the on-chain counter. + fn get_next_sale_offer_id() -> Result> { + let id = NextSubnetSaleOfferId::::get(); + let next_id = id.checked_add(1).ok_or(Error::::Overflow)?; + NextSubnetSaleOfferId::::put(next_id); + Ok(id) + } + pub fn do_cancel_sale_offer( - maybe_seller: Option, + maybe_seller_coldkey: Option, netuid: NetUid, ) -> DispatchResult { let offer = SubnetSaleOffers::::get(netuid).ok_or(Error::::SaleOfferNotFound)?; // If the caller is not the seller, they are root. - if let Some(seller) = maybe_seller { - ensure!(seller == offer.seller, Error::::NotSubnetOwner); + if let Some(seller_coldkey) = maybe_seller_coldkey { + ensure!( + seller_coldkey == offer.seller_coldkey, + Error::::NotSubnetOwner + ); } - let seller = offer.seller.clone(); + let seller_coldkey = offer.seller_coldkey.clone(); SubnetSaleOffers::::remove(offer.netuid); - SubnetSaleFrozenColdkeys::::remove(&offer.seller); - SubnetSaleFrozenHotkeys::::remove(&offer.owner_hotkey); + SubnetSaleFrozenColdkeys::::remove(&offer.seller_coldkey); + SubnetSaleFrozenHotkeys::::remove(&offer.seller_hotkey); - Self::deposit_event(Event::SubnetSaleOfferCancelled { seller, netuid }); + Self::deposit_event(Event::SubnetSaleOfferCancelled { + id: offer.id, + seller_coldkey, + netuid, + }); Ok(()) } diff --git a/pallets/subtensor/src/tests/sale_offer.rs b/pallets/subtensor/src/tests/sale_offer.rs index 289d5d5a4a..52e36f9587 100644 --- a/pallets/subtensor/src/tests/sale_offer.rs +++ b/pallets/subtensor/src/tests/sale_offer.rs @@ -42,9 +42,10 @@ fn create_sale_offer_stores_offer_and_freezes_keys() { )); let offer = SubnetSaleOffers::::get(netuid).unwrap(); + assert_eq!(offer.id, 0); assert_eq!(offer.netuid, netuid); - assert_eq!(offer.seller, seller); - assert_eq!(offer.owner_hotkey, owner_hotkey); + assert_eq!(offer.seller_coldkey, seller); + assert_eq!(offer.seller_hotkey, owner_hotkey); assert_eq!(offer.authorized_buyer, Some(buyer)); assert_eq!(offer.price, price); assert_eq!(offer.created_at, System::block_number()); @@ -53,7 +54,8 @@ fn create_sale_offer_stores_offer_and_freezes_keys() { assert_eq!( last_event(), RuntimeEvent::SubtensorModule(Event::SubnetSaleOfferCreated { - seller, + id: 0, + seller_coldkey: seller, netuid, price, authorized_buyer: Some(buyer), @@ -62,6 +64,24 @@ fn create_sale_offer_stores_offer_and_freezes_keys() { }); } +#[test] +fn create_sale_offer_assigns_incrementing_ids() { + new_test_ext(1).execute_with(|| { + let (first_netuid, seller, _first_owner_hotkey, buyer) = sale_fixture(); + let second_owner_hotkey = U256::from(20); + let second_seller = U256::from(21); + let second_netuid = add_dynamic_network(&second_owner_hotkey, &second_seller); + + create_offer(first_netuid, seller, Some(buyer)); + create_offer(second_netuid, second_seller, None); + + assert_eq!(SubnetSaleOffers::::get(first_netuid).unwrap().id, 0); + assert_eq!(SubnetSaleOffers::::get(second_netuid).unwrap().id, 1); + // The counter keeps advancing; ids are never reused. + assert_eq!(NextSubnetSaleOfferId::::get(), 2); + }); +} + #[test] fn create_sale_offer_allows_open_offer() { new_test_ext(1).execute_with(|| { @@ -189,21 +209,32 @@ fn create_sale_offer_rejects_missing_owner_hotkey() { } #[test] -fn create_sale_offer_rejects_owner_hotkey_same_as_seller() { +fn create_sale_offer_allows_owner_hotkey_same_as_seller() { new_test_ext(1).execute_with(|| { let seller = U256::from(SELLER); let buyer = U256::from(BUYER); + // Subnet whose owner coldkey and owner hotkey are the same account. let netuid = add_dynamic_network(&seller, &seller); - assert_noop!( - SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - TaoBalance::from(1_000_000_000_u64), - Some(buyer), - ), - Error::::SubnetOwnerHotkeyCannotBeOwnerColdkey, - ); + assert_ok!(SubtensorModule::create_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + TaoBalance::from(1_000_000_000_u64), + Some(buyer), + )); + + // Only the coldkey is frozen: freezing the same account in the hotkey map as well + // would block the seller from ever cancelling their own offer. + assert!(SubnetSaleFrozenColdkeys::::contains_key(seller)); + assert!(!SubnetSaleFrozenHotkeys::::contains_key(seller)); + + // The seller can still cancel and fully release the lock. + assert_ok!(SubtensorModule::cancel_sale_offer( + RuntimeOrigin::signed(seller), + netuid, + )); + assert!(!SubnetSaleOffers::::contains_key(netuid)); + assert!(!SubnetSaleFrozenColdkeys::::contains_key(seller)); }); } @@ -259,7 +290,11 @@ fn cancel_sale_offer_unfreezes_keys() { assert!(!SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); assert_eq!( last_event(), - RuntimeEvent::SubtensorModule(Event::SubnetSaleOfferCancelled { seller, netuid }) + RuntimeEvent::SubtensorModule(Event::SubnetSaleOfferCancelled { + id: 0, + seller_coldkey: seller, + netuid + }) ); }); } @@ -280,7 +315,11 @@ fn cancel_sale_offer_root_unfreezes_keys() { assert!(!SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); assert_eq!( last_event(), - RuntimeEvent::SubtensorModule(Event::SubnetSaleOfferCancelled { seller, netuid }) + RuntimeEvent::SubtensorModule(Event::SubnetSaleOfferCancelled { + id: 0, + seller_coldkey: seller, + netuid + }) ); }); } From 36752d166d118eca6dd8169c0392e396d44ea8ce Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Sun, 5 Jul 2026 18:27:22 +0100 Subject: [PATCH 11/63] Add missing benchmark for extension --- pallets/subtensor/src/benchmarks.rs | 20 +++++++++++++++++++ .../subtensor/src/guards/check_subnet_sale.rs | 20 +++++++++++++++++-- pallets/subtensor/src/weights.rs | 17 ++++++++++++++++ 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/pallets/subtensor/src/benchmarks.rs b/pallets/subtensor/src/benchmarks.rs index 59fd41a7a9..73cb522b4f 100644 --- a/pallets/subtensor/src/benchmarks.rs +++ b/pallets/subtensor/src/benchmarks.rs @@ -2415,6 +2415,26 @@ mod pallet_benchmarks { } } + #[benchmark] + fn check_subnet_sale_extension() { + let who: T::AccountId = account("who", 0, 1); + let hotkey: T::AccountId = account("hotkey", 0, 1); + let call = runtime_call::(Call::::register_network { hotkey }); + + // Freeze `who` as an owner hotkey only. This exercises the worst case: the coldkey + // lookup misses (so the check does not return early) and the hotkey lookup hits, so + // both storage reads are performed. + SubnetSaleFrozenHotkeys::::insert(&who, ()); + + #[block] + { + assert_eq!( + CheckSubnetSale::::check(&who, &call), + Err(Error::::HotkeyLockedDuringSale) + ); + } + } + #[benchmark] fn check_weights_extension() { let netuid = NetUid::from(1); diff --git a/pallets/subtensor/src/guards/check_subnet_sale.rs b/pallets/subtensor/src/guards/check_subnet_sale.rs index bea1a6b8c2..6c9df27d32 100644 --- a/pallets/subtensor/src/guards/check_subnet_sale.rs +++ b/pallets/subtensor/src/guards/check_subnet_sale.rs @@ -1,4 +1,5 @@ use super::{CallOf, DispatchableOriginOf}; +use crate::weights::WeightInfo; use crate::{Call, Config, Error, SubnetSaleFrozenColdkeys, SubnetSaleFrozenHotkeys}; use frame_support::{ dispatch::{DispatchErrorWithPostInfo, DispatchExtension, DispatchInfo, PostDispatchInfo}, @@ -57,7 +58,7 @@ where type Pre = (); fn weight(_call: &CallOf) -> Weight { - T::DbWeight::get().reads(2) + ::WeightInfo::check_subnet_sale_extension() } fn pre_dispatch( @@ -75,7 +76,10 @@ where #[cfg(test)] #[allow(clippy::expect_used, clippy::unwrap_used)] mod tests { - use crate::{Error, SubnetSaleFrozenColdkeys, SubnetSaleFrozenHotkeys, tests::mock::*}; + use crate::{ + Error, SubnetSaleFrozenColdkeys, SubnetSaleFrozenHotkeys, tests::mock::*, + weights::WeightInfo as _, + }; use frame_support::{ assert_noop, assert_ok, dispatch::{DispatchErrorWithPostInfo, DispatchExtension}, @@ -209,6 +213,18 @@ mod tests { }); } + #[test] + fn weight_is_constant_across_calls_because_freeze_can_block_any_signed_call() { + let expected = ::WeightInfo::check_subnet_sale_extension(); + + for call in [remark_call(), cancel_call()] { + assert_eq!( + >::weight(&call), + expected + ); + } + } + #[test] fn proxied_call_from_sale_frozen_coldkey_is_blocked() { new_test_ext(1).execute_with(|| { diff --git a/pallets/subtensor/src/weights.rs b/pallets/subtensor/src/weights.rs index c48ed0005e..aefd0ca3b0 100644 --- a/pallets/subtensor/src/weights.rs +++ b/pallets/subtensor/src/weights.rs @@ -99,6 +99,7 @@ pub trait WeightInfo { fn set_activity_cutoff_factor() -> Weight; fn trigger_epoch() -> Weight; fn check_coldkey_swap_extension() -> Weight; + fn check_subnet_sale_extension() -> Weight; fn check_weights_extension() -> Weight; fn check_rate_limits_extension() -> Weight; fn check_delegate_take_extension() -> Weight; @@ -2531,6 +2532,14 @@ impl WeightInfo for SubstrateWeight { Weight::from_parts(17_353_000, 4198) .saturating_add(T::DbWeight::get().reads(2_u64)) } + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn check_subnet_sale_extension() -> Weight { + Weight::from_parts(10_000_000, 0) + .saturating_add(T::DbWeight::get().reads(2_u64)) + } /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TaoWeight` (r:1 w:0) @@ -5047,6 +5056,14 @@ impl WeightInfo for () { Weight::from_parts(17_353_000, 4198) .saturating_add(RocksDbWeight::get().reads(2_u64)) } + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + fn check_subnet_sale_extension() -> Weight { + Weight::from_parts(10_000_000, 0) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + } /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TaoWeight` (r:1 w:0) From 54a4601ff7752dcbcdc05302f2711f3d2242fd7c Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Sun, 5 Jul 2026 18:58:28 +0100 Subject: [PATCH 12/63] cargo fmt --- pallets/subtensor/src/guards/check_subnet_sale.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pallets/subtensor/src/guards/check_subnet_sale.rs b/pallets/subtensor/src/guards/check_subnet_sale.rs index 6c9df27d32..f31dde7362 100644 --- a/pallets/subtensor/src/guards/check_subnet_sale.rs +++ b/pallets/subtensor/src/guards/check_subnet_sale.rs @@ -51,8 +51,8 @@ where impl DispatchExtension<::RuntimeCall> for CheckSubnetSale where T: Config, - ::RuntimeCall: Dispatchable - + IsSubType>, + ::RuntimeCall: + Dispatchable + IsSubType>, DispatchableOriginOf: OriginTrait, { type Pre = (); From 6fe155c2b17a21b0376cc31341aa4f71016edf9b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 6 Jul 2026 10:00:04 +0000 Subject: [PATCH 13/63] auto-update benchmark weights --- pallets/commitments/src/weights.rs | 77 ++- pallets/crowdloan/src/weights.rs | 110 ++-- pallets/proxy/src/weights.rs | 254 +++++---- pallets/subtensor/src/weights.rs | 870 +++++++++++++++-------------- pallets/utility/src/weights.rs | 186 +++--- 5 files changed, 814 insertions(+), 683 deletions(-) diff --git a/pallets/commitments/src/weights.rs b/pallets/commitments/src/weights.rs index bd36d96e2b..a7818b54b9 100644 --- a/pallets/commitments/src/weights.rs +++ b/pallets/commitments/src/weights.rs @@ -1,28 +1,35 @@ //! Autogenerated weights for `pallet_commitments` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-12-08, STEPS: `2`, REPEAT: `1`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 49.1.0 +//! DATE: 2026-07-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `rustys-mbp.lan`, CPU: `` -//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("local")`, DB CACHE: `1024` +//! HOSTNAME: `runnervmkkn4f`, CPU: `AMD EPYC 9V74 80-Core Processor` +//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` // Executed Command: -// ./target/release/node-subtensor +// /home/runner/work/subtensor/subtensor/target/production/node-subtensor // benchmark // pallet -// --chain=local -// --execution=wasm +// --runtime=/home/runner/work/subtensor/subtensor/target/production/wbuild/node-subtensor-runtime/node_subtensor_runtime.compact.compressed.wasm +// --genesis-builder=runtime +// --genesis-builder-preset=benchmark // --wasm-execution=compiled // --pallet=pallet_commitments // --extrinsic=* -// --output=pallets/commitments/src/weights.rs -// --template=./.maintain/frame-weight-template.hbs +// --steps=50 +// --repeat=20 +// --no-storage-info +// --no-min-squares +// --no-median-slopes +// --output=/tmp/tmp.V8xURZVxTO +// --template=/home/runner/work/subtensor/subtensor/.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] #![allow(missing_docs)] +#![allow(dead_code)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; use core::marker::PhantomData; @@ -36,26 +43,70 @@ pub trait WeightInfo { /// Weights for `pallet_commitments` using the Substrate node and recommended hardware. pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { + /// Storage: `Commitments::UsedSpaceOf` (r:1 w:1) + /// Proof: `Commitments::UsedSpaceOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetEpochIndex` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetEpochIndex` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Commitments::MaxSpace` (r:1 w:0) + /// Proof: `Commitments::MaxSpace` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Commitments::CommitmentOf` (r:1 w:1) + /// Proof: `Commitments::CommitmentOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Commitments::TimelockedIndex` (r:1 w:1) + /// Proof: `Commitments::TimelockedIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Commitments::LastCommitment` (r:0 w:1) + /// Proof: `Commitments::LastCommitment` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_commitment() -> Weight { - Weight::from_parts(33_480_000, 0) + // Proof Size summary in bytes: + // Measured: `504` + // Estimated: `3969` + // Minimum execution time: 19_540_000 picoseconds. + Weight::from_parts(20_150_000, 3969) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } + /// Storage: `Commitments::MaxSpace` (r:0 w:1) + /// Proof: `Commitments::MaxSpace` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_max_space() -> Weight { - Weight::from_parts(2_856_000, 0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_372_000 picoseconds. + Weight::from_parts(1_692_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } } // For backwards compatibility and tests. impl WeightInfo for () { + /// Storage: `Commitments::UsedSpaceOf` (r:1 w:1) + /// Proof: `Commitments::UsedSpaceOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetEpochIndex` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetEpochIndex` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Commitments::MaxSpace` (r:1 w:0) + /// Proof: `Commitments::MaxSpace` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Commitments::CommitmentOf` (r:1 w:1) + /// Proof: `Commitments::CommitmentOf` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Commitments::TimelockedIndex` (r:1 w:1) + /// Proof: `Commitments::TimelockedIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `Commitments::LastCommitment` (r:0 w:1) + /// Proof: `Commitments::LastCommitment` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_commitment() -> Weight { - Weight::from_parts(33_480_000, 0) + // Proof Size summary in bytes: + // Measured: `504` + // Estimated: `3969` + // Minimum execution time: 19_540_000 picoseconds. + Weight::from_parts(20_150_000, 3969) .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } + /// Storage: `Commitments::MaxSpace` (r:0 w:1) + /// Proof: `Commitments::MaxSpace` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_max_space() -> Weight { - Weight::from_parts(2_856_000, 0) + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 1_372_000 picoseconds. + Weight::from_parts(1_692_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } } diff --git a/pallets/crowdloan/src/weights.rs b/pallets/crowdloan/src/weights.rs index 6ec23b2c23..026e0acb22 100644 --- a/pallets/crowdloan/src/weights.rs +++ b/pallets/crowdloan/src/weights.rs @@ -2,9 +2,9 @@ //! Autogenerated weights for `pallet_crowdloan` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 49.1.0 -//! DATE: 2026-06-30, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-07-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runnervmmklqx`, CPU: `AMD EPYC 9V74 80-Core Processor` +//! HOSTNAME: `runnervmkkn4f`, CPU: `AMD EPYC 9V74 80-Core Processor` //! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` // Executed Command: @@ -22,7 +22,7 @@ // --no-storage-info // --no-min-squares // --no-median-slopes -// --output=/tmp/tmp.CWtPZcdN9i +// --output=/tmp/tmp.HXC5x2AL6y // --template=/home/runner/work/subtensor/subtensor/.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] @@ -63,8 +63,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `119` // Estimated: `6148` - // Minimum execution time: 59_888_000 picoseconds. - Weight::from_parts(61_110_000, 6148) + // Minimum execution time: 62_814_000 picoseconds. + Weight::from_parts(65_689_000, 6148) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -80,8 +80,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `448` // Estimated: `6148` - // Minimum execution time: 65_807_000 picoseconds. - Weight::from_parts(66_819_000, 6148) + // Minimum execution time: 68_563_000 picoseconds. + Weight::from_parts(71_076_000, 6148) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -95,8 +95,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `408` // Estimated: `6148` - // Minimum execution time: 59_447_000 picoseconds. - Weight::from_parts(61_220_000, 6148) + // Minimum execution time: 61_532_000 picoseconds. + Weight::from_parts(64_286_000, 6148) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -110,13 +110,17 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn finalize() -> Weight { // Proof Size summary in bytes: - // Measured: `1181` + // Measured: `1216` // Estimated: `4197809` - // Minimum execution time: 32_548_000 picoseconds. - Weight::from_parts(34_110_000, 4197809) - .saturating_add(T::DbWeight::get().reads(5_u64)) + // Minimum execution time: 31_887_000 picoseconds. + Weight::from_parts(33_050_000, 4197809) + .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `Crowdloan::Crowdloans` (r:1 w:1) @@ -130,10 +134,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `324 + k * (46 ±0)` // Estimated: `3747 + k * (2579 ±0)` - // Minimum execution time: 109_320_000 picoseconds. - Weight::from_parts(110_392_000, 3747) - // Standard Error: 94_672 - .saturating_add(Weight::from_parts(39_822_919, 0).saturating_mul(k.into())) + // Minimum execution time: 109_925_000 picoseconds. + Weight::from_parts(115_633_000, 3747) + // Standard Error: 101_663 + .saturating_add(Weight::from_parts(43_172_223, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(k.into()))) @@ -151,8 +155,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `370` // Estimated: `6148` - // Minimum execution time: 69_442_000 picoseconds. - Weight::from_parts(70_724_000, 6148) + // Minimum execution time: 69_645_000 picoseconds. + Weight::from_parts(71_247_000, 6148) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -164,8 +168,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `229` // Estimated: `3747` - // Minimum execution time: 13_049_000 picoseconds. - Weight::from_parts(13_510_000, 3747) + // Minimum execution time: 11_467_000 picoseconds. + Weight::from_parts(11_828_000, 3747) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -175,8 +179,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `229` // Estimated: `3747` - // Minimum execution time: 11_557_000 picoseconds. - Weight::from_parts(12_318_000, 3747) + // Minimum execution time: 10_125_000 picoseconds. + Weight::from_parts(10_586_000, 3747) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -186,8 +190,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `229` // Estimated: `3747` - // Minimum execution time: 11_386_000 picoseconds. - Weight::from_parts(11_797_000, 3747) + // Minimum execution time: 9_905_000 picoseconds. + Weight::from_parts(10_165_000, 3747) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -201,8 +205,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `293` // Estimated: `3747` - // Minimum execution time: 15_924_000 picoseconds. - Weight::from_parts(16_805_000, 3747) + // Minimum execution time: 13_941_000 picoseconds. + Weight::from_parts(14_311_000, 3747) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -222,8 +226,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `119` // Estimated: `6148` - // Minimum execution time: 59_888_000 picoseconds. - Weight::from_parts(61_110_000, 6148) + // Minimum execution time: 62_814_000 picoseconds. + Weight::from_parts(65_689_000, 6148) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(5_u64)) } @@ -239,8 +243,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `448` // Estimated: `6148` - // Minimum execution time: 65_807_000 picoseconds. - Weight::from_parts(66_819_000, 6148) + // Minimum execution time: 68_563_000 picoseconds. + Weight::from_parts(71_076_000, 6148) .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } @@ -254,8 +258,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `408` // Estimated: `6148` - // Minimum execution time: 59_447_000 picoseconds. - Weight::from_parts(61_220_000, 6148) + // Minimum execution time: 61_532_000 picoseconds. + Weight::from_parts(64_286_000, 6148) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } @@ -269,13 +273,17 @@ impl WeightInfo for () { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn finalize() -> Weight { // Proof Size summary in bytes: - // Measured: `1181` + // Measured: `1216` // Estimated: `4197809` - // Minimum execution time: 32_548_000 picoseconds. - Weight::from_parts(34_110_000, 4197809) - .saturating_add(RocksDbWeight::get().reads(5_u64)) + // Minimum execution time: 31_887_000 picoseconds. + Weight::from_parts(33_050_000, 4197809) + .saturating_add(RocksDbWeight::get().reads(7_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } /// Storage: `Crowdloan::Crowdloans` (r:1 w:1) @@ -289,10 +297,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `324 + k * (46 ±0)` // Estimated: `3747 + k * (2579 ±0)` - // Minimum execution time: 109_320_000 picoseconds. - Weight::from_parts(110_392_000, 3747) - // Standard Error: 94_672 - .saturating_add(Weight::from_parts(39_822_919, 0).saturating_mul(k.into())) + // Minimum execution time: 109_925_000 picoseconds. + Weight::from_parts(115_633_000, 3747) + // Standard Error: 101_663 + .saturating_add(Weight::from_parts(43_172_223, 0).saturating_mul(k.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().reads((2_u64).saturating_mul(k.into()))) .saturating_add(RocksDbWeight::get().writes((2_u64).saturating_mul(k.into()))) @@ -310,8 +318,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `370` // Estimated: `6148` - // Minimum execution time: 69_442_000 picoseconds. - Weight::from_parts(70_724_000, 6148) + // Minimum execution time: 69_645_000 picoseconds. + Weight::from_parts(71_247_000, 6148) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(5_u64)) } @@ -323,8 +331,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `229` // Estimated: `3747` - // Minimum execution time: 13_049_000 picoseconds. - Weight::from_parts(13_510_000, 3747) + // Minimum execution time: 11_467_000 picoseconds. + Weight::from_parts(11_828_000, 3747) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -334,8 +342,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `229` // Estimated: `3747` - // Minimum execution time: 11_557_000 picoseconds. - Weight::from_parts(12_318_000, 3747) + // Minimum execution time: 10_125_000 picoseconds. + Weight::from_parts(10_586_000, 3747) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -345,8 +353,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `229` // Estimated: `3747` - // Minimum execution time: 11_386_000 picoseconds. - Weight::from_parts(11_797_000, 3747) + // Minimum execution time: 9_905_000 picoseconds. + Weight::from_parts(10_165_000, 3747) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -360,8 +368,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `293` // Estimated: `3747` - // Minimum execution time: 15_924_000 picoseconds. - Weight::from_parts(16_805_000, 3747) + // Minimum execution time: 13_941_000 picoseconds. + Weight::from_parts(14_311_000, 3747) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } diff --git a/pallets/proxy/src/weights.rs b/pallets/proxy/src/weights.rs index d965e56124..7037b2e1d5 100644 --- a/pallets/proxy/src/weights.rs +++ b/pallets/proxy/src/weights.rs @@ -2,9 +2,9 @@ //! Autogenerated weights for `pallet_subtensor_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 49.1.0 -//! DATE: 2026-06-30, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-07-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runnervmmklqx`, CPU: `AMD EPYC 9V74 80-Core Processor` +//! HOSTNAME: `runnervmkkn4f`, CPU: `AMD EPYC 9V74 80-Core Processor` //! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` // Executed Command: @@ -22,7 +22,7 @@ // --no-storage-info // --no-min-squares // --no-median-slopes -// --output=/tmp/tmp.WnI3UJn7lR +// --output=/tmp/tmp.Zb5qHFflh2 // --template=/home/runner/work/subtensor/subtensor/.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] @@ -59,18 +59,22 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Proxy::LastCallResult` (r:0 w:1) /// Proof: `Proxy::LastCallResult` (`max_values`: None, `max_size`: Some(47), added: 2522, mode: `MaxEncodedLen`) /// The range of component `p` is `[1, 19]`. fn proxy(p: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `637 + p * (37 ±0)` + // Measured: `672 + p * (37 ±0)` // Estimated: `4254 + p * (37 ±0)` - // Minimum execution time: 23_404_000 picoseconds. - Weight::from_parts(24_775_699, 4254) - // Standard Error: 3_659 - .saturating_add(Weight::from_parts(36_370, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) + // Minimum execution time: 21_933_000 picoseconds. + Weight::from_parts(23_109_545, 4254) + // Standard Error: 2_555 + .saturating_add(Weight::from_parts(53_255, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) .saturating_add(Weight::from_parts(0, 37).saturating_mul(p.into())) } @@ -84,21 +88,25 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Proxy::LastCallResult` (r:0 w:1) /// Proof: `Proxy::LastCallResult` (`max_values`: None, `max_size`: Some(47), added: 2522, mode: `MaxEncodedLen`) /// The range of component `a` is `[0, 74]`. /// The range of component `p` is `[1, 19]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `894 + a * (68 ±0) + p * (37 ±0)` + // Measured: `929 + a * (68 ±0) + p * (37 ±0)` // Estimated: `8615 + a * (68 ±0) + p * (37 ±0)` - // Minimum execution time: 48_461_000 picoseconds. - Weight::from_parts(50_907_754, 8615) - // Standard Error: 1_796 - .saturating_add(Weight::from_parts(193_963, 0).saturating_mul(a.into())) - // Standard Error: 7_193 - .saturating_add(Weight::from_parts(31_645, 0).saturating_mul(p.into())) - .saturating_add(T::DbWeight::get().reads(5_u64)) + // Minimum execution time: 41_723_000 picoseconds. + Weight::from_parts(42_844_144, 8615) + // Standard Error: 1_185 + .saturating_add(Weight::from_parts(180_290, 0).saturating_mul(a.into())) + // Standard Error: 4_746 + .saturating_add(Weight::from_parts(51_414, 0).saturating_mul(p.into())) + .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 68).saturating_mul(a.into())) .saturating_add(Weight::from_parts(0, 37).saturating_mul(p.into())) @@ -113,12 +121,12 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `299 + a * (68 ±0)` // Estimated: `8615` - // Minimum execution time: 23_364_000 picoseconds. - Weight::from_parts(23_739_396, 8615) - // Standard Error: 1_621 - .saturating_add(Weight::from_parts(202_628, 0).saturating_mul(a.into())) - // Standard Error: 6_495 - .saturating_add(Weight::from_parts(56_059, 0).saturating_mul(p.into())) + // Minimum execution time: 18_829_000 picoseconds. + Weight::from_parts(18_969_169, 8615) + // Standard Error: 713 + .saturating_add(Weight::from_parts(155_237, 0).saturating_mul(a.into())) + // Standard Error: 2_857 + .saturating_add(Weight::from_parts(32_498, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -132,12 +140,12 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `299 + a * (68 ±0)` // Estimated: `8615` - // Minimum execution time: 23_735_000 picoseconds. - Weight::from_parts(24_366_666, 8615) - // Standard Error: 1_017 - .saturating_add(Weight::from_parts(180_283, 0).saturating_mul(a.into())) - // Standard Error: 4_075 - .saturating_add(Weight::from_parts(57_043, 0).saturating_mul(p.into())) + // Minimum execution time: 18_417_000 picoseconds. + Weight::from_parts(19_037_464, 8615) + // Standard Error: 824 + .saturating_add(Weight::from_parts(155_168, 0).saturating_mul(a.into())) + // Standard Error: 3_302 + .saturating_add(Weight::from_parts(23_652, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -153,12 +161,12 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `308 + a * (68 ±0) + p * (37 ±0)` // Estimated: `8615` - // Minimum execution time: 30_245_000 picoseconds. - Weight::from_parts(30_956_665, 8615) - // Standard Error: 1_239 - .saturating_add(Weight::from_parts(208_387, 0).saturating_mul(a.into())) - // Standard Error: 4_964 - .saturating_add(Weight::from_parts(40_268, 0).saturating_mul(p.into())) + // Minimum execution time: 24_947_000 picoseconds. + Weight::from_parts(25_339_810, 8615) + // Standard Error: 833 + .saturating_add(Weight::from_parts(151_946, 0).saturating_mul(a.into())) + // Standard Error: 3_336 + .saturating_add(Weight::from_parts(39_405, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -169,10 +177,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `119 + p * (37 ±0)` // Estimated: `4254` - // Minimum execution time: 22_062_000 picoseconds. - Weight::from_parts(22_896_760, 4254) - // Standard Error: 1_967 - .saturating_add(Weight::from_parts(62_251, 0).saturating_mul(p.into())) + // Minimum execution time: 18_037_000 picoseconds. + Weight::from_parts(18_781_543, 4254) + // Standard Error: 1_718 + .saturating_add(Weight::from_parts(51_943, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -185,10 +193,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `119 + p * (37 ±0)` // Estimated: `4254` - // Minimum execution time: 23_534_000 picoseconds. - Weight::from_parts(24_759_349, 4254) - // Standard Error: 2_839 - .saturating_add(Weight::from_parts(54_772, 0).saturating_mul(p.into())) + // Minimum execution time: 19_629_000 picoseconds. + Weight::from_parts(20_403_643, 4254) + // Standard Error: 1_794 + .saturating_add(Weight::from_parts(50_582, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -199,10 +207,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `119 + p * (37 ±0)` // Estimated: `4254` - // Minimum execution time: 23_394_000 picoseconds. - Weight::from_parts(24_696_087, 4254) - // Standard Error: 3_088 - .saturating_add(Weight::from_parts(16_241, 0).saturating_mul(p.into())) + // Minimum execution time: 19_119_000 picoseconds. + Weight::from_parts(19_905_021, 4254) + // Standard Error: 2_417 + .saturating_add(Weight::from_parts(31_973, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -213,10 +221,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `139` // Estimated: `4254` - // Minimum execution time: 23_624_000 picoseconds. - Weight::from_parts(24_522_616, 4254) - // Standard Error: 2_148 - .saturating_add(Weight::from_parts(26_274, 0).saturating_mul(p.into())) + // Minimum execution time: 19_189_000 picoseconds. + Weight::from_parts(20_060_544, 4254) + // Standard Error: 1_745 + .saturating_add(Weight::from_parts(23_459, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -227,10 +235,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `156 + p * (37 ±0)` // Estimated: `4254` - // Minimum execution time: 22_533_000 picoseconds. - Weight::from_parts(23_190_575, 4254) - // Standard Error: 5_507 - .saturating_add(Weight::from_parts(140_005, 0).saturating_mul(p.into())) + // Minimum execution time: 18_377_000 picoseconds. + Weight::from_parts(19_139_748, 4254) + // Standard Error: 1_725 + .saturating_add(Weight::from_parts(35_329, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -244,8 +252,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `412` // Estimated: `8615` - // Minimum execution time: 43_273_000 picoseconds. - Weight::from_parts(44_405_000, 8615) + // Minimum execution time: 34_131_000 picoseconds. + Weight::from_parts(34_913_000, 8615) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -258,10 +266,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `119 + p * (37 ±0)` // Estimated: `4254` - // Minimum execution time: 12_107_000 picoseconds. - Weight::from_parts(12_805_973, 4254) - // Standard Error: 1_732 - .saturating_add(Weight::from_parts(34_485, 0).saturating_mul(p.into())) + // Minimum execution time: 9_234_000 picoseconds. + Weight::from_parts(9_842_320, 4254) + // Standard Error: 1_229 + .saturating_add(Weight::from_parts(27_364, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -275,18 +283,22 @@ impl WeightInfo for () { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Proxy::LastCallResult` (r:0 w:1) /// Proof: `Proxy::LastCallResult` (`max_values`: None, `max_size`: Some(47), added: 2522, mode: `MaxEncodedLen`) /// The range of component `p` is `[1, 19]`. fn proxy(p: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `637 + p * (37 ±0)` + // Measured: `672 + p * (37 ±0)` // Estimated: `4254 + p * (37 ±0)` - // Minimum execution time: 23_404_000 picoseconds. - Weight::from_parts(24_775_699, 4254) - // Standard Error: 3_659 - .saturating_add(Weight::from_parts(36_370, 0).saturating_mul(p.into())) - .saturating_add(RocksDbWeight::get().reads(3_u64)) + // Minimum execution time: 21_933_000 picoseconds. + Weight::from_parts(23_109_545, 4254) + // Standard Error: 2_555 + .saturating_add(Weight::from_parts(53_255, 0).saturating_mul(p.into())) + .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) .saturating_add(Weight::from_parts(0, 37).saturating_mul(p.into())) } @@ -300,21 +312,25 @@ impl WeightInfo for () { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Proxy::LastCallResult` (r:0 w:1) /// Proof: `Proxy::LastCallResult` (`max_values`: None, `max_size`: Some(47), added: 2522, mode: `MaxEncodedLen`) /// The range of component `a` is `[0, 74]`. /// The range of component `p` is `[1, 19]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `894 + a * (68 ±0) + p * (37 ±0)` + // Measured: `929 + a * (68 ±0) + p * (37 ±0)` // Estimated: `8615 + a * (68 ±0) + p * (37 ±0)` - // Minimum execution time: 48_461_000 picoseconds. - Weight::from_parts(50_907_754, 8615) - // Standard Error: 1_796 - .saturating_add(Weight::from_parts(193_963, 0).saturating_mul(a.into())) - // Standard Error: 7_193 - .saturating_add(Weight::from_parts(31_645, 0).saturating_mul(p.into())) - .saturating_add(RocksDbWeight::get().reads(5_u64)) + // Minimum execution time: 41_723_000 picoseconds. + Weight::from_parts(42_844_144, 8615) + // Standard Error: 1_185 + .saturating_add(Weight::from_parts(180_290, 0).saturating_mul(a.into())) + // Standard Error: 4_746 + .saturating_add(Weight::from_parts(51_414, 0).saturating_mul(p.into())) + .saturating_add(RocksDbWeight::get().reads(7_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 68).saturating_mul(a.into())) .saturating_add(Weight::from_parts(0, 37).saturating_mul(p.into())) @@ -329,12 +345,12 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `299 + a * (68 ±0)` // Estimated: `8615` - // Minimum execution time: 23_364_000 picoseconds. - Weight::from_parts(23_739_396, 8615) - // Standard Error: 1_621 - .saturating_add(Weight::from_parts(202_628, 0).saturating_mul(a.into())) - // Standard Error: 6_495 - .saturating_add(Weight::from_parts(56_059, 0).saturating_mul(p.into())) + // Minimum execution time: 18_829_000 picoseconds. + Weight::from_parts(18_969_169, 8615) + // Standard Error: 713 + .saturating_add(Weight::from_parts(155_237, 0).saturating_mul(a.into())) + // Standard Error: 2_857 + .saturating_add(Weight::from_parts(32_498, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -348,12 +364,12 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `299 + a * (68 ±0)` // Estimated: `8615` - // Minimum execution time: 23_735_000 picoseconds. - Weight::from_parts(24_366_666, 8615) - // Standard Error: 1_017 - .saturating_add(Weight::from_parts(180_283, 0).saturating_mul(a.into())) - // Standard Error: 4_075 - .saturating_add(Weight::from_parts(57_043, 0).saturating_mul(p.into())) + // Minimum execution time: 18_417_000 picoseconds. + Weight::from_parts(19_037_464, 8615) + // Standard Error: 824 + .saturating_add(Weight::from_parts(155_168, 0).saturating_mul(a.into())) + // Standard Error: 3_302 + .saturating_add(Weight::from_parts(23_652, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -369,12 +385,12 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `308 + a * (68 ±0) + p * (37 ±0)` // Estimated: `8615` - // Minimum execution time: 30_245_000 picoseconds. - Weight::from_parts(30_956_665, 8615) - // Standard Error: 1_239 - .saturating_add(Weight::from_parts(208_387, 0).saturating_mul(a.into())) - // Standard Error: 4_964 - .saturating_add(Weight::from_parts(40_268, 0).saturating_mul(p.into())) + // Minimum execution time: 24_947_000 picoseconds. + Weight::from_parts(25_339_810, 8615) + // Standard Error: 833 + .saturating_add(Weight::from_parts(151_946, 0).saturating_mul(a.into())) + // Standard Error: 3_336 + .saturating_add(Weight::from_parts(39_405, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -385,10 +401,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `119 + p * (37 ±0)` // Estimated: `4254` - // Minimum execution time: 22_062_000 picoseconds. - Weight::from_parts(22_896_760, 4254) - // Standard Error: 1_967 - .saturating_add(Weight::from_parts(62_251, 0).saturating_mul(p.into())) + // Minimum execution time: 18_037_000 picoseconds. + Weight::from_parts(18_781_543, 4254) + // Standard Error: 1_718 + .saturating_add(Weight::from_parts(51_943, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -401,10 +417,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `119 + p * (37 ±0)` // Estimated: `4254` - // Minimum execution time: 23_534_000 picoseconds. - Weight::from_parts(24_759_349, 4254) - // Standard Error: 2_839 - .saturating_add(Weight::from_parts(54_772, 0).saturating_mul(p.into())) + // Minimum execution time: 19_629_000 picoseconds. + Weight::from_parts(20_403_643, 4254) + // Standard Error: 1_794 + .saturating_add(Weight::from_parts(50_582, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -415,10 +431,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `119 + p * (37 ±0)` // Estimated: `4254` - // Minimum execution time: 23_394_000 picoseconds. - Weight::from_parts(24_696_087, 4254) - // Standard Error: 3_088 - .saturating_add(Weight::from_parts(16_241, 0).saturating_mul(p.into())) + // Minimum execution time: 19_119_000 picoseconds. + Weight::from_parts(19_905_021, 4254) + // Standard Error: 2_417 + .saturating_add(Weight::from_parts(31_973, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -429,10 +445,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `139` // Estimated: `4254` - // Minimum execution time: 23_624_000 picoseconds. - Weight::from_parts(24_522_616, 4254) - // Standard Error: 2_148 - .saturating_add(Weight::from_parts(26_274, 0).saturating_mul(p.into())) + // Minimum execution time: 19_189_000 picoseconds. + Weight::from_parts(20_060_544, 4254) + // Standard Error: 1_745 + .saturating_add(Weight::from_parts(23_459, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -443,10 +459,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `156 + p * (37 ±0)` // Estimated: `4254` - // Minimum execution time: 22_533_000 picoseconds. - Weight::from_parts(23_190_575, 4254) - // Standard Error: 5_507 - .saturating_add(Weight::from_parts(140_005, 0).saturating_mul(p.into())) + // Minimum execution time: 18_377_000 picoseconds. + Weight::from_parts(19_139_748, 4254) + // Standard Error: 1_725 + .saturating_add(Weight::from_parts(35_329, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -460,8 +476,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `412` // Estimated: `8615` - // Minimum execution time: 43_273_000 picoseconds. - Weight::from_parts(44_405_000, 8615) + // Minimum execution time: 34_131_000 picoseconds. + Weight::from_parts(34_913_000, 8615) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } @@ -474,10 +490,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `119 + p * (37 ±0)` // Estimated: `4254` - // Minimum execution time: 12_107_000 picoseconds. - Weight::from_parts(12_805_973, 4254) - // Standard Error: 1_732 - .saturating_add(Weight::from_parts(34_485, 0).saturating_mul(p.into())) + // Minimum execution time: 9_234_000 picoseconds. + Weight::from_parts(9_842_320, 4254) + // Standard Error: 1_229 + .saturating_add(Weight::from_parts(27_364, 0).saturating_mul(p.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } diff --git a/pallets/subtensor/src/weights.rs b/pallets/subtensor/src/weights.rs index aefd0ca3b0..c2b3f835cc 100644 --- a/pallets/subtensor/src/weights.rs +++ b/pallets/subtensor/src/weights.rs @@ -2,9 +2,9 @@ //! Autogenerated weights for `pallet_subtensor` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 49.1.0 -//! DATE: 2026-06-24, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-07-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runnervm7b5n9`, CPU: `AMD EPYC 7763 64-Core Processor` +//! HOSTNAME: `runnervmkkn4f`, CPU: `AMD EPYC 9V74 80-Core Processor` //! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` // Executed Command: @@ -22,7 +22,7 @@ // --no-storage-info // --no-min-squares // --no-median-slopes -// --output=/tmp/tmp.gIR6lC6qZk +// --output=/tmp/tmp.VFhyH7CLFx // --template=/home/runner/work/subtensor/subtensor/.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] @@ -134,12 +134,12 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Swap::PalSwapInitialized` (r:1 w:1) - /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::FeeRate` (r:1 w:0) /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) + /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::PalSwapInitialized` (r:1 w:1) + /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::SubnetAlphaOut` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaOut` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TotalStake` (r:1 w:1) @@ -188,8 +188,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1865` // Estimated: `6148` - // Minimum execution time: 328_388_000 picoseconds. - Weight::from_parts(330_502_000, 6148) + // Minimum execution time: 279_829_000 picoseconds. + Weight::from_parts(285_348_000, 6148) .saturating_add(T::DbWeight::get().reads(34_u64)) .saturating_add(T::DbWeight::get().writes(29_u64)) } @@ -231,27 +231,27 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `188820` // Estimated: `10327410` - // Minimum execution time: 15_066_222_000 picoseconds. - Weight::from_parts(15_359_235_000, 10327410) + // Minimum execution time: 13_102_605_000 picoseconds. + Weight::from_parts(13_309_565_000, 10327410) .saturating_add(T::DbWeight::get().reads(4112_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } + /// Storage: `SubtensorModule::SubnetMechanism` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubtokenEnabled` (r:1 w:0) /// Proof: `SubtensorModule::SubtokenEnabled` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetMechanism` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `System::Account` (r:3 w:3) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(104), added: 2579, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::Owner` (r:1 w:0) @@ -302,8 +302,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2226` // Estimated: `8727` - // Minimum execution time: 630_738_000 picoseconds. - Weight::from_parts(657_709_000, 8727) + // Minimum execution time: 562_393_000 picoseconds. + Weight::from_parts(574_141_000, 8727) .saturating_add(T::DbWeight::get().reads(32_u64)) .saturating_add(T::DbWeight::get().writes(16_u64)) } @@ -317,8 +317,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `713` // Estimated: `4178` - // Minimum execution time: 29_935_000 picoseconds. - Weight::from_parts(31_428_000, 4178) + // Minimum execution time: 22_764_000 picoseconds. + Weight::from_parts(23_735_000, 4178) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -332,8 +332,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `812` // Estimated: `4277` - // Minimum execution time: 28_453_000 picoseconds. - Weight::from_parts(29_284_000, 4277) + // Minimum execution time: 21_282_000 picoseconds. + Weight::from_parts(22_274_000, 4277) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -361,12 +361,12 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Swap::PalSwapInitialized` (r:1 w:1) - /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::FeeRate` (r:1 w:0) /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) + /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::PalSwapInitialized` (r:1 w:1) + /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::SubnetAlphaOut` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaOut` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TotalStake` (r:1 w:1) @@ -415,8 +415,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1798` // Estimated: `6148` - // Minimum execution time: 327_477_000 picoseconds. - Weight::from_parts(331_344_000, 6148) + // Minimum execution time: 279_579_000 picoseconds. + Weight::from_parts(283_735_000, 6148) .saturating_add(T::DbWeight::get().reads(34_u64)) .saturating_add(T::DbWeight::get().writes(29_u64)) } @@ -468,8 +468,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1516` // Estimated: `4981` - // Minimum execution time: 100_676_000 picoseconds. - Weight::from_parts(103_852_000, 4981) + // Minimum execution time: 80_801_000 picoseconds. + Weight::from_parts(82_544_000, 4981) .saturating_add(T::DbWeight::get().reads(19_u64)) .saturating_add(T::DbWeight::get().writes(16_u64)) } @@ -587,8 +587,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1532` // Estimated: `9947` - // Minimum execution time: 267_616_000 picoseconds. - Weight::from_parts(272_414_000, 9947) + // Minimum execution time: 218_047_000 picoseconds. + Weight::from_parts(221_943_000, 9947) .saturating_add(T::DbWeight::get().reads(39_u64)) .saturating_add(T::DbWeight::get().writes(48_u64)) } @@ -622,8 +622,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1249` // Estimated: `4714` - // Minimum execution time: 67_896_000 picoseconds. - Weight::from_parts(69_409_000, 4714) + // Minimum execution time: 53_150_000 picoseconds. + Weight::from_parts(54_702_000, 4714) .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -669,8 +669,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1650` // Estimated: `7590` - // Minimum execution time: 109_312_000 picoseconds. - Weight::from_parts(110_735_000, 7590) + // Minimum execution time: 86_970_000 picoseconds. + Weight::from_parts(89_384_000, 7590) .saturating_add(T::DbWeight::get().reads(19_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -680,8 +680,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_200_000 picoseconds. - Weight::from_parts(5_510_000, 0) + // Minimum execution time: 3_265_000 picoseconds. + Weight::from_parts(3_605_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `SubtensorModule::Owner` (r:1 w:0) @@ -702,8 +702,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1033` // Estimated: `4498` - // Minimum execution time: 52_177_000 picoseconds. - Weight::from_parts(53_178_000, 4498) + // Minimum execution time: 40_741_000 picoseconds. + Weight::from_parts(42_043_000, 4498) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -719,8 +719,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `694` // Estimated: `4159` - // Minimum execution time: 46_146_000 picoseconds. - Weight::from_parts(47_278_000, 4159) + // Minimum execution time: 34_632_000 picoseconds. + Weight::from_parts(35_984_000, 4159) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -732,6 +732,8 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::Owner` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::IdentitiesV2` (r:2 w:0) /// Proof: `SubtensorModule::IdentitiesV2` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::AccountFlags` (r:2 w:2) + /// Proof: `SubtensorModule::AccountFlags` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:3 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetOwner` (r:2 w:0) @@ -758,22 +760,18 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::MaturityRate` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Lock` (r:2 w:0) /// Proof: `SubtensorModule::Lock` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::AccountFlags` (r:1 w:0) - /// Proof: `SubtensorModule::AccountFlags` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::DecayingLock` (r:1 w:0) /// Proof: `SubtensorModule::DecayingLock` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `System::Account` (r:2 w:2) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(104), added: 2579, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::LastRateLimitedBlock` (r:0 w:1) - /// Proof: `SubtensorModule::LastRateLimitedBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) fn swap_coldkey_announced() -> Weight { // Proof Size summary in bytes: // Measured: `2110` // Estimated: `13000` - // Minimum execution time: 288_044_000 picoseconds. - Weight::from_parts(290_288_000, 13000) - .saturating_add(T::DbWeight::get().reads(38_u64)) - .saturating_add(T::DbWeight::get().writes(15_u64)) + // Minimum execution time: 243_034_000 picoseconds. + Weight::from_parts(245_928_000, 13000) + .saturating_add(T::DbWeight::get().reads(39_u64)) + .saturating_add(T::DbWeight::get().writes(16_u64)) } /// Storage: `System::Account` (r:2 w:2) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(104), added: 2579, mode: `MaxEncodedLen`) @@ -785,6 +783,8 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::Owner` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::IdentitiesV2` (r:2 w:2) /// Proof: `SubtensorModule::IdentitiesV2` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::AccountFlags` (r:2 w:2) + /// Proof: `SubtensorModule::AccountFlags` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:3 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetOwner` (r:2 w:0) @@ -811,24 +811,20 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::MaturityRate` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Lock` (r:2 w:0) /// Proof: `SubtensorModule::Lock` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::AccountFlags` (r:1 w:0) - /// Proof: `SubtensorModule::AccountFlags` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::DecayingLock` (r:1 w:0) /// Proof: `SubtensorModule::DecayingLock` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:0 w:1) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::ColdkeySwapDisputes` (r:0 w:1) /// Proof: `SubtensorModule::ColdkeySwapDisputes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::LastRateLimitedBlock` (r:0 w:1) - /// Proof: `SubtensorModule::LastRateLimitedBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) fn swap_coldkey() -> Weight { // Proof Size summary in bytes: // Measured: `2166` // Estimated: `13056` - // Minimum execution time: 309_453_000 picoseconds. - Weight::from_parts(315_114_000, 13056) - .saturating_add(T::DbWeight::get().reads(38_u64)) - .saturating_add(T::DbWeight::get().writes(19_u64)) + // Minimum execution time: 261_081_000 picoseconds. + Weight::from_parts(266_279_000, 13056) + .saturating_add(T::DbWeight::get().reads(39_u64)) + .saturating_add(T::DbWeight::get().writes(20_u64)) } /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) @@ -838,8 +834,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `665` // Estimated: `4130` - // Minimum execution time: 22_261_000 picoseconds. - Weight::from_parts(22_982_000, 4130) + // Minimum execution time: 16_085_000 picoseconds. + Weight::from_parts(16_805_000, 4130) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -851,8 +847,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `613` // Estimated: `4078` - // Minimum execution time: 18_805_000 picoseconds. - Weight::from_parts(20_077_000, 4078) + // Minimum execution time: 13_180_000 picoseconds. + Weight::from_parts(13_550_000, 4078) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -864,8 +860,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_095_000 picoseconds. - Weight::from_parts(8_666_000, 0) + // Minimum execution time: 5_638_000 picoseconds. + Weight::from_parts(5_989_000, 0) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `SubtensorModule::CommitRevealWeightsEnabled` (r:1 w:0) @@ -910,8 +906,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2155` // Estimated: `8095` - // Minimum execution time: 403_027_000 picoseconds. - Weight::from_parts(424_947_000, 8095) + // Minimum execution time: 343_605_000 picoseconds. + Weight::from_parts(348_212_000, 8095) .saturating_add(T::DbWeight::get().reads(19_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -945,8 +941,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1754` // Estimated: `5219` - // Minimum execution time: 171_027_000 picoseconds. - Weight::from_parts(172_711_000, 5219) + // Minimum execution time: 140_190_000 picoseconds. + Weight::from_parts(143_025_000, 5219) .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -978,8 +974,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1754` // Estimated: `5219` - // Minimum execution time: 166_909_000 picoseconds. - Weight::from_parts(168_933_000, 5219) + // Minimum execution time: 136_234_000 picoseconds. + Weight::from_parts(138_527_000, 5219) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -999,23 +995,23 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1118` // Estimated: `4583` - // Minimum execution time: 38_882_000 picoseconds. - Weight::from_parts(39_442_000, 4583) + // Minimum execution time: 29_774_000 picoseconds. + Weight::from_parts(30_706_000, 4583) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `SubtensorModule::SubnetMechanism` (r:1 w:0) /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubtokenEnabled` (r:1 w:0) @@ -1070,8 +1066,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2226` // Estimated: `8727` - // Minimum execution time: 810_081_000 picoseconds. - Weight::from_parts(833_084_000, 8727) + // Minimum execution time: 735_733_000 picoseconds. + Weight::from_parts(751_366_000, 8727) .saturating_add(T::DbWeight::get().reads(32_u64)) .saturating_add(T::DbWeight::get().writes(16_u64)) } @@ -1107,8 +1103,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1979` // Estimated: `7919` - // Minimum execution time: 210_109_000 picoseconds. - Weight::from_parts(212_274_000, 7919) + // Minimum execution time: 176_795_000 picoseconds. + Weight::from_parts(179_890_000, 7919) .saturating_add(T::DbWeight::get().reads(19_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -1124,20 +1120,20 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::TotalHotkeyShares` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TotalHotkeySharesV2` (r:1 w:1) /// Proof: `SubtensorModule::TotalHotkeySharesV2` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::NetworksAdded` (r:3 w:0) - /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetMechanism` (r:2 w:0) /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::NetworksAdded` (r:3 w:0) + /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::Owner` (r:1 w:0) /// Proof: `SubtensorModule::Owner` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::StakingHotkeys` (r:1 w:0) @@ -1164,23 +1160,23 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2142` // Estimated: `10557` - // Minimum execution time: 539_440_000 picoseconds. - Weight::from_parts(562_672_000, 10557) + // Minimum execution time: 466_249_000 picoseconds. + Weight::from_parts(482_804_000, 10557) .saturating_add(T::DbWeight::get().reads(28_u64)) .saturating_add(T::DbWeight::get().writes(13_u64)) } /// Storage: `SubtensorModule::SubnetMechanism` (r:2 w:0) /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::NetworksAdded` (r:3 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Alpha` (r:1 w:0) @@ -1219,8 +1215,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2176` // Estimated: `10591` - // Minimum execution time: 713_632_000 picoseconds. - Weight::from_parts(740_663_000, 10591) + // Minimum execution time: 626_849_000 picoseconds. + Weight::from_parts(634_581_000, 10591) .saturating_add(T::DbWeight::get().reads(27_u64)) .saturating_add(T::DbWeight::get().writes(13_u64)) } @@ -1236,16 +1232,16 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::TotalHotkeySharesV2` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetMechanism` (r:2 w:0) /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetAlphaIn` (r:2 w:2) + /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:2 w:2) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetAlphaIn` (r:2 w:2) - /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::NetworksAdded` (r:2 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubtokenEnabled` (r:2 w:0) @@ -1292,8 +1288,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2662` // Estimated: `11077` - // Minimum execution time: 920_946_000 picoseconds. - Weight::from_parts(928_060_000, 11077) + // Minimum execution time: 797_555_000 picoseconds. + Weight::from_parts(810_304_000, 11077) .saturating_add(T::DbWeight::get().reads(47_u64)) .saturating_add(T::DbWeight::get().writes(24_u64)) } @@ -1333,8 +1329,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1988` // Estimated: `7928` - // Minimum execution time: 244_634_000 picoseconds. - Weight::from_parts(246_506_000, 7928) + // Minimum execution time: 204_657_000 picoseconds. + Weight::from_parts(206_480_000, 7928) .saturating_add(T::DbWeight::get().reads(18_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -1358,14 +1354,14 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:2 w:2) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) - /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:2 w:2) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) + /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::StakingHotkeys` (r:1 w:0) /// Proof: `SubtensorModule::StakingHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Lock` (r:3 w:1) @@ -1406,8 +1402,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2505` // Estimated: `10920` - // Minimum execution time: 696_210_000 picoseconds. - Weight::from_parts(723_230_000, 10920) + // Minimum execution time: 608_522_000 picoseconds. + Weight::from_parts(622_973_000, 10920) .saturating_add(T::DbWeight::get().reads(47_u64)) .saturating_add(T::DbWeight::get().writes(24_u64)) } @@ -1445,8 +1441,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1300` // Estimated: `4765` - // Minimum execution time: 143_045_000 picoseconds. - Weight::from_parts(144_588_000, 4765) + // Minimum execution time: 116_565_000 picoseconds. + Weight::from_parts(118_437_000, 4765) .saturating_add(T::DbWeight::get().reads(15_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -1486,8 +1482,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1455` // Estimated: `7395` - // Minimum execution time: 99_704_000 picoseconds. - Weight::from_parts(102_130_000, 7395) + // Minimum execution time: 79_028_000 picoseconds. + Weight::from_parts(80_660_000, 7395) .saturating_add(T::DbWeight::get().reads(16_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -1503,8 +1499,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `830` // Estimated: `4295` - // Minimum execution time: 28_883_000 picoseconds. - Weight::from_parts(30_347_000, 4295) + // Minimum execution time: 21_162_000 picoseconds. + Weight::from_parts(21_813_000, 4295) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -1522,8 +1518,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `923` // Estimated: `4388` - // Minimum execution time: 35_906_000 picoseconds. - Weight::from_parts(36_938_000, 4388) + // Minimum execution time: 26_911_000 picoseconds. + Weight::from_parts(27_652_000, 4388) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -1641,8 +1637,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1468` // Estimated: `9883` - // Minimum execution time: 268_618_000 picoseconds. - Weight::from_parts(275_570_000, 9883) + // Minimum execution time: 214_952_000 picoseconds. + Weight::from_parts(218_898_000, 9883) .saturating_add(T::DbWeight::get().reads(38_u64)) .saturating_add(T::DbWeight::get().writes(47_u64)) } @@ -1656,8 +1652,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `684` // Estimated: `4149` - // Minimum execution time: 29_695_000 picoseconds. - Weight::from_parts(30_757_000, 4149) + // Minimum execution time: 22_594_000 picoseconds. + Weight::from_parts(23_485_000, 4149) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -1671,8 +1667,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `889` // Estimated: `6829` - // Minimum execution time: 31_669_000 picoseconds. - Weight::from_parts(32_631_000, 6829) + // Minimum execution time: 22_994_000 picoseconds. + Weight::from_parts(24_547_000, 6829) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -1684,17 +1680,15 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `595` // Estimated: `4060` - // Minimum execution time: 17_793_000 picoseconds. - Weight::from_parts(18_304_000, 4060) + // Minimum execution time: 12_529_000 picoseconds. + Weight::from_parts(12_819_000, 4060) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `SubtensorModule::Owner` (r:2 w:2) /// Proof: `SubtensorModule::Owner` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::LastRateLimitedBlock` (r:4 w:7) - /// Proof: `SubtensorModule::LastRateLimitedBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::TxRateLimit` (r:1 w:0) - /// Proof: `SubtensorModule::TxRateLimit` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::IsNetworkMember` (r:6 w:10) /// Proof: `SubtensorModule::IsNetworkMember` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::RootClaimable` (r:2 w:2) @@ -1703,6 +1697,8 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::TotalHotkeyAlpha` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::RootClaimed` (r:1 w:0) /// Proof: `SubtensorModule::RootClaimed` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::LastRateLimitedBlock` (r:2 w:5) + /// Proof: `SubtensorModule::LastRateLimitedBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:6 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::ChildKeys` (r:10 w:10) @@ -1767,10 +1763,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `3172` // Estimated: `28912` - // Minimum execution time: 1_209_451_000 picoseconds. - Weight::from_parts(1_220_841_000, 28912) - .saturating_add(T::DbWeight::get().reads(182_u64)) - .saturating_add(T::DbWeight::get().writes(99_u64)) + // Minimum execution time: 1_014_610_000 picoseconds. + Weight::from_parts(1_021_260_000, 28912) + .saturating_add(T::DbWeight::get().reads(180_u64)) + .saturating_add(T::DbWeight::get().writes(97_u64)) } /// Storage: `SubtensorModule::Owner` (r:1 w:1) /// Proof: `SubtensorModule::Owner` (`max_values`: None, `max_size`: None, mode: `Measured`) @@ -1782,8 +1778,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `818` // Estimated: `4283` - // Minimum execution time: 25_246_000 picoseconds. - Weight::from_parts(25_878_000, 4283) + // Minimum execution time: 18_858_000 picoseconds. + Weight::from_parts(19_409_000, 4283) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -1797,8 +1793,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `774` // Estimated: `9189` - // Minimum execution time: 27_030_000 picoseconds. - Weight::from_parts(28_102_000, 9189) + // Minimum execution time: 19_749_000 picoseconds. + Weight::from_parts(20_401_000, 9189) .saturating_add(T::DbWeight::get().reads(6_u64)) } /// Storage: `SubtensorModule::Owner` (r:1 w:0) @@ -1821,14 +1817,14 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:2 w:2) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) - /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:2 w:2) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) + /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::StakingHotkeys` (r:1 w:0) /// Proof: `SubtensorModule::StakingHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Lock` (r:2 w:0) @@ -1859,8 +1855,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2235` // Estimated: `11306` - // Minimum execution time: 667_567_000 picoseconds. - Weight::from_parts(691_331_000, 11306) + // Minimum execution time: 574_821_000 picoseconds. + Weight::from_parts(586_489_000, 11306) .saturating_add(T::DbWeight::get().reads(43_u64)) .saturating_add(T::DbWeight::get().writes(25_u64)) } @@ -1876,16 +1872,16 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::TotalHotkeySharesV2` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetMechanism` (r:2 w:0) /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::NetworksAdded` (r:3 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Owner` (r:1 w:0) @@ -1914,8 +1910,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2176` // Estimated: `10591` - // Minimum execution time: 721_907_000 picoseconds. - Weight::from_parts(749_488_000, 10591) + // Minimum execution time: 652_828_000 picoseconds. + Weight::from_parts(657_696_000, 10591) .saturating_add(T::DbWeight::get().reads(27_u64)) .saturating_add(T::DbWeight::get().writes(13_u64)) } @@ -2052,10 +2048,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1835 + k * (44 ±0)` // Estimated: `10256 + k * (2579 ±0)` - // Minimum execution time: 472_506_000 picoseconds. - Weight::from_parts(230_127_504, 10256) - // Standard Error: 51_934 - .saturating_add(Weight::from_parts(46_730_014, 0).saturating_mul(k.into())) + // Minimum execution time: 387_361_000 picoseconds. + Weight::from_parts(229_217_986, 10256) + // Standard Error: 20_811 + .saturating_add(Weight::from_parts(38_833_597, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(48_u64)) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes(53_u64)) @@ -2085,10 +2081,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1501 + k * (53 ±0)` // Estimated: `6148 + k * (2529 ±0)` - // Minimum execution time: 93_584_000 picoseconds. - Weight::from_parts(94_083_076, 6148) - // Standard Error: 6_178 - .saturating_add(Weight::from_parts(1_554_561, 0).saturating_mul(k.into())) + // Minimum execution time: 71_717_000 picoseconds. + Weight::from_parts(64_110_055, 6148) + // Standard Error: 1_713 + .saturating_add(Weight::from_parts(1_246_826, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes(7_u64)) @@ -2109,22 +2105,30 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:1) /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::NextSubnetSaleOfferId` (r:1 w:1) + /// Proof: `SubtensorModule::NextSubnetSaleOfferId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn create_sale_offer() -> Weight { - Weight::from_parts(25_000_000, 0) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) + // Proof Size summary in bytes: + // Measured: `1043` + // Estimated: `4508` + // Minimum execution time: 33_831_000 picoseconds. + Weight::from_parts(34_762_000, 4508) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) } /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) /// Proof: `SubtensorModule::SubnetSaleOffers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn cancel_sale_offer() -> Weight { - Weight::from_parts(15_000_000, 0) - .saturating_add(T::DbWeight::get().reads(2_u64)) + // Proof Size summary in bytes: + // Measured: `772` + // Estimated: `4237` + // Minimum execution time: 11_968_000 picoseconds. + Weight::from_parts(12_969_000, 4237) + .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) @@ -2135,8 +2139,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `659` // Estimated: `9074` - // Minimum execution time: 26_389_000 picoseconds. - Weight::from_parts(28_382_000, 9074) + // Minimum execution time: 18_979_000 picoseconds. + Weight::from_parts(20_091_000, 9074) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -2172,8 +2176,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1248` // Estimated: `4713` - // Minimum execution time: 84_036_000 picoseconds. - Weight::from_parts(85_989_000, 4713) + // Minimum execution time: 66_300_000 picoseconds. + Weight::from_parts(67_572_000, 4713) .saturating_add(T::DbWeight::get().reads(14_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -2189,8 +2193,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `809` // Estimated: `4274` - // Minimum execution time: 33_031_000 picoseconds. - Weight::from_parts(33_852_000, 4274) + // Minimum execution time: 24_667_000 picoseconds. + Weight::from_parts(25_639_000, 4274) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -2206,8 +2210,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `476` // Estimated: `3941` - // Minimum execution time: 17_142_000 picoseconds. - Weight::from_parts(17_974_000, 3941) + // Minimum execution time: 12_409_000 picoseconds. + Weight::from_parts(13_039_000, 3941) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -2237,8 +2241,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1969` // Estimated: `7909` - // Minimum execution time: 135_911_000 picoseconds. - Weight::from_parts(139_088_000, 7909) + // Minimum execution time: 112_018_000 picoseconds. + Weight::from_parts(113_420_000, 7909) .saturating_add(T::DbWeight::get().reads(16_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -2248,8 +2252,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_595_000 picoseconds. - Weight::from_parts(2_765_000, 0) + // Minimum execution time: 1_642_000 picoseconds. + Weight::from_parts(1_752_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `SubtensorModule::RootClaimableThreshold` (r:0 w:1) @@ -2258,8 +2262,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_140_000 picoseconds. - Weight::from_parts(5_831_000, 0) + // Minimum execution time: 3_535_000 picoseconds. + Weight::from_parts(4_006_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `SubtensorModule::Owner` (r:1 w:0) @@ -2272,23 +2276,23 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `899` // Estimated: `4364` - // Minimum execution time: 27_250_000 picoseconds. - Weight::from_parts(28_202_000, 4364) + // Minimum execution time: 19_549_000 picoseconds. + Weight::from_parts(20_731_000, 4364) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `SubtensorModule::SubnetMechanism` (r:1 w:0) /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubtokenEnabled` (r:1 w:0) @@ -2345,8 +2349,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `2229` // Estimated: `8727` - // Minimum execution time: 939_851_000 picoseconds. - Weight::from_parts(946_223_000, 8727) + // Minimum execution time: 847_831_000 picoseconds. + Weight::from_parts(863_284_000, 8727) .saturating_add(T::DbWeight::get().reads(33_u64)) .saturating_add(T::DbWeight::get().writes(17_u64)) } @@ -2356,8 +2360,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_634_000 picoseconds. - Weight::from_parts(2_886_000, 0) + // Minimum execution time: 1_583_000 picoseconds. + Weight::from_parts(1_733_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `SubtensorModule::Owner` (r:1 w:0) @@ -2398,8 +2402,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1715` // Estimated: `7655` - // Minimum execution time: 115_915_000 picoseconds. - Weight::from_parts(116_686_000, 7655) + // Minimum execution time: 91_938_000 picoseconds. + Weight::from_parts(94_121_000, 7655) .saturating_add(T::DbWeight::get().reads(17_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -2429,8 +2433,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1399` // Estimated: `7339` - // Minimum execution time: 147_714_000 picoseconds. - Weight::from_parts(149_006_000, 7339) + // Minimum execution time: 123_926_000 picoseconds. + Weight::from_parts(126_199_000, 7339) .saturating_add(T::DbWeight::get().reads(14_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -2444,8 +2448,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `950` // Estimated: `4415` - // Minimum execution time: 665_262_000 picoseconds. - Weight::from_parts(683_967_000, 4415) + // Minimum execution time: 543_123_000 picoseconds. + Weight::from_parts(555_783_000, 4415) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -2465,8 +2469,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `975` // Estimated: `4440` - // Minimum execution time: 44_743_000 picoseconds. - Weight::from_parts(46_106_000, 4440) + // Minimum execution time: 34_271_000 picoseconds. + Weight::from_parts(35_724_000, 4440) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -2490,8 +2494,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `899` // Estimated: `4364` - // Minimum execution time: 37_910_000 picoseconds. - Weight::from_parts(39_443_000, 4364) + // Minimum execution time: 28_723_000 picoseconds. + Weight::from_parts(29_594_000, 4364) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -2515,8 +2519,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `982` // Estimated: `4447` - // Minimum execution time: 41_466_000 picoseconds. - Weight::from_parts(42_479_000, 4447) + // Minimum execution time: 31_487_000 picoseconds. + Weight::from_parts(32_469_000, 4447) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -2528,8 +2532,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `733` // Estimated: `4198` - // Minimum execution time: 16_952_000 picoseconds. - Weight::from_parts(17_353_000, 4198) + // Minimum execution time: 12_739_000 picoseconds. + Weight::from_parts(13_491_000, 4198) .saturating_add(T::DbWeight::get().reads(2_u64)) } /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) @@ -2537,7 +2541,11 @@ impl WeightInfo for SubstrateWeight { /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn check_subnet_sale_extension() -> Weight { - Weight::from_parts(10_000_000, 0) + // Proof Size summary in bytes: + // Measured: `563` + // Estimated: `4028` + // Minimum execution time: 8_172_000 picoseconds. + Weight::from_parts(8_342_000, 4028) .saturating_add(T::DbWeight::get().reads(2_u64)) } /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) @@ -2564,8 +2572,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1731` // Estimated: `7671` - // Minimum execution time: 52_477_000 picoseconds. - Weight::from_parts(53_489_000, 7671) + // Minimum execution time: 40_951_000 picoseconds. + Weight::from_parts(42_123_000, 7671) .saturating_add(T::DbWeight::get().reads(11_u64)) } /// Storage: `SubtensorModule::CommitRevealWeightsEnabled` (r:1 w:0) @@ -2586,8 +2594,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `1019` // Estimated: `4484` - // Minimum execution time: 34_825_000 picoseconds. - Weight::from_parts(35_857_000, 4484) + // Minimum execution time: 26_780_000 picoseconds. + Weight::from_parts(27_642_000, 4484) .saturating_add(T::DbWeight::get().reads(7_u64)) } /// Storage: `SubtensorModule::MinDelegateTake` (r:1 w:0) @@ -2600,8 +2608,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `721` // Estimated: `4186` - // Minimum execution time: 15_038_000 picoseconds. - Weight::from_parts(15_419_000, 4186) + // Minimum execution time: 11_617_000 picoseconds. + Weight::from_parts(11_828_000, 4186) .saturating_add(T::DbWeight::get().reads(3_u64)) } /// Storage: `SubtensorModule::Uids` (r:1 w:0) @@ -2614,8 +2622,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `647` // Estimated: `4112` - // Minimum execution time: 18_795_000 picoseconds. - Weight::from_parts(19_206_000, 4112) + // Minimum execution time: 14_612_000 picoseconds. + Weight::from_parts(14_852_000, 4112) .saturating_add(T::DbWeight::get().reads(3_u64)) } /// Storage: `SubtensorModule::Uids` (r:1 w:0) @@ -2626,8 +2634,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `652` // Estimated: `4117` - // Minimum execution time: 15_018_000 picoseconds. - Weight::from_parts(15_529_000, 4117) + // Minimum execution time: 11_377_000 picoseconds. + Weight::from_parts(11_898_000, 4117) .saturating_add(T::DbWeight::get().reads(2_u64)) } } @@ -2658,12 +2666,12 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Swap::PalSwapInitialized` (r:1 w:1) - /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::FeeRate` (r:1 w:0) /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) + /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::PalSwapInitialized` (r:1 w:1) + /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::SubnetAlphaOut` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaOut` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TotalStake` (r:1 w:1) @@ -2712,8 +2720,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1865` // Estimated: `6148` - // Minimum execution time: 328_388_000 picoseconds. - Weight::from_parts(330_502_000, 6148) + // Minimum execution time: 279_829_000 picoseconds. + Weight::from_parts(285_348_000, 6148) .saturating_add(RocksDbWeight::get().reads(34_u64)) .saturating_add(RocksDbWeight::get().writes(29_u64)) } @@ -2755,27 +2763,27 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `188820` // Estimated: `10327410` - // Minimum execution time: 15_066_222_000 picoseconds. - Weight::from_parts(15_359_235_000, 10327410) + // Minimum execution time: 13_102_605_000 picoseconds. + Weight::from_parts(13_309_565_000, 10327410) .saturating_add(RocksDbWeight::get().reads(4112_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } + /// Storage: `SubtensorModule::SubnetMechanism` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubtokenEnabled` (r:1 w:0) /// Proof: `SubtensorModule::SubtokenEnabled` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetMechanism` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `System::Account` (r:3 w:3) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(104), added: 2579, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::Owner` (r:1 w:0) @@ -2826,8 +2834,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2226` // Estimated: `8727` - // Minimum execution time: 630_738_000 picoseconds. - Weight::from_parts(657_709_000, 8727) + // Minimum execution time: 562_393_000 picoseconds. + Weight::from_parts(574_141_000, 8727) .saturating_add(RocksDbWeight::get().reads(32_u64)) .saturating_add(RocksDbWeight::get().writes(16_u64)) } @@ -2841,8 +2849,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `713` // Estimated: `4178` - // Minimum execution time: 29_935_000 picoseconds. - Weight::from_parts(31_428_000, 4178) + // Minimum execution time: 22_764_000 picoseconds. + Weight::from_parts(23_735_000, 4178) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -2856,8 +2864,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `812` // Estimated: `4277` - // Minimum execution time: 28_453_000 picoseconds. - Weight::from_parts(29_284_000, 4277) + // Minimum execution time: 21_282_000 picoseconds. + Weight::from_parts(22_274_000, 4277) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -2885,12 +2893,12 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Swap::PalSwapInitialized` (r:1 w:1) - /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::FeeRate` (r:1 w:0) /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) + /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::PalSwapInitialized` (r:1 w:1) + /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::SubnetAlphaOut` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaOut` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TotalStake` (r:1 w:1) @@ -2939,8 +2947,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1798` // Estimated: `6148` - // Minimum execution time: 327_477_000 picoseconds. - Weight::from_parts(331_344_000, 6148) + // Minimum execution time: 279_579_000 picoseconds. + Weight::from_parts(283_735_000, 6148) .saturating_add(RocksDbWeight::get().reads(34_u64)) .saturating_add(RocksDbWeight::get().writes(29_u64)) } @@ -2992,8 +3000,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1516` // Estimated: `4981` - // Minimum execution time: 100_676_000 picoseconds. - Weight::from_parts(103_852_000, 4981) + // Minimum execution time: 80_801_000 picoseconds. + Weight::from_parts(82_544_000, 4981) .saturating_add(RocksDbWeight::get().reads(19_u64)) .saturating_add(RocksDbWeight::get().writes(16_u64)) } @@ -3111,8 +3119,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1532` // Estimated: `9947` - // Minimum execution time: 267_616_000 picoseconds. - Weight::from_parts(272_414_000, 9947) + // Minimum execution time: 218_047_000 picoseconds. + Weight::from_parts(221_943_000, 9947) .saturating_add(RocksDbWeight::get().reads(39_u64)) .saturating_add(RocksDbWeight::get().writes(48_u64)) } @@ -3146,8 +3154,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1249` // Estimated: `4714` - // Minimum execution time: 67_896_000 picoseconds. - Weight::from_parts(69_409_000, 4714) + // Minimum execution time: 53_150_000 picoseconds. + Weight::from_parts(54_702_000, 4714) .saturating_add(RocksDbWeight::get().reads(13_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -3193,8 +3201,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1650` // Estimated: `7590` - // Minimum execution time: 109_312_000 picoseconds. - Weight::from_parts(110_735_000, 7590) + // Minimum execution time: 86_970_000 picoseconds. + Weight::from_parts(89_384_000, 7590) .saturating_add(RocksDbWeight::get().reads(19_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -3204,8 +3212,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_200_000 picoseconds. - Weight::from_parts(5_510_000, 0) + // Minimum execution time: 3_265_000 picoseconds. + Weight::from_parts(3_605_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `SubtensorModule::Owner` (r:1 w:0) @@ -3226,8 +3234,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1033` // Estimated: `4498` - // Minimum execution time: 52_177_000 picoseconds. - Weight::from_parts(53_178_000, 4498) + // Minimum execution time: 40_741_000 picoseconds. + Weight::from_parts(42_043_000, 4498) .saturating_add(RocksDbWeight::get().reads(7_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -3243,8 +3251,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `694` // Estimated: `4159` - // Minimum execution time: 46_146_000 picoseconds. - Weight::from_parts(47_278_000, 4159) + // Minimum execution time: 34_632_000 picoseconds. + Weight::from_parts(35_984_000, 4159) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } @@ -3256,6 +3264,8 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::Owner` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::IdentitiesV2` (r:2 w:0) /// Proof: `SubtensorModule::IdentitiesV2` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::AccountFlags` (r:2 w:2) + /// Proof: `SubtensorModule::AccountFlags` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:3 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetOwner` (r:2 w:0) @@ -3282,22 +3292,18 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::MaturityRate` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Lock` (r:2 w:0) /// Proof: `SubtensorModule::Lock` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::AccountFlags` (r:1 w:0) - /// Proof: `SubtensorModule::AccountFlags` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::DecayingLock` (r:1 w:0) /// Proof: `SubtensorModule::DecayingLock` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `System::Account` (r:2 w:2) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(104), added: 2579, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::LastRateLimitedBlock` (r:0 w:1) - /// Proof: `SubtensorModule::LastRateLimitedBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) fn swap_coldkey_announced() -> Weight { // Proof Size summary in bytes: // Measured: `2110` // Estimated: `13000` - // Minimum execution time: 288_044_000 picoseconds. - Weight::from_parts(290_288_000, 13000) - .saturating_add(RocksDbWeight::get().reads(38_u64)) - .saturating_add(RocksDbWeight::get().writes(15_u64)) + // Minimum execution time: 243_034_000 picoseconds. + Weight::from_parts(245_928_000, 13000) + .saturating_add(RocksDbWeight::get().reads(39_u64)) + .saturating_add(RocksDbWeight::get().writes(16_u64)) } /// Storage: `System::Account` (r:2 w:2) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(104), added: 2579, mode: `MaxEncodedLen`) @@ -3309,6 +3315,8 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::Owner` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::IdentitiesV2` (r:2 w:2) /// Proof: `SubtensorModule::IdentitiesV2` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::AccountFlags` (r:2 w:2) + /// Proof: `SubtensorModule::AccountFlags` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:3 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetOwner` (r:2 w:0) @@ -3335,24 +3343,20 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::MaturityRate` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Lock` (r:2 w:0) /// Proof: `SubtensorModule::Lock` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::AccountFlags` (r:1 w:0) - /// Proof: `SubtensorModule::AccountFlags` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::DecayingLock` (r:1 w:0) /// Proof: `SubtensorModule::DecayingLock` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:0 w:1) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::ColdkeySwapDisputes` (r:0 w:1) /// Proof: `SubtensorModule::ColdkeySwapDisputes` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::LastRateLimitedBlock` (r:0 w:1) - /// Proof: `SubtensorModule::LastRateLimitedBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) fn swap_coldkey() -> Weight { // Proof Size summary in bytes: // Measured: `2166` // Estimated: `13056` - // Minimum execution time: 309_453_000 picoseconds. - Weight::from_parts(315_114_000, 13056) - .saturating_add(RocksDbWeight::get().reads(38_u64)) - .saturating_add(RocksDbWeight::get().writes(19_u64)) + // Minimum execution time: 261_081_000 picoseconds. + Weight::from_parts(266_279_000, 13056) + .saturating_add(RocksDbWeight::get().reads(39_u64)) + .saturating_add(RocksDbWeight::get().writes(20_u64)) } /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) @@ -3362,8 +3366,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `665` // Estimated: `4130` - // Minimum execution time: 22_261_000 picoseconds. - Weight::from_parts(22_982_000, 4130) + // Minimum execution time: 16_085_000 picoseconds. + Weight::from_parts(16_805_000, 4130) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -3375,8 +3379,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `613` // Estimated: `4078` - // Minimum execution time: 18_805_000 picoseconds. - Weight::from_parts(20_077_000, 4078) + // Minimum execution time: 13_180_000 picoseconds. + Weight::from_parts(13_550_000, 4078) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -3388,8 +3392,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_095_000 picoseconds. - Weight::from_parts(8_666_000, 0) + // Minimum execution time: 5_638_000 picoseconds. + Weight::from_parts(5_989_000, 0) .saturating_add(RocksDbWeight::get().writes(2_u64)) } /// Storage: `SubtensorModule::CommitRevealWeightsEnabled` (r:1 w:0) @@ -3434,8 +3438,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2155` // Estimated: `8095` - // Minimum execution time: 403_027_000 picoseconds. - Weight::from_parts(424_947_000, 8095) + // Minimum execution time: 343_605_000 picoseconds. + Weight::from_parts(348_212_000, 8095) .saturating_add(RocksDbWeight::get().reads(19_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -3469,8 +3473,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1754` // Estimated: `5219` - // Minimum execution time: 171_027_000 picoseconds. - Weight::from_parts(172_711_000, 5219) + // Minimum execution time: 140_190_000 picoseconds. + Weight::from_parts(143_025_000, 5219) .saturating_add(RocksDbWeight::get().reads(13_u64)) .saturating_add(RocksDbWeight::get().writes(6_u64)) } @@ -3502,8 +3506,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1754` // Estimated: `5219` - // Minimum execution time: 166_909_000 picoseconds. - Weight::from_parts(168_933_000, 5219) + // Minimum execution time: 136_234_000 picoseconds. + Weight::from_parts(138_527_000, 5219) .saturating_add(RocksDbWeight::get().reads(12_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } @@ -3523,23 +3527,23 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1118` // Estimated: `4583` - // Minimum execution time: 38_882_000 picoseconds. - Weight::from_parts(39_442_000, 4583) + // Minimum execution time: 29_774_000 picoseconds. + Weight::from_parts(30_706_000, 4583) .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } /// Storage: `SubtensorModule::SubnetMechanism` (r:1 w:0) /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubtokenEnabled` (r:1 w:0) @@ -3594,8 +3598,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2226` // Estimated: `8727` - // Minimum execution time: 810_081_000 picoseconds. - Weight::from_parts(833_084_000, 8727) + // Minimum execution time: 735_733_000 picoseconds. + Weight::from_parts(751_366_000, 8727) .saturating_add(RocksDbWeight::get().reads(32_u64)) .saturating_add(RocksDbWeight::get().writes(16_u64)) } @@ -3631,8 +3635,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1979` // Estimated: `7919` - // Minimum execution time: 210_109_000 picoseconds. - Weight::from_parts(212_274_000, 7919) + // Minimum execution time: 176_795_000 picoseconds. + Weight::from_parts(179_890_000, 7919) .saturating_add(RocksDbWeight::get().reads(19_u64)) .saturating_add(RocksDbWeight::get().writes(7_u64)) } @@ -3648,20 +3652,20 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::TotalHotkeyShares` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TotalHotkeySharesV2` (r:1 w:1) /// Proof: `SubtensorModule::TotalHotkeySharesV2` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::NetworksAdded` (r:3 w:0) - /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetMechanism` (r:2 w:0) /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::NetworksAdded` (r:3 w:0) + /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::Owner` (r:1 w:0) /// Proof: `SubtensorModule::Owner` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::StakingHotkeys` (r:1 w:0) @@ -3688,23 +3692,23 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2142` // Estimated: `10557` - // Minimum execution time: 539_440_000 picoseconds. - Weight::from_parts(562_672_000, 10557) + // Minimum execution time: 466_249_000 picoseconds. + Weight::from_parts(482_804_000, 10557) .saturating_add(RocksDbWeight::get().reads(28_u64)) .saturating_add(RocksDbWeight::get().writes(13_u64)) } /// Storage: `SubtensorModule::SubnetMechanism` (r:2 w:0) /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::NetworksAdded` (r:3 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Alpha` (r:1 w:0) @@ -3743,8 +3747,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2176` // Estimated: `10591` - // Minimum execution time: 713_632_000 picoseconds. - Weight::from_parts(740_663_000, 10591) + // Minimum execution time: 626_849_000 picoseconds. + Weight::from_parts(634_581_000, 10591) .saturating_add(RocksDbWeight::get().reads(27_u64)) .saturating_add(RocksDbWeight::get().writes(13_u64)) } @@ -3760,16 +3764,16 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::TotalHotkeySharesV2` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetMechanism` (r:2 w:0) /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetAlphaIn` (r:2 w:2) + /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:2 w:2) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetAlphaIn` (r:2 w:2) - /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::NetworksAdded` (r:2 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubtokenEnabled` (r:2 w:0) @@ -3816,8 +3820,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2662` // Estimated: `11077` - // Minimum execution time: 920_946_000 picoseconds. - Weight::from_parts(928_060_000, 11077) + // Minimum execution time: 797_555_000 picoseconds. + Weight::from_parts(810_304_000, 11077) .saturating_add(RocksDbWeight::get().reads(47_u64)) .saturating_add(RocksDbWeight::get().writes(24_u64)) } @@ -3857,8 +3861,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1988` // Estimated: `7928` - // Minimum execution time: 244_634_000 picoseconds. - Weight::from_parts(246_506_000, 7928) + // Minimum execution time: 204_657_000 picoseconds. + Weight::from_parts(206_480_000, 7928) .saturating_add(RocksDbWeight::get().reads(18_u64)) .saturating_add(RocksDbWeight::get().writes(6_u64)) } @@ -3882,14 +3886,14 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:2 w:2) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) - /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:2 w:2) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) + /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::StakingHotkeys` (r:1 w:0) /// Proof: `SubtensorModule::StakingHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Lock` (r:3 w:1) @@ -3930,8 +3934,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2505` // Estimated: `10920` - // Minimum execution time: 696_210_000 picoseconds. - Weight::from_parts(723_230_000, 10920) + // Minimum execution time: 608_522_000 picoseconds. + Weight::from_parts(622_973_000, 10920) .saturating_add(RocksDbWeight::get().reads(47_u64)) .saturating_add(RocksDbWeight::get().writes(24_u64)) } @@ -3969,8 +3973,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1300` // Estimated: `4765` - // Minimum execution time: 143_045_000 picoseconds. - Weight::from_parts(144_588_000, 4765) + // Minimum execution time: 116_565_000 picoseconds. + Weight::from_parts(118_437_000, 4765) .saturating_add(RocksDbWeight::get().reads(15_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -4010,8 +4014,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1455` // Estimated: `7395` - // Minimum execution time: 99_704_000 picoseconds. - Weight::from_parts(102_130_000, 7395) + // Minimum execution time: 79_028_000 picoseconds. + Weight::from_parts(80_660_000, 7395) .saturating_add(RocksDbWeight::get().reads(16_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -4027,8 +4031,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `830` // Estimated: `4295` - // Minimum execution time: 28_883_000 picoseconds. - Weight::from_parts(30_347_000, 4295) + // Minimum execution time: 21_162_000 picoseconds. + Weight::from_parts(21_813_000, 4295) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -4046,8 +4050,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `923` // Estimated: `4388` - // Minimum execution time: 35_906_000 picoseconds. - Weight::from_parts(36_938_000, 4388) + // Minimum execution time: 26_911_000 picoseconds. + Weight::from_parts(27_652_000, 4388) .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -4165,8 +4169,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1468` // Estimated: `9883` - // Minimum execution time: 268_618_000 picoseconds. - Weight::from_parts(275_570_000, 9883) + // Minimum execution time: 214_952_000 picoseconds. + Weight::from_parts(218_898_000, 9883) .saturating_add(RocksDbWeight::get().reads(38_u64)) .saturating_add(RocksDbWeight::get().writes(47_u64)) } @@ -4180,8 +4184,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `684` // Estimated: `4149` - // Minimum execution time: 29_695_000 picoseconds. - Weight::from_parts(30_757_000, 4149) + // Minimum execution time: 22_594_000 picoseconds. + Weight::from_parts(23_485_000, 4149) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -4195,8 +4199,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `889` // Estimated: `6829` - // Minimum execution time: 31_669_000 picoseconds. - Weight::from_parts(32_631_000, 6829) + // Minimum execution time: 22_994_000 picoseconds. + Weight::from_parts(24_547_000, 6829) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -4208,17 +4212,15 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `595` // Estimated: `4060` - // Minimum execution time: 17_793_000 picoseconds. - Weight::from_parts(18_304_000, 4060) + // Minimum execution time: 12_529_000 picoseconds. + Weight::from_parts(12_819_000, 4060) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `SubtensorModule::Owner` (r:2 w:2) /// Proof: `SubtensorModule::Owner` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::LastRateLimitedBlock` (r:4 w:7) - /// Proof: `SubtensorModule::LastRateLimitedBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::TxRateLimit` (r:1 w:0) - /// Proof: `SubtensorModule::TxRateLimit` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::IsNetworkMember` (r:6 w:10) /// Proof: `SubtensorModule::IsNetworkMember` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::RootClaimable` (r:2 w:2) @@ -4227,6 +4229,8 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::TotalHotkeyAlpha` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::RootClaimed` (r:1 w:0) /// Proof: `SubtensorModule::RootClaimed` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::LastRateLimitedBlock` (r:2 w:5) + /// Proof: `SubtensorModule::LastRateLimitedBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:6 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::ChildKeys` (r:10 w:10) @@ -4291,10 +4295,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `3172` // Estimated: `28912` - // Minimum execution time: 1_209_451_000 picoseconds. - Weight::from_parts(1_220_841_000, 28912) - .saturating_add(RocksDbWeight::get().reads(182_u64)) - .saturating_add(RocksDbWeight::get().writes(99_u64)) + // Minimum execution time: 1_014_610_000 picoseconds. + Weight::from_parts(1_021_260_000, 28912) + .saturating_add(RocksDbWeight::get().reads(180_u64)) + .saturating_add(RocksDbWeight::get().writes(97_u64)) } /// Storage: `SubtensorModule::Owner` (r:1 w:1) /// Proof: `SubtensorModule::Owner` (`max_values`: None, `max_size`: None, mode: `Measured`) @@ -4306,8 +4310,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `818` // Estimated: `4283` - // Minimum execution time: 25_246_000 picoseconds. - Weight::from_parts(25_878_000, 4283) + // Minimum execution time: 18_858_000 picoseconds. + Weight::from_parts(19_409_000, 4283) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } @@ -4321,8 +4325,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `774` // Estimated: `9189` - // Minimum execution time: 27_030_000 picoseconds. - Weight::from_parts(28_102_000, 9189) + // Minimum execution time: 19_749_000 picoseconds. + Weight::from_parts(20_401_000, 9189) .saturating_add(RocksDbWeight::get().reads(6_u64)) } /// Storage: `SubtensorModule::Owner` (r:1 w:0) @@ -4345,14 +4349,14 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:2 w:2) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) - /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:2 w:2) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) + /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::StakingHotkeys` (r:1 w:0) /// Proof: `SubtensorModule::StakingHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Lock` (r:2 w:0) @@ -4383,8 +4387,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2235` // Estimated: `11306` - // Minimum execution time: 667_567_000 picoseconds. - Weight::from_parts(691_331_000, 11306) + // Minimum execution time: 574_821_000 picoseconds. + Weight::from_parts(586_489_000, 11306) .saturating_add(RocksDbWeight::get().reads(43_u64)) .saturating_add(RocksDbWeight::get().writes(25_u64)) } @@ -4400,16 +4404,16 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::TotalHotkeySharesV2` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetMechanism` (r:2 w:0) /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::NetworksAdded` (r:3 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::Owner` (r:1 w:0) @@ -4438,8 +4442,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2176` // Estimated: `10591` - // Minimum execution time: 721_907_000 picoseconds. - Weight::from_parts(749_488_000, 10591) + // Minimum execution time: 652_828_000 picoseconds. + Weight::from_parts(657_696_000, 10591) .saturating_add(RocksDbWeight::get().reads(27_u64)) .saturating_add(RocksDbWeight::get().writes(13_u64)) } @@ -4576,10 +4580,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1835 + k * (44 ±0)` // Estimated: `10256 + k * (2579 ±0)` - // Minimum execution time: 472_506_000 picoseconds. - Weight::from_parts(230_127_504, 10256) - // Standard Error: 51_934 - .saturating_add(Weight::from_parts(46_730_014, 0).saturating_mul(k.into())) + // Minimum execution time: 387_361_000 picoseconds. + Weight::from_parts(229_217_986, 10256) + // Standard Error: 20_811 + .saturating_add(Weight::from_parts(38_833_597, 0).saturating_mul(k.into())) .saturating_add(RocksDbWeight::get().reads(48_u64)) .saturating_add(RocksDbWeight::get().reads((2_u64).saturating_mul(k.into()))) .saturating_add(RocksDbWeight::get().writes(53_u64)) @@ -4609,10 +4613,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1501 + k * (53 ±0)` // Estimated: `6148 + k * (2529 ±0)` - // Minimum execution time: 93_584_000 picoseconds. - Weight::from_parts(94_083_076, 6148) - // Standard Error: 6_178 - .saturating_add(Weight::from_parts(1_554_561, 0).saturating_mul(k.into())) + // Minimum execution time: 71_717_000 picoseconds. + Weight::from_parts(64_110_055, 6148) + // Standard Error: 1_713 + .saturating_add(Weight::from_parts(1_246_826, 0).saturating_mul(k.into())) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(k.into()))) .saturating_add(RocksDbWeight::get().writes(7_u64)) @@ -4633,22 +4637,30 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:1) /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::NextSubnetSaleOfferId` (r:1 w:1) + /// Proof: `SubtensorModule::NextSubnetSaleOfferId` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn create_sale_offer() -> Weight { - Weight::from_parts(25_000_000, 0) - .saturating_add(RocksDbWeight::get().reads(7_u64)) - .saturating_add(RocksDbWeight::get().writes(3_u64)) + // Proof Size summary in bytes: + // Measured: `1043` + // Estimated: `4508` + // Minimum execution time: 33_831_000 picoseconds. + Weight::from_parts(34_762_000, 4508) + .saturating_add(RocksDbWeight::get().reads(8_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) } /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) /// Proof: `SubtensorModule::SubnetSaleOffers` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn cancel_sale_offer() -> Weight { - Weight::from_parts(15_000_000, 0) - .saturating_add(RocksDbWeight::get().reads(2_u64)) + // Proof Size summary in bytes: + // Measured: `772` + // Estimated: `4237` + // Minimum execution time: 11_968_000 picoseconds. + Weight::from_parts(12_969_000, 4237) + .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) @@ -4659,8 +4671,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `659` // Estimated: `9074` - // Minimum execution time: 26_389_000 picoseconds. - Weight::from_parts(28_382_000, 9074) + // Minimum execution time: 18_979_000 picoseconds. + Weight::from_parts(20_091_000, 9074) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -4696,8 +4708,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1248` // Estimated: `4713` - // Minimum execution time: 84_036_000 picoseconds. - Weight::from_parts(85_989_000, 4713) + // Minimum execution time: 66_300_000 picoseconds. + Weight::from_parts(67_572_000, 4713) .saturating_add(RocksDbWeight::get().reads(14_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -4713,8 +4725,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `809` // Estimated: `4274` - // Minimum execution time: 33_031_000 picoseconds. - Weight::from_parts(33_852_000, 4274) + // Minimum execution time: 24_667_000 picoseconds. + Weight::from_parts(25_639_000, 4274) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -4730,8 +4742,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `476` // Estimated: `3941` - // Minimum execution time: 17_142_000 picoseconds. - Weight::from_parts(17_974_000, 3941) + // Minimum execution time: 12_409_000 picoseconds. + Weight::from_parts(13_039_000, 3941) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } @@ -4761,8 +4773,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1969` // Estimated: `7909` - // Minimum execution time: 135_911_000 picoseconds. - Weight::from_parts(139_088_000, 7909) + // Minimum execution time: 112_018_000 picoseconds. + Weight::from_parts(113_420_000, 7909) .saturating_add(RocksDbWeight::get().reads(16_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } @@ -4772,8 +4784,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_595_000 picoseconds. - Weight::from_parts(2_765_000, 0) + // Minimum execution time: 1_642_000 picoseconds. + Weight::from_parts(1_752_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `SubtensorModule::RootClaimableThreshold` (r:0 w:1) @@ -4782,8 +4794,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_140_000 picoseconds. - Weight::from_parts(5_831_000, 0) + // Minimum execution time: 3_535_000 picoseconds. + Weight::from_parts(4_006_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `SubtensorModule::Owner` (r:1 w:0) @@ -4796,23 +4808,23 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `899` // Estimated: `4364` - // Minimum execution time: 27_250_000 picoseconds. - Weight::from_parts(28_202_000, 4364) + // Minimum execution time: 19_549_000 picoseconds. + Weight::from_parts(20_731_000, 4364) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `SubtensorModule::SubnetMechanism` (r:1 w:0) /// Proof: `SubtensorModule::SubnetMechanism` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) + /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetAlphaIn` (r:1 w:1) /// Proof: `SubtensorModule::SubnetAlphaIn` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `Swap::FeeRate` (r:1 w:0) + /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `Swap::PalSwapInitialized` (r:1 w:0) /// Proof: `Swap::PalSwapInitialized` (`max_values`: None, `max_size`: Some(11), added: 2486, mode: `MaxEncodedLen`) - /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:1) - /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Swap::SwapBalancer` (r:1 w:0) /// Proof: `Swap::SwapBalancer` (`max_values`: None, `max_size`: Some(18), added: 2493, mode: `MaxEncodedLen`) - /// Storage: `Swap::FeeRate` (r:1 w:0) - /// Proof: `Swap::FeeRate` (`max_values`: None, `max_size`: Some(12), added: 2487, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubtokenEnabled` (r:1 w:0) @@ -4869,8 +4881,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `2229` // Estimated: `8727` - // Minimum execution time: 939_851_000 picoseconds. - Weight::from_parts(946_223_000, 8727) + // Minimum execution time: 847_831_000 picoseconds. + Weight::from_parts(863_284_000, 8727) .saturating_add(RocksDbWeight::get().reads(33_u64)) .saturating_add(RocksDbWeight::get().writes(17_u64)) } @@ -4880,8 +4892,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_634_000 picoseconds. - Weight::from_parts(2_886_000, 0) + // Minimum execution time: 1_583_000 picoseconds. + Weight::from_parts(1_733_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `SubtensorModule::Owner` (r:1 w:0) @@ -4922,8 +4934,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1715` // Estimated: `7655` - // Minimum execution time: 115_915_000 picoseconds. - Weight::from_parts(116_686_000, 7655) + // Minimum execution time: 91_938_000 picoseconds. + Weight::from_parts(94_121_000, 7655) .saturating_add(RocksDbWeight::get().reads(17_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } @@ -4953,8 +4965,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1399` // Estimated: `7339` - // Minimum execution time: 147_714_000 picoseconds. - Weight::from_parts(149_006_000, 7339) + // Minimum execution time: 123_926_000 picoseconds. + Weight::from_parts(126_199_000, 7339) .saturating_add(RocksDbWeight::get().reads(14_u64)) .saturating_add(RocksDbWeight::get().writes(6_u64)) } @@ -4968,8 +4980,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `950` // Estimated: `4415` - // Minimum execution time: 665_262_000 picoseconds. - Weight::from_parts(683_967_000, 4415) + // Minimum execution time: 543_123_000 picoseconds. + Weight::from_parts(555_783_000, 4415) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -4989,8 +5001,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `975` // Estimated: `4440` - // Minimum execution time: 44_743_000 picoseconds. - Weight::from_parts(46_106_000, 4440) + // Minimum execution time: 34_271_000 picoseconds. + Weight::from_parts(35_724_000, 4440) .saturating_add(RocksDbWeight::get().reads(6_u64)) .saturating_add(RocksDbWeight::get().writes(3_u64)) } @@ -5014,8 +5026,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `899` // Estimated: `4364` - // Minimum execution time: 37_910_000 picoseconds. - Weight::from_parts(39_443_000, 4364) + // Minimum execution time: 28_723_000 picoseconds. + Weight::from_parts(29_594_000, 4364) .saturating_add(RocksDbWeight::get().reads(7_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -5039,8 +5051,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `982` // Estimated: `4447` - // Minimum execution time: 41_466_000 picoseconds. - Weight::from_parts(42_479_000, 4447) + // Minimum execution time: 31_487_000 picoseconds. + Weight::from_parts(32_469_000, 4447) .saturating_add(RocksDbWeight::get().reads(8_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -5052,8 +5064,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `733` // Estimated: `4198` - // Minimum execution time: 16_952_000 picoseconds. - Weight::from_parts(17_353_000, 4198) + // Minimum execution time: 12_739_000 picoseconds. + Weight::from_parts(13_491_000, 4198) .saturating_add(RocksDbWeight::get().reads(2_u64)) } /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) @@ -5061,7 +5073,11 @@ impl WeightInfo for () { /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn check_subnet_sale_extension() -> Weight { - Weight::from_parts(10_000_000, 0) + // Proof Size summary in bytes: + // Measured: `563` + // Estimated: `4028` + // Minimum execution time: 8_172_000 picoseconds. + Weight::from_parts(8_342_000, 4028) .saturating_add(RocksDbWeight::get().reads(2_u64)) } /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) @@ -5088,8 +5104,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1731` // Estimated: `7671` - // Minimum execution time: 52_477_000 picoseconds. - Weight::from_parts(53_489_000, 7671) + // Minimum execution time: 40_951_000 picoseconds. + Weight::from_parts(42_123_000, 7671) .saturating_add(RocksDbWeight::get().reads(11_u64)) } /// Storage: `SubtensorModule::CommitRevealWeightsEnabled` (r:1 w:0) @@ -5110,8 +5126,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `1019` // Estimated: `4484` - // Minimum execution time: 34_825_000 picoseconds. - Weight::from_parts(35_857_000, 4484) + // Minimum execution time: 26_780_000 picoseconds. + Weight::from_parts(27_642_000, 4484) .saturating_add(RocksDbWeight::get().reads(7_u64)) } /// Storage: `SubtensorModule::MinDelegateTake` (r:1 w:0) @@ -5124,8 +5140,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `721` // Estimated: `4186` - // Minimum execution time: 15_038_000 picoseconds. - Weight::from_parts(15_419_000, 4186) + // Minimum execution time: 11_617_000 picoseconds. + Weight::from_parts(11_828_000, 4186) .saturating_add(RocksDbWeight::get().reads(3_u64)) } /// Storage: `SubtensorModule::Uids` (r:1 w:0) @@ -5138,8 +5154,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `647` // Estimated: `4112` - // Minimum execution time: 18_795_000 picoseconds. - Weight::from_parts(19_206_000, 4112) + // Minimum execution time: 14_612_000 picoseconds. + Weight::from_parts(14_852_000, 4112) .saturating_add(RocksDbWeight::get().reads(3_u64)) } /// Storage: `SubtensorModule::Uids` (r:1 w:0) @@ -5150,8 +5166,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `652` // Estimated: `4117` - // Minimum execution time: 15_018_000 picoseconds. - Weight::from_parts(15_529_000, 4117) + // Minimum execution time: 11_377_000 picoseconds. + Weight::from_parts(11_898_000, 4117) .saturating_add(RocksDbWeight::get().reads(2_u64)) } } diff --git a/pallets/utility/src/weights.rs b/pallets/utility/src/weights.rs index a2a7e22703..eb8c87aefb 100644 --- a/pallets/utility/src/weights.rs +++ b/pallets/utility/src/weights.rs @@ -2,9 +2,9 @@ //! Autogenerated weights for `pallet_subtensor_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 49.1.0 -//! DATE: 2026-06-30, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-07-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runnervmmklqx`, CPU: `AMD EPYC 9V74 80-Core Processor` +//! HOSTNAME: `runnervmkkn4f`, CPU: `AMD EPYC 9V74 80-Core Processor` //! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` // Executed Command: @@ -22,7 +22,7 @@ // --no-storage-info // --no-min-squares // --no-median-slopes -// --output=/tmp/tmp.T2PUHoFjkp +// --output=/tmp/tmp.qgCZt8Fuvj // --template=/home/runner/work/subtensor/subtensor/.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] @@ -52,84 +52,104 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `518` - // Estimated: `3983` - // Minimum execution time: 3_765_000 picoseconds. - Weight::from_parts(11_793_039, 3983) - // Standard Error: 1_715 - .saturating_add(Weight::from_parts(5_229_430, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) + // Measured: `553` + // Estimated: `4018` + // Minimum execution time: 3_085_000 picoseconds. + Weight::from_parts(10_412_939, 4018) + // Standard Error: 1_665 + .saturating_add(Weight::from_parts(6_113_512, 0).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn as_derivative() -> Weight { // Proof Size summary in bytes: - // Measured: `518` - // Estimated: `3983` - // Minimum execution time: 13_370_000 picoseconds. - Weight::from_parts(14_050_000, 3983) - .saturating_add(T::DbWeight::get().reads(2_u64)) + // Measured: `553` + // Estimated: `4018` + // Minimum execution time: 14_272_000 picoseconds. + Weight::from_parts(14_692_000, 4018) + .saturating_add(T::DbWeight::get().reads(4_u64)) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `518` - // Estimated: `3983` - // Minimum execution time: 3_755_000 picoseconds. - Weight::from_parts(3_744_581, 3983) - // Standard Error: 3_339 - .saturating_add(Weight::from_parts(5_492_086, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) + // Measured: `553` + // Estimated: `4018` + // Minimum execution time: 2_974_000 picoseconds. + Weight::from_parts(13_008_601, 4018) + // Standard Error: 2_553 + .saturating_add(Weight::from_parts(6_324_198, 0).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) } fn dispatch_as() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_478_000 picoseconds. - Weight::from_parts(5_698_000, 0) + // Minimum execution time: 4_357_000 picoseconds. + Weight::from_parts(4_607_000, 0) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `518` - // Estimated: `3983` - // Minimum execution time: 3_765_000 picoseconds. - Weight::from_parts(12_784_545, 3983) - // Standard Error: 1_553 - .saturating_add(Weight::from_parts(5_224_136, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(2_u64)) + // Measured: `553` + // Estimated: `4018` + // Minimum execution time: 3_065_000 picoseconds. + Weight::from_parts(8_478_454, 4018) + // Standard Error: 2_235 + .saturating_add(Weight::from_parts(6_086_236, 0).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) } fn dispatch_as_fallible() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_368_000 picoseconds. - Weight::from_parts(5_718_000, 0) + // Minimum execution time: 4_347_000 picoseconds. + Weight::from_parts(4_607_000, 0) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn if_else() -> Weight { // Proof Size summary in bytes: - // Measured: `518` - // Estimated: `3983` - // Minimum execution time: 18_738_000 picoseconds. - Weight::from_parts(19_048_000, 3983) - .saturating_add(T::DbWeight::get().reads(2_u64)) + // Measured: `553` + // Estimated: `4018` + // Minimum execution time: 20_410_000 picoseconds. + Weight::from_parts(20_871_000, 4018) + .saturating_add(T::DbWeight::get().reads(4_u64)) } } @@ -139,83 +159,103 @@ impl WeightInfo for () { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `518` - // Estimated: `3983` - // Minimum execution time: 3_765_000 picoseconds. - Weight::from_parts(11_793_039, 3983) - // Standard Error: 1_715 - .saturating_add(Weight::from_parts(5_229_430, 0).saturating_mul(c.into())) - .saturating_add(RocksDbWeight::get().reads(2_u64)) + // Measured: `553` + // Estimated: `4018` + // Minimum execution time: 3_085_000 picoseconds. + Weight::from_parts(10_412_939, 4018) + // Standard Error: 1_665 + .saturating_add(Weight::from_parts(6_113_512, 0).saturating_mul(c.into())) + .saturating_add(RocksDbWeight::get().reads(4_u64)) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn as_derivative() -> Weight { // Proof Size summary in bytes: - // Measured: `518` - // Estimated: `3983` - // Minimum execution time: 13_370_000 picoseconds. - Weight::from_parts(14_050_000, 3983) - .saturating_add(RocksDbWeight::get().reads(2_u64)) + // Measured: `553` + // Estimated: `4018` + // Minimum execution time: 14_272_000 picoseconds. + Weight::from_parts(14_692_000, 4018) + .saturating_add(RocksDbWeight::get().reads(4_u64)) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `518` - // Estimated: `3983` - // Minimum execution time: 3_755_000 picoseconds. - Weight::from_parts(3_744_581, 3983) - // Standard Error: 3_339 - .saturating_add(Weight::from_parts(5_492_086, 0).saturating_mul(c.into())) - .saturating_add(RocksDbWeight::get().reads(2_u64)) + // Measured: `553` + // Estimated: `4018` + // Minimum execution time: 2_974_000 picoseconds. + Weight::from_parts(13_008_601, 4018) + // Standard Error: 2_553 + .saturating_add(Weight::from_parts(6_324_198, 0).saturating_mul(c.into())) + .saturating_add(RocksDbWeight::get().reads(4_u64)) } fn dispatch_as() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_478_000 picoseconds. - Weight::from_parts(5_698_000, 0) + // Minimum execution time: 4_357_000 picoseconds. + Weight::from_parts(4_607_000, 0) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `518` - // Estimated: `3983` - // Minimum execution time: 3_765_000 picoseconds. - Weight::from_parts(12_784_545, 3983) - // Standard Error: 1_553 - .saturating_add(Weight::from_parts(5_224_136, 0).saturating_mul(c.into())) - .saturating_add(RocksDbWeight::get().reads(2_u64)) + // Measured: `553` + // Estimated: `4018` + // Minimum execution time: 3_065_000 picoseconds. + Weight::from_parts(8_478_454, 4018) + // Standard Error: 2_235 + .saturating_add(Weight::from_parts(6_086_236, 0).saturating_mul(c.into())) + .saturating_add(RocksDbWeight::get().reads(4_u64)) } fn dispatch_as_fallible() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_368_000 picoseconds. - Weight::from_parts(5_718_000, 0) + // Minimum execution time: 4_347_000 picoseconds. + Weight::from_parts(4_607_000, 0) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn if_else() -> Weight { // Proof Size summary in bytes: - // Measured: `518` - // Estimated: `3983` - // Minimum execution time: 18_738_000 picoseconds. - Weight::from_parts(19_048_000, 3983) - .saturating_add(RocksDbWeight::get().reads(2_u64)) + // Measured: `553` + // Estimated: `4018` + // Minimum execution time: 20_410_000 picoseconds. + Weight::from_parts(20_871_000, 4018) + .saturating_add(RocksDbWeight::get().reads(4_u64)) } } From f327d378fa783c7debd25d140c1f449548421cb9 Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Mon, 6 Jul 2026 13:36:15 +0100 Subject: [PATCH 14/63] Add sale offer calls to SubtensorCommonCalls --- runtime/src/proxy_filters/call_groups.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/runtime/src/proxy_filters/call_groups.rs b/runtime/src/proxy_filters/call_groups.rs index 6099b2ad65..5ac66d02d2 100644 --- a/runtime/src/proxy_filters/call_groups.rs +++ b/runtime/src/proxy_filters/call_groups.rs @@ -430,7 +430,7 @@ call_filter_group!( // Residual pallet-subtensor calls that no proxy needs to grant on their own: // weights, serving, delegate-take, alpha lock/burn/preferences, network // registration, childkey admin, account association, tempo control, voting -// power, root-claim admin, and lease teardown. +// power, root-claim admin, lease teardown, and subnet sale offers. call_filter_group!( SubtensorCommonCalls, [ @@ -471,6 +471,8 @@ call_filter_group!( RuntimeCall::SubtensorModule(SubtensorCall::sudo_set_min_childkey_take), RuntimeCall::SubtensorModule(SubtensorCall::sudo_set_max_childkey_take), RuntimeCall::SubtensorModule(SubtensorCall::terminate_lease), + RuntimeCall::SubtensorModule(SubtensorCall::create_sale_offer), + RuntimeCall::SubtensorModule(SubtensorCall::cancel_sale_offer), RuntimeCall::SubtensorModule(SubtensorCall::set_tempo), RuntimeCall::SubtensorModule(SubtensorCall::set_activity_cutoff_factor), RuntimeCall::SubtensorModule(SubtensorCall::trigger_epoch), From e97ff3a2299f49474469eaf81ec4292c92a0ba29 Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Mon, 6 Jul 2026 14:11:36 +0100 Subject: [PATCH 15/63] Sale offer creation excluded from every group and cancel as common --- runtime/src/proxy_filters/call_groups.rs | 12 +++++++-- runtime/src/proxy_filters/mod.rs | 33 ++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/runtime/src/proxy_filters/call_groups.rs b/runtime/src/proxy_filters/call_groups.rs index 5ac66d02d2..c713a10688 100644 --- a/runtime/src/proxy_filters/call_groups.rs +++ b/runtime/src/proxy_filters/call_groups.rs @@ -430,7 +430,7 @@ call_filter_group!( // Residual pallet-subtensor calls that no proxy needs to grant on their own: // weights, serving, delegate-take, alpha lock/burn/preferences, network // registration, childkey admin, account association, tempo control, voting -// power, root-claim admin, lease teardown, and subnet sale offers. +// power, root-claim admin, lease teardown, and sale-offer cancellation. call_filter_group!( SubtensorCommonCalls, [ @@ -471,7 +471,6 @@ call_filter_group!( RuntimeCall::SubtensorModule(SubtensorCall::sudo_set_min_childkey_take), RuntimeCall::SubtensorModule(SubtensorCall::sudo_set_max_childkey_take), RuntimeCall::SubtensorModule(SubtensorCall::terminate_lease), - RuntimeCall::SubtensorModule(SubtensorCall::create_sale_offer), RuntimeCall::SubtensorModule(SubtensorCall::cancel_sale_offer), RuntimeCall::SubtensorModule(SubtensorCall::set_tempo), RuntimeCall::SubtensorModule(SubtensorCall::set_activity_cutoff_factor), @@ -484,6 +483,14 @@ call_filter_group!( ] ); +// Listing an owned subnet for sale: an ownership/economic disposal (the offer's +// price/buyer become a pre-authorized sale once finalization lands), so it is +// granted by no proxy allowlist — only `Any` or the coldkey directly. +call_filter_group!( + SubnetSaleCalls, + [RuntimeCall::SubtensorModule(SubtensorCall::create_sale_offer),] +); + // Subnet parameters a subnet owner may set directly (the admin-utils calls // guarded by `ensure_sn_owner_or_root`). These are the genuine owner/lease // management surface, as opposed to the root-only `RootConfigCalls`. @@ -680,6 +687,7 @@ type SubtensorSplitCalls = ( SubnetIdentityCalls, SubnetActivationCalls, SubtensorCommonCalls, + SubnetSaleCalls, ); // admin-utils, split for the Owner and SubnetLeaseBeneficiary proxies. diff --git a/runtime/src/proxy_filters/mod.rs b/runtime/src/proxy_filters/mod.rs index df1d936066..d3368e01fe 100644 --- a/runtime/src/proxy_filters/mod.rs +++ b/runtime/src/proxy_filters/mod.rs @@ -309,6 +309,7 @@ mod tests { let denied = &(&group_calls::() | &group_calls::()) | &(&group_calls::() | &group_calls::()); + let denied = &denied | &group_calls::(); assert_eq!( allowed_calls(ProxyType::NonTransfer), &all_runtime_calls() - &denied @@ -323,6 +324,7 @@ mod tests { | &(&(&group_calls::() | &group_calls::()) | &(&group_calls::() | &group_calls::())); + let denied = &denied | &group_calls::(); assert_eq!( allowed_calls(ProxyType::NonFungible), &all_runtime_calls() - &denied @@ -334,6 +336,7 @@ mod tests { let denied = &(&(&group_calls::() | &group_calls::()) | &(&group_calls::() | &group_calls::())) | &group_calls::(); + let denied = &denied | &group_calls::(); assert_eq!( allowed_calls(ProxyType::NonCritical), &all_runtime_calls() - &denied @@ -531,6 +534,36 @@ mod tests { ); } + // Creating a sale offer is a disposal of the subnet, so no proxy but `Any` + // may do it; cancellation stays broadly available. + #[test] + fn sale_offer_creation_is_any_only() { + let create = "SubtensorModule::create_sale_offer"; + let cancel = "SubtensorModule::cancel_sale_offer"; + + for proxy_type in all_proxy_types() { + let allowed = allowed_calls(proxy_type); + if proxy_type == ProxyType::Any { + assert!(allowed.contains(create)); + } else { + assert!( + !allowed.contains(create), + "{:?} must not be able to create a sale offer", + proxy_type + ); + } + } + + // The broad proxies can still cancel an offer. + for proxy_type in [ + ProxyType::NonTransfer, + ProxyType::NonFungible, + ProxyType::NonCritical, + ] { + assert!(allowed_calls(proxy_type).contains(cancel)); + } + } + // The SmallTransfer / SudoUncheckedSetCode metadata must carry their // amount / nested-call constraints. #[test] From bf1b3c8e870cd1b23d72b4e54418ce35bf38cb4a Mon Sep 17 00:00:00 2001 From: Loris Moulin Date: Mon, 6 Jul 2026 14:17:10 +0100 Subject: [PATCH 16/63] cargo fmt --- runtime/src/proxy_filters/call_groups.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/runtime/src/proxy_filters/call_groups.rs b/runtime/src/proxy_filters/call_groups.rs index c713a10688..3989fd2819 100644 --- a/runtime/src/proxy_filters/call_groups.rs +++ b/runtime/src/proxy_filters/call_groups.rs @@ -488,7 +488,9 @@ call_filter_group!( // granted by no proxy allowlist — only `Any` or the coldkey directly. call_filter_group!( SubnetSaleCalls, - [RuntimeCall::SubtensorModule(SubtensorCall::create_sale_offer),] + [RuntimeCall::SubtensorModule( + SubtensorCall::create_sale_offer + ),] ); // Subnet parameters a subnet owner may set directly (the admin-utils calls From 0436159fe06b7c6a95da7a48d459523eaab04d74 Mon Sep 17 00:00:00 2001 From: UnArbosFive Date: Fri, 17 Jul 2026 03:39:32 +0200 Subject: [PATCH 17/63] fix stable PyPI publication retries --- .github/scripts/classify-runtime-changes.sh | 2 +- .github/scripts/prepare-sdk-dist.py | 30 ++++ .github/scripts/test-runtime-change-filter.sh | 2 + .github/scripts/test_prepare_sdk_dist.py | 43 ++++++ .github/workflows/runtime-checks.yml | 1 + .github/workflows/watch-mainnet-release.yml | 136 +++++++++++++----- docs/internals/release-process.mdx | 13 +- 7 files changed, 185 insertions(+), 42 deletions(-) create mode 100644 .github/scripts/prepare-sdk-dist.py create mode 100644 .github/scripts/test_prepare_sdk_dist.py diff --git a/.github/scripts/classify-runtime-changes.sh b/.github/scripts/classify-runtime-changes.sh index 521142e17f..a9fb37c275 100755 --- a/.github/scripts/classify-runtime-changes.sh +++ b/.github/scripts/classify-runtime-changes.sh @@ -40,7 +40,7 @@ while IFS= read -r path; do esac case "$path" in - sdk/python/*|sdk/bittensor-core/*|sdk/bittensor-core-py/*|sdk/bittensor-core-wasm/*|Cargo.lock|.github/workflows/runtime-checks.yml) + sdk/python/*|sdk/bittensor-core/*|sdk/bittensor-core-py/*|sdk/bittensor-core-wasm/*|Cargo.lock|.github/workflows/runtime-checks.yml|.github/scripts/prepare-sdk-dist.py|.github/scripts/test_prepare_sdk_dist.py) python_sdk=true ;; esac diff --git a/.github/scripts/prepare-sdk-dist.py b/.github/scripts/prepare-sdk-dist.py new file mode 100644 index 0000000000..2411d24eb6 --- /dev/null +++ b/.github/scripts/prepare-sdk-dist.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python3 +"""Stamp the SDK's committed development version for a stable PyPI build.""" + +from __future__ import annotations + +import re +from pathlib import Path + + +def main() -> None: + root = Path("sdk/python") + manifest = root / "pyproject.toml" + text = manifest.read_text() + match = re.search(r'^version = "([0-9]+\.[0-9]+\.[0-9]+)\.dev0"$', text, flags=re.M) + if match is None: + raise SystemExit("SDK manifest must declare version X.Y.Z.dev0") + version = match.group(1) + text = text[: match.start()] + f'version = "{version}"' + text[match.end() :] + + # These are monorepo-only development inputs. They must not appear in an + # extracted sdist, where the sibling path and development lock do not exist. + text, count = re.subn(r"\n\[tool\.uv\.sources\]\n.*?(?=\n\[|\Z)", "\n", text, flags=re.S) + if count != 1: + raise SystemExit("tool.uv.sources table not found") + manifest.write_text(text) + (root / "uv.lock").unlink(missing_ok=True) + + +if __name__ == "__main__": + main() diff --git a/.github/scripts/test-runtime-change-filter.sh b/.github/scripts/test-runtime-change-filter.sh index 8ee778d3cb..95eb5cf4a6 100755 --- a/.github/scripts/test-runtime-change-filter.sh +++ b/.github/scripts/test-runtime-change-filter.sh @@ -33,6 +33,8 @@ assert_classification .github/workflows/refresh-mainnet-snapshot.yml "$runtime_a assert_classification .github/workflows/runtime-checks.yml "$runtime_and_snapshot" assert_classification website/apps/bittensor-website/scripts/generate-metadata.mjs "$runtime_and_docs" assert_classification sdk/bittensor-core/src/lib.rs "$python_only" +assert_classification .github/scripts/prepare-sdk-dist.py "$python_only" +assert_classification .github/scripts/test_prepare_sdk_dist.py "$python_only" assert_classification Cargo.lock "$python_only" assert_classification rust-toolchain.toml "$runtime_and_sdk" assert_classification $'README.md\nsdk/python/example.py' "$docs_and_python" diff --git a/.github/scripts/test_prepare_sdk_dist.py b/.github/scripts/test_prepare_sdk_dist.py new file mode 100644 index 0000000000..041b774722 --- /dev/null +++ b/.github/scripts/test_prepare_sdk_dist.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +from __future__ import annotations + +import re +import shutil +import subprocess +import sys +import tempfile +import unittest +from pathlib import Path + + +class PrepareSdkDistributionTests(unittest.TestCase): + def test_stamps_stable_version_and_removes_monorepo_inputs(self) -> None: + repository = Path(__file__).resolve().parents[2] + script = Path(__file__).with_name("prepare-sdk-dist.py") + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + package = root / "sdk/python" + package.mkdir(parents=True) + source_manifest = repository / "sdk/python/pyproject.toml" + source_text = source_manifest.read_text() + version = re.search( + r'^version = "([0-9]+\.[0-9]+\.[0-9]+)\.dev0"$', source_text, flags=re.M + ) + self.assertIsNotNone(version) + shutil.copy(source_manifest, package / "pyproject.toml") + shutil.copy(repository / "sdk/python/uv.lock", package / "uv.lock") + subprocess.run( + [sys.executable, str(script)], + cwd=root, + check=True, + ) + + manifest = (package / "pyproject.toml").read_text() + self.assertIn(f'version = "{version.group(1)}"', manifest) + self.assertNotIn("[tool.uv.sources]", manifest) + self.assertFalse((package / "uv.lock").exists()) + + +if __name__ == "__main__": + unittest.main() diff --git a/.github/workflows/runtime-checks.yml b/.github/workflows/runtime-checks.yml index a5e9f100e6..358843291a 100644 --- a/.github/workflows/runtime-checks.yml +++ b/.github/workflows/runtime-checks.yml @@ -439,6 +439,7 @@ jobs: - name: SDK offline checks (same as just check) working-directory: sdk/python run: | + python3 ../../.github/scripts/test_prepare_sdk_dist.py uv sync --locked --all-extras --dev uv run ruff check . uv run ruff format --check . diff --git a/.github/workflows/watch-mainnet-release.yml b/.github/workflows/watch-mainnet-release.yml index 3ee09e50a9..640e56bd93 100644 --- a/.github/workflows/watch-mainnet-release.yml +++ b/.github/workflows/watch-mainnet-release.yml @@ -2,8 +2,9 @@ name: Watch Mainnet Release # The mainnet upgrade is executed by the triumvirate signing the multisig # proposal submitted by the release train (release-train.yml). This watcher -# polls the chain; once the on-chain spec_version matches main and no -# release exists for it yet, it cuts the release: +# polls the chain; once an upgrade executes, it cuts the release. Stable Python +# publication has its own completion marker so a later run can retry a failed +# or partial PyPI upload even when the GitHub release already exists: # 1. GitHub release v, with the srtool wasm + digest and # multisig call data from the release train attached as assets # 2. Docker images via explicit dispatch of docker.yml and @@ -40,17 +41,20 @@ jobs: contents: read actions: read # list/download the release-train artifact outputs: - ready: ${{ steps.compare.outputs.ready }} + release_needed: ${{ steps.compare.outputs.release_needed }} + python_needed: ${{ steps.compare.outputs.python_needed }} spec_version: ${{ steps.compare.outputs.spec_version }} sha: ${{ steps.compare.outputs.sha }} steps: - uses: actions/checkout@v4 - - name: Compare spec versions and existing releases + - name: Compare mainnet with release state id: compare env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | + set -euo pipefail + local_spec=$(grep -Eo 'spec_version: *[0-9]+' runtime/src/lib.rs | head -n 1 | grep -Eo '[0-9]+') : ${local_spec:?could not parse spec_version from runtime/src/lib.rs} @@ -58,54 +62,86 @@ jobs: -d '{"id":1,"jsonrpc":"2.0","method":"state_getRuntimeVersion","params":[]}' \ "$MAINNET_HTTP" | jq -r '.result.specVersion') : ${chain_spec:?could not fetch chain spec_version} + [[ "$local_spec" =~ ^[0-9]+$ && "$chain_spec" =~ ^[0-9]+$ ]] \ + || { echo "spec_version values must be integers"; exit 1; } echo "main spec_version: $local_spec" echo "on-chain spec_version: $chain_spec" - echo "spec_version=$local_spec" >> $GITHUB_OUTPUT - - if [[ "$chain_spec" != "$local_spec" ]]; then - echo "Upgrade not executed yet (or main is ahead); nothing to do." - echo "ready=false" >> $GITHUB_OUTPUT + if [ "$chain_spec" -gt "$local_spec" ]; then + echo "Main does not contain the on-chain runtime yet; refusing to publish." + echo "release_needed=false" >> "$GITHUB_OUTPUT" + echo "python_needed=false" >> "$GITHUB_OUTPUT" exit 0 fi + echo "spec_version=$chain_spec" >> "$GITHUB_OUTPUT" # Match both this workflow's tags (v424) and the legacy scheme - # inherited from upstream (v3.4.9-424) so an already-released - # runtime is never released twice. Pre-releases don't count: the - # release train publishes the proposal as a pre-release v, - # which this workflow promotes to the final release below. + # inherited from upstream (v3.4.9-424). Pre-releases do not count. if gh release list --repo "$GITHUB_REPOSITORY" --limit 300 \ --json tagName,isPrerelease \ --jq '.[] | select(.isPrerelease | not) | .tagName' \ - | grep -Eq "^v${local_spec}$|-${local_spec}$"; then - echo "A release for spec_version $local_spec already exists; nothing to do." - echo "ready=false" >> $GITHUB_OUTPUT + | grep -Eq "^v${chain_spec}$|-${chain_spec}$"; then + echo "GitHub release for spec_version $chain_spec is complete." + release_needed=false + else + release_needed=true + fi + + # v432 and earlier predate this marker. Every later + # release retries until PyPI succeeds and this exact marker is stored. + if [ "$chain_spec" -le 432 ]; then + echo "v432 Python publication is handled manually." + python_needed=false + else + marker_id=$(gh api "repos/$GITHUB_REPOSITORY/releases/tags/v${chain_spec}" \ + --jq '.assets[] | select(.name == "python-publish-complete.json") | .id' \ + 2>/dev/null | head -n 1 || true) + if [ -z "$marker_id" ]; then + python_needed=true + else + gh api -H "Accept: application/octet-stream" \ + "repos/$GITHUB_REPOSITORY/releases/assets/$marker_id" \ + > /tmp/python-publish-complete.json + tag_sha=$(gh api "repos/$GITHUB_REPOSITORY/commits/v${chain_spec}" --jq '.sha') + jq -e --arg sha "$tag_sha" --argjson spec "$chain_spec" \ + '.schema == 1 and .spec_version == $spec and .commit == $sha' \ + /tmp/python-publish-complete.json >/dev/null \ + || { echo "invalid Python publish marker for v${chain_spec}"; exit 1; } + echo "Stable Python packages are already published." + python_needed=false + fi + fi + echo "release_needed=$release_needed" >> "$GITHUB_OUTPUT" + echo "python_needed=$python_needed" >> "$GITHUB_OUTPUT" + + # A valid marker is the durable terminal state. Resolve the expiring + # workflow artifact only while release or Python work is pending. + if [ "$release_needed" = false ] && [ "$python_needed" = false ]; then exit 0 fi - # Use the commit recorded by the release train, not HEAD — main may - # have advanced with docs-only merges after the multisig proposal. - # Resolve the artifact through the provenance gate: fork PRs can plant - # a `mainnet-upgrade-` artifact in this repo's store, and this - # commit is what we later publish to PyPI/crates.io and push to - # `mainnet`, so it must come from a push of release-train.yml to main. - artifact_id=$(.github/scripts/resolve-release-artifact.sh "$local_spec") - : ${artifact_id:?no trustworthy mainnet-upgrade-${local_spec} artifact found — did the release train run?} + # Resolve what actually runs on chain, not HEAD: main can advance + # while a multisig waits for its final signature. The provenance gate + # admits artifacts only from release-train.yml pushes to main. + artifact_id=$(.github/scripts/resolve-release-artifact.sh "$chain_spec") + : ${artifact_id:?no trustworthy mainnet-upgrade-${chain_spec} artifact found — did the release train run?} + rm -rf /tmp/release-artifact /tmp/release-artifact.zip gh api "repos/$GITHUB_REPOSITORY/actions/artifacts/${artifact_id}/zip" > /tmp/release-artifact.zip unzip -o /tmp/release-artifact.zip -d /tmp/release-artifact release_sha=$(jq -r '.commit' /tmp/release-artifact/pending-release.json) : ${release_sha:?pending-release.json missing commit field} + expected_spec=$(jq -er '.expected_spec_version | numbers' \ + /tmp/release-artifact/pending-release.json) + [ "$expected_spec" = "$chain_spec" ] \ + || { echo "artifact expects spec $expected_spec, chain runs $chain_spec"; exit 1; } echo "Release train commit: $release_sha" - echo "sha=$release_sha" >> $GITHUB_OUTPUT - - echo "Chain is upgraded to $local_spec and no release exists yet." - echo "ready=true" >> $GITHUB_OUTPUT + echo "sha=$release_sha" >> "$GITHUB_OUTPUT" release: name: Cut GitHub release needs: check - if: needs.check.outputs.ready == 'true' + if: needs.check.outputs.release_needed == 'true' runs-on: [self-hosted, fireactions-turbo-8] # MIRROR_DEPLOY_KEY lives in the mainnet environment secrets; one # approval of the run covers this and the publish jobs below. @@ -195,7 +231,7 @@ jobs: publish-docker: name: Dispatch Docker image publishing needs: [check, release] - if: needs.check.outputs.ready == 'true' + if: needs.check.outputs.release_needed == 'true' runs-on: [self-hosted, fireactions-turbo-8] permissions: actions: write @@ -213,26 +249,30 @@ jobs: --repo "$GITHUB_REPOSITORY" --ref "$tag" -f branch-or-tag="$tag" # Full platform matrix (manylinux x86_64/aarch64, macOS arm64/x86_64, - # sdist) at the released commit; the committed version is published as-is. + # sdist) at the released commit; the SDK's committed .dev0 is stamped stable. build-core: name: Build bittensor-core wheels - needs: [check, release] - if: needs.check.outputs.ready == 'true' + needs: check + if: needs.check.outputs.python_needed == 'true' uses: ./.github/workflows/build-core-wheels.yml with: ref: ${{ needs.check.outputs.sha }} publish-sdk: - name: Publish Python SDK to PyPI + name: Publish Python packages to PyPI needs: [check, release, build-core] - if: needs.check.outputs.ready == 'true' + if: >- + always() && + needs.check.outputs.python_needed == 'true' && + needs.build-core.result == 'success' && + (needs.release.result == 'success' || needs.release.result == 'skipped') runs-on: [self-hosted, fireactions-turbo-8] # PyPI trusted publishing (OIDC); publishers for `bittensor` and # bittensor-core are registered against this workflow + mainnet environment. environment: mainnet permissions: id-token: write - contents: read + contents: write # attach the durable completion marker to the release steps: - uses: actions/checkout@v4 with: @@ -250,6 +290,9 @@ jobs: path: dist merge-multiple: true + - name: Prepare stable SDK distribution + run: python3 .github/scripts/prepare-sdk-dist.py + - name: Build SDK wheel and sdist working-directory: sdk/python run: uv build --out-dir ../../dist @@ -271,10 +314,27 @@ jobs: uv publish --trusted-publishing always \ --check-url https://pypi.org/simple/ dist/* + # This is the only durable state for Python publication. It is written + # after uv reports that every distribution was uploaded or already exists. + - name: Record successful Python publication + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_SHA: ${{ needs.check.outputs.sha }} + SPEC_VERSION: ${{ needs.check.outputs.spec_version }} + run: | + jq -n \ + --arg sha "$RELEASE_SHA" \ + --argjson spec "$SPEC_VERSION" \ + --arg workflow_run "$GITHUB_RUN_ID" \ + '{schema: 1, spec_version: $spec, commit: $sha, workflow_run: $workflow_run}' \ + > python-publish-complete.json + gh release upload "v${SPEC_VERSION}" --repo "$GITHUB_REPOSITORY" --clobber \ + python-publish-complete.json + publish-crates: name: Publish Rust crates to crates.io needs: [check, release] - if: needs.check.outputs.ready == 'true' + if: needs.check.outputs.release_needed == 'true' runs-on: [self-hosted, fireactions-turbo-8] environment: mainnet steps: @@ -310,7 +370,7 @@ jobs: promote-website: name: Deploy production website and docs needs: [check, release] - if: needs.check.outputs.ready == 'true' + if: needs.check.outputs.release_needed == 'true' runs-on: [self-hosted, fireactions-turbo-8] environment: mainnet steps: diff --git a/docs/internals/release-process.mdx b/docs/internals/release-process.mdx index a9cab71cff..f035c5eecd 100644 --- a/docs/internals/release-process.mdx +++ b/docs/internals/release-process.mdx @@ -74,9 +74,9 @@ running your runtime with a public endpoint ## The release watcher -`watch-mainnet-release.yml` polls mainnet every 10 minutes. When the on-chain -`spec_version` matches the `main` branch and no GitHub release exists for it -yet, it cuts the release train's artifacts: +`watch-mainnet-release.yml` polls mainnet every 10 minutes. When an upgrade +executes, it resolves the release-train artifact for the `spec_version` +actually running on chain and cuts the release: 1. **GitHub release** `v` 2. **Production Docker images** tagged `v` and `latest` @@ -89,6 +89,13 @@ yet, it cuts the release train's artifacts: This ordering means the release always reflects what is *actually running on mainnet*, not what was merged. +Stable Python publication has an independent completion marker attached to the +GitHub release. The marker is written only after PyPI accepts every SDK and +`bittensor-core` distribution, so a failed or partial upload is retried on the +next watcher run even if the GitHub release already exists. The SDK's committed +`X.Y.Z.dev0` version is stamped to `X.Y.Z` for this build. The already-deployed +v432 release predates the marker and is recovered manually. + The watcher explicitly dispatches `docker.yml` and `docker-localnet.yml` because releases created with the default `GITHUB_TOKEN` do not emit another workflow event. The production build publishes both the immutable release tag From f64aa5e8f206f0c45ff1d8e476c7a27640fecb1a Mon Sep 17 00:00:00 2001 From: UnArbosFive Date: Tue, 21 Jul 2026 14:48:48 +0200 Subject: [PATCH 18/63] ci: publish main Docker image on merge --- .github/workflows/docker.yml | 13 +++++++------ docs/internals/release-process.mdx | 9 ++++++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 2132bc0829..ed59a983eb 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,16 +1,17 @@ name: Publish Docker Image -# Node images publish when a network mirror moves, on runtime releases, and on -# demand. Releases cut by watch-mainnet-release.yml use the default -# GITHUB_TOKEN, which never emits `release: published`; the watcher therefore -# dispatches this workflow directly with the release tag. Release-version tags -# (vN) move :latest; network mirror tags do not. +# Node images publish whenever main or a network mirror moves, on runtime +# releases, and on demand. Main advances the development-facing :main tag. +# Releases cut by watch-mainnet-release.yml use the default GITHUB_TOKEN, which +# never emits `release: published`; the watcher therefore dispatches this +# workflow directly with the release tag. Release-version tags (vN) move +# :latest; branch tags do not. on: release: types: [published] push: - branches: [devnet, testnet] + branches: [main, devnet, testnet] workflow_dispatch: inputs: tag: diff --git a/docs/internals/release-process.mdx b/docs/internals/release-process.mdx index d7abc97483..40ea761b9a 100644 --- a/docs/internals/release-process.mdx +++ b/docs/internals/release-process.mdx @@ -92,9 +92,12 @@ mainnet*, not what was merged. The watcher explicitly dispatches `docker.yml` and `docker-localnet.yml` because releases created with the default `GITHUB_TOKEN` do not emit another workflow event. The production build publishes both the immutable release tag -and `:latest`. The localnet build publishes the immutable release tag in its -separate package; localnet `:latest` remains an alias for the current `:main` -branch image, while `:devnet` and `:testnet` follow their respective branches. +and `:latest`. Independently, every merge to `main` publishes the moving +production `:main` tag, so developers can prepare against merged features +before they reach mainnet without changing the deployed `:latest` image. The +localnet build publishes the immutable release tag in its separate package; +localnet `:latest` remains an alias for the current `:main` branch image, while +`:devnet` and `:testnet` follow their respective branches. ## Hotfixes From 74f2b7114e291cb889dd669d3cfacc790ef04801 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Tue, 21 Jul 2026 09:23:36 -0700 Subject: [PATCH 19/63] Add staking precompile views --- precompiles/src/solidity/stakingV2.abi | 49 ++++++ precompiles/src/solidity/stakingV2.sol | 33 +++- precompiles/src/staking.rs | 174 +++++++++++++++++++- runtime/src/lib.rs | 2 +- sdk/python/bittensor/evm/abi/stakingV2.json | 49 ++++++ ts-tests/utils/evm-config.ts | 49 ++++++ 6 files changed, 352 insertions(+), 4 deletions(-) diff --git a/precompiles/src/solidity/stakingV2.abi b/precompiles/src/solidity/stakingV2.abi index 69c1e339f2..80d586582a 100644 --- a/precompiles/src/solidity/stakingV2.abi +++ b/precompiles/src/solidity/stakingV2.abi @@ -92,6 +92,42 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "coldkey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "netuid", + "type": "uint256" + } + ], + "name": "getStakeInfoForColdkeyAndNetuid", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "hotkey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "stake", + "type": "uint256" + } + ], + "internalType": "struct IStaking.StakeInfo[]", + "name": "positions", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -196,6 +232,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "getStakeOperationThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { diff --git a/precompiles/src/solidity/stakingV2.sol b/precompiles/src/solidity/stakingV2.sol index 7cc3c89a7c..c35559ed54 100644 --- a/precompiles/src/solidity/stakingV2.sol +++ b/precompiles/src/solidity/stakingV2.sol @@ -3,6 +3,12 @@ pragma solidity ^0.8.0; address constant ISTAKING_ADDRESS = 0x0000000000000000000000000000000000000805; interface IStaking { + /// A coldkey's non-zero alpha stake position on a subnet. + struct StakeInfo { + bytes32 hotkey; + uint256 stake; + } + /** * @dev Adds a subtensor stake `amount` associated with the `hotkey`. * @@ -151,6 +157,19 @@ interface IStaking { uint256 netuid ) external view returns (uint256); + /** + * @dev Returns the coldkey's non-zero alpha stake positions on `netuid`. + * Hotkeys with no stake on that subnet are omitted. + * + * @param coldkey The coldkey public key (32 bytes). + * @param netuid The subnet to query. + * @return positions The coldkey's hotkeys and alpha stake amounts on `netuid`. + */ + function getStakeInfoForColdkeyAndNetuid( + bytes32 coldkey, + uint256 netuid + ) external view returns (StakeInfo[] memory positions); + /** * @dev Delegates staking to a proxy account. * @@ -205,6 +224,18 @@ interface IStaking { */ function getNominatorMinRequiredStake() external view returns (uint256); + /** + * @dev Returns the runtime-configured base TAO threshold used by stake operations. + * Depending on the operation, fees, price conversion, and full-unstake rules + * can make the exact accepted input differ from this base value. + * + * @return threshold The current DefaultMinStake value in rao. + */ + function getStakeOperationThreshold() + external + view + returns (uint256 threshold); + /** * @dev Adds a subtensor stake `amount` associated with the `hotkey` within a price limit. * @@ -340,7 +371,7 @@ interface IStaking { function allowance( address sourceAddress, address spenderAddress, - uint256 netuid, + uint256 netuid ) external view returns (uint256); /** diff --git a/precompiles/src/staking.rs b/precompiles/src/staking.rs index 554115ddf0..01ff6da22e 100644 --- a/precompiles/src/staking.rs +++ b/precompiles/src/staking.rs @@ -35,7 +35,7 @@ use core::marker::PhantomData; use frame_support::Blake2_128Concat; use frame_support::dispatch::{DispatchInfo, GetDispatchInfo, PostDispatchInfo}; use frame_support::pallet_prelude::{StorageDoubleMap, ValueQuery}; -use frame_support::traits::{IsSubType, StorageInstance}; +use frame_support::traits::{Get, IsSubType, StorageInstance}; use frame_system::RawOrigin; use pallet_evm::{ AddressMapping, BalanceConverter, EvmBalance, ExitError, PrecompileFailure, PrecompileHandle, @@ -51,6 +51,11 @@ use subtensor_runtime_common::{NetUid, ProxyType, Token}; use crate::{PrecompileExt, PrecompileHandleExt}; +// `get_stake_for_hotkey_and_coldkey_on_subnet` reads the transitional V1/V2 +// share storage. In the V2 fallback case it performs two reads for the initial +// share lookup, then five more for the value, share, and denominator. +const STAKE_INFO_READS_PER_HOTKEY: u64 = 7; + /// Prefix for the Allowances map in Substrate storage. pub struct AllowancesPrefix; impl StorageInstance for AllowancesPrefix { @@ -340,6 +345,42 @@ where Ok(u64::from(stake).into()) } + #[precompile::public("getStakeInfoForColdkeyAndNetuid(bytes32,uint256)")] + #[precompile::view] + fn get_stake_info_for_coldkey_and_netuid( + handle: &mut impl PrecompileHandle, + coldkey: H256, + netuid: U256, + ) -> EvmResult> { + let coldkey = R::AccountId::from(coldkey.0); + let netuid = NetUid::from(try_u16_from_u256(netuid)?); + + handle.record_db_reads::(1)?; + let hotkeys = pallet_subtensor::Pallet::::get_all_staked_hotkeys(&coldkey); + + // Charge the conservative V2 fallback cost before doing any per-hotkey + // lookups, so a caller with insufficient gas fails before the loop. + let hotkey_count: u64 = hotkeys.len().unique_saturated_into(); + handle.record_db_reads::(hotkey_count.saturating_mul(STAKE_INFO_READS_PER_HOTKEY))?; + + Ok(hotkeys + .into_iter() + .filter_map(|hotkey| { + let stake = + pallet_subtensor::Pallet::::get_stake_for_hotkey_and_coldkey_on_subnet( + &hotkey, &coldkey, netuid, + ) + .to_u64(); + if stake == 0 { + return None; + } + + let hotkey: [u8; 32] = hotkey.into(); + Some((hotkey.into(), stake.into())) + }) + .collect()) + } + #[precompile::public("getAlphaStakedValidators(bytes32,uint256)")] #[precompile::view] fn get_alpha_staked_validators( @@ -389,6 +430,14 @@ where Ok(stake.into()) } + #[precompile::public("getStakeOperationThreshold()")] + #[precompile::view] + fn get_stake_operation_threshold(_handle: &mut impl PrecompileHandle) -> EvmResult { + Ok(pallet_subtensor::DefaultMinStake::::get() + .to_u64() + .into()) + } + #[precompile::public("addProxy(bytes32)")] #[precompile::payable] fn add_proxy(handle: &mut impl PrecompileHandle, delegate: H256) -> EvmResult<()> { @@ -942,6 +991,7 @@ mod tests { execute_precompile, fund_account, mapped_account, new_test_ext, precompiles, selector_u32, substrate_to_evm, }; + use precompile_utils::prelude::RuntimeHelper; use precompile_utils::solidity::{encode_return_value, encode_with_selector}; use precompile_utils::testing::PrecompileTesterExt; use sp_core::{H160, H256}; @@ -949,6 +999,7 @@ mod tests { use subtensor_runtime_common::{AlphaBalance, TaoBalance}; const TEST_NETUID_U16: u16 = 1; + const SECOND_NETUID_U16: u16 = 2; const INVALID_NETUID_U16: u16 = 12_345; const TEMPO: u16 = 100; const RESERVE_TAO: u64 = 200_000_000_000; @@ -962,7 +1013,11 @@ mod tests { const ALLOWANCE_DECREASE_RAO: u64 = 2_000_000_000; fn setup_staking_subnet() -> NetUid { - let netuid = NetUid::from(TEST_NETUID_U16); + setup_staking_subnet_id(TEST_NETUID_U16) + } + + fn setup_staking_subnet_id(netuid: u16) -> NetUid { + let netuid = NetUid::from(netuid); pallet_subtensor::Pallet::::init_new_network(netuid, TEMPO); pallet_subtensor::Pallet::::set_network_registration_allowed(netuid, true); pallet_subtensor::Pallet::::set_max_allowed_uids(netuid, 4096); @@ -978,6 +1033,12 @@ mod tests { netuid } + fn stake_info_cost(hotkey_count: usize) -> u64 { + let hotkey_count = u64::try_from(hotkey_count).expect("hotkey count fits in u64"); + let reads = 1u64.saturating_add(hotkey_count.saturating_mul(STAKE_INFO_READS_PER_HOTKEY)); + RuntimeHelper::::db_read_gas_cost().saturating_mul(reads) + } + fn hotkey() -> AccountId { AccountId::from([0x11; 32]) } @@ -1106,6 +1167,115 @@ mod tests { ); } + #[test] + fn staking_precompile_v2_returns_non_zero_stake_positions_for_requested_subnet() { + new_test_ext().execute_with(|| { + let netuid = setup_staking_subnet(); + setup_staking_subnet_id(SECOND_NETUID_U16); + let caller = addr_from_index(0x1101); + let coldkey = mapped_account(caller); + let hotkey_a = AccountId::from([0x31; 32]); + let hotkey_b = AccountId::from([0x32; 32]); + let hotkey_c = AccountId::from([0x33; 32]); + + fund_account(&coldkey, COLDKEY_BALANCE); + add_stake_v2(caller, &hotkey_a, TEST_NETUID_U16, INITIAL_STAKE_RAO); + add_stake_v2(caller, &hotkey_b, SECOND_NETUID_U16, INITIAL_STAKE_RAO); + add_stake_v2(caller, &hotkey_c, TEST_NETUID_U16, INITIAL_STAKE_RAO); + + let hotkeys = pallet_subtensor::Pallet::::get_all_staked_hotkeys(&coldkey); + let expected: Vec<(H256, U256)> = hotkeys + .iter() + .filter_map(|hotkey| { + let stake = stake_for(hotkey, &coldkey, netuid); + (stake > 0).then(|| (H256::from_slice(hotkey.as_ref()), U256::from(stake))) + }) + .collect(); + assert_eq!(expected.len(), 2); + + precompiles::>() + .prepare_test( + caller, + addr_from_index(StakingPrecompileV2::::INDEX), + encode_with_selector( + selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256)"), + ( + H256::from_slice(coldkey.as_ref()), + U256::from(TEST_NETUID_U16), + ), + ), + ) + .with_static_call(true) + .expect_cost(stake_info_cost(hotkeys.len())) + .execute_returns_raw(encode_return_value(expected)); + }); + } + + #[test] + fn staking_precompile_v2_returns_empty_stake_info_for_unknown_coldkey() { + new_test_ext().execute_with(|| { + setup_staking_subnet(); + let caller = addr_from_index(0x1102); + let coldkey = AccountId::from([0x41; 32]); + + precompiles::>() + .prepare_test( + caller, + addr_from_index(StakingPrecompileV2::::INDEX), + encode_with_selector( + selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256)"), + ( + H256::from_slice(coldkey.as_ref()), + U256::from(TEST_NETUID_U16), + ), + ), + ) + .with_static_call(true) + .expect_cost(stake_info_cost(0)) + .execute_returns_raw(encode_return_value(Vec::<(H256, U256)>::new())); + }); + } + + #[test] + fn staking_precompile_v2_rejects_out_of_range_stake_info_netuid() { + new_test_ext().execute_with(|| { + let caller = addr_from_index(0x1103); + let coldkey = AccountId::from([0x42; 32]); + let invalid_netuid = U256::from(u32::from(u16::MAX) + 1); + + let result = execute_precompile( + &precompiles::>(), + addr_from_index(StakingPrecompileV2::::INDEX), + caller, + encode_with_selector( + selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256)"), + (H256::from_slice(coldkey.as_ref()), invalid_netuid), + ), + U256::zero(), + ) + .expect("staking V2 call routes to the precompile"); + + assert!(result.is_err()); + }); + } + + #[test] + fn staking_precompile_v2_returns_current_stake_operation_threshold() { + new_test_ext().execute_with(|| { + let threshold = pallet_subtensor::DefaultMinStake::::get(); + + precompiles::>() + .prepare_test( + addr_from_index(0x1104), + addr_from_index(StakingPrecompileV2::::INDEX), + encode_with_selector(selector_u32("getStakeOperationThreshold()"), ()), + ) + .with_static_call(true) + .expect_cost(0) + .execute_returns(U256::from(threshold.to_u64())); + }); + } + #[test] fn staking_precompile_v1_add_stake_and_reads_match_runtime_state() { new_test_ext().execute_with(|| { diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index e4e3a1a35b..9fb9812f7c 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -235,7 +235,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 432, + spec_version: 433, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, diff --git a/sdk/python/bittensor/evm/abi/stakingV2.json b/sdk/python/bittensor/evm/abi/stakingV2.json index 69c1e339f2..80d586582a 100644 --- a/sdk/python/bittensor/evm/abi/stakingV2.json +++ b/sdk/python/bittensor/evm/abi/stakingV2.json @@ -92,6 +92,42 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "coldkey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "netuid", + "type": "uint256" + } + ], + "name": "getStakeInfoForColdkeyAndNetuid", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "hotkey", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "stake", + "type": "uint256" + } + ], + "internalType": "struct IStaking.StakeInfo[]", + "name": "positions", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -196,6 +232,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "getStakeOperationThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { diff --git a/ts-tests/utils/evm-config.ts b/ts-tests/utils/evm-config.ts index 7ea940d572..9b782d4757 100644 --- a/ts-tests/utils/evm-config.ts +++ b/ts-tests/utils/evm-config.ts @@ -162,6 +162,42 @@ export const IStakingV2ABI = [ stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "bytes32", + name: "coldkey", + type: "bytes32", + }, + { + internalType: "uint256", + name: "netuid", + type: "uint256", + }, + ], + name: "getStakeInfoForColdkeyAndNetuid", + outputs: [ + { + components: [ + { + internalType: "bytes32", + name: "hotkey", + type: "bytes32", + }, + { + internalType: "uint256", + name: "stake", + type: "uint256", + }, + ], + internalType: "struct IStaking.StakeInfo[]", + name: "positions", + type: "tuple[]", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { @@ -290,6 +326,19 @@ export const IStakingV2ABI = [ stateMutability: "view", type: "function", }, + { + inputs: [], + name: "getStakeOperationThreshold", + outputs: [ + { + internalType: "uint256", + name: "threshold", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { From 441a3c811cb064fb53308edcaa53eb015cf26c9e Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Tue, 21 Jul 2026 10:10:19 -0700 Subject: [PATCH 20/63] fix log decoding --- Cargo.lock | 64 ++++++++++++++++++++++++++++++++++++------------------ Cargo.toml | 4 +++- 2 files changed, 46 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8b6486ba4e..b567210e9f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2090,7 +2090,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" dependencies = [ "memchr", - "regex-automata", + "regex-automata 0.4.11", "serde", ] @@ -4431,7 +4431,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -8102,11 +8102,11 @@ dependencies = [ [[package]] name = "matchers" -version = "0.2.0" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] @@ -8918,11 +8918,12 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.50.3" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ - "windows-sys 0.59.0", + "overload", + "winapi", ] [[package]] @@ -9226,6 +9227,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + [[package]] name = "pallet-admin-utils" version = "4.0.0-dev" @@ -11256,7 +11263,7 @@ dependencies = [ "tle", "tracing", "tracing-log", - "tracing-subscriber 0.3.20", + "tracing-subscriber 0.3.19", "w3f-bls 0.1.3", ] @@ -13865,7 +13872,7 @@ dependencies = [ "rand 0.9.4", "rand_chacha 0.9.0", "rand_xorshift", - "regex-syntax", + "regex-syntax 0.8.6", "rusty-fork", "tempfile", "unarray", @@ -14437,8 +14444,17 @@ checksum = "8b5288124840bee7b386bc413c487869b360b2b4ec421ea56425128692f2a82c" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.11", + "regex-syntax 0.8.6", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] @@ -14449,9 +14465,15 @@ checksum = "833eb9ce86d40ef33cb1306d8accf7bc8ec2bfea4355cbdebb3df68b40925cad" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.6", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.8.6" @@ -14952,7 +14974,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -16345,7 +16367,7 @@ dependencies = [ "thiserror 1.0.69", "tracing", "tracing-log", - "tracing-subscriber 0.3.20", + "tracing-subscriber 0.3.19", ] [[package]] @@ -18205,7 +18227,7 @@ dependencies = [ "parity-scale-codec", "tracing", "tracing-core", - "tracing-subscriber 0.3.20", + "tracing-subscriber 0.3.19", ] [[package]] @@ -19399,7 +19421,7 @@ dependencies = [ "getrandom 0.3.3", "once_cell", "rustix 1.1.2", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -19961,15 +19983,15 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.20" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "matchers", "nu-ansi-term", "once_cell", "parking_lot 0.12.5", - "regex-automata", + "regex", "sharded-slab", "smallvec", "thread_local", @@ -21093,7 +21115,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 2de9093cbb..99ce68f8a8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -108,7 +108,9 @@ serde_with = { version = "3.14.0", default-features = false } smallvec = "1.13.2" tracing = "0.1" tracing-log = "0.2" -tracing-subscriber = { version = "=0.3.20" } +# Keep this pinned: 0.3.20 escapes ANSI sequences embedded by Substrate's +# informant, causing color codes such as `\x1b[37m` to be printed literally. +tracing-subscriber = { version = "=0.3.19" } litep2p = { git = "https://github.com/paritytech/litep2p", tag = "v0.7.0", default-features = false } syn = { version = "2.0.106", default-features = false } quote = { version = "1", default-features = false } From 84479310545b55472254acc49b98e5b6e3d2f565 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Tue, 21 Jul 2026 11:12:37 -0700 Subject: [PATCH 21/63] Fix staking view pagination and gas metering --- precompiles/src/solidity/stakingV2.abi | 15 + precompiles/src/solidity/stakingV2.sol | 24 +- precompiles/src/staking.rs | 295 ++++++++++++++++++-- sdk/python/bittensor/evm/abi/stakingV2.json | 15 + ts-tests/utils/evm-config.ts | 15 + 5 files changed, 335 insertions(+), 29 deletions(-) diff --git a/precompiles/src/solidity/stakingV2.abi b/precompiles/src/solidity/stakingV2.abi index 80d586582a..3103071d3f 100644 --- a/precompiles/src/solidity/stakingV2.abi +++ b/precompiles/src/solidity/stakingV2.abi @@ -103,6 +103,16 @@ "internalType": "uint256", "name": "netuid", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cursor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" } ], "name": "getStakeInfoForColdkeyAndNetuid", @@ -123,6 +133,11 @@ "internalType": "struct IStaking.StakeInfo[]", "name": "positions", "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "nextCursor", + "type": "uint256" } ], "stateMutability": "view", diff --git a/precompiles/src/solidity/stakingV2.sol b/precompiles/src/solidity/stakingV2.sol index c35559ed54..98eb3124b9 100644 --- a/precompiles/src/solidity/stakingV2.sol +++ b/precompiles/src/solidity/stakingV2.sol @@ -158,17 +158,31 @@ interface IStaking { ) external view returns (uint256); /** - * @dev Returns the coldkey's non-zero alpha stake positions on `netuid`. - * Hotkeys with no stake on that subnet are omitted. + * @dev Returns one bounded page of the coldkey's non-zero alpha stake positions + * on `netuid`. The cursor addresses the coldkey's historical staking-hotkey + * index, so a page can be empty while `nextCursor` is non-zero when every + * hotkey in that page has zero stake on the requested subnet. + * + * Begin with `cursor = 0`, use a `limit` from 1 through 64, and continue with + * the returned `nextCursor` until it is zero. This bounds storage decoding and + * gas consumption even when a coldkey has an arbitrarily large history. * * @param coldkey The coldkey public key (32 bytes). * @param netuid The subnet to query. - * @return positions The coldkey's hotkeys and alpha stake amounts on `netuid`. + * @param cursor The zero-based historical hotkey index at which to start. + * @param limit The maximum historical hotkeys to scan (1 through 64). + * @return positions Non-zero hotkey and alpha stake pairs found in this page. + * @return nextCursor The cursor for the next page, or zero when complete. */ function getStakeInfoForColdkeyAndNetuid( bytes32 coldkey, - uint256 netuid - ) external view returns (StakeInfo[] memory positions); + uint256 netuid, + uint256 cursor, + uint256 limit + ) external view returns ( + StakeInfo[] memory positions, + uint256 nextCursor + ); /** * @dev Delegates staking to a proxy account. diff --git a/precompiles/src/staking.rs b/precompiles/src/staking.rs index 01ff6da22e..f7c1f9051e 100644 --- a/precompiles/src/staking.rs +++ b/precompiles/src/staking.rs @@ -31,6 +31,7 @@ // provided only in `transferStakeFrom`. use alloc::vec::Vec; +use codec::{Compact, Encode}; use core::marker::PhantomData; use frame_support::Blake2_128Concat; use frame_support::dispatch::{DispatchInfo, GetDispatchInfo, PostDispatchInfo}; @@ -55,6 +56,8 @@ use crate::{PrecompileExt, PrecompileHandleExt}; // share storage. In the V2 fallback case it performs two reads for the initial // share lookup, then five more for the value, share, and denominator. const STAKE_INFO_READS_PER_HOTKEY: u64 = 7; +const MAX_STAKE_INFO_PAGE_SIZE: u32 = 64; +const ACCOUNT_ID_ENCODED_SIZE: usize = 32; /// Prefix for the Allowances map in Substrate storage. pub struct AllowancesPrefix; @@ -345,25 +348,90 @@ where Ok(u64::from(stake).into()) } - #[precompile::public("getStakeInfoForColdkeyAndNetuid(bytes32,uint256)")] + #[precompile::public("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)")] #[precompile::view] fn get_stake_info_for_coldkey_and_netuid( handle: &mut impl PrecompileHandle, coldkey: H256, netuid: U256, - ) -> EvmResult> { + cursor: U256, + limit: U256, + ) -> EvmResult<(Vec<(H256, U256)>, U256)> { let coldkey = R::AccountId::from(coldkey.0); let netuid = NetUid::from(try_u16_from_u256(netuid)?); + let cursor = try_u32_from_u256(cursor)?; + let limit = try_u32_from_u256(limit)?; + if limit == 0 { + return Err(revert("stake info page limit must be greater than zero")); + } + if limit > MAX_STAKE_INFO_PAGE_SIZE { + return Err(revert("stake info page limit exceeds 64")); + } + + // Charge before even reading the SCALE vector length. `decode_len` reads + // only the compact length prefix and never allocates or decodes the + // historical, unbounded `StakingHotkeys` value. handle.record_db_reads::(1)?; - let hotkeys = pallet_subtensor::Pallet::::get_all_staked_hotkeys(&coldkey); + let hotkey_count = + pallet_subtensor::StakingHotkeys::::decode_len(&coldkey).unwrap_or_default(); + let cursor = usize::try_from(cursor).map_err(|_| revert("stake info cursor overflow"))?; + + if cursor >= hotkey_count { + return Ok((Vec::new(), U256::zero())); + } + + let limit = usize::try_from(limit).map_err(|_| revert("stake info limit overflow"))?; + let page_end = cursor.saturating_add(limit).min(hotkey_count); + let scanned_count = page_end.saturating_sub(cursor); + + // Charge the bounded raw page read and the worst-case V2 stake reads + // before allocating or reading the page bytes. + let scanned_count_u64: u64 = scanned_count.unique_saturated_into(); + let page_reads = + 1u64.saturating_add(scanned_count_u64.saturating_mul(STAKE_INFO_READS_PER_HOTKEY)); + handle.record_db_reads::(page_reads)?; + + // AccountId32 has a fixed 32-byte SCALE encoding. Read only the requested + // slice from the encoded Vec instead of calling `StakingHotkeys::get()`, + // which would decode the entire unbounded historical vector. + if coldkey.encode().len() != ACCOUNT_ID_ENCODED_SIZE { + return Err(revert("unsupported account id encoding")); + } + let storage_key = pallet_subtensor::StakingHotkeys::::hashed_key_for(&coldkey); + let compact_len = Compact( + u32::try_from(hotkey_count).map_err(|_| revert("staking hotkey count overflow"))?, + ) + .encode() + .len(); + let byte_offset = compact_len + .checked_add( + cursor + .checked_mul(ACCOUNT_ID_ENCODED_SIZE) + .ok_or_else(|| revert("stake info cursor overflow"))?, + ) + .ok_or_else(|| revert("stake info cursor overflow"))?; + let page_byte_len = scanned_count + .checked_mul(ACCOUNT_ID_ENCODED_SIZE) + .ok_or_else(|| revert("stake info page size overflow"))?; + let storage_offset = + u32::try_from(byte_offset).map_err(|_| revert("stake info cursor overflow"))?; + let mut encoded_hotkeys = vec![0u8; page_byte_len]; + let remaining = sp_io::storage::read(&storage_key, &mut encoded_hotkeys, storage_offset) + .ok_or_else(|| revert("staking hotkey storage disappeared"))?; + if usize::try_from(remaining).unwrap_or_default() < page_byte_len { + return Err(revert("invalid staking hotkey storage encoding")); + } - // Charge the conservative V2 fallback cost before doing any per-hotkey - // lookups, so a caller with insufficient gas fails before the loop. - let hotkey_count: u64 = hotkeys.len().unique_saturated_into(); - handle.record_db_reads::(hotkey_count.saturating_mul(STAKE_INFO_READS_PER_HOTKEY))?; + let hotkeys = encoded_hotkeys + .chunks_exact(ACCOUNT_ID_ENCODED_SIZE) + .map(|bytes| { + let mut account = [0u8; ACCOUNT_ID_ENCODED_SIZE]; + account.copy_from_slice(bytes); + R::AccountId::from(account) + }); - Ok(hotkeys + let positions = hotkeys .into_iter() .filter_map(|hotkey| { let stake = @@ -378,7 +446,14 @@ where let hotkey: [u8; 32] = hotkey.into(); Some((hotkey.into(), stake.into())) }) - .collect()) + .collect(); + let next_cursor = if page_end < hotkey_count { + U256::from(page_end) + } else { + U256::zero() + }; + + Ok((positions, next_cursor)) } #[precompile::public("getAlphaStakedValidators(bytes32,uint256)")] @@ -432,7 +507,8 @@ where #[precompile::public("getStakeOperationThreshold()")] #[precompile::view] - fn get_stake_operation_threshold(_handle: &mut impl PrecompileHandle) -> EvmResult { + fn get_stake_operation_threshold(handle: &mut impl PrecompileHandle) -> EvmResult { + handle.record_db_reads::(1)?; Ok(pallet_subtensor::DefaultMinStake::::get() .to_u64() .into()) @@ -969,6 +1045,12 @@ fn try_u16_from_u256(value: U256) -> Result { }) } +fn try_u32_from_u256(value: U256) -> Result { + value.try_into().map_err(|_| PrecompileFailure::Error { + exit_status: ExitError::Other("the value is outside of u32 bounds".into()), + }) +} + fn try_u64_from_u256(value: U256) -> Result { value.try_into().map_err(|_| PrecompileFailure::Error { exit_status: ExitError::Other("the value is outside of u64 bounds".into()), @@ -1033,9 +1115,13 @@ mod tests { netuid } - fn stake_info_cost(hotkey_count: usize) -> u64 { - let hotkey_count = u64::try_from(hotkey_count).expect("hotkey count fits in u64"); - let reads = 1u64.saturating_add(hotkey_count.saturating_mul(STAKE_INFO_READS_PER_HOTKEY)); + fn stake_info_cost(scanned_count: usize) -> u64 { + let scanned_count = u64::try_from(scanned_count).expect("hotkey count fits in u64"); + let reads = if scanned_count == 0 { + 1 + } else { + 2u64.saturating_add(scanned_count.saturating_mul(STAKE_INFO_READS_PER_HOTKEY)) + }; RuntimeHelper::::db_read_gas_cost().saturating_mul(reads) } @@ -1168,7 +1254,7 @@ mod tests { } #[test] - fn staking_precompile_v2_returns_non_zero_stake_positions_for_requested_subnet() { + fn staking_precompile_v2_pages_non_zero_stake_positions_for_requested_subnet() { new_test_ext().execute_with(|| { let netuid = setup_staking_subnet(); setup_staking_subnet_id(SECOND_NETUID_U16); @@ -1184,30 +1270,64 @@ mod tests { add_stake_v2(caller, &hotkey_c, TEST_NETUID_U16, INITIAL_STAKE_RAO); let hotkeys = pallet_subtensor::Pallet::::get_all_staked_hotkeys(&coldkey); - let expected: Vec<(H256, U256)> = hotkeys + let expected_first: Vec<(H256, U256)> = hotkeys .iter() + .take(2) .filter_map(|hotkey| { let stake = stake_for(hotkey, &coldkey, netuid); (stake > 0).then(|| (H256::from_slice(hotkey.as_ref()), U256::from(stake))) }) .collect(); - assert_eq!(expected.len(), 2); + let expected_second: Vec<(H256, U256)> = hotkeys + .iter() + .skip(2) + .filter_map(|hotkey| { + let stake = stake_for(hotkey, &coldkey, netuid); + (stake > 0).then(|| (H256::from_slice(hotkey.as_ref()), U256::from(stake))) + }) + .collect(); + assert_eq!(expected_first.len(), 1); + assert_eq!(expected_second.len(), 1); precompiles::>() .prepare_test( caller, addr_from_index(StakingPrecompileV2::::INDEX), encode_with_selector( - selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256)"), + selector_u32( + "getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)", + ), ( H256::from_slice(coldkey.as_ref()), U256::from(TEST_NETUID_U16), + U256::zero(), + U256::from(2), ), ), ) .with_static_call(true) - .expect_cost(stake_info_cost(hotkeys.len())) - .execute_returns_raw(encode_return_value(expected)); + .expect_cost(stake_info_cost(2)) + .execute_returns_raw(encode_return_value((expected_first, U256::from(2)))); + + precompiles::>() + .prepare_test( + caller, + addr_from_index(StakingPrecompileV2::::INDEX), + encode_with_selector( + selector_u32( + "getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)", + ), + ( + H256::from_slice(coldkey.as_ref()), + U256::from(TEST_NETUID_U16), + U256::from(2), + U256::from(2), + ), + ), + ) + .with_static_call(true) + .expect_cost(stake_info_cost(1)) + .execute_returns_raw(encode_return_value((expected_second, U256::zero()))); }); } @@ -1223,16 +1343,23 @@ mod tests { caller, addr_from_index(StakingPrecompileV2::::INDEX), encode_with_selector( - selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256)"), + selector_u32( + "getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)", + ), ( H256::from_slice(coldkey.as_ref()), U256::from(TEST_NETUID_U16), + U256::zero(), + U256::from(MAX_STAKE_INFO_PAGE_SIZE), ), ), ) .with_static_call(true) .expect_cost(stake_info_cost(0)) - .execute_returns_raw(encode_return_value(Vec::<(H256, U256)>::new())); + .execute_returns_raw(encode_return_value(( + Vec::<(H256, U256)>::new(), + U256::zero(), + ))); }); } @@ -1248,8 +1375,15 @@ mod tests { addr_from_index(StakingPrecompileV2::::INDEX), caller, encode_with_selector( - selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256)"), - (H256::from_slice(coldkey.as_ref()), invalid_netuid), + selector_u32( + "getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)", + ), + ( + H256::from_slice(coldkey.as_ref()), + invalid_netuid, + U256::zero(), + U256::one(), + ), ), U256::zero(), ) @@ -1259,6 +1393,119 @@ mod tests { }); } + #[test] + fn staking_precompile_v2_bounds_historical_hotkey_scan_and_precharges_page() { + new_test_ext().execute_with(|| { + let netuid = setup_staking_subnet(); + let caller = addr_from_index(0x1105); + let coldkey = mapped_account(caller); + let historical_hotkeys: Vec = (0..=MAX_STAKE_INFO_PAGE_SIZE) + .map(|index| { + let mut account = [0u8; 32]; + account[..4].copy_from_slice(&index.to_le_bytes()); + AccountId::from(account) + }) + .collect(); + let active_hotkey = historical_hotkeys + .last() + .expect("historical hotkeys is non-empty") + .clone(); + + pallet_subtensor::StakingHotkeys::::insert( + &coldkey, + historical_hotkeys.clone(), + ); + pallet_subtensor::Pallet::::increase_stake_for_hotkey_and_coldkey_on_subnet( + &active_hotkey, + &coldkey, + netuid, + AlphaBalance::from(INITIAL_STAKE_RAO), + ); + let active_stake = stake_for(&active_hotkey, &coldkey, netuid); + assert!(active_stake > 0); + + let first_page_call = encode_with_selector( + selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)"), + ( + H256::from_slice(coldkey.as_ref()), + U256::from(TEST_NETUID_U16), + U256::zero(), + U256::from(MAX_STAKE_INFO_PAGE_SIZE), + ), + ); + + precompiles::>() + .prepare_test( + caller, + addr_from_index(StakingPrecompileV2::::INDEX), + first_page_call, + ) + .with_static_call(true) + .expect_cost(stake_info_cost(MAX_STAKE_INFO_PAGE_SIZE as usize)) + .execute_returns_raw(encode_return_value(( + Vec::<(H256, U256)>::new(), + U256::from(MAX_STAKE_INFO_PAGE_SIZE), + ))); + + precompiles::>() + .prepare_test( + caller, + addr_from_index(StakingPrecompileV2::::INDEX), + encode_with_selector( + selector_u32( + "getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)", + ), + ( + H256::from_slice(coldkey.as_ref()), + U256::from(TEST_NETUID_U16), + U256::from(MAX_STAKE_INFO_PAGE_SIZE), + U256::from(MAX_STAKE_INFO_PAGE_SIZE), + ), + ), + ) + .with_static_call(true) + .expect_cost(stake_info_cost(1)) + .execute_returns_raw(encode_return_value(( + vec![( + H256::from_slice(active_hotkey.as_ref()), + U256::from(active_stake), + )], + U256::zero(), + ))); + }); + } + + #[test] + fn staking_precompile_v2_rejects_invalid_stake_info_page_limits() { + new_test_ext().execute_with(|| { + let caller = addr_from_index(0x1106); + let coldkey = AccountId::from([0x43; 32]); + + for limit in [U256::zero(), U256::from(MAX_STAKE_INFO_PAGE_SIZE + 1)] { + let result = execute_precompile( + &precompiles::>(), + addr_from_index(StakingPrecompileV2::::INDEX), + caller, + encode_with_selector( + selector_u32( + "getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)", + ), + ( + H256::from_slice(coldkey.as_ref()), + U256::from(TEST_NETUID_U16), + U256::zero(), + limit, + ), + ), + U256::zero(), + ) + .expect("staking V2 call routes to the precompile"); + + assert!(result.is_err()); + } + }); + } + #[test] fn staking_precompile_v2_returns_current_stake_operation_threshold() { new_test_ext().execute_with(|| { @@ -1271,7 +1518,7 @@ mod tests { encode_with_selector(selector_u32("getStakeOperationThreshold()"), ()), ) .with_static_call(true) - .expect_cost(0) + .expect_cost(RuntimeHelper::::db_read_gas_cost()) .execute_returns(U256::from(threshold.to_u64())); }); } diff --git a/sdk/python/bittensor/evm/abi/stakingV2.json b/sdk/python/bittensor/evm/abi/stakingV2.json index 80d586582a..3103071d3f 100644 --- a/sdk/python/bittensor/evm/abi/stakingV2.json +++ b/sdk/python/bittensor/evm/abi/stakingV2.json @@ -103,6 +103,16 @@ "internalType": "uint256", "name": "netuid", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "cursor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "limit", + "type": "uint256" } ], "name": "getStakeInfoForColdkeyAndNetuid", @@ -123,6 +133,11 @@ "internalType": "struct IStaking.StakeInfo[]", "name": "positions", "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "nextCursor", + "type": "uint256" } ], "stateMutability": "view", diff --git a/ts-tests/utils/evm-config.ts b/ts-tests/utils/evm-config.ts index 9b782d4757..66fa70a1e8 100644 --- a/ts-tests/utils/evm-config.ts +++ b/ts-tests/utils/evm-config.ts @@ -174,6 +174,16 @@ export const IStakingV2ABI = [ name: "netuid", type: "uint256", }, + { + internalType: "uint256", + name: "cursor", + type: "uint256", + }, + { + internalType: "uint256", + name: "limit", + type: "uint256", + }, ], name: "getStakeInfoForColdkeyAndNetuid", outputs: [ @@ -194,6 +204,11 @@ export const IStakingV2ABI = [ name: "positions", type: "tuple[]", }, + { + internalType: "uint256", + name: "nextCursor", + type: "uint256", + }, ], stateMutability: "view", type: "function", From 454d35a259ce3e43881da79d543acc1154b75ac8 Mon Sep 17 00:00:00 2001 From: unarbos Date: Tue, 21 Jul 2026 16:10:34 -0300 Subject: [PATCH 22/63] ci: add trusted docs-preview deploy via workflow_run Default-branch-only workflow that deploys sealed artifacts from the secret-free Request Docs Preview PR workflow. Never checks out PR code. Co-authored-by: Cursor --- .github/workflows/deploy-docs-preview.yml | 231 ++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 .github/workflows/deploy-docs-preview.yml diff --git a/.github/workflows/deploy-docs-preview.yml b/.github/workflows/deploy-docs-preview.yml new file mode 100644 index 0000000000..1bc36481a8 --- /dev/null +++ b/.github/workflows/deploy-docs-preview.yml @@ -0,0 +1,231 @@ +name: Deploy Docs Preview + +# Trusted half of docs previews. Always taken from the default branch +# (`workflow_run`), so a PR cannot rewrite these steps to exfiltrate secrets. +# +# Never checks out PR HEAD and never runs PR-controlled scripts. Consumes only +# the sealed artifact from `Request Docs Preview`, then deploys / aliases / +# comments (or cleans up) with Vercel + GoDaddy credentials. + +on: + workflow_run: + workflows: ["Request Docs Preview"] + types: [completed] + +permissions: + actions: read + contents: read + pull-requests: write + +jobs: + deploy: + name: Deploy or clean up docs preview + if: > + github.event.workflow_run.conclusion == 'success' && + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.head_repository.full_name == github.repository + runs-on: [self-hosted, fireactions-turbo-8] + concurrency: + group: docs-preview-domain-dns + cancel-in-progress: false + env: + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_DOCS_PROJECT_ID }} + GODADDY_API_KEY: ${{ secrets.GODADDY_API_KEY }} + GODADDY_API_SECRET: ${{ secrets.GODADDY_API_SECRET }} + DOCS_DOMAIN: ${{ vars.DOCS_DOMAIN || 'bittensor.com' }} + GH_TOKEN: ${{ github.token }} + steps: + - name: Resolve PR number and download artifact + id: meta + run: | + set -euo pipefail + # Prefer the pull_requests list; fall back to the commit→PR API when + # workflow_run omits it (race on just-opened PRs). + pr=$(node -e ' + const ev = ${{ toJSON(github.event.workflow_run.pull_requests) }}; + if (Array.isArray(ev) && ev[0] && ev[0].number) { + process.stdout.write(String(ev[0].number)); + } + ') + if [ -z "${pr}" ]; then + pr=$(gh api \ + "repos/${{ github.repository }}/commits/${{ github.event.workflow_run.head_sha }}/pulls" \ + --jq '.[0].number // empty') + fi + if [ -z "${pr}" ]; then + echo "Could not resolve PR number for workflow_run ${{ github.event.workflow_run.id }}" >&2 + exit 1 + fi + echo "pr=$pr" >> "$GITHUB_OUTPUT" + echo "alias=pr-${pr}.preview.${DOCS_DOMAIN}" >> "$GITHUB_OUTPUT" + echo "url=https://pr-${pr}.preview.${DOCS_DOMAIN}" >> "$GITHUB_OUTPUT" + + # download-artifact@v4 needs the producing run id for workflow_run. + mkdir -p artifact + gh run download "${{ github.event.workflow_run.id }}" \ + --repo "${{ github.repository }}" \ + --name "docs-preview-${pr}" \ + --dir artifact + action=$(tr -d '[:space:]' < artifact/docs-preview-action.txt) + echo "action=$action" >> "$GITHUB_OUTPUT" + + - name: Set up Node.js + if: steps.meta.outputs.action == 'deploy' + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Deploy prebuilt + if: steps.meta.outputs.action == 'deploy' + id: deploy + env: + PR_NUMBER: ${{ steps.meta.outputs.pr }} + ALIAS: ${{ steps.meta.outputs.alias }} + run: | + set -euo pipefail + cd artifact + tar -xzf docs-preview-sealed.tgz + test -f .vercel/output/functions/_global-error.func/.vc-config.json + test -d website/node_modules + mkdir -p website/apps/bittensor-website + mkdir -p .vercel + node -e ' + const fs = require("fs"); + fs.writeFileSync(".vercel/project.json", JSON.stringify({ + projectId: process.env.VERCEL_PROJECT_ID, + orgId: process.env.VERCEL_ORG_ID, + })); + ' + + url=$(npx --yes vercel@56.4.1 deploy --prebuilt --archive=tgz --token "$VERCEL_TOKEN") + echo "Deployed: $url" + + dep_id=$(curl -sf -H "Authorization: Bearer $VERCEL_TOKEN" \ + "https://api.vercel.com/v13/deployments/${url#https://}?teamId=$VERCEL_ORG_ID" \ + | node -pe 'JSON.parse(require("fs").readFileSync(0, "utf8")).id') + echo "deployment_id=$dep_id" >> "$GITHUB_OUTPUT" + + - name: Register domain, alias deployment + if: steps.meta.outputs.action == 'deploy' + env: + ALIAS: ${{ steps.meta.outputs.alias }} + DEPLOYMENT_ID: ${{ steps.deploy.outputs.deployment_id }} + run: | + set -euo pipefail + + resp=$(curl -sS -X POST \ + -H "Authorization: Bearer $VERCEL_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{\"name\":\"$ALIAS\"}" \ + "https://api.vercel.com/v10/projects/${VERCEL_PROJECT_ID}/domains?teamId=${VERCEL_ORG_ID}" \ + || true) + if ! echo "$resp" | node -e 'const d=JSON.parse(require("fs").readFileSync(0,"utf8")); if(!d.name) process.exit(1)'; then + resp=$(curl -sf -H "Authorization: Bearer $VERCEL_TOKEN" \ + "https://api.vercel.com/v9/projects/${VERCEL_PROJECT_ID}/domains/${ALIAS}?teamId=${VERCEL_ORG_ID}") + fi + + verified=$(echo "$resp" | node -pe 'JSON.parse(require("fs").readFileSync(0,"utf8")).verified === true ? "yes" : "no"') + if [ "$verified" != "yes" ]; then + # Use `node -e`, not `-pe`: `-p` also prints the expression + # result, and `stdout.write` returns true, which corrupted the + # TXT value to "...true" and broke Vercel verification. + challenge=$(echo "$resp" | node -e ' + const d = JSON.parse(require("fs").readFileSync(0, "utf8")); + const v = (d.verification || []).find((x) => x.type === "TXT"); + if (!v) { process.stderr.write("no TXT challenge\n"); process.exit(1); } + process.stdout.write(v.value); + ') + + existing=$(curl -sf \ + -H "Authorization: sso-key ${GODADDY_API_KEY}:${GODADDY_API_SECRET}" \ + "https://api.godaddy.com/v1/domains/${DOCS_DOMAIN}/records/TXT/_vercel") + payload=$(EXISTING_JSON="$existing" CHALLENGE="$challenge" node -e ' + const existing = JSON.parse(process.env.EXISTING_JSON); + const values = new Set(existing.map((r) => r.data)); + values.add(process.env.CHALLENGE); + process.stdout.write(JSON.stringify( + [...values].sort().map((data) => ({ data, ttl: 600 })) + )); + ') + curl -sf -X PUT \ + -H "Authorization: sso-key ${GODADDY_API_KEY}:${GODADDY_API_SECRET}" \ + -H "Content-Type: application/json" \ + -d "$payload" \ + "https://api.godaddy.com/v1/domains/${DOCS_DOMAIN}/records/TXT/_vercel" > /dev/null + + verified=no + for i in 1 2 3 4 5 6 7 8 9 10; do + verify=$(curl -sS -X POST \ + -H "Authorization: Bearer $VERCEL_TOKEN" \ + "https://api.vercel.com/v9/projects/${VERCEL_PROJECT_ID}/domains/${ALIAS}/verify?teamId=${VERCEL_ORG_ID}" \ + || true) + if echo "$verify" | node -pe 'JSON.parse(require("fs").readFileSync(0,"utf8")).verified === true ? "yes" : "no"' | grep -q yes; then + verified=yes + break + fi + sleep 15 + done + if [ "$verified" != "yes" ]; then + echo "Timed out verifying $ALIAS" >&2 + echo "$verify" >&2 + exit 1 + fi + fi + + curl -sf -X POST \ + -H "Authorization: Bearer $VERCEL_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{\"alias\":\"$ALIAS\"}" \ + "https://api.vercel.com/v2/deployments/${DEPLOYMENT_ID}/aliases?teamId=${VERCEL_ORG_ID}" > /dev/null + + echo "Aliased to https://${ALIAS}" >> "$GITHUB_STEP_SUMMARY" + + - name: Comment preview URL on PR + if: steps.meta.outputs.action == 'deploy' + env: + PR_NUMBER: ${{ steps.meta.outputs.pr }} + PREVIEW_URL: ${{ steps.meta.outputs.url }} + run: | + marker="" + body=$(printf '%s\n' \ + "${marker}" \ + "### Docs preview" \ + "" \ + "${PREVIEW_URL}/docs" \ + "" \ + "Stable for this PR — updates on each push that touches \`docs/**\` or \`website/**\`.") + + existing=$(gh api \ + "repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/comments" \ + --jq ".[] | select(.body | contains(\"${marker}\")) | .id" \ + | head -n 1) + + if [ -n "$existing" ]; then + gh api \ + --method PATCH \ + "repos/${GITHUB_REPOSITORY}/issues/comments/${existing}" \ + -f body="$body" > /dev/null + else + gh api \ + --method POST \ + "repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/comments" \ + -f body="$body" > /dev/null + fi + + - name: Remove PR docs preview domain + if: steps.meta.outputs.action == 'cleanup' + env: + ALIAS: ${{ steps.meta.outputs.alias }} + run: | + set -euo pipefail + code=$(curl -sS -o /tmp/del.json -w "%{http_code}" -X DELETE \ + -H "Authorization: Bearer $VERCEL_TOKEN" \ + "https://api.vercel.com/v9/projects/${VERCEL_PROJECT_ID}/domains/${ALIAS}?teamId=${VERCEL_ORG_ID}" \ + || true) + if [ "$code" = "200" ] || [ "$code" = "204" ]; then + echo "Removed ${ALIAS} from Vercel project" >> "$GITHUB_STEP_SUMMARY" + else + echo "No project domain to remove for ${ALIAS} (HTTP ${code})" >> "$GITHUB_STEP_SUMMARY" + fi From eaef97bc5871e366d096f1e67c8ab73fe4b7782a Mon Sep 17 00:00:00 2001 From: unarbos Date: Tue, 21 Jul 2026 16:16:54 -0300 Subject: [PATCH 23/63] ci: pass workflow_run metadata via env to avoid shell injection Do not embed toJSON(pull_requests) into a shell-quoted node -e body while deploy secrets are present; read event fields from the environment instead. Co-authored-by: Cursor --- .github/workflows/deploy-docs-preview.yml | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy-docs-preview.yml b/.github/workflows/deploy-docs-preview.yml index 1bc36481a8..a0e7c1b7fe 100644 --- a/.github/workflows/deploy-docs-preview.yml +++ b/.github/workflows/deploy-docs-preview.yml @@ -39,33 +39,44 @@ jobs: steps: - name: Resolve PR number and download artifact id: meta + env: + # Pass event fields via env (never interpolate into the script body) + # so a crafted PR branch/title cannot break out of a shell quote. + WORKFLOW_PULL_REQUESTS: ${{ toJSON(github.event.workflow_run.pull_requests) }} + WORKFLOW_HEAD_SHA: ${{ github.event.workflow_run.head_sha }} + WORKFLOW_RUN_ID: ${{ github.event.workflow_run.id }} + REPO: ${{ github.repository }} run: | set -euo pipefail # Prefer the pull_requests list; fall back to the commit→PR API when # workflow_run omits it (race on just-opened PRs). pr=$(node -e ' - const ev = ${{ toJSON(github.event.workflow_run.pull_requests) }}; + const ev = JSON.parse(process.env.WORKFLOW_PULL_REQUESTS || "[]"); if (Array.isArray(ev) && ev[0] && ev[0].number) { process.stdout.write(String(ev[0].number)); } ') if [ -z "${pr}" ]; then pr=$(gh api \ - "repos/${{ github.repository }}/commits/${{ github.event.workflow_run.head_sha }}/pulls" \ + "repos/${REPO}/commits/${WORKFLOW_HEAD_SHA}/pulls" \ --jq '.[0].number // empty') fi if [ -z "${pr}" ]; then - echo "Could not resolve PR number for workflow_run ${{ github.event.workflow_run.id }}" >&2 + echo "Could not resolve PR number for workflow_run ${WORKFLOW_RUN_ID}" >&2 exit 1 fi + # PR numbers are digits only — reject anything else before using in paths. + case "${pr}" in + ''|*[!0-9]*) echo "invalid PR number: ${pr}" >&2; exit 1 ;; + esac echo "pr=$pr" >> "$GITHUB_OUTPUT" echo "alias=pr-${pr}.preview.${DOCS_DOMAIN}" >> "$GITHUB_OUTPUT" echo "url=https://pr-${pr}.preview.${DOCS_DOMAIN}" >> "$GITHUB_OUTPUT" # download-artifact@v4 needs the producing run id for workflow_run. mkdir -p artifact - gh run download "${{ github.event.workflow_run.id }}" \ - --repo "${{ github.repository }}" \ + gh run download "${WORKFLOW_RUN_ID}" \ + --repo "${REPO}" \ --name "docs-preview-${pr}" \ --dir artifact action=$(tr -d '[:space:]' < artifact/docs-preview-action.txt) From f18663f58ad59e575da7cb0b57a07176c9e7209d Mon Sep 17 00:00:00 2001 From: unarbos Date: Tue, 21 Jul 2026 16:21:57 -0300 Subject: [PATCH 24/63] ci: deploy docs preview with a clean vercel binary, not artifact npx Install vercel into RUNNER_TEMP and invoke it by absolute path with a sanitized PATH so PR-built website/node_modules/.bin cannot hijack the secret-bearing deploy step. Pin setup-node to an immutable SHA. Co-authored-by: Cursor --- .github/workflows/deploy-docs-preview.yml | 27 +++++++++++++++++------ 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/.github/workflows/deploy-docs-preview.yml b/.github/workflows/deploy-docs-preview.yml index a0e7c1b7fe..56c1e85546 100644 --- a/.github/workflows/deploy-docs-preview.yml +++ b/.github/workflows/deploy-docs-preview.yml @@ -84,7 +84,7 @@ jobs: - name: Set up Node.js if: steps.meta.outputs.action == 'deploy' - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 with: node-version: 20 @@ -96,12 +96,25 @@ jobs: ALIAS: ${{ steps.meta.outputs.alias }} run: | set -euo pipefail - cd artifact - tar -xzf docs-preview-sealed.tgz + # Install the CLI into a clean prefix and invoke it by absolute path. + # Never `npx` / resolve binaries from the PR-built website/node_modules + # tree (that would let a malicious bin stub see deploy secrets). + CLEAN_CLI="${RUNNER_TEMP}/vercel-cli" + mkdir -p "$CLEAN_CLI" + npm install --prefix "$CLEAN_CLI" --no-save --no-package-lock vercel@56.4.1 + VERCEL_BIN="$CLEAN_CLI/node_modules/.bin/vercel" + test -x "$VERCEL_BIN" + # Keep PATH free of the artifact tree for the rest of this step. + export PATH="${CLEAN_CLI}/node_modules/.bin:/usr/local/bin:/usr/bin:/bin" + + DEPLOY_ROOT="${RUNNER_TEMP}/docs-preview-deploy" + rm -rf "$DEPLOY_ROOT" + mkdir -p "$DEPLOY_ROOT" + tar -xzf artifact/docs-preview-sealed.tgz -C "$DEPLOY_ROOT" + cd "$DEPLOY_ROOT" test -f .vercel/output/functions/_global-error.func/.vc-config.json test -d website/node_modules - mkdir -p website/apps/bittensor-website - mkdir -p .vercel + mkdir -p website/apps/bittensor-website .vercel node -e ' const fs = require("fs"); fs.writeFileSync(".vercel/project.json", JSON.stringify({ @@ -110,12 +123,12 @@ jobs: })); ' - url=$(npx --yes vercel@56.4.1 deploy --prebuilt --archive=tgz --token "$VERCEL_TOKEN") + url=$("$VERCEL_BIN" deploy --prebuilt --archive=tgz --token "$VERCEL_TOKEN") echo "Deployed: $url" dep_id=$(curl -sf -H "Authorization: Bearer $VERCEL_TOKEN" \ "https://api.vercel.com/v13/deployments/${url#https://}?teamId=$VERCEL_ORG_ID" \ - | node -pe 'JSON.parse(require("fs").readFileSync(0, "utf8")).id') + | node -e 'let s="";process.stdin.on("data",d=>s+=d);process.stdin.on("end",()=>process.stdout.write(JSON.parse(s).id))') echo "deployment_id=$dep_id" >> "$GITHUB_OUTPUT" - name: Register domain, alias deployment From 099830e2901a5b242aaac11ed8403e94a71aea7f Mon Sep 17 00:00:00 2001 From: unarbos Date: Tue, 21 Jul 2026 16:33:51 -0300 Subject: [PATCH 25/63] ci: reject symlink/hardlink members when extracting docs-preview archives Trusted deploy extracts only regular files under .vercel/ and website/node_modules/, blocking PR-controlled link escapes on the runner. Co-authored-by: Cursor --- .github/workflows/deploy-docs-preview.yml | 31 ++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy-docs-preview.yml b/.github/workflows/deploy-docs-preview.yml index 56c1e85546..f9ddc9f793 100644 --- a/.github/workflows/deploy-docs-preview.yml +++ b/.github/workflows/deploy-docs-preview.yml @@ -110,7 +110,36 @@ jobs: DEPLOY_ROOT="${RUNNER_TEMP}/docs-preview-deploy" rm -rf "$DEPLOY_ROOT" mkdir -p "$DEPLOY_ROOT" - tar -xzf artifact/docs-preview-sealed.tgz -C "$DEPLOY_ROOT" + # Safe extract: reject absolute paths, `..`, and any symlink/hardlink + # members so a hostile archive cannot redirect writes on the runner. + ARCHIVE="$(pwd)/artifact/docs-preview-sealed.tgz" + python3 - "$ARCHIVE" "$DEPLOY_ROOT" <<'PY' + import os, sys, tarfile + + archive, dest = sys.argv[1], sys.argv[2] + dest = os.path.realpath(dest) + allowed_prefixes = (".vercel/", "website/node_modules/") + + with tarfile.open(archive, "r:gz") as tf: + for member in tf.getmembers(): + name = member.name.lstrip("./") + if name.startswith("/") or name.startswith("\\") or ".." in name.split("/"): + raise SystemExit(f"refusing unsafe path: {member.name!r}") + if not name.startswith(allowed_prefixes): + raise SystemExit(f"refusing unexpected path: {member.name!r}") + if member.issym() or member.islnk(): + raise SystemExit(f"refusing link member: {member.name!r}") + if not (member.isfile() or member.isdir()): + raise SystemExit(f"refusing non-file member: {member.name!r}") + target = os.path.realpath(os.path.join(dest, name)) + if target != dest and not target.startswith(dest + os.sep): + raise SystemExit(f"refusing path escape: {member.name!r}") + # filter="data" on 3.12+; our member checks above are the real gate. + try: + tf.extractall(dest, filter="data") + except TypeError: + tf.extractall(dest) + PY cd "$DEPLOY_ROOT" test -f .vercel/output/functions/_global-error.func/.vc-config.json test -d website/node_modules From 36d2996fcfa5ba4972280175ef9b489c166501e7 Mon Sep 17 00:00:00 2001 From: unarbos Date: Tue, 21 Jul 2026 16:34:07 -0300 Subject: [PATCH 26/63] ci: unindent safe-extract heredoc so Python parse succeeds Co-authored-by: Cursor --- .github/workflows/deploy-docs-preview.yml | 49 ++++++++++++----------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/.github/workflows/deploy-docs-preview.yml b/.github/workflows/deploy-docs-preview.yml index f9ddc9f793..65fe47078b 100644 --- a/.github/workflows/deploy-docs-preview.yml +++ b/.github/workflows/deploy-docs-preview.yml @@ -113,33 +113,34 @@ jobs: # Safe extract: reject absolute paths, `..`, and any symlink/hardlink # members so a hostile archive cannot redirect writes on the runner. ARCHIVE="$(pwd)/artifact/docs-preview-sealed.tgz" + # Heredoc body must be unindented — leading spaces would SyntaxError. python3 - "$ARCHIVE" "$DEPLOY_ROOT" <<'PY' - import os, sys, tarfile +import os, sys, tarfile - archive, dest = sys.argv[1], sys.argv[2] - dest = os.path.realpath(dest) - allowed_prefixes = (".vercel/", "website/node_modules/") +archive, dest = sys.argv[1], sys.argv[2] +dest = os.path.realpath(dest) +allowed_prefixes = (".vercel/", "website/node_modules/") - with tarfile.open(archive, "r:gz") as tf: - for member in tf.getmembers(): - name = member.name.lstrip("./") - if name.startswith("/") or name.startswith("\\") or ".." in name.split("/"): - raise SystemExit(f"refusing unsafe path: {member.name!r}") - if not name.startswith(allowed_prefixes): - raise SystemExit(f"refusing unexpected path: {member.name!r}") - if member.issym() or member.islnk(): - raise SystemExit(f"refusing link member: {member.name!r}") - if not (member.isfile() or member.isdir()): - raise SystemExit(f"refusing non-file member: {member.name!r}") - target = os.path.realpath(os.path.join(dest, name)) - if target != dest and not target.startswith(dest + os.sep): - raise SystemExit(f"refusing path escape: {member.name!r}") - # filter="data" on 3.12+; our member checks above are the real gate. - try: - tf.extractall(dest, filter="data") - except TypeError: - tf.extractall(dest) - PY +with tarfile.open(archive, "r:gz") as tf: + for member in tf.getmembers(): + name = member.name.lstrip("./") + if name.startswith("/") or name.startswith("\\") or ".." in name.split("/"): + raise SystemExit(f"refusing unsafe path: {member.name!r}") + if not name.startswith(allowed_prefixes): + raise SystemExit(f"refusing unexpected path: {member.name!r}") + if member.issym() or member.islnk(): + raise SystemExit(f"refusing link member: {member.name!r}") + if not (member.isfile() or member.isdir()): + raise SystemExit(f"refusing non-file member: {member.name!r}") + target = os.path.realpath(os.path.join(dest, name)) + if target != dest and not target.startswith(dest + os.sep): + raise SystemExit(f"refusing path escape: {member.name!r}") + # filter="data" on 3.12+; our member checks above are the real gate. + try: + tf.extractall(dest, filter="data") + except TypeError: + tf.extractall(dest) +PY cd "$DEPLOY_ROOT" test -f .vercel/output/functions/_global-error.func/.vc-config.json test -d website/node_modules From 521664d335480965844a0dda57f6a011268a9897 Mon Sep 17 00:00:00 2001 From: unarbos Date: Tue, 21 Jul 2026 16:45:30 -0300 Subject: [PATCH 27/63] ci: scope docs-preview secrets per step; install vercel with --ignore-scripts Drop job-wide Vercel/GoDaddy/GH credentials so npm install and archive extract never inherit them. Install the CLI with --ignore-scripts in a dedicated no-secrets step before the deploy token is introduced. Co-authored-by: Cursor --- .github/workflows/deploy-docs-preview.yml | 70 +++++++++++++++-------- 1 file changed, 46 insertions(+), 24 deletions(-) diff --git a/.github/workflows/deploy-docs-preview.yml b/.github/workflows/deploy-docs-preview.yml index 65fe47078b..4c32f76991 100644 --- a/.github/workflows/deploy-docs-preview.yml +++ b/.github/workflows/deploy-docs-preview.yml @@ -28,20 +28,18 @@ jobs: concurrency: group: docs-preview-domain-dns cancel-in-progress: false + # No secrets at job scope — each step opts into only what it needs so + # `npm install` / artifact extract never see Vercel/GoDaddy/GH credentials. env: - VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} - VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} - VERCEL_PROJECT_ID: ${{ secrets.VERCEL_DOCS_PROJECT_ID }} - GODADDY_API_KEY: ${{ secrets.GODADDY_API_KEY }} - GODADDY_API_SECRET: ${{ secrets.GODADDY_API_SECRET }} DOCS_DOMAIN: ${{ vars.DOCS_DOMAIN || 'bittensor.com' }} - GH_TOKEN: ${{ github.token }} steps: - name: Resolve PR number and download artifact id: meta env: # Pass event fields via env (never interpolate into the script body) # so a crafted PR branch/title cannot break out of a shell quote. + # GH_TOKEN here is only for `gh run download` of our own artifact. + GH_TOKEN: ${{ github.token }} WORKFLOW_PULL_REQUESTS: ${{ toJSON(github.event.workflow_run.pull_requests) }} WORKFLOW_HEAD_SHA: ${{ github.event.workflow_run.head_sha }} WORKFLOW_RUN_ID: ${{ github.event.workflow_run.id }} @@ -88,30 +86,27 @@ jobs: with: node-version: 20 - - name: Deploy prebuilt + - name: Install vercel CLI (no secrets) if: steps.meta.outputs.action == 'deploy' - id: deploy - env: - PR_NUMBER: ${{ steps.meta.outputs.pr }} - ALIAS: ${{ steps.meta.outputs.alias }} + id: vercel_cli run: | set -euo pipefail - # Install the CLI into a clean prefix and invoke it by absolute path. - # Never `npx` / resolve binaries from the PR-built website/node_modules - # tree (that would let a malicious bin stub see deploy secrets). + # Clean prefix + ignore-scripts: no deploy credentials in this step's + # environment, and no package lifecycle scripts from the registry. CLEAN_CLI="${RUNNER_TEMP}/vercel-cli" mkdir -p "$CLEAN_CLI" - npm install --prefix "$CLEAN_CLI" --no-save --no-package-lock vercel@56.4.1 - VERCEL_BIN="$CLEAN_CLI/node_modules/.bin/vercel" - test -x "$VERCEL_BIN" - # Keep PATH free of the artifact tree for the rest of this step. - export PATH="${CLEAN_CLI}/node_modules/.bin:/usr/local/bin:/usr/bin:/bin" + npm install --prefix "$CLEAN_CLI" --no-save --no-package-lock --ignore-scripts vercel@56.4.1 + test -x "$CLEAN_CLI/node_modules/.bin/vercel" + echo "dir=$CLEAN_CLI" >> "$GITHUB_OUTPUT" + - name: Extract sealed archive (no secrets) + if: steps.meta.outputs.action == 'deploy' + id: extract + run: | + set -euo pipefail DEPLOY_ROOT="${RUNNER_TEMP}/docs-preview-deploy" rm -rf "$DEPLOY_ROOT" mkdir -p "$DEPLOY_ROOT" - # Safe extract: reject absolute paths, `..`, and any symlink/hardlink - # members so a hostile archive cannot redirect writes on the runner. ARCHIVE="$(pwd)/artifact/docs-preview-sealed.tgz" # Heredoc body must be unindented — leading spaces would SyntaxError. python3 - "$ARCHIVE" "$DEPLOY_ROOT" <<'PY' @@ -135,15 +130,33 @@ with tarfile.open(archive, "r:gz") as tf: target = os.path.realpath(os.path.join(dest, name)) if target != dest and not target.startswith(dest + os.sep): raise SystemExit(f"refusing path escape: {member.name!r}") - # filter="data" on 3.12+; our member checks above are the real gate. try: tf.extractall(dest, filter="data") except TypeError: tf.extractall(dest) PY + test -f "$DEPLOY_ROOT/.vercel/output/functions/_global-error.func/.vc-config.json" + test -d "$DEPLOY_ROOT/website/node_modules" + echo "root=$DEPLOY_ROOT" >> "$GITHUB_OUTPUT" + + - name: Deploy prebuilt + if: steps.meta.outputs.action == 'deploy' + id: deploy + env: + PR_NUMBER: ${{ steps.meta.outputs.pr }} + ALIAS: ${{ steps.meta.outputs.alias }} + CLEAN_CLI: ${{ steps.vercel_cli.outputs.dir }} + DEPLOY_ROOT: ${{ steps.extract.outputs.root }} + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_DOCS_PROJECT_ID }} + run: | + set -euo pipefail + VERCEL_BIN="$CLEAN_CLI/node_modules/.bin/vercel" + test -x "$VERCEL_BIN" + # Keep PATH free of the artifact tree. + export PATH="${CLEAN_CLI}/node_modules/.bin:/usr/local/bin:/usr/bin:/bin" cd "$DEPLOY_ROOT" - test -f .vercel/output/functions/_global-error.func/.vc-config.json - test -d website/node_modules mkdir -p website/apps/bittensor-website .vercel node -e ' const fs = require("fs"); @@ -166,6 +179,11 @@ PY env: ALIAS: ${{ steps.meta.outputs.alias }} DEPLOYMENT_ID: ${{ steps.deploy.outputs.deployment_id }} + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_DOCS_PROJECT_ID }} + GODADDY_API_KEY: ${{ secrets.GODADDY_API_KEY }} + GODADDY_API_SECRET: ${{ secrets.GODADDY_API_SECRET }} run: | set -euo pipefail @@ -241,6 +259,7 @@ PY env: PR_NUMBER: ${{ steps.meta.outputs.pr }} PREVIEW_URL: ${{ steps.meta.outputs.url }} + GH_TOKEN: ${{ github.token }} run: | marker="" body=$(printf '%s\n' \ @@ -272,6 +291,9 @@ PY if: steps.meta.outputs.action == 'cleanup' env: ALIAS: ${{ steps.meta.outputs.alias }} + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_DOCS_PROJECT_ID }} run: | set -euo pipefail code=$(curl -sS -o /tmp/del.json -w "%{http_code}" -X DELETE \ From 94d868468282705078408f58b9340f1504ced9e8 Mon Sep 17 00:00:00 2001 From: unarbos Date: Tue, 21 Jul 2026 16:52:46 -0300 Subject: [PATCH 28/63] ci: quota docs-preview archive extract on the trusted runner Cap compressed size, member count, per-file size, and total uncompressed bytes so a hostile PR tarball cannot fill the self-hosted disk. Co-authored-by: Cursor --- .github/workflows/deploy-docs-preview.yml | 27 +++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-docs-preview.yml b/.github/workflows/deploy-docs-preview.yml index 4c32f76991..e1849a6ea6 100644 --- a/.github/workflows/deploy-docs-preview.yml +++ b/.github/workflows/deploy-docs-preview.yml @@ -109,15 +109,32 @@ jobs: mkdir -p "$DEPLOY_ROOT" ARCHIVE="$(pwd)/artifact/docs-preview-sealed.tgz" # Heredoc body must be unindented — leading spaces would SyntaxError. - python3 - "$ARCHIVE" "$DEPLOY_ROOT" <<'PY' + # Quotas bound a hostile PR archive before it can fill the runner disk. + MAX_ARCHIVE_BYTES=$((2 * 1024 * 1024 * 1024)) # 2 GiB compressed + MAX_MEMBERS=400000 + MAX_TOTAL_UNCOMPRESSED=$((4 * 1024 * 1024 * 1024)) # 4 GiB + MAX_FILE_BYTES=$((512 * 1024 * 1024)) # 512 MiB per member + archive_bytes=$(wc -c < "$ARCHIVE") + if [ "$archive_bytes" -gt "$MAX_ARCHIVE_BYTES" ]; then + echo "archive too large: ${archive_bytes} bytes" >&2 + exit 1 + fi + python3 - "$ARCHIVE" "$DEPLOY_ROOT" "$MAX_MEMBERS" "$MAX_TOTAL_UNCOMPRESSED" "$MAX_FILE_BYTES" <<'PY' import os, sys, tarfile archive, dest = sys.argv[1], sys.argv[2] +max_members = int(sys.argv[3]) +max_total = int(sys.argv[4]) +max_file = int(sys.argv[5]) dest = os.path.realpath(dest) allowed_prefixes = (".vercel/", "website/node_modules/") with tarfile.open(archive, "r:gz") as tf: - for member in tf.getmembers(): + members = tf.getmembers() + if len(members) > max_members: + raise SystemExit(f"too many members: {len(members)} > {max_members}") + total = 0 + for member in members: name = member.name.lstrip("./") if name.startswith("/") or name.startswith("\\") or ".." in name.split("/"): raise SystemExit(f"refusing unsafe path: {member.name!r}") @@ -127,6 +144,12 @@ with tarfile.open(archive, "r:gz") as tf: raise SystemExit(f"refusing link member: {member.name!r}") if not (member.isfile() or member.isdir()): raise SystemExit(f"refusing non-file member: {member.name!r}") + size = member.size or 0 + if size > max_file: + raise SystemExit(f"member too large: {member.name!r} ({size} bytes)") + total += size + if total > max_total: + raise SystemExit(f"uncompressed total too large: {total} > {max_total}") target = os.path.realpath(os.path.join(dest, name)) if target != dest and not target.startswith(dest + os.sep): raise SystemExit(f"refusing path escape: {member.name!r}") From a22569ebb1b33db2d249e94327aac43c28b8b136 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Tue, 21 Jul 2026 20:52:13 -0700 Subject: [PATCH 29/63] make simpler --- precompiles/src/solidity/stakingV2.abi | 20 +- precompiles/src/solidity/stakingV2.sol | 36 +-- precompiles/src/staking.rs | 295 ++++++-------------- sdk/python/bittensor/evm/abi/stakingV2.json | 20 +- ts-tests/utils/evm-config.ts | 20 +- 5 files changed, 109 insertions(+), 282 deletions(-) diff --git a/precompiles/src/solidity/stakingV2.abi b/precompiles/src/solidity/stakingV2.abi index 3103071d3f..c410d0a936 100644 --- a/precompiles/src/solidity/stakingV2.abi +++ b/precompiles/src/solidity/stakingV2.abi @@ -105,14 +105,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "cursor", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "limit", - "type": "uint256" + "internalType": "bytes32[]", + "name": "hotkeys", + "type": "bytes32[]" } ], "name": "getStakeInfoForColdkeyAndNetuid", @@ -133,11 +128,6 @@ "internalType": "struct IStaking.StakeInfo[]", "name": "positions", "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "nextCursor", - "type": "uint256" } ], "stateMutability": "view", @@ -249,11 +239,11 @@ }, { "inputs": [], - "name": "getStakeOperationThreshold", + "name": "getDefaultMinStake", "outputs": [ { "internalType": "uint256", - "name": "threshold", + "name": "defaultMinStake", "type": "uint256" } ], diff --git a/precompiles/src/solidity/stakingV2.sol b/precompiles/src/solidity/stakingV2.sol index 98eb3124b9..0b884bf271 100644 --- a/precompiles/src/solidity/stakingV2.sol +++ b/precompiles/src/solidity/stakingV2.sol @@ -158,31 +158,20 @@ interface IStaking { ) external view returns (uint256); /** - * @dev Returns one bounded page of the coldkey's non-zero alpha stake positions - * on `netuid`. The cursor addresses the coldkey's historical staking-hotkey - * index, so a page can be empty while `nextCursor` is non-zero when every - * hotkey in that page has zero stake on the requested subnet. - * - * Begin with `cursor = 0`, use a `limit` from 1 through 64, and continue with - * the returned `nextCursor` until it is zero. This bounds storage decoding and - * gas consumption even when a coldkey has an arbitrarily large history. + * @dev Returns non-zero alpha stake positions for up to 64 caller-supplied + * hotkeys. Callers that need more must split their hotkeys across calls. + * This function does not read the coldkey's unbounded historical hotkey index. * * @param coldkey The coldkey public key (32 bytes). * @param netuid The subnet to query. - * @param cursor The zero-based historical hotkey index at which to start. - * @param limit The maximum historical hotkeys to scan (1 through 64). - * @return positions Non-zero hotkey and alpha stake pairs found in this page. - * @return nextCursor The cursor for the next page, or zero when complete. + * @param hotkeys The candidate hotkeys to query (maximum 64). + * @return positions Non-zero hotkey and alpha stake pairs. */ function getStakeInfoForColdkeyAndNetuid( bytes32 coldkey, uint256 netuid, - uint256 cursor, - uint256 limit - ) external view returns ( - StakeInfo[] memory positions, - uint256 nextCursor - ); + bytes32[] calldata hotkeys + ) external view returns (StakeInfo[] memory positions); /** * @dev Delegates staking to a proxy account. @@ -239,16 +228,15 @@ interface IStaking { function getNominatorMinRequiredStake() external view returns (uint256); /** - * @dev Returns the runtime-configured base TAO threshold used by stake operations. - * Depending on the operation, fees, price conversion, and full-unstake rules - * can make the exact accepted input differ from this base value. + * @dev Returns DefaultMinStake. This is a base value only; operation fees, + * price conversion, and full-unstake rules can change the accepted amount. * - * @return threshold The current DefaultMinStake value in rao. + * @return defaultMinStake The current DefaultMinStake value in rao. */ - function getStakeOperationThreshold() + function getDefaultMinStake() external view - returns (uint256 threshold); + returns (uint256 defaultMinStake); /** * @dev Adds a subtensor stake `amount` associated with the `hotkey` within a price limit. diff --git a/precompiles/src/staking.rs b/precompiles/src/staking.rs index f7c1f9051e..cfde25f8d2 100644 --- a/precompiles/src/staking.rs +++ b/precompiles/src/staking.rs @@ -31,7 +31,6 @@ // provided only in `transferStakeFrom`. use alloc::vec::Vec; -use codec::{Compact, Encode}; use core::marker::PhantomData; use frame_support::Blake2_128Concat; use frame_support::dispatch::{DispatchInfo, GetDispatchInfo, PostDispatchInfo}; @@ -56,8 +55,7 @@ use crate::{PrecompileExt, PrecompileHandleExt}; // share storage. In the V2 fallback case it performs two reads for the initial // share lookup, then five more for the value, share, and denominator. const STAKE_INFO_READS_PER_HOTKEY: u64 = 7; -const MAX_STAKE_INFO_PAGE_SIZE: u32 = 64; -const ACCOUNT_ID_ENCODED_SIZE: usize = 32; +const MAX_STAKE_INFO_HOTKEYS: usize = 64; /// Prefix for the Allowances map in Substrate storage. pub struct AllowancesPrefix; @@ -348,112 +346,44 @@ where Ok(u64::from(stake).into()) } - #[precompile::public("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)")] + #[precompile::public("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,bytes32[])")] #[precompile::view] fn get_stake_info_for_coldkey_and_netuid( handle: &mut impl PrecompileHandle, coldkey: H256, netuid: U256, - cursor: U256, - limit: U256, - ) -> EvmResult<(Vec<(H256, U256)>, U256)> { + hotkeys: Vec, + ) -> EvmResult> { let coldkey = R::AccountId::from(coldkey.0); let netuid = NetUid::from(try_u16_from_u256(netuid)?); - let cursor = try_u32_from_u256(cursor)?; - let limit = try_u32_from_u256(limit)?; - if limit == 0 { - return Err(revert("stake info page limit must be greater than zero")); - } - if limit > MAX_STAKE_INFO_PAGE_SIZE { - return Err(revert("stake info page limit exceeds 64")); - } - - // Charge before even reading the SCALE vector length. `decode_len` reads - // only the compact length prefix and never allocates or decodes the - // historical, unbounded `StakingHotkeys` value. - handle.record_db_reads::(1)?; - let hotkey_count = - pallet_subtensor::StakingHotkeys::::decode_len(&coldkey).unwrap_or_default(); - let cursor = usize::try_from(cursor).map_err(|_| revert("stake info cursor overflow"))?; - - if cursor >= hotkey_count { - return Ok((Vec::new(), U256::zero())); - } - - let limit = usize::try_from(limit).map_err(|_| revert("stake info limit overflow"))?; - let page_end = cursor.saturating_add(limit).min(hotkey_count); - let scanned_count = page_end.saturating_sub(cursor); - - // Charge the bounded raw page read and the worst-case V2 stake reads - // before allocating or reading the page bytes. - let scanned_count_u64: u64 = scanned_count.unique_saturated_into(); - let page_reads = - 1u64.saturating_add(scanned_count_u64.saturating_mul(STAKE_INFO_READS_PER_HOTKEY)); - handle.record_db_reads::(page_reads)?; - - // AccountId32 has a fixed 32-byte SCALE encoding. Read only the requested - // slice from the encoded Vec instead of calling `StakingHotkeys::get()`, - // which would decode the entire unbounded historical vector. - if coldkey.encode().len() != ACCOUNT_ID_ENCODED_SIZE { - return Err(revert("unsupported account id encoding")); - } - let storage_key = pallet_subtensor::StakingHotkeys::::hashed_key_for(&coldkey); - let compact_len = Compact( - u32::try_from(hotkey_count).map_err(|_| revert("staking hotkey count overflow"))?, - ) - .encode() - .len(); - let byte_offset = compact_len - .checked_add( - cursor - .checked_mul(ACCOUNT_ID_ENCODED_SIZE) - .ok_or_else(|| revert("stake info cursor overflow"))?, - ) - .ok_or_else(|| revert("stake info cursor overflow"))?; - let page_byte_len = scanned_count - .checked_mul(ACCOUNT_ID_ENCODED_SIZE) - .ok_or_else(|| revert("stake info page size overflow"))?; - let storage_offset = - u32::try_from(byte_offset).map_err(|_| revert("stake info cursor overflow"))?; - let mut encoded_hotkeys = vec![0u8; page_byte_len]; - let remaining = sp_io::storage::read(&storage_key, &mut encoded_hotkeys, storage_offset) - .ok_or_else(|| revert("staking hotkey storage disappeared"))?; - if usize::try_from(remaining).unwrap_or_default() < page_byte_len { - return Err(revert("invalid staking hotkey storage encoding")); + if hotkeys.len() > MAX_STAKE_INFO_HOTKEYS { + return Err(revert("stake info hotkey count exceeds 64")); } - let hotkeys = encoded_hotkeys - .chunks_exact(ACCOUNT_ID_ENCODED_SIZE) - .map(|bytes| { - let mut account = [0u8; ACCOUNT_ID_ENCODED_SIZE]; - account.copy_from_slice(bytes); - R::AccountId::from(account) - }); + // Charge the conservative V2 fallback cost for the complete bounded + // batch before performing any stake reads. + let hotkey_count: u64 = hotkeys.len().unique_saturated_into(); + handle.record_db_reads::(hotkey_count.saturating_mul(STAKE_INFO_READS_PER_HOTKEY))?; - let positions = hotkeys + Ok(hotkeys .into_iter() .filter_map(|hotkey| { + let hotkey_account = R::AccountId::from(hotkey.0); let stake = pallet_subtensor::Pallet::::get_stake_for_hotkey_and_coldkey_on_subnet( - &hotkey, &coldkey, netuid, + &hotkey_account, + &coldkey, + netuid, ) .to_u64(); if stake == 0 { return None; } - let hotkey: [u8; 32] = hotkey.into(); - Some((hotkey.into(), stake.into())) + Some((hotkey, stake.into())) }) - .collect(); - let next_cursor = if page_end < hotkey_count { - U256::from(page_end) - } else { - U256::zero() - }; - - Ok((positions, next_cursor)) + .collect()) } #[precompile::public("getAlphaStakedValidators(bytes32,uint256)")] @@ -505,9 +435,9 @@ where Ok(stake.into()) } - #[precompile::public("getStakeOperationThreshold()")] + #[precompile::public("getDefaultMinStake()")] #[precompile::view] - fn get_stake_operation_threshold(handle: &mut impl PrecompileHandle) -> EvmResult { + fn get_default_min_stake(handle: &mut impl PrecompileHandle) -> EvmResult { handle.record_db_reads::(1)?; Ok(pallet_subtensor::DefaultMinStake::::get() .to_u64() @@ -1045,12 +975,6 @@ fn try_u16_from_u256(value: U256) -> Result { }) } -fn try_u32_from_u256(value: U256) -> Result { - value.try_into().map_err(|_| PrecompileFailure::Error { - exit_status: ExitError::Other("the value is outside of u32 bounds".into()), - }) -} - fn try_u64_from_u256(value: U256) -> Result { value.try_into().map_err(|_| PrecompileFailure::Error { exit_status: ExitError::Other("the value is outside of u64 bounds".into()), @@ -1115,13 +1039,9 @@ mod tests { netuid } - fn stake_info_cost(scanned_count: usize) -> u64 { - let scanned_count = u64::try_from(scanned_count).expect("hotkey count fits in u64"); - let reads = if scanned_count == 0 { - 1 - } else { - 2u64.saturating_add(scanned_count.saturating_mul(STAKE_INFO_READS_PER_HOTKEY)) - }; + fn stake_info_cost(hotkey_count: usize) -> u64 { + let hotkey_count = u64::try_from(hotkey_count).expect("hotkey count fits in u64"); + let reads = hotkey_count.saturating_mul(STAKE_INFO_READS_PER_HOTKEY); RuntimeHelper::::db_read_gas_cost().saturating_mul(reads) } @@ -1254,7 +1174,7 @@ mod tests { } #[test] - fn staking_precompile_v2_pages_non_zero_stake_positions_for_requested_subnet() { + fn staking_precompile_v2_returns_non_zero_stake_positions_for_requested_hotkeys() { new_test_ext().execute_with(|| { let netuid = setup_staking_subnet(); setup_staking_subnet_id(SECOND_NETUID_U16); @@ -1269,65 +1189,36 @@ mod tests { add_stake_v2(caller, &hotkey_b, SECOND_NETUID_U16, INITIAL_STAKE_RAO); add_stake_v2(caller, &hotkey_c, TEST_NETUID_U16, INITIAL_STAKE_RAO); - let hotkeys = pallet_subtensor::Pallet::::get_all_staked_hotkeys(&coldkey); - let expected_first: Vec<(H256, U256)> = hotkeys - .iter() - .take(2) + let requested_hotkeys = vec![ + H256::from_slice(hotkey_a.as_ref()), + H256::from_slice(hotkey_b.as_ref()), + H256::from_slice(hotkey_c.as_ref()), + ]; + let expected: Vec<(H256, U256)> = [&hotkey_a, &hotkey_b, &hotkey_c] + .into_iter() .filter_map(|hotkey| { let stake = stake_for(hotkey, &coldkey, netuid); (stake > 0).then(|| (H256::from_slice(hotkey.as_ref()), U256::from(stake))) }) .collect(); - let expected_second: Vec<(H256, U256)> = hotkeys - .iter() - .skip(2) - .filter_map(|hotkey| { - let stake = stake_for(hotkey, &coldkey, netuid); - (stake > 0).then(|| (H256::from_slice(hotkey.as_ref()), U256::from(stake))) - }) - .collect(); - assert_eq!(expected_first.len(), 1); - assert_eq!(expected_second.len(), 1); - - precompiles::>() - .prepare_test( - caller, - addr_from_index(StakingPrecompileV2::::INDEX), - encode_with_selector( - selector_u32( - "getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)", - ), - ( - H256::from_slice(coldkey.as_ref()), - U256::from(TEST_NETUID_U16), - U256::zero(), - U256::from(2), - ), - ), - ) - .with_static_call(true) - .expect_cost(stake_info_cost(2)) - .execute_returns_raw(encode_return_value((expected_first, U256::from(2)))); + assert_eq!(expected.len(), 2); precompiles::>() .prepare_test( caller, addr_from_index(StakingPrecompileV2::::INDEX), encode_with_selector( - selector_u32( - "getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)", - ), + selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,bytes32[])"), ( H256::from_slice(coldkey.as_ref()), U256::from(TEST_NETUID_U16), - U256::from(2), - U256::from(2), + requested_hotkeys, ), ), ) .with_static_call(true) - .expect_cost(stake_info_cost(1)) - .execute_returns_raw(encode_return_value((expected_second, U256::zero()))); + .expect_cost(stake_info_cost(3)) + .execute_returns_raw(encode_return_value(expected)); }); } @@ -1337,29 +1228,24 @@ mod tests { setup_staking_subnet(); let caller = addr_from_index(0x1102); let coldkey = AccountId::from([0x41; 32]); + let hotkeys = vec![H256::repeat_byte(0x51), H256::repeat_byte(0x52)]; precompiles::>() .prepare_test( caller, addr_from_index(StakingPrecompileV2::::INDEX), encode_with_selector( - selector_u32( - "getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)", - ), + selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,bytes32[])"), ( H256::from_slice(coldkey.as_ref()), U256::from(TEST_NETUID_U16), - U256::zero(), - U256::from(MAX_STAKE_INFO_PAGE_SIZE), + hotkeys, ), ), ) .with_static_call(true) - .expect_cost(stake_info_cost(0)) - .execute_returns_raw(encode_return_value(( - Vec::<(H256, U256)>::new(), - U256::zero(), - ))); + .expect_cost(stake_info_cost(2)) + .execute_returns_raw(encode_return_value(Vec::<(H256, U256)>::new())); }); } @@ -1375,14 +1261,11 @@ mod tests { addr_from_index(StakingPrecompileV2::::INDEX), caller, encode_with_selector( - selector_u32( - "getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)", - ), + selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,bytes32[])"), ( H256::from_slice(coldkey.as_ref()), invalid_netuid, - U256::zero(), - U256::one(), + Vec::::new(), ), ), U256::zero(), @@ -1394,15 +1277,16 @@ mod tests { } #[test] - fn staking_precompile_v2_bounds_historical_hotkey_scan_and_precharges_page() { + fn staking_precompile_v2_only_reads_caller_supplied_hotkeys() { new_test_ext().execute_with(|| { let netuid = setup_staking_subnet(); let caller = addr_from_index(0x1105); let coldkey = mapped_account(caller); - let historical_hotkeys: Vec = (0..=MAX_STAKE_INFO_PAGE_SIZE) + let historical_hotkeys: Vec = (0..=MAX_STAKE_INFO_HOTKEYS) .map(|index| { let mut account = [0u8; 32]; - account[..4].copy_from_slice(&index.to_le_bytes()); + let index = u64::try_from(index).expect("test index fits in u64"); + account[..8].copy_from_slice(&index.to_le_bytes()); AccountId::from(account) }) .collect(); @@ -1424,90 +1308,75 @@ mod tests { let active_stake = stake_for(&active_hotkey, &coldkey, netuid); assert!(active_stake > 0); - let first_page_call = encode_with_selector( - selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)"), - ( - H256::from_slice(coldkey.as_ref()), - U256::from(TEST_NETUID_U16), - U256::zero(), - U256::from(MAX_STAKE_INFO_PAGE_SIZE), - ), - ); - - precompiles::>() - .prepare_test( - caller, - addr_from_index(StakingPrecompileV2::::INDEX), - first_page_call, - ) - .with_static_call(true) - .expect_cost(stake_info_cost(MAX_STAKE_INFO_PAGE_SIZE as usize)) - .execute_returns_raw(encode_return_value(( - Vec::<(H256, U256)>::new(), - U256::from(MAX_STAKE_INFO_PAGE_SIZE), - ))); - precompiles::>() .prepare_test( caller, addr_from_index(StakingPrecompileV2::::INDEX), encode_with_selector( - selector_u32( - "getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)", - ), + selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,bytes32[])"), ( H256::from_slice(coldkey.as_ref()), U256::from(TEST_NETUID_U16), - U256::from(MAX_STAKE_INFO_PAGE_SIZE), - U256::from(MAX_STAKE_INFO_PAGE_SIZE), + vec![H256::from_slice(active_hotkey.as_ref())], ), ), ) .with_static_call(true) .expect_cost(stake_info_cost(1)) - .execute_returns_raw(encode_return_value(( - vec![( - H256::from_slice(active_hotkey.as_ref()), - U256::from(active_stake), - )], - U256::zero(), - ))); + .execute_returns_raw(encode_return_value(vec![( + H256::from_slice(active_hotkey.as_ref()), + U256::from(active_stake), + )])); }); } #[test] - fn staking_precompile_v2_rejects_invalid_stake_info_page_limits() { + fn staking_precompile_v2_rejects_more_than_64_requested_hotkeys() { new_test_ext().execute_with(|| { + setup_staking_subnet(); let caller = addr_from_index(0x1106); let coldkey = AccountId::from([0x43; 32]); + let hotkeys = vec![H256::repeat_byte(0x53); MAX_STAKE_INFO_HOTKEYS + 1]; - for limit in [U256::zero(), U256::from(MAX_STAKE_INFO_PAGE_SIZE + 1)] { - let result = execute_precompile( - &precompiles::>(), - addr_from_index(StakingPrecompileV2::::INDEX), + precompiles::>() + .prepare_test( caller, + addr_from_index(StakingPrecompileV2::::INDEX), encode_with_selector( - selector_u32( - "getStakeInfoForColdkeyAndNetuid(bytes32,uint256,uint256,uint256)", - ), + selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,bytes32[])"), ( H256::from_slice(coldkey.as_ref()), U256::from(TEST_NETUID_U16), - U256::zero(), - limit, + hotkeys[..MAX_STAKE_INFO_HOTKEYS].to_vec(), ), ), - U256::zero(), ) - .expect("staking V2 call routes to the precompile"); + .with_static_call(true) + .expect_cost(stake_info_cost(MAX_STAKE_INFO_HOTKEYS)) + .execute_returns_raw(encode_return_value(Vec::<(H256, U256)>::new())); - assert!(result.is_err()); - } + let result = execute_precompile( + &precompiles::>(), + addr_from_index(StakingPrecompileV2::::INDEX), + caller, + encode_with_selector( + selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,bytes32[])"), + ( + H256::from_slice(coldkey.as_ref()), + U256::from(TEST_NETUID_U16), + hotkeys, + ), + ), + U256::zero(), + ) + .expect("staking V2 call routes to the precompile"); + + assert!(result.is_err()); }); } #[test] - fn staking_precompile_v2_returns_current_stake_operation_threshold() { + fn staking_precompile_v2_returns_default_min_stake() { new_test_ext().execute_with(|| { let threshold = pallet_subtensor::DefaultMinStake::::get(); @@ -1515,7 +1384,7 @@ mod tests { .prepare_test( addr_from_index(0x1104), addr_from_index(StakingPrecompileV2::::INDEX), - encode_with_selector(selector_u32("getStakeOperationThreshold()"), ()), + encode_with_selector(selector_u32("getDefaultMinStake()"), ()), ) .with_static_call(true) .expect_cost(RuntimeHelper::::db_read_gas_cost()) diff --git a/sdk/python/bittensor/evm/abi/stakingV2.json b/sdk/python/bittensor/evm/abi/stakingV2.json index 3103071d3f..c410d0a936 100644 --- a/sdk/python/bittensor/evm/abi/stakingV2.json +++ b/sdk/python/bittensor/evm/abi/stakingV2.json @@ -105,14 +105,9 @@ "type": "uint256" }, { - "internalType": "uint256", - "name": "cursor", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "limit", - "type": "uint256" + "internalType": "bytes32[]", + "name": "hotkeys", + "type": "bytes32[]" } ], "name": "getStakeInfoForColdkeyAndNetuid", @@ -133,11 +128,6 @@ "internalType": "struct IStaking.StakeInfo[]", "name": "positions", "type": "tuple[]" - }, - { - "internalType": "uint256", - "name": "nextCursor", - "type": "uint256" } ], "stateMutability": "view", @@ -249,11 +239,11 @@ }, { "inputs": [], - "name": "getStakeOperationThreshold", + "name": "getDefaultMinStake", "outputs": [ { "internalType": "uint256", - "name": "threshold", + "name": "defaultMinStake", "type": "uint256" } ], diff --git a/ts-tests/utils/evm-config.ts b/ts-tests/utils/evm-config.ts index 66fa70a1e8..f6c4554339 100644 --- a/ts-tests/utils/evm-config.ts +++ b/ts-tests/utils/evm-config.ts @@ -175,14 +175,9 @@ export const IStakingV2ABI = [ type: "uint256", }, { - internalType: "uint256", - name: "cursor", - type: "uint256", - }, - { - internalType: "uint256", - name: "limit", - type: "uint256", + internalType: "bytes32[]", + name: "hotkeys", + type: "bytes32[]", }, ], name: "getStakeInfoForColdkeyAndNetuid", @@ -204,11 +199,6 @@ export const IStakingV2ABI = [ name: "positions", type: "tuple[]", }, - { - internalType: "uint256", - name: "nextCursor", - type: "uint256", - }, ], stateMutability: "view", type: "function", @@ -343,11 +333,11 @@ export const IStakingV2ABI = [ }, { inputs: [], - name: "getStakeOperationThreshold", + name: "getDefaultMinStake", outputs: [ { internalType: "uint256", - name: "threshold", + name: "defaultMinStake", type: "uint256", }, ], From d89ee1502115ce9491e65274da526ae152b65c76 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Tue, 21 Jul 2026 21:05:44 -0700 Subject: [PATCH 30/63] fix underread --- precompiles/src/staking.rs | 64 ++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/precompiles/src/staking.rs b/precompiles/src/staking.rs index cfde25f8d2..ded713e2de 100644 --- a/precompiles/src/staking.rs +++ b/precompiles/src/staking.rs @@ -332,8 +332,8 @@ where coldkey: H256, netuid: U256, ) -> EvmResult { - // Alpha share pool reads - handle.record_db_reads::(2)?; + // Worst-case V2 fallback reads for the alpha share pool. + handle.record_db_reads::(STAKE_INFO_READS_PER_HOTKEY)?; let hotkey = R::AccountId::from(hotkey.0); let coldkey = R::AccountId::from(coldkey.0); let netuid = try_u16_from_u256(netuid)?; @@ -886,8 +886,8 @@ where coldkey: H256, netuid: U256, ) -> EvmResult { - // Alpha share pool reads - handle.record_db_reads::(2)?; + // Worst-case V2 fallback reads for the alpha share pool. + handle.record_db_reads::(STAKE_INFO_READS_PER_HOTKEY)?; let hotkey = R::AccountId::from(hotkey.0); let coldkey = R::AccountId::from(coldkey.0); let netuid = try_u16_from_u256(netuid)?; @@ -1408,20 +1408,22 @@ mod tests { let stake_after = stake_for(&hotkey, &caller_account, netuid); assert!(stake_after > stake_before); - assert_static_call( - &precompiles::>(), - caller, - addr_from_index(StakingPrecompile::::INDEX), - encode_with_selector( - selector_u32("getStake(bytes32,bytes32,uint256)"), - ( - H256::from_slice(hotkey.as_ref()), - H256::from_slice(caller_account.as_ref()), - U256::from(TEST_NETUID_U16), + precompiles::>() + .prepare_test( + caller, + addr_from_index(StakingPrecompile::::INDEX), + encode_with_selector( + selector_u32("getStake(bytes32,bytes32,uint256)"), + ( + H256::from_slice(hotkey.as_ref()), + H256::from_slice(caller_account.as_ref()), + U256::from(TEST_NETUID_U16), + ), ), - ), - substrate_to_evm(stake_after), - ); + ) + .with_static_call(true) + .expect_cost(stake_info_cost(1)) + .execute_returns(substrate_to_evm(stake_after)); }); } @@ -1447,20 +1449,22 @@ mod tests { let precompiles = precompiles::>(); let precompile_addr = addr_from_index(StakingPrecompileV2::::INDEX); - assert_static_call( - &precompiles, - caller, - precompile_addr, - encode_with_selector( - selector_u32("getStake(bytes32,bytes32,uint256)"), - ( - H256::from_slice(hotkey.as_ref()), - H256::from_slice(caller_account.as_ref()), - U256::from(TEST_NETUID_U16), + precompiles + .prepare_test( + caller, + precompile_addr, + encode_with_selector( + selector_u32("getStake(bytes32,bytes32,uint256)"), + ( + H256::from_slice(hotkey.as_ref()), + H256::from_slice(caller_account.as_ref()), + U256::from(TEST_NETUID_U16), + ), ), - ), - U256::from(stake_after), - ); + ) + .with_static_call(true) + .expect_cost(stake_info_cost(1)) + .execute_returns(U256::from(stake_after)); assert_static_call( &precompiles, caller, From 1bf54a4a5184b23caa2fcea106a91ecd9f410296 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Tue, 21 Jul 2026 21:30:07 -0700 Subject: [PATCH 31/63] reject duplicate hotkesy --- precompiles/src/solidity/stakingV2.sol | 5 +-- precompiles/src/staking.rs | 46 +++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/precompiles/src/solidity/stakingV2.sol b/precompiles/src/solidity/stakingV2.sol index 0b884bf271..f1964416eb 100644 --- a/precompiles/src/solidity/stakingV2.sol +++ b/precompiles/src/solidity/stakingV2.sol @@ -159,12 +159,13 @@ interface IStaking { /** * @dev Returns non-zero alpha stake positions for up to 64 caller-supplied - * hotkeys. Callers that need more must split their hotkeys across calls. + * distinct hotkeys. Duplicate hotkeys revert. Callers that need more must + * split their hotkeys across calls. * This function does not read the coldkey's unbounded historical hotkey index. * * @param coldkey The coldkey public key (32 bytes). * @param netuid The subnet to query. - * @param hotkeys The candidate hotkeys to query (maximum 64). + * @param hotkeys The distinct candidate hotkeys to query (maximum 64). * @return positions Non-zero hotkey and alpha stake pairs. */ function getStakeInfoForColdkeyAndNetuid( diff --git a/precompiles/src/staking.rs b/precompiles/src/staking.rs index ded713e2de..d4217857eb 100644 --- a/precompiles/src/staking.rs +++ b/precompiles/src/staking.rs @@ -361,6 +361,12 @@ where return Err(revert("stake info hotkey count exceeds 64")); } + for (index, hotkey) in hotkeys.iter().enumerate() { + if hotkeys.iter().take(index).any(|seen| seen == hotkey) { + return Err(revert("duplicate stake info hotkey")); + } + } + // Charge the conservative V2 fallback cost for the complete bounded // batch before performing any stake reads. let hotkey_count: u64 = hotkeys.len().unique_saturated_into(); @@ -1336,7 +1342,13 @@ mod tests { setup_staking_subnet(); let caller = addr_from_index(0x1106); let coldkey = AccountId::from([0x43; 32]); - let hotkeys = vec![H256::repeat_byte(0x53); MAX_STAKE_INFO_HOTKEYS + 1]; + let hotkeys: Vec = (0..=MAX_STAKE_INFO_HOTKEYS) + .map(|index| { + let mut hotkey = [0u8; 32]; + hotkey[..8].copy_from_slice(&index.to_le_bytes()); + H256::from(hotkey) + }) + .collect(); precompiles::>() .prepare_test( @@ -1375,6 +1387,38 @@ mod tests { }); } + #[test] + fn staking_precompile_v2_rejects_duplicate_requested_hotkeys() { + new_test_ext().execute_with(|| { + let netuid = setup_staking_subnet(); + let caller = addr_from_index(0x1107); + let coldkey = mapped_account(caller); + let hotkey = AccountId::from([0x54; 32]); + let requested_hotkey = H256::from_slice(hotkey.as_ref()); + + fund_account(&coldkey, COLDKEY_BALANCE); + add_stake_v2(caller, &hotkey, TEST_NETUID_U16, INITIAL_STAKE_RAO); + assert!(stake_for(&hotkey, &coldkey, netuid) > 0); + + precompiles::>() + .prepare_test( + caller, + addr_from_index(StakingPrecompileV2::::INDEX), + encode_with_selector( + selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,bytes32[])"), + ( + H256::from_slice(coldkey.as_ref()), + U256::from(TEST_NETUID_U16), + vec![requested_hotkey, H256::repeat_byte(0x55), requested_hotkey], + ), + ), + ) + .with_static_call(true) + .expect_cost(0) + .execute_reverts(|output| output == b"duplicate stake info hotkey"); + }); + } + #[test] fn staking_precompile_v2_returns_default_min_stake() { new_test_ext().execute_with(|| { From 521b7f92ec34822cf56d7a0e2b8ea640875c8bb4 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Tue, 21 Jul 2026 21:53:19 -0700 Subject: [PATCH 32/63] charge for checkhow --- precompiles/src/staking.rs | 60 +++++++++++++++++++++++--------------- runtime/src/lib.rs | 2 +- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/precompiles/src/staking.rs b/precompiles/src/staking.rs index d4217857eb..a146749ee9 100644 --- a/precompiles/src/staking.rs +++ b/precompiles/src/staking.rs @@ -30,6 +30,7 @@ // The allowance is specific to a pair of `(spender, netuid)`, but doesn't specify the `hotkey` which is instead // provided only in `transferStakeFrom`. +use alloc::collections::BTreeSet; use alloc::vec::Vec; use core::marker::PhantomData; use frame_support::Blake2_128Concat; @@ -55,6 +56,8 @@ use crate::{PrecompileExt, PrecompileHandleExt}; // share storage. In the V2 fallback case it performs two reads for the initial // share lookup, then five more for the value, share, and denominator. const STAKE_INFO_READS_PER_HOTKEY: u64 = 7; +// Conservative charge for decoding and validating each 32-byte hotkey. +const STAKE_INFO_INPUT_GAS_PER_HOTKEY: u64 = 64; const MAX_STAKE_INFO_HOTKEYS: usize = 64; /// Prefix for the Allowances map in Substrate storage. @@ -354,6 +357,9 @@ where netuid: U256, hotkeys: Vec, ) -> EvmResult> { + let hotkey_count: u64 = hotkeys.len().unique_saturated_into(); + handle.record_cost(hotkey_count.saturating_mul(STAKE_INFO_INPUT_GAS_PER_HOTKEY))?; + let coldkey = R::AccountId::from(coldkey.0); let netuid = NetUid::from(try_u16_from_u256(netuid)?); @@ -361,15 +367,15 @@ where return Err(revert("stake info hotkey count exceeds 64")); } - for (index, hotkey) in hotkeys.iter().enumerate() { - if hotkeys.iter().take(index).any(|seen| seen == hotkey) { + let mut seen = BTreeSet::new(); + for hotkey in &hotkeys { + if !seen.insert(hotkey) { return Err(revert("duplicate stake info hotkey")); } } // Charge the conservative V2 fallback cost for the complete bounded // batch before performing any stake reads. - let hotkey_count: u64 = hotkeys.len().unique_saturated_into(); handle.record_db_reads::(hotkey_count.saturating_mul(STAKE_INFO_READS_PER_HOTKEY))?; Ok(hotkeys @@ -1045,12 +1051,21 @@ mod tests { netuid } - fn stake_info_cost(hotkey_count: usize) -> u64 { + fn stake_read_cost(hotkey_count: usize) -> u64 { let hotkey_count = u64::try_from(hotkey_count).expect("hotkey count fits in u64"); let reads = hotkey_count.saturating_mul(STAKE_INFO_READS_PER_HOTKEY); RuntimeHelper::::db_read_gas_cost().saturating_mul(reads) } + fn stake_info_validation_cost(hotkey_count: usize) -> u64 { + let hotkey_count = u64::try_from(hotkey_count).expect("hotkey count fits in u64"); + STAKE_INFO_INPUT_GAS_PER_HOTKEY.saturating_mul(hotkey_count) + } + + fn stake_info_cost(hotkey_count: usize) -> u64 { + stake_info_validation_cost(hotkey_count).saturating_add(stake_read_cost(hotkey_count)) + } + fn hotkey() -> AccountId { AccountId::from([0x11; 32]) } @@ -1367,23 +1382,22 @@ mod tests { .expect_cost(stake_info_cost(MAX_STAKE_INFO_HOTKEYS)) .execute_returns_raw(encode_return_value(Vec::<(H256, U256)>::new())); - let result = execute_precompile( - &precompiles::>(), - addr_from_index(StakingPrecompileV2::::INDEX), - caller, - encode_with_selector( - selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,bytes32[])"), - ( - H256::from_slice(coldkey.as_ref()), - U256::from(TEST_NETUID_U16), - hotkeys, + precompiles::>() + .prepare_test( + caller, + addr_from_index(StakingPrecompileV2::::INDEX), + encode_with_selector( + selector_u32("getStakeInfoForColdkeyAndNetuid(bytes32,uint256,bytes32[])"), + ( + H256::from_slice(coldkey.as_ref()), + U256::from(TEST_NETUID_U16), + hotkeys, + ), ), - ), - U256::zero(), - ) - .expect("staking V2 call routes to the precompile"); - - assert!(result.is_err()); + ) + .with_static_call(true) + .expect_cost(stake_info_validation_cost(MAX_STAKE_INFO_HOTKEYS + 1)) + .execute_reverts(|output| output == b"stake info hotkey count exceeds 64"); }); } @@ -1414,7 +1428,7 @@ mod tests { ), ) .with_static_call(true) - .expect_cost(0) + .expect_cost(stake_info_validation_cost(3)) .execute_reverts(|output| output == b"duplicate stake info hotkey"); }); } @@ -1466,7 +1480,7 @@ mod tests { ), ) .with_static_call(true) - .expect_cost(stake_info_cost(1)) + .expect_cost(stake_read_cost(1)) .execute_returns(substrate_to_evm(stake_after)); }); } @@ -1507,7 +1521,7 @@ mod tests { ), ) .with_static_call(true) - .expect_cost(stake_info_cost(1)) + .expect_cost(stake_read_cost(1)) .execute_returns(U256::from(stake_after)); assert_static_call( &precompiles, diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index e0c88074a6..972100eba6 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -235,7 +235,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 435, + spec_version: 436, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From 1f58911d4079fedb0b759645ea0065e431f6867f Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Tue, 21 Jul 2026 22:01:19 -0700 Subject: [PATCH 33/63] Bound stake-info hotkey decoding --- precompiles/src/staking.rs | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/precompiles/src/staking.rs b/precompiles/src/staking.rs index a146749ee9..66db22a075 100644 --- a/precompiles/src/staking.rs +++ b/precompiles/src/staking.rs @@ -36,7 +36,7 @@ use core::marker::PhantomData; use frame_support::Blake2_128Concat; use frame_support::dispatch::{DispatchInfo, GetDispatchInfo, PostDispatchInfo}; use frame_support::pallet_prelude::{StorageDoubleMap, ValueQuery}; -use frame_support::traits::{Get, IsSubType, StorageInstance}; +use frame_support::traits::{ConstU32, Get, IsSubType, StorageInstance}; use frame_system::RawOrigin; use pallet_evm::{ AddressMapping, BalanceConverter, EvmBalance, ExitError, PrecompileFailure, PrecompileHandle, @@ -44,7 +44,7 @@ use pallet_evm::{ }; use pallet_subtensor_proxy as pallet_proxy; use precompile_utils::EvmResult; -use precompile_utils::prelude::{Address, revert}; +use precompile_utils::prelude::{Address, BoundedVec, revert}; use sp_core::{H160, H256, U256}; use sp_runtime::traits::{AsSystemOriginSigner, Dispatchable, StaticLookup, UniqueSaturatedInto}; use sp_std::vec; @@ -355,18 +355,15 @@ where handle: &mut impl PrecompileHandle, coldkey: H256, netuid: U256, - hotkeys: Vec, + hotkeys: BoundedVec>, ) -> EvmResult> { let hotkey_count: u64 = hotkeys.len().unique_saturated_into(); handle.record_cost(hotkey_count.saturating_mul(STAKE_INFO_INPUT_GAS_PER_HOTKEY))?; + let hotkeys: Vec = hotkeys.into(); let coldkey = R::AccountId::from(coldkey.0); let netuid = NetUid::from(try_u16_from_u256(netuid)?); - if hotkeys.len() > MAX_STAKE_INFO_HOTKEYS { - return Err(revert("stake info hotkey count exceeds 64")); - } - let mut seen = BTreeSet::new(); for hotkey in &hotkeys { if !seen.insert(hotkey) { @@ -1352,7 +1349,7 @@ mod tests { } #[test] - fn staking_precompile_v2_rejects_more_than_64_requested_hotkeys() { + fn staking_precompile_v2_codec_rejects_more_than_64_requested_hotkeys() { new_test_ext().execute_with(|| { setup_staking_subnet(); let caller = addr_from_index(0x1106); @@ -1396,8 +1393,8 @@ mod tests { ), ) .with_static_call(true) - .expect_cost(stake_info_validation_cost(MAX_STAKE_INFO_HOTKEYS + 1)) - .execute_reverts(|output| output == b"stake info hotkey count exceeds 64"); + .expect_cost(0) + .execute_reverts(|output| output == b"hotkeys: Value is too large for length"); }); } From 862277b090ccab5c84ab9ad46205354e432b5011 Mon Sep 17 00:00:00 2001 From: UnarbosFour Date: Wed, 22 Jul 2026 13:17:52 -0400 Subject: [PATCH 34/63] Fix mechanism emission split --- pallets/subtensor/src/subnets/mechanism.rs | 2 +- pallets/subtensor/src/tests/mechanism.rs | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/pallets/subtensor/src/subnets/mechanism.rs b/pallets/subtensor/src/subnets/mechanism.rs index de99eca7f7..11aeb76b8a 100644 --- a/pallets/subtensor/src/subnets/mechanism.rs +++ b/pallets/subtensor/src/subnets/mechanism.rs @@ -208,7 +208,7 @@ impl Pallet { // Check the length ensure!(!split.is_empty(), Error::::InvalidValue); ensure!( - split.len() <= u8::from(MechanismCountCurrent::::get(netuid)) as usize, + split.len() == u8::from(MechanismCountCurrent::::get(netuid)) as usize, Error::::InvalidValue ); diff --git a/pallets/subtensor/src/tests/mechanism.rs b/pallets/subtensor/src/tests/mechanism.rs index 5fb48c409d..c2075f041f 100644 --- a/pallets/subtensor/src/tests/mechanism.rs +++ b/pallets/subtensor/src/tests/mechanism.rs @@ -392,6 +392,28 @@ fn update_mechanism_counts_increases() { }); } +#[test] +fn emission_split_requires_one_entry_per_mechanism() { + new_test_ext(1).execute_with(|| { + let netuid = NetUid::from(42u16); + NetworksAdded::::insert(netuid, true); + MechanismCountCurrent::::insert(netuid, MechId::from(2u8)); + + assert_noop!( + SubtensorModule::do_set_emission_split(netuid, Some(vec![u16::MAX])), + Error::::InvalidValue + ); + assert!(MechanismEmissionSplit::::get(netuid).is_none()); + + let split = vec![u16::MAX / 2, u16::MAX - u16::MAX / 2]; + assert_ok!(SubtensorModule::do_set_emission_split( + netuid, + Some(split.clone()) + )); + assert_eq!(MechanismEmissionSplit::::get(netuid), Some(split)); + }); +} + #[test] fn split_emissions_even_division() { new_test_ext(1).execute_with(|| { From 79c115f3460a0a3f28b7bf27963cc1a498b1af3a Mon Sep 17 00:00:00 2001 From: UnarbosFour Date: Wed, 22 Jul 2026 13:27:35 -0400 Subject: [PATCH 35/63] Prevent parent-child key closed loops --- pallets/subtensor/src/macros/dispatches.rs | 7 +- pallets/subtensor/src/staking/set_children.rs | 69 +++++++++++++ pallets/subtensor/src/tests/children.rs | 97 +++++++++++++++++++ 3 files changed, 172 insertions(+), 1 deletion(-) diff --git a/pallets/subtensor/src/macros/dispatches.rs b/pallets/subtensor/src/macros/dispatches.rs index 3a15a1b151..d2f929a412 100644 --- a/pallets/subtensor/src/macros/dispatches.rs +++ b/pallets/subtensor/src/macros/dispatches.rs @@ -1075,7 +1075,12 @@ mod dispatches { /// 8. **New Children Assignment**: Assigns the new child to the hotkey and updates the parent list for the new child. // TODO: Benchmark this call #[pallet::call_index(67)] - #[pallet::weight((::WeightInfo::set_children(children.len() as u32), DispatchClass::Normal, Pays::Yes))] + #[pallet::weight(( + ::WeightInfo::set_children(children.len() as u32) + .saturating_add(crate::Pallet::::set_children_cycle_check_weight()), + DispatchClass::Normal, + Pays::Yes + ))] pub fn set_children( origin: OriginFor, hotkey: T::AccountId, diff --git a/pallets/subtensor/src/staking/set_children.rs b/pallets/subtensor/src/staking/set_children.rs index 2c516eda5d..949d9bff0d 100644 --- a/pallets/subtensor/src/staking/set_children.rs +++ b/pallets/subtensor/src/staking/set_children.rs @@ -4,6 +4,13 @@ use sp_runtime::PerU16; use sp_std::collections::{btree_map::BTreeMap, btree_set::BTreeSet}; use subtensor_runtime_common::NetUid; +/// Maximum number of existing child edges followed from a proposed child. +/// Keeping this deliberately small bounds both execution time and hierarchy depth. +pub const MAX_CHILDKEY_REACHABILITY_DEPTH: u8 = 4; + +/// Maximum number of distinct hotkeys inspected by one cycle check. +pub const MAX_CHILDKEY_REACHABILITY_NODES: u32 = 32; + pub struct PCRelations { /// The distinguished `hotkey` this structure is built around. pivot: T::AccountId, @@ -157,6 +164,67 @@ impl PCRelations { } impl Pallet { + /// Weight reserved for the bounded cycle check. Each visited hotkey reads + /// `PendingChildKeys` and, when no pending replacement exists, `ChildKeys`. + pub fn set_children_cycle_check_weight() -> Weight { + T::DbWeight::get().reads(MAX_CHILDKEY_REACHABILITY_NODES.saturating_mul(2).into()) + } + + /// Reject a proposed `parent -> children` update when a child can already + /// reach `parent`. Pending child updates take precedence over active edges, + /// matching the graph that will exist once the pending queue is applied. + /// + /// The walk fails closed when either bound is reached. This prevents an + /// attacker from constructing an expensive graph and also places a small + /// upper bound on childkey hierarchy depth. + fn ensure_bounded_childkey_reachability( + parent: &T::AccountId, + netuid: NetUid, + children: &[(u64, T::AccountId)], + ) -> DispatchResult { + let mut seen = BTreeSet::::new(); + let mut stack = Vec::<(T::AccountId, u8)>::new(); + + for (_, child) in children { + ensure!(child != parent, Error::::InvalidChild); + if seen.insert(child.clone()) { + ensure!( + seen.len() <= MAX_CHILDKEY_REACHABILITY_NODES as usize, + Error::::ChildParentInconsistency + ); + stack.push((child.clone(), 0)); + } + } + + while let Some((hotkey, depth)) = stack.pop() { + let descendants = PendingChildKeys::::try_get(netuid, &hotkey) + .map(|(pending, _)| pending) + .unwrap_or_else(|_| ChildKeys::::get(&hotkey, netuid)); + + if descendants.is_empty() { + continue; + } + + ensure!( + depth < MAX_CHILDKEY_REACHABILITY_DEPTH, + Error::::ChildParentInconsistency + ); + + for (_, descendant) in descendants { + ensure!(descendant != *parent, Error::::ChildParentInconsistency); + if seen.insert(descendant.clone()) { + ensure!( + seen.len() <= MAX_CHILDKEY_REACHABILITY_NODES as usize, + Error::::ChildParentInconsistency + ); + stack.push((descendant, depth.saturating_add(1))); + } + } + } + + Ok(()) + } + /// Set childkeys vector making sure there are no empty vectors in the state fn set_childkeys(parent: T::AccountId, netuid: NetUid, childkey_vec: Vec<(u64, T::AccountId)>) { if childkey_vec.is_empty() { @@ -525,6 +593,7 @@ impl Pallet { // - Bipartite separation (no A <-> B relations) let relations = Self::load_child_parent_relations(&hotkey, netuid)?; relations.ensure_pending_consistency(&children)?; + Self::ensure_bounded_childkey_reachability(&hotkey, netuid, &children)?; // Check that the parent key has at least the minimum own stake // if children vector is not empty diff --git a/pallets/subtensor/src/tests/children.rs b/pallets/subtensor/src/tests/children.rs index 1dc7bf4a86..7e36eec7c1 100644 --- a/pallets/subtensor/src/tests/children.rs +++ b/pallets/subtensor/src/tests/children.rs @@ -44,6 +44,103 @@ fn test_do_set_child_singular_success() { }); } +#[test] +fn test_set_children_rejects_three_node_active_cycle() { + new_test_ext(1).execute_with(|| { + let netuid = NetUid::from(1); + let coldkey_a = U256::from(1); + let hotkey_a = U256::from(2); + let coldkey_b = U256::from(3); + let hotkey_b = U256::from(4); + let coldkey_c = U256::from(5); + let hotkey_c = U256::from(6); + + add_network(netuid, 13, 0); + register_ok_neuron(netuid, hotkey_a, coldkey_a, 0); + register_ok_neuron(netuid, hotkey_b, coldkey_b, 0); + register_ok_neuron(netuid, hotkey_c, coldkey_c, 0); + + mock_schedule_children(&coldkey_a, &hotkey_a, netuid, &[(u64::MAX, hotkey_b)]); + mock_schedule_children(&coldkey_b, &hotkey_b, netuid, &[(u64::MAX, hotkey_c)]); + + assert_noop!( + SubtensorModule::do_schedule_children( + RuntimeOrigin::signed(coldkey_c), + hotkey_c, + netuid, + vec![(u64::MAX, hotkey_a)], + ), + Error::::ChildParentInconsistency + ); + }); +} + +#[test] +fn test_set_children_rejects_three_node_pending_cycle() { + new_test_ext(1).execute_with(|| { + let netuid = NetUid::from(1); + let coldkey_a = U256::from(11); + let hotkey_a = U256::from(12); + let coldkey_b = U256::from(13); + let hotkey_b = U256::from(14); + let coldkey_c = U256::from(15); + let hotkey_c = U256::from(16); + + add_network(netuid, 13, 0); + SubtokenEnabled::::insert(netuid, true); + register_ok_neuron(netuid, hotkey_a, coldkey_a, 0); + register_ok_neuron(netuid, hotkey_b, coldkey_b, 0); + register_ok_neuron(netuid, hotkey_c, coldkey_c, 0); + + mock_schedule_children(&coldkey_a, &hotkey_a, netuid, &[(u64::MAX, hotkey_b)]); + mock_schedule_children(&coldkey_b, &hotkey_b, netuid, &[(u64::MAX, hotkey_c)]); + + assert_noop!( + SubtensorModule::do_schedule_children( + RuntimeOrigin::signed(coldkey_c), + hotkey_c, + netuid, + vec![(u64::MAX, hotkey_a)], + ), + Error::::ChildParentInconsistency + ); + }); +} + +#[test] +fn test_set_children_rejects_hierarchy_beyond_reachability_depth() { + new_test_ext(1).execute_with(|| { + let netuid = NetUid::from(1); + let coldkeys: Vec = (21..28).map(U256::from).collect(); + let hotkeys: Vec = (31..38).map(U256::from).collect(); + + add_network(netuid, 13, 0); + for (coldkey, hotkey) in coldkeys.iter().zip(hotkeys.iter()) { + register_ok_neuron(netuid, *hotkey, *coldkey, 0); + } + + // Build from the tail so every accepted update is within the bound. + for index in (1..hotkeys.len() - 1).rev() { + mock_schedule_children( + &coldkeys[index], + &hotkeys[index], + netuid, + &[(u64::MAX, hotkeys[index + 1])], + ); + } + + assert_noop!( + SubtensorModule::do_schedule_children( + RuntimeOrigin::signed(coldkeys[0]), + hotkeys[0], + netuid, + vec![(u64::MAX, hotkeys[1])], + ), + Error::::ChildParentInconsistency + ); + }); +} + // 2: Attempt to set child in non-existent network // SKIP_WASM_BUILD=1 RUST_LOG=debug cargo test --package pallet-subtensor --lib -- tests::children::test_do_set_child_singular_network_does_not_exist --exact --show-output --nocapture #[test] From 2d4f0aa4aaf7fb4926054b388befd944259b73be Mon Sep 17 00:00:00 2001 From: UnarbosFour Date: Wed, 22 Jul 2026 13:41:49 -0400 Subject: [PATCH 36/63] Fix BlocksSinceLastStep can exceed Tempo + 1 issue --- .../subtensor/src/coinbase/run_coinbase.rs | 25 ++++++-- pallets/subtensor/src/lib.rs | 2 +- pallets/subtensor/src/tests/coinbase.rs | 60 +++++++++++++++++++ 3 files changed, 80 insertions(+), 7 deletions(-) diff --git a/pallets/subtensor/src/coinbase/run_coinbase.rs b/pallets/subtensor/src/coinbase/run_coinbase.rs index 70c1657830..e3425addba 100644 --- a/pallets/subtensor/src/coinbase/run_coinbase.rs +++ b/pallets/subtensor/src/coinbase/run_coinbase.rs @@ -391,10 +391,17 @@ impl Pallet { let mut epochs_run_this_block: u32 = 0; for &netuid in subnets.iter() { - // Increment blocks since last *successful* step (existing semantics). - BlocksSinceLastStep::::mutate(netuid, |total| *total = total.saturating_add(1)); + // Keep the scheduler age bounded per subnet. `tempo + 1` is enough to + // record that a due epoch missed its slot while avoiding an unbounded + // public counter when the epoch is repeatedly deferred or its input + // state remains inconsistent. + let tempo = Self::get_tempo(netuid); + let max_blocks_since_last_step = u64::from(tempo).saturating_add(1); + BlocksSinceLastStep::::mutate(netuid, |total| { + *total = total.saturating_add(1).min(max_blocks_since_last_step) + }); - if !Self::should_run_epoch(netuid, current_block) { + if !Self::should_run_epoch_with_tempo(netuid, current_block, tempo) { continue; } @@ -1143,6 +1150,12 @@ impl Pallet { /// * `bool`: True if the epoch should run, false otherwise. pub fn should_run_epoch(netuid: NetUid, current_block: u64) -> bool { let tempo = Self::get_tempo(netuid); + Self::should_run_epoch_with_tempo(netuid, current_block, tempo) + } + + /// Same predicate as `should_run_epoch`, using an already-loaded tempo so + /// callers that also need the tempo do not charge a duplicate storage read. + fn should_run_epoch_with_tempo(netuid: NetUid, current_block: u64, tempo: u16) -> bool { if tempo == 0 { return false; } @@ -1150,7 +1163,7 @@ impl Pallet { if pending > 0 && current_block >= pending { return true; } - if BlocksSinceLastStep::::get(netuid) > MAX_TEMPO as u64 { + if BlocksSinceLastStep::::get(netuid) > u64::from(tempo) { return true; } let last = LastEpochBlock::::get(netuid); @@ -1161,7 +1174,7 @@ impl Pallet { /// Returns the number of blocks remaining before the next automatic epoch under the /// stateful scheduler (period `tempo`, anchored on `LastEpochBlock`). Does NOT account for: /// - `PendingEpochAt` (owner-triggered manual fire — could happen sooner), - /// - `BlocksSinceLastStep > MAX_TEMPO` safety-net, + /// - `BlocksSinceLastStep > tempo` safety-net, /// - per-block-cap defer (could push the actual fire one or more blocks later) /// Used by the admin-freeze-window predicate and external tooling. Returns `u64::MAX` when /// `tempo == 0` (legacy defensive short-circuit). @@ -1178,7 +1191,7 @@ impl Pallet { /// Returns the absolute block number at which the next epoch is expected to fire for the /// given subnet, considering both the automatic schedule (`LastEpochBlock + tempo`) and /// any owner-triggered `PendingEpochAt`. Returns `None` if `tempo == 0` (subnet does not run). - /// Does NOT account for the per-block cap deferral or the `BlocksSinceLastStep > MAX_TEMPO` + /// Does NOT account for the per-block cap deferral or the `BlocksSinceLastStep > tempo` /// safety-net (which can fire earlier under extreme drift). pub fn get_next_epoch_start_block(netuid: NetUid) -> Option { let tempo = Self::get_tempo(netuid); diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index 87f1bedd96..a39ec97424 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -2089,7 +2089,7 @@ pub mod pallet { pub type MinerBurned = StorageMap<_, Identity, NetUid, U96F32, ValueQuery, DefaultMinerBurned>; - /// MAP ( netuid ) --> blocks_since_last_step + /// MAP ( netuid ) --> blocks_since_last_step, capped at the subnet's `tempo + 1` #[pallet::storage] pub type BlocksSinceLastStep = StorageMap<_, Identity, NetUid, u64, ValueQuery, DefaultBlocksSinceLastStep>; diff --git a/pallets/subtensor/src/tests/coinbase.rs b/pallets/subtensor/src/tests/coinbase.rs index ec54891b2d..fafa689661 100644 --- a/pallets/subtensor/src/tests/coinbase.rs +++ b/pallets/subtensor/src/tests/coinbase.rs @@ -3849,6 +3849,66 @@ fn test_coinbase_drain_pending_increments_blockssincelaststep() { }); } +#[test] +fn test_coinbase_drain_pending_caps_blockssincelaststep_when_epoch_is_deferred() { + new_test_ext(1).execute_with(|| { + let netuid = add_dynamic_network(&U256::from(1), &U256::from(2)); + let tempo = 1; + Tempo::::insert(netuid, tempo); + PendingEpochAt::::insert(netuid, 1); + SubtensorModule::set_max_epochs_per_block(0); + + for block in 1..=10 { + SubtensorModule::drain_pending(&[netuid], block); + } + + assert_eq!( + BlocksSinceLastStep::::get(netuid), + u64::from(tempo) + 1 + ); + assert!(SubtensorModule::should_run_epoch(netuid, 11)); + }); +} + +#[test] +fn test_coinbase_drain_pending_caps_blockssincelaststep_for_inconsistent_epoch() { + new_test_ext(1).execute_with(|| { + let netuid = add_dynamic_network(&U256::from(1), &U256::from(2)); + let tempo = 1; + Tempo::::insert(netuid, tempo); + PendingEpochAt::::insert(netuid, 1); + + let duplicate_hotkey = U256::from(99); + Keys::::insert(netuid, 0, duplicate_hotkey); + Keys::::insert(netuid, 1, duplicate_hotkey); + assert!(!SubtensorModule::is_epoch_input_state_consistent(netuid)); + + for block in 1..=10 { + SubtensorModule::drain_pending(&[netuid], block); + } + + assert_eq!( + BlocksSinceLastStep::::get(netuid), + u64::from(tempo) + 1 + ); + assert!(SubtensorModule::should_run_epoch(netuid, 11)); + }); +} + +#[test] +fn test_should_run_epoch_uses_subnet_tempo_for_step_age_safety_net() { + new_test_ext(1).execute_with(|| { + let netuid = add_dynamic_network(&U256::from(1), &U256::from(2)); + let tempo = 1; + Tempo::::insert(netuid, tempo); + LastEpochBlock::::insert(netuid, 100); + PendingEpochAt::::insert(netuid, 0); + BlocksSinceLastStep::::insert(netuid, u64::from(tempo) + 1); + + assert!(SubtensorModule::should_run_epoch(netuid, 2)); + }); +} + #[test] fn test_coinbase_drain_pending_resets_blockssincelaststep() { new_test_ext(1).execute_with(|| { From 7c887e0ce1159daadb40bfcd3b021fde8aa46930 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Wed, 22 Jul 2026 15:20:03 -0700 Subject: [PATCH 37/63] support Ledger-friendly signatures --- pallets/limit-orders/README.md | 8 +++-- pallets/limit-orders/src/benchmarking.rs | 10 +++--- pallets/limit-orders/src/lib.rs | 28 +++++++++++----- pallets/limit-orders/src/tests/auxiliary.rs | 36 ++++++++++++++++++--- runtime/tests/limit_orders.rs | 12 +++---- 5 files changed, 67 insertions(+), 27 deletions(-) diff --git a/pallets/limit-orders/README.md b/pallets/limit-orders/README.md index 669980739a..511a019d5c 100644 --- a/pallets/limit-orders/README.md +++ b/pallets/limit-orders/README.md @@ -85,9 +85,11 @@ encoding (`OrderId`) is persisted. ### `SignedOrder` Envelope submitted by the relayer: the `VersionedOrder` payload plus the user's -sr25519 signature over the SCALE encoding of the `VersionedOrder` (including the -version discriminant). Only sr25519 signatures are accepted. Signature -verification uses the inner `order.signer` as the expected public key. +sr25519 or ed25519 signature. The signature may cover either the SCALE encoding +of the `VersionedOrder` (including the version discriminant), or `` plus +its blake2-256 hash plus `` for Ledger compatibility. Signature +verification uses the inner `order.signer` as the expected public key; ECDSA is +not accepted. ### `OrderStatus` diff --git a/pallets/limit-orders/src/benchmarking.rs b/pallets/limit-orders/src/benchmarking.rs index 7de2a7b3d1..937cc3ee7e 100644 --- a/pallets/limit-orders/src/benchmarking.rs +++ b/pallets/limit-orders/src/benchmarking.rs @@ -21,12 +21,10 @@ fn sign_order( public: sp_core::sr25519::Public, order: &crate::VersionedOrder, ) -> crate::SignedOrder { - let sig = sp_io::crypto::sr25519_sign( - sp_core::crypto::key_types::ACCOUNT, - &public, - &order.encode(), - ) - .unwrap(); + let order_hash = sp_io::hashing::blake2_256(&order.encode()); + let payload = [b"".as_slice(), &order_hash, b"".as_slice()].concat(); + let sig = sp_io::crypto::sr25519_sign(sp_core::crypto::key_types::ACCOUNT, &public, &payload) + .unwrap(); crate::SignedOrder { order: order.clone(), signature: MultiSignature::Sr25519(sig), diff --git a/pallets/limit-orders/src/lib.rs b/pallets/limit-orders/src/lib.rs index 1d5548c529..f7a7c2a07e 100644 --- a/pallets/limit-orders/src/lib.rs +++ b/pallets/limit-orders/src/lib.rs @@ -131,18 +131,18 @@ impl VersionedOrd } /// The envelope the admin submits on-chain: the versioned order payload plus -/// the user's signature over the SCALE-encoded `VersionedOrder`. +/// the user's signature over the order. /// /// Signature verification is performed against `order.inner().signer` (the AccountId) -/// directly. Only sr25519 signatures are accepted; ed25519 and ecdsa variants -/// of `MultiSignature` are rejected at validation time. +/// directly. Sr25519 and ed25519 signatures over either the SCALE-encoded order or its +/// ``-wrapped blake2-256 hash are accepted; ecdsa is rejected at validation time. #[freeze_struct("9dd5a8ac812dc504")] #[derive( Encode, Decode, DecodeWithMemTracking, TypeInfo, MaxEncodedLen, Clone, PartialEq, Eq, Debug, )] pub struct SignedOrder { pub order: VersionedOrder, - /// Sr25519 signature over `SCALE_ENCODE(VersionedOrder)`. + /// Sr25519 or ed25519 signature over the raw order or its wrapped hash. pub signature: MultiSignature, /// Whether we want a partial fill for this order pub partial_fill: Option, @@ -614,10 +614,22 @@ pub mod pallet { Error::::ChainIdMismatch ); ensure!( - matches!(signed_order.signature, MultiSignature::Sr25519(_)) - && signed_order - .signature - .verify(signed_order.order.encode().as_slice(), &order.signer), + matches!( + signed_order.signature, + MultiSignature::Sr25519(_) | MultiSignature::Ed25519(_) + ) && (signed_order + .signature + .verify(signed_order.order.encode().as_slice(), &order.signer) + || signed_order.signature.verify( + [ + b"".as_slice(), + order_id.as_bytes(), + b"".as_slice(), + ] + .concat() + .as_slice(), + &order.signer, + )), Error::::InvalidSignature ); let order_status = Orders::::get(order_id); diff --git a/pallets/limit-orders/src/tests/auxiliary.rs b/pallets/limit-orders/src/tests/auxiliary.rs index 1049c84f74..58bdfda188 100644 --- a/pallets/limit-orders/src/tests/auxiliary.rs +++ b/pallets/limit-orders/src/tests/auxiliary.rs @@ -1474,14 +1474,42 @@ fn is_order_valid_invalid_signature_returns_error() { } #[test] -fn is_order_valid_non_sr25519_signature_returns_error() { +fn is_order_valid_accepts_wrapped_ed25519_signature() { new_test_ext().execute_with(|| { MockTime::set(1_000_000); MockSwap::set_price(1.0); - let (mut signed, id) = make_valid_signed_order(); + let (signed, _) = make_valid_signed_order(); let ed_pair = sp_core::ed25519::Pair::from_legacy_string("//Alice", None); - let ed_sig = ed_pair.sign(&signed.order.encode()); - signed.signature = MultiSignature::Ed25519(ed_sig); + let order = crate::VersionedOrder::V1(crate::Order { + signer: AccountId::from(ed_pair.public()), + ..signed.order.inner().clone() + }); + let id = H256(sp_io::hashing::blake2_256(&order.encode())); + let payload = [b"".as_slice(), id.as_bytes(), b"".as_slice()].concat(); + let signed = crate::SignedOrder { + order, + signature: MultiSignature::Ed25519(ed_pair.sign(&payload)), + partial_fill: None, + }; + let price = MockSwap::current_alpha_price(netuid()); + assert_ok!(LimitOrders::::is_order_valid( + &signed, + id, + 1_000_000, + price, + &bob() + )); + }); +} + +#[test] +fn is_order_valid_ecdsa_signature_returns_error() { + new_test_ext().execute_with(|| { + MockTime::set(1_000_000); + MockSwap::set_price(1.0); + let (mut signed, id) = make_valid_signed_order(); + let pair = sp_core::ecdsa::Pair::from_legacy_string("//Alice", None); + signed.signature = MultiSignature::Ecdsa(pair.sign(&signed.order.encode())); let price = MockSwap::current_alpha_price(netuid()); assert_noop!( LimitOrders::::is_order_valid(&signed, id, 1_000_000, price, &bob()), diff --git a/runtime/tests/limit_orders.rs b/runtime/tests/limit_orders.rs index f68191fa29..2340b4179a 100644 --- a/runtime/tests/limit_orders.rs +++ b/runtime/tests/limit_orders.rs @@ -294,11 +294,11 @@ fn cancel_order_works() { }); } -/// An order signed with an Ed25519 key is rejected at validation time even +/// An order signed with an ECDSA key is rejected at validation time even /// though the signature itself is cryptographically valid. The order must not /// appear in the Orders storage map after the batch runs. #[test] -fn execute_orders_ed25519_signature_rejected() { +fn execute_orders_ecdsa_signature_rejected() { new_test_ext().execute_with(|| { let alice_id = Sr25519Keyring::Alice.to_account_id(); let bob_id = Sr25519Keyring::Bob.to_account_id(); @@ -322,12 +322,12 @@ fn execute_orders_ed25519_signature_rejected() { }); let id = order_id(&order); - // Sign with ed25519 — valid signature, wrong scheme. - let ed_pair = sp_core::ed25519::Pair::from_legacy_string("//Alice", None); - let ed_sig = ed_pair.sign(&order.encode()); + // Sign with ecdsa — valid signature, unsupported scheme. + let pair = sp_core::ecdsa::Pair::from_legacy_string("//Alice", None); + let signature = pair.sign(&order.encode()); let signed = SignedOrder { order, - signature: MultiSignature::Ed25519(ed_sig), + signature: MultiSignature::Ecdsa(signature), partial_fill: None, }; From 0909cabc284a33fddbfa665f479cda2e179b3460 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Wed, 22 Jul 2026 15:24:27 -0700 Subject: [PATCH 38/63] add more tests --- pallets/limit-orders/src/tests/auxiliary.rs | 48 +++++++++++++++++++++ runtime/tests/limit_orders.rs | 39 +++++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/pallets/limit-orders/src/tests/auxiliary.rs b/pallets/limit-orders/src/tests/auxiliary.rs index 58bdfda188..e1480b45fd 100644 --- a/pallets/limit-orders/src/tests/auxiliary.rs +++ b/pallets/limit-orders/src/tests/auxiliary.rs @@ -1473,6 +1473,54 @@ fn is_order_valid_invalid_signature_returns_error() { }); } +#[test] +fn is_order_valid_accepts_raw_ed25519_signature() { + new_test_ext().execute_with(|| { + MockTime::set(1_000_000); + MockSwap::set_price(1.0); + let (signed, _) = make_valid_signed_order(); + let ed_pair = sp_core::ed25519::Pair::from_legacy_string("//Alice", None); + let order = crate::VersionedOrder::V1(crate::Order { + signer: AccountId::from(ed_pair.public()), + ..signed.order.inner().clone() + }); + let id = H256(sp_io::hashing::blake2_256(&order.encode())); + let signature = ed_pair.sign(&order.encode()); + let signed = crate::SignedOrder { + order, + signature: MultiSignature::Ed25519(signature), + partial_fill: None, + }; + let price = MockSwap::current_alpha_price(netuid()); + assert_ok!(LimitOrders::::is_order_valid( + &signed, + id, + 1_000_000, + price, + &bob() + )); + }); +} + +#[test] +fn is_order_valid_accepts_wrapped_sr25519_signature() { + new_test_ext().execute_with(|| { + MockTime::set(1_000_000); + MockSwap::set_price(1.0); + let (mut signed, id) = make_valid_signed_order(); + let payload = [b"".as_slice(), id.as_bytes(), b"".as_slice()].concat(); + signed.signature = MultiSignature::Sr25519(AccountKeyring::Alice.pair().sign(&payload)); + let price = MockSwap::current_alpha_price(netuid()); + assert_ok!(LimitOrders::::is_order_valid( + &signed, + id, + 1_000_000, + price, + &bob() + )); + }); +} + #[test] fn is_order_valid_accepts_wrapped_ed25519_signature() { new_test_ext().execute_with(|| { diff --git a/runtime/tests/limit_orders.rs b/runtime/tests/limit_orders.rs index 2340b4179a..5887d85edb 100644 --- a/runtime/tests/limit_orders.rs +++ b/runtime/tests/limit_orders.rs @@ -450,6 +450,45 @@ fn limit_buy_order_executes_and_stakes_alpha() { }); } +/// A Ledger-style, wrapped Sr25519 signature is accepted by the runtime and +/// executes the signed order. +#[test] +fn execute_orders_wrapped_sr25519_signature_executes() { + new_test_ext().execute_with(|| { + let netuid = NetUid::from(1u16); + let alice = Sr25519Keyring::Alice; + let alice_id = alice.to_account_id(); + let bob_id = Sr25519Keyring::Bob.to_account_id(); + let relayer = Sr25519Keyring::Charlie.to_account_id(); + + setup_subnet(netuid); + fund_account(&alice_id); + let _ = SubtensorModule::create_account_if_non_existent(&alice_id, &bob_id); + + let mut signed = make_signed_order( + alice, + bob_id, + netuid, + OrderType::LimitBuy, + min_default_stake().into(), + u64::MAX, + u64::MAX, + Perbill::zero(), + relayer.clone(), + ); + let id = order_id(&signed.order); + let payload = [b"".as_slice(), id.as_bytes(), b"".as_slice()].concat(); + signed.signature = MultiSignature::Sr25519(alice.pair().sign(&payload)); + + assert_ok!(LimitOrders::execute_orders( + RuntimeOrigin::signed(relayer), + make_order_batch(vec![signed]), + false, + )); + assert_eq!(Orders::::get(id), Some(OrderStatus::Fulfilled)); + }); +} + /// A TakeProfit order whose price condition is satisfied executes against the pool, /// marks the order as Fulfilled, and burns the seller's staked alpha position. #[test] From a06b1fc70ed2cb39c58c36a25ee9483e24dc7bcc Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Wed, 22 Jul 2026 15:39:23 -0700 Subject: [PATCH 39/63] bump spec --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 04c1a61e89..545d4d700d 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -235,7 +235,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 437, + spec_version: 438, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, From 7875562ec126898b26ccbfe0ed5837edb1d44e3a Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Wed, 22 Jul 2026 15:44:37 -0700 Subject: [PATCH 40/63] improve tests --- pallets/limit-orders/src/tests/auxiliary.rs | 21 ++++++++++++++++++--- runtime/tests/limit_orders.rs | 19 ++++++++++--------- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/pallets/limit-orders/src/tests/auxiliary.rs b/pallets/limit-orders/src/tests/auxiliary.rs index e1480b45fd..351859a291 100644 --- a/pallets/limit-orders/src/tests/auxiliary.rs +++ b/pallets/limit-orders/src/tests/auxiliary.rs @@ -1409,7 +1409,10 @@ fn collect_fees_no_transfer_when_zero_fees() { use crate::Error; use codec::Encode; use sp_core::Pair; -use sp_runtime::MultiSignature; +use sp_runtime::{ + MultiSignature, MultiSigner, + traits::{IdentifyAccount, Verify}, +}; use subtensor_swap_interface::OrderSwapInterface; fn make_valid_signed_order() -> (crate::SignedOrder, sp_core::H256) { @@ -1555,9 +1558,21 @@ fn is_order_valid_ecdsa_signature_returns_error() { new_test_ext().execute_with(|| { MockTime::set(1_000_000); MockSwap::set_price(1.0); - let (mut signed, id) = make_valid_signed_order(); + let (signed, _) = make_valid_signed_order(); let pair = sp_core::ecdsa::Pair::from_legacy_string("//Alice", None); - signed.signature = MultiSignature::Ecdsa(pair.sign(&signed.order.encode())); + let signer = MultiSigner::from(pair.public()).into_account(); + let order = crate::VersionedOrder::V1(crate::Order { + signer, + ..signed.order.inner().clone() + }); + let id = H256(sp_io::hashing::blake2_256(&order.encode())); + let signature = MultiSignature::Ecdsa(pair.sign(&order.encode())); + assert!(signature.verify(order.encode().as_slice(), &order.inner().signer)); + let signed = crate::SignedOrder { + order, + signature, + partial_fill: None, + }; let price = MockSwap::current_alpha_price(netuid()); assert_noop!( LimitOrders::::is_order_valid(&signed, id, 1_000_000, price, &bob()), diff --git a/runtime/tests/limit_orders.rs b/runtime/tests/limit_orders.rs index 5887d85edb..1fcfc43be8 100644 --- a/runtime/tests/limit_orders.rs +++ b/runtime/tests/limit_orders.rs @@ -20,8 +20,8 @@ use pallet_limit_orders::{ use pallet_subtensor::{SubnetAlphaIn, SubnetMechanism, SubnetTAO}; use sp_core::{Get, H256, Pair}; use sp_keyring::Sr25519Keyring; -use sp_runtime::traits::AccountIdConversion; -use sp_runtime::{MultiSignature, Perbill}; +use sp_runtime::traits::{AccountIdConversion, IdentifyAccount, Verify}; +use sp_runtime::{MultiSignature, MultiSigner, Perbill}; use subtensor_runtime_common::{AccountId, AlphaBalance, NetUid, TaoBalance, Token}; fn new_test_ext() -> sp_io::TestExternalities { @@ -300,12 +300,13 @@ fn cancel_order_works() { #[test] fn execute_orders_ecdsa_signature_rejected() { new_test_ext().execute_with(|| { - let alice_id = Sr25519Keyring::Alice.to_account_id(); + let pair = sp_core::ecdsa::Pair::from_legacy_string("//Alice", None); + let ecdsa_id = MultiSigner::from(pair.public()).into_account(); let bob_id = Sr25519Keyring::Bob.to_account_id(); let fee_recipient = Sr25519Keyring::Charlie.to_account_id(); let order = VersionedOrder::V1(Order { - signer: alice_id.clone(), + signer: ecdsa_id.clone(), hotkey: bob_id, netuid: NetUid::from(1u16), order_type: OrderType::LimitBuy, @@ -322,19 +323,19 @@ fn execute_orders_ecdsa_signature_rejected() { }); let id = order_id(&order); - // Sign with ecdsa — valid signature, unsupported scheme. - let pair = sp_core::ecdsa::Pair::from_legacy_string("//Alice", None); - let signature = pair.sign(&order.encode()); + // The signature matches the order signer; only the scheme is unsupported. + let signature = MultiSignature::Ecdsa(pair.sign(&order.encode())); + assert!(signature.verify(order.encode().as_slice(), &ecdsa_id)); let signed = SignedOrder { order, - signature: MultiSignature::Ecdsa(signature), + signature, partial_fill: None, }; let orders = make_order_batch(vec![signed]); assert_ok!(LimitOrders::execute_orders( - RuntimeOrigin::signed(alice_id), + RuntimeOrigin::signed(ecdsa_id), orders, false, )); From d5042223073d7d1dcb50cc2f8a075312255736e1 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Wed, 22 Jul 2026 16:05:59 -0700 Subject: [PATCH 41/63] add ts e2e --- .../test-execute-orders-ed25519-wrapped.ts | 116 ++++++++++++++++++ ts-tests/utils/limit-orders.ts | 63 ++++++++-- 2 files changed, 172 insertions(+), 7 deletions(-) create mode 100644 ts-tests/suites/dev/subtensor/limit-orders/test-execute-orders-ed25519-wrapped.ts diff --git a/ts-tests/suites/dev/subtensor/limit-orders/test-execute-orders-ed25519-wrapped.ts b/ts-tests/suites/dev/subtensor/limit-orders/test-execute-orders-ed25519-wrapped.ts new file mode 100644 index 0000000000..4e08f580a0 --- /dev/null +++ b/ts-tests/suites/dev/subtensor/limit-orders/test-execute-orders-ed25519-wrapped.ts @@ -0,0 +1,116 @@ +import { beforeAll, describeSuite, expect } from "@moonwall/cli"; +import type { KeyringPair } from "@moonwall/util"; +import type { ApiPromise } from "@polkadot/api"; +import { generateKeyringPair, tao } from "../../../../utils"; +import { + devAssociateHotKey, + devEnableSubtoken, + devExecuteOrders, + devForceSetBalance, + devGetAlphaStake, + devRegisterSubnet, + devSudoSetLockReductionInterval, +} from "../../../../utils/dev-helpers.js"; +import { + FAR_FUTURE, + buildWrappedSignedOrder, + fetchChainId, + filterEvents, + getOrderStatus, + orderId, + registerLimitOrderTypes, +} from "../../../../utils/limit-orders.js"; + +// One subnet per file — this test submits a real buy order signed by an +// ed25519 key over the ``-wrapped order hash (the Ledger / signRaw +// form). It exercises the runtime's alternative `is_order_valid` path: +// signature.verify(b"" ++ blake2_256(SCALE(VersionedOrder)) ++ b"", signer) +// with an Ed25519 signature. + +describeSuite({ + id: "DEV_SUB_LIMIT_ORDERS_ED25519_WRAPPED", + title: "execute_orders — ed25519 + -wrapped LimitBuy execution", + foundationMethods: "dev", + testCases: ({ it, context }) => { + let polkadotJs: ApiPromise; + let alice: KeyringPair; + let aliceHotKey: KeyringPair; + let edSigner: KeyringPair; + let edHotKey: KeyringPair; + let netuid: number; + let chainId: bigint; + + beforeAll(async () => { + polkadotJs = context.polkadotJs(); + + alice = context.keyring.alice; + aliceHotKey = generateKeyringPair("sr25519"); + + // ed25519 coldkey/signer that signs the wrapped order hash, with an + // sr25519 hotkey associated to it. + edSigner = generateKeyringPair("ed25519"); + edHotKey = generateKeyringPair("sr25519"); + + registerLimitOrderTypes(polkadotJs); + chainId = await fetchChainId(polkadotJs); + + await devForceSetBalance(polkadotJs, context, alice.address, tao(10_000)); + await devForceSetBalance(polkadotJs, context, edSigner.address, tao(10_000)); + + await devSudoSetLockReductionInterval(polkadotJs, context, alice, 1); + + netuid = await devRegisterSubnet(polkadotJs, context, alice, aliceHotKey); + + // Enable subtoken + await devEnableSubtoken(polkadotJs, context, alice, netuid); + // Associate hotkeys — the ed25519 signer associates its own hotkey. + await devAssociateHotKey(polkadotJs, context, alice, aliceHotKey.address); + await devAssociateHotKey(polkadotJs, context, edSigner, edHotKey.address); + }); + + it({ + id: "T01", + title: "LimitBuy executes with an ed25519 -wrapped signature", + test: async () => { + const stakeBefore = await devGetAlphaStake(polkadotJs, edHotKey.address, edSigner.address, netuid); + const taoBalanceBefore = ( + (await polkadotJs.query.system.account(edSigner.address)) as any + ).data.free.toBigInt(); + + const signed = buildWrappedSignedOrder(polkadotJs, { + signer: edSigner, + hotkey: edHotKey.address, + netuid, + orderType: "LimitBuy", + amount: tao(100), + limitPrice: FAR_FUTURE, + expiry: FAR_FUTURE, + feeRate: 0, + feeRecipient: edSigner.address, + chainId, + }); + + // Alice relays/submits the ed25519-signed order. + await devExecuteOrders(polkadotJs, context, alice, [signed]); + + const events = await polkadotJs.query.system.events(); + const executed = filterEvents(events, "OrderExecuted"); + expect(executed.length).toBe(1); + + // OrderId should be stored as Fulfilled + const id = orderId(polkadotJs, signed.order); + expect(await getOrderStatus(polkadotJs, id)).toBe("Fulfilled"); + + // Alpha stake for the ed25519 signer's hotkey should have increased + const stakeAfter = await devGetAlphaStake(polkadotJs, edHotKey.address, edSigner.address, netuid); + expect(stakeAfter).toBeGreaterThan(stakeBefore); + + // ed25519 signer's TAO balance should have decreased + const taoBalanceAfter = ( + (await polkadotJs.query.system.account(edSigner.address)) as any + ).data.free.toBigInt(); + expect(taoBalanceAfter).toBeLessThan(taoBalanceBefore); + }, + }); + }, +}); diff --git a/ts-tests/utils/limit-orders.ts b/ts-tests/utils/limit-orders.ts index 0ffbe177e0..e9ba6816c0 100644 --- a/ts-tests/utils/limit-orders.ts +++ b/ts-tests/utils/limit-orders.ts @@ -2,8 +2,8 @@ import type { KeyringPair } from "@moonwall/util"; import type { TypedApi } from "polkadot-api"; import type { subtensor } from "@polkadot-api/descriptors"; import { Keyring } from "@polkadot/keyring"; -import { u8aToHex } from "@polkadot/util"; -import { blake2AsHex } from "@polkadot/util-crypto"; +import { u8aToHex, u8aWrapBytes } from "@polkadot/util"; +import { blake2AsHex, blake2AsU8a } from "@polkadot/util-crypto"; import { waitForTransactionWithRetry } from "./transactions.js"; import { MultiAddress } from "@polkadot-api/descriptors"; @@ -62,11 +62,11 @@ export const EXPIRED = BigInt(1); // 1ms — always in the past // ── Order building & signing ────────────────────────────────────────────────── /** - * Build a SignedOrder ready for submission to execute_orders / - * execute_batched_orders. The Order struct is SCALE-encoded via the - * polkadot.js registry and then signed with the signer's sr25519 key. + * Build the `VersionedOrder` (V1) struct from the supplied params. Shared by + * `buildSignedOrder` (raw signing) and `buildWrappedSignedOrder` (Ledger / + * signRaw ``-wrapped signing) so the field mapping stays identical. */ -export function buildSignedOrder(api: any, params: OrderParams): SignedOrder { +function buildVersionedOrder(params: OrderParams): VersionedOrder { const inner: Order = { signer: params.signer.address, hotkey: params.hotkey, @@ -83,7 +83,16 @@ export function buildSignedOrder(api: any, params: OrderParams): SignedOrder { partial_fills_enabled: params.partialFillsEnabled ?? false, }; - const versionedOrder: VersionedOrder = { V1: inner }; + return { V1: inner }; +} + +/** + * Build a SignedOrder ready for submission to execute_orders / + * execute_batched_orders. The Order struct is SCALE-encoded via the + * polkadot.js registry and then signed with the signer's sr25519 key. + */ +export function buildSignedOrder(api: any, params: OrderParams): SignedOrder { + const versionedOrder = buildVersionedOrder(params); // SCALE-encode the VersionedOrder so the signature covers the version tag. const encoded = api.registry.createType("LimitVersionedOrder", versionedOrder); @@ -96,6 +105,46 @@ export function buildSignedOrder(api: any, params: OrderParams): SignedOrder { }; } +/** + * Build a SignedOrder whose signature is over the ``-wrapped order hash + * (the Ledger / `signRaw` form). This exercises the runtime's alternative + * verification path: + * + * signature.verify(b"" ++ blake2_256(SCALE(VersionedOrder)) ++ b"", signer) + * + * The signed payload is the raw 32-byte blake2-256 hash of the SCALE-encoded + * VersionedOrder, wrapped by `u8aWrapBytes` (which prepends `` and + * appends ``). This is byte-for-byte what the runtime reconstructs + * from `order_id.as_bytes()`, so the hash must be wrapped raw — never + * hex-encoded before wrapping. + * + * The signature scheme tag (`Sr25519` vs `Ed25519`) follows the signer's + * keypair type, so the same helper works for both schemes. + */ +export function buildWrappedSignedOrder(api: any, params: OrderParams): SignedOrder { + const versionedOrder = buildVersionedOrder(params); + + // SCALE-encode the VersionedOrder, then hash it (this is the OrderId). + const encoded = api.registry.createType("LimitVersionedOrder", versionedOrder); + const hash = blake2AsU8a(encoded.toU8a(), 256); + + // Wrap the raw 32-byte hash in the signRaw envelope: ..hash... + const wrapped = u8aWrapBytes(hash); + const sig = params.signer.sign(wrapped); + + // Tag the signature variant from the keypair type. + const signature = + params.signer.type === "ed25519" + ? { Ed25519: u8aToHex(sig) as `0x${string}` } + : { Sr25519: u8aToHex(sig) as `0x${string}` }; + + return { + order: versionedOrder, + signature, + partial_fill: null, + }; +} + /** * Compute the on-chain OrderId (blake2_256 of SCALE-encoded VersionedOrder). * Mirrors `Pallet::derive_order_id` in Rust. From 84d6e0def48155285fb6805c8a68650764006d30 Mon Sep 17 00:00:00 2001 From: UnArbosFive Date: Wed, 22 Jul 2026 14:27:34 +0200 Subject: [PATCH 42/63] Fix testnet GRANDPA warp sync checkpoints --- Cargo.lock | 778 +++++++++++++------------- Cargo.toml | 418 +++++++------- node/Cargo.toml | 1 + node/src/service.rs | 26 +- node/src/service/grandpa_warp_sync.rs | 160 ++++++ 5 files changed, 776 insertions(+), 607 deletions(-) create mode 100644 node/src/service/grandpa_warp_sync.rs diff --git a/Cargo.lock b/Cargo.lock index 8b6486ba4e..34e9acdf53 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1114,7 +1114,7 @@ checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "assets-common" version = "0.22.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-primitives-core", "ethereum-standards", @@ -1499,7 +1499,7 @@ checksum = "5a45f9771ced8a774de5e5ebffbe520f52e3943bf5a9a6baa3a5d14a5de1afe6" [[package]] name = "binary-merkle-tree" version = "16.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "hash-db", "log", @@ -1870,7 +1870,7 @@ dependencies = [ [[package]] name = "bp-header-chain" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-runtime", "finality-grandpa", @@ -1887,7 +1887,7 @@ dependencies = [ [[package]] name = "bp-messages" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-header-chain", "bp-runtime", @@ -1903,7 +1903,7 @@ dependencies = [ [[package]] name = "bp-parachains" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-header-chain", "bp-polkadot-core", @@ -1920,7 +1920,7 @@ dependencies = [ [[package]] name = "bp-polkadot-core" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-messages", "bp-runtime", @@ -1936,7 +1936,7 @@ dependencies = [ [[package]] name = "bp-relayers" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-header-chain", "bp-messages", @@ -1954,7 +1954,7 @@ dependencies = [ [[package]] name = "bp-runtime" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -1977,7 +1977,7 @@ dependencies = [ [[package]] name = "bp-test-utils" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-header-chain", "bp-parachains", @@ -1997,7 +1997,7 @@ dependencies = [ [[package]] name = "bp-xcm-bridge-hub" version = "0.7.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-messages", "bp-runtime", @@ -2014,7 +2014,7 @@ dependencies = [ [[package]] name = "bp-xcm-bridge-hub-router" version = "0.18.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "scale-info", @@ -2026,7 +2026,7 @@ dependencies = [ [[package]] name = "bridge-hub-common" version = "0.14.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -2045,7 +2045,7 @@ dependencies = [ [[package]] name = "bridge-runtime-common" version = "0.22.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-header-chain", "bp-messages", @@ -2958,7 +2958,7 @@ dependencies = [ [[package]] name = "cumulus-client-bootnodes" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -2984,7 +2984,7 @@ dependencies = [ [[package]] name = "cumulus-client-cli" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "clap", "parity-scale-codec", @@ -3001,7 +3001,7 @@ dependencies = [ [[package]] name = "cumulus-client-collator" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-client-consensus-common", "cumulus-client-network", @@ -3024,7 +3024,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-aura" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "cumulus-client-collator", @@ -3071,7 +3071,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-common" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "cumulus-client-pov-recovery", @@ -3103,7 +3103,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-proposer" version = "0.20.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "anyhow", "async-trait", @@ -3118,7 +3118,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-relay-chain" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "cumulus-client-consensus-common", @@ -3141,7 +3141,7 @@ dependencies = [ [[package]] name = "cumulus-client-network" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "cumulus-relay-chain-interface", @@ -3168,7 +3168,7 @@ dependencies = [ [[package]] name = "cumulus-client-parachain-inherent" version = "0.18.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3178,7 +3178,7 @@ dependencies = [ "parity-scale-codec", "sc-client-api", "sc-consensus-babe", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-inherents", "sp-runtime", "sp-state-machine", @@ -3189,7 +3189,7 @@ dependencies = [ [[package]] name = "cumulus-client-pov-recovery" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3217,7 +3217,7 @@ dependencies = [ [[package]] name = "cumulus-client-service" version = "0.25.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-channel 1.9.0", "cumulus-client-cli", @@ -3257,7 +3257,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-aura-ext" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-pallet-parachain-system", "frame-support", @@ -3274,7 +3274,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-dmp-queue" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-primitives-core", "frame-benchmarking", @@ -3291,7 +3291,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bytes", "cumulus-pallet-parachain-system-proc-macro", @@ -3328,7 +3328,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system-proc-macro" version = "0.6.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -3339,7 +3339,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-session-benchmarking" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -3352,7 +3352,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-solo-to-para" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-pallet-parachain-system", "frame-support", @@ -3367,7 +3367,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-weight-reclaim" version = "0.3.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-primitives-storage-weight-reclaim", "derive-where", @@ -3386,7 +3386,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcm" version = "0.20.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -3401,7 +3401,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcmp-queue" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "approx", "bounded-collections 0.2.4", @@ -3426,7 +3426,7 @@ dependencies = [ [[package]] name = "cumulus-ping" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-pallet-xcm", "cumulus-primitives-core", @@ -3441,7 +3441,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-aura" version = "0.18.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "sp-api", "sp-consensus-aura", @@ -3450,7 +3450,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" version = "0.19.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -3467,7 +3467,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.19.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3481,7 +3481,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" version = "0.13.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -3491,7 +3491,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-storage-weight-reclaim" version = "12.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-proof-size-hostfunction", @@ -3508,7 +3508,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-utility" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -3525,7 +3525,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-inprocess-interface" version = "0.25.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-channel 1.9.0", "async-trait", @@ -3553,7 +3553,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3573,7 +3573,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-minimal-node" version = "0.25.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -3609,7 +3609,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-rpc-interface" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3650,7 +3650,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-streams" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-relay-chain-interface", "futures", @@ -3664,7 +3664,7 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.20.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -4471,7 +4471,7 @@ dependencies = [ [[package]] name = "ethereum-standards" version = "0.1.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "alloy-core", ] @@ -4853,7 +4853,7 @@ dependencies = [ "rustc-hex", "serde", "serde_json", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", ] [[package]] @@ -5036,7 +5036,7 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "fork-tree" version = "13.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", ] @@ -5156,7 +5156,7 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" version = "41.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-support-procedural", @@ -5180,7 +5180,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "49.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "Inflector", "array-bytes 6.2.3", @@ -5245,7 +5245,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-pallet-pov" version = "31.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -5273,7 +5273,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "16.1.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -5284,7 +5284,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -5301,7 +5301,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "41.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "aquamarine", "frame-support", @@ -5354,7 +5354,7 @@ dependencies = [ [[package]] name = "frame-metadata-hash-extension" version = "0.9.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "const-hex", @@ -5370,7 +5370,7 @@ dependencies = [ [[package]] name = "frame-storage-access-test-runtime" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-pallet-parachain-system", "parity-scale-codec", @@ -5384,7 +5384,7 @@ dependencies = [ [[package]] name = "frame-support" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "aquamarine", "array-bytes 6.2.3", @@ -5425,20 +5425,33 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "34.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "Inflector", "cfg-expr", "derive-syn-parse", "docify", "expander", + "frame-support-procedural-core", "frame-support-procedural-tools 13.0.1", "itertools 0.11.0", "macro_magic", "proc-macro-warning", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "syn 2.0.106", +] + +[[package]] +name = "frame-support-procedural-core" +version = "34.0.0" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +dependencies = [ + "cfg-expr", + "frame-support-procedural-tools 13.0.1", + "proc-macro2", + "quote", "syn 2.0.106", ] @@ -5458,7 +5471,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "13.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support-procedural-tools-derive 12.0.0", "proc-macro-crate 3.4.0", @@ -5481,7 +5494,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "12.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "proc-macro2", "quote", @@ -5491,7 +5504,7 @@ dependencies = [ [[package]] name = "frame-system" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cfg-if", "docify", @@ -5510,7 +5523,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -5524,7 +5537,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "parity-scale-codec", @@ -5534,7 +5547,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.47.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "parity-scale-codec", @@ -8274,7 +8287,7 @@ dependencies = [ [[package]] name = "mmr-gadget" version = "46.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "log", @@ -8293,7 +8306,7 @@ dependencies = [ [[package]] name = "mmr-rpc" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -8682,6 +8695,7 @@ dependencies = [ "frame-system-rpc-runtime-api", "futures", "hex", + "hex-literal", "jsonrpsee", "log", "memmap2 0.9.8", @@ -9263,7 +9277,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "frame-benchmarking", @@ -9275,7 +9289,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-io", "sp-runtime", ] @@ -9299,7 +9313,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9317,7 +9331,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion-ops" version = "0.9.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9335,7 +9349,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion-tx-payment" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9350,7 +9364,7 @@ dependencies = [ [[package]] name = "pallet-asset-rate" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9364,7 +9378,7 @@ dependencies = [ [[package]] name = "pallet-asset-rewards" version = "0.3.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9382,7 +9396,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9398,7 +9412,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "43.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "ethereum-standards", "frame-benchmarking", @@ -9416,7 +9430,7 @@ dependencies = [ [[package]] name = "pallet-assets-freezer" version = "0.8.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "pallet-assets", @@ -9428,7 +9442,7 @@ dependencies = [ [[package]] name = "pallet-assets-holder" version = "0.3.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9443,7 +9457,7 @@ dependencies = [ [[package]] name = "pallet-atomic-swap" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -9453,7 +9467,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -9469,7 +9483,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -9484,7 +9498,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -9497,7 +9511,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9520,7 +9534,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "aquamarine", "docify", @@ -9541,7 +9555,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "frame-benchmarking", @@ -9570,7 +9584,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -9589,7 +9603,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "binary-merkle-tree", @@ -9614,7 +9628,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9631,7 +9645,7 @@ dependencies = [ [[package]] name = "pallet-bridge-grandpa" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-header-chain", "bp-runtime", @@ -9650,7 +9664,7 @@ dependencies = [ [[package]] name = "pallet-bridge-messages" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-header-chain", "bp-messages", @@ -9669,7 +9683,7 @@ dependencies = [ [[package]] name = "pallet-bridge-parachains" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-header-chain", "bp-parachains", @@ -9689,7 +9703,7 @@ dependencies = [ [[package]] name = "pallet-bridge-relayers" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-header-chain", "bp-messages", @@ -9712,7 +9726,7 @@ dependencies = [ [[package]] name = "pallet-broker" version = "0.20.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitvec", "frame-benchmarking", @@ -9730,7 +9744,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9748,7 +9762,7 @@ dependencies = [ [[package]] name = "pallet-collator-selection" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9767,7 +9781,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "frame-benchmarking", @@ -9784,7 +9798,7 @@ dependencies = [ [[package]] name = "pallet-collective-content" version = "0.19.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9825,7 +9839,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "environmental", "frame-benchmarking", @@ -9856,7 +9870,7 @@ dependencies = [ [[package]] name = "pallet-contracts-mock-network" version = "18.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -9887,7 +9901,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "23.0.3" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "proc-macro2", "quote", @@ -9897,7 +9911,7 @@ dependencies = [ [[package]] name = "pallet-contracts-uapi" version = "14.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -9908,7 +9922,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "assert_matches", "frame-benchmarking", @@ -9924,7 +9938,7 @@ dependencies = [ [[package]] name = "pallet-core-fellowship" version = "25.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9962,7 +9976,7 @@ dependencies = [ [[package]] name = "pallet-delegated-staking" version = "8.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -9977,7 +9991,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -9994,7 +10008,7 @@ dependencies = [ [[package]] name = "pallet-dev-mode" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -10043,7 +10057,7 @@ dependencies = [ [[package]] name = "pallet-dummy-dim" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -10061,7 +10075,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-block" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10082,7 +10096,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10103,7 +10117,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10116,7 +10130,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -10235,7 +10249,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "frame-benchmarking", @@ -10253,7 +10267,7 @@ dependencies = [ [[package]] name = "pallet-glutton" version = "27.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "blake2 0.10.6", "frame-benchmarking", @@ -10271,7 +10285,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -10307,7 +10321,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "enumflags2", "frame-benchmarking", @@ -10323,7 +10337,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -10342,7 +10356,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -10357,7 +10371,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "29.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -10390,7 +10404,7 @@ dependencies = [ [[package]] name = "pallet-lottery" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -10403,7 +10417,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -10419,7 +10433,7 @@ dependencies = [ [[package]] name = "pallet-message-queue" version = "44.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "environmental", "frame-benchmarking", @@ -10438,7 +10452,7 @@ dependencies = [ [[package]] name = "pallet-meta-tx" version = "0.3.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "frame-benchmarking", @@ -10456,7 +10470,7 @@ dependencies = [ [[package]] name = "pallet-migrations" version = "11.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "frame-benchmarking", @@ -10475,7 +10489,7 @@ dependencies = [ [[package]] name = "pallet-mixnet" version = "0.17.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "parity-scale-codec", @@ -10489,7 +10503,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "parity-scale-codec", @@ -10501,7 +10515,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "parity-scale-codec", @@ -10512,7 +10526,7 @@ dependencies = [ [[package]] name = "pallet-nft-fractionalization" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "pallet-assets", @@ -10525,7 +10539,7 @@ dependencies = [ [[package]] name = "pallet-nfts" version = "35.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "enumflags2", "frame-benchmarking", @@ -10542,7 +10556,7 @@ dependencies = [ [[package]] name = "pallet-nis" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -10552,7 +10566,7 @@ dependencies = [ [[package]] name = "pallet-node-authorization" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "parity-scale-codec", @@ -10563,7 +10577,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "39.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -10581,7 +10595,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "39.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10601,7 +10615,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "pallet-nomination-pools", "parity-scale-codec", @@ -10611,7 +10625,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -10626,7 +10640,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10649,7 +10663,7 @@ dependencies = [ [[package]] name = "pallet-origin-restriction" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -10667,7 +10681,7 @@ dependencies = [ [[package]] name = "pallet-paged-list" version = "0.19.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "parity-scale-codec", @@ -10678,7 +10692,7 @@ dependencies = [ [[package]] name = "pallet-parameters" version = "0.12.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "frame-benchmarking", @@ -10695,7 +10709,7 @@ dependencies = [ [[package]] name = "pallet-people" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -10713,7 +10727,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -10729,8 +10743,10 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ + "frame-support", + "frame-system", "parity-scale-codec", "polkadot-sdk-frame", "scale-info", @@ -10739,7 +10755,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -10757,7 +10773,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -10767,7 +10783,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "assert_matches", "frame-benchmarking", @@ -10785,7 +10801,7 @@ dependencies = [ [[package]] name = "pallet-remark" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -10800,7 +10816,7 @@ dependencies = [ [[package]] name = "pallet-revive" version = "0.7.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "alloy-core", "derive_more 0.99.20", @@ -10846,7 +10862,7 @@ dependencies = [ [[package]] name = "pallet-revive-fixtures" version = "0.4.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "anyhow", "cargo_metadata", @@ -10860,7 +10876,7 @@ dependencies = [ [[package]] name = "pallet-revive-proc-macro" version = "0.3.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "proc-macro2", "quote", @@ -10870,7 +10886,7 @@ dependencies = [ [[package]] name = "pallet-revive-uapi" version = "0.5.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitflags 1.3.2", "pallet-revive-proc-macro", @@ -10882,7 +10898,7 @@ dependencies = [ [[package]] name = "pallet-root-offences" version = "38.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -10898,7 +10914,7 @@ dependencies = [ [[package]] name = "pallet-root-testing" version = "17.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -10911,7 +10927,7 @@ dependencies = [ [[package]] name = "pallet-safe-mode" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "pallet-balances", @@ -10925,7 +10941,7 @@ dependencies = [ [[package]] name = "pallet-salary" version = "26.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "pallet-ranked-collective", @@ -10937,7 +10953,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "frame-benchmarking", @@ -10954,7 +10970,7 @@ dependencies = [ [[package]] name = "pallet-scored-pool" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -10967,7 +10983,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -10988,7 +11004,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -11034,7 +11050,7 @@ dependencies = [ [[package]] name = "pallet-skip-feeless-payment" version = "16.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -11046,7 +11062,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -11063,7 +11079,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -11085,7 +11101,7 @@ dependencies = [ [[package]] name = "pallet-staking-async" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -11108,7 +11124,7 @@ dependencies = [ [[package]] name = "pallet-staking-async-ah-client" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -11127,7 +11143,7 @@ dependencies = [ [[package]] name = "pallet-staking-async-rc-client" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -11144,7 +11160,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "12.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -11155,7 +11171,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "sp-arithmetic", @@ -11164,7 +11180,7 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" version = "27.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "sp-api", @@ -11174,7 +11190,7 @@ dependencies = [ [[package]] name = "pallet-state-trie-migration" version = "46.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -11190,7 +11206,7 @@ dependencies = [ [[package]] name = "pallet-statement" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", @@ -11354,7 +11370,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "frame-benchmarking", @@ -11369,7 +11385,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "frame-benchmarking", @@ -11387,7 +11403,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -11405,7 +11421,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -11420,7 +11436,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "44.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -11436,7 +11452,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -11448,7 +11464,7 @@ dependencies = [ [[package]] name = "pallet-transaction-storage" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "frame-benchmarking", @@ -11467,7 +11483,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "frame-benchmarking", @@ -11486,7 +11502,7 @@ dependencies = [ [[package]] name = "pallet-tx-pause" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "parity-scale-codec", @@ -11497,7 +11513,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -11511,7 +11527,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -11526,7 +11542,7 @@ dependencies = [ [[package]] name = "pallet-verify-signature" version = "0.4.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -11541,7 +11557,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -11555,7 +11571,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -11565,7 +11581,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "20.1.3" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bounded-collections 0.2.4", "frame-benchmarking", @@ -11591,7 +11607,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "21.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-benchmarking", "frame-support", @@ -11608,7 +11624,7 @@ dependencies = [ [[package]] name = "pallet-xcm-bridge-hub" version = "0.17.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-messages", "bp-runtime", @@ -11630,7 +11646,7 @@ dependencies = [ [[package]] name = "pallet-xcm-bridge-hub-router" version = "0.19.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-xcm-bridge-hub-router", "frame-benchmarking", @@ -11650,7 +11666,7 @@ dependencies = [ [[package]] name = "parachains-common" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-utility", @@ -12012,7 +12028,7 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "polkadot-approval-distribution" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "futures-timer", @@ -12030,7 +12046,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "futures-timer", @@ -12045,7 +12061,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "fatality", "futures", @@ -12068,7 +12084,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "fatality", @@ -12101,7 +12117,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "25.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "clap", "frame-benchmarking-cli", @@ -12125,7 +12141,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitvec", "fatality", @@ -12148,7 +12164,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "18.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "scale-info", @@ -12159,7 +12175,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "fatality", "futures", @@ -12181,7 +12197,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -12195,7 +12211,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "24.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "futures-timer", @@ -12208,7 +12224,7 @@ dependencies = [ "sc-network", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-keystore", "tracing-gum", ] @@ -12216,7 +12232,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "always-assert", "async-trait", @@ -12239,7 +12255,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "parity-scale-codec", @@ -12257,7 +12273,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "bitvec", @@ -12289,7 +12305,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting-parallel" version = "0.7.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "futures", @@ -12313,7 +12329,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitvec", "futures", @@ -12332,7 +12348,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitvec", "fatality", @@ -12353,7 +12369,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "polkadot-node-subsystem", @@ -12368,7 +12384,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "futures", @@ -12390,7 +12406,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "polkadot-node-metrics", @@ -12404,7 +12420,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "futures-timer", @@ -12420,7 +12436,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "fatality", "futures", @@ -12438,7 +12454,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "futures", @@ -12455,7 +12471,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-prospective-parachains" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "fatality", "futures", @@ -12469,7 +12485,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitvec", "fatality", @@ -12486,7 +12502,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "always-assert", "array-bytes 6.2.3", @@ -12514,7 +12530,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "polkadot-node-subsystem", @@ -12527,7 +12543,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-common" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cpu-time", "futures", @@ -12542,7 +12558,7 @@ dependencies = [ "sc-executor-wasmtime", "seccompiler", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-externalities", "sp-io", "sp-tracing", @@ -12553,7 +12569,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "polkadot-node-metrics", @@ -12568,7 +12584,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bs58", "futures", @@ -12585,7 +12601,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-channel 1.9.0", "async-trait", @@ -12610,7 +12626,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitvec", "bounded-vec", @@ -12634,7 +12650,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "polkadot-node-subsystem-types", "polkadot-overseer", @@ -12643,7 +12659,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "derive_more 0.99.20", @@ -12671,7 +12687,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "24.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "fatality", "futures", @@ -12702,7 +12718,7 @@ dependencies = [ [[package]] name = "polkadot-omni-node-lib" version = "0.7.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "clap", @@ -12790,7 +12806,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "futures", @@ -12810,7 +12826,7 @@ dependencies = [ [[package]] name = "polkadot-parachain-primitives" version = "17.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bounded-collections 0.2.4", "derive_more 0.99.20", @@ -12826,7 +12842,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "19.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitvec", "bounded-collections 0.2.4", @@ -12855,7 +12871,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "25.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "jsonrpsee", "mmr-rpc", @@ -12888,7 +12904,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitvec", "frame-benchmarking", @@ -12938,7 +12954,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "21.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bs58", "frame-benchmarking", @@ -12950,7 +12966,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "20.0.2" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitflags 1.3.2", "bitvec", @@ -12998,7 +13014,7 @@ dependencies = [ [[package]] name = "polkadot-sdk" version = "2506.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "assets-common", "bridge-hub-common", @@ -13156,7 +13172,7 @@ dependencies = [ [[package]] name = "polkadot-sdk-frame" version = "0.10.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "frame-benchmarking", @@ -13191,7 +13207,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "25.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "frame-benchmarking", @@ -13301,7 +13317,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitvec", "fatality", @@ -13321,7 +13337,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -13628,7 +13644,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "syn 2.0.106", ] @@ -13810,7 +13826,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "syn 2.0.106", ] @@ -14635,7 +14651,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "24.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "binary-merkle-tree", "bitvec", @@ -14733,7 +14749,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "21.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "polkadot-primitives", @@ -15163,7 +15179,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "32.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "sp-core", @@ -15174,7 +15190,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "futures", @@ -15205,7 +15221,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "log", @@ -15227,7 +15243,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.45.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "sp-api", @@ -15242,7 +15258,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "44.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "clap", @@ -15258,7 +15274,7 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-genesis-builder", "sp-io", "sp-runtime", @@ -15269,7 +15285,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "12.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -15280,7 +15296,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.53.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "chrono", @@ -15322,7 +15338,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "fnv", "futures", @@ -15348,7 +15364,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.47.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "hash-db", "kvdb", @@ -15376,7 +15392,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "futures", @@ -15399,7 +15415,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "futures", @@ -15428,7 +15444,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "fork-tree", @@ -15453,7 +15469,7 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-slots", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-inherents", "sp-keystore", "sp-runtime", @@ -15464,7 +15480,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "jsonrpsee", @@ -15486,7 +15502,7 @@ dependencies = [ [[package]] name = "sc-consensus-beefy" version = "30.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15520,7 +15536,7 @@ dependencies = [ [[package]] name = "sc-consensus-beefy-rpc" version = "30.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "jsonrpsee", @@ -15540,7 +15556,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "fork-tree", "parity-scale-codec", @@ -15553,7 +15569,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.36.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "ahash 0.8.12", "array-bytes 6.2.3", @@ -15587,7 +15603,7 @@ dependencies = [ "sp-consensus", "sp-consensus-grandpa", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", @@ -15597,7 +15613,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" version = "0.36.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "finality-grandpa", "futures", @@ -15617,7 +15633,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.52.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "assert_matches", "async-trait", @@ -15652,7 +15668,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "futures", @@ -15675,7 +15691,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.43.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", @@ -15698,7 +15714,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.39.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "polkavm 0.24.0", "sc-allocator", @@ -15711,7 +15727,7 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" version = "0.36.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "polkavm 0.24.0", @@ -15722,7 +15738,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.39.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "anyhow", "log", @@ -15738,7 +15754,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "console", "futures", @@ -15754,7 +15770,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "36.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "parking_lot 0.12.5", @@ -15768,7 +15784,7 @@ dependencies = [ [[package]] name = "sc-mixnet" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "arrayvec 0.7.6", @@ -15796,7 +15812,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.51.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15846,7 +15862,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.49.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -15856,7 +15872,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "ahash 0.8.12", "futures", @@ -15875,7 +15891,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15896,7 +15912,7 @@ dependencies = [ [[package]] name = "sc-network-statement" version = "0.33.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15916,7 +15932,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15951,7 +15967,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "futures", @@ -15970,7 +15986,7 @@ dependencies = [ [[package]] name = "sc-network-types" version = "0.17.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bs58", "bytes", @@ -15991,7 +16007,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "46.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bytes", "fnv", @@ -16025,7 +16041,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.20.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -16034,7 +16050,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "46.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "jsonrpsee", @@ -16066,7 +16082,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -16086,7 +16102,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "dyn-clone", "forwarded-header-value", @@ -16110,7 +16126,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "futures", @@ -16143,13 +16159,13 @@ dependencies = [ [[package]] name = "sc-runtime-utilities" version = "0.3.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "sc-executor", "sc-executor-common", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-state-machine", "sp-wasm-interface", "thiserror 1.0.69", @@ -16158,7 +16174,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.52.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "directories", @@ -16222,7 +16238,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.39.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "parity-scale-codec", @@ -16233,7 +16249,7 @@ dependencies = [ [[package]] name = "sc-statement-store" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "parity-db", @@ -16252,7 +16268,7 @@ dependencies = [ [[package]] name = "sc-storage-monitor" version = "0.25.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "clap", "fs4", @@ -16265,7 +16281,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -16284,7 +16300,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "43.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "derive_more 0.99.20", "futures", @@ -16297,14 +16313,14 @@ dependencies = [ "serde", "serde_json", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-io", ] [[package]] name = "sc-telemetry" version = "29.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "chrono", "futures", @@ -16323,7 +16339,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "chrono", "console", @@ -16351,7 +16367,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "11.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -16362,7 +16378,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "40.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "futures", @@ -16379,7 +16395,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-runtime", "sp-tracing", "sp-transaction-pool", @@ -16393,7 +16409,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "futures", @@ -16410,7 +16426,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "19.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-channel 1.9.0", "futures", @@ -17166,7 +17182,7 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "slot-range-helper" version = "18.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "enumn", "parity-scale-codec", @@ -17450,7 +17466,7 @@ dependencies = [ [[package]] name = "snowbridge-core" version = "0.14.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bp-relayers", "frame-support", @@ -17545,7 +17561,7 @@ dependencies = [ [[package]] name = "sp-api" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "hash-db", @@ -17567,7 +17583,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "Inflector", "blake2 0.10.6", @@ -17581,7 +17597,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "scale-info", @@ -17593,7 +17609,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "27.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "integer-sqrt", @@ -17607,7 +17623,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "scale-info", @@ -17619,7 +17635,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "sp-api", "sp-inherents", @@ -17629,7 +17645,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "futures", "parity-scale-codec", @@ -17648,7 +17664,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.43.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "futures", @@ -17662,7 +17678,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.43.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "parity-scale-codec", @@ -17678,7 +17694,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.43.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "parity-scale-codec", @@ -17696,7 +17712,7 @@ dependencies = [ [[package]] name = "sp-consensus-beefy" version = "25.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "scale-info", @@ -17704,7 +17720,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-io", "sp-keystore", "sp-mmr-primitives", @@ -17716,7 +17732,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "finality-grandpa", "log", @@ -17733,7 +17749,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.43.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "scale-info", @@ -17744,7 +17760,7 @@ dependencies = [ [[package]] name = "sp-core" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "ark-vrf", "array-bytes 6.2.3", @@ -17775,7 +17791,7 @@ dependencies = [ "secrecy 0.8.0", "serde", "sha2 0.10.9", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-debug-derive", "sp-externalities", "sp-runtime-interface", @@ -17792,7 +17808,7 @@ dependencies = [ [[package]] name = "sp-crypto-ec-utils" version = "0.16.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "ark-bls12-377", "ark-bls12-377-ext", @@ -17826,7 +17842,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "blake2b_simd", "byteorder", @@ -17839,17 +17855,17 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "syn 2.0.106", ] [[package]] name = "sp-database" version = "10.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "kvdb", "parking_lot 0.12.5", @@ -17858,7 +17874,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "proc-macro2", "quote", @@ -17868,7 +17884,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.30.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "environmental", "parity-scale-codec", @@ -17878,7 +17894,7 @@ dependencies = [ [[package]] name = "sp-genesis-builder" version = "0.18.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "scale-info", @@ -17890,7 +17906,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -17903,7 +17919,7 @@ dependencies = [ [[package]] name = "sp-io" version = "41.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bytes", "docify", @@ -17915,7 +17931,7 @@ dependencies = [ "rustversion", "secp256k1 0.28.2", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-externalities", "sp-keystore", "sp-runtime-interface", @@ -17929,7 +17945,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "sp-core", "sp-runtime", @@ -17939,7 +17955,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.43.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", @@ -17950,7 +17966,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -17959,7 +17975,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.11.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-metadata 23.0.0", "parity-scale-codec", @@ -17969,7 +17985,7 @@ dependencies = [ [[package]] name = "sp-mixnet" version = "0.15.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "scale-info", @@ -17980,7 +17996,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "log", "parity-scale-codec", @@ -17997,7 +18013,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "scale-info", @@ -18010,7 +18026,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "sp-api", "sp-core", @@ -18020,7 +18036,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "13.0.2" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "backtrace", "regex", @@ -18029,7 +18045,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "35.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "rustc-hash 1.1.0", "serde", @@ -18039,7 +18055,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "binary-merkle-tree", "docify", @@ -18068,7 +18084,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "30.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -18087,7 +18103,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "19.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "Inflector", "expander", @@ -18100,7 +18116,7 @@ dependencies = [ [[package]] name = "sp-session" version = "39.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "scale-info", @@ -18114,7 +18130,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "39.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -18127,7 +18143,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.46.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "hash-db", "log", @@ -18147,7 +18163,7 @@ dependencies = [ [[package]] name = "sp-statement-store" version = "21.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "aes-gcm", "curve25519-dalek", @@ -18160,7 +18176,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", "sp-externalities", "sp-runtime", "sp-runtime-interface", @@ -18171,12 +18187,12 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" [[package]] name = "sp-storage" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "impl-serde", "parity-scale-codec", @@ -18188,7 +18204,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "parity-scale-codec", @@ -18200,7 +18216,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "17.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "tracing", @@ -18211,7 +18227,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "sp-api", "sp-runtime", @@ -18220,7 +18236,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "async-trait", "parity-scale-codec", @@ -18234,7 +18250,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "ahash 0.8.12", "foldhash 0.1.5", @@ -18259,7 +18275,7 @@ dependencies = [ [[package]] name = "sp-version" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "impl-serde", "parity-scale-codec", @@ -18276,7 +18292,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "15.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "proc-macro-warning", @@ -18288,7 +18304,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -18300,7 +18316,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "32.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "bounded-collections 0.2.4", "parity-scale-codec", @@ -18474,7 +18490,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "staging-chain-spec-builder" version = "12.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "clap", "docify", @@ -18487,7 +18503,7 @@ dependencies = [ [[package]] name = "staging-node-inspect" version = "0.29.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "clap", "parity-scale-codec", @@ -18505,7 +18521,7 @@ dependencies = [ [[package]] name = "staging-parachain-info" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -18518,7 +18534,7 @@ dependencies = [ [[package]] name = "staging-xcm" version = "17.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "bounded-collections 0.2.4", @@ -18539,7 +18555,7 @@ dependencies = [ [[package]] name = "staging-xcm-builder" version = "21.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "environmental", "frame-support", @@ -18563,7 +18579,7 @@ dependencies = [ [[package]] name = "staging-xcm-executor" version = "20.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "environmental", "frame-benchmarking", @@ -18617,7 +18633,7 @@ dependencies = [ [[package]] name = "stc-shield" version = "0.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "anyhow", "async-trait", @@ -18638,7 +18654,7 @@ dependencies = [ [[package]] name = "stp-shield" version = "0.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "parity-scale-codec", "scale-info", @@ -18708,7 +18724,7 @@ dependencies = [ [[package]] name = "substrate-bip39" version = "0.6.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "hmac 0.12.1", "pbkdf2 0.12.2", @@ -18733,7 +18749,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "11.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" [[package]] name = "substrate-fixed" @@ -18749,7 +18765,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "45.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "docify", "frame-system-rpc-runtime-api", @@ -18769,7 +18785,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.17.6" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "http-body-util", "hyper 1.7.0", @@ -18783,7 +18799,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "44.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -18810,7 +18826,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "27.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "array-bytes 6.2.3", "build-helper", @@ -19919,7 +19935,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "coarsetime", "polkadot-primitives", @@ -19930,7 +19946,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "5.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "expander", "proc-macro-crate 3.4.0", @@ -20935,7 +20951,7 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "westend-runtime" version = "24.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "binary-merkle-tree", "bitvec", @@ -21042,7 +21058,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "21.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "polkadot-primitives", @@ -21692,7 +21708,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "11.0.2" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "Inflector", "proc-macro2", @@ -21703,7 +21719,7 @@ dependencies = [ [[package]] name = "xcm-runtime-apis" version = "0.8.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "parity-scale-codec", @@ -21717,7 +21733,7 @@ dependencies = [ [[package]] name = "xcm-simulator" version = "21.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=7cc54bf2d50ae3921d718736dfeb0de9468539c7#7cc54bf2d50ae3921d718736dfeb0de9468539c7" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" dependencies = [ "frame-support", "frame-system", diff --git a/Cargo.toml b/Cargo.toml index 2de9093cbb..769f11e8fa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -79,8 +79,8 @@ subtensor-runtime-common = { default-features = false, path = "common" } subtensor-swap-interface = { default-features = false, path = "primitives/swap-interface" } subtensor-transaction-fee = { default-features = false, path = "pallets/transaction-fee" } subtensor-chain-extensions = { default-features = false, path = "chain-extensions" } -stp-shield = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -stc-shield = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } +stp-shield = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +stc-shield = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } ed25519-dalek = { version = "2.1.0", default-features = false } async-trait = "0.1" @@ -136,122 +136,122 @@ num_enum = { version = "0.7.4", default-features = false } environmental = { version = "1.1.4", default-features = false } tokio = { version = "1.38", default-features = false } -frame = { package = "polkadot-sdk-frame", git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -frame-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -frame-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -frame-executive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -frame-system-rpc-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -frame-system-benchmarking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -frame-try-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -frame-benchmarking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -frame-benchmarking-cli = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -frame-metadata-hash-extension = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } +frame = { package = "polkadot-sdk-frame", git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +frame-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +frame-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +frame-executive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +frame-system-rpc-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +frame-system-benchmarking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +frame-try-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +frame-benchmarking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +frame-benchmarking-cli = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +frame-metadata-hash-extension = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } frame-metadata = { version = "23.0.0", default-features = false } pallet-subtensor-proxy = { path = "pallets/proxy", default-features = false } pallet-subtensor-utility = { path = "pallets/utility", default-features = false } -pallet-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-balances = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-insecure-randomness-collective-flip = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-multisig = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-preimage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-safe-mode = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-scheduler = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-sudo = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-timestamp = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-transaction-payment = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-transaction-payment-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-root-testing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-contracts = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } +pallet-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-balances = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-insecure-randomness-collective-flip = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-multisig = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-preimage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-safe-mode = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-scheduler = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-sudo = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-timestamp = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-transaction-payment = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-transaction-payment-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-root-testing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-contracts = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } # NPoS -frame-election-provider-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-authority-discovery = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-authorship = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-bags-list = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-election-provider-multi-phase = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-fast-unstake = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-nomination-pools = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-nomination-pools-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-session = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-staking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-staking-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-staking-reward-fn = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-staking-reward-curve = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -pallet-offences = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } +frame-election-provider-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-authority-discovery = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-authorship = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-bags-list = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-election-provider-multi-phase = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-fast-unstake = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-nomination-pools = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-nomination-pools-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-session = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-staking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-staking-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-staking-reward-fn = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-staking-reward-curve = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-offences = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-basic-authorship = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-cli = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-client-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-consensus-babe-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-consensus-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-consensus-grandpa-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-consensus-epochs = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-chain-spec-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-chain-spec = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-executor = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-network = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-offchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-rpc-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-service = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-telemetry = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-transaction-pool-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-consensus-manual-seal = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sc-network-sync = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } +sc-basic-authorship = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-cli = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-client-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-consensus-babe-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-consensus-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-consensus-grandpa-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-consensus-epochs = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-chain-spec-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-chain-spec = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-executor = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-network = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-offchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-rpc-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-service = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-telemetry = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-transaction-pool-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-consensus-manual-seal = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-network-sync = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-authority-discovery = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-arithmetic = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-block-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-blockchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-staking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-npos-elections = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-consensus-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-genesis-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-inherents = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-io = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-keyring = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-offchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-session = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-std = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-storage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-timestamp = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-version = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-weights = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-crypto-hashing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-application-crypto = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-debug-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-externalities = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-runtime-interface = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } +sp-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-authority-discovery = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-arithmetic = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-block-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-blockchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-staking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-npos-elections = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-consensus-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-genesis-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-inherents = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-io = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-keyring = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-offchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-session = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-std = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-storage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-timestamp = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-version = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-weights = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-crypto-hashing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-application-crypto = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-debug-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-externalities = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-runtime-interface = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -substrate-build-script-utils = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } +substrate-build-script-utils = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } substrate-fixed = { git = "https://github.com/encointer/substrate-fixed.git", tag = "v0.6.0", default-features = false } -substrate-frame-rpc-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -substrate-wasm-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -substrate-prometheus-endpoint = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } +substrate-frame-rpc-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +substrate-wasm-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +substrate-prometheus-endpoint = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -polkadot-sdk = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } +polkadot-sdk = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -runtime-common = { package = "polkadot-runtime-common", git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } +runtime-common = { package = "polkadot-runtime-common", git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } # Frontier # Vendored via `git subtree` from RaoFoundation/frontier @@ -290,8 +290,8 @@ pallet-hotfix-sufficients = { path = "vendor/frontier/frame/hotfix-sufficients", #DRAND pallet-drand = { path = "pallets/drand", default-features = false } -sp-crypto-ec-utils = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } -sp-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false } +sp-crypto-ec-utils = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } w3f-bls = { path = "vendor/w3f-bls", default-features = false } ark-crypto-primitives = { version = "0.4.0", default-features = false } ark-scale = { version = "0.0.11", default-features = false } @@ -342,104 +342,104 @@ zstd-safe = { git = "https://github.com/gztensor/zstd-safe", rev = "42cc34ef6abe # build. Redirect the frontier-side polkadot-sdk crates to the RaoFoundation # remote at the same rev so the whole graph resolves to a single copy. [patch."https://github.com/opentensor/polkadot-sdk"] -binary-merkle-tree = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -cumulus-primitives-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -cumulus-primitives-proof-size-hostfunction = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -cumulus-primitives-storage-weight-reclaim = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -fork-tree = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -frame-benchmarking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -frame-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -frame-support-procedural = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -frame-support-procedural-tools = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -frame-support-procedural-tools-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -frame-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -polkadot-core-primitives = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -polkadot-parachain-primitives = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -polkadot-primitives = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-allocator = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-block-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-chain-spec = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-chain-spec-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-client-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-client-db = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-consensus-epochs = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-executor = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-executor-common = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-executor-polkavm = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-executor-wasmtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-informant = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-mixnet = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-network = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-network-common = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-network-light = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-network-sync = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-network-transactions = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-network-types = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-rpc-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-rpc-server = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-rpc-spec-v2 = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-service = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-state-db = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-sysinfo = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-telemetry = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-tracing-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-transaction-pool-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sc-utils = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-api-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-application-crypto = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-arithmetic = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-authority-discovery = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-block-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-blockchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-consensus-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-crypto-hashing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-crypto-hashing-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-database = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-debug-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-externalities = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-genesis-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-inherents = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-io = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-maybe-compressed-blob = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-metadata-ir = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-mixnet = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-offchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-panic-handler = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-runtime-interface = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-runtime-interface-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-session = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-staking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-state-machine = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-statement-store = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-std = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-storage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-timestamp = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-transaction-storage-proof = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-trie = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-version = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-version-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-wasm-interface = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -sp-weights = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -staging-xcm = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -substrate-bip39 = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -substrate-prometheus-endpoint = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } -xcm-procedural = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7" } +binary-merkle-tree = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +cumulus-primitives-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +cumulus-primitives-proof-size-hostfunction = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +cumulus-primitives-storage-weight-reclaim = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +fork-tree = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +frame-benchmarking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +frame-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +frame-support-procedural = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +frame-support-procedural-tools = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +frame-support-procedural-tools-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +frame-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +polkadot-core-primitives = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +polkadot-parachain-primitives = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +polkadot-primitives = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-allocator = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-block-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-chain-spec = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-chain-spec-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-client-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-client-db = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-consensus-epochs = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-executor = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-executor-common = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-executor-polkavm = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-executor-wasmtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-informant = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-mixnet = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-network = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-network-common = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-network-light = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-network-sync = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-network-transactions = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-network-types = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-rpc-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-rpc-server = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-rpc-spec-v2 = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-service = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-state-db = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-sysinfo = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-telemetry = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-tracing-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-transaction-pool-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sc-utils = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-api-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-application-crypto = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-arithmetic = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-authority-discovery = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-block-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-blockchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-consensus-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-crypto-hashing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-crypto-hashing-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-database = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-debug-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-externalities = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-genesis-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-inherents = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-io = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-maybe-compressed-blob = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-metadata-ir = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-mixnet = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-offchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-panic-handler = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-runtime-interface = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-runtime-interface-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-session = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-staking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-state-machine = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-statement-store = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-std = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-storage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-timestamp = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-transaction-storage-proof = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-trie = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-version = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-version-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-wasm-interface = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +sp-weights = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +staging-xcm = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +substrate-bip39 = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +substrate-prometheus-endpoint = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +xcm-procedural = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } diff --git a/node/Cargo.toml b/node/Cargo.toml index da20b81641..0d465eb5c0 100644 --- a/node/Cargo.toml +++ b/node/Cargo.toml @@ -26,6 +26,7 @@ clap = { workspace = true, features = ["derive"] } futures = { workspace = true, features = ["thread-pool"] } serde = { workspace = true, features = ["derive"] } hex.workspace = true +hex-literal.workspace = true tokio = { workspace = true, features = ["time", "rt", "net"] } # Storage import diff --git a/node/src/service.rs b/node/src/service.rs index f7d277eed2..4210a6fa20 100644 --- a/node/src/service.rs +++ b/node/src/service.rs @@ -1,5 +1,7 @@ //! Service and ServiceFactory implementation. Specialized wrapper over substrate service. +mod grandpa_warp_sync; + use crate::consensus::ConsensusMechanism; use futures::{FutureExt, StreamExt as _, channel::mpsc}; use node_subtensor_runtime::{RuntimeApi, TransactionConverter, opaque::Block}; @@ -305,10 +307,9 @@ where let peer_store_handle = net_config.peer_store_handle(); let metrics = NB::register_notification_metrics(maybe_registry); - let grandpa_protocol_name = sc_consensus_grandpa::protocol_standard_name( - &client.block_hash(0u32)?.expect("Genesis block exists; qed"), - &config.chain_spec, - ); + let genesis_hash = client.block_hash(0u32)?.expect("Genesis block exists; qed"); + let grandpa_protocol_name = + sc_consensus_grandpa::protocol_standard_name(&genesis_hash, &config.chain_spec); let (grandpa_protocol_config, grandpa_notification_service) = sc_consensus_grandpa::grandpa_peers_set_config::<_, NB>( @@ -320,24 +321,15 @@ where let warp_sync_config = if sealing.is_some() { None } else { - let set_id = match config.chain_spec.chain_type() { - // Finney patch - ChainType::Live => 3, - // Testnet patch - ChainType::Development => 2, - // All others (e.g. localnet) - _ => 0, - }; - log::warn!( - "Grandpa warp sync patch enabled. Chain type = {:?}. Set ID = {set_id}", - config.chain_spec.chain_type() - ); net_config.add_notification_protocol(grandpa_protocol_config); + let warp_sync_config = + grandpa_warp_sync::config(genesis_hash, config.chain_spec.chain_type()); + log::warn!("{}", warp_sync_config.log_message()); let warp_sync: Arc> = Arc::new(sc_consensus_grandpa::warp_proof::NetworkProvider::new( backend.clone(), grandpa_link.shared_authority_set().clone(), - sc_consensus_grandpa::warp_proof::HardForks::new_initial_set_id(set_id), + warp_sync_config.into_hard_forks(), )); Some(WarpSyncConfig::WithProvider(warp_sync)) diff --git a/node/src/service/grandpa_warp_sync.rs b/node/src/service/grandpa_warp_sync.rs new file mode 100644 index 0000000000..79b5cc05a1 --- /dev/null +++ b/node/src/service/grandpa_warp_sync.rs @@ -0,0 +1,160 @@ +use node_subtensor_runtime::opaque::Block; +use sc_chain_spec::ChainType; +use sc_consensus_grandpa::{AuthoritySetHardFork, warp_proof::HardForks}; +use sp_consensus_grandpa::{AuthorityId, AuthorityList}; +use sp_core::{ByteArray, H256}; + +const TESTNET_GENESIS: H256 = H256(hex_literal::hex!( + "8f9cf856bf558a14440e75569c9e58594757048d7b3a84b5d25f6bd978263105" +)); + +pub(super) enum Config { + TestnetCheckpoints(Vec>), + InitialSetId(u64), +} + +pub(super) fn config(genesis_hash: H256, chain_type: ChainType) -> Config { + if genesis_hash == TESTNET_GENESIS { + Config::TestnetCheckpoints(testnet_checkpoints()) + } else { + let set_id = match chain_type { + ChainType::Live => 3, + ChainType::Development => 2, + _ => 0, + }; + Config::InitialSetId(set_id) + } +} + +impl Config { + pub(super) fn log_message(&self) -> String { + match self { + Self::TestnetCheckpoints(_) => "Testnet GRANDPA warp sync checkpoints enabled.".into(), + Self::InitialSetId(set_id) => { + format!("GRANDPA warp sync initial set ID patch enabled. Set ID = {set_id}") + } + } + } + + pub(super) fn into_hard_forks(self) -> HardForks { + match self { + Self::TestnetCheckpoints(checkpoints) => { + HardForks::new_hard_forked_authorities(checkpoints) + } + Self::InitialSetId(set_id) => HardForks::new_initial_set_id(set_id), + } + } +} + +#[allow(clippy::expect_used)] +fn testnet_authorities() -> AuthorityList { + [ + hex_literal::hex!("dc832c3b7bdfc721e90e5ee9e532c06b62a0def3c79dab5324460d938db6600a"), + hex_literal::hex!("c8a00ef71912b3868b101cb70ebd029999d1c9b6a1390122a98f60d72b9a0fc4"), + hex_literal::hex!("ee70f7b52998c2b4f3d42e509e8360cda92b0cd4ca100cd4d32be5a1ac297909"), + hex_literal::hex!("b57a038c9139a060358f3b654df74a1cb6d15bcdb8438bcebd64ce67ec4301eb"), + hex_literal::hex!("755f75dfc66aaa3b1e761a8845249509b8bd2fdf0d94cb74e1e12e1e0f4d3519"), + hex_literal::hex!("d97a64267f177505b0565a18677c9f5d4284d7f2eb96d515556e7e52217f82e9"), + ] + .into_iter() + .map(|bytes| { + ( + AuthorityId::from_slice(&bytes).expect("authority IDs are exactly 32 bytes"), + 1, + ) + }) + .collect() +} + +fn testnet_checkpoints() -> Vec> { + let authorities = testnet_authorities(); + + [ + ( + 1, + 4_589_686, + hex_literal::hex!("2b001bfdec34d007ab2ac07f712e64d0cb1a6fb4b51f7d47bfb3c7d7336a689b"), + ), + ( + 3, + 5_534_451, + hex_literal::hex!("4d643da5fd7cd2b9ceb795091643e7223819e2a01f942ac049c5b928f7e30dc4"), + ), + ] + .into_iter() + .map(|(set_id, number, hash)| AuthoritySetHardFork { + set_id, + block: (H256::from(hash), number), + authorities: authorities.clone(), + last_finalized: None, + }) + .collect() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn checkpoints_are_exactly_testnet_genesis_scoped() { + assert!(matches!( + config(TESTNET_GENESIS, ChainType::Live), + Config::TestnetCheckpoints(_) + )); + assert!(matches!( + config(H256::zero(), ChainType::Live), + Config::InitialSetId(3) + )); + assert!(matches!( + config(H256::zero(), ChainType::Development), + Config::InitialSetId(2) + )); + assert!(matches!( + config(H256::zero(), ChainType::Local), + Config::InitialSetId(0) + )); + } + + #[test] + fn testnet_checkpoints_are_ordered_and_share_authorities() { + let checkpoints = testnet_checkpoints(); + let [first, second] = checkpoints.as_slice() else { + panic!("expected exactly two testnet warp checkpoints"); + }; + + assert_eq!((first.set_id, first.block.1), (1, 4_589_686)); + assert_eq!( + first.block.0, + H256::from(hex_literal::hex!( + "2b001bfdec34d007ab2ac07f712e64d0cb1a6fb4b51f7d47bfb3c7d7336a689b" + )) + ); + assert_eq!((second.set_id, second.block.1), (3, 5_534_451)); + assert_eq!( + second.block.0, + H256::from(hex_literal::hex!( + "4d643da5fd7cd2b9ceb795091643e7223819e2a01f942ac049c5b928f7e30dc4" + )) + ); + assert_eq!(first.authorities.len(), 6); + assert_eq!(first.authorities, second.authorities); + let authority_ids: Vec<&[u8]> = first + .authorities + .iter() + .map(|(authority_id, _)| AsRef::<[u8]>::as_ref(authority_id)) + .collect(); + let expected_authority_ids = [ + hex_literal::hex!("dc832c3b7bdfc721e90e5ee9e532c06b62a0def3c79dab5324460d938db6600a"), + hex_literal::hex!("c8a00ef71912b3868b101cb70ebd029999d1c9b6a1390122a98f60d72b9a0fc4"), + hex_literal::hex!("ee70f7b52998c2b4f3d42e509e8360cda92b0cd4ca100cd4d32be5a1ac297909"), + hex_literal::hex!("b57a038c9139a060358f3b654df74a1cb6d15bcdb8438bcebd64ce67ec4301eb"), + hex_literal::hex!("755f75dfc66aaa3b1e761a8845249509b8bd2fdf0d94cb74e1e12e1e0f4d3519"), + hex_literal::hex!("d97a64267f177505b0565a18677c9f5d4284d7f2eb96d515556e7e52217f82e9"), + ]; + let expected_authority_ids = expected_authority_ids + .iter() + .map(|id| id.as_slice()) + .collect::>(); + assert_eq!(authority_ids, expected_authority_ids); + } +} From 22f6be86b62b3fc8abe193cc319e1785481372ea Mon Sep 17 00:00:00 2001 From: UnArbosFive Date: Wed, 22 Jul 2026 14:50:09 +0200 Subject: [PATCH 43/63] Pin rebased SDK warp-sync revision --- Cargo.lock | 764 ++++++++++++++++++++++++++--------------------------- Cargo.toml | 418 ++++++++++++++--------------- 2 files changed, 591 insertions(+), 591 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 34e9acdf53..b3fc2d8ac7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1114,7 +1114,7 @@ checksum = "9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9" [[package]] name = "assets-common" version = "0.22.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-primitives-core", "ethereum-standards", @@ -1499,7 +1499,7 @@ checksum = "5a45f9771ced8a774de5e5ebffbe520f52e3943bf5a9a6baa3a5d14a5de1afe6" [[package]] name = "binary-merkle-tree" version = "16.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "hash-db", "log", @@ -1870,7 +1870,7 @@ dependencies = [ [[package]] name = "bp-header-chain" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-runtime", "finality-grandpa", @@ -1887,7 +1887,7 @@ dependencies = [ [[package]] name = "bp-messages" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-header-chain", "bp-runtime", @@ -1903,7 +1903,7 @@ dependencies = [ [[package]] name = "bp-parachains" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-header-chain", "bp-polkadot-core", @@ -1920,7 +1920,7 @@ dependencies = [ [[package]] name = "bp-polkadot-core" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-messages", "bp-runtime", @@ -1936,7 +1936,7 @@ dependencies = [ [[package]] name = "bp-relayers" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-header-chain", "bp-messages", @@ -1954,7 +1954,7 @@ dependencies = [ [[package]] name = "bp-runtime" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -1977,7 +1977,7 @@ dependencies = [ [[package]] name = "bp-test-utils" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-header-chain", "bp-parachains", @@ -1997,7 +1997,7 @@ dependencies = [ [[package]] name = "bp-xcm-bridge-hub" version = "0.7.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-messages", "bp-runtime", @@ -2014,7 +2014,7 @@ dependencies = [ [[package]] name = "bp-xcm-bridge-hub-router" version = "0.18.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "scale-info", @@ -2026,7 +2026,7 @@ dependencies = [ [[package]] name = "bridge-hub-common" version = "0.14.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -2045,7 +2045,7 @@ dependencies = [ [[package]] name = "bridge-runtime-common" version = "0.22.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-header-chain", "bp-messages", @@ -2958,7 +2958,7 @@ dependencies = [ [[package]] name = "cumulus-client-bootnodes" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -2984,7 +2984,7 @@ dependencies = [ [[package]] name = "cumulus-client-cli" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "clap", "parity-scale-codec", @@ -3001,7 +3001,7 @@ dependencies = [ [[package]] name = "cumulus-client-collator" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-client-consensus-common", "cumulus-client-network", @@ -3024,7 +3024,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-aura" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "cumulus-client-collator", @@ -3071,7 +3071,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-common" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "cumulus-client-pov-recovery", @@ -3103,7 +3103,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-proposer" version = "0.20.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "anyhow", "async-trait", @@ -3118,7 +3118,7 @@ dependencies = [ [[package]] name = "cumulus-client-consensus-relay-chain" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "cumulus-client-consensus-common", @@ -3141,7 +3141,7 @@ dependencies = [ [[package]] name = "cumulus-client-network" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "cumulus-relay-chain-interface", @@ -3168,7 +3168,7 @@ dependencies = [ [[package]] name = "cumulus-client-parachain-inherent" version = "0.18.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3178,7 +3178,7 @@ dependencies = [ "parity-scale-codec", "sc-client-api", "sc-consensus-babe", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-inherents", "sp-runtime", "sp-state-machine", @@ -3189,7 +3189,7 @@ dependencies = [ [[package]] name = "cumulus-client-pov-recovery" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3217,7 +3217,7 @@ dependencies = [ [[package]] name = "cumulus-client-service" version = "0.25.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-channel 1.9.0", "cumulus-client-cli", @@ -3257,7 +3257,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-aura-ext" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-pallet-parachain-system", "frame-support", @@ -3274,7 +3274,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-dmp-queue" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-primitives-core", "frame-benchmarking", @@ -3291,7 +3291,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bytes", "cumulus-pallet-parachain-system-proc-macro", @@ -3328,7 +3328,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-parachain-system-proc-macro" version = "0.6.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -3339,7 +3339,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-session-benchmarking" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -3352,7 +3352,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-solo-to-para" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-pallet-parachain-system", "frame-support", @@ -3367,7 +3367,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-weight-reclaim" version = "0.3.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-primitives-storage-weight-reclaim", "derive-where", @@ -3386,7 +3386,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcm" version = "0.20.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -3401,7 +3401,7 @@ dependencies = [ [[package]] name = "cumulus-pallet-xcmp-queue" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "approx", "bounded-collections 0.2.4", @@ -3426,7 +3426,7 @@ dependencies = [ [[package]] name = "cumulus-ping" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-pallet-xcm", "cumulus-primitives-core", @@ -3441,7 +3441,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-aura" version = "0.18.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "sp-api", "sp-consensus-aura", @@ -3450,7 +3450,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-core" version = "0.19.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -3467,7 +3467,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" version = "0.19.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3481,7 +3481,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" version = "0.13.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -3491,7 +3491,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-storage-weight-reclaim" version = "12.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-proof-size-hostfunction", @@ -3508,7 +3508,7 @@ dependencies = [ [[package]] name = "cumulus-primitives-utility" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -3525,7 +3525,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-inprocess-interface" version = "0.25.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-channel 1.9.0", "async-trait", @@ -3553,7 +3553,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3573,7 +3573,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-minimal-node" version = "0.25.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -3609,7 +3609,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-rpc-interface" version = "0.24.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -3650,7 +3650,7 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-streams" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-relay-chain-interface", "futures", @@ -3664,7 +3664,7 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" version = "0.20.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -4471,7 +4471,7 @@ dependencies = [ [[package]] name = "ethereum-standards" version = "0.1.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "alloy-core", ] @@ -4853,7 +4853,7 @@ dependencies = [ "rustc-hex", "serde", "serde_json", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", ] [[package]] @@ -5036,7 +5036,7 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "fork-tree" version = "13.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", ] @@ -5156,7 +5156,7 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" version = "41.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-support-procedural", @@ -5180,7 +5180,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "49.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "Inflector", "array-bytes 6.2.3", @@ -5245,7 +5245,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-pallet-pov" version = "31.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5273,7 +5273,7 @@ dependencies = [ [[package]] name = "frame-election-provider-solution-type" version = "16.1.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -5284,7 +5284,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -5301,7 +5301,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "41.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "aquamarine", "frame-support", @@ -5354,7 +5354,7 @@ dependencies = [ [[package]] name = "frame-metadata-hash-extension" version = "0.9.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "const-hex", @@ -5370,7 +5370,7 @@ dependencies = [ [[package]] name = "frame-storage-access-test-runtime" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-pallet-parachain-system", "parity-scale-codec", @@ -5384,7 +5384,7 @@ dependencies = [ [[package]] name = "frame-support" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "aquamarine", "array-bytes 6.2.3", @@ -5425,7 +5425,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "34.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "Inflector", "cfg-expr", @@ -5439,14 +5439,14 @@ dependencies = [ "proc-macro-warning", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "syn 2.0.106", ] [[package]] name = "frame-support-procedural-core" version = "34.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cfg-expr", "frame-support-procedural-tools 13.0.1", @@ -5471,7 +5471,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "13.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support-procedural-tools-derive 12.0.0", "proc-macro-crate 3.4.0", @@ -5494,7 +5494,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "12.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "proc-macro2", "quote", @@ -5504,7 +5504,7 @@ dependencies = [ [[package]] name = "frame-system" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cfg-if", "docify", @@ -5523,7 +5523,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -5537,7 +5537,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "parity-scale-codec", @@ -5547,7 +5547,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.47.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "parity-scale-codec", @@ -8287,7 +8287,7 @@ dependencies = [ [[package]] name = "mmr-gadget" version = "46.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "log", @@ -8306,7 +8306,7 @@ dependencies = [ [[package]] name = "mmr-rpc" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -9277,7 +9277,7 @@ dependencies = [ [[package]] name = "pallet-alliance" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "frame-benchmarking", @@ -9289,7 +9289,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-io", "sp-runtime", ] @@ -9313,7 +9313,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9331,7 +9331,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion-ops" version = "0.9.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9349,7 +9349,7 @@ dependencies = [ [[package]] name = "pallet-asset-conversion-tx-payment" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9364,7 +9364,7 @@ dependencies = [ [[package]] name = "pallet-asset-rate" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9378,7 +9378,7 @@ dependencies = [ [[package]] name = "pallet-asset-rewards" version = "0.3.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9396,7 +9396,7 @@ dependencies = [ [[package]] name = "pallet-asset-tx-payment" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9412,7 +9412,7 @@ dependencies = [ [[package]] name = "pallet-assets" version = "43.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "ethereum-standards", "frame-benchmarking", @@ -9430,7 +9430,7 @@ dependencies = [ [[package]] name = "pallet-assets-freezer" version = "0.8.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "pallet-assets", @@ -9442,7 +9442,7 @@ dependencies = [ [[package]] name = "pallet-assets-holder" version = "0.3.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9457,7 +9457,7 @@ dependencies = [ [[package]] name = "pallet-atomic-swap" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -9467,7 +9467,7 @@ dependencies = [ [[package]] name = "pallet-aura" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -9483,7 +9483,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -9498,7 +9498,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -9511,7 +9511,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9534,7 +9534,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "aquamarine", "docify", @@ -9555,7 +9555,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "frame-benchmarking", @@ -9584,7 +9584,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -9603,7 +9603,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "binary-merkle-tree", @@ -9628,7 +9628,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9645,7 +9645,7 @@ dependencies = [ [[package]] name = "pallet-bridge-grandpa" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-header-chain", "bp-runtime", @@ -9664,7 +9664,7 @@ dependencies = [ [[package]] name = "pallet-bridge-messages" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-header-chain", "bp-messages", @@ -9683,7 +9683,7 @@ dependencies = [ [[package]] name = "pallet-bridge-parachains" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-header-chain", "bp-parachains", @@ -9703,7 +9703,7 @@ dependencies = [ [[package]] name = "pallet-bridge-relayers" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-header-chain", "bp-messages", @@ -9726,7 +9726,7 @@ dependencies = [ [[package]] name = "pallet-broker" version = "0.20.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitvec", "frame-benchmarking", @@ -9744,7 +9744,7 @@ dependencies = [ [[package]] name = "pallet-child-bounties" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9762,7 +9762,7 @@ dependencies = [ [[package]] name = "pallet-collator-selection" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9781,7 +9781,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "frame-benchmarking", @@ -9798,7 +9798,7 @@ dependencies = [ [[package]] name = "pallet-collective-content" version = "0.19.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9839,7 +9839,7 @@ dependencies = [ [[package]] name = "pallet-contracts" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "environmental", "frame-benchmarking", @@ -9870,7 +9870,7 @@ dependencies = [ [[package]] name = "pallet-contracts-mock-network" version = "18.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -9901,7 +9901,7 @@ dependencies = [ [[package]] name = "pallet-contracts-proc-macro" version = "23.0.3" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "proc-macro2", "quote", @@ -9911,7 +9911,7 @@ dependencies = [ [[package]] name = "pallet-contracts-uapi" version = "14.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -9922,7 +9922,7 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "assert_matches", "frame-benchmarking", @@ -9938,7 +9938,7 @@ dependencies = [ [[package]] name = "pallet-core-fellowship" version = "25.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -9976,7 +9976,7 @@ dependencies = [ [[package]] name = "pallet-delegated-staking" version = "8.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -9991,7 +9991,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10008,7 +10008,7 @@ dependencies = [ [[package]] name = "pallet-dev-mode" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -10057,7 +10057,7 @@ dependencies = [ [[package]] name = "pallet-dummy-dim" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10075,7 +10075,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-block" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10096,7 +10096,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10117,7 +10117,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10130,7 +10130,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10249,7 +10249,7 @@ dependencies = [ [[package]] name = "pallet-fast-unstake" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "frame-benchmarking", @@ -10267,7 +10267,7 @@ dependencies = [ [[package]] name = "pallet-glutton" version = "27.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "blake2 0.10.6", "frame-benchmarking", @@ -10285,7 +10285,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10321,7 +10321,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "enumflags2", "frame-benchmarking", @@ -10337,7 +10337,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10356,7 +10356,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10371,7 +10371,7 @@ dependencies = [ [[package]] name = "pallet-insecure-randomness-collective-flip" version = "29.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -10404,7 +10404,7 @@ dependencies = [ [[package]] name = "pallet-lottery" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10417,7 +10417,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10433,7 +10433,7 @@ dependencies = [ [[package]] name = "pallet-message-queue" version = "44.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "environmental", "frame-benchmarking", @@ -10452,7 +10452,7 @@ dependencies = [ [[package]] name = "pallet-meta-tx" version = "0.3.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "frame-benchmarking", @@ -10470,7 +10470,7 @@ dependencies = [ [[package]] name = "pallet-migrations" version = "11.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "frame-benchmarking", @@ -10489,7 +10489,7 @@ dependencies = [ [[package]] name = "pallet-mixnet" version = "0.17.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "parity-scale-codec", @@ -10503,7 +10503,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "parity-scale-codec", @@ -10515,7 +10515,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "parity-scale-codec", @@ -10526,7 +10526,7 @@ dependencies = [ [[package]] name = "pallet-nft-fractionalization" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "pallet-assets", @@ -10539,7 +10539,7 @@ dependencies = [ [[package]] name = "pallet-nfts" version = "35.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "enumflags2", "frame-benchmarking", @@ -10556,7 +10556,7 @@ dependencies = [ [[package]] name = "pallet-nis" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -10566,7 +10566,7 @@ dependencies = [ [[package]] name = "pallet-node-authorization" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "parity-scale-codec", @@ -10577,7 +10577,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools" version = "39.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -10595,7 +10595,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-benchmarking" version = "39.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10615,7 +10615,7 @@ dependencies = [ [[package]] name = "pallet-nomination-pools-runtime-api" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "pallet-nomination-pools", "parity-scale-codec", @@ -10625,7 +10625,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -10640,7 +10640,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -10663,7 +10663,7 @@ dependencies = [ [[package]] name = "pallet-origin-restriction" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10681,7 +10681,7 @@ dependencies = [ [[package]] name = "pallet-paged-list" version = "0.19.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "parity-scale-codec", @@ -10692,7 +10692,7 @@ dependencies = [ [[package]] name = "pallet-parameters" version = "0.12.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "frame-benchmarking", @@ -10709,7 +10709,7 @@ dependencies = [ [[package]] name = "pallet-people" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10727,7 +10727,7 @@ dependencies = [ [[package]] name = "pallet-preimage" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10743,7 +10743,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -10755,7 +10755,7 @@ dependencies = [ [[package]] name = "pallet-ranked-collective" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10773,7 +10773,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -10783,7 +10783,7 @@ dependencies = [ [[package]] name = "pallet-referenda" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "assert_matches", "frame-benchmarking", @@ -10801,7 +10801,7 @@ dependencies = [ [[package]] name = "pallet-remark" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -10816,7 +10816,7 @@ dependencies = [ [[package]] name = "pallet-revive" version = "0.7.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "alloy-core", "derive_more 0.99.20", @@ -10862,7 +10862,7 @@ dependencies = [ [[package]] name = "pallet-revive-fixtures" version = "0.4.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "anyhow", "cargo_metadata", @@ -10876,7 +10876,7 @@ dependencies = [ [[package]] name = "pallet-revive-proc-macro" version = "0.3.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "proc-macro2", "quote", @@ -10886,7 +10886,7 @@ dependencies = [ [[package]] name = "pallet-revive-uapi" version = "0.5.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitflags 1.3.2", "pallet-revive-proc-macro", @@ -10898,7 +10898,7 @@ dependencies = [ [[package]] name = "pallet-root-offences" version = "38.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -10914,7 +10914,7 @@ dependencies = [ [[package]] name = "pallet-root-testing" version = "17.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -10927,7 +10927,7 @@ dependencies = [ [[package]] name = "pallet-safe-mode" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "pallet-balances", @@ -10941,7 +10941,7 @@ dependencies = [ [[package]] name = "pallet-salary" version = "26.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "pallet-ranked-collective", @@ -10953,7 +10953,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "frame-benchmarking", @@ -10970,7 +10970,7 @@ dependencies = [ [[package]] name = "pallet-scored-pool" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -10983,7 +10983,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -11004,7 +11004,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -11050,7 +11050,7 @@ dependencies = [ [[package]] name = "pallet-skip-feeless-payment" version = "16.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -11062,7 +11062,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -11079,7 +11079,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -11101,7 +11101,7 @@ dependencies = [ [[package]] name = "pallet-staking-async" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -11124,7 +11124,7 @@ dependencies = [ [[package]] name = "pallet-staking-async-ah-client" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -11143,7 +11143,7 @@ dependencies = [ [[package]] name = "pallet-staking-async-rc-client" version = "0.2.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -11160,7 +11160,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "12.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -11171,7 +11171,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "sp-arithmetic", @@ -11180,7 +11180,7 @@ dependencies = [ [[package]] name = "pallet-staking-runtime-api" version = "27.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "sp-api", @@ -11190,7 +11190,7 @@ dependencies = [ [[package]] name = "pallet-state-trie-migration" version = "46.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -11206,7 +11206,7 @@ dependencies = [ [[package]] name = "pallet-statement" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", @@ -11370,7 +11370,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "frame-benchmarking", @@ -11385,7 +11385,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "frame-benchmarking", @@ -11403,7 +11403,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -11421,7 +11421,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -11436,7 +11436,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "44.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", @@ -11452,7 +11452,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -11464,7 +11464,7 @@ dependencies = [ [[package]] name = "pallet-transaction-storage" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "frame-benchmarking", @@ -11483,7 +11483,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "frame-benchmarking", @@ -11502,7 +11502,7 @@ dependencies = [ [[package]] name = "pallet-tx-pause" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "parity-scale-codec", @@ -11513,7 +11513,7 @@ dependencies = [ [[package]] name = "pallet-uniques" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -11527,7 +11527,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -11542,7 +11542,7 @@ dependencies = [ [[package]] name = "pallet-verify-signature" version = "0.4.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -11557,7 +11557,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -11571,7 +11571,7 @@ dependencies = [ [[package]] name = "pallet-whitelist" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -11581,7 +11581,7 @@ dependencies = [ [[package]] name = "pallet-xcm" version = "20.1.3" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bounded-collections 0.2.4", "frame-benchmarking", @@ -11607,7 +11607,7 @@ dependencies = [ [[package]] name = "pallet-xcm-benchmarks" version = "21.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-benchmarking", "frame-support", @@ -11624,7 +11624,7 @@ dependencies = [ [[package]] name = "pallet-xcm-bridge-hub" version = "0.17.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-messages", "bp-runtime", @@ -11646,7 +11646,7 @@ dependencies = [ [[package]] name = "pallet-xcm-bridge-hub-router" version = "0.19.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-xcm-bridge-hub-router", "frame-benchmarking", @@ -11666,7 +11666,7 @@ dependencies = [ [[package]] name = "parachains-common" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-utility", @@ -12028,7 +12028,7 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "polkadot-approval-distribution" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "futures-timer", @@ -12046,7 +12046,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "futures-timer", @@ -12061,7 +12061,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "fatality", "futures", @@ -12084,7 +12084,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "fatality", @@ -12117,7 +12117,7 @@ dependencies = [ [[package]] name = "polkadot-cli" version = "25.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "clap", "frame-benchmarking-cli", @@ -12141,7 +12141,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitvec", "fatality", @@ -12164,7 +12164,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" version = "18.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "scale-info", @@ -12175,7 +12175,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "fatality", "futures", @@ -12197,7 +12197,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -12211,7 +12211,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" version = "24.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "futures-timer", @@ -12224,7 +12224,7 @@ dependencies = [ "sc-network", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-keystore", "tracing-gum", ] @@ -12232,7 +12232,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "always-assert", "async-trait", @@ -12255,7 +12255,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "parity-scale-codec", @@ -12273,7 +12273,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "bitvec", @@ -12305,7 +12305,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting-parallel" version = "0.7.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "futures", @@ -12329,7 +12329,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitvec", "futures", @@ -12348,7 +12348,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitvec", "fatality", @@ -12369,7 +12369,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "polkadot-node-subsystem", @@ -12384,7 +12384,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "futures", @@ -12406,7 +12406,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "polkadot-node-metrics", @@ -12420,7 +12420,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "futures-timer", @@ -12436,7 +12436,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "fatality", "futures", @@ -12454,7 +12454,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "futures", @@ -12471,7 +12471,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-prospective-parachains" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "fatality", "futures", @@ -12485,7 +12485,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitvec", "fatality", @@ -12502,7 +12502,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "always-assert", "array-bytes 6.2.3", @@ -12530,7 +12530,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-checker" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "polkadot-node-subsystem", @@ -12543,7 +12543,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf-common" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cpu-time", "futures", @@ -12558,7 +12558,7 @@ dependencies = [ "sc-executor-wasmtime", "seccompiler", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-externalities", "sp-io", "sp-tracing", @@ -12569,7 +12569,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "polkadot-node-metrics", @@ -12584,7 +12584,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bs58", "futures", @@ -12601,7 +12601,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-channel 1.9.0", "async-trait", @@ -12626,7 +12626,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitvec", "bounded-vec", @@ -12650,7 +12650,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "polkadot-node-subsystem-types", "polkadot-overseer", @@ -12659,7 +12659,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "derive_more 0.99.20", @@ -12687,7 +12687,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" version = "24.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "fatality", "futures", @@ -12718,7 +12718,7 @@ dependencies = [ [[package]] name = "polkadot-omni-node-lib" version = "0.7.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "clap", @@ -12806,7 +12806,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "futures", @@ -12826,7 +12826,7 @@ dependencies = [ [[package]] name = "polkadot-parachain-primitives" version = "17.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bounded-collections 0.2.4", "derive_more 0.99.20", @@ -12842,7 +12842,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" version = "19.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitvec", "bounded-collections 0.2.4", @@ -12871,7 +12871,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" version = "25.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "jsonrpsee", "mmr-rpc", @@ -12904,7 +12904,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitvec", "frame-benchmarking", @@ -12954,7 +12954,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" version = "21.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bs58", "frame-benchmarking", @@ -12966,7 +12966,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" version = "20.0.2" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitflags 1.3.2", "bitvec", @@ -13014,7 +13014,7 @@ dependencies = [ [[package]] name = "polkadot-sdk" version = "2506.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "assets-common", "bridge-hub-common", @@ -13172,7 +13172,7 @@ dependencies = [ [[package]] name = "polkadot-sdk-frame" version = "0.10.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "frame-benchmarking", @@ -13207,7 +13207,7 @@ dependencies = [ [[package]] name = "polkadot-service" version = "25.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "frame-benchmarking", @@ -13317,7 +13317,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitvec", "fatality", @@ -13337,7 +13337,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -13644,7 +13644,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "syn 2.0.106", ] @@ -13826,7 +13826,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "syn 2.0.106", ] @@ -14651,7 +14651,7 @@ dependencies = [ [[package]] name = "rococo-runtime" version = "24.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "binary-merkle-tree", "bitvec", @@ -14749,7 +14749,7 @@ dependencies = [ [[package]] name = "rococo-runtime-constants" version = "21.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "polkadot-primitives", @@ -15179,7 +15179,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "32.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "sp-core", @@ -15190,7 +15190,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "futures", @@ -15221,7 +15221,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "log", @@ -15243,7 +15243,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.45.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "sp-api", @@ -15258,7 +15258,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "44.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "clap", @@ -15274,7 +15274,7 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-genesis-builder", "sp-io", "sp-runtime", @@ -15285,7 +15285,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "12.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -15296,7 +15296,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.53.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "chrono", @@ -15338,7 +15338,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "fnv", "futures", @@ -15364,7 +15364,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.47.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "hash-db", "kvdb", @@ -15392,7 +15392,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "futures", @@ -15415,7 +15415,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "futures", @@ -15444,7 +15444,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "fork-tree", @@ -15469,7 +15469,7 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-slots", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-inherents", "sp-keystore", "sp-runtime", @@ -15480,7 +15480,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "jsonrpsee", @@ -15502,7 +15502,7 @@ dependencies = [ [[package]] name = "sc-consensus-beefy" version = "30.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15536,7 +15536,7 @@ dependencies = [ [[package]] name = "sc-consensus-beefy-rpc" version = "30.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "jsonrpsee", @@ -15556,7 +15556,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "fork-tree", "parity-scale-codec", @@ -15569,7 +15569,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" version = "0.36.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "ahash 0.8.12", "array-bytes 6.2.3", @@ -15603,7 +15603,7 @@ dependencies = [ "sp-consensus", "sp-consensus-grandpa", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", @@ -15613,7 +15613,7 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa-rpc" version = "0.36.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "finality-grandpa", "futures", @@ -15633,7 +15633,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.52.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "assert_matches", "async-trait", @@ -15668,7 +15668,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "futures", @@ -15691,7 +15691,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.43.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", @@ -15714,7 +15714,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.39.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "polkavm 0.24.0", "sc-allocator", @@ -15727,7 +15727,7 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" version = "0.36.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "polkavm 0.24.0", @@ -15738,7 +15738,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.39.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "anyhow", "log", @@ -15754,7 +15754,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "console", "futures", @@ -15770,7 +15770,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "36.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "parking_lot 0.12.5", @@ -15784,7 +15784,7 @@ dependencies = [ [[package]] name = "sc-mixnet" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "arrayvec 0.7.6", @@ -15812,7 +15812,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.51.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15862,7 +15862,7 @@ dependencies = [ [[package]] name = "sc-network-common" version = "0.49.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bitflags 1.3.2", "parity-scale-codec", @@ -15872,7 +15872,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "ahash 0.8.12", "futures", @@ -15891,7 +15891,7 @@ dependencies = [ [[package]] name = "sc-network-light" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15912,7 +15912,7 @@ dependencies = [ [[package]] name = "sc-network-statement" version = "0.33.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15932,7 +15932,7 @@ dependencies = [ [[package]] name = "sc-network-sync" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "async-channel 1.9.0", @@ -15967,7 +15967,7 @@ dependencies = [ [[package]] name = "sc-network-transactions" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "futures", @@ -15986,7 +15986,7 @@ dependencies = [ [[package]] name = "sc-network-types" version = "0.17.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bs58", "bytes", @@ -16007,7 +16007,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "46.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bytes", "fnv", @@ -16041,7 +16041,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.20.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -16050,7 +16050,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "46.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "jsonrpsee", @@ -16082,7 +16082,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.50.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -16102,7 +16102,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "dyn-clone", "forwarded-header-value", @@ -16126,7 +16126,7 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "futures", @@ -16159,13 +16159,13 @@ dependencies = [ [[package]] name = "sc-runtime-utilities" version = "0.3.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "sc-executor", "sc-executor-common", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-state-machine", "sp-wasm-interface", "thiserror 1.0.69", @@ -16174,7 +16174,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.52.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "directories", @@ -16238,7 +16238,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.39.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "parity-scale-codec", @@ -16249,7 +16249,7 @@ dependencies = [ [[package]] name = "sc-statement-store" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "parity-db", @@ -16268,7 +16268,7 @@ dependencies = [ [[package]] name = "sc-storage-monitor" version = "0.25.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "clap", "fs4", @@ -16281,7 +16281,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.51.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -16300,7 +16300,7 @@ dependencies = [ [[package]] name = "sc-sysinfo" version = "43.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "derive_more 0.99.20", "futures", @@ -16313,14 +16313,14 @@ dependencies = [ "serde", "serde_json", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-io", ] [[package]] name = "sc-telemetry" version = "29.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "chrono", "futures", @@ -16339,7 +16339,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "chrono", "console", @@ -16367,7 +16367,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "11.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -16378,7 +16378,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "40.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "futures", @@ -16395,7 +16395,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-runtime", "sp-tracing", "sp-transaction-pool", @@ -16409,7 +16409,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "futures", @@ -16426,7 +16426,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "19.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-channel 1.9.0", "futures", @@ -17182,7 +17182,7 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "slot-range-helper" version = "18.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "enumn", "parity-scale-codec", @@ -17466,7 +17466,7 @@ dependencies = [ [[package]] name = "snowbridge-core" version = "0.14.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bp-relayers", "frame-support", @@ -17561,7 +17561,7 @@ dependencies = [ [[package]] name = "sp-api" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "hash-db", @@ -17583,7 +17583,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "23.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "Inflector", "blake2 0.10.6", @@ -17597,7 +17597,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "41.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "scale-info", @@ -17609,7 +17609,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "27.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "integer-sqrt", @@ -17623,7 +17623,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "scale-info", @@ -17635,7 +17635,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "sp-api", "sp-inherents", @@ -17645,7 +17645,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "futures", "parity-scale-codec", @@ -17664,7 +17664,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.43.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "futures", @@ -17678,7 +17678,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" version = "0.43.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "parity-scale-codec", @@ -17694,7 +17694,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.43.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "parity-scale-codec", @@ -17712,7 +17712,7 @@ dependencies = [ [[package]] name = "sp-consensus-beefy" version = "25.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "scale-info", @@ -17720,7 +17720,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-io", "sp-keystore", "sp-mmr-primitives", @@ -17732,7 +17732,7 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" version = "24.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "finality-grandpa", "log", @@ -17749,7 +17749,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.43.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "scale-info", @@ -17760,7 +17760,7 @@ dependencies = [ [[package]] name = "sp-core" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "ark-vrf", "array-bytes 6.2.3", @@ -17791,7 +17791,7 @@ dependencies = [ "secrecy 0.8.0", "serde", "sha2 0.10.9", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-debug-derive", "sp-externalities", "sp-runtime-interface", @@ -17808,7 +17808,7 @@ dependencies = [ [[package]] name = "sp-crypto-ec-utils" version = "0.16.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "ark-bls12-377", "ark-bls12-377-ext", @@ -17842,7 +17842,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "blake2b_simd", "byteorder", @@ -17855,17 +17855,17 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "syn 2.0.106", ] [[package]] name = "sp-database" version = "10.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "kvdb", "parking_lot 0.12.5", @@ -17874,7 +17874,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "proc-macro2", "quote", @@ -17884,7 +17884,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.30.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "environmental", "parity-scale-codec", @@ -17894,7 +17894,7 @@ dependencies = [ [[package]] name = "sp-genesis-builder" version = "0.18.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "scale-info", @@ -17906,7 +17906,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -17919,7 +17919,7 @@ dependencies = [ [[package]] name = "sp-io" version = "41.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bytes", "docify", @@ -17931,7 +17931,7 @@ dependencies = [ "rustversion", "secp256k1 0.28.2", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-externalities", "sp-keystore", "sp-runtime-interface", @@ -17945,7 +17945,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "sp-core", "sp-runtime", @@ -17955,7 +17955,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.43.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", @@ -17966,7 +17966,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -17975,7 +17975,7 @@ dependencies = [ [[package]] name = "sp-metadata-ir" version = "0.11.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-metadata 23.0.0", "parity-scale-codec", @@ -17985,7 +17985,7 @@ dependencies = [ [[package]] name = "sp-mixnet" version = "0.15.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "scale-info", @@ -17996,7 +17996,7 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "log", "parity-scale-codec", @@ -18013,7 +18013,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "scale-info", @@ -18026,7 +18026,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "sp-api", "sp-core", @@ -18036,7 +18036,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "13.0.2" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "backtrace", "regex", @@ -18045,7 +18045,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "35.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "rustc-hash 1.1.0", "serde", @@ -18055,7 +18055,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "42.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "binary-merkle-tree", "docify", @@ -18084,7 +18084,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "30.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bytes", "impl-trait-for-tuples", @@ -18103,7 +18103,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "19.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "Inflector", "expander", @@ -18116,7 +18116,7 @@ dependencies = [ [[package]] name = "sp-session" version = "39.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "scale-info", @@ -18130,7 +18130,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "39.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -18143,7 +18143,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.46.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "hash-db", "log", @@ -18163,7 +18163,7 @@ dependencies = [ [[package]] name = "sp-statement-store" version = "21.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "aes-gcm", "curve25519-dalek", @@ -18176,7 +18176,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38)", "sp-externalities", "sp-runtime", "sp-runtime-interface", @@ -18187,12 +18187,12 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" [[package]] name = "sp-storage" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "impl-serde", "parity-scale-codec", @@ -18204,7 +18204,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "parity-scale-codec", @@ -18216,7 +18216,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "17.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "tracing", @@ -18227,7 +18227,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "sp-api", "sp-runtime", @@ -18236,7 +18236,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "37.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "async-trait", "parity-scale-codec", @@ -18250,7 +18250,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "ahash 0.8.12", "foldhash 0.1.5", @@ -18275,7 +18275,7 @@ dependencies = [ [[package]] name = "sp-version" version = "40.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "impl-serde", "parity-scale-codec", @@ -18292,7 +18292,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "15.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "proc-macro-warning", @@ -18304,7 +18304,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "22.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -18316,7 +18316,7 @@ dependencies = [ [[package]] name = "sp-weights" version = "32.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "bounded-collections 0.2.4", "parity-scale-codec", @@ -18490,7 +18490,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "staging-chain-spec-builder" version = "12.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "clap", "docify", @@ -18503,7 +18503,7 @@ dependencies = [ [[package]] name = "staging-node-inspect" version = "0.29.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "clap", "parity-scale-codec", @@ -18521,7 +18521,7 @@ dependencies = [ [[package]] name = "staging-parachain-info" version = "0.21.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "cumulus-primitives-core", "frame-support", @@ -18534,7 +18534,7 @@ dependencies = [ [[package]] name = "staging-xcm" version = "17.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "bounded-collections 0.2.4", @@ -18555,7 +18555,7 @@ dependencies = [ [[package]] name = "staging-xcm-builder" version = "21.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "environmental", "frame-support", @@ -18579,7 +18579,7 @@ dependencies = [ [[package]] name = "staging-xcm-executor" version = "20.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "environmental", "frame-benchmarking", @@ -18633,7 +18633,7 @@ dependencies = [ [[package]] name = "stc-shield" version = "0.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "anyhow", "async-trait", @@ -18654,7 +18654,7 @@ dependencies = [ [[package]] name = "stp-shield" version = "0.1.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "parity-scale-codec", "scale-info", @@ -18724,7 +18724,7 @@ dependencies = [ [[package]] name = "substrate-bip39" version = "0.6.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "hmac 0.12.1", "pbkdf2 0.12.2", @@ -18749,7 +18749,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "11.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" [[package]] name = "substrate-fixed" @@ -18765,7 +18765,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "45.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "docify", "frame-system-rpc-runtime-api", @@ -18785,7 +18785,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.17.6" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "http-body-util", "hyper 1.7.0", @@ -18799,7 +18799,7 @@ dependencies = [ [[package]] name = "substrate-state-trie-migration-rpc" version = "44.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "jsonrpsee", "parity-scale-codec", @@ -18826,7 +18826,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "27.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "array-bytes 6.2.3", "build-helper", @@ -19935,7 +19935,7 @@ dependencies = [ [[package]] name = "tracing-gum" version = "20.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "coarsetime", "polkadot-primitives", @@ -19946,7 +19946,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "5.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "expander", "proc-macro-crate 3.4.0", @@ -20951,7 +20951,7 @@ checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" [[package]] name = "westend-runtime" version = "24.0.1" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "binary-merkle-tree", "bitvec", @@ -21058,7 +21058,7 @@ dependencies = [ [[package]] name = "westend-runtime-constants" version = "21.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "polkadot-primitives", @@ -21708,7 +21708,7 @@ dependencies = [ [[package]] name = "xcm-procedural" version = "11.0.2" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "Inflector", "proc-macro2", @@ -21719,7 +21719,7 @@ dependencies = [ [[package]] name = "xcm-runtime-apis" version = "0.8.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "parity-scale-codec", @@ -21733,7 +21733,7 @@ dependencies = [ [[package]] name = "xcm-simulator" version = "21.0.0" -source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=3a843596a439a252723bc5b257b0e281ed3d9540#3a843596a439a252723bc5b257b0e281ed3d9540" +source = "git+https://github.com/RaoFoundation/polkadot-sdk.git?rev=a08c7b0f0b6429910a953cbbaec4b4138294fa38#a08c7b0f0b6429910a953cbbaec4b4138294fa38" dependencies = [ "frame-support", "frame-system", diff --git a/Cargo.toml b/Cargo.toml index 769f11e8fa..65d913cc81 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -79,8 +79,8 @@ subtensor-runtime-common = { default-features = false, path = "common" } subtensor-swap-interface = { default-features = false, path = "primitives/swap-interface" } subtensor-transaction-fee = { default-features = false, path = "pallets/transaction-fee" } subtensor-chain-extensions = { default-features = false, path = "chain-extensions" } -stp-shield = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -stc-shield = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +stp-shield = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +stc-shield = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } ed25519-dalek = { version = "2.1.0", default-features = false } async-trait = "0.1" @@ -136,122 +136,122 @@ num_enum = { version = "0.7.4", default-features = false } environmental = { version = "1.1.4", default-features = false } tokio = { version = "1.38", default-features = false } -frame = { package = "polkadot-sdk-frame", git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -frame-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -frame-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -frame-executive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -frame-system-rpc-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -frame-system-benchmarking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -frame-try-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -frame-benchmarking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -frame-benchmarking-cli = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -frame-metadata-hash-extension = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +frame = { package = "polkadot-sdk-frame", git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +frame-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +frame-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +frame-executive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +frame-system-rpc-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +frame-system-benchmarking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +frame-try-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +frame-benchmarking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +frame-benchmarking-cli = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +frame-metadata-hash-extension = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } frame-metadata = { version = "23.0.0", default-features = false } pallet-subtensor-proxy = { path = "pallets/proxy", default-features = false } pallet-subtensor-utility = { path = "pallets/utility", default-features = false } -pallet-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-balances = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-insecure-randomness-collective-flip = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-multisig = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-preimage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-safe-mode = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-scheduler = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-sudo = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-timestamp = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-transaction-payment = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-transaction-payment-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-root-testing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-contracts = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +pallet-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-balances = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-insecure-randomness-collective-flip = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-multisig = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-preimage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-safe-mode = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-scheduler = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-sudo = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-timestamp = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-transaction-payment = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-transaction-payment-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-root-testing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-contracts = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } # NPoS -frame-election-provider-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-authority-discovery = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-authorship = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-bags-list = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-election-provider-multi-phase = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-fast-unstake = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-nomination-pools = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-nomination-pools-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-session = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-staking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-staking-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-staking-reward-fn = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-staking-reward-curve = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -pallet-offences = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +frame-election-provider-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-authority-discovery = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-authorship = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-bags-list = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-election-provider-multi-phase = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-fast-unstake = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-nomination-pools = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-nomination-pools-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-session = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-staking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-staking-runtime-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-staking-reward-fn = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-staking-reward-curve = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +pallet-offences = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } -sc-basic-authorship = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-cli = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-client-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-consensus-babe-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-consensus-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-consensus-grandpa-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-consensus-epochs = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-chain-spec-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-chain-spec = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-executor = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-network = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-offchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-rpc-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-service = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-telemetry = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-transaction-pool-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-consensus-manual-seal = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sc-network-sync = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sc-basic-authorship = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-cli = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-client-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-consensus-babe-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-consensus-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-consensus-grandpa-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-consensus-epochs = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-chain-spec-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-chain-spec = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-executor = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-network = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-offchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-rpc-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-service = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-telemetry = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-transaction-pool-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-consensus-manual-seal = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sc-network-sync = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } -sp-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-authority-discovery = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-arithmetic = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-block-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-blockchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-staking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-npos-elections = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-consensus-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-genesis-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-inherents = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-io = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-keyring = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-offchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-session = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-std = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-storage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-timestamp = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-version = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-weights = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-crypto-hashing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-application-crypto = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-debug-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-externalities = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-runtime-interface = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-authority-discovery = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-arithmetic = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-block-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-blockchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-staking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-npos-elections = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-consensus-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-genesis-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-inherents = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-io = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-keyring = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-offchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-session = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-std = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-storage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-timestamp = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-version = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-weights = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-crypto-hashing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-application-crypto = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-debug-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-externalities = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-runtime-interface = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } -substrate-build-script-utils = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +substrate-build-script-utils = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } substrate-fixed = { git = "https://github.com/encointer/substrate-fixed.git", tag = "v0.6.0", default-features = false } -substrate-frame-rpc-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -substrate-wasm-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -substrate-prometheus-endpoint = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +substrate-frame-rpc-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +substrate-wasm-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +substrate-prometheus-endpoint = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } -polkadot-sdk = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +polkadot-sdk = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } -runtime-common = { package = "polkadot-runtime-common", git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +runtime-common = { package = "polkadot-runtime-common", git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } # Frontier # Vendored via `git subtree` from RaoFoundation/frontier @@ -290,8 +290,8 @@ pallet-hotfix-sufficients = { path = "vendor/frontier/frame/hotfix-sufficients", #DRAND pallet-drand = { path = "pallets/drand", default-features = false } -sp-crypto-ec-utils = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } -sp-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540", default-features = false } +sp-crypto-ec-utils = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } +sp-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false } w3f-bls = { path = "vendor/w3f-bls", default-features = false } ark-crypto-primitives = { version = "0.4.0", default-features = false } ark-scale = { version = "0.0.11", default-features = false } @@ -342,104 +342,104 @@ zstd-safe = { git = "https://github.com/gztensor/zstd-safe", rev = "42cc34ef6abe # build. Redirect the frontier-side polkadot-sdk crates to the RaoFoundation # remote at the same rev so the whole graph resolves to a single copy. [patch."https://github.com/opentensor/polkadot-sdk"] -binary-merkle-tree = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -cumulus-primitives-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -cumulus-primitives-proof-size-hostfunction = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -cumulus-primitives-storage-weight-reclaim = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -fork-tree = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -frame-benchmarking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -frame-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -frame-support-procedural = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -frame-support-procedural-tools = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -frame-support-procedural-tools-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -frame-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -polkadot-core-primitives = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -polkadot-parachain-primitives = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -polkadot-primitives = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-allocator = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-block-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-chain-spec = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-chain-spec-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-client-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-client-db = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-consensus-epochs = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-executor = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-executor-common = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-executor-polkavm = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-executor-wasmtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-informant = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-mixnet = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-network = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-network-common = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-network-light = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-network-sync = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-network-transactions = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-network-types = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-rpc-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-rpc-server = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-rpc-spec-v2 = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-service = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-state-db = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-sysinfo = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-telemetry = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-tracing-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-transaction-pool-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sc-utils = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-api-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-application-crypto = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-arithmetic = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-authority-discovery = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-block-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-blockchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-consensus-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-crypto-hashing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-crypto-hashing-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-database = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-debug-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-externalities = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-genesis-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-inherents = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-io = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-maybe-compressed-blob = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-metadata-ir = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-mixnet = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-offchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-panic-handler = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-runtime-interface = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-runtime-interface-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-session = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-staking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-state-machine = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-statement-store = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-std = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-storage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-timestamp = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-transaction-storage-proof = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-trie = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-version = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-version-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-wasm-interface = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -sp-weights = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -staging-xcm = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -substrate-bip39 = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -substrate-prometheus-endpoint = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } -xcm-procedural = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "3a843596a439a252723bc5b257b0e281ed3d9540" } +binary-merkle-tree = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +cumulus-primitives-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +cumulus-primitives-proof-size-hostfunction = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +cumulus-primitives-storage-weight-reclaim = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +fork-tree = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +frame-benchmarking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +frame-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +frame-support-procedural = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +frame-support-procedural-tools = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +frame-support-procedural-tools-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +frame-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +polkadot-core-primitives = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +polkadot-parachain-primitives = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +polkadot-primitives = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-allocator = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-block-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-chain-spec = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-chain-spec-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-client-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-client-db = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-consensus-epochs = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-executor = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-executor-common = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-executor-polkavm = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-executor-wasmtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-informant = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-mixnet = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-network = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-network-common = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-network-light = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-network-sync = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-network-transactions = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-network-types = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-rpc-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-rpc-server = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-rpc-spec-v2 = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-service = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-state-db = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-sysinfo = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-telemetry = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-tracing-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-transaction-pool-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sc-utils = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-api-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-application-crypto = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-arithmetic = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-authority-discovery = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-block-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-blockchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-consensus = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-consensus-aura = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-consensus-babe = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-consensus-grandpa = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-consensus-slots = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-crypto-hashing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-crypto-hashing-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-database = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-debug-derive = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-externalities = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-genesis-builder = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-inherents = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-io = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-keystore = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-maybe-compressed-blob = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-metadata-ir = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-mixnet = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-offchain = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-panic-handler = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-rpc = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-runtime-interface = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-runtime-interface-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-session = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-staking = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-state-machine = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-statement-store = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-std = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-storage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-timestamp = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-transaction-pool = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-transaction-storage-proof = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-trie = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-version = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-version-proc-macro = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-wasm-interface = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +sp-weights = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +staging-xcm = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +substrate-bip39 = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +substrate-prometheus-endpoint = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } +xcm-procedural = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38" } From 3ed6f0d534a8cc3e27731cf5d711486ad2c5ba38 Mon Sep 17 00:00:00 2001 From: UnArbosFive Date: Thu, 23 Jul 2026 14:13:53 +0200 Subject: [PATCH 44/63] Align eco-tests with merged SDK revision --- eco-tests/Cargo.toml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/eco-tests/Cargo.toml b/eco-tests/Cargo.toml index 4fc67467af..e8b88598d2 100644 --- a/eco-tests/Cargo.toml +++ b/eco-tests/Cargo.toml @@ -23,22 +23,22 @@ useless_conversion = "allow" time = { version = "0.3.47", default-features = false } pallet-subtensor = { path = "../pallets/subtensor", default-features = false, features = ["std"] } pallet-alpha-assets = { path = "../pallets/alpha-assets", default-features = false, features = ["std"] } -frame-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false, features = ["std"] } -frame-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false, features = ["std"] } -sp-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false, features = ["std"] } -sp-io = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false, features = ["std"] } -sp-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false, features = ["std"] } -sp-std = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false, features = ["std"] } +frame-support = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false, features = ["std"] } +frame-system = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false, features = ["std"] } +sp-core = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false, features = ["std"] } +sp-io = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false, features = ["std"] } +sp-runtime = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false, features = ["std"] } +sp-std = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false, features = ["std"] } codec = { package = "parity-scale-codec", version = "3.7.5", default-features = false, features = ["derive", "std"] } scale-info = { version = "2.11.2", default-features = false, features = ["derive", "std"] } -pallet-balances = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false, features = ["std"] } -pallet-scheduler = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false, features = ["std"] } -pallet-preimage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false, features = ["std"] } +pallet-balances = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false, features = ["std"] } +pallet-scheduler = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false, features = ["std"] } +pallet-preimage = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false, features = ["std"] } pallet-drand = { path = "../pallets/drand", default-features = false, features = ["std"] } pallet-subtensor-swap = { path = "../pallets/swap", default-features = false, features = ["std"] } pallet-subtensor-swap-runtime-api = { path = "../pallets/swap/runtime-api", default-features = false, features = ["std"] } subtensor-custom-rpc-runtime-api = { path = "../pallets/subtensor/runtime-api", default-features = false, features = ["std"] } -sp-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false, features = ["std"] } +sp-api = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false, features = ["std"] } pallet-crowdloan = { path = "../pallets/crowdloan", default-features = false, features = ["std"] } pallet-subtensor-proxy = { path = "../pallets/proxy", default-features = false, features = ["std"] } pallet-subtensor-utility = { path = "../pallets/utility", default-features = false, features = ["std"] } @@ -50,7 +50,7 @@ substrate-fixed = { git = "https://github.com/encointer/substrate-fixed.git", ta safe-math = { path = "../primitives/safe-math", default-features = false, features = ["std"] } log = { version = "0.4.21", default-features = false, features = ["std"] } approx = "0.5" -sp-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "7cc54bf2d50ae3921d718736dfeb0de9468539c7", default-features = false, features = ["std"] } +sp-tracing = { git = "https://github.com/RaoFoundation/polkadot-sdk.git", rev = "a08c7b0f0b6429910a953cbbaec4b4138294fa38", default-features = false, features = ["std"] } tracing = "0.1" tracing-log = "0.2" tracing-subscriber = { version = "0.3.20", features = ["fmt", "env-filter"] } From 57bcc3a1d60b08e2bbf7cd53500c07af934b9bb7 Mon Sep 17 00:00:00 2001 From: UnArbosFive Date: Thu, 23 Jul 2026 16:19:53 +0200 Subject: [PATCH 45/63] Isolate testnet network protocol --- chainspecs/plain_spec_testfinney.json | 2 +- chainspecs/raw_spec_testfinney.json | 2 +- node/src/chain_spec/testnet.rs | 31 ++++++++++++++++++++++++++- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/chainspecs/plain_spec_testfinney.json b/chainspecs/plain_spec_testfinney.json index 1390fe92f2..3b141e5f59 100644 --- a/chainspecs/plain_spec_testfinney.json +++ b/chainspecs/plain_spec_testfinney.json @@ -6,7 +6,7 @@ "/dns/bootnode.test.chain.opentensor.ai/tcp/30333/p2p/12D3KooWPM4mLcKJGtyVtkggqdG84zWrd7Rij6PGQDoijh1X86Vr" ], "telemetryEndpoints": null, - "protocolId": "bittensor", + "protocolId": "bittensor-testnet", "properties": { "ss58Format": 42, "tokenDecimals": 9, diff --git a/chainspecs/raw_spec_testfinney.json b/chainspecs/raw_spec_testfinney.json index 08eabf415c..4d9305a156 100644 --- a/chainspecs/raw_spec_testfinney.json +++ b/chainspecs/raw_spec_testfinney.json @@ -6,7 +6,7 @@ "/dns/bootnode.test.chain.opentensor.ai/tcp/30333/p2p/12D3KooWPM4mLcKJGtyVtkggqdG84zWrd7Rij6PGQDoijh1X86Vr" ], "telemetryEndpoints": null, - "protocolId": "bittensor", + "protocolId": "bittensor-testnet", "properties": { "ss58Format": 42, "tokenDecimals": 9, diff --git a/node/src/chain_spec/testnet.rs b/node/src/chain_spec/testnet.rs index a3b3d8b627..a092dbfc85 100644 --- a/node/src/chain_spec/testnet.rs +++ b/node/src/chain_spec/testnet.rs @@ -3,6 +3,8 @@ use super::*; +const TESTNET_PROTOCOL_ID: &str = "bittensor-testnet"; + pub fn finney_testnet_config() -> Result { let path: PathBuf = std::path::PathBuf::from("./snapshot.json"); let wasm_binary = WASM_BINARY.ok_or_else(|| "Development wasm not available".to_string())?; @@ -55,7 +57,7 @@ pub fn finney_testnet_config() -> Result { .parse() .unwrap(), ]) - .with_protocol_id("bittensor") + .with_protocol_id(TESTNET_PROTOCOL_ID) .with_id("bittensor") .with_chain_type(ChainType::Development) .with_genesis_config_patch(testnet_genesis( @@ -132,3 +134,30 @@ fn testnet_genesis( }, }) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn checked_in_specs_use_testnet_protocol_id() { + for (name, spec) in [ + ( + "plain", + include_str!("../../../chainspecs/plain_spec_testfinney.json"), + ), + ( + "raw", + include_str!("../../../chainspecs/raw_spec_testfinney.json"), + ), + ] { + let spec: serde_json::Value = + serde_json::from_str(spec).expect("checked-in chain spec should be valid"); + assert_eq!( + spec.get("protocolId").and_then(serde_json::Value::as_str), + Some(TESTNET_PROTOCOL_ID), + "{name} testnet chain spec has an unexpected protocol ID" + ); + } + } +} From ac6f6aabed95d03aaa50e17ab33f3db8dd43b7c8 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 07:57:55 -0700 Subject: [PATCH 46/63] Resolve release integration edge cases --- .github/scripts/classify-runtime-changes.sh | 2 +- pallets/subtensor/src/subnets/dissolution.rs | 8 ++ pallets/subtensor/src/weights.rs | 82 ++++++++++++++++++-- 3 files changed, 83 insertions(+), 9 deletions(-) diff --git a/.github/scripts/classify-runtime-changes.sh b/.github/scripts/classify-runtime-changes.sh index a37a13273c..336e4ec802 100755 --- a/.github/scripts/classify-runtime-changes.sh +++ b/.github/scripts/classify-runtime-changes.sh @@ -39,7 +39,7 @@ while IFS= read -r path; do runtime=true snapshot_ci=true ;; - *.md|LICENSE|docs/*|website/*|sdk/*|ts-tests/*|eco-tests/*|ink-contract/*|.maintain/*|.vscode/*|.agents/*|.claude/*) + *.md|LICENSE|docs/*|website/*|sdk/*|ts-tests/*|eco-tests/*|ink-contract/*|.maintain/*|.vscode/*|.agents/*|.claude/*|.github/scripts/prepare-sdk-dist.py|.github/scripts/test_prepare_sdk_dist.py) ;; .github/*) runtime=true diff --git a/pallets/subtensor/src/subnets/dissolution.rs b/pallets/subtensor/src/subnets/dissolution.rs index 760d24aaa5..2122c207d1 100644 --- a/pallets/subtensor/src/subnets/dissolution.rs +++ b/pallets/subtensor/src/subnets/dissolution.rs @@ -130,6 +130,14 @@ impl Pallet { TotalNetworks::::mutate(|n: &mut u16| *n = n.saturating_sub(1)); TotalStake::::mutate(|total| *total = total.saturating_sub(SubnetTAO::::get(netuid))); + // Release sale-time account freezes immediately. The remaining subnet + // storage is removed asynchronously, but these account-wide locks must + // not survive once the offer's subnet no longer exists. + if let Some(offer) = SubnetSaleOffers::::take(netuid) { + SubnetSaleFrozenColdkeys::::remove(&offer.seller_coldkey); + SubnetSaleFrozenHotkeys::::remove(&offer.seller_hotkey); + } + dissolved_networks.push(netuid); DissolveCleanupQueue::::set(dissolved_networks); diff --git a/pallets/subtensor/src/weights.rs b/pallets/subtensor/src/weights.rs index c91b44f57e..d3349d71fb 100644 --- a/pallets/subtensor/src/weights.rs +++ b/pallets/subtensor/src/weights.rs @@ -2631,6 +2631,27 @@ impl WeightInfo for SubstrateWeight { .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) .saturating_add(Weight::from_parts(0, 2529).saturating_mul(k.into())) } + /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) + /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) + /// Storage: `SubtensorModule::SubnetUidToLeaseId` (r:1 w:0) + /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:1) + /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:1) + /// Storage: `SubtensorModule::NextSubnetSaleOfferId` (r:1 w:1) + fn create_sale_offer() -> Weight { + Weight::from_parts(34_762_000, 4508) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(4_u64)) + } + /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) + fn cancel_sale_offer() -> Weight { + Weight::from_parts(12_969_000, 4237) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) @@ -3009,6 +3030,12 @@ impl WeightInfo for SubstrateWeight { Weight::from_parts(10_000_000, 4198) .saturating_add(T::DbWeight::get().reads(2_u64)) } + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + fn check_subnet_sale_extension() -> Weight { + Weight::from_parts(8_342_000, 4028) + .saturating_add(T::DbWeight::get().reads(2_u64)) + } /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TaoWeight` (r:1 w:0) @@ -3429,14 +3456,17 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::TotalStake` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:0) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) fn dissolve_network() -> Weight { // Proof Size summary in bytes: // Measured: `1080` // Estimated: `4545` // Minimum execution time: 45_000_000 picoseconds. Weight::from_parts(52_000_000, 4545) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(6_u64)) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:1) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) @@ -3452,14 +3482,17 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::TotalStake` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:0) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) fn root_dissolve_network() -> Weight { // Proof Size summary in bytes: // Measured: `1080` // Estimated: `4545` // Minimum execution time: 43_000_000 picoseconds. Weight::from_parts(51_000_000, 4545) - .saturating_add(T::DbWeight::get().reads(7_u64)) - .saturating_add(T::DbWeight::get().writes(6_u64)) + .saturating_add(T::DbWeight::get().reads(8_u64)) + .saturating_add(T::DbWeight::get().writes(9_u64)) } /// Storage: `SubtensorModule::TransactionKeyLastBlock` (r:1 w:1) /// Proof: `SubtensorModule::TransactionKeyLastBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) @@ -6231,6 +6264,27 @@ impl WeightInfo for () { .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(k.into()))) .saturating_add(Weight::from_parts(0, 2529).saturating_mul(k.into())) } + /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) + /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) + /// Storage: `SubtensorModule::SubnetUidToLeaseId` (r:1 w:0) + /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:1) + /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:1) + /// Storage: `SubtensorModule::NextSubnetSaleOfferId` (r:1 w:1) + fn create_sale_offer() -> Weight { + Weight::from_parts(34_762_000, 4508) + .saturating_add(RocksDbWeight::get().reads(8_u64)) + .saturating_add(RocksDbWeight::get().writes(4_u64)) + } + /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) + fn cancel_sale_offer() -> Weight { + Weight::from_parts(12_969_000, 4237) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(3_u64)) + } /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) @@ -6609,6 +6663,12 @@ impl WeightInfo for () { Weight::from_parts(10_000_000, 4198) .saturating_add(RocksDbWeight::get().reads(2_u64)) } + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) + fn check_subnet_sale_extension() -> Weight { + Weight::from_parts(8_342_000, 4028) + .saturating_add(RocksDbWeight::get().reads(2_u64)) + } /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TaoWeight` (r:1 w:0) @@ -7029,14 +7089,17 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::TotalStake` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:0) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) fn dissolve_network() -> Weight { // Proof Size summary in bytes: // Measured: `1080` // Estimated: `4545` // Minimum execution time: 45_000_000 picoseconds. Weight::from_parts(52_000_000, 4545) - .saturating_add(RocksDbWeight::get().reads(7_u64)) - .saturating_add(RocksDbWeight::get().writes(6_u64)) + .saturating_add(RocksDbWeight::get().reads(8_u64)) + .saturating_add(RocksDbWeight::get().writes(9_u64)) } /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:1) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) @@ -7052,14 +7115,17 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::TotalStake` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:0) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) + /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) fn root_dissolve_network() -> Weight { // Proof Size summary in bytes: // Measured: `1080` // Estimated: `4545` // Minimum execution time: 43_000_000 picoseconds. Weight::from_parts(51_000_000, 4545) - .saturating_add(RocksDbWeight::get().reads(7_u64)) - .saturating_add(RocksDbWeight::get().writes(6_u64)) + .saturating_add(RocksDbWeight::get().reads(8_u64)) + .saturating_add(RocksDbWeight::get().writes(9_u64)) } /// Storage: `SubtensorModule::TransactionKeyLastBlock` (r:1 w:1) /// Proof: `SubtensorModule::TransactionKeyLastBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) From 3875d42b05cc5b2371ea9611936b270adfac85a4 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 08:26:36 -0700 Subject: [PATCH 47/63] Fix release CI warnings and generated docs --- .../chain/AccountRejectsLockedAlpha.mdx | 2 +- docs/errors/chain/ActiveLockExists.mdx | 2 +- .../ActivityCutoffFactorMilliOutOfBounds.mdx | 2 +- .../chain/AddStakeBurnRateLimitExceeded.mdx | 2 +- ...minActionProhibitedDuringWeightsWindow.mdx | 2 +- .../errors/chain/AutoEpochAlreadyImminent.mdx | 2 +- .../chain/BeneficiaryDoesNotOwnHotkey.mdx | 2 +- docs/errors/chain/CannotAffordLockCost.mdx | 2 +- docs/errors/chain/CannotUseSystemAccount.mdx | 2 +- .../errors/chain/ChildParentInconsistency.mdx | 2 +- .../chain/ColdkeyCollateralIncomplete.mdx | 2 +- .../chain/ColdkeyCollateralPositionsFull.mdx | 2 +- docs/errors/chain/ColdkeySwapAnnounced.mdx | 2 +- .../errors/chain/ColdkeySwapClearTooEarly.mdx | 2 +- docs/errors/chain/ColdkeySwapDisputed.mdx | 2 +- docs/errors/chain/Deprecated.mdx | 2 +- docs/errors/chain/DisabledTemporarily.mdx | 2 +- .../DynamicTempoBlockedByCommitReveal.mdx | 2 +- .../chain/EpochTriggerAlreadyPending.mdx | 2 +- .../EvmKeyAssociateRateLimitExceeded.mdx | 2 +- .../chain/EvmKeyAssociationLimitExceeded.mdx | 2 +- .../chain/ExpectedBeneficiaryOrigin.mdx | 2 +- .../chain/IncorrectCommitRevealVersion.mdx | 2 +- .../errors/chain/InsufficientAlphaBalance.mdx | 2 +- .../errors/chain/InsufficientStakeForLock.mdx | 2 +- docs/errors/chain/InvalidNumRootClaim.mdx | 2 +- docs/errors/chain/InvalidRevealRound.mdx | 2 +- .../chain/InvalidRootClaimThreshold.mdx | 2 +- docs/errors/chain/InvalidSubnetNumber.mdx | 2 +- docs/errors/chain/InvalidValue.mdx | 2 +- .../chain/InvalidVotingPowerEmaAlpha.mdx | 2 +- docs/errors/chain/LockHotkeyMismatch.mdx | 2 +- docs/errors/chain/LockIdOverFlow.mdx | 2 +- .../chain/NetworkDissolveAlreadyQueued.mdx | 2 +- docs/errors/chain/NoExistingLock.mdx | 2 +- docs/errors/chain/Overflow.mdx | 2 +- .../chain/RegistrationPriceLimitExceeded.mdx | 2 +- docs/errors/chain/RevealPeriodTooLarge.mdx | 2 +- docs/errors/chain/RevealPeriodTooSmall.mdx | 2 +- .../chain/SameAutoStakeHotkeyAlreadySet.mdx | 2 +- docs/errors/chain/StartCallNotReady.mdx | 2 +- .../chain/SubnetBuybackRateLimitExceeded.mdx | 2 +- docs/errors/chain/SubnetLimitReached.mdx | 2 +- docs/errors/chain/SymbolAlreadyInUse.mdx | 2 +- docs/errors/chain/SymbolDoesNotExist.mdx | 2 +- docs/errors/chain/TempoOutOfBounds.mdx | 2 +- docs/errors/chain/TooManyUIDsPerMechanism.mdx | 2 +- ...TrimmingWouldExceedMaxImmunePercentage.mdx | 2 +- docs/errors/chain/UidMapCouldNotBeCleared.mdx | 2 +- docs/errors/chain/UnlockAmountTooHigh.mdx | 2 +- .../chain/VotingPowerTrackingNotEnabled.mdx | 2 +- .../WaitingForDissolvedSubnetCleanup.mdx | 2 +- docs/hyperparameters/index.mdx | 84 ++--- docs/query/alpha-prices.mdx | 2 +- docs/query/associated-evm-key.mdx | 2 +- docs/query/auto-stake-all.mdx | 2 +- docs/query/auto-stake.mdx | 2 +- docs/query/blocks-since-last-step.mdx | 2 +- docs/query/blocks-since-last-update.mdx | 2 +- docs/query/blocks-until-next-epoch.mdx | 2 +- docs/query/bonds.mdx | 2 +- docs/query/burn.mdx | 2 +- docs/query/children.mdx | 2 +- docs/query/coldkey-lock.mdx | 2 +- docs/query/coldkey-swap-announcement.mdx | 4 +- docs/query/commit-reveal-enabled.mdx | 2 +- docs/query/delegate-take.mdx | 6 +- docs/query/difficulty.mdx | 2 +- docs/query/epoch-status.mdx | 12 +- docs/query/existential-deposit.mdx | 2 +- docs/query/hotkey-conviction.mdx | 2 +- docs/query/hotkey-identities.mdx | 4 +- docs/query/hotkey-owner.mdx | 2 +- docs/query/identity.mdx | 2 +- docs/query/immunity-period.mdx | 2 +- docs/query/lease.mdx | 2 +- docs/query/leases.mdx | 2 +- docs/query/locks-for-coldkey.mdx | 2 +- docs/query/max-weight-limit.mdx | 2 +- docs/query/mechanism-count.mdx | 2 +- docs/query/mechanism-emission-split.mdx | 2 +- docs/query/min-allowed-weights.mdx | 2 +- docs/query/miner-collateral.mdx | 2 +- docs/query/most-convicted-hotkey.mdx | 2 +- docs/query/netuids-for-hotkey.mdx | 2 +- docs/query/next-epoch-start-block.mdx | 2 +- docs/query/owned-hotkeys.mdx | 2 +- docs/query/parents.mdx | 2 +- docs/query/pending-children.mdx | 2 +- docs/query/quote-stake.mdx | 2 +- docs/query/quote-unstake.mdx | 2 +- docs/query/reveal-period.mdx | 2 +- docs/query/root-claim-type.mdx | 2 +- docs/query/staking-hotkeys.mdx | 2 +- docs/query/subnet-collateral.mdx | 2 +- docs/query/subnet-convictions.mdx | 18 +- docs/query/subnet-emission-enabled.mdx | 2 +- docs/query/subnet-identity.mdx | 2 +- docs/query/subnet-names.mdx | 2 +- docs/query/subnet-registration-cost.mdx | 2 +- docs/query/subnet-start-schedule.mdx | 4 +- docs/query/subnet.mdx | 6 +- docs/query/subnets.mdx | 8 +- docs/query/timelocked-weight-commits.mdx | 2 +- docs/query/token-symbols.mdx | 2 +- docs/query/tx-rate-limit.mdx | 2 +- docs/query/uid.mdx | 2 +- docs/query/weights-rate-limit.mdx | 2 +- docs/query/weights.mdx | 2 +- docs/tx/add-collateral.mdx | 4 +- docs/tx/add-stake-limit.mdx | 4 +- docs/tx/add-stake.mdx | 4 +- docs/tx/announce-coldkey-swap.mdx | 4 +- docs/tx/associate-evm-key.mdx | 4 +- docs/tx/associate-hotkey.mdx | 4 +- docs/tx/claim-root.mdx | 4 +- docs/tx/clear-coldkey-swap-announcement.mdx | 4 +- docs/tx/commit-weights.mdx | 4 +- docs/tx/dispute-coldkey-swap.mdx | 4 +- docs/tx/lock-stake.mdx | 4 +- docs/tx/move-lock.mdx | 4 +- docs/tx/move-stake.mdx | 4 +- docs/tx/register-leased-network.mdx | 4 +- docs/tx/register-subnet.mdx | 4 +- docs/tx/remove-stake-limit.mdx | 4 +- docs/tx/remove-stake.mdx | 4 +- docs/tx/set-auto-stake.mdx | 4 +- docs/tx/set-childkey-take.mdx | 6 +- docs/tx/set-children.mdx | 13 +- docs/tx/set-identity.mdx | 4 +- docs/tx/set-min-collateral.mdx | 4 +- docs/tx/set-perpetual-lock.mdx | 4 +- docs/tx/set-root-claim-type.mdx | 4 +- docs/tx/set-subnet-identity.mdx | 4 +- docs/tx/set-weights.mdx | 4 +- docs/tx/stake-burn.mdx | 4 +- docs/tx/start-call.mdx | 4 +- docs/tx/swap-coldkey-announced.mdx | 4 +- docs/tx/swap-hotkey.mdx | 2 +- docs/tx/swap-stake.mdx | 6 +- docs/tx/terminate-lease.mdx | 4 +- docs/tx/transfer-stake.mdx | 6 +- docs/tx/unstake-all-alpha.mdx | 4 +- docs/tx/unstake-all.mdx | 4 +- docs/tx/update-symbol.mdx | 4 +- .../subtensor/src/benchmarks/benchmarks.rs | 16 + pallets/subtensor/src/macros/dispatches.rs | 18 +- pallets/subtensor/src/swap/swap_hotkey.rs | 3 +- pallets/subtensor/src/tests/children.rs | 42 +-- pallets/subtensor/src/tests/migration.rs | 9 +- pallets/subtensor/src/weights.rs | 30 ++ .../public/catalog/errors.json | 208 +++++------ .../public/catalog/intents.json | 222 ++++++------ .../public/catalog/reads.json | 334 +++++++++--------- 154 files changed, 720 insertions(+), 665 deletions(-) diff --git a/docs/errors/chain/AccountRejectsLockedAlpha.mdx b/docs/errors/chain/AccountRejectsLockedAlpha.mdx index ffdc96c025..f2616e8d61 100644 --- a/docs/errors/chain/AccountRejectsLockedAlpha.mdx +++ b/docs/errors/chain/AccountRejectsLockedAlpha.mdx @@ -9,7 +9,7 @@ Locked alpha was being transferred to a coldkey whose `AccountFlags` do not have Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L333`](/code/pallets/subtensor/src/macros/errors.rs#L333). +Declared at [`pallets/subtensor/src/macros/errors.rs#L343`](/code/pallets/subtensor/src/macros/errors.rs#L343). ## Remediation diff --git a/docs/errors/chain/ActiveLockExists.mdx b/docs/errors/chain/ActiveLockExists.mdx index a12a00e01a..4a32e85c41 100644 --- a/docs/errors/chain/ActiveLockExists.mdx +++ b/docs/errors/chain/ActiveLockExists.mdx @@ -9,7 +9,7 @@ The destination coldkey already holds a lock with nonzero locked mass on that su Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L311`](/code/pallets/subtensor/src/macros/errors.rs#L311). +Declared at [`pallets/subtensor/src/macros/errors.rs#L321`](/code/pallets/subtensor/src/macros/errors.rs#L321). ## Remediation diff --git a/docs/errors/chain/ActivityCutoffFactorMilliOutOfBounds.mdx b/docs/errors/chain/ActivityCutoffFactorMilliOutOfBounds.mdx index 7660786099..0e55d80c1a 100644 --- a/docs/errors/chain/ActivityCutoffFactorMilliOutOfBounds.mdx +++ b/docs/errors/chain/ActivityCutoffFactorMilliOutOfBounds.mdx @@ -9,7 +9,7 @@ The `factor_milli` argument to set the activity-cutoff factor was outside the al Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L321`](/code/pallets/subtensor/src/macros/errors.rs#L321). +Declared at [`pallets/subtensor/src/macros/errors.rs#L331`](/code/pallets/subtensor/src/macros/errors.rs#L331). ## Remediation diff --git a/docs/errors/chain/AddStakeBurnRateLimitExceeded.mdx b/docs/errors/chain/AddStakeBurnRateLimitExceeded.mdx index f18b2be21d..1507741c8f 100644 --- a/docs/errors/chain/AddStakeBurnRateLimitExceeded.mdx +++ b/docs/errors/chain/AddStakeBurnRateLimitExceeded.mdx @@ -9,7 +9,7 @@ The add-stake-and-burn operation was submitted again before its per-key rate-lim Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`rate_limited`](/docs/errors/rate-limited). -Declared at [`pallets/subtensor/src/macros/errors.rs#L293`](/code/pallets/subtensor/src/macros/errors.rs#L293). +Declared at [`pallets/subtensor/src/macros/errors.rs#L303`](/code/pallets/subtensor/src/macros/errors.rs#L303). ## Remediation diff --git a/docs/errors/chain/AdminActionProhibitedDuringWeightsWindow.mdx b/docs/errors/chain/AdminActionProhibitedDuringWeightsWindow.mdx index 69282bde0f..86086a5a28 100644 --- a/docs/errors/chain/AdminActionProhibitedDuringWeightsWindow.mdx +++ b/docs/errors/chain/AdminActionProhibitedDuringWeightsWindow.mdx @@ -9,7 +9,7 @@ An owner or admin hyperparameter change was attempted inside the protected freez Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`too_early`](/docs/errors/too-early). -Declared at [`pallets/subtensor/src/macros/errors.rs#L243`](/code/pallets/subtensor/src/macros/errors.rs#L243). +Declared at [`pallets/subtensor/src/macros/errors.rs#L253`](/code/pallets/subtensor/src/macros/errors.rs#L253). ## Remediation diff --git a/docs/errors/chain/AutoEpochAlreadyImminent.mdx b/docs/errors/chain/AutoEpochAlreadyImminent.mdx index 54e0cd76b0..cd5e651622 100644 --- a/docs/errors/chain/AutoEpochAlreadyImminent.mdx +++ b/docs/errors/chain/AutoEpochAlreadyImminent.mdx @@ -9,7 +9,7 @@ description: "The object or state already exists; treat the goal as met or pick Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L327`](/code/pallets/subtensor/src/macros/errors.rs#L327). +Declared at [`pallets/subtensor/src/macros/errors.rs#L337`](/code/pallets/subtensor/src/macros/errors.rs#L337). ## Remediation diff --git a/docs/errors/chain/BeneficiaryDoesNotOwnHotkey.mdx b/docs/errors/chain/BeneficiaryDoesNotOwnHotkey.mdx index 86d479baf7..9cd1b6e9fb 100644 --- a/docs/errors/chain/BeneficiaryDoesNotOwnHotkey.mdx +++ b/docs/errors/chain/BeneficiaryDoesNotOwnHotkey.mdx @@ -9,7 +9,7 @@ When ending a subnet lease, the hotkey passed for the ownership handover is not Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`not_authorized`](/docs/errors/not-authorized). -Declared at [`pallets/subtensor/src/macros/errors.rs#L239`](/code/pallets/subtensor/src/macros/errors.rs#L239). +Declared at [`pallets/subtensor/src/macros/errors.rs#L249`](/code/pallets/subtensor/src/macros/errors.rs#L249). ## Remediation diff --git a/docs/errors/chain/CannotAffordLockCost.mdx b/docs/errors/chain/CannotAffordLockCost.mdx index 378758c473..1f6d032601 100644 --- a/docs/errors/chain/CannotAffordLockCost.mdx +++ b/docs/errors/chain/CannotAffordLockCost.mdx @@ -9,7 +9,7 @@ The coldkey's free balance cannot cover the current dynamic subnet-creation lock Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`insufficient_balance`](/docs/errors/insufficient-balance). -Declared at [`pallets/subtensor/src/macros/errors.rs#L261`](/code/pallets/subtensor/src/macros/errors.rs#L261). +Declared at [`pallets/subtensor/src/macros/errors.rs#L271`](/code/pallets/subtensor/src/macros/errors.rs#L271). ## Remediation diff --git a/docs/errors/chain/CannotUseSystemAccount.mdx b/docs/errors/chain/CannotUseSystemAccount.mdx index 7ca4b4b9c9..6b95b44d2e 100644 --- a/docs/errors/chain/CannotUseSystemAccount.mdx +++ b/docs/errors/chain/CannotUseSystemAccount.mdx @@ -9,7 +9,7 @@ The hotkey supplied for registration, hotkey swap, or subnet-owner-hotkey assign Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`not_authorized`](/docs/errors/not-authorized). -Declared at [`pallets/subtensor/src/macros/errors.rs#L313`](/code/pallets/subtensor/src/macros/errors.rs#L313). +Declared at [`pallets/subtensor/src/macros/errors.rs#L323`](/code/pallets/subtensor/src/macros/errors.rs#L323). ## Remediation diff --git a/docs/errors/chain/ChildParentInconsistency.mdx b/docs/errors/chain/ChildParentInconsistency.mdx index 09f4363f12..2a351b4751 100644 --- a/docs/errors/chain/ChildParentInconsistency.mdx +++ b/docs/errors/chain/ChildParentInconsistency.mdx @@ -9,7 +9,7 @@ A `set_children` or parent-delegation call would make the same hotkey appear as Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L273`](/code/pallets/subtensor/src/macros/errors.rs#L273). +Declared at [`pallets/subtensor/src/macros/errors.rs#L283`](/code/pallets/subtensor/src/macros/errors.rs#L283). ## Remediation diff --git a/docs/errors/chain/ColdkeyCollateralIncomplete.mdx b/docs/errors/chain/ColdkeyCollateralIncomplete.mdx index e052efe93c..ecd83cdce8 100644 --- a/docs/errors/chain/ColdkeyCollateralIncomplete.mdx +++ b/docs/errors/chain/ColdkeyCollateralIncomplete.mdx @@ -9,7 +9,7 @@ A coldkey swap could not fully migrate miner collateral: after migrating every i Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`internal`](/docs/errors/internal). -Declared at [`pallets/subtensor/src/macros/errors.rs#L344`](/code/pallets/subtensor/src/macros/errors.rs#L344). +Declared at [`pallets/subtensor/src/macros/errors.rs#L354`](/code/pallets/subtensor/src/macros/errors.rs#L354). ## Remediation diff --git a/docs/errors/chain/ColdkeyCollateralPositionsFull.mdx b/docs/errors/chain/ColdkeyCollateralPositionsFull.mdx index 70ac4b25dd..2df8484f2f 100644 --- a/docs/errors/chain/ColdkeyCollateralPositionsFull.mdx +++ b/docs/errors/chain/ColdkeyCollateralPositionsFull.mdx @@ -9,7 +9,7 @@ This coldkey already has the maximum number of distinct hotkeys with miner colla Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L348`](/code/pallets/subtensor/src/macros/errors.rs#L348). +Declared at [`pallets/subtensor/src/macros/errors.rs#L358`](/code/pallets/subtensor/src/macros/errors.rs#L358). ## Remediation diff --git a/docs/errors/chain/ColdkeySwapAnnounced.mdx b/docs/errors/chain/ColdkeySwapAnnounced.mdx index 47d144275c..ed0b460619 100644 --- a/docs/errors/chain/ColdkeySwapAnnounced.mdx +++ b/docs/errors/chain/ColdkeySwapAnnounced.mdx @@ -9,7 +9,7 @@ The coldkey has a pending swap announcement, so all but a small allow-list of ex Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L295`](/code/pallets/subtensor/src/macros/errors.rs#L295). +Declared at [`pallets/subtensor/src/macros/errors.rs#L305`](/code/pallets/subtensor/src/macros/errors.rs#L305). ## Remediation diff --git a/docs/errors/chain/ColdkeySwapClearTooEarly.mdx b/docs/errors/chain/ColdkeySwapClearTooEarly.mdx index 0b36d3f280..42e88211b0 100644 --- a/docs/errors/chain/ColdkeySwapClearTooEarly.mdx +++ b/docs/errors/chain/ColdkeySwapClearTooEarly.mdx @@ -9,7 +9,7 @@ The swap announcement cannot be cleared until the reannouncement delay after the Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`too_early`](/docs/errors/too-early). -Declared at [`pallets/subtensor/src/macros/errors.rs#L299`](/code/pallets/subtensor/src/macros/errors.rs#L299). +Declared at [`pallets/subtensor/src/macros/errors.rs#L309`](/code/pallets/subtensor/src/macros/errors.rs#L309). ## Remediation diff --git a/docs/errors/chain/ColdkeySwapDisputed.mdx b/docs/errors/chain/ColdkeySwapDisputed.mdx index badcf17393..4259168c5b 100644 --- a/docs/errors/chain/ColdkeySwapDisputed.mdx +++ b/docs/errors/chain/ColdkeySwapDisputed.mdx @@ -9,7 +9,7 @@ All extrinsics from this coldkey are blocked because its pending coldkey swap is Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`not_authorized`](/docs/errors/not-authorized). -Declared at [`pallets/subtensor/src/macros/errors.rs#L297`](/code/pallets/subtensor/src/macros/errors.rs#L297). +Declared at [`pallets/subtensor/src/macros/errors.rs#L307`](/code/pallets/subtensor/src/macros/errors.rs#L307). ## Remediation diff --git a/docs/errors/chain/Deprecated.mdx b/docs/errors/chain/Deprecated.mdx index 350cdc125f..8f4ecc6ff5 100644 --- a/docs/errors/chain/Deprecated.mdx +++ b/docs/errors/chain/Deprecated.mdx @@ -9,7 +9,7 @@ The extrinsic has been removed and always fails, e.g. `schedule_swap_coldkey`, t Declared by the `SubtensorModule`, `AdminUtils`, `Swap` pallets; it classifies to the semantic code [`disabled`](/docs/errors/disabled). -Declared at [`pallets/subtensor/src/macros/errors.rs#L287`](/code/pallets/subtensor/src/macros/errors.rs#L287), [`pallets/admin-utils/src/lib.rs#L169`](/code/pallets/admin-utils/src/lib.rs#L169), [`pallets/swap/src/pallet/mod.rs#L181`](/code/pallets/swap/src/pallet/mod.rs#L181). +Declared at [`pallets/subtensor/src/macros/errors.rs#L297`](/code/pallets/subtensor/src/macros/errors.rs#L297), [`pallets/admin-utils/src/lib.rs#L169`](/code/pallets/admin-utils/src/lib.rs#L169), [`pallets/swap/src/pallet/mod.rs#L181`](/code/pallets/swap/src/pallet/mod.rs#L181). ## Remediation diff --git a/docs/errors/chain/DisabledTemporarily.mdx b/docs/errors/chain/DisabledTemporarily.mdx index ee8c6b935c..be4750513d 100644 --- a/docs/errors/chain/DisabledTemporarily.mdx +++ b/docs/errors/chain/DisabledTemporarily.mdx @@ -9,7 +9,7 @@ The operation has been temporarily switched off in the runtime, usually as a hot Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`disabled`](/docs/errors/disabled). -Declared at [`pallets/subtensor/src/macros/errors.rs#L301`](/code/pallets/subtensor/src/macros/errors.rs#L301). +Declared at [`pallets/subtensor/src/macros/errors.rs#L311`](/code/pallets/subtensor/src/macros/errors.rs#L311). ## Remediation diff --git a/docs/errors/chain/DynamicTempoBlockedByCommitReveal.mdx b/docs/errors/chain/DynamicTempoBlockedByCommitReveal.mdx index 10de45f64d..70bbc16efc 100644 --- a/docs/errors/chain/DynamicTempoBlockedByCommitReveal.mdx +++ b/docs/errors/chain/DynamicTempoBlockedByCommitReveal.mdx @@ -9,7 +9,7 @@ description: "This call or feature is switched off on this network" Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`disabled`](/docs/errors/disabled). -Declared at [`pallets/subtensor/src/macros/errors.rs#L331`](/code/pallets/subtensor/src/macros/errors.rs#L331). +Declared at [`pallets/subtensor/src/macros/errors.rs#L341`](/code/pallets/subtensor/src/macros/errors.rs#L341). ## Remediation diff --git a/docs/errors/chain/EpochTriggerAlreadyPending.mdx b/docs/errors/chain/EpochTriggerAlreadyPending.mdx index 2bf8577e71..70e9756de8 100644 --- a/docs/errors/chain/EpochTriggerAlreadyPending.mdx +++ b/docs/errors/chain/EpochTriggerAlreadyPending.mdx @@ -9,7 +9,7 @@ description: "The object or state already exists; treat the goal as met or pick Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L324`](/code/pallets/subtensor/src/macros/errors.rs#L324). +Declared at [`pallets/subtensor/src/macros/errors.rs#L334`](/code/pallets/subtensor/src/macros/errors.rs#L334). ## Remediation diff --git a/docs/errors/chain/EvmKeyAssociateRateLimitExceeded.mdx b/docs/errors/chain/EvmKeyAssociateRateLimitExceeded.mdx index 61d8cad0bb..063717258c 100644 --- a/docs/errors/chain/EvmKeyAssociateRateLimitExceeded.mdx +++ b/docs/errors/chain/EvmKeyAssociateRateLimitExceeded.mdx @@ -9,7 +9,7 @@ description: "Wait for the rate-limit window to pass, then retry" Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`rate_limited`](/docs/errors/rate-limited). -Declared at [`pallets/subtensor/src/macros/errors.rs#L263`](/code/pallets/subtensor/src/macros/errors.rs#L263). +Declared at [`pallets/subtensor/src/macros/errors.rs#L273`](/code/pallets/subtensor/src/macros/errors.rs#L273). ## Remediation diff --git a/docs/errors/chain/EvmKeyAssociationLimitExceeded.mdx b/docs/errors/chain/EvmKeyAssociationLimitExceeded.mdx index b516633b3e..c6cf39be40 100644 --- a/docs/errors/chain/EvmKeyAssociationLimitExceeded.mdx +++ b/docs/errors/chain/EvmKeyAssociationLimitExceeded.mdx @@ -9,7 +9,7 @@ The EVM address is already associated with the maximum number of UIDs allowed on Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L265`](/code/pallets/subtensor/src/macros/errors.rs#L265). +Declared at [`pallets/subtensor/src/macros/errors.rs#L275`](/code/pallets/subtensor/src/macros/errors.rs#L275). ## Remediation diff --git a/docs/errors/chain/ExpectedBeneficiaryOrigin.mdx b/docs/errors/chain/ExpectedBeneficiaryOrigin.mdx index 7e085f06d4..6cfe6df0c8 100644 --- a/docs/errors/chain/ExpectedBeneficiaryOrigin.mdx +++ b/docs/errors/chain/ExpectedBeneficiaryOrigin.mdx @@ -9,7 +9,7 @@ A lease operation such as terminating a subnet lease was signed by an account ot Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`not_authorized`](/docs/errors/not-authorized). -Declared at [`pallets/subtensor/src/macros/errors.rs#L241`](/code/pallets/subtensor/src/macros/errors.rs#L241). +Declared at [`pallets/subtensor/src/macros/errors.rs#L251`](/code/pallets/subtensor/src/macros/errors.rs#L251). ## Remediation diff --git a/docs/errors/chain/IncorrectCommitRevealVersion.mdx b/docs/errors/chain/IncorrectCommitRevealVersion.mdx index e629212a55..3765eaea2e 100644 --- a/docs/errors/chain/IncorrectCommitRevealVersion.mdx +++ b/docs/errors/chain/IncorrectCommitRevealVersion.mdx @@ -9,7 +9,7 @@ The `commit_reveal_version` argument does not match the chain's current commit-r Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L249`](/code/pallets/subtensor/src/macros/errors.rs#L249). +Declared at [`pallets/subtensor/src/macros/errors.rs#L259`](/code/pallets/subtensor/src/macros/errors.rs#L259). ## Remediation diff --git a/docs/errors/chain/InsufficientAlphaBalance.mdx b/docs/errors/chain/InsufficientAlphaBalance.mdx index 958dd71b7b..6444e078e5 100644 --- a/docs/errors/chain/InsufficientAlphaBalance.mdx +++ b/docs/errors/chain/InsufficientAlphaBalance.mdx @@ -9,7 +9,7 @@ A stake decrease asked to debit more alpha than the hotkey-coldkey pair holds on Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`insufficient_balance`](/docs/errors/insufficient-balance). -Declared at [`pallets/subtensor/src/macros/errors.rs#L339`](/code/pallets/subtensor/src/macros/errors.rs#L339). +Declared at [`pallets/subtensor/src/macros/errors.rs#L349`](/code/pallets/subtensor/src/macros/errors.rs#L349). ## Remediation diff --git a/docs/errors/chain/InsufficientStakeForLock.mdx b/docs/errors/chain/InsufficientStakeForLock.mdx index 5b07b4c6e5..32ba72635b 100644 --- a/docs/errors/chain/InsufficientStakeForLock.mdx +++ b/docs/errors/chain/InsufficientStakeForLock.mdx @@ -9,7 +9,7 @@ The requested lock amount exceeds the coldkey's total alpha stake on that subnet Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`insufficient_balance`](/docs/errors/insufficient-balance). -Declared at [`pallets/subtensor/src/macros/errors.rs#L307`](/code/pallets/subtensor/src/macros/errors.rs#L307). +Declared at [`pallets/subtensor/src/macros/errors.rs#L317`](/code/pallets/subtensor/src/macros/errors.rs#L317). ## Remediation diff --git a/docs/errors/chain/InvalidNumRootClaim.mdx b/docs/errors/chain/InvalidNumRootClaim.mdx index 08b8b0340d..af6fef599d 100644 --- a/docs/errors/chain/InvalidNumRootClaim.mdx +++ b/docs/errors/chain/InvalidNumRootClaim.mdx @@ -9,7 +9,7 @@ The value passed to sudo_set_num_root_claims exceeds the compile-time maximum nu Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L275`](/code/pallets/subtensor/src/macros/errors.rs#L275). +Declared at [`pallets/subtensor/src/macros/errors.rs#L285`](/code/pallets/subtensor/src/macros/errors.rs#L285). ## Remediation diff --git a/docs/errors/chain/InvalidRevealRound.mdx b/docs/errors/chain/InvalidRevealRound.mdx index af9a6afc13..92f37499be 100644 --- a/docs/errors/chain/InvalidRevealRound.mdx +++ b/docs/errors/chain/InvalidRevealRound.mdx @@ -9,7 +9,7 @@ A timelocked weights commit specified a `reveal_round` older than the latest sto Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`expired`](/docs/errors/expired). -Declared at [`pallets/subtensor/src/macros/errors.rs#L251`](/code/pallets/subtensor/src/macros/errors.rs#L251). +Declared at [`pallets/subtensor/src/macros/errors.rs#L261`](/code/pallets/subtensor/src/macros/errors.rs#L261). ## Remediation diff --git a/docs/errors/chain/InvalidRootClaimThreshold.mdx b/docs/errors/chain/InvalidRootClaimThreshold.mdx index e66ae6c885..bcbaff3f00 100644 --- a/docs/errors/chain/InvalidRootClaimThreshold.mdx +++ b/docs/errors/chain/InvalidRootClaimThreshold.mdx @@ -9,7 +9,7 @@ The value passed to set the root claim threshold exceeds the chain's maximum all Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L277`](/code/pallets/subtensor/src/macros/errors.rs#L277). +Declared at [`pallets/subtensor/src/macros/errors.rs#L287`](/code/pallets/subtensor/src/macros/errors.rs#L287). ## Remediation diff --git a/docs/errors/chain/InvalidSubnetNumber.mdx b/docs/errors/chain/InvalidSubnetNumber.mdx index 99e020ed4b..511db3e85e 100644 --- a/docs/errors/chain/InvalidSubnetNumber.mdx +++ b/docs/errors/chain/InvalidSubnetNumber.mdx @@ -9,7 +9,7 @@ A root-claim call passed an empty subnet set or more subnets than the per-call m Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L279`](/code/pallets/subtensor/src/macros/errors.rs#L279). +Declared at [`pallets/subtensor/src/macros/errors.rs#L289`](/code/pallets/subtensor/src/macros/errors.rs#L289). ## Remediation diff --git a/docs/errors/chain/InvalidValue.mdx b/docs/errors/chain/InvalidValue.mdx index 7a28fabfb3..ebf7e9e6aa 100644 --- a/docs/errors/chain/InvalidValue.mdx +++ b/docs/errors/chain/InvalidValue.mdx @@ -9,7 +9,7 @@ A generic out-of-range parameter on an admin or sudo call, e.g. mechanism counts Declared by the `SubtensorModule`, `AdminUtils` pallets; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L257`](/code/pallets/subtensor/src/macros/errors.rs#L257), [`pallets/admin-utils/src/lib.rs#L163`](/code/pallets/admin-utils/src/lib.rs#L163). +Declared at [`pallets/subtensor/src/macros/errors.rs#L267`](/code/pallets/subtensor/src/macros/errors.rs#L267), [`pallets/admin-utils/src/lib.rs#L163`](/code/pallets/admin-utils/src/lib.rs#L163). ## Remediation diff --git a/docs/errors/chain/InvalidVotingPowerEmaAlpha.mdx b/docs/errors/chain/InvalidVotingPowerEmaAlpha.mdx index 2ebba315eb..98affde4b9 100644 --- a/docs/errors/chain/InvalidVotingPowerEmaAlpha.mdx +++ b/docs/errors/chain/InvalidVotingPowerEmaAlpha.mdx @@ -9,7 +9,7 @@ The alpha passed to set the voting power EMA exceeds 10^18, which represents 1.0 Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L285`](/code/pallets/subtensor/src/macros/errors.rs#L285). +Declared at [`pallets/subtensor/src/macros/errors.rs#L295`](/code/pallets/subtensor/src/macros/errors.rs#L295). ## Remediation diff --git a/docs/errors/chain/LockHotkeyMismatch.mdx b/docs/errors/chain/LockHotkeyMismatch.mdx index 21523cac8c..d5772c4ddc 100644 --- a/docs/errors/chain/LockHotkeyMismatch.mdx +++ b/docs/errors/chain/LockHotkeyMismatch.mdx @@ -9,7 +9,7 @@ The coldkey already has a conviction lock on this subnet bound to a different ho Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L305`](/code/pallets/subtensor/src/macros/errors.rs#L305). +Declared at [`pallets/subtensor/src/macros/errors.rs#L315`](/code/pallets/subtensor/src/macros/errors.rs#L315). ## Remediation diff --git a/docs/errors/chain/LockIdOverFlow.mdx b/docs/errors/chain/LockIdOverFlow.mdx index 3a6393412f..3aa89a2469 100644 --- a/docs/errors/chain/LockIdOverFlow.mdx +++ b/docs/errors/chain/LockIdOverFlow.mdx @@ -9,7 +9,7 @@ The global network-registration lock id counter reached its u32 maximum while qu Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L335`](/code/pallets/subtensor/src/macros/errors.rs#L335). +Declared at [`pallets/subtensor/src/macros/errors.rs#L345`](/code/pallets/subtensor/src/macros/errors.rs#L345). ## Remediation diff --git a/docs/errors/chain/NetworkDissolveAlreadyQueued.mdx b/docs/errors/chain/NetworkDissolveAlreadyQueued.mdx index 4d5bd4724e..b432c9e700 100644 --- a/docs/errors/chain/NetworkDissolveAlreadyQueued.mdx +++ b/docs/errors/chain/NetworkDissolveAlreadyQueued.mdx @@ -9,7 +9,7 @@ The subnet is already in the dissolve cleanup queue, so it cannot be queued for Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L291`](/code/pallets/subtensor/src/macros/errors.rs#L291). +Declared at [`pallets/subtensor/src/macros/errors.rs#L301`](/code/pallets/subtensor/src/macros/errors.rs#L301). ## Remediation diff --git a/docs/errors/chain/NoExistingLock.mdx b/docs/errors/chain/NoExistingLock.mdx index 53e3eaab8a..bce6215610 100644 --- a/docs/errors/chain/NoExistingLock.mdx +++ b/docs/errors/chain/NoExistingLock.mdx @@ -9,7 +9,7 @@ Move_lock was called but no conviction lock exists for the signing coldkey on th Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`not_found`](/docs/errors/not-found). -Declared at [`pallets/subtensor/src/macros/errors.rs#L309`](/code/pallets/subtensor/src/macros/errors.rs#L309). +Declared at [`pallets/subtensor/src/macros/errors.rs#L319`](/code/pallets/subtensor/src/macros/errors.rs#L319). ## Remediation diff --git a/docs/errors/chain/Overflow.mdx b/docs/errors/chain/Overflow.mdx index e229fcd519..757a36d97c 100644 --- a/docs/errors/chain/Overflow.mdx +++ b/docs/errors/chain/Overflow.mdx @@ -9,7 +9,7 @@ A checked arithmetic operation overflowed, e.g. incrementing `NextSubnetLeaseId` Declared by the `SubtensorModule`, `Crowdloan` pallets; it classifies to the semantic code [`internal`](/docs/errors/internal). -Declared at [`pallets/subtensor/src/macros/errors.rs#L237`](/code/pallets/subtensor/src/macros/errors.rs#L237), [`pallets/crowdloan/src/lib.rs#L255`](/code/pallets/crowdloan/src/lib.rs#L255). +Declared at [`pallets/subtensor/src/macros/errors.rs#L247`](/code/pallets/subtensor/src/macros/errors.rs#L247), [`pallets/crowdloan/src/lib.rs#L255`](/code/pallets/crowdloan/src/lib.rs#L255). ## Remediation diff --git a/docs/errors/chain/RegistrationPriceLimitExceeded.mdx b/docs/errors/chain/RegistrationPriceLimitExceeded.mdx index 15587e99e3..82962bce6a 100644 --- a/docs/errors/chain/RegistrationPriceLimitExceeded.mdx +++ b/docs/errors/chain/RegistrationPriceLimitExceeded.mdx @@ -9,7 +9,7 @@ description: "A chain-side capacity limit was hit; reduce the size or count of t Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L303`](/code/pallets/subtensor/src/macros/errors.rs#L303). +Declared at [`pallets/subtensor/src/macros/errors.rs#L313`](/code/pallets/subtensor/src/macros/errors.rs#L313). ## Remediation diff --git a/docs/errors/chain/RevealPeriodTooLarge.mdx b/docs/errors/chain/RevealPeriodTooLarge.mdx index ab3bd5e4c0..2e0f8e2ba2 100644 --- a/docs/errors/chain/RevealPeriodTooLarge.mdx +++ b/docs/errors/chain/RevealPeriodTooLarge.mdx @@ -9,7 +9,7 @@ description: "Check the argument values against the operation schema" Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L253`](/code/pallets/subtensor/src/macros/errors.rs#L253). +Declared at [`pallets/subtensor/src/macros/errors.rs#L263`](/code/pallets/subtensor/src/macros/errors.rs#L263). ## Remediation diff --git a/docs/errors/chain/RevealPeriodTooSmall.mdx b/docs/errors/chain/RevealPeriodTooSmall.mdx index 95fdd02ae6..a39f9f61f3 100644 --- a/docs/errors/chain/RevealPeriodTooSmall.mdx +++ b/docs/errors/chain/RevealPeriodTooSmall.mdx @@ -9,7 +9,7 @@ description: "Check the argument values against the operation schema" Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L255`](/code/pallets/subtensor/src/macros/errors.rs#L255). +Declared at [`pallets/subtensor/src/macros/errors.rs#L265`](/code/pallets/subtensor/src/macros/errors.rs#L265). ## Remediation diff --git a/docs/errors/chain/SameAutoStakeHotkeyAlreadySet.mdx b/docs/errors/chain/SameAutoStakeHotkeyAlreadySet.mdx index 1878d3d8eb..4e99b006c4 100644 --- a/docs/errors/chain/SameAutoStakeHotkeyAlreadySet.mdx +++ b/docs/errors/chain/SameAutoStakeHotkeyAlreadySet.mdx @@ -9,7 +9,7 @@ The coldkey tried to set its auto-stake destination on a subnet to the hotkey th Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L267`](/code/pallets/subtensor/src/macros/errors.rs#L267). +Declared at [`pallets/subtensor/src/macros/errors.rs#L277`](/code/pallets/subtensor/src/macros/errors.rs#L277). ## Remediation diff --git a/docs/errors/chain/StartCallNotReady.mdx b/docs/errors/chain/StartCallNotReady.mdx index 6d2fe9bf27..fcf63f5a12 100644 --- a/docs/errors/chain/StartCallNotReady.mdx +++ b/docs/errors/chain/StartCallNotReady.mdx @@ -9,7 +9,7 @@ description: "The required window has not opened yet; wait some blocks and retry Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`too_early`](/docs/errors/too-early). -Declared at [`pallets/subtensor/src/macros/errors.rs#L337`](/code/pallets/subtensor/src/macros/errors.rs#L337). +Declared at [`pallets/subtensor/src/macros/errors.rs#L347`](/code/pallets/subtensor/src/macros/errors.rs#L347). ## Remediation diff --git a/docs/errors/chain/SubnetBuybackRateLimitExceeded.mdx b/docs/errors/chain/SubnetBuybackRateLimitExceeded.mdx index a857cca35c..e7c13d3428 100644 --- a/docs/errors/chain/SubnetBuybackRateLimitExceeded.mdx +++ b/docs/errors/chain/SubnetBuybackRateLimitExceeded.mdx @@ -9,7 +9,7 @@ A subnet buyback operation (staking TAO and immediately burning the acquired alp Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`rate_limited`](/docs/errors/rate-limited). -Declared at [`pallets/subtensor/src/macros/errors.rs#L289`](/code/pallets/subtensor/src/macros/errors.rs#L289). +Declared at [`pallets/subtensor/src/macros/errors.rs#L299`](/code/pallets/subtensor/src/macros/errors.rs#L299). ## Remediation diff --git a/docs/errors/chain/SubnetLimitReached.mdx b/docs/errors/chain/SubnetLimitReached.mdx index a6b2d41cc2..6291875116 100644 --- a/docs/errors/chain/SubnetLimitReached.mdx +++ b/docs/errors/chain/SubnetLimitReached.mdx @@ -9,7 +9,7 @@ description: "A chain-side capacity limit was hit; reduce the size or count of t Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L259`](/code/pallets/subtensor/src/macros/errors.rs#L259). +Declared at [`pallets/subtensor/src/macros/errors.rs#L269`](/code/pallets/subtensor/src/macros/errors.rs#L269). ## Remediation diff --git a/docs/errors/chain/SymbolAlreadyInUse.mdx b/docs/errors/chain/SymbolAlreadyInUse.mdx index cf98c111f9..bdfe35ffe6 100644 --- a/docs/errors/chain/SymbolAlreadyInUse.mdx +++ b/docs/errors/chain/SymbolAlreadyInUse.mdx @@ -9,7 +9,7 @@ The token symbol requested for the subnet is already assigned to another subnet. Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L247`](/code/pallets/subtensor/src/macros/errors.rs#L247). +Declared at [`pallets/subtensor/src/macros/errors.rs#L257`](/code/pallets/subtensor/src/macros/errors.rs#L257). ## Remediation diff --git a/docs/errors/chain/SymbolDoesNotExist.mdx b/docs/errors/chain/SymbolDoesNotExist.mdx index 9363260719..acafa29b1a 100644 --- a/docs/errors/chain/SymbolDoesNotExist.mdx +++ b/docs/errors/chain/SymbolDoesNotExist.mdx @@ -9,7 +9,7 @@ The requested token symbol is not in the chain's predefined symbol table, so it Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`not_found`](/docs/errors/not-found). -Declared at [`pallets/subtensor/src/macros/errors.rs#L245`](/code/pallets/subtensor/src/macros/errors.rs#L245). +Declared at [`pallets/subtensor/src/macros/errors.rs#L255`](/code/pallets/subtensor/src/macros/errors.rs#L255). ## Remediation diff --git a/docs/errors/chain/TempoOutOfBounds.mdx b/docs/errors/chain/TempoOutOfBounds.mdx index ede4e9bcf5..5c023c9885 100644 --- a/docs/errors/chain/TempoOutOfBounds.mdx +++ b/docs/errors/chain/TempoOutOfBounds.mdx @@ -9,7 +9,7 @@ The subnet owner gave `sudo_set_tempo` a tempo outside the allowed MIN_TEMPO to Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L319`](/code/pallets/subtensor/src/macros/errors.rs#L319). +Declared at [`pallets/subtensor/src/macros/errors.rs#L329`](/code/pallets/subtensor/src/macros/errors.rs#L329). ## Remediation diff --git a/docs/errors/chain/TooManyUIDsPerMechanism.mdx b/docs/errors/chain/TooManyUIDsPerMechanism.mdx index 47f406bf4d..d5ca3b3e30 100644 --- a/docs/errors/chain/TooManyUIDsPerMechanism.mdx +++ b/docs/errors/chain/TooManyUIDsPerMechanism.mdx @@ -9,7 +9,7 @@ Setting max UIDs or mechanism count would make max_uids times mechanism_count ex Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L281`](/code/pallets/subtensor/src/macros/errors.rs#L281). +Declared at [`pallets/subtensor/src/macros/errors.rs#L291`](/code/pallets/subtensor/src/macros/errors.rs#L291). ## Remediation diff --git a/docs/errors/chain/TrimmingWouldExceedMaxImmunePercentage.mdx b/docs/errors/chain/TrimmingWouldExceedMaxImmunePercentage.mdx index 7c386bc082..61969ca155 100644 --- a/docs/errors/chain/TrimmingWouldExceedMaxImmunePercentage.mdx +++ b/docs/errors/chain/TrimmingWouldExceedMaxImmunePercentage.mdx @@ -9,7 +9,7 @@ Trimming the subnet's UIDs cannot proceed because immune neurons would make up a Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L271`](/code/pallets/subtensor/src/macros/errors.rs#L271). +Declared at [`pallets/subtensor/src/macros/errors.rs#L281`](/code/pallets/subtensor/src/macros/errors.rs#L281). ## Remediation diff --git a/docs/errors/chain/UidMapCouldNotBeCleared.mdx b/docs/errors/chain/UidMapCouldNotBeCleared.mdx index 73d6c7e465..5c8195e6a0 100644 --- a/docs/errors/chain/UidMapCouldNotBeCleared.mdx +++ b/docs/errors/chain/UidMapCouldNotBeCleared.mdx @@ -9,7 +9,7 @@ During a UID reshuffle or trim, clearing the subnet's `Uids` map left residual e Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`internal`](/docs/errors/internal). -Declared at [`pallets/subtensor/src/macros/errors.rs#L269`](/code/pallets/subtensor/src/macros/errors.rs#L269). +Declared at [`pallets/subtensor/src/macros/errors.rs#L279`](/code/pallets/subtensor/src/macros/errors.rs#L279). ## Remediation diff --git a/docs/errors/chain/UnlockAmountTooHigh.mdx b/docs/errors/chain/UnlockAmountTooHigh.mdx index ce86988701..112e3951cd 100644 --- a/docs/errors/chain/UnlockAmountTooHigh.mdx +++ b/docs/errors/chain/UnlockAmountTooHigh.mdx @@ -9,7 +9,7 @@ An unlock requested more alpha than remains locked for the coldkey on that subne Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`insufficient_balance`](/docs/errors/insufficient-balance). -Declared at [`pallets/subtensor/src/macros/errors.rs#L315`](/code/pallets/subtensor/src/macros/errors.rs#L315). +Declared at [`pallets/subtensor/src/macros/errors.rs#L325`](/code/pallets/subtensor/src/macros/errors.rs#L325). ## Remediation diff --git a/docs/errors/chain/VotingPowerTrackingNotEnabled.mdx b/docs/errors/chain/VotingPowerTrackingNotEnabled.mdx index 88fbb45a09..00c2e603a7 100644 --- a/docs/errors/chain/VotingPowerTrackingNotEnabled.mdx +++ b/docs/errors/chain/VotingPowerTrackingNotEnabled.mdx @@ -9,7 +9,7 @@ Disabling voting power tracking was requested on a subnet where tracking is not Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`disabled`](/docs/errors/disabled). -Declared at [`pallets/subtensor/src/macros/errors.rs#L283`](/code/pallets/subtensor/src/macros/errors.rs#L283). +Declared at [`pallets/subtensor/src/macros/errors.rs#L293`](/code/pallets/subtensor/src/macros/errors.rs#L293). ## Remediation diff --git a/docs/errors/chain/WaitingForDissolvedSubnetCleanup.mdx b/docs/errors/chain/WaitingForDissolvedSubnetCleanup.mdx index 7145074a1f..dc3106cadb 100644 --- a/docs/errors/chain/WaitingForDissolvedSubnetCleanup.mdx +++ b/docs/errors/chain/WaitingForDissolvedSubnetCleanup.mdx @@ -9,7 +9,7 @@ The operation is blocked while a dissolved subnet's storage is still being torn Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`too_early`](/docs/errors/too-early). -Declared at [`pallets/subtensor/src/macros/errors.rs#L317`](/code/pallets/subtensor/src/macros/errors.rs#L317). +Declared at [`pallets/subtensor/src/macros/errors.rs#L327`](/code/pallets/subtensor/src/macros/errors.rs#L327). ## Remediation diff --git a/docs/hyperparameters/index.mdx b/docs/hyperparameters/index.mdx index 26beedcbe6..9e4d14f0f4 100644 --- a/docs/hyperparameters/index.mdx +++ b/docs/hyperparameters/index.mdx @@ -9,50 +9,50 @@ Read them with `btcli sudo get --netuid N` (the [`subnet_hyperparameters`](/docs | Hyperparameter | Unit | Owner-settable | What it controls | Source | | --- | --- | --- | --- | --- | -| [`rho`](/docs/hyperparameters/rho) | integer | yes | trust curve steepness | [`Rho`](/code/pallets/subtensor/src/lib.rs#L2124) | -| [`kappa`](/docs/hyperparameters/kappa) | fraction (u16, 65535 = 1.0) | root only | consensus majority-stake threshold | [`Kappa`](/code/pallets/subtensor/src/lib.rs#L2133) | -| [`immunity_period`](/docs/hyperparameters/immunity-period) | blocks (12s) | yes | prune-immunity window for new neurons | [`ImmunityPeriod`](/code/pallets/subtensor/src/lib.rs#L2162) | -| [`min_allowed_weights`](/docs/hyperparameters/min-allowed-weights) | integer | yes | minimum weights per submission | [`MinAllowedWeights`](/code/pallets/subtensor/src/lib.rs#L2188) | -| [`max_weights_limit`](/docs/hyperparameters/max-weights-limit) | fraction (u16, 65535 = 1.0) | root only | cap on a single miner's weight | [`MaxWeightsLimit`](/code/pallets/subtensor/src/lib.rs#L2178) | -| [`tempo`](/docs/hyperparameters/tempo) | blocks (12s) | yes | blocks per consensus epoch | [`Tempo`](/code/pallets/subtensor/src/lib.rs#L1952) | -| [`min_difficulty`](/docs/hyperparameters/min-difficulty) | PoW difficulty (u64) | root only | PoW registration difficulty floor | [`MinDifficulty`](/code/pallets/subtensor/src/lib.rs#L2266) | -| [`max_difficulty`](/docs/hyperparameters/max-difficulty) | PoW difficulty (u64) | yes | PoW registration difficulty ceiling | [`MaxDifficulty`](/code/pallets/subtensor/src/lib.rs#L2271) | -| [`difficulty`](/docs/hyperparameters/difficulty) | PoW difficulty (u64) | root only | current PoW registration difficulty | [`Difficulty`](/code/pallets/subtensor/src/lib.rs#L2252) | -| [`weights_version`](/docs/hyperparameters/weights-version) | integer | yes | minimum version key for set_weights | [`WeightsVersionKey`](/code/pallets/subtensor/src/lib.rs#L2183) | -| [`weights_rate_limit`](/docs/hyperparameters/weights-rate-limit) | blocks (12s) | root only | wait between weight submissions | [`WeightsSetRateLimit`](/code/pallets/subtensor/src/lib.rs#L2218) | -| [`adjustment_interval`](/docs/hyperparameters/adjustment-interval) | blocks (12s) | root only | difficulty/burn adjustment cadence | [`AdjustmentInterval`](/code/pallets/subtensor/src/lib.rs#L2198) | -| [`activity_cutoff`](/docs/hyperparameters/activity-cutoff) | blocks (12s) | root only | no-weights window before inactive | [`ActivityCutoff`](/code/pallets/subtensor/src/lib.rs#L2168) | -| [`activity_cutoff_factor`](/docs/hyperparameters/activity-cutoff-factor) | integer | yes | activity cutoff, per-mille of tempo | [`ActivityCutoffFactorMilli`](/code/pallets/subtensor/src/lib.rs#L1995) | -| [`registration_allowed`](/docs/hyperparameters/registration-allowed) | flag | root only | new neuron registrations allowed | [`NetworkRegistrationAllowed`](/code/pallets/subtensor/src/lib.rs#L2033) | -| [`network_pow_registration_allowed`](/docs/hyperparameters/network-pow-registration-allowed) | flag | yes | PoW registration toggle | [`NetworkPowRegistrationAllowed`](/code/pallets/subtensor/src/lib.rs#L2038) | -| [`target_regs_per_interval`](/docs/hyperparameters/target-regs-per-interval) | integer | root only | registration-rate controller target | [`TargetRegistrationsPerInterval`](/code/pallets/subtensor/src/lib.rs#L2233) | -| [`min_burn`](/docs/hyperparameters/min-burn) | TAO amount in rao | yes | burned-registration cost floor | [`MinBurn`](/code/pallets/subtensor/src/lib.rs#L2256) | -| [`max_burn`](/docs/hyperparameters/max-burn) | TAO amount in rao | yes | burned-registration cost ceiling | [`MaxBurn`](/code/pallets/subtensor/src/lib.rs#L2261) | -| [`bonds_moving_avg`](/docs/hyperparameters/bonds-moving-avg) | fraction (1,000,000 = 1.0) | yes | bonds EMA smoothing factor | [`BondsMovingAverage`](/code/pallets/subtensor/src/lib.rs#L2203) | -| [`max_regs_per_block`](/docs/hyperparameters/max-regs-per-block) | integer | root only | per-block registration cap | [`MaxRegistrationsPerBlock`](/code/pallets/subtensor/src/lib.rs#L1868) | -| [`serving_rate_limit`](/docs/hyperparameters/serving-rate-limit) | blocks (12s) | yes | cooldown between axon serve calls | [`ServingRateLimit`](/code/pallets/subtensor/src/lib.rs#L2119) | -| [`max_validators`](/docs/hyperparameters/max-validators) | integer | root only | top-stake validator permit cap | [`MaxAllowedValidators`](/code/pallets/subtensor/src/lib.rs#L2193) | -| [`adjustment_alpha`](/docs/hyperparameters/adjustment-alpha) | fraction (u64, u64::MAX = 1.0) | yes | difficulty/burn adjust smoothing | [`AdjustmentAlpha`](/code/pallets/subtensor/src/lib.rs#L2238) | -| [`commit_reveal_period`](/docs/hyperparameters/commit-reveal-period) | epochs (tempos) | yes | weight commit-to-reveal delay | [`RevealPeriodEpochs`](/code/pallets/subtensor/src/lib.rs#L2680) | -| [`commit_reveal_weights_enabled`](/docs/hyperparameters/commit-reveal-weights-enabled) | flag | yes | commit-reveal weights toggle | [`CommitRevealWeightsEnabled`](/code/pallets/subtensor/src/lib.rs#L2243) | +| [`rho`](/docs/hyperparameters/rho) | integer | yes | trust curve steepness | [`Rho`](/code/pallets/subtensor/src/lib.rs#L2127) | +| [`kappa`](/docs/hyperparameters/kappa) | fraction (u16, 65535 = 1.0) | root only | consensus majority-stake threshold | [`Kappa`](/code/pallets/subtensor/src/lib.rs#L2136) | +| [`immunity_period`](/docs/hyperparameters/immunity-period) | blocks (12s) | yes | prune-immunity window for new neurons | [`ImmunityPeriod`](/code/pallets/subtensor/src/lib.rs#L2165) | +| [`min_allowed_weights`](/docs/hyperparameters/min-allowed-weights) | integer | yes | minimum weights per submission | [`MinAllowedWeights`](/code/pallets/subtensor/src/lib.rs#L2191) | +| [`max_weights_limit`](/docs/hyperparameters/max-weights-limit) | fraction (u16, 65535 = 1.0) | root only | cap on a single miner's weight | [`MaxWeightsLimit`](/code/pallets/subtensor/src/lib.rs#L2181) | +| [`tempo`](/docs/hyperparameters/tempo) | blocks (12s) | yes | blocks per consensus epoch | [`Tempo`](/code/pallets/subtensor/src/lib.rs#L1955) | +| [`min_difficulty`](/docs/hyperparameters/min-difficulty) | PoW difficulty (u64) | root only | PoW registration difficulty floor | [`MinDifficulty`](/code/pallets/subtensor/src/lib.rs#L2269) | +| [`max_difficulty`](/docs/hyperparameters/max-difficulty) | PoW difficulty (u64) | yes | PoW registration difficulty ceiling | [`MaxDifficulty`](/code/pallets/subtensor/src/lib.rs#L2274) | +| [`difficulty`](/docs/hyperparameters/difficulty) | PoW difficulty (u64) | root only | current PoW registration difficulty | [`Difficulty`](/code/pallets/subtensor/src/lib.rs#L2255) | +| [`weights_version`](/docs/hyperparameters/weights-version) | integer | yes | minimum version key for set_weights | [`WeightsVersionKey`](/code/pallets/subtensor/src/lib.rs#L2186) | +| [`weights_rate_limit`](/docs/hyperparameters/weights-rate-limit) | blocks (12s) | root only | wait between weight submissions | [`WeightsSetRateLimit`](/code/pallets/subtensor/src/lib.rs#L2221) | +| [`adjustment_interval`](/docs/hyperparameters/adjustment-interval) | blocks (12s) | root only | difficulty/burn adjustment cadence | [`AdjustmentInterval`](/code/pallets/subtensor/src/lib.rs#L2201) | +| [`activity_cutoff`](/docs/hyperparameters/activity-cutoff) | blocks (12s) | root only | no-weights window before inactive | [`ActivityCutoff`](/code/pallets/subtensor/src/lib.rs#L2171) | +| [`activity_cutoff_factor`](/docs/hyperparameters/activity-cutoff-factor) | integer | yes | activity cutoff, per-mille of tempo | [`ActivityCutoffFactorMilli`](/code/pallets/subtensor/src/lib.rs#L1998) | +| [`registration_allowed`](/docs/hyperparameters/registration-allowed) | flag | root only | new neuron registrations allowed | [`NetworkRegistrationAllowed`](/code/pallets/subtensor/src/lib.rs#L2036) | +| [`network_pow_registration_allowed`](/docs/hyperparameters/network-pow-registration-allowed) | flag | yes | PoW registration toggle | [`NetworkPowRegistrationAllowed`](/code/pallets/subtensor/src/lib.rs#L2041) | +| [`target_regs_per_interval`](/docs/hyperparameters/target-regs-per-interval) | integer | root only | registration-rate controller target | [`TargetRegistrationsPerInterval`](/code/pallets/subtensor/src/lib.rs#L2236) | +| [`min_burn`](/docs/hyperparameters/min-burn) | TAO amount in rao | yes | burned-registration cost floor | [`MinBurn`](/code/pallets/subtensor/src/lib.rs#L2259) | +| [`max_burn`](/docs/hyperparameters/max-burn) | TAO amount in rao | yes | burned-registration cost ceiling | [`MaxBurn`](/code/pallets/subtensor/src/lib.rs#L2264) | +| [`bonds_moving_avg`](/docs/hyperparameters/bonds-moving-avg) | fraction (1,000,000 = 1.0) | yes | bonds EMA smoothing factor | [`BondsMovingAverage`](/code/pallets/subtensor/src/lib.rs#L2206) | +| [`max_regs_per_block`](/docs/hyperparameters/max-regs-per-block) | integer | root only | per-block registration cap | [`MaxRegistrationsPerBlock`](/code/pallets/subtensor/src/lib.rs#L1871) | +| [`serving_rate_limit`](/docs/hyperparameters/serving-rate-limit) | blocks (12s) | yes | cooldown between axon serve calls | [`ServingRateLimit`](/code/pallets/subtensor/src/lib.rs#L2122) | +| [`max_validators`](/docs/hyperparameters/max-validators) | integer | root only | top-stake validator permit cap | [`MaxAllowedValidators`](/code/pallets/subtensor/src/lib.rs#L2196) | +| [`adjustment_alpha`](/docs/hyperparameters/adjustment-alpha) | fraction (u64, u64::MAX = 1.0) | yes | difficulty/burn adjust smoothing | [`AdjustmentAlpha`](/code/pallets/subtensor/src/lib.rs#L2241) | +| [`commit_reveal_period`](/docs/hyperparameters/commit-reveal-period) | epochs (tempos) | yes | weight commit-to-reveal delay | [`RevealPeriodEpochs`](/code/pallets/subtensor/src/lib.rs#L2683) | +| [`commit_reveal_weights_enabled`](/docs/hyperparameters/commit-reveal-weights-enabled) | flag | yes | commit-reveal weights toggle | [`CommitRevealWeightsEnabled`](/code/pallets/subtensor/src/lib.rs#L2246) | | [`alpha_high`](/docs/hyperparameters/alpha-high) | fraction (u16, 65535 = 1.0) | yes | liquid-alpha smoothing upper bound | — | | [`alpha_low`](/docs/hyperparameters/alpha-low) | fraction (u16, 65535 = 1.0) | yes | liquid-alpha smoothing lower bound | — | -| [`liquid_alpha_enabled`](/docs/hyperparameters/liquid-alpha-enabled) | flag | yes | per-weight bonds EMA (liquid alpha) | [`LiquidAlphaOn`](/code/pallets/subtensor/src/lib.rs#L2320) | -| [`bonds_penalty`](/docs/hyperparameters/bonds-penalty) | fraction (u16, 65535 = 1.0) | yes | penalty on out-of-consensus bonds | [`BondsPenalty`](/code/pallets/subtensor/src/lib.rs#L2208) | -| [`alpha_sigmoid_steepness`](/docs/hyperparameters/alpha-sigmoid-steepness) | integer | yes | liquid-alpha sigmoid steepness | [`AlphaSigmoidSteepness`](/code/pallets/subtensor/src/lib.rs#L2128) | -| [`min_childkey_take`](/docs/hyperparameters/min-childkey-take) | fraction (u16, 65535 = 1.0) | yes | floor for childkey take | [`MinChildkeyTakePerSubnet`](/code/pallets/subtensor/src/lib.rs#L1342) | -| [`owner_immune_neuron_limit`](/docs/hyperparameters/owner-immune-neuron-limit) | integer | yes | owner-designated prune-immune UIDs | [`ImmuneOwnerUidsLimit`](/code/pallets/subtensor/src/lib.rs#L2419) | -| [`max_allowed_uids`](/docs/hyperparameters/max-allowed-uids) | integer | yes | neuron slot capacity before pruning | [`MaxAllowedUids`](/code/pallets/subtensor/src/lib.rs#L2157) | -| [`burn_increase_mult`](/docs/hyperparameters/burn-increase-mult) | multiplier (U64F64 bits / 2^64) | yes | burn cost bump per registration | [`BurnIncreaseMult`](/code/pallets/subtensor/src/lib.rs#L2852) | -| [`burn_half_life`](/docs/hyperparameters/burn-half-life) | blocks (12s) | yes | burn cost decay half-life | [`BurnHalfLife`](/code/pallets/subtensor/src/lib.rs#L2847) | -| [`collateral_lock_share`](/docs/hyperparameters/collateral-lock-share) | fraction (u16, 65535 = 1.0) | yes | registration price share locked | [`CollateralLockShare`](/code/pallets/subtensor/src/lib.rs#L2861) | -| [`collateral_drain_ratio`](/docs/hyperparameters/collateral-drain-ratio) | multiplier (U64F64 bits / 2^64) | yes | collateral released per α earned | [`CollateralDrainRatio`](/code/pallets/subtensor/src/lib.rs#L2870) | -| [`yuma3_enabled`](/docs/hyperparameters/yuma3-enabled) | flag | yes | yuma3 consensus variant toggle | [`Yuma3On`](/code/pallets/subtensor/src/lib.rs#L2325) | +| [`liquid_alpha_enabled`](/docs/hyperparameters/liquid-alpha-enabled) | flag | yes | per-weight bonds EMA (liquid alpha) | [`LiquidAlphaOn`](/code/pallets/subtensor/src/lib.rs#L2323) | +| [`bonds_penalty`](/docs/hyperparameters/bonds-penalty) | fraction (u16, 65535 = 1.0) | yes | penalty on out-of-consensus bonds | [`BondsPenalty`](/code/pallets/subtensor/src/lib.rs#L2211) | +| [`alpha_sigmoid_steepness`](/docs/hyperparameters/alpha-sigmoid-steepness) | integer | yes | liquid-alpha sigmoid steepness | [`AlphaSigmoidSteepness`](/code/pallets/subtensor/src/lib.rs#L2131) | +| [`min_childkey_take`](/docs/hyperparameters/min-childkey-take) | fraction (u16, 65535 = 1.0) | yes | floor for childkey take | [`MinChildkeyTakePerSubnet`](/code/pallets/subtensor/src/lib.rs#L1345) | +| [`owner_immune_neuron_limit`](/docs/hyperparameters/owner-immune-neuron-limit) | integer | yes | owner-designated prune-immune UIDs | [`ImmuneOwnerUidsLimit`](/code/pallets/subtensor/src/lib.rs#L2422) | +| [`max_allowed_uids`](/docs/hyperparameters/max-allowed-uids) | integer | yes | neuron slot capacity before pruning | [`MaxAllowedUids`](/code/pallets/subtensor/src/lib.rs#L2160) | +| [`burn_increase_mult`](/docs/hyperparameters/burn-increase-mult) | multiplier (U64F64 bits / 2^64) | yes | burn cost bump per registration | [`BurnIncreaseMult`](/code/pallets/subtensor/src/lib.rs#L2878) | +| [`burn_half_life`](/docs/hyperparameters/burn-half-life) | blocks (12s) | yes | burn cost decay half-life | [`BurnHalfLife`](/code/pallets/subtensor/src/lib.rs#L2873) | +| [`collateral_lock_share`](/docs/hyperparameters/collateral-lock-share) | fraction (u16, 65535 = 1.0) | yes | registration price share locked | [`CollateralLockShare`](/code/pallets/subtensor/src/lib.rs#L2887) | +| [`collateral_drain_ratio`](/docs/hyperparameters/collateral-drain-ratio) | multiplier (U64F64 bits / 2^64) | yes | collateral released per α earned | [`CollateralDrainRatio`](/code/pallets/subtensor/src/lib.rs#L2896) | +| [`yuma3_enabled`](/docs/hyperparameters/yuma3-enabled) | flag | yes | yuma3 consensus variant toggle | [`Yuma3On`](/code/pallets/subtensor/src/lib.rs#L2328) | | [`yuma_version`](/docs/hyperparameters/yuma-version) | integer | root only | epoch consensus variant (2 or 3) | — | | [`subnet_is_active`](/docs/hyperparameters/subnet-is-active) | flag | root only | subnet started (staking + emissions) | — | -| [`subnet_emission_enabled`](/docs/hyperparameters/subnet-emission-enabled) | flag | root only | root switch for TAO emission share | [`SubnetEmissionEnabled`](/code/pallets/subtensor/src/lib.rs#L1515) | +| [`subnet_emission_enabled`](/docs/hyperparameters/subnet-emission-enabled) | flag | root only | root switch for TAO emission share | [`SubnetEmissionEnabled`](/code/pallets/subtensor/src/lib.rs#L1518) | | [`user_liquidity_enabled`](/docs/hyperparameters/user-liquidity-enabled) | flag | root only | legacy user-LP flag (always false) | — | -| [`bonds_reset_enabled`](/docs/hyperparameters/bonds-reset-enabled) | flag | yes | bonds reset on metadata commit | [`BondsResetOn`](/code/pallets/subtensor/src/lib.rs#L2213) | -| [`transfers_enabled`](/docs/hyperparameters/transfers-enabled) | flag | yes | stake transfers between coldkeys | [`TransferToggle`](/code/pallets/subtensor/src/lib.rs#L1936) | -| [`owner_cut_enabled`](/docs/hyperparameters/owner-cut-enabled) | flag | yes | owner emission cut toggle | [`OwnerCutEnabled`](/code/pallets/subtensor/src/lib.rs#L1911) | -| [`owner_cut_auto_lock_enabled`](/docs/hyperparameters/owner-cut-auto-lock-enabled) | flag | yes | auto-lock the owner's emission cut | [`OwnerCutAutoLockEnabled`](/code/pallets/subtensor/src/lib.rs#L1758) | +| [`bonds_reset_enabled`](/docs/hyperparameters/bonds-reset-enabled) | flag | yes | bonds reset on metadata commit | [`BondsResetOn`](/code/pallets/subtensor/src/lib.rs#L2216) | +| [`transfers_enabled`](/docs/hyperparameters/transfers-enabled) | flag | yes | stake transfers between coldkeys | [`TransferToggle`](/code/pallets/subtensor/src/lib.rs#L1939) | +| [`owner_cut_enabled`](/docs/hyperparameters/owner-cut-enabled) | flag | yes | owner emission cut toggle | [`OwnerCutEnabled`](/code/pallets/subtensor/src/lib.rs#L1914) | +| [`owner_cut_auto_lock_enabled`](/docs/hyperparameters/owner-cut-auto-lock-enabled) | flag | yes | auto-lock the owner's emission cut | [`OwnerCutAutoLockEnabled`](/code/pallets/subtensor/src/lib.rs#L1761) | diff --git a/docs/query/alpha-prices.mdx b/docs/query/alpha-prices.mdx index 399304d71e..d469b8c956 100644 --- a/docs/query/alpha-prices.mdx +++ b/docs/query/alpha-prices.mdx @@ -40,6 +40,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`SwapRuntimeApi.current_alpha_price_all`](/code/runtime/src/lib.rs#L2425-L2435) +- Runtime API [`SwapRuntimeApi.current_alpha_price_all`](/code/runtime/src/lib.rs#L2426-L2436) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/associated-evm-key.mdx b/docs/query/associated-evm-key.mdx index 1a3de46b2c..1d6fa8c0f9 100644 --- a/docs/query/associated-evm-key.mdx +++ b/docs/query/associated-evm-key.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.AssociatedEvmAddress`](/code/pallets/subtensor/src/lib.rs#L2745) +- Storage [`SubtensorModule.AssociatedEvmAddress`](/code/pallets/subtensor/src/lib.rs#L2748) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/auto-stake-all.mdx b/docs/query/auto-stake-all.mdx index 4e02f3c739..d637a66ebc 100644 --- a/docs/query/auto-stake-all.mdx +++ b/docs/query/auto-stake-all.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.AutoStakeDestination`](/code/pallets/subtensor/src/lib.rs#L1564) +- Storage [`SubtensorModule.AutoStakeDestination`](/code/pallets/subtensor/src/lib.rs#L1567) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/auto-stake.mdx b/docs/query/auto-stake.mdx index 83fcc6b801..57d4d85c8f 100644 --- a/docs/query/auto-stake.mdx +++ b/docs/query/auto-stake.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.AutoStakeDestination`](/code/pallets/subtensor/src/lib.rs#L1564) +- Storage [`SubtensorModule.AutoStakeDestination`](/code/pallets/subtensor/src/lib.rs#L1567) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/blocks-since-last-step.mdx b/docs/query/blocks-since-last-step.mdx index bff2922942..d15062b2b7 100644 --- a/docs/query/blocks-since-last-step.mdx +++ b/docs/query/blocks-since-last-step.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.BlocksSinceLastStep`](/code/pallets/subtensor/src/lib.rs#L2094) +- Storage [`SubtensorModule.BlocksSinceLastStep`](/code/pallets/subtensor/src/lib.rs#L2097) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/blocks-since-last-update.mdx b/docs/query/blocks-since-last-update.mdx index 5a7b384218..d00ea04b75 100644 --- a/docs/query/blocks-since-last-update.mdx +++ b/docs/query/blocks-since-last-update.mdx @@ -48,6 +48,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.LastUpdate`](/code/pallets/subtensor/src/lib.rs#L2477) +- Storage [`SubtensorModule.LastUpdate`](/code/pallets/subtensor/src/lib.rs#L2480) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/blocks-until-next-epoch.mdx b/docs/query/blocks-until-next-epoch.mdx index c551a6397f..8402c8c392 100644 --- a/docs/query/blocks-until-next-epoch.mdx +++ b/docs/query/blocks-until-next-epoch.mdx @@ -45,6 +45,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`SubnetInfoRuntimeApi.get_next_epoch_start_block`](/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1183-L1197) +- Runtime API [`SubnetInfoRuntimeApi.get_next_epoch_start_block`](/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1196-L1210) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/bonds.mdx b/docs/query/bonds.mdx index 7fee22f6e0..917164a966 100644 --- a/docs/query/bonds.mdx +++ b/docs/query/bonds.mdx @@ -46,6 +46,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Bonds`](/code/pallets/subtensor/src/lib.rs#L2505) +- Storage [`SubtensorModule.Bonds`](/code/pallets/subtensor/src/lib.rs#L2508) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/burn.mdx b/docs/query/burn.mdx index ad78b4abf3..c743910bfe 100644 --- a/docs/query/burn.mdx +++ b/docs/query/burn.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Burn`](/code/pallets/subtensor/src/lib.rs#L2248) +- Storage [`SubtensorModule.Burn`](/code/pallets/subtensor/src/lib.rs#L2251) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/children.mdx b/docs/query/children.mdx index d93c797301..4feff47cf4 100644 --- a/docs/query/children.mdx +++ b/docs/query/children.mdx @@ -44,6 +44,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.ChildKeys`](/code/pallets/subtensor/src/lib.rs#L1387) +- Storage [`SubtensorModule.ChildKeys`](/code/pallets/subtensor/src/lib.rs#L1390) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/coldkey-lock.mdx b/docs/query/coldkey-lock.mdx index bd9e878e3c..275a4e4c51 100644 --- a/docs/query/coldkey-lock.mdx +++ b/docs/query/coldkey-lock.mdx @@ -44,6 +44,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Lock`](/code/pallets/subtensor/src/lib.rs#L1687) +- Storage [`SubtensorModule.Lock`](/code/pallets/subtensor/src/lib.rs#L1690) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/coldkey-swap-announcement.mdx b/docs/query/coldkey-swap-announcement.mdx index b3c8290d07..f82fe8bd54 100644 --- a/docs/query/coldkey-swap-announcement.mdx +++ b/docs/query/coldkey-swap-announcement.mdx @@ -43,7 +43,7 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.ColdkeySwapAnnouncements`](/code/pallets/subtensor/src/lib.rs#L1599) -- Storage [`SubtensorModule.ColdkeySwapDisputes`](/code/pallets/subtensor/src/lib.rs#L1605) +- Storage [`SubtensorModule.ColdkeySwapAnnouncements`](/code/pallets/subtensor/src/lib.rs#L1602) +- Storage [`SubtensorModule.ColdkeySwapDisputes`](/code/pallets/subtensor/src/lib.rs#L1608) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/commit-reveal-enabled.mdx b/docs/query/commit-reveal-enabled.mdx index 9006b68f8c..0e3681837c 100644 --- a/docs/query/commit-reveal-enabled.mdx +++ b/docs/query/commit-reveal-enabled.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.CommitRevealWeightsEnabled`](/code/pallets/subtensor/src/lib.rs#L2243) +- Storage [`SubtensorModule.CommitRevealWeightsEnabled`](/code/pallets/subtensor/src/lib.rs#L2246) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/delegate-take.mdx b/docs/query/delegate-take.mdx index 6de83de500..9e1035da7f 100644 --- a/docs/query/delegate-take.mdx +++ b/docs/query/delegate-take.mdx @@ -43,8 +43,8 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Delegates`](/code/pallets/subtensor/src/lib.rs#L1357) -- Storage [`SubtensorModule.MinDelegateTake`](/code/pallets/subtensor/src/lib.rs#L1330) -- Storage [`SubtensorModule.MaxDelegateTake`](/code/pallets/subtensor/src/lib.rs#L1326) +- Storage [`SubtensorModule.Delegates`](/code/pallets/subtensor/src/lib.rs#L1360) +- Storage [`SubtensorModule.MinDelegateTake`](/code/pallets/subtensor/src/lib.rs#L1333) +- Storage [`SubtensorModule.MaxDelegateTake`](/code/pallets/subtensor/src/lib.rs#L1329) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/difficulty.mdx b/docs/query/difficulty.mdx index cdde2af7d2..bfd33e686f 100644 --- a/docs/query/difficulty.mdx +++ b/docs/query/difficulty.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Difficulty`](/code/pallets/subtensor/src/lib.rs#L2252) +- Storage [`SubtensorModule.Difficulty`](/code/pallets/subtensor/src/lib.rs#L2255) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/epoch-status.mdx b/docs/query/epoch-status.mdx index 74ae5c58e2..c9e88cc949 100644 --- a/docs/query/epoch-status.mdx +++ b/docs/query/epoch-status.mdx @@ -45,11 +45,11 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1952) -- Storage [`SubtensorModule.LastEpochBlock`](/code/pallets/subtensor/src/lib.rs#L1977) -- Storage [`SubtensorModule.BlocksSinceLastStep`](/code/pallets/subtensor/src/lib.rs#L2094) -- Storage [`SubtensorModule.PendingEpochAt`](/code/pallets/subtensor/src/lib.rs#L1983) -- Storage [`SubtensorModule.SubnetEpochIndex`](/code/pallets/subtensor/src/lib.rs#L1989) -- Runtime API [`SubnetInfoRuntimeApi.get_next_epoch_start_block`](/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1183-L1197) +- Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1955) +- Storage [`SubtensorModule.LastEpochBlock`](/code/pallets/subtensor/src/lib.rs#L1980) +- Storage [`SubtensorModule.BlocksSinceLastStep`](/code/pallets/subtensor/src/lib.rs#L2097) +- Storage [`SubtensorModule.PendingEpochAt`](/code/pallets/subtensor/src/lib.rs#L1986) +- Storage [`SubtensorModule.SubnetEpochIndex`](/code/pallets/subtensor/src/lib.rs#L1992) +- Runtime API [`SubnetInfoRuntimeApi.get_next_epoch_start_block`](/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1196-L1210) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/existential-deposit.mdx b/docs/query/existential-deposit.mdx index 45f5748c02..4391704034 100644 --- a/docs/query/existential-deposit.mdx +++ b/docs/query/existential-deposit.mdx @@ -40,6 +40,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Constant [`Balances.ExistentialDeposit`](/code/runtime/src/lib.rs#L476) +- Constant [`Balances.ExistentialDeposit`](/code/runtime/src/lib.rs#L477) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/hotkey-conviction.mdx b/docs/query/hotkey-conviction.mdx index 320082eee5..8bfc0bc19e 100644 --- a/docs/query/hotkey-conviction.mdx +++ b/docs/query/hotkey-conviction.mdx @@ -44,6 +44,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`StakeInfoRuntimeApi.get_hotkey_conviction`](/code/runtime/src/lib.rs#L2338-L2340) +- Runtime API [`StakeInfoRuntimeApi.get_hotkey_conviction`](/code/runtime/src/lib.rs#L2339-L2341) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/hotkey-identities.mdx b/docs/query/hotkey-identities.mdx index 723edb6a4a..1e2c2e24da 100644 --- a/docs/query/hotkey-identities.mdx +++ b/docs/query/hotkey-identities.mdx @@ -42,7 +42,7 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Owner`](/code/pallets/subtensor/src/lib.rs#L1347) -- Storage [`SubtensorModule.IdentitiesV2`](/code/pallets/subtensor/src/lib.rs#L2567) +- Storage [`SubtensorModule.Owner`](/code/pallets/subtensor/src/lib.rs#L1350) +- Storage [`SubtensorModule.IdentitiesV2`](/code/pallets/subtensor/src/lib.rs#L2570) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/hotkey-owner.mdx b/docs/query/hotkey-owner.mdx index 5c7f0aabf4..1592931625 100644 --- a/docs/query/hotkey-owner.mdx +++ b/docs/query/hotkey-owner.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Owner`](/code/pallets/subtensor/src/lib.rs#L1347) +- Storage [`SubtensorModule.Owner`](/code/pallets/subtensor/src/lib.rs#L1350) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/identity.mdx b/docs/query/identity.mdx index aec6510397..39a4f94742 100644 --- a/docs/query/identity.mdx +++ b/docs/query/identity.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.IdentitiesV2`](/code/pallets/subtensor/src/lib.rs#L2567) +- Storage [`SubtensorModule.IdentitiesV2`](/code/pallets/subtensor/src/lib.rs#L2570) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/immunity-period.mdx b/docs/query/immunity-period.mdx index 0fe4508d5b..1ff42e862e 100644 --- a/docs/query/immunity-period.mdx +++ b/docs/query/immunity-period.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.ImmunityPeriod`](/code/pallets/subtensor/src/lib.rs#L2162) +- Storage [`SubtensorModule.ImmunityPeriod`](/code/pallets/subtensor/src/lib.rs#L2165) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/lease.mdx b/docs/query/lease.mdx index 185838bb2f..887c29773c 100644 --- a/docs/query/lease.mdx +++ b/docs/query/lease.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.SubnetLeases`](/code/pallets/subtensor/src/lib.rs#L2763) +- Storage [`SubtensorModule.SubnetLeases`](/code/pallets/subtensor/src/lib.rs#L2766) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/leases.mdx b/docs/query/leases.mdx index fdde0840ec..443a3ec713 100644 --- a/docs/query/leases.mdx +++ b/docs/query/leases.mdx @@ -40,6 +40,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.SubnetLeases`](/code/pallets/subtensor/src/lib.rs#L2763) +- Storage [`SubtensorModule.SubnetLeases`](/code/pallets/subtensor/src/lib.rs#L2766) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/locks-for-coldkey.mdx b/docs/query/locks-for-coldkey.mdx index 5b7f2625a8..28838409c4 100644 --- a/docs/query/locks-for-coldkey.mdx +++ b/docs/query/locks-for-coldkey.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Lock`](/code/pallets/subtensor/src/lib.rs#L1687) +- Storage [`SubtensorModule.Lock`](/code/pallets/subtensor/src/lib.rs#L1690) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/max-weight-limit.mdx b/docs/query/max-weight-limit.mdx index 67d8335c50..fd4f20d588 100644 --- a/docs/query/max-weight-limit.mdx +++ b/docs/query/max-weight-limit.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.MaxWeightsLimit`](/code/pallets/subtensor/src/lib.rs#L2178) +- Storage [`SubtensorModule.MaxWeightsLimit`](/code/pallets/subtensor/src/lib.rs#L2181) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/mechanism-count.mdx b/docs/query/mechanism-count.mdx index 3d3e8877dd..bda1bf0f20 100644 --- a/docs/query/mechanism-count.mdx +++ b/docs/query/mechanism-count.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.MechanismCountCurrent`](/code/pallets/subtensor/src/lib.rs#L2837) +- Storage [`SubtensorModule.MechanismCountCurrent`](/code/pallets/subtensor/src/lib.rs#L2863) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/mechanism-emission-split.mdx b/docs/query/mechanism-emission-split.mdx index b7527ed164..248145ae22 100644 --- a/docs/query/mechanism-emission-split.mdx +++ b/docs/query/mechanism-emission-split.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.MechanismEmissionSplit`](/code/pallets/subtensor/src/lib.rs#L2842) +- Storage [`SubtensorModule.MechanismEmissionSplit`](/code/pallets/subtensor/src/lib.rs#L2868) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/min-allowed-weights.mdx b/docs/query/min-allowed-weights.mdx index eaa436fdeb..0726978efb 100644 --- a/docs/query/min-allowed-weights.mdx +++ b/docs/query/min-allowed-weights.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.MinAllowedWeights`](/code/pallets/subtensor/src/lib.rs#L2188) +- Storage [`SubtensorModule.MinAllowedWeights`](/code/pallets/subtensor/src/lib.rs#L2191) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/miner-collateral.mdx b/docs/query/miner-collateral.mdx index 900ff95a2f..3997473bf0 100644 --- a/docs/query/miner-collateral.mdx +++ b/docs/query/miner-collateral.mdx @@ -56,6 +56,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Owner`](/code/pallets/subtensor/src/lib.rs#L1347) +- Storage [`SubtensorModule.Owner`](/code/pallets/subtensor/src/lib.rs#L1350) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/most-convicted-hotkey.mdx b/docs/query/most-convicted-hotkey.mdx index 8674684e65..8485e4fc00 100644 --- a/docs/query/most-convicted-hotkey.mdx +++ b/docs/query/most-convicted-hotkey.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`StakeInfoRuntimeApi.get_most_convicted_hotkey_on_subnet`](/code/runtime/src/lib.rs#L2342-L2344) +- Runtime API [`StakeInfoRuntimeApi.get_most_convicted_hotkey_on_subnet`](/code/runtime/src/lib.rs#L2343-L2345) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/netuids-for-hotkey.mdx b/docs/query/netuids-for-hotkey.mdx index ac70f863a7..b54739619d 100644 --- a/docs/query/netuids-for-hotkey.mdx +++ b/docs/query/netuids-for-hotkey.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.IsNetworkMember`](/code/pallets/subtensor/src/lib.rs#L2020) +- Storage [`SubtensorModule.IsNetworkMember`](/code/pallets/subtensor/src/lib.rs#L2023) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/next-epoch-start-block.mdx b/docs/query/next-epoch-start-block.mdx index 47189a56a8..245eba3002 100644 --- a/docs/query/next-epoch-start-block.mdx +++ b/docs/query/next-epoch-start-block.mdx @@ -45,6 +45,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`SubnetInfoRuntimeApi.get_next_epoch_start_block`](/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1183-L1197) +- Runtime API [`SubnetInfoRuntimeApi.get_next_epoch_start_block`](/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1196-L1210) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/owned-hotkeys.mdx b/docs/query/owned-hotkeys.mdx index 1a203fa705..f205642aff 100644 --- a/docs/query/owned-hotkeys.mdx +++ b/docs/query/owned-hotkeys.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.OwnedHotkeys`](/code/pallets/subtensor/src/lib.rs#L1559) +- Storage [`SubtensorModule.OwnedHotkeys`](/code/pallets/subtensor/src/lib.rs#L1562) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/parents.mdx b/docs/query/parents.mdx index 1081445ff6..a32c964c0e 100644 --- a/docs/query/parents.mdx +++ b/docs/query/parents.mdx @@ -44,6 +44,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.ParentKeys`](/code/pallets/subtensor/src/lib.rs#L1400) +- Storage [`SubtensorModule.ParentKeys`](/code/pallets/subtensor/src/lib.rs#L1403) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/pending-children.mdx b/docs/query/pending-children.mdx index 51afd882d4..581ee8a762 100644 --- a/docs/query/pending-children.mdx +++ b/docs/query/pending-children.mdx @@ -48,6 +48,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.PendingChildKeys`](/code/pallets/subtensor/src/lib.rs#L1374) +- Storage [`SubtensorModule.PendingChildKeys`](/code/pallets/subtensor/src/lib.rs#L1377) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/quote-stake.mdx b/docs/query/quote-stake.mdx index 8703ea73ec..c9101d85d5 100644 --- a/docs/query/quote-stake.mdx +++ b/docs/query/quote-stake.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`SwapRuntimeApi.sim_swap_tao_for_alpha`](/code/runtime/src/lib.rs#L2437-L2465) +- Runtime API [`SwapRuntimeApi.sim_swap_tao_for_alpha`](/code/runtime/src/lib.rs#L2438-L2466) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/quote-unstake.mdx b/docs/query/quote-unstake.mdx index a4dfb09fd2..87699cad9e 100644 --- a/docs/query/quote-unstake.mdx +++ b/docs/query/quote-unstake.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`SwapRuntimeApi.sim_swap_alpha_for_tao`](/code/runtime/src/lib.rs#L2467-L2495) +- Runtime API [`SwapRuntimeApi.sim_swap_alpha_for_tao`](/code/runtime/src/lib.rs#L2468-L2496) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/reveal-period.mdx b/docs/query/reveal-period.mdx index 655d5e68d3..22e1ed49f4 100644 --- a/docs/query/reveal-period.mdx +++ b/docs/query/reveal-period.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.RevealPeriodEpochs`](/code/pallets/subtensor/src/lib.rs#L2680) +- Storage [`SubtensorModule.RevealPeriodEpochs`](/code/pallets/subtensor/src/lib.rs#L2683) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/root-claim-type.mdx b/docs/query/root-claim-type.mdx index 5a0b5063e9..89341403c7 100644 --- a/docs/query/root-claim-type.mdx +++ b/docs/query/root-claim-type.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.RootClaimType`](/code/pallets/subtensor/src/lib.rs#L2722) +- Storage [`SubtensorModule.RootClaimType`](/code/pallets/subtensor/src/lib.rs#L2725) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/staking-hotkeys.mdx b/docs/query/staking-hotkeys.mdx index a76a093fd7..0360f6a471 100644 --- a/docs/query/staking-hotkeys.mdx +++ b/docs/query/staking-hotkeys.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.StakingHotkeys`](/code/pallets/subtensor/src/lib.rs#L1554) +- Storage [`SubtensorModule.StakingHotkeys`](/code/pallets/subtensor/src/lib.rs#L1557) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-collateral.mdx b/docs/query/subnet-collateral.mdx index ab75b8aa30..9961487e63 100644 --- a/docs/query/subnet-collateral.mdx +++ b/docs/query/subnet-collateral.mdx @@ -46,6 +46,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Uids`](/code/pallets/subtensor/src/lib.rs#L2430) +- Storage [`SubtensorModule.Uids`](/code/pallets/subtensor/src/lib.rs#L2433) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-convictions.mdx b/docs/query/subnet-convictions.mdx index ca15532891..d6992b716a 100644 --- a/docs/query/subnet-convictions.mdx +++ b/docs/query/subnet-convictions.mdx @@ -49,14 +49,14 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.HotkeyLock`](/code/pallets/subtensor/src/lib.rs#L1713) -- Storage [`SubtensorModule.DecayingHotkeyLock`](/code/pallets/subtensor/src/lib.rs#L1725) -- Storage [`SubtensorModule.OwnerLock`](/code/pallets/subtensor/src/lib.rs#L1737) -- Storage [`SubtensorModule.DecayingOwnerLock`](/code/pallets/subtensor/src/lib.rs#L1741) -- Storage [`SubtensorModule.SubnetOwnerHotkey`](/code/pallets/subtensor/src/lib.rs#L2109) -- Storage [`SubtensorModule.SubnetAlphaOut`](/code/pallets/subtensor/src/lib.rs#L1545) -- Storage [`SubtensorModule.UnlockRate`](/code/pallets/subtensor/src/lib.rs#L1779) -- Storage [`SubtensorModule.MaturityRate`](/code/pallets/subtensor/src/lib.rs#L1775) -- Storage [`SubtensorModule.NetworkRegisteredAt`](/code/pallets/subtensor/src/lib.rs#L2043) +- Storage [`SubtensorModule.HotkeyLock`](/code/pallets/subtensor/src/lib.rs#L1716) +- Storage [`SubtensorModule.DecayingHotkeyLock`](/code/pallets/subtensor/src/lib.rs#L1728) +- Storage [`SubtensorModule.OwnerLock`](/code/pallets/subtensor/src/lib.rs#L1740) +- Storage [`SubtensorModule.DecayingOwnerLock`](/code/pallets/subtensor/src/lib.rs#L1744) +- Storage [`SubtensorModule.SubnetOwnerHotkey`](/code/pallets/subtensor/src/lib.rs#L2112) +- Storage [`SubtensorModule.SubnetAlphaOut`](/code/pallets/subtensor/src/lib.rs#L1548) +- Storage [`SubtensorModule.UnlockRate`](/code/pallets/subtensor/src/lib.rs#L1782) +- Storage [`SubtensorModule.MaturityRate`](/code/pallets/subtensor/src/lib.rs#L1778) +- Storage [`SubtensorModule.NetworkRegisteredAt`](/code/pallets/subtensor/src/lib.rs#L2046) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-emission-enabled.mdx b/docs/query/subnet-emission-enabled.mdx index 3da35ec8f5..0e68777ae7 100644 --- a/docs/query/subnet-emission-enabled.mdx +++ b/docs/query/subnet-emission-enabled.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.SubnetEmissionEnabled`](/code/pallets/subtensor/src/lib.rs#L1515) +- Storage [`SubtensorModule.SubnetEmissionEnabled`](/code/pallets/subtensor/src/lib.rs#L1518) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-identity.mdx b/docs/query/subnet-identity.mdx index e53dae222a..92313da39e 100644 --- a/docs/query/subnet-identity.mdx +++ b/docs/query/subnet-identity.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.SubnetIdentitiesV3`](/code/pallets/subtensor/src/lib.rs#L2572) +- Storage [`SubtensorModule.SubnetIdentitiesV3`](/code/pallets/subtensor/src/lib.rs#L2575) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-names.mdx b/docs/query/subnet-names.mdx index 346d95604f..a2c477f510 100644 --- a/docs/query/subnet-names.mdx +++ b/docs/query/subnet-names.mdx @@ -40,6 +40,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.SubnetIdentitiesV3`](/code/pallets/subtensor/src/lib.rs#L2572) +- Storage [`SubtensorModule.SubnetIdentitiesV3`](/code/pallets/subtensor/src/lib.rs#L2575) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-registration-cost.mdx b/docs/query/subnet-registration-cost.mdx index 08d6bf4c75..180e384bfa 100644 --- a/docs/query/subnet-registration-cost.mdx +++ b/docs/query/subnet-registration-cost.mdx @@ -41,6 +41,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`SubnetRegistrationRuntimeApi.get_network_registration_cost`](/code/runtime/src/lib.rs#L2348-L2350) +- Runtime API [`SubnetRegistrationRuntimeApi.get_network_registration_cost`](/code/runtime/src/lib.rs#L2349-L2351) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-start-schedule.mdx b/docs/query/subnet-start-schedule.mdx index 35f84612d0..c80bc382e1 100644 --- a/docs/query/subnet-start-schedule.mdx +++ b/docs/query/subnet-start-schedule.mdx @@ -43,7 +43,7 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.NetworkRegisteredAt`](/code/pallets/subtensor/src/lib.rs#L2043) -- Constant [`SubtensorModule.InitialStartCallDelay`](/code/runtime/src/lib.rs#L851) +- Storage [`SubtensorModule.NetworkRegisteredAt`](/code/pallets/subtensor/src/lib.rs#L2046) +- Constant [`SubtensorModule.InitialStartCallDelay`](/code/runtime/src/lib.rs#L852) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet.mdx b/docs/query/subnet.mdx index b955705303..15b99a5510 100644 --- a/docs/query/subnet.mdx +++ b/docs/query/subnet.mdx @@ -42,8 +42,8 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1952) -- Storage [`SubtensorModule.Burn`](/code/pallets/subtensor/src/lib.rs#L2248) -- Storage [`SubtensorModule.SubnetworkN`](/code/pallets/subtensor/src/lib.rs#L2011) +- Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1955) +- Storage [`SubtensorModule.Burn`](/code/pallets/subtensor/src/lib.rs#L2251) +- Storage [`SubtensorModule.SubnetworkN`](/code/pallets/subtensor/src/lib.rs#L2014) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnets.mdx b/docs/query/subnets.mdx index 9ceb3a9ef8..8d14e4b852 100644 --- a/docs/query/subnets.mdx +++ b/docs/query/subnets.mdx @@ -40,9 +40,9 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.NetworksAdded`](/code/pallets/subtensor/src/lib.rs#L2015) -- Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1952) -- Storage [`SubtensorModule.Burn`](/code/pallets/subtensor/src/lib.rs#L2248) -- Storage [`SubtensorModule.SubnetworkN`](/code/pallets/subtensor/src/lib.rs#L2011) +- Storage [`SubtensorModule.NetworksAdded`](/code/pallets/subtensor/src/lib.rs#L2018) +- Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1955) +- Storage [`SubtensorModule.Burn`](/code/pallets/subtensor/src/lib.rs#L2251) +- Storage [`SubtensorModule.SubnetworkN`](/code/pallets/subtensor/src/lib.rs#L2014) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/timelocked-weight-commits.mdx b/docs/query/timelocked-weight-commits.mdx index 102d7ba73f..75cb8293e5 100644 --- a/docs/query/timelocked-weight-commits.mdx +++ b/docs/query/timelocked-weight-commits.mdx @@ -47,6 +47,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.TimelockedWeightCommits`](/code/pallets/subtensor/src/lib.rs#L2628) +- Storage [`SubtensorModule.TimelockedWeightCommits`](/code/pallets/subtensor/src/lib.rs#L2631) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/token-symbols.mdx b/docs/query/token-symbols.mdx index 6a6d4acb11..f2e84c95eb 100644 --- a/docs/query/token-symbols.mdx +++ b/docs/query/token-symbols.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.TokenSymbol`](/code/pallets/subtensor/src/lib.rs#L1793) +- Storage [`SubtensorModule.TokenSymbol`](/code/pallets/subtensor/src/lib.rs#L1796) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/tx-rate-limit.mdx b/docs/query/tx-rate-limit.mdx index a98322803d..0a34e8cc39 100644 --- a/docs/query/tx-rate-limit.mdx +++ b/docs/query/tx-rate-limit.mdx @@ -40,6 +40,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.TxRateLimit`](/code/pallets/subtensor/src/lib.rs#L2306) +- Storage [`SubtensorModule.TxRateLimit`](/code/pallets/subtensor/src/lib.rs#L2309) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/uid.mdx b/docs/query/uid.mdx index edfe3a723f..2ca9450ef6 100644 --- a/docs/query/uid.mdx +++ b/docs/query/uid.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Uids`](/code/pallets/subtensor/src/lib.rs#L2430) +- Storage [`SubtensorModule.Uids`](/code/pallets/subtensor/src/lib.rs#L2433) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/weights-rate-limit.mdx b/docs/query/weights-rate-limit.mdx index 62e9a6afa3..993d5a83ea 100644 --- a/docs/query/weights-rate-limit.mdx +++ b/docs/query/weights-rate-limit.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.WeightsSetRateLimit`](/code/pallets/subtensor/src/lib.rs#L2218) +- Storage [`SubtensorModule.WeightsSetRateLimit`](/code/pallets/subtensor/src/lib.rs#L2221) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/weights.mdx b/docs/query/weights.mdx index f68d7d46fd..4ad1960a68 100644 --- a/docs/query/weights.mdx +++ b/docs/query/weights.mdx @@ -47,6 +47,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Weights`](/code/pallets/subtensor/src/lib.rs#L2492) +- Storage [`SubtensorModule.Weights`](/code/pallets/subtensor/src/lib.rs#L2495) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/tx/add-collateral.mdx b/docs/tx/add-collateral.mdx index 2c279a8487..c542fba3d4 100644 --- a/docs/tx/add-collateral.mdx +++ b/docs/tx/add-collateral.mdx @@ -23,7 +23,7 @@ to clear unshielded at an unbounded AMM price. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_collateral`](/code/pallets/subtensor/src/macros/dispatches.rs#L2441-L2451) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_collateral`](/code/pallets/subtensor/src/macros/dispatches.rs#L2458-L2468) | ## Parameters @@ -77,7 +77,7 @@ result = sub.execute_tool("add_collateral", {...}, wallet) ## On-chain implementation -`SubtensorModule.add_collateral` — [`pallets/subtensor/src/macros/dispatches.rs#L2443`](/code/pallets/subtensor/src/macros/dispatches.rs#L2441-L2451): +`SubtensorModule.add_collateral` — [`pallets/subtensor/src/macros/dispatches.rs#L2460`](/code/pallets/subtensor/src/macros/dispatches.rs#L2458-L2468): ```rust #[pallet::call_index(144)] diff --git a/docs/tx/add-stake-limit.mdx b/docs/tx/add-stake-limit.mdx index 9f0f59418e..dfe75e076c 100644 --- a/docs/tx/add-stake-limit.mdx +++ b/docs/tx/add-stake-limit.mdx @@ -15,7 +15,7 @@ for large amounts or thin pools, where the swap itself moves the price. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1391-L1410) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1400-L1419) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("add_stake_limit", {...}, wallet) ## On-chain implementation -`SubtensorModule.add_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1393`](/code/pallets/subtensor/src/macros/dispatches.rs#L1391-L1410): +`SubtensorModule.add_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1402`](/code/pallets/subtensor/src/macros/dispatches.rs#L1400-L1419): ```rust #[pallet::call_index(88)] diff --git a/docs/tx/add-stake.mdx b/docs/tx/add-stake.mdx index 8f4e083943..db0e78ad64 100644 --- a/docs/tx/add-stake.mdx +++ b/docs/tx/add-stake.mdx @@ -22,7 +22,7 @@ reserve (`InsufficientLiquidity`). | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L559-L568), [`SubtensorModule.add_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1391-L1410) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L559-L568), [`SubtensorModule.add_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1400-L1419) | ## Parameters @@ -96,7 +96,7 @@ pub fn add_stake( Delegates to [`do_add_stake`](/code/pallets/subtensor/src/staking/add_stake.rs#L30). -`SubtensorModule.add_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1393`](/code/pallets/subtensor/src/macros/dispatches.rs#L1391-L1410): +`SubtensorModule.add_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1402`](/code/pallets/subtensor/src/macros/dispatches.rs#L1400-L1419): ```rust #[pallet::call_index(88)] diff --git a/docs/tx/announce-coldkey-swap.mdx b/docs/tx/announce-coldkey-swap.mdx index 933286cee2..3c1d843554 100644 --- a/docs/tx/announce-coldkey-swap.mdx +++ b/docs/tx/announce-coldkey-swap.mdx @@ -23,7 +23,7 @@ an unauthorized one with `dispute_coldkey_swap`. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.announce_coldkey_swap`](/code/pallets/subtensor/src/macros/dispatches.rs#L1985-L2013) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.announce_coldkey_swap`](/code/pallets/subtensor/src/macros/dispatches.rs#L1994-L2022) | ## Parameters @@ -72,7 +72,7 @@ result = sub.execute_tool("announce_coldkey_swap", {...}, wallet) ## On-chain implementation -`SubtensorModule.announce_coldkey_swap` — [`pallets/subtensor/src/macros/dispatches.rs#L1987`](/code/pallets/subtensor/src/macros/dispatches.rs#L1985-L2013): +`SubtensorModule.announce_coldkey_swap` — [`pallets/subtensor/src/macros/dispatches.rs#L1996`](/code/pallets/subtensor/src/macros/dispatches.rs#L1994-L2022): ```rust #[pallet::call_index(125)] diff --git a/docs/tx/associate-evm-key.mdx b/docs/tx/associate-evm-key.mdx index fe28b04086..000daba6b8 100644 --- a/docs/tx/associate-evm-key.mdx +++ b/docs/tx/associate-evm-key.mdx @@ -20,7 +20,7 @@ neuron. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.associate_evm_key`](/code/pallets/subtensor/src/macros/dispatches.rs#L1573-L1587) | +| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.associate_evm_key`](/code/pallets/subtensor/src/macros/dispatches.rs#L1582-L1596) | ## Parameters @@ -78,7 +78,7 @@ result = sub.execute_tool("associate_evm_key", {...}, wallet) ## On-chain implementation -`SubtensorModule.associate_evm_key` — [`pallets/subtensor/src/macros/dispatches.rs#L1579`](/code/pallets/subtensor/src/macros/dispatches.rs#L1573-L1587): +`SubtensorModule.associate_evm_key` — [`pallets/subtensor/src/macros/dispatches.rs#L1588`](/code/pallets/subtensor/src/macros/dispatches.rs#L1582-L1596): ```rust #[pallet::call_index(93)] diff --git a/docs/tx/associate-hotkey.mdx b/docs/tx/associate-hotkey.mdx index cc1b956395..c2b3e51abc 100644 --- a/docs/tx/associate-hotkey.mdx +++ b/docs/tx/associate-hotkey.mdx @@ -15,7 +15,7 @@ take over the hotkey. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.try_associate_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L1519-L1527) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.try_associate_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L1528-L1536) | ## Parameters @@ -62,7 +62,7 @@ result = sub.execute_tool("associate_hotkey", {...}, wallet) ## On-chain implementation -`SubtensorModule.try_associate_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L1521`](/code/pallets/subtensor/src/macros/dispatches.rs#L1519-L1527): +`SubtensorModule.try_associate_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L1530`](/code/pallets/subtensor/src/macros/dispatches.rs#L1528-L1536): ```rust #[pallet::call_index(91)] diff --git a/docs/tx/claim-root.mdx b/docs/tx/claim-root.mdx index e796701d54..abc9301a64 100644 --- a/docs/tx/claim-root.mdx +++ b/docs/tx/claim-root.mdx @@ -17,7 +17,7 @@ deadline — but each call pays out only the subnets listed. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.claim_root`](/code/pallets/subtensor/src/macros/dispatches.rs#L1889-L1907) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.claim_root`](/code/pallets/subtensor/src/macros/dispatches.rs#L1898-L1916) | ## Parameters @@ -66,7 +66,7 @@ result = sub.execute_tool("claim_root", {...}, wallet) ## On-chain implementation -`SubtensorModule.claim_root` — [`pallets/subtensor/src/macros/dispatches.rs#L1891`](/code/pallets/subtensor/src/macros/dispatches.rs#L1889-L1907): +`SubtensorModule.claim_root` — [`pallets/subtensor/src/macros/dispatches.rs#L1900`](/code/pallets/subtensor/src/macros/dispatches.rs#L1898-L1916): ```rust #[pallet::call_index(121)] diff --git a/docs/tx/clear-coldkey-swap-announcement.mdx b/docs/tx/clear-coldkey-swap-announcement.mdx index de60b529c5..45cceb4cac 100644 --- a/docs/tx/clear-coldkey-swap-announcement.mdx +++ b/docs/tx/clear-coldkey-swap-announcement.mdx @@ -17,7 +17,7 @@ right call instead. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.clear_coldkey_swap_announcement`](/code/pallets/subtensor/src/macros/dispatches.rs#L2184-L2201) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.clear_coldkey_swap_announcement`](/code/pallets/subtensor/src/macros/dispatches.rs#L2193-L2210) | ## Parameters @@ -62,7 +62,7 @@ result = sub.execute_tool("clear_coldkey_swap_announcement", {...}, wallet) ## On-chain implementation -`SubtensorModule.clear_coldkey_swap_announcement` — [`pallets/subtensor/src/macros/dispatches.rs#L2186`](/code/pallets/subtensor/src/macros/dispatches.rs#L2184-L2201): +`SubtensorModule.clear_coldkey_swap_announcement` — [`pallets/subtensor/src/macros/dispatches.rs#L2195`](/code/pallets/subtensor/src/macros/dispatches.rs#L2193-L2210): ```rust #[pallet::call_index(133)] diff --git a/docs/tx/commit-weights.mdx b/docs/tx/commit-weights.mdx index 90db606353..e4b3672298 100644 --- a/docs/tx/commit-weights.mdx +++ b/docs/tx/commit-weights.mdx @@ -16,7 +16,7 @@ commit-reveal setting. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.commit_timelocked_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L1850-L1868) | +| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.commit_timelocked_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L1859-L1877) | ## Parameters @@ -70,7 +70,7 @@ result = sub.execute_tool("commit_weights", {...}, wallet) ## On-chain implementation -`SubtensorModule.commit_timelocked_mechanism_weights` — [`pallets/subtensor/src/macros/dispatches.rs#L1852`](/code/pallets/subtensor/src/macros/dispatches.rs#L1850-L1868): +`SubtensorModule.commit_timelocked_mechanism_weights` — [`pallets/subtensor/src/macros/dispatches.rs#L1861`](/code/pallets/subtensor/src/macros/dispatches.rs#L1859-L1877): ```rust #[pallet::call_index(118)] diff --git a/docs/tx/dispute-coldkey-swap.mdx b/docs/tx/dispute-coldkey-swap.mdx index 75a54c84c2..2e15992ae6 100644 --- a/docs/tx/dispute-coldkey-swap.mdx +++ b/docs/tx/dispute-coldkey-swap.mdx @@ -18,7 +18,7 @@ you made yourself. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.dispute_coldkey_swap`](/code/pallets/subtensor/src/macros/dispatches.rs#L2054-L2073) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.dispute_coldkey_swap`](/code/pallets/subtensor/src/macros/dispatches.rs#L2063-L2082) | ## Parameters @@ -63,7 +63,7 @@ result = sub.execute_tool("dispute_coldkey_swap", {...}, wallet) ## On-chain implementation -`SubtensorModule.dispute_coldkey_swap` — [`pallets/subtensor/src/macros/dispatches.rs#L2056`](/code/pallets/subtensor/src/macros/dispatches.rs#L2054-L2073): +`SubtensorModule.dispute_coldkey_swap` — [`pallets/subtensor/src/macros/dispatches.rs#L2065`](/code/pallets/subtensor/src/macros/dispatches.rs#L2063-L2082): ```rust #[pallet::call_index(127)] diff --git a/docs/tx/lock-stake.mdx b/docs/tx/lock-stake.mdx index b769d762dc..9835780d94 100644 --- a/docs/tx/lock-stake.mdx +++ b/docs/tx/lock-stake.mdx @@ -21,7 +21,7 @@ persists is controlled per coldkey per subnet with | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.lock_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L2256-L2266) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.lock_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L2265-L2275) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("lock_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.lock_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L2258`](/code/pallets/subtensor/src/macros/dispatches.rs#L2256-L2266): +`SubtensorModule.lock_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L2267`](/code/pallets/subtensor/src/macros/dispatches.rs#L2265-L2275): ```rust #[pallet::call_index(136)] diff --git a/docs/tx/move-lock.mdx b/docs/tx/move-lock.mdx index c836c0ce51..13f13b074a 100644 --- a/docs/tx/move-lock.mdx +++ b/docs/tx/move-lock.mdx @@ -16,7 +16,7 @@ existing lock on the subnet to move. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.move_lock`](/code/pallets/subtensor/src/macros/dispatches.rs#L2280-L2289) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.move_lock`](/code/pallets/subtensor/src/macros/dispatches.rs#L2289-L2298) | ## Parameters @@ -68,7 +68,7 @@ result = sub.execute_tool("move_lock", {...}, wallet) ## On-chain implementation -`SubtensorModule.move_lock` — [`pallets/subtensor/src/macros/dispatches.rs#L2282`](/code/pallets/subtensor/src/macros/dispatches.rs#L2280-L2289): +`SubtensorModule.move_lock` — [`pallets/subtensor/src/macros/dispatches.rs#L2291`](/code/pallets/subtensor/src/macros/dispatches.rs#L2289-L2298): ```rust #[pallet::call_index(137)] diff --git a/docs/tx/move-stake.mdx b/docs/tx/move-stake.mdx index da8ff73c30..786c5812a7 100644 --- a/docs/tx/move-stake.mdx +++ b/docs/tx/move-stake.mdx @@ -16,7 +16,7 @@ changes. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.move_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1255-L1273) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.move_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1264-L1282) | ## Parameters @@ -77,7 +77,7 @@ result = sub.execute_tool("move_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.move_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1257`](/code/pallets/subtensor/src/macros/dispatches.rs#L1255-L1273): +`SubtensorModule.move_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1266`](/code/pallets/subtensor/src/macros/dispatches.rs#L1264-L1282): ```rust #[pallet::call_index(85)] diff --git a/docs/tx/register-leased-network.mdx b/docs/tx/register-leased-network.mdx index 99421d16b5..3aceceb242 100644 --- a/docs/tx/register-leased-network.mdx +++ b/docs/tx/register-leased-network.mdx @@ -19,7 +19,7 @@ perpetual and ownership never transfers. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.register_leased_network`](/code/pallets/subtensor/src/macros/dispatches.rs#L1671-L1679) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.register_leased_network`](/code/pallets/subtensor/src/macros/dispatches.rs#L1680-L1688) | ## Parameters @@ -69,7 +69,7 @@ result = sub.execute_tool("register_leased_network", {...}, wallet) ## On-chain implementation -`SubtensorModule.register_leased_network` — [`pallets/subtensor/src/macros/dispatches.rs#L1673`](/code/pallets/subtensor/src/macros/dispatches.rs#L1671-L1679): +`SubtensorModule.register_leased_network` — [`pallets/subtensor/src/macros/dispatches.rs#L1682`](/code/pallets/subtensor/src/macros/dispatches.rs#L1680-L1688): ```rust #[pallet::call_index(110)] diff --git a/docs/tx/register-subnet.mdx b/docs/tx/register-subnet.mdx index b05d0414ca..4d92126445 100644 --- a/docs/tx/register-subnet.mdx +++ b/docs/tx/register-subnet.mdx @@ -27,7 +27,7 @@ current cost before sending. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.register_network`](/code/pallets/subtensor/src/macros/dispatches.rs#L1002-L1006) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.register_network`](/code/pallets/subtensor/src/macros/dispatches.rs#L1006-L1010) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("register_subnet", {...}, wallet) ## On-chain implementation -`SubtensorModule.register_network` — [`pallets/subtensor/src/macros/dispatches.rs#L1004`](/code/pallets/subtensor/src/macros/dispatches.rs#L1002-L1006): +`SubtensorModule.register_network` — [`pallets/subtensor/src/macros/dispatches.rs#L1008`](/code/pallets/subtensor/src/macros/dispatches.rs#L1006-L1010): ```rust #[pallet::call_index(59)] diff --git a/docs/tx/remove-stake-limit.mdx b/docs/tx/remove-stake-limit.mdx index 4ca751ef24..cdf81873cd 100644 --- a/docs/tx/remove-stake-limit.mdx +++ b/docs/tx/remove-stake-limit.mdx @@ -16,7 +16,7 @@ this over plain `remove_stake` when exiting large positions. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.remove_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1444-L1462) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.remove_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1453-L1471) | ## Parameters @@ -75,7 +75,7 @@ result = sub.execute_tool("remove_stake_limit", {...}, wallet) ## On-chain implementation -`SubtensorModule.remove_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1446`](/code/pallets/subtensor/src/macros/dispatches.rs#L1444-L1462): +`SubtensorModule.remove_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1455`](/code/pallets/subtensor/src/macros/dispatches.rs#L1453-L1471): ```rust #[pallet::call_index(89)] diff --git a/docs/tx/remove-stake.mdx b/docs/tx/remove-stake.mdx index c58b7012fe..4c61e250f8 100644 --- a/docs/tx/remove-stake.mdx +++ b/docs/tx/remove-stake.mdx @@ -22,7 +22,7 @@ position instead of leaving dust (`AmountTooLow`). | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.remove_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L593-L602), [`SubtensorModule.remove_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1444-L1462) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.remove_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L593-L602), [`SubtensorModule.remove_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1453-L1471) | ## Parameters @@ -96,7 +96,7 @@ pub fn remove_stake( Delegates to [`do_remove_stake`](/code/pallets/subtensor/src/staking/remove_stake.rs#L35). -`SubtensorModule.remove_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1446`](/code/pallets/subtensor/src/macros/dispatches.rs#L1444-L1462): +`SubtensorModule.remove_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1455`](/code/pallets/subtensor/src/macros/dispatches.rs#L1453-L1471): ```rust #[pallet::call_index(89)] diff --git a/docs/tx/set-auto-stake.mdx b/docs/tx/set-auto-stake.mdx index cd5466b78f..aa985d5898 100644 --- a/docs/tx/set-auto-stake.mdx +++ b/docs/tx/set-auto-stake.mdx @@ -17,7 +17,7 @@ back with the `auto_stake` read. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_coldkey_auto_stake_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L1784-L1826) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_coldkey_auto_stake_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L1793-L1835) | ## Parameters @@ -67,7 +67,7 @@ result = sub.execute_tool("set_auto_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_coldkey_auto_stake_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L1786`](/code/pallets/subtensor/src/macros/dispatches.rs#L1784-L1826): +`SubtensorModule.set_coldkey_auto_stake_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L1795`](/code/pallets/subtensor/src/macros/dispatches.rs#L1793-L1835): ```rust #[pallet::call_index(114)] diff --git a/docs/tx/set-childkey-take.mdx b/docs/tx/set-childkey-take.mdx index d7d8ce6026..f48d8f9c37 100644 --- a/docs/tx/set-childkey-take.mdx +++ b/docs/tx/set-childkey-take.mdx @@ -14,7 +14,7 @@ minimum and maximum childkey take bounds, and rate-limits only increases | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_childkey_take`](/code/pallets/subtensor/src/macros/dispatches.rs#L925-L937) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_childkey_take`](/code/pallets/subtensor/src/macros/dispatches.rs#L929-L941) | ## Parameters @@ -67,7 +67,7 @@ result = sub.execute_tool("set_childkey_take", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_childkey_take` — [`pallets/subtensor/src/macros/dispatches.rs#L927`](/code/pallets/subtensor/src/macros/dispatches.rs#L925-L937): +`SubtensorModule.set_childkey_take` — [`pallets/subtensor/src/macros/dispatches.rs#L931`](/code/pallets/subtensor/src/macros/dispatches.rs#L929-L941): ```rust #[pallet::call_index(75)] @@ -85,6 +85,6 @@ pub fn set_childkey_take( } ``` -Delegates to [`do_set_childkey_take`](/code/pallets/subtensor/src/staking/set_children.rs#L707). +Delegates to [`do_set_childkey_take`](/code/pallets/subtensor/src/staking/set_children.rs#L776). Every file is browsable under [/code](/code) exactly as built into the runtime, or as plain text under `/code/raw/` (index: [`/code/index.json`](/code/index.json)). diff --git a/docs/tx/set-children.mdx b/docs/tx/set-children.mdx index 2af6e252a3..91e30e2165 100644 --- a/docs/tx/set-children.mdx +++ b/docs/tx/set-children.mdx @@ -26,7 +26,7 @@ is not yet enabled, where they apply immediately. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_children`](/code/pallets/subtensor/src/macros/dispatches.rs#L1077-L1087) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_children`](/code/pallets/subtensor/src/macros/dispatches.rs#L1081-L1096) | ## Parameters @@ -79,11 +79,16 @@ result = sub.execute_tool("set_children", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_children` — [`pallets/subtensor/src/macros/dispatches.rs#L1079`](/code/pallets/subtensor/src/macros/dispatches.rs#L1077-L1087): +`SubtensorModule.set_children` — [`pallets/subtensor/src/macros/dispatches.rs#L1088`](/code/pallets/subtensor/src/macros/dispatches.rs#L1081-L1096): ```rust #[pallet::call_index(67)] -#[pallet::weight((::WeightInfo::set_children(children.len() as u32), DispatchClass::Normal, Pays::Yes))] +#[pallet::weight(( + ::WeightInfo::set_children(children.len() as u32) + .saturating_add(crate::Pallet::::set_children_cycle_check_weight()), + DispatchClass::Normal, + Pays::Yes +))] pub fn set_children( origin: OriginFor, hotkey: T::AccountId, @@ -95,6 +100,6 @@ pub fn set_children( } ``` -Delegates to [`do_schedule_children`](/code/pallets/subtensor/src/staking/set_children.rs#L475). +Delegates to [`do_schedule_children`](/code/pallets/subtensor/src/staking/set_children.rs#L543). Every file is browsable under [/code](/code) exactly as built into the runtime, or as plain text under `/code/raw/` (index: [`/code/index.json`](/code/index.json)). diff --git a/docs/tx/set-identity.mdx b/docs/tx/set-identity.mdx index 4c465c8e71..f38af7dea5 100644 --- a/docs/tx/set-identity.mdx +++ b/docs/tx/set-identity.mdx @@ -17,7 +17,7 @@ cosmetic: no effect on balances, stake, or permissions. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_identity`](/code/pallets/subtensor/src/macros/dispatches.rs#L1118-L1140) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_identity`](/code/pallets/subtensor/src/macros/dispatches.rs#L1127-L1149) | ## Parameters @@ -72,7 +72,7 @@ result = sub.execute_tool("set_identity", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_identity` — [`pallets/subtensor/src/macros/dispatches.rs#L1120`](/code/pallets/subtensor/src/macros/dispatches.rs#L1118-L1140): +`SubtensorModule.set_identity` — [`pallets/subtensor/src/macros/dispatches.rs#L1129`](/code/pallets/subtensor/src/macros/dispatches.rs#L1127-L1149): ```rust #[pallet::call_index(68)] diff --git a/docs/tx/set-min-collateral.mdx b/docs/tx/set-min-collateral.mdx index 94b649747b..bcb6a198ca 100644 --- a/docs/tx/set-min-collateral.mdx +++ b/docs/tx/set-min-collateral.mdx @@ -15,7 +15,7 @@ immediately). Zero clears the floor and restores pure drain behavior. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_min_collateral`](/code/pallets/subtensor/src/macros/dispatches.rs#L2476-L2485) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_min_collateral`](/code/pallets/subtensor/src/macros/dispatches.rs#L2493-L2502) | ## Parameters @@ -68,7 +68,7 @@ result = sub.execute_tool("set_min_collateral", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_min_collateral` — [`pallets/subtensor/src/macros/dispatches.rs#L2478`](/code/pallets/subtensor/src/macros/dispatches.rs#L2476-L2485): +`SubtensorModule.set_min_collateral` — [`pallets/subtensor/src/macros/dispatches.rs#L2495`](/code/pallets/subtensor/src/macros/dispatches.rs#L2493-L2502): ```rust #[pallet::call_index(145)] diff --git a/docs/tx/set-perpetual-lock.mdx b/docs/tx/set-perpetual-lock.mdx index a8d181b8c6..7519a6fdc1 100644 --- a/docs/tx/set-perpetual-lock.mdx +++ b/docs/tx/set-perpetual-lock.mdx @@ -15,7 +15,7 @@ illiquid until you switch back to decaying and the lock runs off. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_perpetual_lock`](/code/pallets/subtensor/src/macros/dispatches.rs#L2296-L2305) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_perpetual_lock`](/code/pallets/subtensor/src/macros/dispatches.rs#L2305-L2314) | ## Parameters @@ -67,7 +67,7 @@ result = sub.execute_tool("set_perpetual_lock", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_perpetual_lock` — [`pallets/subtensor/src/macros/dispatches.rs#L2298`](/code/pallets/subtensor/src/macros/dispatches.rs#L2296-L2305): +`SubtensorModule.set_perpetual_lock` — [`pallets/subtensor/src/macros/dispatches.rs#L2307`](/code/pallets/subtensor/src/macros/dispatches.rs#L2305-L2314): ```rust #[pallet::call_index(138)] diff --git a/docs/tx/set-root-claim-type.mdx b/docs/tx/set-root-claim-type.mdx index 950389749c..c0f94ae6f4 100644 --- a/docs/tx/set-root-claim-type.mdx +++ b/docs/tx/set-root-claim-type.mdx @@ -14,7 +14,7 @@ already claimed. Read it back with the `root_claim_type` read. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_root_claim_type`](/code/pallets/subtensor/src/macros/dispatches.rs#L1916-L1932) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_root_claim_type`](/code/pallets/subtensor/src/macros/dispatches.rs#L1925-L1941) | ## Parameters @@ -62,7 +62,7 @@ result = sub.execute_tool("set_root_claim_type", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_root_claim_type` — [`pallets/subtensor/src/macros/dispatches.rs#L1918`](/code/pallets/subtensor/src/macros/dispatches.rs#L1916-L1932): +`SubtensorModule.set_root_claim_type` — [`pallets/subtensor/src/macros/dispatches.rs#L1927`](/code/pallets/subtensor/src/macros/dispatches.rs#L1925-L1941): ```rust #[pallet::call_index(122)] diff --git a/docs/tx/set-subnet-identity.mdx b/docs/tx/set-subnet-identity.mdx index 29787a19c7..411fbb9dad 100644 --- a/docs/tx/set-subnet-identity.mdx +++ b/docs/tx/set-subnet-identity.mdx @@ -15,7 +15,7 @@ for economics use `set_hyperparameter`. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.set_subnet_identity`](/code/pallets/subtensor/src/macros/dispatches.rs#L1153-L1179) | +| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.set_subnet_identity`](/code/pallets/subtensor/src/macros/dispatches.rs#L1162-L1188) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("set_subnet_identity", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_subnet_identity` — [`pallets/subtensor/src/macros/dispatches.rs#L1155`](/code/pallets/subtensor/src/macros/dispatches.rs#L1153-L1179): +`SubtensorModule.set_subnet_identity` — [`pallets/subtensor/src/macros/dispatches.rs#L1164`](/code/pallets/subtensor/src/macros/dispatches.rs#L1162-L1188): ```rust #[pallet::call_index(78)] diff --git a/docs/tx/set-weights.mdx b/docs/tx/set-weights.mdx index 960d7b1934..343a5a3052 100644 --- a/docs/tx/set-weights.mdx +++ b/docs/tx/set-weights.mdx @@ -22,7 +22,7 @@ unless you specifically need to force one path. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L128-L143), [`SubtensorModule.commit_timelocked_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L1850-L1868) | +| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L128-L143), [`SubtensorModule.commit_timelocked_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L1859-L1877) | ## Parameters @@ -98,7 +98,7 @@ pub fn set_mechanism_weights( Delegates to [`get_commit_reveal_weights_enabled`](/code/pallets/subtensor/src/utils/misc.rs#L607), [`do_set_mechanism_weights`](/code/pallets/subtensor/src/subnets/weights.rs#L916). -`SubtensorModule.commit_timelocked_mechanism_weights` — [`pallets/subtensor/src/macros/dispatches.rs#L1852`](/code/pallets/subtensor/src/macros/dispatches.rs#L1850-L1868): +`SubtensorModule.commit_timelocked_mechanism_weights` — [`pallets/subtensor/src/macros/dispatches.rs#L1861`](/code/pallets/subtensor/src/macros/dispatches.rs#L1859-L1877): ```rust #[pallet::call_index(118)] diff --git a/docs/tx/stake-burn.mdx b/docs/tx/stake-burn.mdx index 7847d3cc5d..d3acfb6175 100644 --- a/docs/tx/stake-burn.mdx +++ b/docs/tx/stake-burn.mdx @@ -18,7 +18,7 @@ cap. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake_burn`](/code/pallets/subtensor/src/macros/dispatches.rs#L2168-L2178) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake_burn`](/code/pallets/subtensor/src/macros/dispatches.rs#L2177-L2187) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("stake_burn", {...}, wallet) ## On-chain implementation -`SubtensorModule.add_stake_burn` — [`pallets/subtensor/src/macros/dispatches.rs#L2170`](/code/pallets/subtensor/src/macros/dispatches.rs#L2168-L2178): +`SubtensorModule.add_stake_burn` — [`pallets/subtensor/src/macros/dispatches.rs#L2179`](/code/pallets/subtensor/src/macros/dispatches.rs#L2177-L2187): ```rust #[pallet::call_index(132)] diff --git a/docs/tx/start-call.mdx b/docs/tx/start-call.mdx index 0032293dae..d1e3c70881 100644 --- a/docs/tx/start-call.mdx +++ b/docs/tx/start-call.mdx @@ -16,7 +16,7 @@ as soon as the delay allows. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.start_call`](/code/pallets/subtensor/src/macros/dispatches.rs#L1537-L1542) | +| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.start_call`](/code/pallets/subtensor/src/macros/dispatches.rs#L1546-L1551) | ## Parameters @@ -65,7 +65,7 @@ result = sub.execute_tool("start_call", {...}, wallet) ## On-chain implementation -`SubtensorModule.start_call` — [`pallets/subtensor/src/macros/dispatches.rs#L1539`](/code/pallets/subtensor/src/macros/dispatches.rs#L1537-L1542): +`SubtensorModule.start_call` — [`pallets/subtensor/src/macros/dispatches.rs#L1548`](/code/pallets/subtensor/src/macros/dispatches.rs#L1546-L1551): ```rust #[pallet::call_index(92)] diff --git a/docs/tx/swap-coldkey-announced.mdx b/docs/tx/swap-coldkey-announced.mdx index dda3943675..53a1f016ae 100644 --- a/docs/tx/swap-coldkey-announced.mdx +++ b/docs/tx/swap-coldkey-announced.mdx @@ -15,7 +15,7 @@ future operations sign with the new coldkey. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.swap_coldkey_announced`](/code/pallets/subtensor/src/macros/dispatches.rs#L2023-L2045) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.swap_coldkey_announced`](/code/pallets/subtensor/src/macros/dispatches.rs#L2032-L2054) | ## Parameters @@ -64,7 +64,7 @@ result = sub.execute_tool("swap_coldkey_announced", {...}, wallet) ## On-chain implementation -`SubtensorModule.swap_coldkey_announced` — [`pallets/subtensor/src/macros/dispatches.rs#L2025`](/code/pallets/subtensor/src/macros/dispatches.rs#L2023-L2045): +`SubtensorModule.swap_coldkey_announced` — [`pallets/subtensor/src/macros/dispatches.rs#L2034`](/code/pallets/subtensor/src/macros/dispatches.rs#L2032-L2054): ```rust #[pallet::call_index(126)] diff --git a/docs/tx/swap-hotkey.mdx b/docs/tx/swap-hotkey.mdx index 9c91bca8ae..9649802c60 100644 --- a/docs/tx/swap-hotkey.mdx +++ b/docs/tx/swap-hotkey.mdx @@ -93,6 +93,6 @@ pub fn swap_hotkey( } ``` -Delegates to [`do_swap_hotkey`](/code/pallets/subtensor/src/swap/swap_hotkey.rs#L72). +Delegates to [`do_swap_hotkey`](/code/pallets/subtensor/src/swap/swap_hotkey.rs#L73). Every file is browsable under [/code](/code) exactly as built into the runtime, or as plain text under `/code/raw/` (index: [`/code/index.json`](/code/index.json)). diff --git a/docs/tx/swap-stake.mdx b/docs/tx/swap-stake.mdx index 76efc6d28e..889b42d387 100644 --- a/docs/tx/swap-stake.mdx +++ b/docs/tx/swap-stake.mdx @@ -18,7 +18,7 @@ only if you want to control each leg separately. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.swap_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1341-L1357), [`SubtensorModule.swap_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1489-L1509) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.swap_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1350-L1366), [`SubtensorModule.swap_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1498-L1518) | ## Parameters @@ -78,7 +78,7 @@ result = sub.execute_tool("swap_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.swap_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1343`](/code/pallets/subtensor/src/macros/dispatches.rs#L1341-L1357): +`SubtensorModule.swap_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1352`](/code/pallets/subtensor/src/macros/dispatches.rs#L1350-L1366): ```rust #[pallet::call_index(87)] @@ -102,7 +102,7 @@ pub fn swap_stake( Delegates to [`do_swap_stake`](/code/pallets/subtensor/src/staking/move_stake.rs#L260). -`SubtensorModule.swap_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1491`](/code/pallets/subtensor/src/macros/dispatches.rs#L1489-L1509): +`SubtensorModule.swap_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1500`](/code/pallets/subtensor/src/macros/dispatches.rs#L1498-L1518): ```rust #[pallet::call_index(90)] diff --git a/docs/tx/terminate-lease.mdx b/docs/tx/terminate-lease.mdx index a8a49297c1..125073c8a0 100644 --- a/docs/tx/terminate-lease.mdx +++ b/docs/tx/terminate-lease.mdx @@ -14,7 +14,7 @@ block with the `lease` read before calling. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.terminate_lease`](/code/pallets/subtensor/src/macros/dispatches.rs#L1694-L1702) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.terminate_lease`](/code/pallets/subtensor/src/macros/dispatches.rs#L1703-L1711) | ## Parameters @@ -64,7 +64,7 @@ result = sub.execute_tool("terminate_lease", {...}, wallet) ## On-chain implementation -`SubtensorModule.terminate_lease` — [`pallets/subtensor/src/macros/dispatches.rs#L1696`](/code/pallets/subtensor/src/macros/dispatches.rs#L1694-L1702): +`SubtensorModule.terminate_lease` — [`pallets/subtensor/src/macros/dispatches.rs#L1705`](/code/pallets/subtensor/src/macros/dispatches.rs#L1703-L1711): ```rust #[pallet::call_index(111)] diff --git a/docs/tx/transfer-stake.mdx b/docs/tx/transfer-stake.mdx index d4cd7aec91..9cf8b97da3 100644 --- a/docs/tx/transfer-stake.mdx +++ b/docs/tx/transfer-stake.mdx @@ -19,7 +19,7 @@ this as an unbounded spend and blocks it until the cap is raised. Use | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.transfer_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1299-L1317), [`SubtensorModule.transfer_stake_and_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L2383-L2403) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.transfer_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1308-L1326), [`SubtensorModule.transfer_stake_and_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L2400-L2420) | ## Parameters @@ -81,7 +81,7 @@ result = sub.execute_tool("transfer_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.transfer_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1301`](/code/pallets/subtensor/src/macros/dispatches.rs#L1299-L1317): +`SubtensorModule.transfer_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1310`](/code/pallets/subtensor/src/macros/dispatches.rs#L1308-L1326): ```rust #[pallet::call_index(86)] @@ -107,7 +107,7 @@ pub fn transfer_stake( Delegates to [`do_transfer_stake`](/code/pallets/subtensor/src/staking/move_stake.rs#L120). -`SubtensorModule.transfer_stake_and_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L2385`](/code/pallets/subtensor/src/macros/dispatches.rs#L2383-L2403): +`SubtensorModule.transfer_stake_and_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L2402`](/code/pallets/subtensor/src/macros/dispatches.rs#L2400-L2420): ```rust #[pallet::call_index(143)] diff --git a/docs/tx/unstake-all-alpha.mdx b/docs/tx/unstake-all-alpha.mdx index 16ed95e4f7..70ea233ea7 100644 --- a/docs/tx/unstake-all-alpha.mdx +++ b/docs/tx/unstake-all-alpha.mdx @@ -16,7 +16,7 @@ incur slippage. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all_alpha`](/code/pallets/subtensor/src/macros/dispatches.rs#L1234-L1238) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all_alpha`](/code/pallets/subtensor/src/macros/dispatches.rs#L1243-L1247) | ## Parameters @@ -65,7 +65,7 @@ result = sub.execute_tool("unstake_all_alpha", {...}, wallet) ## On-chain implementation -`SubtensorModule.unstake_all_alpha` — [`pallets/subtensor/src/macros/dispatches.rs#L1236`](/code/pallets/subtensor/src/macros/dispatches.rs#L1234-L1238): +`SubtensorModule.unstake_all_alpha` — [`pallets/subtensor/src/macros/dispatches.rs#L1245`](/code/pallets/subtensor/src/macros/dispatches.rs#L1243-L1247): ```rust #[pallet::call_index(84)] diff --git a/docs/tx/unstake-all.mdx b/docs/tx/unstake-all.mdx index 074ef43900..a079bc9e15 100644 --- a/docs/tx/unstake-all.mdx +++ b/docs/tx/unstake-all.mdx @@ -17,7 +17,7 @@ staked. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all`](/code/pallets/subtensor/src/macros/dispatches.rs#L1210-L1214) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all`](/code/pallets/subtensor/src/macros/dispatches.rs#L1219-L1223) | ## Parameters @@ -66,7 +66,7 @@ result = sub.execute_tool("unstake_all", {...}, wallet) ## On-chain implementation -`SubtensorModule.unstake_all` — [`pallets/subtensor/src/macros/dispatches.rs#L1212`](/code/pallets/subtensor/src/macros/dispatches.rs#L1210-L1214): +`SubtensorModule.unstake_all` — [`pallets/subtensor/src/macros/dispatches.rs#L1221`](/code/pallets/subtensor/src/macros/dispatches.rs#L1219-L1223): ```rust #[pallet::call_index(83)] diff --git a/docs/tx/update-symbol.mdx b/docs/tx/update-symbol.mdx index 2e61f1fe28..d2efc2309d 100644 --- a/docs/tx/update-symbol.mdx +++ b/docs/tx/update-symbol.mdx @@ -15,7 +15,7 @@ stake, and emissions are untouched. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.update_symbol`](/code/pallets/subtensor/src/macros/dispatches.rs#L1719-L1736) | +| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.update_symbol`](/code/pallets/subtensor/src/macros/dispatches.rs#L1728-L1745) | ## Parameters @@ -67,7 +67,7 @@ result = sub.execute_tool("update_symbol", {...}, wallet) ## On-chain implementation -`SubtensorModule.update_symbol` — [`pallets/subtensor/src/macros/dispatches.rs#L1721`](/code/pallets/subtensor/src/macros/dispatches.rs#L1719-L1736): +`SubtensorModule.update_symbol` — [`pallets/subtensor/src/macros/dispatches.rs#L1730`](/code/pallets/subtensor/src/macros/dispatches.rs#L1728-L1745): ```rust #[pallet::call_index(112)] diff --git a/pallets/subtensor/src/benchmarks/benchmarks.rs b/pallets/subtensor/src/benchmarks/benchmarks.rs index eae3bb44f3..10d0aa1b13 100644 --- a/pallets/subtensor/src/benchmarks/benchmarks.rs +++ b/pallets/subtensor/src/benchmarks/benchmarks.rs @@ -2956,6 +2956,22 @@ mod pallet_benchmarks { _(RawOrigin::Signed(coldkey.clone()), netuid, true); } + #[benchmark] + fn set_tempo() { + let caller: T::AccountId = whitelisted_caller(); + + #[extrinsic_call] + _(RawOrigin::Signed(caller), NetUid::from(1), u16::MAX); + } + + #[benchmark] + fn set_activity_cutoff_factor() { + let caller: T::AccountId = whitelisted_caller(); + + #[extrinsic_call] + _(RawOrigin::Signed(caller), NetUid::from(1), u32::MAX); + } + #[benchmark] fn set_reject_locked_alpha() { let coldkey: T::AccountId = whitelisted_caller(); diff --git a/pallets/subtensor/src/macros/dispatches.rs b/pallets/subtensor/src/macros/dispatches.rs index c4412e55bc..bb56b55e3d 100644 --- a/pallets/subtensor/src/macros/dispatches.rs +++ b/pallets/subtensor/src/macros/dispatches.rs @@ -861,7 +861,11 @@ mod dispatches { /// is transferred to the new hotkey. #[pallet::call_index(72)] #[pallet::weight(( - crate::Pallet::::swap_hotkey_v2_dispatch_weight(netuid, *keep_stake), + if netuid.is_none() || !*keep_stake { + ::WeightInfo::swap_hotkey_v2() + } else { + crate::Pallet::::swap_hotkey_v2_dispatch_weight(netuid, *keep_stake) + }, DispatchClass::Normal, Pays::Yes ))] @@ -2314,7 +2318,11 @@ mod dispatches { /// Use `AdminUtils::sudo_set_tempo` to change subnet tempo. #[deprecated(note = "Use `AdminUtils::sudo_set_tempo` instead")] #[pallet::call_index(139)] - #[pallet::weight((Weight::from_parts(0, 0), DispatchClass::Normal, Pays::Yes))] + #[pallet::weight(( + ::WeightInfo::set_tempo(), + DispatchClass::Normal, + Pays::Yes + ))] pub fn set_tempo(_origin: OriginFor, _netuid: NetUid, _tempo: u16) -> DispatchResult { Ok(()) } @@ -2324,7 +2332,11 @@ mod dispatches { /// Use `AdminUtils::sudo_set_activity_cutoff_factor` to change the factor. #[deprecated(note = "Use `AdminUtils::sudo_set_activity_cutoff_factor` instead")] #[pallet::call_index(140)] - #[pallet::weight((Weight::from_parts(0, 0), DispatchClass::Normal, Pays::Yes))] + #[pallet::weight(( + ::WeightInfo::set_activity_cutoff_factor(), + DispatchClass::Normal, + Pays::Yes + ))] pub fn set_activity_cutoff_factor( _origin: OriginFor, _netuid: NetUid, diff --git a/pallets/subtensor/src/swap/swap_hotkey.rs b/pallets/subtensor/src/swap/swap_hotkey.rs index 187dafef4e..4807051e29 100644 --- a/pallets/subtensor/src/swap/swap_hotkey.rs +++ b/pallets/subtensor/src/swap/swap_hotkey.rs @@ -17,7 +17,8 @@ impl Pallet { /// the single-subnet `keep_stake` path, which does not scan stake prefixes. pub fn swap_hotkey_v2_dispatch_weight(netuid: &Option, keep_stake: bool) -> Weight { if netuid.is_none() || !keep_stake { - <::WeightInfo as crate::weights::WeightInfo>::swap_hotkey() + <::WeightInfo as crate::weights::WeightInfo>::swap_hotkey_v2( + ) } else { // +1 read / +4 writes vs the pre-lineage keep_stake path: root lookup, // LastHotkeySwap, successor clear+insert, root insert. diff --git a/pallets/subtensor/src/tests/children.rs b/pallets/subtensor/src/tests/children.rs index 7e36eec7c1..46d0ffd9ba 100644 --- a/pallets/subtensor/src/tests/children.rs +++ b/pallets/subtensor/src/tests/children.rs @@ -3810,7 +3810,7 @@ fn test_dynamic_parent_child_relationships() { assert!((rel_stake_child1_0 - I96F32::from_num(50_000) / total_tao).abs() <= epsilon); assert!((rel_stake_child2_0 - I96F32::from_num(30_000) / total_tao).abs() <= epsilon); - mock_set_children(&coldkey_parent, &parent, netuid, &[(u64::MAX / 2, child1)]); + mock_set_children_no_epochs(netuid, &parent, &[(u64::MAX / 2, child1)]); step_block(2); @@ -3833,7 +3833,6 @@ fn test_dynamic_parent_child_relationships() { // Step blocks to allow for emission distribution step_block(11); - step_rate_limit(&TransactionType::SetChildren, netuid); // Get total stake after first payout let total_stake_1 = SubtensorModule::get_stake_for_hotkey_on_subnet(&parent, netuid) @@ -3842,10 +3841,9 @@ fn test_dynamic_parent_child_relationships() { log::info!("total_stake_1: {total_stake_1:?}"); // Change parent-child relationships - mock_set_children( - &coldkey_parent, - &parent, + mock_set_children_no_epochs( netuid, + &parent, &[(u64::MAX / 4, child1), (u64::MAX / 3, child2)], ); @@ -3863,8 +3861,8 @@ fn test_dynamic_parent_child_relationships() { let stake_child1_2 = SubtensorModule::get_inherited_for_hotkey_on_subnet(&child1, netuid); let stake_child2_2 = SubtensorModule::get_inherited_for_hotkey_on_subnet(&child2, netuid); let total_parent_stake = SubtensorModule::get_stake_for_hotkey_on_subnet(&parent, netuid); - let _total_child1_stake = SubtensorModule::get_stake_for_hotkey_on_subnet(&child1, netuid); - let _total_child2_stake = SubtensorModule::get_stake_for_hotkey_on_subnet(&child2, netuid); + let total_child1_stake = SubtensorModule::get_stake_for_hotkey_on_subnet(&child1, netuid); + let total_child2_stake = SubtensorModule::get_stake_for_hotkey_on_subnet(&child2, netuid); log::info!("Final stakes:"); log::info!("Parent stake: {stake_parent_2}"); @@ -3886,46 +3884,36 @@ fn test_dynamic_parent_child_relationships() { // Precise assertions with tolerance log::info!("total_emission: {total_emission:?}"); - let expected_parent_stake = ((I96F32::from_num(u64::from(stake_parent_0)) - + total_emission * rel_stake_parent_0) - * I96F32::from_num(5)) - / I96F32::from_num(12); + let expected_parent_stake = + I96F32::from_num(total_parent_stake) * I96F32::from_num(5) / I96F32::from_num(12); assert!( (I96F32::from_num(stake_parent_2) - expected_parent_stake).abs() / expected_parent_stake <= TOLERANCE, "Parent stake should be close to {expected_parent_stake:?}, but was {stake_parent_2}" ); - // Parent stake calculation: - // Initial stake: 500,000 - // First epoch: 1/2 parent_stake - // Second epoch: 5/12 parent_stake + // The final relationship leaves the parent with 1 - 1/4 - 1/3 = 5/12 + // of its current direct stake. - let expected_child1_stake = total_emission * rel_stake_child1_0 - + I96F32::from_num(stake_child1_0 + total_parent_stake / 4.into()); + let expected_child1_stake = I96F32::from_num(total_child1_stake) + + I96F32::from_num(total_parent_stake) / I96F32::from_num(4); assert!( (I96F32::from_num(stake_child1_2) - expected_child1_stake).abs() / expected_child1_stake <= TOLERANCE, "Child1 stake should be close to {expected_child1_stake:?}, but was {stake_child1_2}" ); - // Child1 stake calculation: - // Initial stake: 50,000 - // First epoch: 1/2 parent_stake + child1_stake - // Second epoch: 1/4 parent_stake + child1_stake + // Child1 inherits 1/4 of the parent's current direct stake. - let expected_child2_stake = total_emission * rel_stake_child2_0 - + I96F32::from_num(u64::from(stake_child2_0 + total_parent_stake / 3.into())); + let expected_child2_stake = I96F32::from_num(total_child2_stake) + + I96F32::from_num(total_parent_stake) / I96F32::from_num(3); assert!( (I96F32::from_num(stake_child2_2) - expected_child2_stake).abs() / expected_child2_stake <= TOLERANCE, "Child2 stake should be close to {expected_child2_stake:?}, but was {stake_child2_2}" ); - // Child2 stake calculation: - // Initial stake: 30,000 - // First epoch: child2_stake - // Second epoch: 1/3 parent_stake + child2_stake + // Child2 inherits 1/3 of the parent's current direct stake. // Additional checks for parent-child relationships let parent_children: Vec<(u64, U256)> = SubtensorModule::get_children(&parent, netuid); diff --git a/pallets/subtensor/src/tests/migration.rs b/pallets/subtensor/src/tests/migration.rs index fb66a2ed31..c9d8b51b9b 100644 --- a/pallets/subtensor/src/tests/migration.rs +++ b/pallets/subtensor/src/tests/migration.rs @@ -2965,9 +2965,12 @@ fn do_setup_unactive_sn() -> (Vec, Vec) { let hotkey_account_id = U256::from(1111); let burn_cost = SubtensorModule::get_burn(*netuid); // Registration requires keep-alive coverage above the burn (Preservation::Preserve). - let fund = burn_cost - .saturating_add(ExistentialDeposit::get()) - .saturating_add(10.into()); + let fund = TaoBalance::from( + u64::from(burn_cost) + .checked_add(u64::from(ExistentialDeposit::get())) + .and_then(|value| value.checked_add(10)) + .expect("burn funding overflow"), + ); add_balance_to_coldkey_account(&coldkey_account_id, fund); TotalIssuance::::mutate(|total_issuance| { let updated_total = u64::from(*total_issuance) diff --git a/pallets/subtensor/src/weights.rs b/pallets/subtensor/src/weights.rs index d3349d71fb..6165719b16 100644 --- a/pallets/subtensor/src/weights.rs +++ b/pallets/subtensor/src/weights.rs @@ -124,6 +124,8 @@ pub trait WeightInfo { fn sudo_set_voting_power_ema_alpha() -> Weight; fn register_limit() -> Weight; fn set_perpetual_lock() -> Weight; + fn set_tempo() -> Weight; + fn set_activity_cutoff_factor() -> Weight; fn set_reject_locked_alpha() -> Weight; } @@ -3748,6 +3750,20 @@ impl WeightInfo for SubstrateWeight { .saturating_add(T::DbWeight::get().reads(11_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } + fn set_tempo() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 783_000 picoseconds. + Weight::from_parts(887_000, 0) + } + fn set_activity_cutoff_factor() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 803_000 picoseconds. + Weight::from_parts(891_000, 0) + } /// Storage: `SubtensorModule::AccountFlags` (r:1 w:1) /// Proof: `SubtensorModule::AccountFlags` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_reject_locked_alpha() -> Weight { @@ -7381,6 +7397,20 @@ impl WeightInfo for () { .saturating_add(RocksDbWeight::get().reads(11_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } + fn set_tempo() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 783_000 picoseconds. + Weight::from_parts(887_000, 0) + } + fn set_activity_cutoff_factor() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 803_000 picoseconds. + Weight::from_parts(891_000, 0) + } /// Storage: `SubtensorModule::AccountFlags` (r:1 w:1) /// Proof: `SubtensorModule::AccountFlags` (`max_values`: None, `max_size`: None, mode: `Measured`) fn set_reject_locked_alpha() -> Weight { diff --git a/website/apps/bittensor-website/public/catalog/errors.json b/website/apps/bittensor-website/public/catalog/errors.json index bc4a790569..d5907248dd 100644 --- a/website/apps/bittensor-website/public/catalog/errors.json +++ b/website/apps/bittensor-website/public/catalog/errors.json @@ -123,8 +123,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 333, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L333", + "line": 343, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L343", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -141,8 +141,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 311, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L311", + "line": 321, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L321", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -159,8 +159,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 321, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L321", + "line": 331, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L331", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -195,8 +195,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 293, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L293", + "line": 303, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L303", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -213,8 +213,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 243, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L243", + "line": 253, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L253", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -429,8 +429,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 327, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L327", + "line": 337, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L337", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -492,8 +492,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 239, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L239", + "line": 249, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L249", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -636,8 +636,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 261, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L261", + "line": 271, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L271", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -699,8 +699,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 313, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L313", + "line": 323, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L323", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -798,8 +798,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 273, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L273", + "line": 283, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L283", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -879,8 +879,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 344, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L344", + "line": 354, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L354", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -897,8 +897,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 348, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L348", + "line": 358, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L358", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -933,8 +933,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 295, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L295", + "line": 305, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L305", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -969,8 +969,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 299, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L299", + "line": 309, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L309", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -987,8 +987,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 297, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L297", + "line": 307, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L307", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1367,8 +1367,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 287, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L287", + "line": 297, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L297", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" }, { @@ -1399,8 +1399,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 301, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L301", + "line": 311, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L311", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1525,8 +1525,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 331, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L331", + "line": 341, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L341", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1552,8 +1552,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 324, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L324", + "line": 334, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L334", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1570,8 +1570,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 263, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L263", + "line": 273, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L273", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1588,8 +1588,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 265, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L265", + "line": 275, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L275", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1633,8 +1633,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 241, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L241", + "line": 251, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L251", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1912,8 +1912,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 249, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L249", + "line": 259, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L259", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2002,8 +2002,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 339, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L339", + "line": 349, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L349", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2091,8 +2091,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 307, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L307", + "line": 317, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L317", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2388,8 +2388,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 275, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L275", + "line": 285, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L285", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2478,8 +2478,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 251, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L251", + "line": 261, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L261", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2496,8 +2496,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 277, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L277", + "line": 287, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L287", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2588,8 +2588,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 279, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L279", + "line": 289, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L289", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2625,8 +2625,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 257, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L257", + "line": 267, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L267", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" }, { @@ -2650,8 +2650,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 285, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L285", + "line": 295, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L295", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2848,8 +2848,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 305, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L305", + "line": 315, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L315", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2866,8 +2866,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 335, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L335", + "line": 345, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L345", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -3225,8 +3225,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 291, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L291", + "line": 301, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L301", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -3378,8 +3378,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 309, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L309", + "line": 319, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L319", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -3966,8 +3966,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 237, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L237", + "line": 247, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L247", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" }, { @@ -4189,8 +4189,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 303, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L303", + "line": 313, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L313", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4315,8 +4315,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 253, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L253", + "line": 263, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L263", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4333,8 +4333,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 255, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L255", + "line": 265, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L265", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4405,8 +4405,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 267, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L267", + "line": 277, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L277", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4594,8 +4594,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 337, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L337", + "line": 347, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L347", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4675,8 +4675,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 289, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L289", + "line": 299, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L299", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4711,8 +4711,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 259, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L259", + "line": 269, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L269", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4809,8 +4809,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 247, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L247", + "line": 257, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L257", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4827,8 +4827,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 245, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L245", + "line": 255, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L255", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4854,8 +4854,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 319, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L319", + "line": 329, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L329", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -5089,8 +5089,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 281, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L281", + "line": 291, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L291", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -5188,8 +5188,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 271, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L271", + "line": 281, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L281", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -5242,8 +5242,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 269, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L269", + "line": 279, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L279", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -5405,8 +5405,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 315, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L315", + "line": 325, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L325", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -5513,8 +5513,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 283, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L283", + "line": 293, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L293", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -5531,8 +5531,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 317, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L317", + "line": 327, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L327", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] diff --git a/website/apps/bittensor-website/public/catalog/intents.json b/website/apps/bittensor-website/public/catalog/intents.json index f9f7504515..432c523211 100644 --- a/website/apps/bittensor-website/public/catalog/intents.json +++ b/website/apps/bittensor-website/public/catalog/intents.json @@ -56,9 +56,9 @@ "pallet": "SubtensorModule", "call": "add_collateral", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2443, - "end_line": 2451, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2441-L2451", + "line": 2460, + "end_line": 2468, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2458-L2468", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -188,9 +188,9 @@ "pallet": "SubtensorModule", "call": "add_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1393, - "end_line": 1410, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1391-L1410", + "line": 1402, + "end_line": 1419, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1400-L1419", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -258,9 +258,9 @@ "pallet": "SubtensorModule", "call": "add_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1393, - "end_line": 1410, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1391-L1410", + "line": 1402, + "end_line": 1419, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1400-L1419", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -300,9 +300,9 @@ "pallet": "SubtensorModule", "call": "announce_coldkey_swap", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1987, - "end_line": 2013, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1985-L2013", + "line": 1996, + "end_line": 2022, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1994-L2022", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -357,9 +357,9 @@ "pallet": "SubtensorModule", "call": "associate_evm_key", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1579, - "end_line": 1587, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1573-L1587", + "line": 1588, + "end_line": 1596, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1582-L1596", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -397,9 +397,9 @@ "pallet": "SubtensorModule", "call": "try_associate_hotkey", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1521, - "end_line": 1527, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1519-L1527", + "line": 1530, + "end_line": 1536, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1528-L1536", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -530,9 +530,9 @@ "pallet": "SubtensorModule", "call": "claim_root", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1891, - "end_line": 1907, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1889-L1907", + "line": 1900, + "end_line": 1916, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1898-L1916", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -565,9 +565,9 @@ "pallet": "SubtensorModule", "call": "clear_coldkey_swap_announcement", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2186, - "end_line": 2201, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2184-L2201", + "line": 2195, + "end_line": 2210, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2193-L2210", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -633,9 +633,9 @@ "pallet": "SubtensorModule", "call": "commit_timelocked_mechanism_weights", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1852, - "end_line": 1868, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1850-L1868", + "line": 1861, + "end_line": 1877, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1859-L1877", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -914,9 +914,9 @@ "pallet": "SubtensorModule", "call": "dispute_coldkey_swap", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2056, - "end_line": 2073, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2054-L2073", + "line": 2065, + "end_line": 2082, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2063-L2082", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1318,9 +1318,9 @@ "pallet": "SubtensorModule", "call": "lock_stake", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2258, - "end_line": 2266, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2256-L2266", + "line": 2267, + "end_line": 2275, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2265-L2275", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1365,9 +1365,9 @@ "pallet": "SubtensorModule", "call": "move_lock", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2282, - "end_line": 2289, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2280-L2289", + "line": 2291, + "end_line": 2298, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2289-L2298", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1436,9 +1436,9 @@ "pallet": "SubtensorModule", "call": "move_stake", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1257, - "end_line": 1273, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1255-L1273", + "line": 1266, + "end_line": 1282, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1264-L1282", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1700,9 +1700,9 @@ "pallet": "SubtensorModule", "call": "register_leased_network", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1673, - "end_line": 1679, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1671-L1679", + "line": 1682, + "end_line": 1688, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1680-L1688", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1740,9 +1740,9 @@ "pallet": "SubtensorModule", "call": "register_network", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1004, - "end_line": 1006, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1002-L1006", + "line": 1008, + "end_line": 1010, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1006-L1010", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1913,9 +1913,9 @@ "pallet": "SubtensorModule", "call": "remove_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1446, - "end_line": 1462, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1444-L1462", + "line": 1455, + "end_line": 1471, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1453-L1471", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1989,9 +1989,9 @@ "pallet": "SubtensorModule", "call": "remove_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1446, - "end_line": 1462, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1444-L1462", + "line": 1455, + "end_line": 1471, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1453-L1471", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -2368,9 +2368,9 @@ "pallet": "SubtensorModule", "call": "set_coldkey_auto_stake_hotkey", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1786, - "end_line": 1826, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1784-L1826", + "line": 1795, + "end_line": 1835, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1793-L1835", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -2423,9 +2423,9 @@ "pallet": "SubtensorModule", "call": "set_childkey_take", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 927, - "end_line": 937, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L925-L937", + "line": 931, + "end_line": 941, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L929-L941", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -2474,9 +2474,9 @@ "pallet": "SubtensorModule", "call": "set_children", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1079, - "end_line": 1087, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1077-L1087", + "line": 1088, + "end_line": 1096, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1081-L1096", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3041,9 +3041,9 @@ "pallet": "SubtensorModule", "call": "set_identity", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1120, - "end_line": 1140, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1118-L1140", + "line": 1129, + "end_line": 1149, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1127-L1149", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3148,9 +3148,9 @@ "pallet": "SubtensorModule", "call": "set_min_collateral", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2478, - "end_line": 2485, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2476-L2485", + "line": 2495, + "end_line": 2502, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2493-L2502", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3195,9 +3195,9 @@ "pallet": "SubtensorModule", "call": "set_perpetual_lock", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2298, - "end_line": 2305, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2296-L2305", + "line": 2307, + "end_line": 2314, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2305-L2314", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3239,9 +3239,9 @@ "pallet": "SubtensorModule", "call": "set_root_claim_type", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1918, - "end_line": 1932, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1916-L1932", + "line": 1927, + "end_line": 1941, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1925-L1941", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3368,9 +3368,9 @@ "pallet": "SubtensorModule", "call": "set_subnet_identity", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1155, - "end_line": 1179, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1153-L1179", + "line": 1164, + "end_line": 1188, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1162-L1188", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3508,9 +3508,9 @@ "pallet": "SubtensorModule", "call": "commit_timelocked_mechanism_weights", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1852, - "end_line": 1868, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1850-L1868", + "line": 1861, + "end_line": 1877, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1859-L1877", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3573,9 +3573,9 @@ "pallet": "SubtensorModule", "call": "add_stake_burn", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2170, - "end_line": 2178, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2168-L2178", + "line": 2179, + "end_line": 2187, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2177-L2187", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3615,9 +3615,9 @@ "pallet": "SubtensorModule", "call": "start_call", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1539, - "end_line": 1542, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1537-L1542", + "line": 1548, + "end_line": 1551, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1546-L1551", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3657,9 +3657,9 @@ "pallet": "SubtensorModule", "call": "swap_coldkey_announced", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2025, - "end_line": 2045, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2023-L2045", + "line": 2034, + "end_line": 2054, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2032-L2054", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3785,18 +3785,18 @@ "pallet": "SubtensorModule", "call": "swap_stake", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1343, - "end_line": 1357, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1341-L1357", + "line": 1352, + "end_line": 1366, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1350-L1366", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" }, { "pallet": "SubtensorModule", "call": "swap_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1491, - "end_line": 1509, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1489-L1509", + "line": 1500, + "end_line": 1518, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1498-L1518", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3840,9 +3840,9 @@ "pallet": "SubtensorModule", "call": "terminate_lease", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1696, - "end_line": 1702, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1694-L1702", + "line": 1705, + "end_line": 1711, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1703-L1711", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -4017,18 +4017,18 @@ "pallet": "SubtensorModule", "call": "transfer_stake", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1301, - "end_line": 1317, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1299-L1317", + "line": 1310, + "end_line": 1326, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1308-L1326", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" }, { "pallet": "SubtensorModule", "call": "transfer_stake_and_hotkey", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2385, - "end_line": 2403, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2383-L2403", + "line": 2402, + "end_line": 2420, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2400-L2420", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -4115,9 +4115,9 @@ "pallet": "SubtensorModule", "call": "unstake_all", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1212, - "end_line": 1214, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1210-L1214", + "line": 1221, + "end_line": 1223, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1219-L1223", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -4157,9 +4157,9 @@ "pallet": "SubtensorModule", "call": "unstake_all_alpha", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1236, - "end_line": 1238, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1234-L1238", + "line": 1245, + "end_line": 1247, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1243-L1247", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -4363,9 +4363,9 @@ "pallet": "SubtensorModule", "call": "update_symbol", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1721, - "end_line": 1736, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1719-L1736", + "line": 1730, + "end_line": 1745, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1728-L1745", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] diff --git a/website/apps/bittensor-website/public/catalog/reads.json b/website/apps/bittensor-website/public/catalog/reads.json index 0ea01dbe5f..b4142b709e 100644 --- a/website/apps/bittensor-website/public/catalog/reads.json +++ b/website/apps/bittensor-website/public/catalog/reads.json @@ -42,9 +42,9 @@ "container": "SwapRuntimeApi", "name": "current_alpha_price_all", "path": "runtime/src/lib.rs", - "line": 2425, - "end_line": 2435, - "url": "/code/runtime/src/lib.rs#L2425-L2435", + "line": 2426, + "end_line": 2436, + "url": "/code/runtime/src/lib.rs#L2426-L2436", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -71,8 +71,8 @@ "container": "SubtensorModule", "name": "AssociatedEvmAddress", "path": "pallets/subtensor/src/lib.rs", - "line": 2745, - "url": "/code/pallets/subtensor/src/lib.rs#L2745", + "line": 2748, + "url": "/code/pallets/subtensor/src/lib.rs#L2748", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -99,8 +99,8 @@ "container": "SubtensorModule", "name": "AutoStakeDestination", "path": "pallets/subtensor/src/lib.rs", - "line": 1564, - "url": "/code/pallets/subtensor/src/lib.rs#L1564", + "line": 1567, + "url": "/code/pallets/subtensor/src/lib.rs#L1567", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -125,8 +125,8 @@ "container": "SubtensorModule", "name": "AutoStakeDestination", "path": "pallets/subtensor/src/lib.rs", - "line": 1564, - "url": "/code/pallets/subtensor/src/lib.rs#L1564", + "line": 1567, + "url": "/code/pallets/subtensor/src/lib.rs#L1567", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -221,8 +221,8 @@ "container": "SubtensorModule", "name": "BlocksSinceLastStep", "path": "pallets/subtensor/src/lib.rs", - "line": 2094, - "url": "/code/pallets/subtensor/src/lib.rs#L2094", + "line": 2097, + "url": "/code/pallets/subtensor/src/lib.rs#L2097", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -249,8 +249,8 @@ "container": "SubtensorModule", "name": "LastUpdate", "path": "pallets/subtensor/src/lib.rs", - "line": 2477, - "url": "/code/pallets/subtensor/src/lib.rs#L2477", + "line": 2480, + "url": "/code/pallets/subtensor/src/lib.rs#L2480", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -275,9 +275,9 @@ "container": "SubnetInfoRuntimeApi", "name": "get_next_epoch_start_block", "path": "pallets/subtensor/src/coinbase/run_coinbase.rs", - "line": 1183, - "end_line": 1197, - "url": "/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1183-L1197", + "line": 1196, + "end_line": 1210, + "url": "/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1196-L1210", "raw_url": "/code/raw/pallets/subtensor/src/coinbase/run_coinbase.rs" } ] @@ -304,8 +304,8 @@ "container": "SubtensorModule", "name": "Bonds", "path": "pallets/subtensor/src/lib.rs", - "line": 2505, - "url": "/code/pallets/subtensor/src/lib.rs#L2505", + "line": 2508, + "url": "/code/pallets/subtensor/src/lib.rs#L2508", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -330,8 +330,8 @@ "container": "SubtensorModule", "name": "Burn", "path": "pallets/subtensor/src/lib.rs", - "line": 2248, - "url": "/code/pallets/subtensor/src/lib.rs#L2248", + "line": 2251, + "url": "/code/pallets/subtensor/src/lib.rs#L2251", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -358,8 +358,8 @@ "container": "SubtensorModule", "name": "ChildKeys", "path": "pallets/subtensor/src/lib.rs", - "line": 1387, - "url": "/code/pallets/subtensor/src/lib.rs#L1387", + "line": 1390, + "url": "/code/pallets/subtensor/src/lib.rs#L1390", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -386,8 +386,8 @@ "container": "SubtensorModule", "name": "Lock", "path": "pallets/subtensor/src/lib.rs", - "line": 1687, - "url": "/code/pallets/subtensor/src/lib.rs#L1687", + "line": 1690, + "url": "/code/pallets/subtensor/src/lib.rs#L1690", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -412,8 +412,8 @@ "container": "SubtensorModule", "name": "ColdkeySwapAnnouncements", "path": "pallets/subtensor/src/lib.rs", - "line": 1599, - "url": "/code/pallets/subtensor/src/lib.rs#L1599", + "line": 1602, + "url": "/code/pallets/subtensor/src/lib.rs#L1602", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -421,8 +421,8 @@ "container": "SubtensorModule", "name": "ColdkeySwapDisputes", "path": "pallets/subtensor/src/lib.rs", - "line": 1605, - "url": "/code/pallets/subtensor/src/lib.rs#L1605", + "line": 1608, + "url": "/code/pallets/subtensor/src/lib.rs#L1608", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -462,8 +462,8 @@ "container": "SubtensorModule", "name": "CommitRevealWeightsEnabled", "path": "pallets/subtensor/src/lib.rs", - "line": 2243, - "url": "/code/pallets/subtensor/src/lib.rs#L2243", + "line": 2246, + "url": "/code/pallets/subtensor/src/lib.rs#L2246", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -632,8 +632,8 @@ "container": "SubtensorModule", "name": "Delegates", "path": "pallets/subtensor/src/lib.rs", - "line": 1357, - "url": "/code/pallets/subtensor/src/lib.rs#L1357", + "line": 1360, + "url": "/code/pallets/subtensor/src/lib.rs#L1360", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -641,8 +641,8 @@ "container": "SubtensorModule", "name": "MinDelegateTake", "path": "pallets/subtensor/src/lib.rs", - "line": 1330, - "url": "/code/pallets/subtensor/src/lib.rs#L1330", + "line": 1333, + "url": "/code/pallets/subtensor/src/lib.rs#L1333", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -650,8 +650,8 @@ "container": "SubtensorModule", "name": "MaxDelegateTake", "path": "pallets/subtensor/src/lib.rs", - "line": 1326, - "url": "/code/pallets/subtensor/src/lib.rs#L1326", + "line": 1329, + "url": "/code/pallets/subtensor/src/lib.rs#L1329", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -726,8 +726,8 @@ "container": "SubtensorModule", "name": "Difficulty", "path": "pallets/subtensor/src/lib.rs", - "line": 2252, - "url": "/code/pallets/subtensor/src/lib.rs#L2252", + "line": 2255, + "url": "/code/pallets/subtensor/src/lib.rs#L2255", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -752,8 +752,8 @@ "container": "SubtensorModule", "name": "Tempo", "path": "pallets/subtensor/src/lib.rs", - "line": 1952, - "url": "/code/pallets/subtensor/src/lib.rs#L1952", + "line": 1955, + "url": "/code/pallets/subtensor/src/lib.rs#L1955", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -761,8 +761,8 @@ "container": "SubtensorModule", "name": "LastEpochBlock", "path": "pallets/subtensor/src/lib.rs", - "line": 1977, - "url": "/code/pallets/subtensor/src/lib.rs#L1977", + "line": 1980, + "url": "/code/pallets/subtensor/src/lib.rs#L1980", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -770,8 +770,8 @@ "container": "SubtensorModule", "name": "BlocksSinceLastStep", "path": "pallets/subtensor/src/lib.rs", - "line": 2094, - "url": "/code/pallets/subtensor/src/lib.rs#L2094", + "line": 2097, + "url": "/code/pallets/subtensor/src/lib.rs#L2097", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -779,8 +779,8 @@ "container": "SubtensorModule", "name": "PendingEpochAt", "path": "pallets/subtensor/src/lib.rs", - "line": 1983, - "url": "/code/pallets/subtensor/src/lib.rs#L1983", + "line": 1986, + "url": "/code/pallets/subtensor/src/lib.rs#L1986", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -788,8 +788,8 @@ "container": "SubtensorModule", "name": "SubnetEpochIndex", "path": "pallets/subtensor/src/lib.rs", - "line": 1989, - "url": "/code/pallets/subtensor/src/lib.rs#L1989", + "line": 1992, + "url": "/code/pallets/subtensor/src/lib.rs#L1992", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -797,9 +797,9 @@ "container": "SubnetInfoRuntimeApi", "name": "get_next_epoch_start_block", "path": "pallets/subtensor/src/coinbase/run_coinbase.rs", - "line": 1183, - "end_line": 1197, - "url": "/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1183-L1197", + "line": 1196, + "end_line": 1210, + "url": "/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1196-L1210", "raw_url": "/code/raw/pallets/subtensor/src/coinbase/run_coinbase.rs" } ] @@ -820,8 +820,8 @@ "container": "Balances", "name": "ExistentialDeposit", "path": "runtime/src/lib.rs", - "line": 476, - "url": "/code/runtime/src/lib.rs#L476", + "line": 477, + "url": "/code/runtime/src/lib.rs#L477", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -848,9 +848,9 @@ "container": "StakeInfoRuntimeApi", "name": "get_hotkey_conviction", "path": "runtime/src/lib.rs", - "line": 2338, - "end_line": 2340, - "url": "/code/runtime/src/lib.rs#L2338-L2340", + "line": 2339, + "end_line": 2341, + "url": "/code/runtime/src/lib.rs#L2339-L2341", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -875,8 +875,8 @@ "container": "SubtensorModule", "name": "Owner", "path": "pallets/subtensor/src/lib.rs", - "line": 1347, - "url": "/code/pallets/subtensor/src/lib.rs#L1347", + "line": 1350, + "url": "/code/pallets/subtensor/src/lib.rs#L1350", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -884,8 +884,8 @@ "container": "SubtensorModule", "name": "IdentitiesV2", "path": "pallets/subtensor/src/lib.rs", - "line": 2567, - "url": "/code/pallets/subtensor/src/lib.rs#L2567", + "line": 2570, + "url": "/code/pallets/subtensor/src/lib.rs#L2570", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -910,8 +910,8 @@ "container": "SubtensorModule", "name": "Owner", "path": "pallets/subtensor/src/lib.rs", - "line": 1347, - "url": "/code/pallets/subtensor/src/lib.rs#L1347", + "line": 1350, + "url": "/code/pallets/subtensor/src/lib.rs#L1350", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -936,8 +936,8 @@ "container": "SubtensorModule", "name": "IdentitiesV2", "path": "pallets/subtensor/src/lib.rs", - "line": 2567, - "url": "/code/pallets/subtensor/src/lib.rs#L2567", + "line": 2570, + "url": "/code/pallets/subtensor/src/lib.rs#L2570", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -962,8 +962,8 @@ "container": "SubtensorModule", "name": "ImmunityPeriod", "path": "pallets/subtensor/src/lib.rs", - "line": 2162, - "url": "/code/pallets/subtensor/src/lib.rs#L2162", + "line": 2165, + "url": "/code/pallets/subtensor/src/lib.rs#L2165", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1026,8 +1026,8 @@ "container": "SubtensorModule", "name": "SubnetLeases", "path": "pallets/subtensor/src/lib.rs", - "line": 2763, - "url": "/code/pallets/subtensor/src/lib.rs#L2763", + "line": 2766, + "url": "/code/pallets/subtensor/src/lib.rs#L2766", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1048,8 +1048,8 @@ "container": "SubtensorModule", "name": "SubnetLeases", "path": "pallets/subtensor/src/lib.rs", - "line": 2763, - "url": "/code/pallets/subtensor/src/lib.rs#L2763", + "line": 2766, + "url": "/code/pallets/subtensor/src/lib.rs#L2766", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1074,8 +1074,8 @@ "container": "SubtensorModule", "name": "Lock", "path": "pallets/subtensor/src/lib.rs", - "line": 1687, - "url": "/code/pallets/subtensor/src/lib.rs#L1687", + "line": 1690, + "url": "/code/pallets/subtensor/src/lib.rs#L1690", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1100,8 +1100,8 @@ "container": "SubtensorModule", "name": "MaxWeightsLimit", "path": "pallets/subtensor/src/lib.rs", - "line": 2178, - "url": "/code/pallets/subtensor/src/lib.rs#L2178", + "line": 2181, + "url": "/code/pallets/subtensor/src/lib.rs#L2181", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1126,8 +1126,8 @@ "container": "SubtensorModule", "name": "MechanismCountCurrent", "path": "pallets/subtensor/src/lib.rs", - "line": 2837, - "url": "/code/pallets/subtensor/src/lib.rs#L2837", + "line": 2863, + "url": "/code/pallets/subtensor/src/lib.rs#L2863", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1152,8 +1152,8 @@ "container": "SubtensorModule", "name": "MechanismEmissionSplit", "path": "pallets/subtensor/src/lib.rs", - "line": 2842, - "url": "/code/pallets/subtensor/src/lib.rs#L2842", + "line": 2868, + "url": "/code/pallets/subtensor/src/lib.rs#L2868", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1226,8 +1226,8 @@ "container": "SubtensorModule", "name": "MinAllowedWeights", "path": "pallets/subtensor/src/lib.rs", - "line": 2188, - "url": "/code/pallets/subtensor/src/lib.rs#L2188", + "line": 2191, + "url": "/code/pallets/subtensor/src/lib.rs#L2191", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1256,8 +1256,8 @@ "container": "SubtensorModule", "name": "Owner", "path": "pallets/subtensor/src/lib.rs", - "line": 1347, - "url": "/code/pallets/subtensor/src/lib.rs#L1347", + "line": 1350, + "url": "/code/pallets/subtensor/src/lib.rs#L1350", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1282,9 +1282,9 @@ "container": "StakeInfoRuntimeApi", "name": "get_most_convicted_hotkey_on_subnet", "path": "runtime/src/lib.rs", - "line": 2342, - "end_line": 2344, - "url": "/code/runtime/src/lib.rs#L2342-L2344", + "line": 2343, + "end_line": 2345, + "url": "/code/runtime/src/lib.rs#L2343-L2345", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -1333,8 +1333,8 @@ "container": "SubtensorModule", "name": "IsNetworkMember", "path": "pallets/subtensor/src/lib.rs", - "line": 2020, - "url": "/code/pallets/subtensor/src/lib.rs#L2020", + "line": 2023, + "url": "/code/pallets/subtensor/src/lib.rs#L2023", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1398,9 +1398,9 @@ "container": "SubnetInfoRuntimeApi", "name": "get_next_epoch_start_block", "path": "pallets/subtensor/src/coinbase/run_coinbase.rs", - "line": 1183, - "end_line": 1197, - "url": "/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1183-L1197", + "line": 1196, + "end_line": 1210, + "url": "/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1196-L1210", "raw_url": "/code/raw/pallets/subtensor/src/coinbase/run_coinbase.rs" } ] @@ -1425,8 +1425,8 @@ "container": "SubtensorModule", "name": "OwnedHotkeys", "path": "pallets/subtensor/src/lib.rs", - "line": 1559, - "url": "/code/pallets/subtensor/src/lib.rs#L1559", + "line": 1562, + "url": "/code/pallets/subtensor/src/lib.rs#L1562", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1453,8 +1453,8 @@ "container": "SubtensorModule", "name": "ParentKeys", "path": "pallets/subtensor/src/lib.rs", - "line": 1400, - "url": "/code/pallets/subtensor/src/lib.rs#L1400", + "line": 1403, + "url": "/code/pallets/subtensor/src/lib.rs#L1403", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1481,8 +1481,8 @@ "container": "SubtensorModule", "name": "PendingChildKeys", "path": "pallets/subtensor/src/lib.rs", - "line": 1374, - "url": "/code/pallets/subtensor/src/lib.rs#L1374", + "line": 1377, + "url": "/code/pallets/subtensor/src/lib.rs#L1377", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1535,9 +1535,9 @@ "container": "SwapRuntimeApi", "name": "sim_swap_tao_for_alpha", "path": "runtime/src/lib.rs", - "line": 2437, - "end_line": 2465, - "url": "/code/runtime/src/lib.rs#L2437-L2465", + "line": 2438, + "end_line": 2466, + "url": "/code/runtime/src/lib.rs#L2438-L2466", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -1564,9 +1564,9 @@ "container": "SwapRuntimeApi", "name": "sim_swap_alpha_for_tao", "path": "runtime/src/lib.rs", - "line": 2467, - "end_line": 2495, - "url": "/code/runtime/src/lib.rs#L2467-L2495", + "line": 2468, + "end_line": 2496, + "url": "/code/runtime/src/lib.rs#L2468-L2496", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -1591,8 +1591,8 @@ "container": "SubtensorModule", "name": "RevealPeriodEpochs", "path": "pallets/subtensor/src/lib.rs", - "line": 2680, - "url": "/code/pallets/subtensor/src/lib.rs#L2680", + "line": 2683, + "url": "/code/pallets/subtensor/src/lib.rs#L2683", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1645,8 +1645,8 @@ "container": "SubtensorModule", "name": "RootClaimType", "path": "pallets/subtensor/src/lib.rs", - "line": 2722, - "url": "/code/pallets/subtensor/src/lib.rs#L2722", + "line": 2725, + "url": "/code/pallets/subtensor/src/lib.rs#L2725", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1810,8 +1810,8 @@ "container": "SubtensorModule", "name": "StakingHotkeys", "path": "pallets/subtensor/src/lib.rs", - "line": 1554, - "url": "/code/pallets/subtensor/src/lib.rs#L1554", + "line": 1557, + "url": "/code/pallets/subtensor/src/lib.rs#L1557", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1836,8 +1836,8 @@ "container": "SubtensorModule", "name": "Tempo", "path": "pallets/subtensor/src/lib.rs", - "line": 1952, - "url": "/code/pallets/subtensor/src/lib.rs#L1952", + "line": 1955, + "url": "/code/pallets/subtensor/src/lib.rs#L1955", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1845,8 +1845,8 @@ "container": "SubtensorModule", "name": "Burn", "path": "pallets/subtensor/src/lib.rs", - "line": 2248, - "url": "/code/pallets/subtensor/src/lib.rs#L2248", + "line": 2251, + "url": "/code/pallets/subtensor/src/lib.rs#L2251", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1854,8 +1854,8 @@ "container": "SubtensorModule", "name": "SubnetworkN", "path": "pallets/subtensor/src/lib.rs", - "line": 2011, - "url": "/code/pallets/subtensor/src/lib.rs#L2011", + "line": 2014, + "url": "/code/pallets/subtensor/src/lib.rs#L2014", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1880,8 +1880,8 @@ "container": "SubtensorModule", "name": "Uids", "path": "pallets/subtensor/src/lib.rs", - "line": 2430, - "url": "/code/pallets/subtensor/src/lib.rs#L2430", + "line": 2433, + "url": "/code/pallets/subtensor/src/lib.rs#L2433", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1906,8 +1906,8 @@ "container": "SubtensorModule", "name": "HotkeyLock", "path": "pallets/subtensor/src/lib.rs", - "line": 1713, - "url": "/code/pallets/subtensor/src/lib.rs#L1713", + "line": 1716, + "url": "/code/pallets/subtensor/src/lib.rs#L1716", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1915,8 +1915,8 @@ "container": "SubtensorModule", "name": "DecayingHotkeyLock", "path": "pallets/subtensor/src/lib.rs", - "line": 1725, - "url": "/code/pallets/subtensor/src/lib.rs#L1725", + "line": 1728, + "url": "/code/pallets/subtensor/src/lib.rs#L1728", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1924,8 +1924,8 @@ "container": "SubtensorModule", "name": "OwnerLock", "path": "pallets/subtensor/src/lib.rs", - "line": 1737, - "url": "/code/pallets/subtensor/src/lib.rs#L1737", + "line": 1740, + "url": "/code/pallets/subtensor/src/lib.rs#L1740", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1933,8 +1933,8 @@ "container": "SubtensorModule", "name": "DecayingOwnerLock", "path": "pallets/subtensor/src/lib.rs", - "line": 1741, - "url": "/code/pallets/subtensor/src/lib.rs#L1741", + "line": 1744, + "url": "/code/pallets/subtensor/src/lib.rs#L1744", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1942,8 +1942,8 @@ "container": "SubtensorModule", "name": "SubnetOwnerHotkey", "path": "pallets/subtensor/src/lib.rs", - "line": 2109, - "url": "/code/pallets/subtensor/src/lib.rs#L2109", + "line": 2112, + "url": "/code/pallets/subtensor/src/lib.rs#L2112", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1951,8 +1951,8 @@ "container": "SubtensorModule", "name": "SubnetAlphaOut", "path": "pallets/subtensor/src/lib.rs", - "line": 1545, - "url": "/code/pallets/subtensor/src/lib.rs#L1545", + "line": 1548, + "url": "/code/pallets/subtensor/src/lib.rs#L1548", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1960,8 +1960,8 @@ "container": "SubtensorModule", "name": "UnlockRate", "path": "pallets/subtensor/src/lib.rs", - "line": 1779, - "url": "/code/pallets/subtensor/src/lib.rs#L1779", + "line": 1782, + "url": "/code/pallets/subtensor/src/lib.rs#L1782", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1969,8 +1969,8 @@ "container": "SubtensorModule", "name": "MaturityRate", "path": "pallets/subtensor/src/lib.rs", - "line": 1775, - "url": "/code/pallets/subtensor/src/lib.rs#L1775", + "line": 1778, + "url": "/code/pallets/subtensor/src/lib.rs#L1778", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1978,8 +1978,8 @@ "container": "SubtensorModule", "name": "NetworkRegisteredAt", "path": "pallets/subtensor/src/lib.rs", - "line": 2043, - "url": "/code/pallets/subtensor/src/lib.rs#L2043", + "line": 2046, + "url": "/code/pallets/subtensor/src/lib.rs#L2046", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2004,8 +2004,8 @@ "container": "SubtensorModule", "name": "SubnetEmissionEnabled", "path": "pallets/subtensor/src/lib.rs", - "line": 1515, - "url": "/code/pallets/subtensor/src/lib.rs#L1515", + "line": 1518, + "url": "/code/pallets/subtensor/src/lib.rs#L1518", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2057,8 +2057,8 @@ "container": "SubtensorModule", "name": "SubnetIdentitiesV3", "path": "pallets/subtensor/src/lib.rs", - "line": 2572, - "url": "/code/pallets/subtensor/src/lib.rs#L2572", + "line": 2575, + "url": "/code/pallets/subtensor/src/lib.rs#L2575", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2079,8 +2079,8 @@ "container": "SubtensorModule", "name": "SubnetIdentitiesV3", "path": "pallets/subtensor/src/lib.rs", - "line": 2572, - "url": "/code/pallets/subtensor/src/lib.rs#L2572", + "line": 2575, + "url": "/code/pallets/subtensor/src/lib.rs#L2575", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2101,9 +2101,9 @@ "container": "SubnetRegistrationRuntimeApi", "name": "get_network_registration_cost", "path": "runtime/src/lib.rs", - "line": 2348, - "end_line": 2350, - "url": "/code/runtime/src/lib.rs#L2348-L2350", + "line": 2349, + "end_line": 2351, + "url": "/code/runtime/src/lib.rs#L2349-L2351", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -2128,8 +2128,8 @@ "container": "SubtensorModule", "name": "NetworkRegisteredAt", "path": "pallets/subtensor/src/lib.rs", - "line": 2043, - "url": "/code/pallets/subtensor/src/lib.rs#L2043", + "line": 2046, + "url": "/code/pallets/subtensor/src/lib.rs#L2046", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -2137,8 +2137,8 @@ "container": "SubtensorModule", "name": "InitialStartCallDelay", "path": "runtime/src/lib.rs", - "line": 851, - "url": "/code/runtime/src/lib.rs#L851", + "line": 852, + "url": "/code/runtime/src/lib.rs#L852", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -2159,8 +2159,8 @@ "container": "SubtensorModule", "name": "NetworksAdded", "path": "pallets/subtensor/src/lib.rs", - "line": 2015, - "url": "/code/pallets/subtensor/src/lib.rs#L2015", + "line": 2018, + "url": "/code/pallets/subtensor/src/lib.rs#L2018", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -2168,8 +2168,8 @@ "container": "SubtensorModule", "name": "Tempo", "path": "pallets/subtensor/src/lib.rs", - "line": 1952, - "url": "/code/pallets/subtensor/src/lib.rs#L1952", + "line": 1955, + "url": "/code/pallets/subtensor/src/lib.rs#L1955", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -2177,8 +2177,8 @@ "container": "SubtensorModule", "name": "Burn", "path": "pallets/subtensor/src/lib.rs", - "line": 2248, - "url": "/code/pallets/subtensor/src/lib.rs#L2248", + "line": 2251, + "url": "/code/pallets/subtensor/src/lib.rs#L2251", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -2186,8 +2186,8 @@ "container": "SubtensorModule", "name": "SubnetworkN", "path": "pallets/subtensor/src/lib.rs", - "line": 2011, - "url": "/code/pallets/subtensor/src/lib.rs#L2011", + "line": 2014, + "url": "/code/pallets/subtensor/src/lib.rs#L2014", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2214,8 +2214,8 @@ "container": "SubtensorModule", "name": "TimelockedWeightCommits", "path": "pallets/subtensor/src/lib.rs", - "line": 2628, - "url": "/code/pallets/subtensor/src/lib.rs#L2628", + "line": 2631, + "url": "/code/pallets/subtensor/src/lib.rs#L2631", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2247,8 +2247,8 @@ "container": "SubtensorModule", "name": "TokenSymbol", "path": "pallets/subtensor/src/lib.rs", - "line": 1793, - "url": "/code/pallets/subtensor/src/lib.rs#L1793", + "line": 1796, + "url": "/code/pallets/subtensor/src/lib.rs#L1796", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2269,8 +2269,8 @@ "container": "SubtensorModule", "name": "TxRateLimit", "path": "pallets/subtensor/src/lib.rs", - "line": 2306, - "url": "/code/pallets/subtensor/src/lib.rs#L2306", + "line": 2309, + "url": "/code/pallets/subtensor/src/lib.rs#L2309", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2297,8 +2297,8 @@ "container": "SubtensorModule", "name": "Uids", "path": "pallets/subtensor/src/lib.rs", - "line": 2430, - "url": "/code/pallets/subtensor/src/lib.rs#L2430", + "line": 2433, + "url": "/code/pallets/subtensor/src/lib.rs#L2433", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2325,8 +2325,8 @@ "container": "SubtensorModule", "name": "Weights", "path": "pallets/subtensor/src/lib.rs", - "line": 2492, - "url": "/code/pallets/subtensor/src/lib.rs#L2492", + "line": 2495, + "url": "/code/pallets/subtensor/src/lib.rs#L2495", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2351,8 +2351,8 @@ "container": "SubtensorModule", "name": "WeightsSetRateLimit", "path": "pallets/subtensor/src/lib.rs", - "line": 2218, - "url": "/code/pallets/subtensor/src/lib.rs#L2218", + "line": 2221, + "url": "/code/pallets/subtensor/src/lib.rs#L2221", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] From 3bc3659a80c64238d9ec397e8b6d5aaa95679935 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 08:40:40 -0700 Subject: [PATCH 48/63] Cover subnet sale cleanup during dissolution --- pallets/subtensor/src/subnets/dissolution.rs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/pallets/subtensor/src/subnets/dissolution.rs b/pallets/subtensor/src/subnets/dissolution.rs index 2122c207d1..841deed4f0 100644 --- a/pallets/subtensor/src/subnets/dissolution.rs +++ b/pallets/subtensor/src/subnets/dissolution.rs @@ -124,20 +124,17 @@ impl Pallet { Error::::NetworkDissolveAlreadyQueued ); + // Cancel any active sale before marking the subnet as nonexistent. + if SubnetSaleOffers::::contains_key(netuid) { + Self::do_cancel_sale_offer(None, netuid)?; + } + // 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)); TotalStake::::mutate(|total| *total = total.saturating_sub(SubnetTAO::::get(netuid))); - // Release sale-time account freezes immediately. The remaining subnet - // storage is removed asynchronously, but these account-wide locks must - // not survive once the offer's subnet no longer exists. - if let Some(offer) = SubnetSaleOffers::::take(netuid) { - SubnetSaleFrozenColdkeys::::remove(&offer.seller_coldkey); - SubnetSaleFrozenHotkeys::::remove(&offer.seller_hotkey); - } - dissolved_networks.push(netuid); DissolveCleanupQueue::::set(dissolved_networks); From b07be53d96e69609b4d29b6d9dca12e7d9f16964 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 09:57:52 -0700 Subject: [PATCH 49/63] Revert benchmark lint fixe & ignore --- pallets/subtensor/src/macros/dispatches.rs | 7 ++----- pallets/subtensor/src/swap/swap_hotkey.rs | 3 +-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/pallets/subtensor/src/macros/dispatches.rs b/pallets/subtensor/src/macros/dispatches.rs index bb56b55e3d..cbbba31a52 100644 --- a/pallets/subtensor/src/macros/dispatches.rs +++ b/pallets/subtensor/src/macros/dispatches.rs @@ -859,13 +859,10 @@ mod dispatches { /// * `netuid`: Optional subnet ID. If `Some`, swap only on that subnet; if `None`, swap on all subnets. /// * `keep_stake`: If `true`, stake remains on the old hotkey and the rest metadata /// is transferred to the new hotkey. + #[allow(unknown_lints, benchmarked_weight_not_plugged)] #[pallet::call_index(72)] #[pallet::weight(( - if netuid.is_none() || !*keep_stake { - ::WeightInfo::swap_hotkey_v2() - } else { - crate::Pallet::::swap_hotkey_v2_dispatch_weight(netuid, *keep_stake) - }, + crate::Pallet::::swap_hotkey_v2_dispatch_weight(netuid, *keep_stake), DispatchClass::Normal, Pays::Yes ))] diff --git a/pallets/subtensor/src/swap/swap_hotkey.rs b/pallets/subtensor/src/swap/swap_hotkey.rs index 4807051e29..187dafef4e 100644 --- a/pallets/subtensor/src/swap/swap_hotkey.rs +++ b/pallets/subtensor/src/swap/swap_hotkey.rs @@ -17,8 +17,7 @@ impl Pallet { /// the single-subnet `keep_stake` path, which does not scan stake prefixes. pub fn swap_hotkey_v2_dispatch_weight(netuid: &Option, keep_stake: bool) -> Weight { if netuid.is_none() || !keep_stake { - <::WeightInfo as crate::weights::WeightInfo>::swap_hotkey_v2( - ) + <::WeightInfo as crate::weights::WeightInfo>::swap_hotkey() } else { // +1 read / +4 writes vs the pre-lineage keep_stake path: root lookup, // LastHotkeySwap, successor clear+insert, root insert. From 4451ec61a1f4f2011cee6db075de84a2d3370e4c Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 10:08:16 -0700 Subject: [PATCH 50/63] Revert subnet sale offer --- .../chain/AccountRejectsLockedAlpha.mdx | 2 +- docs/errors/chain/ActiveLockExists.mdx | 2 +- .../ActivityCutoffFactorMilliOutOfBounds.mdx | 2 +- .../chain/AddStakeBurnRateLimitExceeded.mdx | 2 +- ...minActionProhibitedDuringWeightsWindow.mdx | 2 +- .../errors/chain/AutoEpochAlreadyImminent.mdx | 2 +- .../chain/BeneficiaryDoesNotOwnHotkey.mdx | 2 +- docs/errors/chain/CannotAffordLockCost.mdx | 2 +- docs/errors/chain/CannotUseSystemAccount.mdx | 2 +- .../errors/chain/ChildParentInconsistency.mdx | 2 +- .../chain/ColdkeyCollateralIncomplete.mdx | 2 +- .../chain/ColdkeyCollateralPositionsFull.mdx | 2 +- docs/errors/chain/ColdkeySwapAnnounced.mdx | 2 +- .../errors/chain/ColdkeySwapClearTooEarly.mdx | 2 +- docs/errors/chain/ColdkeySwapDisputed.mdx | 2 +- docs/errors/chain/Deprecated.mdx | 2 +- docs/errors/chain/DisabledTemporarily.mdx | 2 +- .../DynamicTempoBlockedByCommitReveal.mdx | 2 +- .../chain/EpochTriggerAlreadyPending.mdx | 2 +- .../EvmKeyAssociateRateLimitExceeded.mdx | 2 +- .../chain/EvmKeyAssociationLimitExceeded.mdx | 2 +- .../chain/ExpectedBeneficiaryOrigin.mdx | 2 +- .../chain/IncorrectCommitRevealVersion.mdx | 2 +- .../errors/chain/InsufficientAlphaBalance.mdx | 2 +- .../errors/chain/InsufficientStakeForLock.mdx | 2 +- docs/errors/chain/InvalidNumRootClaim.mdx | 2 +- docs/errors/chain/InvalidRevealRound.mdx | 2 +- .../chain/InvalidRootClaimThreshold.mdx | 2 +- docs/errors/chain/InvalidSubnetNumber.mdx | 2 +- docs/errors/chain/InvalidValue.mdx | 2 +- .../chain/InvalidVotingPowerEmaAlpha.mdx | 2 +- docs/errors/chain/LockHotkeyMismatch.mdx | 2 +- docs/errors/chain/LockIdOverFlow.mdx | 2 +- .../chain/NetworkDissolveAlreadyQueued.mdx | 2 +- docs/errors/chain/NoExistingLock.mdx | 2 +- docs/errors/chain/Overflow.mdx | 2 +- .../chain/RegistrationPriceLimitExceeded.mdx | 2 +- docs/errors/chain/RevealPeriodTooLarge.mdx | 2 +- docs/errors/chain/RevealPeriodTooSmall.mdx | 2 +- .../chain/SameAutoStakeHotkeyAlreadySet.mdx | 2 +- docs/errors/chain/StartCallNotReady.mdx | 2 +- .../chain/SubnetBuybackRateLimitExceeded.mdx | 2 +- docs/errors/chain/SubnetLimitReached.mdx | 2 +- docs/errors/chain/SymbolAlreadyInUse.mdx | 2 +- docs/errors/chain/SymbolDoesNotExist.mdx | 2 +- docs/errors/chain/TempoOutOfBounds.mdx | 2 +- docs/errors/chain/TooManyUIDsPerMechanism.mdx | 2 +- ...TrimmingWouldExceedMaxImmunePercentage.mdx | 2 +- docs/errors/chain/UidMapCouldNotBeCleared.mdx | 2 +- docs/errors/chain/UnlockAmountTooHigh.mdx | 2 +- .../chain/VotingPowerTrackingNotEnabled.mdx | 2 +- .../WaitingForDissolvedSubnetCleanup.mdx | 2 +- docs/hyperparameters/index.mdx | 84 ++-- docs/query/alpha-prices.mdx | 2 +- docs/query/associated-evm-key.mdx | 2 +- docs/query/auto-stake-all.mdx | 2 +- docs/query/auto-stake.mdx | 2 +- docs/query/blocks-since-last-step.mdx | 2 +- docs/query/blocks-since-last-update.mdx | 2 +- docs/query/bonds.mdx | 2 +- docs/query/burn.mdx | 2 +- docs/query/children.mdx | 2 +- docs/query/coldkey-lock.mdx | 2 +- docs/query/coldkey-swap-announcement.mdx | 4 +- docs/query/commit-reveal-enabled.mdx | 2 +- docs/query/delegate-take.mdx | 6 +- docs/query/difficulty.mdx | 2 +- docs/query/epoch-status.mdx | 10 +- docs/query/existential-deposit.mdx | 2 +- docs/query/hotkey-conviction.mdx | 2 +- docs/query/hotkey-identities.mdx | 4 +- docs/query/hotkey-owner.mdx | 2 +- docs/query/identity.mdx | 2 +- docs/query/immunity-period.mdx | 2 +- docs/query/lease.mdx | 2 +- docs/query/leases.mdx | 2 +- docs/query/locks-for-coldkey.mdx | 2 +- docs/query/max-weight-limit.mdx | 2 +- docs/query/mechanism-count.mdx | 2 +- docs/query/mechanism-emission-split.mdx | 2 +- docs/query/min-allowed-weights.mdx | 2 +- docs/query/miner-collateral.mdx | 2 +- docs/query/most-convicted-hotkey.mdx | 2 +- docs/query/netuids-for-hotkey.mdx | 2 +- docs/query/owned-hotkeys.mdx | 2 +- docs/query/parents.mdx | 2 +- docs/query/pending-children.mdx | 2 +- docs/query/quote-stake.mdx | 2 +- docs/query/quote-unstake.mdx | 2 +- docs/query/reveal-period.mdx | 2 +- docs/query/root-claim-type.mdx | 2 +- docs/query/staking-hotkeys.mdx | 2 +- docs/query/subnet-collateral.mdx | 2 +- docs/query/subnet-convictions.mdx | 18 +- docs/query/subnet-emission-enabled.mdx | 2 +- docs/query/subnet-identity.mdx | 2 +- docs/query/subnet-names.mdx | 2 +- docs/query/subnet-registration-cost.mdx | 2 +- docs/query/subnet-start-schedule.mdx | 4 +- docs/query/subnet.mdx | 6 +- docs/query/subnets.mdx | 8 +- docs/query/timelocked-weight-commits.mdx | 2 +- docs/query/token-symbols.mdx | 2 +- docs/query/tx-rate-limit.mdx | 2 +- docs/query/uid.mdx | 2 +- docs/query/weights-rate-limit.mdx | 2 +- docs/query/weights.mdx | 2 +- docs/tx/add-collateral.mdx | 4 +- docs/tx/add-stake-limit.mdx | 4 +- docs/tx/add-stake.mdx | 4 +- docs/tx/announce-coldkey-swap.mdx | 4 +- docs/tx/associate-evm-key.mdx | 4 +- docs/tx/associate-hotkey.mdx | 4 +- docs/tx/claim-root.mdx | 4 +- docs/tx/clear-coldkey-swap-announcement.mdx | 4 +- docs/tx/commit-weights.mdx | 4 +- docs/tx/dispute-coldkey-swap.mdx | 4 +- docs/tx/lock-stake.mdx | 4 +- docs/tx/move-lock.mdx | 4 +- docs/tx/move-stake.mdx | 4 +- docs/tx/register-leased-network.mdx | 4 +- docs/tx/register-subnet.mdx | 4 +- docs/tx/remove-stake-limit.mdx | 4 +- docs/tx/remove-stake.mdx | 4 +- docs/tx/set-auto-stake.mdx | 4 +- docs/tx/set-childkey-take.mdx | 4 +- docs/tx/set-children.mdx | 4 +- docs/tx/set-identity.mdx | 4 +- docs/tx/set-min-collateral.mdx | 4 +- docs/tx/set-perpetual-lock.mdx | 4 +- docs/tx/set-root-claim-type.mdx | 4 +- docs/tx/set-subnet-identity.mdx | 4 +- docs/tx/set-weights.mdx | 4 +- docs/tx/stake-burn.mdx | 4 +- docs/tx/start-call.mdx | 4 +- docs/tx/swap-coldkey-announced.mdx | 4 +- docs/tx/swap-hotkey.mdx | 2 +- docs/tx/swap-stake.mdx | 6 +- docs/tx/terminate-lease.mdx | 4 +- docs/tx/transfer-stake.mdx | 6 +- docs/tx/unstake-all-alpha.mdx | 4 +- docs/tx/unstake-all.mdx | 4 +- docs/tx/update-symbol.mdx | 4 +- pallets/commitments/src/weights.rs | 41 +- pallets/crowdloan/src/weights.rs | 110 +++-- pallets/proxy/src/weights.rs | 24 +- .../subtensor/src/benchmarks/benchmarks.rs | 69 --- pallets/subtensor/src/benchmarks/helpers.rs | 18 - pallets/subtensor/src/extensions/subtensor.rs | 22 +- .../src/guards/check_coldkey_swap.rs | 5 - .../subtensor/src/guards/check_subnet_sale.rs | 302 ------------- pallets/subtensor/src/guards/mod.rs | 2 - pallets/subtensor/src/lib.rs | 36 +- pallets/subtensor/src/macros/dispatches.rs | 26 -- pallets/subtensor/src/macros/errors.rs | 10 - pallets/subtensor/src/macros/events.rs | 24 - pallets/subtensor/src/subnets/dissolution.rs | 5 - pallets/subtensor/src/subnets/mod.rs | 1 - pallets/subtensor/src/subnets/sale_offer.rs | 152 ------- pallets/subtensor/src/swap/swap_hotkey.rs | 8 - pallets/subtensor/src/tests/mock.rs | 1 - pallets/subtensor/src/tests/mod.rs | 1 - pallets/subtensor/src/tests/sale_offer.rs | 421 ------------------ pallets/subtensor/src/weights.rs | 85 +--- pallets/utility/src/weights.rs | 40 -- runtime/src/lib.rs | 1 - runtime/src/proxy_filters/call_groups.rs | 14 +- runtime/src/proxy_filters/mod.rs | 33 -- .../public/catalog/errors.json | 208 ++++----- .../public/catalog/intents.json | 222 ++++----- .../public/catalog/reads.json | 316 ++++++------- 171 files changed, 699 insertions(+), 1984 deletions(-) delete mode 100644 pallets/subtensor/src/guards/check_subnet_sale.rs delete mode 100644 pallets/subtensor/src/subnets/sale_offer.rs delete mode 100644 pallets/subtensor/src/tests/sale_offer.rs diff --git a/docs/errors/chain/AccountRejectsLockedAlpha.mdx b/docs/errors/chain/AccountRejectsLockedAlpha.mdx index f2616e8d61..ffdc96c025 100644 --- a/docs/errors/chain/AccountRejectsLockedAlpha.mdx +++ b/docs/errors/chain/AccountRejectsLockedAlpha.mdx @@ -9,7 +9,7 @@ Locked alpha was being transferred to a coldkey whose `AccountFlags` do not have Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L343`](/code/pallets/subtensor/src/macros/errors.rs#L343). +Declared at [`pallets/subtensor/src/macros/errors.rs#L333`](/code/pallets/subtensor/src/macros/errors.rs#L333). ## Remediation diff --git a/docs/errors/chain/ActiveLockExists.mdx b/docs/errors/chain/ActiveLockExists.mdx index 4a32e85c41..a12a00e01a 100644 --- a/docs/errors/chain/ActiveLockExists.mdx +++ b/docs/errors/chain/ActiveLockExists.mdx @@ -9,7 +9,7 @@ The destination coldkey already holds a lock with nonzero locked mass on that su Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L321`](/code/pallets/subtensor/src/macros/errors.rs#L321). +Declared at [`pallets/subtensor/src/macros/errors.rs#L311`](/code/pallets/subtensor/src/macros/errors.rs#L311). ## Remediation diff --git a/docs/errors/chain/ActivityCutoffFactorMilliOutOfBounds.mdx b/docs/errors/chain/ActivityCutoffFactorMilliOutOfBounds.mdx index 0e55d80c1a..7660786099 100644 --- a/docs/errors/chain/ActivityCutoffFactorMilliOutOfBounds.mdx +++ b/docs/errors/chain/ActivityCutoffFactorMilliOutOfBounds.mdx @@ -9,7 +9,7 @@ The `factor_milli` argument to set the activity-cutoff factor was outside the al Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L331`](/code/pallets/subtensor/src/macros/errors.rs#L331). +Declared at [`pallets/subtensor/src/macros/errors.rs#L321`](/code/pallets/subtensor/src/macros/errors.rs#L321). ## Remediation diff --git a/docs/errors/chain/AddStakeBurnRateLimitExceeded.mdx b/docs/errors/chain/AddStakeBurnRateLimitExceeded.mdx index 1507741c8f..f18b2be21d 100644 --- a/docs/errors/chain/AddStakeBurnRateLimitExceeded.mdx +++ b/docs/errors/chain/AddStakeBurnRateLimitExceeded.mdx @@ -9,7 +9,7 @@ The add-stake-and-burn operation was submitted again before its per-key rate-lim Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`rate_limited`](/docs/errors/rate-limited). -Declared at [`pallets/subtensor/src/macros/errors.rs#L303`](/code/pallets/subtensor/src/macros/errors.rs#L303). +Declared at [`pallets/subtensor/src/macros/errors.rs#L293`](/code/pallets/subtensor/src/macros/errors.rs#L293). ## Remediation diff --git a/docs/errors/chain/AdminActionProhibitedDuringWeightsWindow.mdx b/docs/errors/chain/AdminActionProhibitedDuringWeightsWindow.mdx index 86086a5a28..69282bde0f 100644 --- a/docs/errors/chain/AdminActionProhibitedDuringWeightsWindow.mdx +++ b/docs/errors/chain/AdminActionProhibitedDuringWeightsWindow.mdx @@ -9,7 +9,7 @@ An owner or admin hyperparameter change was attempted inside the protected freez Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`too_early`](/docs/errors/too-early). -Declared at [`pallets/subtensor/src/macros/errors.rs#L253`](/code/pallets/subtensor/src/macros/errors.rs#L253). +Declared at [`pallets/subtensor/src/macros/errors.rs#L243`](/code/pallets/subtensor/src/macros/errors.rs#L243). ## Remediation diff --git a/docs/errors/chain/AutoEpochAlreadyImminent.mdx b/docs/errors/chain/AutoEpochAlreadyImminent.mdx index cd5e651622..54e0cd76b0 100644 --- a/docs/errors/chain/AutoEpochAlreadyImminent.mdx +++ b/docs/errors/chain/AutoEpochAlreadyImminent.mdx @@ -9,7 +9,7 @@ description: "The object or state already exists; treat the goal as met or pick Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L337`](/code/pallets/subtensor/src/macros/errors.rs#L337). +Declared at [`pallets/subtensor/src/macros/errors.rs#L327`](/code/pallets/subtensor/src/macros/errors.rs#L327). ## Remediation diff --git a/docs/errors/chain/BeneficiaryDoesNotOwnHotkey.mdx b/docs/errors/chain/BeneficiaryDoesNotOwnHotkey.mdx index 9cd1b6e9fb..86d479baf7 100644 --- a/docs/errors/chain/BeneficiaryDoesNotOwnHotkey.mdx +++ b/docs/errors/chain/BeneficiaryDoesNotOwnHotkey.mdx @@ -9,7 +9,7 @@ When ending a subnet lease, the hotkey passed for the ownership handover is not Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`not_authorized`](/docs/errors/not-authorized). -Declared at [`pallets/subtensor/src/macros/errors.rs#L249`](/code/pallets/subtensor/src/macros/errors.rs#L249). +Declared at [`pallets/subtensor/src/macros/errors.rs#L239`](/code/pallets/subtensor/src/macros/errors.rs#L239). ## Remediation diff --git a/docs/errors/chain/CannotAffordLockCost.mdx b/docs/errors/chain/CannotAffordLockCost.mdx index 1f6d032601..378758c473 100644 --- a/docs/errors/chain/CannotAffordLockCost.mdx +++ b/docs/errors/chain/CannotAffordLockCost.mdx @@ -9,7 +9,7 @@ The coldkey's free balance cannot cover the current dynamic subnet-creation lock Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`insufficient_balance`](/docs/errors/insufficient-balance). -Declared at [`pallets/subtensor/src/macros/errors.rs#L271`](/code/pallets/subtensor/src/macros/errors.rs#L271). +Declared at [`pallets/subtensor/src/macros/errors.rs#L261`](/code/pallets/subtensor/src/macros/errors.rs#L261). ## Remediation diff --git a/docs/errors/chain/CannotUseSystemAccount.mdx b/docs/errors/chain/CannotUseSystemAccount.mdx index 6b95b44d2e..7ca4b4b9c9 100644 --- a/docs/errors/chain/CannotUseSystemAccount.mdx +++ b/docs/errors/chain/CannotUseSystemAccount.mdx @@ -9,7 +9,7 @@ The hotkey supplied for registration, hotkey swap, or subnet-owner-hotkey assign Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`not_authorized`](/docs/errors/not-authorized). -Declared at [`pallets/subtensor/src/macros/errors.rs#L323`](/code/pallets/subtensor/src/macros/errors.rs#L323). +Declared at [`pallets/subtensor/src/macros/errors.rs#L313`](/code/pallets/subtensor/src/macros/errors.rs#L313). ## Remediation diff --git a/docs/errors/chain/ChildParentInconsistency.mdx b/docs/errors/chain/ChildParentInconsistency.mdx index 2a351b4751..09f4363f12 100644 --- a/docs/errors/chain/ChildParentInconsistency.mdx +++ b/docs/errors/chain/ChildParentInconsistency.mdx @@ -9,7 +9,7 @@ A `set_children` or parent-delegation call would make the same hotkey appear as Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L283`](/code/pallets/subtensor/src/macros/errors.rs#L283). +Declared at [`pallets/subtensor/src/macros/errors.rs#L273`](/code/pallets/subtensor/src/macros/errors.rs#L273). ## Remediation diff --git a/docs/errors/chain/ColdkeyCollateralIncomplete.mdx b/docs/errors/chain/ColdkeyCollateralIncomplete.mdx index ecd83cdce8..e052efe93c 100644 --- a/docs/errors/chain/ColdkeyCollateralIncomplete.mdx +++ b/docs/errors/chain/ColdkeyCollateralIncomplete.mdx @@ -9,7 +9,7 @@ A coldkey swap could not fully migrate miner collateral: after migrating every i Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`internal`](/docs/errors/internal). -Declared at [`pallets/subtensor/src/macros/errors.rs#L354`](/code/pallets/subtensor/src/macros/errors.rs#L354). +Declared at [`pallets/subtensor/src/macros/errors.rs#L344`](/code/pallets/subtensor/src/macros/errors.rs#L344). ## Remediation diff --git a/docs/errors/chain/ColdkeyCollateralPositionsFull.mdx b/docs/errors/chain/ColdkeyCollateralPositionsFull.mdx index 2df8484f2f..70ac4b25dd 100644 --- a/docs/errors/chain/ColdkeyCollateralPositionsFull.mdx +++ b/docs/errors/chain/ColdkeyCollateralPositionsFull.mdx @@ -9,7 +9,7 @@ This coldkey already has the maximum number of distinct hotkeys with miner colla Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L358`](/code/pallets/subtensor/src/macros/errors.rs#L358). +Declared at [`pallets/subtensor/src/macros/errors.rs#L348`](/code/pallets/subtensor/src/macros/errors.rs#L348). ## Remediation diff --git a/docs/errors/chain/ColdkeySwapAnnounced.mdx b/docs/errors/chain/ColdkeySwapAnnounced.mdx index ed0b460619..47d144275c 100644 --- a/docs/errors/chain/ColdkeySwapAnnounced.mdx +++ b/docs/errors/chain/ColdkeySwapAnnounced.mdx @@ -9,7 +9,7 @@ The coldkey has a pending swap announcement, so all but a small allow-list of ex Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L305`](/code/pallets/subtensor/src/macros/errors.rs#L305). +Declared at [`pallets/subtensor/src/macros/errors.rs#L295`](/code/pallets/subtensor/src/macros/errors.rs#L295). ## Remediation diff --git a/docs/errors/chain/ColdkeySwapClearTooEarly.mdx b/docs/errors/chain/ColdkeySwapClearTooEarly.mdx index 42e88211b0..0b36d3f280 100644 --- a/docs/errors/chain/ColdkeySwapClearTooEarly.mdx +++ b/docs/errors/chain/ColdkeySwapClearTooEarly.mdx @@ -9,7 +9,7 @@ The swap announcement cannot be cleared until the reannouncement delay after the Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`too_early`](/docs/errors/too-early). -Declared at [`pallets/subtensor/src/macros/errors.rs#L309`](/code/pallets/subtensor/src/macros/errors.rs#L309). +Declared at [`pallets/subtensor/src/macros/errors.rs#L299`](/code/pallets/subtensor/src/macros/errors.rs#L299). ## Remediation diff --git a/docs/errors/chain/ColdkeySwapDisputed.mdx b/docs/errors/chain/ColdkeySwapDisputed.mdx index 4259168c5b..badcf17393 100644 --- a/docs/errors/chain/ColdkeySwapDisputed.mdx +++ b/docs/errors/chain/ColdkeySwapDisputed.mdx @@ -9,7 +9,7 @@ All extrinsics from this coldkey are blocked because its pending coldkey swap is Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`not_authorized`](/docs/errors/not-authorized). -Declared at [`pallets/subtensor/src/macros/errors.rs#L307`](/code/pallets/subtensor/src/macros/errors.rs#L307). +Declared at [`pallets/subtensor/src/macros/errors.rs#L297`](/code/pallets/subtensor/src/macros/errors.rs#L297). ## Remediation diff --git a/docs/errors/chain/Deprecated.mdx b/docs/errors/chain/Deprecated.mdx index 8f4ecc6ff5..350cdc125f 100644 --- a/docs/errors/chain/Deprecated.mdx +++ b/docs/errors/chain/Deprecated.mdx @@ -9,7 +9,7 @@ The extrinsic has been removed and always fails, e.g. `schedule_swap_coldkey`, t Declared by the `SubtensorModule`, `AdminUtils`, `Swap` pallets; it classifies to the semantic code [`disabled`](/docs/errors/disabled). -Declared at [`pallets/subtensor/src/macros/errors.rs#L297`](/code/pallets/subtensor/src/macros/errors.rs#L297), [`pallets/admin-utils/src/lib.rs#L169`](/code/pallets/admin-utils/src/lib.rs#L169), [`pallets/swap/src/pallet/mod.rs#L181`](/code/pallets/swap/src/pallet/mod.rs#L181). +Declared at [`pallets/subtensor/src/macros/errors.rs#L287`](/code/pallets/subtensor/src/macros/errors.rs#L287), [`pallets/admin-utils/src/lib.rs#L169`](/code/pallets/admin-utils/src/lib.rs#L169), [`pallets/swap/src/pallet/mod.rs#L181`](/code/pallets/swap/src/pallet/mod.rs#L181). ## Remediation diff --git a/docs/errors/chain/DisabledTemporarily.mdx b/docs/errors/chain/DisabledTemporarily.mdx index be4750513d..ee8c6b935c 100644 --- a/docs/errors/chain/DisabledTemporarily.mdx +++ b/docs/errors/chain/DisabledTemporarily.mdx @@ -9,7 +9,7 @@ The operation has been temporarily switched off in the runtime, usually as a hot Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`disabled`](/docs/errors/disabled). -Declared at [`pallets/subtensor/src/macros/errors.rs#L311`](/code/pallets/subtensor/src/macros/errors.rs#L311). +Declared at [`pallets/subtensor/src/macros/errors.rs#L301`](/code/pallets/subtensor/src/macros/errors.rs#L301). ## Remediation diff --git a/docs/errors/chain/DynamicTempoBlockedByCommitReveal.mdx b/docs/errors/chain/DynamicTempoBlockedByCommitReveal.mdx index 70bbc16efc..10de45f64d 100644 --- a/docs/errors/chain/DynamicTempoBlockedByCommitReveal.mdx +++ b/docs/errors/chain/DynamicTempoBlockedByCommitReveal.mdx @@ -9,7 +9,7 @@ description: "This call or feature is switched off on this network" Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`disabled`](/docs/errors/disabled). -Declared at [`pallets/subtensor/src/macros/errors.rs#L341`](/code/pallets/subtensor/src/macros/errors.rs#L341). +Declared at [`pallets/subtensor/src/macros/errors.rs#L331`](/code/pallets/subtensor/src/macros/errors.rs#L331). ## Remediation diff --git a/docs/errors/chain/EpochTriggerAlreadyPending.mdx b/docs/errors/chain/EpochTriggerAlreadyPending.mdx index 70e9756de8..2bf8577e71 100644 --- a/docs/errors/chain/EpochTriggerAlreadyPending.mdx +++ b/docs/errors/chain/EpochTriggerAlreadyPending.mdx @@ -9,7 +9,7 @@ description: "The object or state already exists; treat the goal as met or pick Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L334`](/code/pallets/subtensor/src/macros/errors.rs#L334). +Declared at [`pallets/subtensor/src/macros/errors.rs#L324`](/code/pallets/subtensor/src/macros/errors.rs#L324). ## Remediation diff --git a/docs/errors/chain/EvmKeyAssociateRateLimitExceeded.mdx b/docs/errors/chain/EvmKeyAssociateRateLimitExceeded.mdx index 063717258c..61d8cad0bb 100644 --- a/docs/errors/chain/EvmKeyAssociateRateLimitExceeded.mdx +++ b/docs/errors/chain/EvmKeyAssociateRateLimitExceeded.mdx @@ -9,7 +9,7 @@ description: "Wait for the rate-limit window to pass, then retry" Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`rate_limited`](/docs/errors/rate-limited). -Declared at [`pallets/subtensor/src/macros/errors.rs#L273`](/code/pallets/subtensor/src/macros/errors.rs#L273). +Declared at [`pallets/subtensor/src/macros/errors.rs#L263`](/code/pallets/subtensor/src/macros/errors.rs#L263). ## Remediation diff --git a/docs/errors/chain/EvmKeyAssociationLimitExceeded.mdx b/docs/errors/chain/EvmKeyAssociationLimitExceeded.mdx index c6cf39be40..b516633b3e 100644 --- a/docs/errors/chain/EvmKeyAssociationLimitExceeded.mdx +++ b/docs/errors/chain/EvmKeyAssociationLimitExceeded.mdx @@ -9,7 +9,7 @@ The EVM address is already associated with the maximum number of UIDs allowed on Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L275`](/code/pallets/subtensor/src/macros/errors.rs#L275). +Declared at [`pallets/subtensor/src/macros/errors.rs#L265`](/code/pallets/subtensor/src/macros/errors.rs#L265). ## Remediation diff --git a/docs/errors/chain/ExpectedBeneficiaryOrigin.mdx b/docs/errors/chain/ExpectedBeneficiaryOrigin.mdx index 6cfe6df0c8..7e085f06d4 100644 --- a/docs/errors/chain/ExpectedBeneficiaryOrigin.mdx +++ b/docs/errors/chain/ExpectedBeneficiaryOrigin.mdx @@ -9,7 +9,7 @@ A lease operation such as terminating a subnet lease was signed by an account ot Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`not_authorized`](/docs/errors/not-authorized). -Declared at [`pallets/subtensor/src/macros/errors.rs#L251`](/code/pallets/subtensor/src/macros/errors.rs#L251). +Declared at [`pallets/subtensor/src/macros/errors.rs#L241`](/code/pallets/subtensor/src/macros/errors.rs#L241). ## Remediation diff --git a/docs/errors/chain/IncorrectCommitRevealVersion.mdx b/docs/errors/chain/IncorrectCommitRevealVersion.mdx index 3765eaea2e..e629212a55 100644 --- a/docs/errors/chain/IncorrectCommitRevealVersion.mdx +++ b/docs/errors/chain/IncorrectCommitRevealVersion.mdx @@ -9,7 +9,7 @@ The `commit_reveal_version` argument does not match the chain's current commit-r Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L259`](/code/pallets/subtensor/src/macros/errors.rs#L259). +Declared at [`pallets/subtensor/src/macros/errors.rs#L249`](/code/pallets/subtensor/src/macros/errors.rs#L249). ## Remediation diff --git a/docs/errors/chain/InsufficientAlphaBalance.mdx b/docs/errors/chain/InsufficientAlphaBalance.mdx index 6444e078e5..958dd71b7b 100644 --- a/docs/errors/chain/InsufficientAlphaBalance.mdx +++ b/docs/errors/chain/InsufficientAlphaBalance.mdx @@ -9,7 +9,7 @@ A stake decrease asked to debit more alpha than the hotkey-coldkey pair holds on Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`insufficient_balance`](/docs/errors/insufficient-balance). -Declared at [`pallets/subtensor/src/macros/errors.rs#L349`](/code/pallets/subtensor/src/macros/errors.rs#L349). +Declared at [`pallets/subtensor/src/macros/errors.rs#L339`](/code/pallets/subtensor/src/macros/errors.rs#L339). ## Remediation diff --git a/docs/errors/chain/InsufficientStakeForLock.mdx b/docs/errors/chain/InsufficientStakeForLock.mdx index 32ba72635b..5b07b4c6e5 100644 --- a/docs/errors/chain/InsufficientStakeForLock.mdx +++ b/docs/errors/chain/InsufficientStakeForLock.mdx @@ -9,7 +9,7 @@ The requested lock amount exceeds the coldkey's total alpha stake on that subnet Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`insufficient_balance`](/docs/errors/insufficient-balance). -Declared at [`pallets/subtensor/src/macros/errors.rs#L317`](/code/pallets/subtensor/src/macros/errors.rs#L317). +Declared at [`pallets/subtensor/src/macros/errors.rs#L307`](/code/pallets/subtensor/src/macros/errors.rs#L307). ## Remediation diff --git a/docs/errors/chain/InvalidNumRootClaim.mdx b/docs/errors/chain/InvalidNumRootClaim.mdx index af6fef599d..08b8b0340d 100644 --- a/docs/errors/chain/InvalidNumRootClaim.mdx +++ b/docs/errors/chain/InvalidNumRootClaim.mdx @@ -9,7 +9,7 @@ The value passed to sudo_set_num_root_claims exceeds the compile-time maximum nu Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L285`](/code/pallets/subtensor/src/macros/errors.rs#L285). +Declared at [`pallets/subtensor/src/macros/errors.rs#L275`](/code/pallets/subtensor/src/macros/errors.rs#L275). ## Remediation diff --git a/docs/errors/chain/InvalidRevealRound.mdx b/docs/errors/chain/InvalidRevealRound.mdx index 92f37499be..af9a6afc13 100644 --- a/docs/errors/chain/InvalidRevealRound.mdx +++ b/docs/errors/chain/InvalidRevealRound.mdx @@ -9,7 +9,7 @@ A timelocked weights commit specified a `reveal_round` older than the latest sto Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`expired`](/docs/errors/expired). -Declared at [`pallets/subtensor/src/macros/errors.rs#L261`](/code/pallets/subtensor/src/macros/errors.rs#L261). +Declared at [`pallets/subtensor/src/macros/errors.rs#L251`](/code/pallets/subtensor/src/macros/errors.rs#L251). ## Remediation diff --git a/docs/errors/chain/InvalidRootClaimThreshold.mdx b/docs/errors/chain/InvalidRootClaimThreshold.mdx index bcbaff3f00..e66ae6c885 100644 --- a/docs/errors/chain/InvalidRootClaimThreshold.mdx +++ b/docs/errors/chain/InvalidRootClaimThreshold.mdx @@ -9,7 +9,7 @@ The value passed to set the root claim threshold exceeds the chain's maximum all Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L287`](/code/pallets/subtensor/src/macros/errors.rs#L287). +Declared at [`pallets/subtensor/src/macros/errors.rs#L277`](/code/pallets/subtensor/src/macros/errors.rs#L277). ## Remediation diff --git a/docs/errors/chain/InvalidSubnetNumber.mdx b/docs/errors/chain/InvalidSubnetNumber.mdx index 511db3e85e..99e020ed4b 100644 --- a/docs/errors/chain/InvalidSubnetNumber.mdx +++ b/docs/errors/chain/InvalidSubnetNumber.mdx @@ -9,7 +9,7 @@ A root-claim call passed an empty subnet set or more subnets than the per-call m Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L289`](/code/pallets/subtensor/src/macros/errors.rs#L289). +Declared at [`pallets/subtensor/src/macros/errors.rs#L279`](/code/pallets/subtensor/src/macros/errors.rs#L279). ## Remediation diff --git a/docs/errors/chain/InvalidValue.mdx b/docs/errors/chain/InvalidValue.mdx index ebf7e9e6aa..7a28fabfb3 100644 --- a/docs/errors/chain/InvalidValue.mdx +++ b/docs/errors/chain/InvalidValue.mdx @@ -9,7 +9,7 @@ A generic out-of-range parameter on an admin or sudo call, e.g. mechanism counts Declared by the `SubtensorModule`, `AdminUtils` pallets; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L267`](/code/pallets/subtensor/src/macros/errors.rs#L267), [`pallets/admin-utils/src/lib.rs#L163`](/code/pallets/admin-utils/src/lib.rs#L163). +Declared at [`pallets/subtensor/src/macros/errors.rs#L257`](/code/pallets/subtensor/src/macros/errors.rs#L257), [`pallets/admin-utils/src/lib.rs#L163`](/code/pallets/admin-utils/src/lib.rs#L163). ## Remediation diff --git a/docs/errors/chain/InvalidVotingPowerEmaAlpha.mdx b/docs/errors/chain/InvalidVotingPowerEmaAlpha.mdx index 98affde4b9..2ebba315eb 100644 --- a/docs/errors/chain/InvalidVotingPowerEmaAlpha.mdx +++ b/docs/errors/chain/InvalidVotingPowerEmaAlpha.mdx @@ -9,7 +9,7 @@ The alpha passed to set the voting power EMA exceeds 10^18, which represents 1.0 Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L295`](/code/pallets/subtensor/src/macros/errors.rs#L295). +Declared at [`pallets/subtensor/src/macros/errors.rs#L285`](/code/pallets/subtensor/src/macros/errors.rs#L285). ## Remediation diff --git a/docs/errors/chain/LockHotkeyMismatch.mdx b/docs/errors/chain/LockHotkeyMismatch.mdx index d5772c4ddc..21523cac8c 100644 --- a/docs/errors/chain/LockHotkeyMismatch.mdx +++ b/docs/errors/chain/LockHotkeyMismatch.mdx @@ -9,7 +9,7 @@ The coldkey already has a conviction lock on this subnet bound to a different ho Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L315`](/code/pallets/subtensor/src/macros/errors.rs#L315). +Declared at [`pallets/subtensor/src/macros/errors.rs#L305`](/code/pallets/subtensor/src/macros/errors.rs#L305). ## Remediation diff --git a/docs/errors/chain/LockIdOverFlow.mdx b/docs/errors/chain/LockIdOverFlow.mdx index 3aa89a2469..3a6393412f 100644 --- a/docs/errors/chain/LockIdOverFlow.mdx +++ b/docs/errors/chain/LockIdOverFlow.mdx @@ -9,7 +9,7 @@ The global network-registration lock id counter reached its u32 maximum while qu Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L345`](/code/pallets/subtensor/src/macros/errors.rs#L345). +Declared at [`pallets/subtensor/src/macros/errors.rs#L335`](/code/pallets/subtensor/src/macros/errors.rs#L335). ## Remediation diff --git a/docs/errors/chain/NetworkDissolveAlreadyQueued.mdx b/docs/errors/chain/NetworkDissolveAlreadyQueued.mdx index b432c9e700..4d5bd4724e 100644 --- a/docs/errors/chain/NetworkDissolveAlreadyQueued.mdx +++ b/docs/errors/chain/NetworkDissolveAlreadyQueued.mdx @@ -9,7 +9,7 @@ The subnet is already in the dissolve cleanup queue, so it cannot be queued for Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L301`](/code/pallets/subtensor/src/macros/errors.rs#L301). +Declared at [`pallets/subtensor/src/macros/errors.rs#L291`](/code/pallets/subtensor/src/macros/errors.rs#L291). ## Remediation diff --git a/docs/errors/chain/NoExistingLock.mdx b/docs/errors/chain/NoExistingLock.mdx index bce6215610..53e3eaab8a 100644 --- a/docs/errors/chain/NoExistingLock.mdx +++ b/docs/errors/chain/NoExistingLock.mdx @@ -9,7 +9,7 @@ Move_lock was called but no conviction lock exists for the signing coldkey on th Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`not_found`](/docs/errors/not-found). -Declared at [`pallets/subtensor/src/macros/errors.rs#L319`](/code/pallets/subtensor/src/macros/errors.rs#L319). +Declared at [`pallets/subtensor/src/macros/errors.rs#L309`](/code/pallets/subtensor/src/macros/errors.rs#L309). ## Remediation diff --git a/docs/errors/chain/Overflow.mdx b/docs/errors/chain/Overflow.mdx index 757a36d97c..e229fcd519 100644 --- a/docs/errors/chain/Overflow.mdx +++ b/docs/errors/chain/Overflow.mdx @@ -9,7 +9,7 @@ A checked arithmetic operation overflowed, e.g. incrementing `NextSubnetLeaseId` Declared by the `SubtensorModule`, `Crowdloan` pallets; it classifies to the semantic code [`internal`](/docs/errors/internal). -Declared at [`pallets/subtensor/src/macros/errors.rs#L247`](/code/pallets/subtensor/src/macros/errors.rs#L247), [`pallets/crowdloan/src/lib.rs#L255`](/code/pallets/crowdloan/src/lib.rs#L255). +Declared at [`pallets/subtensor/src/macros/errors.rs#L237`](/code/pallets/subtensor/src/macros/errors.rs#L237), [`pallets/crowdloan/src/lib.rs#L255`](/code/pallets/crowdloan/src/lib.rs#L255). ## Remediation diff --git a/docs/errors/chain/RegistrationPriceLimitExceeded.mdx b/docs/errors/chain/RegistrationPriceLimitExceeded.mdx index 82962bce6a..15587e99e3 100644 --- a/docs/errors/chain/RegistrationPriceLimitExceeded.mdx +++ b/docs/errors/chain/RegistrationPriceLimitExceeded.mdx @@ -9,7 +9,7 @@ description: "A chain-side capacity limit was hit; reduce the size or count of t Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L313`](/code/pallets/subtensor/src/macros/errors.rs#L313). +Declared at [`pallets/subtensor/src/macros/errors.rs#L303`](/code/pallets/subtensor/src/macros/errors.rs#L303). ## Remediation diff --git a/docs/errors/chain/RevealPeriodTooLarge.mdx b/docs/errors/chain/RevealPeriodTooLarge.mdx index 2e0f8e2ba2..ab3bd5e4c0 100644 --- a/docs/errors/chain/RevealPeriodTooLarge.mdx +++ b/docs/errors/chain/RevealPeriodTooLarge.mdx @@ -9,7 +9,7 @@ description: "Check the argument values against the operation schema" Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L263`](/code/pallets/subtensor/src/macros/errors.rs#L263). +Declared at [`pallets/subtensor/src/macros/errors.rs#L253`](/code/pallets/subtensor/src/macros/errors.rs#L253). ## Remediation diff --git a/docs/errors/chain/RevealPeriodTooSmall.mdx b/docs/errors/chain/RevealPeriodTooSmall.mdx index a39f9f61f3..95fdd02ae6 100644 --- a/docs/errors/chain/RevealPeriodTooSmall.mdx +++ b/docs/errors/chain/RevealPeriodTooSmall.mdx @@ -9,7 +9,7 @@ description: "Check the argument values against the operation schema" Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L265`](/code/pallets/subtensor/src/macros/errors.rs#L265). +Declared at [`pallets/subtensor/src/macros/errors.rs#L255`](/code/pallets/subtensor/src/macros/errors.rs#L255). ## Remediation diff --git a/docs/errors/chain/SameAutoStakeHotkeyAlreadySet.mdx b/docs/errors/chain/SameAutoStakeHotkeyAlreadySet.mdx index 4e99b006c4..1878d3d8eb 100644 --- a/docs/errors/chain/SameAutoStakeHotkeyAlreadySet.mdx +++ b/docs/errors/chain/SameAutoStakeHotkeyAlreadySet.mdx @@ -9,7 +9,7 @@ The coldkey tried to set its auto-stake destination on a subnet to the hotkey th Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L277`](/code/pallets/subtensor/src/macros/errors.rs#L277). +Declared at [`pallets/subtensor/src/macros/errors.rs#L267`](/code/pallets/subtensor/src/macros/errors.rs#L267). ## Remediation diff --git a/docs/errors/chain/StartCallNotReady.mdx b/docs/errors/chain/StartCallNotReady.mdx index fcf63f5a12..6d2fe9bf27 100644 --- a/docs/errors/chain/StartCallNotReady.mdx +++ b/docs/errors/chain/StartCallNotReady.mdx @@ -9,7 +9,7 @@ description: "The required window has not opened yet; wait some blocks and retry Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`too_early`](/docs/errors/too-early). -Declared at [`pallets/subtensor/src/macros/errors.rs#L347`](/code/pallets/subtensor/src/macros/errors.rs#L347). +Declared at [`pallets/subtensor/src/macros/errors.rs#L337`](/code/pallets/subtensor/src/macros/errors.rs#L337). ## Remediation diff --git a/docs/errors/chain/SubnetBuybackRateLimitExceeded.mdx b/docs/errors/chain/SubnetBuybackRateLimitExceeded.mdx index e7c13d3428..a857cca35c 100644 --- a/docs/errors/chain/SubnetBuybackRateLimitExceeded.mdx +++ b/docs/errors/chain/SubnetBuybackRateLimitExceeded.mdx @@ -9,7 +9,7 @@ A subnet buyback operation (staking TAO and immediately burning the acquired alp Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`rate_limited`](/docs/errors/rate-limited). -Declared at [`pallets/subtensor/src/macros/errors.rs#L299`](/code/pallets/subtensor/src/macros/errors.rs#L299). +Declared at [`pallets/subtensor/src/macros/errors.rs#L289`](/code/pallets/subtensor/src/macros/errors.rs#L289). ## Remediation diff --git a/docs/errors/chain/SubnetLimitReached.mdx b/docs/errors/chain/SubnetLimitReached.mdx index 6291875116..a6b2d41cc2 100644 --- a/docs/errors/chain/SubnetLimitReached.mdx +++ b/docs/errors/chain/SubnetLimitReached.mdx @@ -9,7 +9,7 @@ description: "A chain-side capacity limit was hit; reduce the size or count of t Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L269`](/code/pallets/subtensor/src/macros/errors.rs#L269). +Declared at [`pallets/subtensor/src/macros/errors.rs#L259`](/code/pallets/subtensor/src/macros/errors.rs#L259). ## Remediation diff --git a/docs/errors/chain/SymbolAlreadyInUse.mdx b/docs/errors/chain/SymbolAlreadyInUse.mdx index bdfe35ffe6..cf98c111f9 100644 --- a/docs/errors/chain/SymbolAlreadyInUse.mdx +++ b/docs/errors/chain/SymbolAlreadyInUse.mdx @@ -9,7 +9,7 @@ The token symbol requested for the subnet is already assigned to another subnet. Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`already_exists`](/docs/errors/already-exists). -Declared at [`pallets/subtensor/src/macros/errors.rs#L257`](/code/pallets/subtensor/src/macros/errors.rs#L257). +Declared at [`pallets/subtensor/src/macros/errors.rs#L247`](/code/pallets/subtensor/src/macros/errors.rs#L247). ## Remediation diff --git a/docs/errors/chain/SymbolDoesNotExist.mdx b/docs/errors/chain/SymbolDoesNotExist.mdx index acafa29b1a..9363260719 100644 --- a/docs/errors/chain/SymbolDoesNotExist.mdx +++ b/docs/errors/chain/SymbolDoesNotExist.mdx @@ -9,7 +9,7 @@ The requested token symbol is not in the chain's predefined symbol table, so it Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`not_found`](/docs/errors/not-found). -Declared at [`pallets/subtensor/src/macros/errors.rs#L255`](/code/pallets/subtensor/src/macros/errors.rs#L255). +Declared at [`pallets/subtensor/src/macros/errors.rs#L245`](/code/pallets/subtensor/src/macros/errors.rs#L245). ## Remediation diff --git a/docs/errors/chain/TempoOutOfBounds.mdx b/docs/errors/chain/TempoOutOfBounds.mdx index 5c023c9885..ede4e9bcf5 100644 --- a/docs/errors/chain/TempoOutOfBounds.mdx +++ b/docs/errors/chain/TempoOutOfBounds.mdx @@ -9,7 +9,7 @@ The subnet owner gave `sudo_set_tempo` a tempo outside the allowed MIN_TEMPO to Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`invalid_argument`](/docs/errors/invalid-argument). -Declared at [`pallets/subtensor/src/macros/errors.rs#L329`](/code/pallets/subtensor/src/macros/errors.rs#L329). +Declared at [`pallets/subtensor/src/macros/errors.rs#L319`](/code/pallets/subtensor/src/macros/errors.rs#L319). ## Remediation diff --git a/docs/errors/chain/TooManyUIDsPerMechanism.mdx b/docs/errors/chain/TooManyUIDsPerMechanism.mdx index d5ca3b3e30..47f406bf4d 100644 --- a/docs/errors/chain/TooManyUIDsPerMechanism.mdx +++ b/docs/errors/chain/TooManyUIDsPerMechanism.mdx @@ -9,7 +9,7 @@ Setting max UIDs or mechanism count would make max_uids times mechanism_count ex Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L291`](/code/pallets/subtensor/src/macros/errors.rs#L291). +Declared at [`pallets/subtensor/src/macros/errors.rs#L281`](/code/pallets/subtensor/src/macros/errors.rs#L281). ## Remediation diff --git a/docs/errors/chain/TrimmingWouldExceedMaxImmunePercentage.mdx b/docs/errors/chain/TrimmingWouldExceedMaxImmunePercentage.mdx index 61969ca155..7c386bc082 100644 --- a/docs/errors/chain/TrimmingWouldExceedMaxImmunePercentage.mdx +++ b/docs/errors/chain/TrimmingWouldExceedMaxImmunePercentage.mdx @@ -9,7 +9,7 @@ Trimming the subnet's UIDs cannot proceed because immune neurons would make up a Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`limit_exceeded`](/docs/errors/limit-exceeded). -Declared at [`pallets/subtensor/src/macros/errors.rs#L281`](/code/pallets/subtensor/src/macros/errors.rs#L281). +Declared at [`pallets/subtensor/src/macros/errors.rs#L271`](/code/pallets/subtensor/src/macros/errors.rs#L271). ## Remediation diff --git a/docs/errors/chain/UidMapCouldNotBeCleared.mdx b/docs/errors/chain/UidMapCouldNotBeCleared.mdx index 5c8195e6a0..73d6c7e465 100644 --- a/docs/errors/chain/UidMapCouldNotBeCleared.mdx +++ b/docs/errors/chain/UidMapCouldNotBeCleared.mdx @@ -9,7 +9,7 @@ During a UID reshuffle or trim, clearing the subnet's `Uids` map left residual e Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`internal`](/docs/errors/internal). -Declared at [`pallets/subtensor/src/macros/errors.rs#L279`](/code/pallets/subtensor/src/macros/errors.rs#L279). +Declared at [`pallets/subtensor/src/macros/errors.rs#L269`](/code/pallets/subtensor/src/macros/errors.rs#L269). ## Remediation diff --git a/docs/errors/chain/UnlockAmountTooHigh.mdx b/docs/errors/chain/UnlockAmountTooHigh.mdx index 112e3951cd..ce86988701 100644 --- a/docs/errors/chain/UnlockAmountTooHigh.mdx +++ b/docs/errors/chain/UnlockAmountTooHigh.mdx @@ -9,7 +9,7 @@ An unlock requested more alpha than remains locked for the coldkey on that subne Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`insufficient_balance`](/docs/errors/insufficient-balance). -Declared at [`pallets/subtensor/src/macros/errors.rs#L325`](/code/pallets/subtensor/src/macros/errors.rs#L325). +Declared at [`pallets/subtensor/src/macros/errors.rs#L315`](/code/pallets/subtensor/src/macros/errors.rs#L315). ## Remediation diff --git a/docs/errors/chain/VotingPowerTrackingNotEnabled.mdx b/docs/errors/chain/VotingPowerTrackingNotEnabled.mdx index 00c2e603a7..88fbb45a09 100644 --- a/docs/errors/chain/VotingPowerTrackingNotEnabled.mdx +++ b/docs/errors/chain/VotingPowerTrackingNotEnabled.mdx @@ -9,7 +9,7 @@ Disabling voting power tracking was requested on a subnet where tracking is not Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`disabled`](/docs/errors/disabled). -Declared at [`pallets/subtensor/src/macros/errors.rs#L293`](/code/pallets/subtensor/src/macros/errors.rs#L293). +Declared at [`pallets/subtensor/src/macros/errors.rs#L283`](/code/pallets/subtensor/src/macros/errors.rs#L283). ## Remediation diff --git a/docs/errors/chain/WaitingForDissolvedSubnetCleanup.mdx b/docs/errors/chain/WaitingForDissolvedSubnetCleanup.mdx index dc3106cadb..7145074a1f 100644 --- a/docs/errors/chain/WaitingForDissolvedSubnetCleanup.mdx +++ b/docs/errors/chain/WaitingForDissolvedSubnetCleanup.mdx @@ -9,7 +9,7 @@ The operation is blocked while a dissolved subnet's storage is still being torn Declared by the `SubtensorModule` pallet; it classifies to the semantic code [`too_early`](/docs/errors/too-early). -Declared at [`pallets/subtensor/src/macros/errors.rs#L327`](/code/pallets/subtensor/src/macros/errors.rs#L327). +Declared at [`pallets/subtensor/src/macros/errors.rs#L317`](/code/pallets/subtensor/src/macros/errors.rs#L317). ## Remediation diff --git a/docs/hyperparameters/index.mdx b/docs/hyperparameters/index.mdx index 9e4d14f0f4..26beedcbe6 100644 --- a/docs/hyperparameters/index.mdx +++ b/docs/hyperparameters/index.mdx @@ -9,50 +9,50 @@ Read them with `btcli sudo get --netuid N` (the [`subnet_hyperparameters`](/docs | Hyperparameter | Unit | Owner-settable | What it controls | Source | | --- | --- | --- | --- | --- | -| [`rho`](/docs/hyperparameters/rho) | integer | yes | trust curve steepness | [`Rho`](/code/pallets/subtensor/src/lib.rs#L2127) | -| [`kappa`](/docs/hyperparameters/kappa) | fraction (u16, 65535 = 1.0) | root only | consensus majority-stake threshold | [`Kappa`](/code/pallets/subtensor/src/lib.rs#L2136) | -| [`immunity_period`](/docs/hyperparameters/immunity-period) | blocks (12s) | yes | prune-immunity window for new neurons | [`ImmunityPeriod`](/code/pallets/subtensor/src/lib.rs#L2165) | -| [`min_allowed_weights`](/docs/hyperparameters/min-allowed-weights) | integer | yes | minimum weights per submission | [`MinAllowedWeights`](/code/pallets/subtensor/src/lib.rs#L2191) | -| [`max_weights_limit`](/docs/hyperparameters/max-weights-limit) | fraction (u16, 65535 = 1.0) | root only | cap on a single miner's weight | [`MaxWeightsLimit`](/code/pallets/subtensor/src/lib.rs#L2181) | -| [`tempo`](/docs/hyperparameters/tempo) | blocks (12s) | yes | blocks per consensus epoch | [`Tempo`](/code/pallets/subtensor/src/lib.rs#L1955) | -| [`min_difficulty`](/docs/hyperparameters/min-difficulty) | PoW difficulty (u64) | root only | PoW registration difficulty floor | [`MinDifficulty`](/code/pallets/subtensor/src/lib.rs#L2269) | -| [`max_difficulty`](/docs/hyperparameters/max-difficulty) | PoW difficulty (u64) | yes | PoW registration difficulty ceiling | [`MaxDifficulty`](/code/pallets/subtensor/src/lib.rs#L2274) | -| [`difficulty`](/docs/hyperparameters/difficulty) | PoW difficulty (u64) | root only | current PoW registration difficulty | [`Difficulty`](/code/pallets/subtensor/src/lib.rs#L2255) | -| [`weights_version`](/docs/hyperparameters/weights-version) | integer | yes | minimum version key for set_weights | [`WeightsVersionKey`](/code/pallets/subtensor/src/lib.rs#L2186) | -| [`weights_rate_limit`](/docs/hyperparameters/weights-rate-limit) | blocks (12s) | root only | wait between weight submissions | [`WeightsSetRateLimit`](/code/pallets/subtensor/src/lib.rs#L2221) | -| [`adjustment_interval`](/docs/hyperparameters/adjustment-interval) | blocks (12s) | root only | difficulty/burn adjustment cadence | [`AdjustmentInterval`](/code/pallets/subtensor/src/lib.rs#L2201) | -| [`activity_cutoff`](/docs/hyperparameters/activity-cutoff) | blocks (12s) | root only | no-weights window before inactive | [`ActivityCutoff`](/code/pallets/subtensor/src/lib.rs#L2171) | -| [`activity_cutoff_factor`](/docs/hyperparameters/activity-cutoff-factor) | integer | yes | activity cutoff, per-mille of tempo | [`ActivityCutoffFactorMilli`](/code/pallets/subtensor/src/lib.rs#L1998) | -| [`registration_allowed`](/docs/hyperparameters/registration-allowed) | flag | root only | new neuron registrations allowed | [`NetworkRegistrationAllowed`](/code/pallets/subtensor/src/lib.rs#L2036) | -| [`network_pow_registration_allowed`](/docs/hyperparameters/network-pow-registration-allowed) | flag | yes | PoW registration toggle | [`NetworkPowRegistrationAllowed`](/code/pallets/subtensor/src/lib.rs#L2041) | -| [`target_regs_per_interval`](/docs/hyperparameters/target-regs-per-interval) | integer | root only | registration-rate controller target | [`TargetRegistrationsPerInterval`](/code/pallets/subtensor/src/lib.rs#L2236) | -| [`min_burn`](/docs/hyperparameters/min-burn) | TAO amount in rao | yes | burned-registration cost floor | [`MinBurn`](/code/pallets/subtensor/src/lib.rs#L2259) | -| [`max_burn`](/docs/hyperparameters/max-burn) | TAO amount in rao | yes | burned-registration cost ceiling | [`MaxBurn`](/code/pallets/subtensor/src/lib.rs#L2264) | -| [`bonds_moving_avg`](/docs/hyperparameters/bonds-moving-avg) | fraction (1,000,000 = 1.0) | yes | bonds EMA smoothing factor | [`BondsMovingAverage`](/code/pallets/subtensor/src/lib.rs#L2206) | -| [`max_regs_per_block`](/docs/hyperparameters/max-regs-per-block) | integer | root only | per-block registration cap | [`MaxRegistrationsPerBlock`](/code/pallets/subtensor/src/lib.rs#L1871) | -| [`serving_rate_limit`](/docs/hyperparameters/serving-rate-limit) | blocks (12s) | yes | cooldown between axon serve calls | [`ServingRateLimit`](/code/pallets/subtensor/src/lib.rs#L2122) | -| [`max_validators`](/docs/hyperparameters/max-validators) | integer | root only | top-stake validator permit cap | [`MaxAllowedValidators`](/code/pallets/subtensor/src/lib.rs#L2196) | -| [`adjustment_alpha`](/docs/hyperparameters/adjustment-alpha) | fraction (u64, u64::MAX = 1.0) | yes | difficulty/burn adjust smoothing | [`AdjustmentAlpha`](/code/pallets/subtensor/src/lib.rs#L2241) | -| [`commit_reveal_period`](/docs/hyperparameters/commit-reveal-period) | epochs (tempos) | yes | weight commit-to-reveal delay | [`RevealPeriodEpochs`](/code/pallets/subtensor/src/lib.rs#L2683) | -| [`commit_reveal_weights_enabled`](/docs/hyperparameters/commit-reveal-weights-enabled) | flag | yes | commit-reveal weights toggle | [`CommitRevealWeightsEnabled`](/code/pallets/subtensor/src/lib.rs#L2246) | +| [`rho`](/docs/hyperparameters/rho) | integer | yes | trust curve steepness | [`Rho`](/code/pallets/subtensor/src/lib.rs#L2124) | +| [`kappa`](/docs/hyperparameters/kappa) | fraction (u16, 65535 = 1.0) | root only | consensus majority-stake threshold | [`Kappa`](/code/pallets/subtensor/src/lib.rs#L2133) | +| [`immunity_period`](/docs/hyperparameters/immunity-period) | blocks (12s) | yes | prune-immunity window for new neurons | [`ImmunityPeriod`](/code/pallets/subtensor/src/lib.rs#L2162) | +| [`min_allowed_weights`](/docs/hyperparameters/min-allowed-weights) | integer | yes | minimum weights per submission | [`MinAllowedWeights`](/code/pallets/subtensor/src/lib.rs#L2188) | +| [`max_weights_limit`](/docs/hyperparameters/max-weights-limit) | fraction (u16, 65535 = 1.0) | root only | cap on a single miner's weight | [`MaxWeightsLimit`](/code/pallets/subtensor/src/lib.rs#L2178) | +| [`tempo`](/docs/hyperparameters/tempo) | blocks (12s) | yes | blocks per consensus epoch | [`Tempo`](/code/pallets/subtensor/src/lib.rs#L1952) | +| [`min_difficulty`](/docs/hyperparameters/min-difficulty) | PoW difficulty (u64) | root only | PoW registration difficulty floor | [`MinDifficulty`](/code/pallets/subtensor/src/lib.rs#L2266) | +| [`max_difficulty`](/docs/hyperparameters/max-difficulty) | PoW difficulty (u64) | yes | PoW registration difficulty ceiling | [`MaxDifficulty`](/code/pallets/subtensor/src/lib.rs#L2271) | +| [`difficulty`](/docs/hyperparameters/difficulty) | PoW difficulty (u64) | root only | current PoW registration difficulty | [`Difficulty`](/code/pallets/subtensor/src/lib.rs#L2252) | +| [`weights_version`](/docs/hyperparameters/weights-version) | integer | yes | minimum version key for set_weights | [`WeightsVersionKey`](/code/pallets/subtensor/src/lib.rs#L2183) | +| [`weights_rate_limit`](/docs/hyperparameters/weights-rate-limit) | blocks (12s) | root only | wait between weight submissions | [`WeightsSetRateLimit`](/code/pallets/subtensor/src/lib.rs#L2218) | +| [`adjustment_interval`](/docs/hyperparameters/adjustment-interval) | blocks (12s) | root only | difficulty/burn adjustment cadence | [`AdjustmentInterval`](/code/pallets/subtensor/src/lib.rs#L2198) | +| [`activity_cutoff`](/docs/hyperparameters/activity-cutoff) | blocks (12s) | root only | no-weights window before inactive | [`ActivityCutoff`](/code/pallets/subtensor/src/lib.rs#L2168) | +| [`activity_cutoff_factor`](/docs/hyperparameters/activity-cutoff-factor) | integer | yes | activity cutoff, per-mille of tempo | [`ActivityCutoffFactorMilli`](/code/pallets/subtensor/src/lib.rs#L1995) | +| [`registration_allowed`](/docs/hyperparameters/registration-allowed) | flag | root only | new neuron registrations allowed | [`NetworkRegistrationAllowed`](/code/pallets/subtensor/src/lib.rs#L2033) | +| [`network_pow_registration_allowed`](/docs/hyperparameters/network-pow-registration-allowed) | flag | yes | PoW registration toggle | [`NetworkPowRegistrationAllowed`](/code/pallets/subtensor/src/lib.rs#L2038) | +| [`target_regs_per_interval`](/docs/hyperparameters/target-regs-per-interval) | integer | root only | registration-rate controller target | [`TargetRegistrationsPerInterval`](/code/pallets/subtensor/src/lib.rs#L2233) | +| [`min_burn`](/docs/hyperparameters/min-burn) | TAO amount in rao | yes | burned-registration cost floor | [`MinBurn`](/code/pallets/subtensor/src/lib.rs#L2256) | +| [`max_burn`](/docs/hyperparameters/max-burn) | TAO amount in rao | yes | burned-registration cost ceiling | [`MaxBurn`](/code/pallets/subtensor/src/lib.rs#L2261) | +| [`bonds_moving_avg`](/docs/hyperparameters/bonds-moving-avg) | fraction (1,000,000 = 1.0) | yes | bonds EMA smoothing factor | [`BondsMovingAverage`](/code/pallets/subtensor/src/lib.rs#L2203) | +| [`max_regs_per_block`](/docs/hyperparameters/max-regs-per-block) | integer | root only | per-block registration cap | [`MaxRegistrationsPerBlock`](/code/pallets/subtensor/src/lib.rs#L1868) | +| [`serving_rate_limit`](/docs/hyperparameters/serving-rate-limit) | blocks (12s) | yes | cooldown between axon serve calls | [`ServingRateLimit`](/code/pallets/subtensor/src/lib.rs#L2119) | +| [`max_validators`](/docs/hyperparameters/max-validators) | integer | root only | top-stake validator permit cap | [`MaxAllowedValidators`](/code/pallets/subtensor/src/lib.rs#L2193) | +| [`adjustment_alpha`](/docs/hyperparameters/adjustment-alpha) | fraction (u64, u64::MAX = 1.0) | yes | difficulty/burn adjust smoothing | [`AdjustmentAlpha`](/code/pallets/subtensor/src/lib.rs#L2238) | +| [`commit_reveal_period`](/docs/hyperparameters/commit-reveal-period) | epochs (tempos) | yes | weight commit-to-reveal delay | [`RevealPeriodEpochs`](/code/pallets/subtensor/src/lib.rs#L2680) | +| [`commit_reveal_weights_enabled`](/docs/hyperparameters/commit-reveal-weights-enabled) | flag | yes | commit-reveal weights toggle | [`CommitRevealWeightsEnabled`](/code/pallets/subtensor/src/lib.rs#L2243) | | [`alpha_high`](/docs/hyperparameters/alpha-high) | fraction (u16, 65535 = 1.0) | yes | liquid-alpha smoothing upper bound | — | | [`alpha_low`](/docs/hyperparameters/alpha-low) | fraction (u16, 65535 = 1.0) | yes | liquid-alpha smoothing lower bound | — | -| [`liquid_alpha_enabled`](/docs/hyperparameters/liquid-alpha-enabled) | flag | yes | per-weight bonds EMA (liquid alpha) | [`LiquidAlphaOn`](/code/pallets/subtensor/src/lib.rs#L2323) | -| [`bonds_penalty`](/docs/hyperparameters/bonds-penalty) | fraction (u16, 65535 = 1.0) | yes | penalty on out-of-consensus bonds | [`BondsPenalty`](/code/pallets/subtensor/src/lib.rs#L2211) | -| [`alpha_sigmoid_steepness`](/docs/hyperparameters/alpha-sigmoid-steepness) | integer | yes | liquid-alpha sigmoid steepness | [`AlphaSigmoidSteepness`](/code/pallets/subtensor/src/lib.rs#L2131) | -| [`min_childkey_take`](/docs/hyperparameters/min-childkey-take) | fraction (u16, 65535 = 1.0) | yes | floor for childkey take | [`MinChildkeyTakePerSubnet`](/code/pallets/subtensor/src/lib.rs#L1345) | -| [`owner_immune_neuron_limit`](/docs/hyperparameters/owner-immune-neuron-limit) | integer | yes | owner-designated prune-immune UIDs | [`ImmuneOwnerUidsLimit`](/code/pallets/subtensor/src/lib.rs#L2422) | -| [`max_allowed_uids`](/docs/hyperparameters/max-allowed-uids) | integer | yes | neuron slot capacity before pruning | [`MaxAllowedUids`](/code/pallets/subtensor/src/lib.rs#L2160) | -| [`burn_increase_mult`](/docs/hyperparameters/burn-increase-mult) | multiplier (U64F64 bits / 2^64) | yes | burn cost bump per registration | [`BurnIncreaseMult`](/code/pallets/subtensor/src/lib.rs#L2878) | -| [`burn_half_life`](/docs/hyperparameters/burn-half-life) | blocks (12s) | yes | burn cost decay half-life | [`BurnHalfLife`](/code/pallets/subtensor/src/lib.rs#L2873) | -| [`collateral_lock_share`](/docs/hyperparameters/collateral-lock-share) | fraction (u16, 65535 = 1.0) | yes | registration price share locked | [`CollateralLockShare`](/code/pallets/subtensor/src/lib.rs#L2887) | -| [`collateral_drain_ratio`](/docs/hyperparameters/collateral-drain-ratio) | multiplier (U64F64 bits / 2^64) | yes | collateral released per α earned | [`CollateralDrainRatio`](/code/pallets/subtensor/src/lib.rs#L2896) | -| [`yuma3_enabled`](/docs/hyperparameters/yuma3-enabled) | flag | yes | yuma3 consensus variant toggle | [`Yuma3On`](/code/pallets/subtensor/src/lib.rs#L2328) | +| [`liquid_alpha_enabled`](/docs/hyperparameters/liquid-alpha-enabled) | flag | yes | per-weight bonds EMA (liquid alpha) | [`LiquidAlphaOn`](/code/pallets/subtensor/src/lib.rs#L2320) | +| [`bonds_penalty`](/docs/hyperparameters/bonds-penalty) | fraction (u16, 65535 = 1.0) | yes | penalty on out-of-consensus bonds | [`BondsPenalty`](/code/pallets/subtensor/src/lib.rs#L2208) | +| [`alpha_sigmoid_steepness`](/docs/hyperparameters/alpha-sigmoid-steepness) | integer | yes | liquid-alpha sigmoid steepness | [`AlphaSigmoidSteepness`](/code/pallets/subtensor/src/lib.rs#L2128) | +| [`min_childkey_take`](/docs/hyperparameters/min-childkey-take) | fraction (u16, 65535 = 1.0) | yes | floor for childkey take | [`MinChildkeyTakePerSubnet`](/code/pallets/subtensor/src/lib.rs#L1342) | +| [`owner_immune_neuron_limit`](/docs/hyperparameters/owner-immune-neuron-limit) | integer | yes | owner-designated prune-immune UIDs | [`ImmuneOwnerUidsLimit`](/code/pallets/subtensor/src/lib.rs#L2419) | +| [`max_allowed_uids`](/docs/hyperparameters/max-allowed-uids) | integer | yes | neuron slot capacity before pruning | [`MaxAllowedUids`](/code/pallets/subtensor/src/lib.rs#L2157) | +| [`burn_increase_mult`](/docs/hyperparameters/burn-increase-mult) | multiplier (U64F64 bits / 2^64) | yes | burn cost bump per registration | [`BurnIncreaseMult`](/code/pallets/subtensor/src/lib.rs#L2852) | +| [`burn_half_life`](/docs/hyperparameters/burn-half-life) | blocks (12s) | yes | burn cost decay half-life | [`BurnHalfLife`](/code/pallets/subtensor/src/lib.rs#L2847) | +| [`collateral_lock_share`](/docs/hyperparameters/collateral-lock-share) | fraction (u16, 65535 = 1.0) | yes | registration price share locked | [`CollateralLockShare`](/code/pallets/subtensor/src/lib.rs#L2861) | +| [`collateral_drain_ratio`](/docs/hyperparameters/collateral-drain-ratio) | multiplier (U64F64 bits / 2^64) | yes | collateral released per α earned | [`CollateralDrainRatio`](/code/pallets/subtensor/src/lib.rs#L2870) | +| [`yuma3_enabled`](/docs/hyperparameters/yuma3-enabled) | flag | yes | yuma3 consensus variant toggle | [`Yuma3On`](/code/pallets/subtensor/src/lib.rs#L2325) | | [`yuma_version`](/docs/hyperparameters/yuma-version) | integer | root only | epoch consensus variant (2 or 3) | — | | [`subnet_is_active`](/docs/hyperparameters/subnet-is-active) | flag | root only | subnet started (staking + emissions) | — | -| [`subnet_emission_enabled`](/docs/hyperparameters/subnet-emission-enabled) | flag | root only | root switch for TAO emission share | [`SubnetEmissionEnabled`](/code/pallets/subtensor/src/lib.rs#L1518) | +| [`subnet_emission_enabled`](/docs/hyperparameters/subnet-emission-enabled) | flag | root only | root switch for TAO emission share | [`SubnetEmissionEnabled`](/code/pallets/subtensor/src/lib.rs#L1515) | | [`user_liquidity_enabled`](/docs/hyperparameters/user-liquidity-enabled) | flag | root only | legacy user-LP flag (always false) | — | -| [`bonds_reset_enabled`](/docs/hyperparameters/bonds-reset-enabled) | flag | yes | bonds reset on metadata commit | [`BondsResetOn`](/code/pallets/subtensor/src/lib.rs#L2216) | -| [`transfers_enabled`](/docs/hyperparameters/transfers-enabled) | flag | yes | stake transfers between coldkeys | [`TransferToggle`](/code/pallets/subtensor/src/lib.rs#L1939) | -| [`owner_cut_enabled`](/docs/hyperparameters/owner-cut-enabled) | flag | yes | owner emission cut toggle | [`OwnerCutEnabled`](/code/pallets/subtensor/src/lib.rs#L1914) | -| [`owner_cut_auto_lock_enabled`](/docs/hyperparameters/owner-cut-auto-lock-enabled) | flag | yes | auto-lock the owner's emission cut | [`OwnerCutAutoLockEnabled`](/code/pallets/subtensor/src/lib.rs#L1761) | +| [`bonds_reset_enabled`](/docs/hyperparameters/bonds-reset-enabled) | flag | yes | bonds reset on metadata commit | [`BondsResetOn`](/code/pallets/subtensor/src/lib.rs#L2213) | +| [`transfers_enabled`](/docs/hyperparameters/transfers-enabled) | flag | yes | stake transfers between coldkeys | [`TransferToggle`](/code/pallets/subtensor/src/lib.rs#L1936) | +| [`owner_cut_enabled`](/docs/hyperparameters/owner-cut-enabled) | flag | yes | owner emission cut toggle | [`OwnerCutEnabled`](/code/pallets/subtensor/src/lib.rs#L1911) | +| [`owner_cut_auto_lock_enabled`](/docs/hyperparameters/owner-cut-auto-lock-enabled) | flag | yes | auto-lock the owner's emission cut | [`OwnerCutAutoLockEnabled`](/code/pallets/subtensor/src/lib.rs#L1758) | diff --git a/docs/query/alpha-prices.mdx b/docs/query/alpha-prices.mdx index d469b8c956..399304d71e 100644 --- a/docs/query/alpha-prices.mdx +++ b/docs/query/alpha-prices.mdx @@ -40,6 +40,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`SwapRuntimeApi.current_alpha_price_all`](/code/runtime/src/lib.rs#L2426-L2436) +- Runtime API [`SwapRuntimeApi.current_alpha_price_all`](/code/runtime/src/lib.rs#L2425-L2435) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/associated-evm-key.mdx b/docs/query/associated-evm-key.mdx index 1d6fa8c0f9..1a3de46b2c 100644 --- a/docs/query/associated-evm-key.mdx +++ b/docs/query/associated-evm-key.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.AssociatedEvmAddress`](/code/pallets/subtensor/src/lib.rs#L2748) +- Storage [`SubtensorModule.AssociatedEvmAddress`](/code/pallets/subtensor/src/lib.rs#L2745) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/auto-stake-all.mdx b/docs/query/auto-stake-all.mdx index d637a66ebc..4e02f3c739 100644 --- a/docs/query/auto-stake-all.mdx +++ b/docs/query/auto-stake-all.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.AutoStakeDestination`](/code/pallets/subtensor/src/lib.rs#L1567) +- Storage [`SubtensorModule.AutoStakeDestination`](/code/pallets/subtensor/src/lib.rs#L1564) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/auto-stake.mdx b/docs/query/auto-stake.mdx index 57d4d85c8f..83fcc6b801 100644 --- a/docs/query/auto-stake.mdx +++ b/docs/query/auto-stake.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.AutoStakeDestination`](/code/pallets/subtensor/src/lib.rs#L1567) +- Storage [`SubtensorModule.AutoStakeDestination`](/code/pallets/subtensor/src/lib.rs#L1564) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/blocks-since-last-step.mdx b/docs/query/blocks-since-last-step.mdx index d15062b2b7..bff2922942 100644 --- a/docs/query/blocks-since-last-step.mdx +++ b/docs/query/blocks-since-last-step.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.BlocksSinceLastStep`](/code/pallets/subtensor/src/lib.rs#L2097) +- Storage [`SubtensorModule.BlocksSinceLastStep`](/code/pallets/subtensor/src/lib.rs#L2094) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/blocks-since-last-update.mdx b/docs/query/blocks-since-last-update.mdx index d00ea04b75..5a7b384218 100644 --- a/docs/query/blocks-since-last-update.mdx +++ b/docs/query/blocks-since-last-update.mdx @@ -48,6 +48,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.LastUpdate`](/code/pallets/subtensor/src/lib.rs#L2480) +- Storage [`SubtensorModule.LastUpdate`](/code/pallets/subtensor/src/lib.rs#L2477) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/bonds.mdx b/docs/query/bonds.mdx index 917164a966..7fee22f6e0 100644 --- a/docs/query/bonds.mdx +++ b/docs/query/bonds.mdx @@ -46,6 +46,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Bonds`](/code/pallets/subtensor/src/lib.rs#L2508) +- Storage [`SubtensorModule.Bonds`](/code/pallets/subtensor/src/lib.rs#L2505) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/burn.mdx b/docs/query/burn.mdx index c743910bfe..ad78b4abf3 100644 --- a/docs/query/burn.mdx +++ b/docs/query/burn.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Burn`](/code/pallets/subtensor/src/lib.rs#L2251) +- Storage [`SubtensorModule.Burn`](/code/pallets/subtensor/src/lib.rs#L2248) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/children.mdx b/docs/query/children.mdx index 4feff47cf4..d93c797301 100644 --- a/docs/query/children.mdx +++ b/docs/query/children.mdx @@ -44,6 +44,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.ChildKeys`](/code/pallets/subtensor/src/lib.rs#L1390) +- Storage [`SubtensorModule.ChildKeys`](/code/pallets/subtensor/src/lib.rs#L1387) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/coldkey-lock.mdx b/docs/query/coldkey-lock.mdx index 275a4e4c51..bd9e878e3c 100644 --- a/docs/query/coldkey-lock.mdx +++ b/docs/query/coldkey-lock.mdx @@ -44,6 +44,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Lock`](/code/pallets/subtensor/src/lib.rs#L1690) +- Storage [`SubtensorModule.Lock`](/code/pallets/subtensor/src/lib.rs#L1687) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/coldkey-swap-announcement.mdx b/docs/query/coldkey-swap-announcement.mdx index f82fe8bd54..b3c8290d07 100644 --- a/docs/query/coldkey-swap-announcement.mdx +++ b/docs/query/coldkey-swap-announcement.mdx @@ -43,7 +43,7 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.ColdkeySwapAnnouncements`](/code/pallets/subtensor/src/lib.rs#L1602) -- Storage [`SubtensorModule.ColdkeySwapDisputes`](/code/pallets/subtensor/src/lib.rs#L1608) +- Storage [`SubtensorModule.ColdkeySwapAnnouncements`](/code/pallets/subtensor/src/lib.rs#L1599) +- Storage [`SubtensorModule.ColdkeySwapDisputes`](/code/pallets/subtensor/src/lib.rs#L1605) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/commit-reveal-enabled.mdx b/docs/query/commit-reveal-enabled.mdx index 0e3681837c..9006b68f8c 100644 --- a/docs/query/commit-reveal-enabled.mdx +++ b/docs/query/commit-reveal-enabled.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.CommitRevealWeightsEnabled`](/code/pallets/subtensor/src/lib.rs#L2246) +- Storage [`SubtensorModule.CommitRevealWeightsEnabled`](/code/pallets/subtensor/src/lib.rs#L2243) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/delegate-take.mdx b/docs/query/delegate-take.mdx index 9e1035da7f..6de83de500 100644 --- a/docs/query/delegate-take.mdx +++ b/docs/query/delegate-take.mdx @@ -43,8 +43,8 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Delegates`](/code/pallets/subtensor/src/lib.rs#L1360) -- Storage [`SubtensorModule.MinDelegateTake`](/code/pallets/subtensor/src/lib.rs#L1333) -- Storage [`SubtensorModule.MaxDelegateTake`](/code/pallets/subtensor/src/lib.rs#L1329) +- Storage [`SubtensorModule.Delegates`](/code/pallets/subtensor/src/lib.rs#L1357) +- Storage [`SubtensorModule.MinDelegateTake`](/code/pallets/subtensor/src/lib.rs#L1330) +- Storage [`SubtensorModule.MaxDelegateTake`](/code/pallets/subtensor/src/lib.rs#L1326) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/difficulty.mdx b/docs/query/difficulty.mdx index bfd33e686f..cdde2af7d2 100644 --- a/docs/query/difficulty.mdx +++ b/docs/query/difficulty.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Difficulty`](/code/pallets/subtensor/src/lib.rs#L2255) +- Storage [`SubtensorModule.Difficulty`](/code/pallets/subtensor/src/lib.rs#L2252) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/epoch-status.mdx b/docs/query/epoch-status.mdx index c9e88cc949..3461ed694a 100644 --- a/docs/query/epoch-status.mdx +++ b/docs/query/epoch-status.mdx @@ -45,11 +45,11 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1955) -- Storage [`SubtensorModule.LastEpochBlock`](/code/pallets/subtensor/src/lib.rs#L1980) -- Storage [`SubtensorModule.BlocksSinceLastStep`](/code/pallets/subtensor/src/lib.rs#L2097) -- Storage [`SubtensorModule.PendingEpochAt`](/code/pallets/subtensor/src/lib.rs#L1986) -- Storage [`SubtensorModule.SubnetEpochIndex`](/code/pallets/subtensor/src/lib.rs#L1992) +- Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1952) +- Storage [`SubtensorModule.LastEpochBlock`](/code/pallets/subtensor/src/lib.rs#L1977) +- Storage [`SubtensorModule.BlocksSinceLastStep`](/code/pallets/subtensor/src/lib.rs#L2094) +- Storage [`SubtensorModule.PendingEpochAt`](/code/pallets/subtensor/src/lib.rs#L1983) +- Storage [`SubtensorModule.SubnetEpochIndex`](/code/pallets/subtensor/src/lib.rs#L1989) - Runtime API [`SubnetInfoRuntimeApi.get_next_epoch_start_block`](/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1196-L1210) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/existential-deposit.mdx b/docs/query/existential-deposit.mdx index 4391704034..45f5748c02 100644 --- a/docs/query/existential-deposit.mdx +++ b/docs/query/existential-deposit.mdx @@ -40,6 +40,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Constant [`Balances.ExistentialDeposit`](/code/runtime/src/lib.rs#L477) +- Constant [`Balances.ExistentialDeposit`](/code/runtime/src/lib.rs#L476) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/hotkey-conviction.mdx b/docs/query/hotkey-conviction.mdx index 8bfc0bc19e..320082eee5 100644 --- a/docs/query/hotkey-conviction.mdx +++ b/docs/query/hotkey-conviction.mdx @@ -44,6 +44,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`StakeInfoRuntimeApi.get_hotkey_conviction`](/code/runtime/src/lib.rs#L2339-L2341) +- Runtime API [`StakeInfoRuntimeApi.get_hotkey_conviction`](/code/runtime/src/lib.rs#L2338-L2340) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/hotkey-identities.mdx b/docs/query/hotkey-identities.mdx index 1e2c2e24da..723edb6a4a 100644 --- a/docs/query/hotkey-identities.mdx +++ b/docs/query/hotkey-identities.mdx @@ -42,7 +42,7 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Owner`](/code/pallets/subtensor/src/lib.rs#L1350) -- Storage [`SubtensorModule.IdentitiesV2`](/code/pallets/subtensor/src/lib.rs#L2570) +- Storage [`SubtensorModule.Owner`](/code/pallets/subtensor/src/lib.rs#L1347) +- Storage [`SubtensorModule.IdentitiesV2`](/code/pallets/subtensor/src/lib.rs#L2567) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/hotkey-owner.mdx b/docs/query/hotkey-owner.mdx index 1592931625..5c7f0aabf4 100644 --- a/docs/query/hotkey-owner.mdx +++ b/docs/query/hotkey-owner.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Owner`](/code/pallets/subtensor/src/lib.rs#L1350) +- Storage [`SubtensorModule.Owner`](/code/pallets/subtensor/src/lib.rs#L1347) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/identity.mdx b/docs/query/identity.mdx index 39a4f94742..aec6510397 100644 --- a/docs/query/identity.mdx +++ b/docs/query/identity.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.IdentitiesV2`](/code/pallets/subtensor/src/lib.rs#L2570) +- Storage [`SubtensorModule.IdentitiesV2`](/code/pallets/subtensor/src/lib.rs#L2567) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/immunity-period.mdx b/docs/query/immunity-period.mdx index 1ff42e862e..0fe4508d5b 100644 --- a/docs/query/immunity-period.mdx +++ b/docs/query/immunity-period.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.ImmunityPeriod`](/code/pallets/subtensor/src/lib.rs#L2165) +- Storage [`SubtensorModule.ImmunityPeriod`](/code/pallets/subtensor/src/lib.rs#L2162) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/lease.mdx b/docs/query/lease.mdx index 887c29773c..185838bb2f 100644 --- a/docs/query/lease.mdx +++ b/docs/query/lease.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.SubnetLeases`](/code/pallets/subtensor/src/lib.rs#L2766) +- Storage [`SubtensorModule.SubnetLeases`](/code/pallets/subtensor/src/lib.rs#L2763) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/leases.mdx b/docs/query/leases.mdx index 443a3ec713..fdde0840ec 100644 --- a/docs/query/leases.mdx +++ b/docs/query/leases.mdx @@ -40,6 +40,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.SubnetLeases`](/code/pallets/subtensor/src/lib.rs#L2766) +- Storage [`SubtensorModule.SubnetLeases`](/code/pallets/subtensor/src/lib.rs#L2763) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/locks-for-coldkey.mdx b/docs/query/locks-for-coldkey.mdx index 28838409c4..5b7f2625a8 100644 --- a/docs/query/locks-for-coldkey.mdx +++ b/docs/query/locks-for-coldkey.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Lock`](/code/pallets/subtensor/src/lib.rs#L1690) +- Storage [`SubtensorModule.Lock`](/code/pallets/subtensor/src/lib.rs#L1687) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/max-weight-limit.mdx b/docs/query/max-weight-limit.mdx index fd4f20d588..67d8335c50 100644 --- a/docs/query/max-weight-limit.mdx +++ b/docs/query/max-weight-limit.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.MaxWeightsLimit`](/code/pallets/subtensor/src/lib.rs#L2181) +- Storage [`SubtensorModule.MaxWeightsLimit`](/code/pallets/subtensor/src/lib.rs#L2178) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/mechanism-count.mdx b/docs/query/mechanism-count.mdx index bda1bf0f20..3d3e8877dd 100644 --- a/docs/query/mechanism-count.mdx +++ b/docs/query/mechanism-count.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.MechanismCountCurrent`](/code/pallets/subtensor/src/lib.rs#L2863) +- Storage [`SubtensorModule.MechanismCountCurrent`](/code/pallets/subtensor/src/lib.rs#L2837) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/mechanism-emission-split.mdx b/docs/query/mechanism-emission-split.mdx index 248145ae22..b7527ed164 100644 --- a/docs/query/mechanism-emission-split.mdx +++ b/docs/query/mechanism-emission-split.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.MechanismEmissionSplit`](/code/pallets/subtensor/src/lib.rs#L2868) +- Storage [`SubtensorModule.MechanismEmissionSplit`](/code/pallets/subtensor/src/lib.rs#L2842) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/min-allowed-weights.mdx b/docs/query/min-allowed-weights.mdx index 0726978efb..eaa436fdeb 100644 --- a/docs/query/min-allowed-weights.mdx +++ b/docs/query/min-allowed-weights.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.MinAllowedWeights`](/code/pallets/subtensor/src/lib.rs#L2191) +- Storage [`SubtensorModule.MinAllowedWeights`](/code/pallets/subtensor/src/lib.rs#L2188) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/miner-collateral.mdx b/docs/query/miner-collateral.mdx index 3997473bf0..900ff95a2f 100644 --- a/docs/query/miner-collateral.mdx +++ b/docs/query/miner-collateral.mdx @@ -56,6 +56,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Owner`](/code/pallets/subtensor/src/lib.rs#L1350) +- Storage [`SubtensorModule.Owner`](/code/pallets/subtensor/src/lib.rs#L1347) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/most-convicted-hotkey.mdx b/docs/query/most-convicted-hotkey.mdx index 8485e4fc00..8674684e65 100644 --- a/docs/query/most-convicted-hotkey.mdx +++ b/docs/query/most-convicted-hotkey.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`StakeInfoRuntimeApi.get_most_convicted_hotkey_on_subnet`](/code/runtime/src/lib.rs#L2343-L2345) +- Runtime API [`StakeInfoRuntimeApi.get_most_convicted_hotkey_on_subnet`](/code/runtime/src/lib.rs#L2342-L2344) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/netuids-for-hotkey.mdx b/docs/query/netuids-for-hotkey.mdx index b54739619d..ac70f863a7 100644 --- a/docs/query/netuids-for-hotkey.mdx +++ b/docs/query/netuids-for-hotkey.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.IsNetworkMember`](/code/pallets/subtensor/src/lib.rs#L2023) +- Storage [`SubtensorModule.IsNetworkMember`](/code/pallets/subtensor/src/lib.rs#L2020) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/owned-hotkeys.mdx b/docs/query/owned-hotkeys.mdx index f205642aff..1a203fa705 100644 --- a/docs/query/owned-hotkeys.mdx +++ b/docs/query/owned-hotkeys.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.OwnedHotkeys`](/code/pallets/subtensor/src/lib.rs#L1562) +- Storage [`SubtensorModule.OwnedHotkeys`](/code/pallets/subtensor/src/lib.rs#L1559) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/parents.mdx b/docs/query/parents.mdx index a32c964c0e..1081445ff6 100644 --- a/docs/query/parents.mdx +++ b/docs/query/parents.mdx @@ -44,6 +44,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.ParentKeys`](/code/pallets/subtensor/src/lib.rs#L1403) +- Storage [`SubtensorModule.ParentKeys`](/code/pallets/subtensor/src/lib.rs#L1400) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/pending-children.mdx b/docs/query/pending-children.mdx index 581ee8a762..51afd882d4 100644 --- a/docs/query/pending-children.mdx +++ b/docs/query/pending-children.mdx @@ -48,6 +48,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.PendingChildKeys`](/code/pallets/subtensor/src/lib.rs#L1377) +- Storage [`SubtensorModule.PendingChildKeys`](/code/pallets/subtensor/src/lib.rs#L1374) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/quote-stake.mdx b/docs/query/quote-stake.mdx index c9101d85d5..8703ea73ec 100644 --- a/docs/query/quote-stake.mdx +++ b/docs/query/quote-stake.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`SwapRuntimeApi.sim_swap_tao_for_alpha`](/code/runtime/src/lib.rs#L2438-L2466) +- Runtime API [`SwapRuntimeApi.sim_swap_tao_for_alpha`](/code/runtime/src/lib.rs#L2437-L2465) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/quote-unstake.mdx b/docs/query/quote-unstake.mdx index 87699cad9e..a4dfb09fd2 100644 --- a/docs/query/quote-unstake.mdx +++ b/docs/query/quote-unstake.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`SwapRuntimeApi.sim_swap_alpha_for_tao`](/code/runtime/src/lib.rs#L2468-L2496) +- Runtime API [`SwapRuntimeApi.sim_swap_alpha_for_tao`](/code/runtime/src/lib.rs#L2467-L2495) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/reveal-period.mdx b/docs/query/reveal-period.mdx index 22e1ed49f4..655d5e68d3 100644 --- a/docs/query/reveal-period.mdx +++ b/docs/query/reveal-period.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.RevealPeriodEpochs`](/code/pallets/subtensor/src/lib.rs#L2683) +- Storage [`SubtensorModule.RevealPeriodEpochs`](/code/pallets/subtensor/src/lib.rs#L2680) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/root-claim-type.mdx b/docs/query/root-claim-type.mdx index 89341403c7..5a0b5063e9 100644 --- a/docs/query/root-claim-type.mdx +++ b/docs/query/root-claim-type.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.RootClaimType`](/code/pallets/subtensor/src/lib.rs#L2725) +- Storage [`SubtensorModule.RootClaimType`](/code/pallets/subtensor/src/lib.rs#L2722) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/staking-hotkeys.mdx b/docs/query/staking-hotkeys.mdx index 0360f6a471..a76a093fd7 100644 --- a/docs/query/staking-hotkeys.mdx +++ b/docs/query/staking-hotkeys.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.StakingHotkeys`](/code/pallets/subtensor/src/lib.rs#L1557) +- Storage [`SubtensorModule.StakingHotkeys`](/code/pallets/subtensor/src/lib.rs#L1554) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-collateral.mdx b/docs/query/subnet-collateral.mdx index 9961487e63..ab75b8aa30 100644 --- a/docs/query/subnet-collateral.mdx +++ b/docs/query/subnet-collateral.mdx @@ -46,6 +46,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Uids`](/code/pallets/subtensor/src/lib.rs#L2433) +- Storage [`SubtensorModule.Uids`](/code/pallets/subtensor/src/lib.rs#L2430) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-convictions.mdx b/docs/query/subnet-convictions.mdx index d6992b716a..ca15532891 100644 --- a/docs/query/subnet-convictions.mdx +++ b/docs/query/subnet-convictions.mdx @@ -49,14 +49,14 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.HotkeyLock`](/code/pallets/subtensor/src/lib.rs#L1716) -- Storage [`SubtensorModule.DecayingHotkeyLock`](/code/pallets/subtensor/src/lib.rs#L1728) -- Storage [`SubtensorModule.OwnerLock`](/code/pallets/subtensor/src/lib.rs#L1740) -- Storage [`SubtensorModule.DecayingOwnerLock`](/code/pallets/subtensor/src/lib.rs#L1744) -- Storage [`SubtensorModule.SubnetOwnerHotkey`](/code/pallets/subtensor/src/lib.rs#L2112) -- Storage [`SubtensorModule.SubnetAlphaOut`](/code/pallets/subtensor/src/lib.rs#L1548) -- Storage [`SubtensorModule.UnlockRate`](/code/pallets/subtensor/src/lib.rs#L1782) -- Storage [`SubtensorModule.MaturityRate`](/code/pallets/subtensor/src/lib.rs#L1778) -- Storage [`SubtensorModule.NetworkRegisteredAt`](/code/pallets/subtensor/src/lib.rs#L2046) +- Storage [`SubtensorModule.HotkeyLock`](/code/pallets/subtensor/src/lib.rs#L1713) +- Storage [`SubtensorModule.DecayingHotkeyLock`](/code/pallets/subtensor/src/lib.rs#L1725) +- Storage [`SubtensorModule.OwnerLock`](/code/pallets/subtensor/src/lib.rs#L1737) +- Storage [`SubtensorModule.DecayingOwnerLock`](/code/pallets/subtensor/src/lib.rs#L1741) +- Storage [`SubtensorModule.SubnetOwnerHotkey`](/code/pallets/subtensor/src/lib.rs#L2109) +- Storage [`SubtensorModule.SubnetAlphaOut`](/code/pallets/subtensor/src/lib.rs#L1545) +- Storage [`SubtensorModule.UnlockRate`](/code/pallets/subtensor/src/lib.rs#L1779) +- Storage [`SubtensorModule.MaturityRate`](/code/pallets/subtensor/src/lib.rs#L1775) +- Storage [`SubtensorModule.NetworkRegisteredAt`](/code/pallets/subtensor/src/lib.rs#L2043) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-emission-enabled.mdx b/docs/query/subnet-emission-enabled.mdx index 0e68777ae7..3da35ec8f5 100644 --- a/docs/query/subnet-emission-enabled.mdx +++ b/docs/query/subnet-emission-enabled.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.SubnetEmissionEnabled`](/code/pallets/subtensor/src/lib.rs#L1518) +- Storage [`SubtensorModule.SubnetEmissionEnabled`](/code/pallets/subtensor/src/lib.rs#L1515) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-identity.mdx b/docs/query/subnet-identity.mdx index 92313da39e..e53dae222a 100644 --- a/docs/query/subnet-identity.mdx +++ b/docs/query/subnet-identity.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.SubnetIdentitiesV3`](/code/pallets/subtensor/src/lib.rs#L2575) +- Storage [`SubtensorModule.SubnetIdentitiesV3`](/code/pallets/subtensor/src/lib.rs#L2572) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-names.mdx b/docs/query/subnet-names.mdx index a2c477f510..346d95604f 100644 --- a/docs/query/subnet-names.mdx +++ b/docs/query/subnet-names.mdx @@ -40,6 +40,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.SubnetIdentitiesV3`](/code/pallets/subtensor/src/lib.rs#L2575) +- Storage [`SubtensorModule.SubnetIdentitiesV3`](/code/pallets/subtensor/src/lib.rs#L2572) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-registration-cost.mdx b/docs/query/subnet-registration-cost.mdx index 180e384bfa..08d6bf4c75 100644 --- a/docs/query/subnet-registration-cost.mdx +++ b/docs/query/subnet-registration-cost.mdx @@ -41,6 +41,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Runtime API [`SubnetRegistrationRuntimeApi.get_network_registration_cost`](/code/runtime/src/lib.rs#L2349-L2351) +- Runtime API [`SubnetRegistrationRuntimeApi.get_network_registration_cost`](/code/runtime/src/lib.rs#L2348-L2350) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet-start-schedule.mdx b/docs/query/subnet-start-schedule.mdx index c80bc382e1..35f84612d0 100644 --- a/docs/query/subnet-start-schedule.mdx +++ b/docs/query/subnet-start-schedule.mdx @@ -43,7 +43,7 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.NetworkRegisteredAt`](/code/pallets/subtensor/src/lib.rs#L2046) -- Constant [`SubtensorModule.InitialStartCallDelay`](/code/runtime/src/lib.rs#L852) +- Storage [`SubtensorModule.NetworkRegisteredAt`](/code/pallets/subtensor/src/lib.rs#L2043) +- Constant [`SubtensorModule.InitialStartCallDelay`](/code/runtime/src/lib.rs#L851) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnet.mdx b/docs/query/subnet.mdx index 15b99a5510..b955705303 100644 --- a/docs/query/subnet.mdx +++ b/docs/query/subnet.mdx @@ -42,8 +42,8 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1955) -- Storage [`SubtensorModule.Burn`](/code/pallets/subtensor/src/lib.rs#L2251) -- Storage [`SubtensorModule.SubnetworkN`](/code/pallets/subtensor/src/lib.rs#L2014) +- Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1952) +- Storage [`SubtensorModule.Burn`](/code/pallets/subtensor/src/lib.rs#L2248) +- Storage [`SubtensorModule.SubnetworkN`](/code/pallets/subtensor/src/lib.rs#L2011) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/subnets.mdx b/docs/query/subnets.mdx index 8d14e4b852..9ceb3a9ef8 100644 --- a/docs/query/subnets.mdx +++ b/docs/query/subnets.mdx @@ -40,9 +40,9 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.NetworksAdded`](/code/pallets/subtensor/src/lib.rs#L2018) -- Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1955) -- Storage [`SubtensorModule.Burn`](/code/pallets/subtensor/src/lib.rs#L2251) -- Storage [`SubtensorModule.SubnetworkN`](/code/pallets/subtensor/src/lib.rs#L2014) +- Storage [`SubtensorModule.NetworksAdded`](/code/pallets/subtensor/src/lib.rs#L2015) +- Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1952) +- Storage [`SubtensorModule.Burn`](/code/pallets/subtensor/src/lib.rs#L2248) +- Storage [`SubtensorModule.SubnetworkN`](/code/pallets/subtensor/src/lib.rs#L2011) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/timelocked-weight-commits.mdx b/docs/query/timelocked-weight-commits.mdx index 75cb8293e5..102d7ba73f 100644 --- a/docs/query/timelocked-weight-commits.mdx +++ b/docs/query/timelocked-weight-commits.mdx @@ -47,6 +47,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.TimelockedWeightCommits`](/code/pallets/subtensor/src/lib.rs#L2631) +- Storage [`SubtensorModule.TimelockedWeightCommits`](/code/pallets/subtensor/src/lib.rs#L2628) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/token-symbols.mdx b/docs/query/token-symbols.mdx index f2e84c95eb..6a6d4acb11 100644 --- a/docs/query/token-symbols.mdx +++ b/docs/query/token-symbols.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.TokenSymbol`](/code/pallets/subtensor/src/lib.rs#L1796) +- Storage [`SubtensorModule.TokenSymbol`](/code/pallets/subtensor/src/lib.rs#L1793) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/tx-rate-limit.mdx b/docs/query/tx-rate-limit.mdx index 0a34e8cc39..a98322803d 100644 --- a/docs/query/tx-rate-limit.mdx +++ b/docs/query/tx-rate-limit.mdx @@ -40,6 +40,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.TxRateLimit`](/code/pallets/subtensor/src/lib.rs#L2309) +- Storage [`SubtensorModule.TxRateLimit`](/code/pallets/subtensor/src/lib.rs#L2306) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/uid.mdx b/docs/query/uid.mdx index 2ca9450ef6..edfe3a723f 100644 --- a/docs/query/uid.mdx +++ b/docs/query/uid.mdx @@ -43,6 +43,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Uids`](/code/pallets/subtensor/src/lib.rs#L2433) +- Storage [`SubtensorModule.Uids`](/code/pallets/subtensor/src/lib.rs#L2430) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/weights-rate-limit.mdx b/docs/query/weights-rate-limit.mdx index 993d5a83ea..62e9a6afa3 100644 --- a/docs/query/weights-rate-limit.mdx +++ b/docs/query/weights-rate-limit.mdx @@ -42,6 +42,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.WeightsSetRateLimit`](/code/pallets/subtensor/src/lib.rs#L2221) +- Storage [`SubtensorModule.WeightsSetRateLimit`](/code/pallets/subtensor/src/lib.rs#L2218) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/query/weights.mdx b/docs/query/weights.mdx index 4ad1960a68..f68d7d46fd 100644 --- a/docs/query/weights.mdx +++ b/docs/query/weights.mdx @@ -47,6 +47,6 @@ Async is the same surface awaited: `async with bt.Subtensor() as client:`. ## On-chain implementation -- Storage [`SubtensorModule.Weights`](/code/pallets/subtensor/src/lib.rs#L2495) +- Storage [`SubtensorModule.Weights`](/code/pallets/subtensor/src/lib.rs#L2492) Every file is browsable under [/code](/code) exactly as built into the runtime. diff --git a/docs/tx/add-collateral.mdx b/docs/tx/add-collateral.mdx index c542fba3d4..3ff99c9f5b 100644 --- a/docs/tx/add-collateral.mdx +++ b/docs/tx/add-collateral.mdx @@ -23,7 +23,7 @@ to clear unshielded at an unbounded AMM price. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_collateral`](/code/pallets/subtensor/src/macros/dispatches.rs#L2458-L2468) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_collateral`](/code/pallets/subtensor/src/macros/dispatches.rs#L2455-L2465) | ## Parameters @@ -77,7 +77,7 @@ result = sub.execute_tool("add_collateral", {...}, wallet) ## On-chain implementation -`SubtensorModule.add_collateral` — [`pallets/subtensor/src/macros/dispatches.rs#L2460`](/code/pallets/subtensor/src/macros/dispatches.rs#L2458-L2468): +`SubtensorModule.add_collateral` — [`pallets/subtensor/src/macros/dispatches.rs#L2457`](/code/pallets/subtensor/src/macros/dispatches.rs#L2455-L2465): ```rust #[pallet::call_index(144)] diff --git a/docs/tx/add-stake-limit.mdx b/docs/tx/add-stake-limit.mdx index dfe75e076c..e62959b57f 100644 --- a/docs/tx/add-stake-limit.mdx +++ b/docs/tx/add-stake-limit.mdx @@ -15,7 +15,7 @@ for large amounts or thin pools, where the swap itself moves the price. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1400-L1419) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1397-L1416) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("add_stake_limit", {...}, wallet) ## On-chain implementation -`SubtensorModule.add_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1402`](/code/pallets/subtensor/src/macros/dispatches.rs#L1400-L1419): +`SubtensorModule.add_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1399`](/code/pallets/subtensor/src/macros/dispatches.rs#L1397-L1416): ```rust #[pallet::call_index(88)] diff --git a/docs/tx/add-stake.mdx b/docs/tx/add-stake.mdx index db0e78ad64..bf02999f39 100644 --- a/docs/tx/add-stake.mdx +++ b/docs/tx/add-stake.mdx @@ -22,7 +22,7 @@ reserve (`InsufficientLiquidity`). | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L559-L568), [`SubtensorModule.add_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1400-L1419) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L559-L568), [`SubtensorModule.add_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1397-L1416) | ## Parameters @@ -96,7 +96,7 @@ pub fn add_stake( Delegates to [`do_add_stake`](/code/pallets/subtensor/src/staking/add_stake.rs#L30). -`SubtensorModule.add_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1402`](/code/pallets/subtensor/src/macros/dispatches.rs#L1400-L1419): +`SubtensorModule.add_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1399`](/code/pallets/subtensor/src/macros/dispatches.rs#L1397-L1416): ```rust #[pallet::call_index(88)] diff --git a/docs/tx/announce-coldkey-swap.mdx b/docs/tx/announce-coldkey-swap.mdx index 3c1d843554..ba7edd4f7c 100644 --- a/docs/tx/announce-coldkey-swap.mdx +++ b/docs/tx/announce-coldkey-swap.mdx @@ -23,7 +23,7 @@ an unauthorized one with `dispute_coldkey_swap`. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.announce_coldkey_swap`](/code/pallets/subtensor/src/macros/dispatches.rs#L1994-L2022) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.announce_coldkey_swap`](/code/pallets/subtensor/src/macros/dispatches.rs#L1991-L2019) | ## Parameters @@ -72,7 +72,7 @@ result = sub.execute_tool("announce_coldkey_swap", {...}, wallet) ## On-chain implementation -`SubtensorModule.announce_coldkey_swap` — [`pallets/subtensor/src/macros/dispatches.rs#L1996`](/code/pallets/subtensor/src/macros/dispatches.rs#L1994-L2022): +`SubtensorModule.announce_coldkey_swap` — [`pallets/subtensor/src/macros/dispatches.rs#L1993`](/code/pallets/subtensor/src/macros/dispatches.rs#L1991-L2019): ```rust #[pallet::call_index(125)] diff --git a/docs/tx/associate-evm-key.mdx b/docs/tx/associate-evm-key.mdx index 000daba6b8..1e841ff448 100644 --- a/docs/tx/associate-evm-key.mdx +++ b/docs/tx/associate-evm-key.mdx @@ -20,7 +20,7 @@ neuron. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.associate_evm_key`](/code/pallets/subtensor/src/macros/dispatches.rs#L1582-L1596) | +| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.associate_evm_key`](/code/pallets/subtensor/src/macros/dispatches.rs#L1579-L1593) | ## Parameters @@ -78,7 +78,7 @@ result = sub.execute_tool("associate_evm_key", {...}, wallet) ## On-chain implementation -`SubtensorModule.associate_evm_key` — [`pallets/subtensor/src/macros/dispatches.rs#L1588`](/code/pallets/subtensor/src/macros/dispatches.rs#L1582-L1596): +`SubtensorModule.associate_evm_key` — [`pallets/subtensor/src/macros/dispatches.rs#L1585`](/code/pallets/subtensor/src/macros/dispatches.rs#L1579-L1593): ```rust #[pallet::call_index(93)] diff --git a/docs/tx/associate-hotkey.mdx b/docs/tx/associate-hotkey.mdx index c2b3e51abc..3d2ec6d739 100644 --- a/docs/tx/associate-hotkey.mdx +++ b/docs/tx/associate-hotkey.mdx @@ -15,7 +15,7 @@ take over the hotkey. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.try_associate_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L1528-L1536) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.try_associate_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L1525-L1533) | ## Parameters @@ -62,7 +62,7 @@ result = sub.execute_tool("associate_hotkey", {...}, wallet) ## On-chain implementation -`SubtensorModule.try_associate_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L1530`](/code/pallets/subtensor/src/macros/dispatches.rs#L1528-L1536): +`SubtensorModule.try_associate_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L1527`](/code/pallets/subtensor/src/macros/dispatches.rs#L1525-L1533): ```rust #[pallet::call_index(91)] diff --git a/docs/tx/claim-root.mdx b/docs/tx/claim-root.mdx index abc9301a64..77de4f07ef 100644 --- a/docs/tx/claim-root.mdx +++ b/docs/tx/claim-root.mdx @@ -17,7 +17,7 @@ deadline — but each call pays out only the subnets listed. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.claim_root`](/code/pallets/subtensor/src/macros/dispatches.rs#L1898-L1916) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.claim_root`](/code/pallets/subtensor/src/macros/dispatches.rs#L1895-L1913) | ## Parameters @@ -66,7 +66,7 @@ result = sub.execute_tool("claim_root", {...}, wallet) ## On-chain implementation -`SubtensorModule.claim_root` — [`pallets/subtensor/src/macros/dispatches.rs#L1900`](/code/pallets/subtensor/src/macros/dispatches.rs#L1898-L1916): +`SubtensorModule.claim_root` — [`pallets/subtensor/src/macros/dispatches.rs#L1897`](/code/pallets/subtensor/src/macros/dispatches.rs#L1895-L1913): ```rust #[pallet::call_index(121)] diff --git a/docs/tx/clear-coldkey-swap-announcement.mdx b/docs/tx/clear-coldkey-swap-announcement.mdx index 45cceb4cac..166d094c2c 100644 --- a/docs/tx/clear-coldkey-swap-announcement.mdx +++ b/docs/tx/clear-coldkey-swap-announcement.mdx @@ -17,7 +17,7 @@ right call instead. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.clear_coldkey_swap_announcement`](/code/pallets/subtensor/src/macros/dispatches.rs#L2193-L2210) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.clear_coldkey_swap_announcement`](/code/pallets/subtensor/src/macros/dispatches.rs#L2190-L2207) | ## Parameters @@ -62,7 +62,7 @@ result = sub.execute_tool("clear_coldkey_swap_announcement", {...}, wallet) ## On-chain implementation -`SubtensorModule.clear_coldkey_swap_announcement` — [`pallets/subtensor/src/macros/dispatches.rs#L2195`](/code/pallets/subtensor/src/macros/dispatches.rs#L2193-L2210): +`SubtensorModule.clear_coldkey_swap_announcement` — [`pallets/subtensor/src/macros/dispatches.rs#L2192`](/code/pallets/subtensor/src/macros/dispatches.rs#L2190-L2207): ```rust #[pallet::call_index(133)] diff --git a/docs/tx/commit-weights.mdx b/docs/tx/commit-weights.mdx index e4b3672298..a89bd5cb77 100644 --- a/docs/tx/commit-weights.mdx +++ b/docs/tx/commit-weights.mdx @@ -16,7 +16,7 @@ commit-reveal setting. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.commit_timelocked_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L1859-L1877) | +| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.commit_timelocked_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L1856-L1874) | ## Parameters @@ -70,7 +70,7 @@ result = sub.execute_tool("commit_weights", {...}, wallet) ## On-chain implementation -`SubtensorModule.commit_timelocked_mechanism_weights` — [`pallets/subtensor/src/macros/dispatches.rs#L1861`](/code/pallets/subtensor/src/macros/dispatches.rs#L1859-L1877): +`SubtensorModule.commit_timelocked_mechanism_weights` — [`pallets/subtensor/src/macros/dispatches.rs#L1858`](/code/pallets/subtensor/src/macros/dispatches.rs#L1856-L1874): ```rust #[pallet::call_index(118)] diff --git a/docs/tx/dispute-coldkey-swap.mdx b/docs/tx/dispute-coldkey-swap.mdx index 2e15992ae6..7580b28b17 100644 --- a/docs/tx/dispute-coldkey-swap.mdx +++ b/docs/tx/dispute-coldkey-swap.mdx @@ -18,7 +18,7 @@ you made yourself. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.dispute_coldkey_swap`](/code/pallets/subtensor/src/macros/dispatches.rs#L2063-L2082) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.dispute_coldkey_swap`](/code/pallets/subtensor/src/macros/dispatches.rs#L2060-L2079) | ## Parameters @@ -63,7 +63,7 @@ result = sub.execute_tool("dispute_coldkey_swap", {...}, wallet) ## On-chain implementation -`SubtensorModule.dispute_coldkey_swap` — [`pallets/subtensor/src/macros/dispatches.rs#L2065`](/code/pallets/subtensor/src/macros/dispatches.rs#L2063-L2082): +`SubtensorModule.dispute_coldkey_swap` — [`pallets/subtensor/src/macros/dispatches.rs#L2062`](/code/pallets/subtensor/src/macros/dispatches.rs#L2060-L2079): ```rust #[pallet::call_index(127)] diff --git a/docs/tx/lock-stake.mdx b/docs/tx/lock-stake.mdx index 9835780d94..068a1e1e6e 100644 --- a/docs/tx/lock-stake.mdx +++ b/docs/tx/lock-stake.mdx @@ -21,7 +21,7 @@ persists is controlled per coldkey per subnet with | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.lock_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L2265-L2275) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.lock_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L2262-L2272) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("lock_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.lock_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L2267`](/code/pallets/subtensor/src/macros/dispatches.rs#L2265-L2275): +`SubtensorModule.lock_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L2264`](/code/pallets/subtensor/src/macros/dispatches.rs#L2262-L2272): ```rust #[pallet::call_index(136)] diff --git a/docs/tx/move-lock.mdx b/docs/tx/move-lock.mdx index 13f13b074a..6f6f2f7592 100644 --- a/docs/tx/move-lock.mdx +++ b/docs/tx/move-lock.mdx @@ -16,7 +16,7 @@ existing lock on the subnet to move. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.move_lock`](/code/pallets/subtensor/src/macros/dispatches.rs#L2289-L2298) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.move_lock`](/code/pallets/subtensor/src/macros/dispatches.rs#L2286-L2295) | ## Parameters @@ -68,7 +68,7 @@ result = sub.execute_tool("move_lock", {...}, wallet) ## On-chain implementation -`SubtensorModule.move_lock` — [`pallets/subtensor/src/macros/dispatches.rs#L2291`](/code/pallets/subtensor/src/macros/dispatches.rs#L2289-L2298): +`SubtensorModule.move_lock` — [`pallets/subtensor/src/macros/dispatches.rs#L2288`](/code/pallets/subtensor/src/macros/dispatches.rs#L2286-L2295): ```rust #[pallet::call_index(137)] diff --git a/docs/tx/move-stake.mdx b/docs/tx/move-stake.mdx index 786c5812a7..1a074e7371 100644 --- a/docs/tx/move-stake.mdx +++ b/docs/tx/move-stake.mdx @@ -16,7 +16,7 @@ changes. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.move_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1264-L1282) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.move_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1261-L1279) | ## Parameters @@ -77,7 +77,7 @@ result = sub.execute_tool("move_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.move_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1266`](/code/pallets/subtensor/src/macros/dispatches.rs#L1264-L1282): +`SubtensorModule.move_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1263`](/code/pallets/subtensor/src/macros/dispatches.rs#L1261-L1279): ```rust #[pallet::call_index(85)] diff --git a/docs/tx/register-leased-network.mdx b/docs/tx/register-leased-network.mdx index 3aceceb242..70c7cbcebf 100644 --- a/docs/tx/register-leased-network.mdx +++ b/docs/tx/register-leased-network.mdx @@ -19,7 +19,7 @@ perpetual and ownership never transfers. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.register_leased_network`](/code/pallets/subtensor/src/macros/dispatches.rs#L1680-L1688) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.register_leased_network`](/code/pallets/subtensor/src/macros/dispatches.rs#L1677-L1685) | ## Parameters @@ -69,7 +69,7 @@ result = sub.execute_tool("register_leased_network", {...}, wallet) ## On-chain implementation -`SubtensorModule.register_leased_network` — [`pallets/subtensor/src/macros/dispatches.rs#L1682`](/code/pallets/subtensor/src/macros/dispatches.rs#L1680-L1688): +`SubtensorModule.register_leased_network` — [`pallets/subtensor/src/macros/dispatches.rs#L1679`](/code/pallets/subtensor/src/macros/dispatches.rs#L1677-L1685): ```rust #[pallet::call_index(110)] diff --git a/docs/tx/register-subnet.mdx b/docs/tx/register-subnet.mdx index 4d92126445..e6024e0a04 100644 --- a/docs/tx/register-subnet.mdx +++ b/docs/tx/register-subnet.mdx @@ -27,7 +27,7 @@ current cost before sending. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.register_network`](/code/pallets/subtensor/src/macros/dispatches.rs#L1006-L1010) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.register_network`](/code/pallets/subtensor/src/macros/dispatches.rs#L1003-L1007) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("register_subnet", {...}, wallet) ## On-chain implementation -`SubtensorModule.register_network` — [`pallets/subtensor/src/macros/dispatches.rs#L1008`](/code/pallets/subtensor/src/macros/dispatches.rs#L1006-L1010): +`SubtensorModule.register_network` — [`pallets/subtensor/src/macros/dispatches.rs#L1005`](/code/pallets/subtensor/src/macros/dispatches.rs#L1003-L1007): ```rust #[pallet::call_index(59)] diff --git a/docs/tx/remove-stake-limit.mdx b/docs/tx/remove-stake-limit.mdx index cdf81873cd..68ac1febe5 100644 --- a/docs/tx/remove-stake-limit.mdx +++ b/docs/tx/remove-stake-limit.mdx @@ -16,7 +16,7 @@ this over plain `remove_stake` when exiting large positions. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.remove_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1453-L1471) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.remove_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1450-L1468) | ## Parameters @@ -75,7 +75,7 @@ result = sub.execute_tool("remove_stake_limit", {...}, wallet) ## On-chain implementation -`SubtensorModule.remove_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1455`](/code/pallets/subtensor/src/macros/dispatches.rs#L1453-L1471): +`SubtensorModule.remove_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1452`](/code/pallets/subtensor/src/macros/dispatches.rs#L1450-L1468): ```rust #[pallet::call_index(89)] diff --git a/docs/tx/remove-stake.mdx b/docs/tx/remove-stake.mdx index 4c61e250f8..75276f8c9f 100644 --- a/docs/tx/remove-stake.mdx +++ b/docs/tx/remove-stake.mdx @@ -22,7 +22,7 @@ position instead of leaving dust (`AmountTooLow`). | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.remove_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L593-L602), [`SubtensorModule.remove_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1453-L1471) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.remove_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L593-L602), [`SubtensorModule.remove_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1450-L1468) | ## Parameters @@ -96,7 +96,7 @@ pub fn remove_stake( Delegates to [`do_remove_stake`](/code/pallets/subtensor/src/staking/remove_stake.rs#L35). -`SubtensorModule.remove_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1455`](/code/pallets/subtensor/src/macros/dispatches.rs#L1453-L1471): +`SubtensorModule.remove_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1452`](/code/pallets/subtensor/src/macros/dispatches.rs#L1450-L1468): ```rust #[pallet::call_index(89)] diff --git a/docs/tx/set-auto-stake.mdx b/docs/tx/set-auto-stake.mdx index aa985d5898..d76d1775f4 100644 --- a/docs/tx/set-auto-stake.mdx +++ b/docs/tx/set-auto-stake.mdx @@ -17,7 +17,7 @@ back with the `auto_stake` read. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_coldkey_auto_stake_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L1793-L1835) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_coldkey_auto_stake_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L1790-L1832) | ## Parameters @@ -67,7 +67,7 @@ result = sub.execute_tool("set_auto_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_coldkey_auto_stake_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L1795`](/code/pallets/subtensor/src/macros/dispatches.rs#L1793-L1835): +`SubtensorModule.set_coldkey_auto_stake_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L1792`](/code/pallets/subtensor/src/macros/dispatches.rs#L1790-L1832): ```rust #[pallet::call_index(114)] diff --git a/docs/tx/set-childkey-take.mdx b/docs/tx/set-childkey-take.mdx index f48d8f9c37..75c8bb80cf 100644 --- a/docs/tx/set-childkey-take.mdx +++ b/docs/tx/set-childkey-take.mdx @@ -14,7 +14,7 @@ minimum and maximum childkey take bounds, and rate-limits only increases | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_childkey_take`](/code/pallets/subtensor/src/macros/dispatches.rs#L929-L941) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_childkey_take`](/code/pallets/subtensor/src/macros/dispatches.rs#L926-L938) | ## Parameters @@ -67,7 +67,7 @@ result = sub.execute_tool("set_childkey_take", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_childkey_take` — [`pallets/subtensor/src/macros/dispatches.rs#L931`](/code/pallets/subtensor/src/macros/dispatches.rs#L929-L941): +`SubtensorModule.set_childkey_take` — [`pallets/subtensor/src/macros/dispatches.rs#L928`](/code/pallets/subtensor/src/macros/dispatches.rs#L926-L938): ```rust #[pallet::call_index(75)] diff --git a/docs/tx/set-children.mdx b/docs/tx/set-children.mdx index 91e30e2165..c109764614 100644 --- a/docs/tx/set-children.mdx +++ b/docs/tx/set-children.mdx @@ -26,7 +26,7 @@ is not yet enabled, where they apply immediately. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_children`](/code/pallets/subtensor/src/macros/dispatches.rs#L1081-L1096) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_children`](/code/pallets/subtensor/src/macros/dispatches.rs#L1078-L1093) | ## Parameters @@ -79,7 +79,7 @@ result = sub.execute_tool("set_children", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_children` — [`pallets/subtensor/src/macros/dispatches.rs#L1088`](/code/pallets/subtensor/src/macros/dispatches.rs#L1081-L1096): +`SubtensorModule.set_children` — [`pallets/subtensor/src/macros/dispatches.rs#L1085`](/code/pallets/subtensor/src/macros/dispatches.rs#L1078-L1093): ```rust #[pallet::call_index(67)] diff --git a/docs/tx/set-identity.mdx b/docs/tx/set-identity.mdx index f38af7dea5..f49bc68e97 100644 --- a/docs/tx/set-identity.mdx +++ b/docs/tx/set-identity.mdx @@ -17,7 +17,7 @@ cosmetic: no effect on balances, stake, or permissions. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_identity`](/code/pallets/subtensor/src/macros/dispatches.rs#L1127-L1149) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_identity`](/code/pallets/subtensor/src/macros/dispatches.rs#L1124-L1146) | ## Parameters @@ -72,7 +72,7 @@ result = sub.execute_tool("set_identity", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_identity` — [`pallets/subtensor/src/macros/dispatches.rs#L1129`](/code/pallets/subtensor/src/macros/dispatches.rs#L1127-L1149): +`SubtensorModule.set_identity` — [`pallets/subtensor/src/macros/dispatches.rs#L1126`](/code/pallets/subtensor/src/macros/dispatches.rs#L1124-L1146): ```rust #[pallet::call_index(68)] diff --git a/docs/tx/set-min-collateral.mdx b/docs/tx/set-min-collateral.mdx index bcb6a198ca..75bcb35c37 100644 --- a/docs/tx/set-min-collateral.mdx +++ b/docs/tx/set-min-collateral.mdx @@ -15,7 +15,7 @@ immediately). Zero clears the floor and restores pure drain behavior. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_min_collateral`](/code/pallets/subtensor/src/macros/dispatches.rs#L2493-L2502) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_min_collateral`](/code/pallets/subtensor/src/macros/dispatches.rs#L2490-L2499) | ## Parameters @@ -68,7 +68,7 @@ result = sub.execute_tool("set_min_collateral", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_min_collateral` — [`pallets/subtensor/src/macros/dispatches.rs#L2495`](/code/pallets/subtensor/src/macros/dispatches.rs#L2493-L2502): +`SubtensorModule.set_min_collateral` — [`pallets/subtensor/src/macros/dispatches.rs#L2492`](/code/pallets/subtensor/src/macros/dispatches.rs#L2490-L2499): ```rust #[pallet::call_index(145)] diff --git a/docs/tx/set-perpetual-lock.mdx b/docs/tx/set-perpetual-lock.mdx index 7519a6fdc1..748d7ead2c 100644 --- a/docs/tx/set-perpetual-lock.mdx +++ b/docs/tx/set-perpetual-lock.mdx @@ -15,7 +15,7 @@ illiquid until you switch back to decaying and the lock runs off. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_perpetual_lock`](/code/pallets/subtensor/src/macros/dispatches.rs#L2305-L2314) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_perpetual_lock`](/code/pallets/subtensor/src/macros/dispatches.rs#L2302-L2311) | ## Parameters @@ -67,7 +67,7 @@ result = sub.execute_tool("set_perpetual_lock", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_perpetual_lock` — [`pallets/subtensor/src/macros/dispatches.rs#L2307`](/code/pallets/subtensor/src/macros/dispatches.rs#L2305-L2314): +`SubtensorModule.set_perpetual_lock` — [`pallets/subtensor/src/macros/dispatches.rs#L2304`](/code/pallets/subtensor/src/macros/dispatches.rs#L2302-L2311): ```rust #[pallet::call_index(138)] diff --git a/docs/tx/set-root-claim-type.mdx b/docs/tx/set-root-claim-type.mdx index c0f94ae6f4..8442dd0bab 100644 --- a/docs/tx/set-root-claim-type.mdx +++ b/docs/tx/set-root-claim-type.mdx @@ -14,7 +14,7 @@ already claimed. Read it back with the `root_claim_type` read. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_root_claim_type`](/code/pallets/subtensor/src/macros/dispatches.rs#L1925-L1941) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_root_claim_type`](/code/pallets/subtensor/src/macros/dispatches.rs#L1922-L1938) | ## Parameters @@ -62,7 +62,7 @@ result = sub.execute_tool("set_root_claim_type", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_root_claim_type` — [`pallets/subtensor/src/macros/dispatches.rs#L1927`](/code/pallets/subtensor/src/macros/dispatches.rs#L1925-L1941): +`SubtensorModule.set_root_claim_type` — [`pallets/subtensor/src/macros/dispatches.rs#L1924`](/code/pallets/subtensor/src/macros/dispatches.rs#L1922-L1938): ```rust #[pallet::call_index(122)] diff --git a/docs/tx/set-subnet-identity.mdx b/docs/tx/set-subnet-identity.mdx index 411fbb9dad..afa391c82f 100644 --- a/docs/tx/set-subnet-identity.mdx +++ b/docs/tx/set-subnet-identity.mdx @@ -15,7 +15,7 @@ for economics use `set_hyperparameter`. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.set_subnet_identity`](/code/pallets/subtensor/src/macros/dispatches.rs#L1162-L1188) | +| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.set_subnet_identity`](/code/pallets/subtensor/src/macros/dispatches.rs#L1159-L1185) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("set_subnet_identity", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_subnet_identity` — [`pallets/subtensor/src/macros/dispatches.rs#L1164`](/code/pallets/subtensor/src/macros/dispatches.rs#L1162-L1188): +`SubtensorModule.set_subnet_identity` — [`pallets/subtensor/src/macros/dispatches.rs#L1161`](/code/pallets/subtensor/src/macros/dispatches.rs#L1159-L1185): ```rust #[pallet::call_index(78)] diff --git a/docs/tx/set-weights.mdx b/docs/tx/set-weights.mdx index 343a5a3052..388dbe6c68 100644 --- a/docs/tx/set-weights.mdx +++ b/docs/tx/set-weights.mdx @@ -22,7 +22,7 @@ unless you specifically need to force one path. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L128-L143), [`SubtensorModule.commit_timelocked_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L1859-L1877) | +| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L128-L143), [`SubtensorModule.commit_timelocked_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L1856-L1874) | ## Parameters @@ -98,7 +98,7 @@ pub fn set_mechanism_weights( Delegates to [`get_commit_reveal_weights_enabled`](/code/pallets/subtensor/src/utils/misc.rs#L607), [`do_set_mechanism_weights`](/code/pallets/subtensor/src/subnets/weights.rs#L916). -`SubtensorModule.commit_timelocked_mechanism_weights` — [`pallets/subtensor/src/macros/dispatches.rs#L1861`](/code/pallets/subtensor/src/macros/dispatches.rs#L1859-L1877): +`SubtensorModule.commit_timelocked_mechanism_weights` — [`pallets/subtensor/src/macros/dispatches.rs#L1858`](/code/pallets/subtensor/src/macros/dispatches.rs#L1856-L1874): ```rust #[pallet::call_index(118)] diff --git a/docs/tx/stake-burn.mdx b/docs/tx/stake-burn.mdx index d3acfb6175..d702512424 100644 --- a/docs/tx/stake-burn.mdx +++ b/docs/tx/stake-burn.mdx @@ -18,7 +18,7 @@ cap. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake_burn`](/code/pallets/subtensor/src/macros/dispatches.rs#L2177-L2187) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake_burn`](/code/pallets/subtensor/src/macros/dispatches.rs#L2174-L2184) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("stake_burn", {...}, wallet) ## On-chain implementation -`SubtensorModule.add_stake_burn` — [`pallets/subtensor/src/macros/dispatches.rs#L2179`](/code/pallets/subtensor/src/macros/dispatches.rs#L2177-L2187): +`SubtensorModule.add_stake_burn` — [`pallets/subtensor/src/macros/dispatches.rs#L2176`](/code/pallets/subtensor/src/macros/dispatches.rs#L2174-L2184): ```rust #[pallet::call_index(132)] diff --git a/docs/tx/start-call.mdx b/docs/tx/start-call.mdx index d1e3c70881..515dc4b428 100644 --- a/docs/tx/start-call.mdx +++ b/docs/tx/start-call.mdx @@ -16,7 +16,7 @@ as soon as the delay allows. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.start_call`](/code/pallets/subtensor/src/macros/dispatches.rs#L1546-L1551) | +| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.start_call`](/code/pallets/subtensor/src/macros/dispatches.rs#L1543-L1548) | ## Parameters @@ -65,7 +65,7 @@ result = sub.execute_tool("start_call", {...}, wallet) ## On-chain implementation -`SubtensorModule.start_call` — [`pallets/subtensor/src/macros/dispatches.rs#L1548`](/code/pallets/subtensor/src/macros/dispatches.rs#L1546-L1551): +`SubtensorModule.start_call` — [`pallets/subtensor/src/macros/dispatches.rs#L1545`](/code/pallets/subtensor/src/macros/dispatches.rs#L1543-L1548): ```rust #[pallet::call_index(92)] diff --git a/docs/tx/swap-coldkey-announced.mdx b/docs/tx/swap-coldkey-announced.mdx index 53a1f016ae..d1ff64e4e7 100644 --- a/docs/tx/swap-coldkey-announced.mdx +++ b/docs/tx/swap-coldkey-announced.mdx @@ -15,7 +15,7 @@ future operations sign with the new coldkey. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.swap_coldkey_announced`](/code/pallets/subtensor/src/macros/dispatches.rs#L2032-L2054) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.swap_coldkey_announced`](/code/pallets/subtensor/src/macros/dispatches.rs#L2029-L2051) | ## Parameters @@ -64,7 +64,7 @@ result = sub.execute_tool("swap_coldkey_announced", {...}, wallet) ## On-chain implementation -`SubtensorModule.swap_coldkey_announced` — [`pallets/subtensor/src/macros/dispatches.rs#L2034`](/code/pallets/subtensor/src/macros/dispatches.rs#L2032-L2054): +`SubtensorModule.swap_coldkey_announced` — [`pallets/subtensor/src/macros/dispatches.rs#L2031`](/code/pallets/subtensor/src/macros/dispatches.rs#L2029-L2051): ```rust #[pallet::call_index(126)] diff --git a/docs/tx/swap-hotkey.mdx b/docs/tx/swap-hotkey.mdx index 9649802c60..9c91bca8ae 100644 --- a/docs/tx/swap-hotkey.mdx +++ b/docs/tx/swap-hotkey.mdx @@ -93,6 +93,6 @@ pub fn swap_hotkey( } ``` -Delegates to [`do_swap_hotkey`](/code/pallets/subtensor/src/swap/swap_hotkey.rs#L73). +Delegates to [`do_swap_hotkey`](/code/pallets/subtensor/src/swap/swap_hotkey.rs#L72). Every file is browsable under [/code](/code) exactly as built into the runtime, or as plain text under `/code/raw/` (index: [`/code/index.json`](/code/index.json)). diff --git a/docs/tx/swap-stake.mdx b/docs/tx/swap-stake.mdx index 889b42d387..cb5cd667ee 100644 --- a/docs/tx/swap-stake.mdx +++ b/docs/tx/swap-stake.mdx @@ -18,7 +18,7 @@ only if you want to control each leg separately. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.swap_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1350-L1366), [`SubtensorModule.swap_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1498-L1518) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.swap_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1347-L1363), [`SubtensorModule.swap_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1495-L1515) | ## Parameters @@ -78,7 +78,7 @@ result = sub.execute_tool("swap_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.swap_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1352`](/code/pallets/subtensor/src/macros/dispatches.rs#L1350-L1366): +`SubtensorModule.swap_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1349`](/code/pallets/subtensor/src/macros/dispatches.rs#L1347-L1363): ```rust #[pallet::call_index(87)] @@ -102,7 +102,7 @@ pub fn swap_stake( Delegates to [`do_swap_stake`](/code/pallets/subtensor/src/staking/move_stake.rs#L260). -`SubtensorModule.swap_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1500`](/code/pallets/subtensor/src/macros/dispatches.rs#L1498-L1518): +`SubtensorModule.swap_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1497`](/code/pallets/subtensor/src/macros/dispatches.rs#L1495-L1515): ```rust #[pallet::call_index(90)] diff --git a/docs/tx/terminate-lease.mdx b/docs/tx/terminate-lease.mdx index 125073c8a0..4d1696b077 100644 --- a/docs/tx/terminate-lease.mdx +++ b/docs/tx/terminate-lease.mdx @@ -14,7 +14,7 @@ block with the `lease` read before calling. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.terminate_lease`](/code/pallets/subtensor/src/macros/dispatches.rs#L1703-L1711) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.terminate_lease`](/code/pallets/subtensor/src/macros/dispatches.rs#L1700-L1708) | ## Parameters @@ -64,7 +64,7 @@ result = sub.execute_tool("terminate_lease", {...}, wallet) ## On-chain implementation -`SubtensorModule.terminate_lease` — [`pallets/subtensor/src/macros/dispatches.rs#L1705`](/code/pallets/subtensor/src/macros/dispatches.rs#L1703-L1711): +`SubtensorModule.terminate_lease` — [`pallets/subtensor/src/macros/dispatches.rs#L1702`](/code/pallets/subtensor/src/macros/dispatches.rs#L1700-L1708): ```rust #[pallet::call_index(111)] diff --git a/docs/tx/transfer-stake.mdx b/docs/tx/transfer-stake.mdx index 9cf8b97da3..cfb9b0f942 100644 --- a/docs/tx/transfer-stake.mdx +++ b/docs/tx/transfer-stake.mdx @@ -19,7 +19,7 @@ this as an unbounded spend and blocks it until the cap is raised. Use | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.transfer_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1308-L1326), [`SubtensorModule.transfer_stake_and_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L2400-L2420) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.transfer_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1305-L1323), [`SubtensorModule.transfer_stake_and_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L2397-L2417) | ## Parameters @@ -81,7 +81,7 @@ result = sub.execute_tool("transfer_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.transfer_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1310`](/code/pallets/subtensor/src/macros/dispatches.rs#L1308-L1326): +`SubtensorModule.transfer_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1307`](/code/pallets/subtensor/src/macros/dispatches.rs#L1305-L1323): ```rust #[pallet::call_index(86)] @@ -107,7 +107,7 @@ pub fn transfer_stake( Delegates to [`do_transfer_stake`](/code/pallets/subtensor/src/staking/move_stake.rs#L120). -`SubtensorModule.transfer_stake_and_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L2402`](/code/pallets/subtensor/src/macros/dispatches.rs#L2400-L2420): +`SubtensorModule.transfer_stake_and_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L2399`](/code/pallets/subtensor/src/macros/dispatches.rs#L2397-L2417): ```rust #[pallet::call_index(143)] diff --git a/docs/tx/unstake-all-alpha.mdx b/docs/tx/unstake-all-alpha.mdx index 70ea233ea7..264e582a71 100644 --- a/docs/tx/unstake-all-alpha.mdx +++ b/docs/tx/unstake-all-alpha.mdx @@ -16,7 +16,7 @@ incur slippage. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all_alpha`](/code/pallets/subtensor/src/macros/dispatches.rs#L1243-L1247) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all_alpha`](/code/pallets/subtensor/src/macros/dispatches.rs#L1240-L1244) | ## Parameters @@ -65,7 +65,7 @@ result = sub.execute_tool("unstake_all_alpha", {...}, wallet) ## On-chain implementation -`SubtensorModule.unstake_all_alpha` — [`pallets/subtensor/src/macros/dispatches.rs#L1245`](/code/pallets/subtensor/src/macros/dispatches.rs#L1243-L1247): +`SubtensorModule.unstake_all_alpha` — [`pallets/subtensor/src/macros/dispatches.rs#L1242`](/code/pallets/subtensor/src/macros/dispatches.rs#L1240-L1244): ```rust #[pallet::call_index(84)] diff --git a/docs/tx/unstake-all.mdx b/docs/tx/unstake-all.mdx index a079bc9e15..535243aa60 100644 --- a/docs/tx/unstake-all.mdx +++ b/docs/tx/unstake-all.mdx @@ -17,7 +17,7 @@ staked. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all`](/code/pallets/subtensor/src/macros/dispatches.rs#L1219-L1223) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all`](/code/pallets/subtensor/src/macros/dispatches.rs#L1216-L1220) | ## Parameters @@ -66,7 +66,7 @@ result = sub.execute_tool("unstake_all", {...}, wallet) ## On-chain implementation -`SubtensorModule.unstake_all` — [`pallets/subtensor/src/macros/dispatches.rs#L1221`](/code/pallets/subtensor/src/macros/dispatches.rs#L1219-L1223): +`SubtensorModule.unstake_all` — [`pallets/subtensor/src/macros/dispatches.rs#L1218`](/code/pallets/subtensor/src/macros/dispatches.rs#L1216-L1220): ```rust #[pallet::call_index(83)] diff --git a/docs/tx/update-symbol.mdx b/docs/tx/update-symbol.mdx index d2efc2309d..22496ffe11 100644 --- a/docs/tx/update-symbol.mdx +++ b/docs/tx/update-symbol.mdx @@ -15,7 +15,7 @@ stake, and emissions are untouched. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.update_symbol`](/code/pallets/subtensor/src/macros/dispatches.rs#L1728-L1745) | +| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.update_symbol`](/code/pallets/subtensor/src/macros/dispatches.rs#L1725-L1742) | ## Parameters @@ -67,7 +67,7 @@ result = sub.execute_tool("update_symbol", {...}, wallet) ## On-chain implementation -`SubtensorModule.update_symbol` — [`pallets/subtensor/src/macros/dispatches.rs#L1730`](/code/pallets/subtensor/src/macros/dispatches.rs#L1728-L1745): +`SubtensorModule.update_symbol` — [`pallets/subtensor/src/macros/dispatches.rs#L1727`](/code/pallets/subtensor/src/macros/dispatches.rs#L1725-L1742): ```rust #[pallet::call_index(112)] diff --git a/pallets/commitments/src/weights.rs b/pallets/commitments/src/weights.rs index 821ba420ba..fcf7639d17 100644 --- a/pallets/commitments/src/weights.rs +++ b/pallets/commitments/src/weights.rs @@ -1,35 +1,28 @@ //! Autogenerated weights for `pallet_commitments` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 49.1.0 -//! DATE: 2026-07-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2023-12-08, STEPS: `2`, REPEAT: `1`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runnervmkkn4f`, CPU: `AMD EPYC 9V74 80-Core Processor` -//! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` +//! HOSTNAME: `rustys-mbp.lan`, CPU: `` +//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("local")`, DB CACHE: `1024` // Executed Command: -// /home/runner/work/subtensor/subtensor/target/production/node-subtensor +// ./target/release/node-subtensor // benchmark // pallet -// --runtime=/home/runner/work/subtensor/subtensor/target/production/wbuild/node-subtensor-runtime/node_subtensor_runtime.compact.compressed.wasm -// --genesis-builder=runtime -// --genesis-builder-preset=benchmark +// --chain=local +// --execution=wasm // --wasm-execution=compiled // --pallet=pallet_commitments // --extrinsic=* -// --steps=50 -// --repeat=20 -// --no-storage-info -// --no-min-squares -// --no-median-slopes -// --output=/tmp/tmp.V8xURZVxTO -// --template=/home/runner/work/subtensor/subtensor/.maintain/frame-weight-template.hbs +// --output=pallets/commitments/src/weights.rs +// --template=./.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] #![allow(missing_docs)] -#![allow(dead_code)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; use core::marker::PhantomData; @@ -65,14 +58,8 @@ impl WeightInfo for SubstrateWeight { .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } - /// Storage: `Commitments::MaxSpace` (r:0 w:1) - /// Proof: `Commitments::MaxSpace` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_max_space() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 1_372_000 picoseconds. - Weight::from_parts(1_692_000, 0) + Weight::from_parts(2_856_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Skipped::Metadata` (r:0 w:0) @@ -111,14 +98,8 @@ impl WeightInfo for () { .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } - /// Storage: `Commitments::MaxSpace` (r:0 w:1) - /// Proof: `Commitments::MaxSpace` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) fn set_max_space() -> Weight { - // Proof Size summary in bytes: - // Measured: `0` - // Estimated: `0` - // Minimum execution time: 1_372_000 picoseconds. - Weight::from_parts(1_692_000, 0) + Weight::from_parts(2_856_000, 0) .saturating_add(RocksDbWeight::get().writes(1_u64)) } /// Storage: `Skipped::Metadata` (r:0 w:0) diff --git a/pallets/crowdloan/src/weights.rs b/pallets/crowdloan/src/weights.rs index 026e0acb22..6ec23b2c23 100644 --- a/pallets/crowdloan/src/weights.rs +++ b/pallets/crowdloan/src/weights.rs @@ -2,9 +2,9 @@ //! Autogenerated weights for `pallet_crowdloan` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 49.1.0 -//! DATE: 2026-07-05, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-06-30, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `runnervmkkn4f`, CPU: `AMD EPYC 9V74 80-Core Processor` +//! HOSTNAME: `runnervmmklqx`, CPU: `AMD EPYC 9V74 80-Core Processor` //! WASM-EXECUTION: `Compiled`, CHAIN: `None`, DB CACHE: `1024` // Executed Command: @@ -22,7 +22,7 @@ // --no-storage-info // --no-min-squares // --no-median-slopes -// --output=/tmp/tmp.HXC5x2AL6y +// --output=/tmp/tmp.CWtPZcdN9i // --template=/home/runner/work/subtensor/subtensor/.maintain/frame-weight-template.hbs #![cfg_attr(rustfmt, rustfmt_skip)] @@ -63,8 +63,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `119` // Estimated: `6148` - // Minimum execution time: 62_814_000 picoseconds. - Weight::from_parts(65_689_000, 6148) + // Minimum execution time: 59_888_000 picoseconds. + Weight::from_parts(61_110_000, 6148) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -80,8 +80,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `448` // Estimated: `6148` - // Minimum execution time: 68_563_000 picoseconds. - Weight::from_parts(71_076_000, 6148) + // Minimum execution time: 65_807_000 picoseconds. + Weight::from_parts(66_819_000, 6148) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -95,8 +95,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `408` // Estimated: `6148` - // Minimum execution time: 61_532_000 picoseconds. - Weight::from_parts(64_286_000, 6148) + // Minimum execution time: 59_447_000 picoseconds. + Weight::from_parts(61_220_000, 6148) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -110,17 +110,13 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn finalize() -> Weight { // Proof Size summary in bytes: - // Measured: `1216` + // Measured: `1181` // Estimated: `4197809` - // Minimum execution time: 31_887_000 picoseconds. - Weight::from_parts(33_050_000, 4197809) - .saturating_add(T::DbWeight::get().reads(7_u64)) + // Minimum execution time: 32_548_000 picoseconds. + Weight::from_parts(34_110_000, 4197809) + .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `Crowdloan::Crowdloans` (r:1 w:1) @@ -134,10 +130,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `324 + k * (46 ±0)` // Estimated: `3747 + k * (2579 ±0)` - // Minimum execution time: 109_925_000 picoseconds. - Weight::from_parts(115_633_000, 3747) - // Standard Error: 101_663 - .saturating_add(Weight::from_parts(43_172_223, 0).saturating_mul(k.into())) + // Minimum execution time: 109_320_000 picoseconds. + Weight::from_parts(110_392_000, 3747) + // Standard Error: 94_672 + .saturating_add(Weight::from_parts(39_822_919, 0).saturating_mul(k.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(k.into()))) .saturating_add(T::DbWeight::get().writes((2_u64).saturating_mul(k.into()))) @@ -155,8 +151,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `370` // Estimated: `6148` - // Minimum execution time: 69_645_000 picoseconds. - Weight::from_parts(71_247_000, 6148) + // Minimum execution time: 69_442_000 picoseconds. + Weight::from_parts(70_724_000, 6148) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -168,8 +164,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `229` // Estimated: `3747` - // Minimum execution time: 11_467_000 picoseconds. - Weight::from_parts(11_828_000, 3747) + // Minimum execution time: 13_049_000 picoseconds. + Weight::from_parts(13_510_000, 3747) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -179,8 +175,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `229` // Estimated: `3747` - // Minimum execution time: 10_125_000 picoseconds. - Weight::from_parts(10_586_000, 3747) + // Minimum execution time: 11_557_000 picoseconds. + Weight::from_parts(12_318_000, 3747) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -190,8 +186,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `229` // Estimated: `3747` - // Minimum execution time: 9_905_000 picoseconds. - Weight::from_parts(10_165_000, 3747) + // Minimum execution time: 11_386_000 picoseconds. + Weight::from_parts(11_797_000, 3747) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -205,8 +201,8 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `293` // Estimated: `3747` - // Minimum execution time: 13_941_000 picoseconds. - Weight::from_parts(14_311_000, 3747) + // Minimum execution time: 15_924_000 picoseconds. + Weight::from_parts(16_805_000, 3747) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -226,8 +222,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `119` // Estimated: `6148` - // Minimum execution time: 62_814_000 picoseconds. - Weight::from_parts(65_689_000, 6148) + // Minimum execution time: 59_888_000 picoseconds. + Weight::from_parts(61_110_000, 6148) .saturating_add(RocksDbWeight::get().reads(3_u64)) .saturating_add(RocksDbWeight::get().writes(5_u64)) } @@ -243,8 +239,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `448` // Estimated: `6148` - // Minimum execution time: 68_563_000 picoseconds. - Weight::from_parts(71_076_000, 6148) + // Minimum execution time: 65_807_000 picoseconds. + Weight::from_parts(66_819_000, 6148) .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } @@ -258,8 +254,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `408` // Estimated: `6148` - // Minimum execution time: 61_532_000 picoseconds. - Weight::from_parts(64_286_000, 6148) + // Minimum execution time: 59_447_000 picoseconds. + Weight::from_parts(61_220_000, 6148) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(4_u64)) } @@ -273,17 +269,13 @@ impl WeightInfo for () { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn finalize() -> Weight { // Proof Size summary in bytes: - // Measured: `1216` + // Measured: `1181` // Estimated: `4197809` - // Minimum execution time: 31_887_000 picoseconds. - Weight::from_parts(33_050_000, 4197809) - .saturating_add(RocksDbWeight::get().reads(7_u64)) + // Minimum execution time: 32_548_000 picoseconds. + Weight::from_parts(34_110_000, 4197809) + .saturating_add(RocksDbWeight::get().reads(5_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } /// Storage: `Crowdloan::Crowdloans` (r:1 w:1) @@ -297,10 +289,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `324 + k * (46 ±0)` // Estimated: `3747 + k * (2579 ±0)` - // Minimum execution time: 109_925_000 picoseconds. - Weight::from_parts(115_633_000, 3747) - // Standard Error: 101_663 - .saturating_add(Weight::from_parts(43_172_223, 0).saturating_mul(k.into())) + // Minimum execution time: 109_320_000 picoseconds. + Weight::from_parts(110_392_000, 3747) + // Standard Error: 94_672 + .saturating_add(Weight::from_parts(39_822_919, 0).saturating_mul(k.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().reads((2_u64).saturating_mul(k.into()))) .saturating_add(RocksDbWeight::get().writes((2_u64).saturating_mul(k.into()))) @@ -318,8 +310,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `370` // Estimated: `6148` - // Minimum execution time: 69_645_000 picoseconds. - Weight::from_parts(71_247_000, 6148) + // Minimum execution time: 69_442_000 picoseconds. + Weight::from_parts(70_724_000, 6148) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(5_u64)) } @@ -331,8 +323,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `229` // Estimated: `3747` - // Minimum execution time: 11_467_000 picoseconds. - Weight::from_parts(11_828_000, 3747) + // Minimum execution time: 13_049_000 picoseconds. + Weight::from_parts(13_510_000, 3747) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -342,8 +334,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `229` // Estimated: `3747` - // Minimum execution time: 10_125_000 picoseconds. - Weight::from_parts(10_586_000, 3747) + // Minimum execution time: 11_557_000 picoseconds. + Weight::from_parts(12_318_000, 3747) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -353,8 +345,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `229` // Estimated: `3747` - // Minimum execution time: 9_905_000 picoseconds. - Weight::from_parts(10_165_000, 3747) + // Minimum execution time: 11_386_000 picoseconds. + Weight::from_parts(11_797_000, 3747) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -368,8 +360,8 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `293` // Estimated: `3747` - // Minimum execution time: 13_941_000 picoseconds. - Weight::from_parts(14_311_000, 3747) + // Minimum execution time: 15_924_000 picoseconds. + Weight::from_parts(16_805_000, 3747) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } diff --git a/pallets/proxy/src/weights.rs b/pallets/proxy/src/weights.rs index 8f6375a237..253c64c795 100644 --- a/pallets/proxy/src/weights.rs +++ b/pallets/proxy/src/weights.rs @@ -59,16 +59,12 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Proxy::LastCallResult` (r:0 w:1) /// Proof: `Proxy::LastCallResult` (`max_values`: None, `max_size`: Some(47), added: 2522, mode: `MaxEncodedLen`) /// The range of component `p` is `[1, 19]`. fn proxy(p: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `672 + p * (37 ±0)` + // Measured: `637 + p * (37 ±0)` // Estimated: `4254 + p * (37 ±0)` // Minimum execution time: 27_311_000 picoseconds. Weight::from_parts(28_486_266, 4254) @@ -88,17 +84,13 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Proxy::LastCallResult` (r:0 w:1) /// Proof: `Proxy::LastCallResult` (`max_values`: None, `max_size`: Some(47), added: 2522, mode: `MaxEncodedLen`) /// The range of component `a` is `[0, 74]`. /// The range of component `p` is `[1, 19]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `929 + a * (68 ±0) + p * (37 ±0)` + // Measured: `894 + a * (68 ±0) + p * (37 ±0)` // Estimated: `8615 + a * (68 ±0) + p * (37 ±0)` // Minimum execution time: 53_721_000 picoseconds. Weight::from_parts(54_823_542, 8615) @@ -283,16 +275,12 @@ impl WeightInfo for () { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Proxy::LastCallResult` (r:0 w:1) /// Proof: `Proxy::LastCallResult` (`max_values`: None, `max_size`: Some(47), added: 2522, mode: `MaxEncodedLen`) /// The range of component `p` is `[1, 19]`. fn proxy(p: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `672 + p * (37 ±0)` + // Measured: `637 + p * (37 ±0)` // Estimated: `4254 + p * (37 ±0)` // Minimum execution time: 27_311_000 picoseconds. Weight::from_parts(28_486_266, 4254) @@ -312,17 +300,13 @@ impl WeightInfo for () { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `Proxy::LastCallResult` (r:0 w:1) /// Proof: `Proxy::LastCallResult` (`max_values`: None, `max_size`: Some(47), added: 2522, mode: `MaxEncodedLen`) /// The range of component `a` is `[0, 74]`. /// The range of component `p` is `[1, 19]`. fn proxy_announced(a: u32, p: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `929 + a * (68 ±0) + p * (37 ±0)` + // Measured: `894 + a * (68 ±0) + p * (37 ±0)` // Estimated: `8615 + a * (68 ±0) + p * (37 ±0)` // Minimum execution time: 53_721_000 picoseconds. Weight::from_parts(54_823_542, 8615) diff --git a/pallets/subtensor/src/benchmarks/benchmarks.rs b/pallets/subtensor/src/benchmarks/benchmarks.rs index 10d0aa1b13..375bdb61ea 100644 --- a/pallets/subtensor/src/benchmarks/benchmarks.rs +++ b/pallets/subtensor/src/benchmarks/benchmarks.rs @@ -1884,55 +1884,6 @@ mod pallet_benchmarks { assert!(!AccumulatedLeaseDividends::::contains_key(lease_id)); } - #[benchmark] - fn create_sale_offer() { - let (netuid, seller, owner_hotkey, authorized_buyer, price) = - setup_subnet_sale_offer::(); - - #[extrinsic_call] - _( - RawOrigin::Signed(seller.clone()), - netuid, - price, - Some(authorized_buyer.clone()), - ); - - let offer = SubnetSaleOffers::::get(netuid).unwrap(); - assert_eq!(offer.id, 0); - assert_eq!(offer.netuid, netuid); - assert_eq!(offer.seller_coldkey, seller); - assert_eq!(offer.seller_hotkey, owner_hotkey); - assert_eq!(offer.authorized_buyer, Some(authorized_buyer)); - assert_eq!(offer.price, price.into()); - assert_eq!(offer.created_at, frame_system::Pallet::::block_number()); - assert!(SubnetSaleFrozenColdkeys::::contains_key( - &offer.seller_coldkey - )); - assert!(SubnetSaleFrozenHotkeys::::contains_key( - &offer.seller_hotkey - )); - } - - #[benchmark] - fn cancel_sale_offer() { - let (netuid, seller, owner_hotkey, authorized_buyer, price) = - setup_subnet_sale_offer::(); - - assert_ok!(Subtensor::::create_sale_offer( - RawOrigin::Signed(seller.clone()).into(), - netuid, - price, - Some(authorized_buyer), - )); - - #[extrinsic_call] - _(RawOrigin::Signed(seller.clone()), netuid); - - assert!(!SubnetSaleOffers::::contains_key(netuid)); - assert!(!SubnetSaleFrozenColdkeys::::contains_key(seller)); - assert!(!SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); - } - #[benchmark] fn update_symbol() { let coldkey: T::AccountId = whitelisted_caller(); @@ -2401,26 +2352,6 @@ mod pallet_benchmarks { } } - #[benchmark] - fn check_subnet_sale_extension() { - let who: T::AccountId = account("who", 0, 1); - let hotkey: T::AccountId = account("hotkey", 0, 1); - let call = runtime_call::(Call::::register_network { hotkey }); - - // Freeze `who` as an owner hotkey only. This exercises the worst case: the coldkey - // lookup misses (so the check does not return early) and the hotkey lookup hits, so - // both storage reads are performed. - SubnetSaleFrozenHotkeys::::insert(&who, ()); - - #[block] - { - assert_eq!( - CheckSubnetSale::::check(&who, &call), - Err(Error::::HotkeyLockedDuringSale) - ); - } - } - #[benchmark] fn check_weights_extension() { let netuid = NetUid::from(1); diff --git a/pallets/subtensor/src/benchmarks/helpers.rs b/pallets/subtensor/src/benchmarks/helpers.rs index bcc364af6f..2f45e98e80 100644 --- a/pallets/subtensor/src/benchmarks/helpers.rs +++ b/pallets/subtensor/src/benchmarks/helpers.rs @@ -452,24 +452,6 @@ pub(super) fn signature_for_associate_evm_key( ecdsa::Signature::from_raw(signature) } -pub(super) fn setup_subnet_sale_offer() --> (NetUid, T::AccountId, T::AccountId, T::AccountId, TaoBalance) { - let netuid = NetUid::from(1); - let seller: T::AccountId = whitelisted_caller(); - let owner_hotkey: T::AccountId = account("owner_hotkey", 0, 0); - let authorized_buyer: T::AccountId = account("authorized_buyer", 0, 0); - let price = TaoBalance::from(1_000_000_000_u64); - - Subtensor::::init_new_network(netuid, 1); - SubnetOwner::::insert(netuid, seller.clone()); - assert_ok!(Subtensor::::set_subnet_owner_hotkey( - netuid, - &owner_hotkey - )); - - (netuid, seller, owner_hotkey, authorized_buyer, price) -} - pub(super) fn setup_worst_case_registered_subnet( label: &'static str, netuid: NetUid, diff --git a/pallets/subtensor/src/extensions/subtensor.rs b/pallets/subtensor/src/extensions/subtensor.rs index 4a2ab4e97c..7899ed855e 100644 --- a/pallets/subtensor/src/extensions/subtensor.rs +++ b/pallets/subtensor/src/extensions/subtensor.rs @@ -1,6 +1,6 @@ use crate::{ Call, CheckColdkeySwap, CheckDelegateTake, CheckEvmKeyAssociation, CheckRateLimits, - CheckServingEndpoints, CheckSubnetSale, CheckWeights, Config, Error, guards::applicable_call, + CheckServingEndpoints, CheckWeights, Config, Error, guards::applicable_call, }; use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::{ @@ -88,7 +88,6 @@ impl SubtensorTransactionExtension { }; CheckColdkeySwap::::check(who, call)?; - CheckSubnetSale::::check(who, call)?; if let Some(call) = applicable_call(call, CheckWeights::::applies_to) { CheckWeights::::check(who, call)?; @@ -127,7 +126,6 @@ where fn weight(&self, call: &CallOf) -> Weight { use DispatchExtension as DE; as DE>>::weight(call) - .saturating_add( as DE>>::weight(call)) .saturating_add( as DE>>::weight(call)) .saturating_add( as DE>>::weight(call)) .saturating_add( as DE>>::weight(call)) @@ -159,8 +157,8 @@ mod tests { use super::SubtensorTransactionExtension; use crate::{ CheckColdkeySwap, CheckDelegateTake, CheckEvmKeyAssociation, CheckRateLimits, - CheckServingEndpoints, CheckSubnetSale, CheckWeights, ColdkeySwapAnnouncements, - ColdkeySwapDisputes, SubnetSaleFrozenColdkeys, tests::mock::*, + CheckServingEndpoints, CheckWeights, ColdkeySwapAnnouncements, ColdkeySwapDisputes, + tests::mock::*, }; use frame_support::{ assert_ok, @@ -199,7 +197,6 @@ mod tests { fn expected_transaction_extension_weight(call: &RuntimeCall) -> frame_support::weights::Weight { use DispatchExtension as DE; as DE>::weight(call) - .saturating_add( as DE>::weight(call)) .saturating_add( as DE>::weight(call)) .saturating_add( as DE>::weight(call)) .saturating_add( as DE>::weight(call)) @@ -281,19 +278,6 @@ mod tests { }); } - #[test] - fn validate_rejects_sale_frozen_coldkey_call() { - new_test_ext(1).execute_with(|| { - let seller = U256::from(1); - let call = RuntimeCall::System(frame_system::Call::remark { remark: vec![] }); - - SubnetSaleFrozenColdkeys::::insert(seller, ()); - - let err = validate_signed(seller, &call).unwrap_err(); - assert_eq!(err, CustomTransactionError::BadRequest.into()); - }); - } - #[test] fn weight_matches_top_level_dispatch_extension_checks() { new_test_ext(1).execute_with(|| { diff --git a/pallets/subtensor/src/guards/check_coldkey_swap.rs b/pallets/subtensor/src/guards/check_coldkey_swap.rs index 7ee901adad..b0b7a57413 100644 --- a/pallets/subtensor/src/guards/check_coldkey_swap.rs +++ b/pallets/subtensor/src/guards/check_coldkey_swap.rs @@ -134,11 +134,6 @@ mod tests { RuntimeCall::SubtensorModule(crate::Call::register_network { hotkey: U256::from(1), }), - RuntimeCall::SubtensorModule(crate::Call::create_sale_offer { - netuid: 1u16.into(), - price: TaoBalance::from(1_000_u64), - authorized_buyer: None, - }), ] } diff --git a/pallets/subtensor/src/guards/check_subnet_sale.rs b/pallets/subtensor/src/guards/check_subnet_sale.rs deleted file mode 100644 index f31dde7362..0000000000 --- a/pallets/subtensor/src/guards/check_subnet_sale.rs +++ /dev/null @@ -1,302 +0,0 @@ -use super::{CallOf, DispatchableOriginOf}; -use crate::weights::WeightInfo; -use crate::{Call, Config, Error, SubnetSaleFrozenColdkeys, SubnetSaleFrozenHotkeys}; -use frame_support::{ - dispatch::{DispatchErrorWithPostInfo, DispatchExtension, DispatchInfo, PostDispatchInfo}, - pallet_prelude::*, - traits::{IsSubType, OriginTrait}, -}; -use sp_runtime::traits::Dispatchable; -use sp_std::marker::PhantomData; - -/// Dispatch extension that blocks seller coldkey and owner hotkey calls during a subnet sale. -/// -/// When a subnet sale offer is active: -/// - The frozen seller coldkey can only cancel the sale offer. -/// - The frozen owner hotkey is fully locked and can submit no calls. -/// -/// Root origin bypasses this extension entirely. -/// Non-signed origins pass through. -/// -/// Because this is a `DispatchExtension` (not a `TransactionExtension`), it fires at every -/// `call.dispatch(origin)` site, including inside proxy dispatch with the resolved origin. -/// Any indirectly dispatched call that resolves to a frozen signer is therefore re-checked -/// here, so the freeze cannot be bypassed by wrapping a call in another dispatch layer. -pub struct CheckSubnetSale(PhantomData); - -impl CheckSubnetSale -where - T: Config, - CallOf: IsSubType>, -{ - pub fn check(who: &T::AccountId, call: &CallOf) -> Result<(), Error> { - // A frozen seller coldkey may only cancel the sale offer. - if SubnetSaleFrozenColdkeys::::contains_key(who) - && !matches!(call.is_sub_type(), Some(Call::cancel_sale_offer { .. })) - { - return Err(Error::::ColdkeyLockedDuringSale); - } - - // A frozen seller hotkey is fully locked while the sale is active. Cancellation is a - // coldkey action, so the seller cancels through the (also frozen) seller coldkey, - // which is why a same-account seller hotkey is never frozen here (see do_create_sale_offer). - if SubnetSaleFrozenHotkeys::::contains_key(who) { - return Err(Error::::HotkeyLockedDuringSale); - } - - Ok(()) - } -} - -impl DispatchExtension<::RuntimeCall> for CheckSubnetSale -where - T: Config, - ::RuntimeCall: - Dispatchable + IsSubType>, - DispatchableOriginOf: OriginTrait, -{ - type Pre = (); - - fn weight(_call: &CallOf) -> Weight { - ::WeightInfo::check_subnet_sale_extension() - } - - fn pre_dispatch( - origin: &DispatchableOriginOf, - call: &CallOf, - ) -> Result { - let Some(who) = origin.as_signer() else { - return Ok(()); - }; - - Self::check(who, call).map_err(Into::into) - } -} - -#[cfg(test)] -#[allow(clippy::expect_used, clippy::unwrap_used)] -mod tests { - use crate::{ - Error, SubnetSaleFrozenColdkeys, SubnetSaleFrozenHotkeys, tests::mock::*, - weights::WeightInfo as _, - }; - use frame_support::{ - assert_noop, assert_ok, - dispatch::{DispatchErrorWithPostInfo, DispatchExtension}, - }; - use frame_system::Call as SystemCall; - use pallet_subtensor_proxy::Call as ProxyCall; - use sp_core::U256; - use sp_runtime::traits::Dispatchable; - use subtensor_runtime_common::{NetUid, ProxyType, TaoBalance}; - - type SaleGuard = super::CheckSubnetSale; - - fn pre_dispatch( - origin: RuntimeOrigin, - call: &RuntimeCall, - ) -> Result<(), DispatchErrorWithPostInfo> { - >::pre_dispatch(&origin, call) - } - - fn sale_netuid() -> NetUid { - NetUid::from(1) - } - - fn freeze_coldkey(who: U256) { - SubnetSaleFrozenColdkeys::::insert(who, ()); - } - - fn freeze_owner_hotkey(who: U256) { - SubnetSaleFrozenHotkeys::::insert(who, ()); - } - - fn remark_call() -> RuntimeCall { - RuntimeCall::System(SystemCall::remark { remark: vec![] }) - } - - fn cancel_call() -> RuntimeCall { - RuntimeCall::SubtensorModule(crate::Call::cancel_sale_offer { - netuid: sale_netuid(), - }) - } - - fn add_balance_to_coldkey_account(coldkey: &U256, tao: TaoBalance) { - let credit = SubtensorModule::mint_tao(tao); - let _ = SubtensorModule::spend_tao(coldkey, credit, tao).unwrap(); - } - - #[test] - fn no_sale_freeze_allows_signed_calls() { - new_test_ext(1).execute_with(|| { - let who = U256::from(1); - - assert_ok!(pre_dispatch(RuntimeOrigin::signed(who), &remark_call())); - }); - } - - #[test] - fn none_and_root_bypass_sale_freezes() { - new_test_ext(1).execute_with(|| { - let who = U256::from(1); - freeze_coldkey(who); - freeze_owner_hotkey(who); - - assert_ok!(pre_dispatch(RuntimeOrigin::none(), &remark_call())); - assert_ok!(pre_dispatch(RuntimeOrigin::root(), &remark_call())); - }); - } - - #[test] - fn freeze_coldkey_blocks_regular_signed_calls() { - new_test_ext(1).execute_with(|| { - let seller = U256::from(1); - freeze_coldkey(seller); - - assert_noop!( - pre_dispatch(RuntimeOrigin::signed(seller), &remark_call()), - Error::::ColdkeyLockedDuringSale - ); - }); - } - - #[test] - fn freeze_owner_hotkey_blocks_regular_signed_calls() { - new_test_ext(1).execute_with(|| { - let owner_hotkey = U256::from(2); - freeze_owner_hotkey(owner_hotkey); - - assert_noop!( - pre_dispatch(RuntimeOrigin::signed(owner_hotkey), &remark_call()), - Error::::HotkeyLockedDuringSale - ); - }); - } - - #[test] - fn freeze_coldkey_allows_sale_cancellation() { - new_test_ext(1).execute_with(|| { - let seller = U256::from(1); - freeze_coldkey(seller); - - assert_ok!(pre_dispatch(RuntimeOrigin::signed(seller), &cancel_call())); - }); - } - - #[test] - fn freeze_owner_hotkey_does_not_allow_sale_cancellation() { - new_test_ext(1).execute_with(|| { - let owner_hotkey = U256::from(2); - freeze_owner_hotkey(owner_hotkey); - - assert_noop!( - pre_dispatch(RuntimeOrigin::signed(owner_hotkey), &cancel_call()), - Error::::HotkeyLockedDuringSale - ); - }); - } - - #[test] - fn frozen_owner_hotkey_rejects_sale_cancellation_even_if_coldkey() { - new_test_ext(1).execute_with(|| { - let seller_and_owner_hotkey = U256::from(1); - freeze_coldkey(seller_and_owner_hotkey); - freeze_owner_hotkey(seller_and_owner_hotkey); - - assert_noop!( - pre_dispatch( - RuntimeOrigin::signed(seller_and_owner_hotkey), - &cancel_call() - ), - Error::::HotkeyLockedDuringSale - ); - }); - } - - #[test] - fn weight_is_constant_across_calls_because_freeze_can_block_any_signed_call() { - let expected = ::WeightInfo::check_subnet_sale_extension(); - - for call in [remark_call(), cancel_call()] { - assert_eq!( - >::weight(&call), - expected - ); - } - } - - #[test] - fn proxied_call_from_sale_frozen_coldkey_is_blocked() { - new_test_ext(1).execute_with(|| { - let real = U256::from(1); - let delegate = U256::from(2); - freeze_coldkey(real); - - add_balance_to_coldkey_account(&real, 1_000_000_000.into()); - add_balance_to_coldkey_account(&delegate, 1_000_000_000.into()); - - assert_ok!(Proxy::add_proxy( - RuntimeOrigin::signed(real), - delegate, - ProxyType::Any, - 0 - )); - - let proxy_call = RuntimeCall::Proxy(ProxyCall::proxy { - real, - force_proxy_type: None, - call: Box::new(remark_call()), - }); - - assert_ok!(proxy_call.dispatch(RuntimeOrigin::signed(delegate))); - assert_eq!( - pallet_subtensor_proxy::LastCallResult::::get(real), - Some(Err(Error::::ColdkeyLockedDuringSale.into())) - ); - }); - } - - #[test] - fn nested_proxied_call_from_sale_frozen_owner_hotkey_is_blocked() { - new_test_ext(1).execute_with(|| { - let real = U256::from(1); - let delegate1 = U256::from(2); - let delegate2 = U256::from(3); - freeze_owner_hotkey(real); - - add_balance_to_coldkey_account(&real, 1_000_000_000.into()); - add_balance_to_coldkey_account(&delegate1, 1_000_000_000.into()); - add_balance_to_coldkey_account(&delegate2, 1_000_000_000.into()); - - assert_ok!(Proxy::add_proxy( - RuntimeOrigin::signed(real), - delegate1, - ProxyType::Any, - 0 - )); - assert_ok!(Proxy::add_proxy( - RuntimeOrigin::signed(delegate1), - delegate2, - ProxyType::Any, - 0 - )); - - let inner_proxy = RuntimeCall::Proxy(ProxyCall::proxy { - real, - force_proxy_type: None, - call: Box::new(remark_call()), - }); - let outer_proxy = RuntimeCall::Proxy(ProxyCall::proxy { - real: delegate1, - force_proxy_type: None, - call: Box::new(inner_proxy), - }); - - assert_ok!(outer_proxy.dispatch(RuntimeOrigin::signed(delegate2))); - assert_eq!( - pallet_subtensor_proxy::LastCallResult::::get(real), - Some(Err(Error::::HotkeyLockedDuringSale.into())) - ); - }); - } -} diff --git a/pallets/subtensor/src/guards/mod.rs b/pallets/subtensor/src/guards/mod.rs index 2e4fc1c5eb..3865352858 100644 --- a/pallets/subtensor/src/guards/mod.rs +++ b/pallets/subtensor/src/guards/mod.rs @@ -3,7 +3,6 @@ mod check_delegate_take; mod check_evm_key_association; mod check_rate_limits; mod check_serving_endpoints; -mod check_subnet_sale; mod check_weights; use crate::{Call, Config}; @@ -15,7 +14,6 @@ pub use check_delegate_take::*; pub use check_evm_key_association::*; pub use check_rate_limits::*; pub use check_serving_endpoints::*; -pub use check_subnet_sale::*; pub use check_weights::*; pub(crate) type CallOf = ::RuntimeCall; diff --git a/pallets/subtensor/src/lib.rs b/pallets/subtensor/src/lib.rs index cdb6ba0300..a39ec97424 100644 --- a/pallets/subtensor/src/lib.rs +++ b/pallets/subtensor/src/lib.rs @@ -117,12 +117,9 @@ pub const ACCOUNT_FLAGS_ACCEPT_LOCKED_ALPHA: u128 = 1u128 << 0; pub mod pallet { use crate::migrations; use crate::staking::lock::LockState; - use crate::subnets::{ - dissolution::DissolveCleanupStatus, - leasing::{LeaseId, SubnetLeaseOf}, - sale_offer::{SaleOfferId, SubnetSaleOfferOf}, - subnet::NetworkRegistrationInfo, - }; + use crate::subnets::dissolution::DissolveCleanupStatus; + use crate::subnets::leasing::{LeaseId, SubnetLeaseOf}; + use crate::subnets::subnet::NetworkRegistrationInfo; use crate::weights::WeightInfo; use crate::{ MAX_ASSOCIATED_UIDS_PER_EVM_ADDRESS, MAX_COLDKEY_COLLATERAL_HOTKEYS, RateLimitKey, @@ -141,7 +138,7 @@ pub mod pallet { use pallet_drand::types::RoundNumber; use runtime_common::prod_or_fast; use share_pool::SafeFloat; - use sp_core::{ConstU32, ConstU64, H160, H256}; + use sp_core::{ConstU32, H160, H256}; use sp_runtime::PerU16; use sp_runtime::traits::{Dispatchable, TrailingZeroInput}; use sp_std::collections::btree_map::BTreeMap; @@ -2785,30 +2782,7 @@ pub mod pallet { pub type AccumulatedLeaseDividends = StorageMap<_, Twox64Concat, LeaseId, AlphaBalance, ValueQuery, DefaultZeroAlpha>; - /// =========================== - /// ==== Subnet Sale Offers ==== - /// =========================== - /// --- ITEM ( next_sale_offer_id ) | The next subnet sale offer id. - #[pallet::storage] - pub type NextSubnetSaleOfferId = - StorageValue<_, SaleOfferId, ValueQuery, ConstU64<0>>; - - /// --- MAP ( netuid ) --> subnet sale offer | Active sale offer for a subnet. - #[pallet::storage] - pub type SubnetSaleOffers = - StorageMap<_, Twox64Concat, NetUid, SubnetSaleOfferOf, OptionQuery>; - - /// --- MAP ( coldkey ) --> () | Owner coldkeys frozen by an active subnet sale offer. - #[pallet::storage] - pub type SubnetSaleFrozenColdkeys = - StorageMap<_, Identity, T::AccountId, (), OptionQuery>; - - /// --- MAP ( hotkey ) --> () | Owner hotkeys frozen by an active subnet sale offer. - #[pallet::storage] - pub type SubnetSaleFrozenHotkeys = - StorageMap<_, Identity, T::AccountId, (), OptionQuery>; - - /// --- ITEM ( CommitRevealWeightsVersion ) + /// ITEM ( CommitRevealWeightsVersion ) #[pallet::storage] pub type CommitRevealWeightsVersion = StorageValue<_, u16, ValueQuery, DefaultCommitRevealWeightsVersion>; diff --git a/pallets/subtensor/src/macros/dispatches.rs b/pallets/subtensor/src/macros/dispatches.rs index cbbba31a52..e697bbe1b3 100644 --- a/pallets/subtensor/src/macros/dispatches.rs +++ b/pallets/subtensor/src/macros/dispatches.rs @@ -2497,31 +2497,5 @@ mod dispatches { ) -> DispatchResult { Self::do_set_min_collateral(origin, netuid, hotkey, min_locked) } - - /// Create a sale offer for an owned subnet. - /// - /// While the offer exists, the seller coldkey, subnet, and owner hotkey are locked. - /// The seller can optionally restrict the future buyer to a specific coldkey. - #[pallet::call_index(146)] - #[pallet::weight(::WeightInfo::create_sale_offer())] - pub fn create_sale_offer( - origin: OriginFor, - netuid: NetUid, - price: TaoBalance, - authorized_buyer: Option, - ) -> DispatchResult { - let who = ensure_signed(origin)?; - Self::do_create_sale_offer(who, netuid, price, authorized_buyer) - } - - /// Cancel an active subnet sale offer. - /// - /// The seller that created the offer or root can cancel it. - #[pallet::call_index(147)] - #[pallet::weight(::WeightInfo::cancel_sale_offer())] - pub fn cancel_sale_offer(origin: OriginFor, netuid: NetUid) -> DispatchResult { - let maybe_who = crate::system::ensure_signed_or_root(origin)?; - Self::do_cancel_sale_offer(maybe_who, netuid) - } } } diff --git a/pallets/subtensor/src/macros/errors.rs b/pallets/subtensor/src/macros/errors.rs index ac8d64d9e6..b009236cb6 100644 --- a/pallets/subtensor/src/macros/errors.rs +++ b/pallets/subtensor/src/macros/errors.rs @@ -233,16 +233,6 @@ mod errors { LeaseHasNoEndBlock, /// Lease has not ended. LeaseHasNotEnded, - /// Active subnet sale offer already exists for this subnet. - SaleOfferAlreadyExists, - /// No active subnet sale offer exists for this subnet. - SaleOfferNotFound, - /// The subnet is under an active lease and cannot be listed for sale. - SubnetIsLeased, - /// The seller coldkey is locked by an active subnet sale offer. - ColdkeyLockedDuringSale, - /// The subnet owner hotkey is locked by an active subnet sale offer. - HotkeyLockedDuringSale, /// An overflow occurred. Overflow, /// Beneficiary does not own hotkey. diff --git a/pallets/subtensor/src/macros/events.rs b/pallets/subtensor/src/macros/events.rs index 701750ff9e..5391c2a027 100644 --- a/pallets/subtensor/src/macros/events.rs +++ b/pallets/subtensor/src/macros/events.rs @@ -397,30 +397,6 @@ mod events { netuid: NetUid, }, - /// A subnet sale offer has been created and the seller coldkey has been locked. - SubnetSaleOfferCreated { - /// The unique id of the sale offer. - id: SaleOfferId, - /// The subnet owner coldkey selling the subnet. - seller_coldkey: T::AccountId, - /// The subnet ID. - netuid: NetUid, - /// The sale price. - price: TaoBalance, - /// Optional buyer coldkey authorized to consume the offer. - authorized_buyer: Option, - }, - - /// A subnet sale offer has been cancelled and its locks have been released. - SubnetSaleOfferCancelled { - /// The unique id of the sale offer. - id: SaleOfferId, - /// The subnet owner coldkey that cancelled the offer. - seller_coldkey: T::AccountId, - /// The subnet ID. - netuid: NetUid, - }, - /// The symbol for a subnet has been updated. SymbolUpdated { /// The subnet ID diff --git a/pallets/subtensor/src/subnets/dissolution.rs b/pallets/subtensor/src/subnets/dissolution.rs index 841deed4f0..760d24aaa5 100644 --- a/pallets/subtensor/src/subnets/dissolution.rs +++ b/pallets/subtensor/src/subnets/dissolution.rs @@ -124,11 +124,6 @@ impl Pallet { Error::::NetworkDissolveAlreadyQueued ); - // Cancel any active sale before marking the subnet as nonexistent. - if SubnetSaleOffers::::contains_key(netuid) { - Self::do_cancel_sale_offer(None, netuid)?; - } - // 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/subnets/mod.rs b/pallets/subtensor/src/subnets/mod.rs index 96910ee3de..cc654fcc44 100644 --- a/pallets/subtensor/src/subnets/mod.rs +++ b/pallets/subtensor/src/subnets/mod.rs @@ -4,7 +4,6 @@ pub mod dissolution; pub mod leasing; pub mod mechanism; pub mod registration; -pub mod sale_offer; pub mod serving; pub mod subnet; pub mod symbols; diff --git a/pallets/subtensor/src/subnets/sale_offer.rs b/pallets/subtensor/src/subnets/sale_offer.rs deleted file mode 100644 index 18909518f0..0000000000 --- a/pallets/subtensor/src/subnets/sale_offer.rs +++ /dev/null @@ -1,152 +0,0 @@ -//! Subnet sale offers and sale-time freezes. -//! -//! This module intentionally only owns the seller-side primitive: listing a subnet -//! for sale freezes the seller coldkey and seller hotkey until the offer is cancelled -//! or later consumed by a sale finalization path. - -use super::*; -use frame_support::traits::fungible; -use frame_system::pallet_prelude::BlockNumberFor; -use subtensor_runtime_common::{NetUid, TaoBalance}; - -pub type CurrencyOf = ::Currency; - -pub type BalanceOf = - as fungible::Inspect<::AccountId>>::Balance; - -/// Monotonically increasing identifier minted for every subnet sale offer. -/// -/// A fresh id is assigned on each creation so that a consumer that binds to an -/// offer (e.g. a crowdloan raising funds to buy the subnet) can detect a -/// cancel-and-recreate: the recreated offer carries a new id and no longer -/// matches the one that was bound, so the stale binding fails instead of being -/// silently satisfied by a different offer with modified terms. -pub type SaleOfferId = u64; - -#[freeze_struct("6adb80684dface3a")] -#[derive(Encode, Decode, Eq, PartialEq, Ord, PartialOrd, RuntimeDebug, TypeInfo, MaxEncodedLen)] -pub struct SubnetSaleOffer { - /// Unique identifier for this offer. - pub id: SaleOfferId, - /// The subnet being sold. - pub netuid: NetUid, - /// The subnet owner coldkey that created the offer. - pub seller_coldkey: AccountId, - /// The subnet owner hotkey frozen by this offer. - /// - /// Kept here (rather than re-read from `SubnetOwnerHotkey` at unfreeze time) so - /// cancellation and subnet dissolution unfreeze exactly the hotkey that was frozen, - /// even if the subnet owner hotkey changed while the offer was active. - pub seller_hotkey: AccountId, - /// Optional coldkey that is allowed to consume this offer. - pub authorized_buyer: Option, - /// Sale price expected by the seller. - pub price: Balance, - /// Block at which the sale offer was created. - pub created_at: BlockNumber, -} - -pub type SubnetSaleOfferOf = SubnetSaleOffer, BalanceOf, BlockNumberFor>; - -impl Pallet { - pub fn do_create_sale_offer( - seller_coldkey: T::AccountId, - netuid: NetUid, - price: TaoBalance, - authorized_buyer: Option, - ) -> DispatchResult { - ensure!(price > TaoBalance::from(0_u64), Error::::AmountTooLow); - ensure!(Self::if_subnet_exist(netuid), Error::::SubnetNotExists); - ensure!( - SubnetOwner::::get(netuid) == seller_coldkey, - Error::::NotSubnetOwner - ); - ensure!( - !SubnetUidToLeaseId::::contains_key(netuid), - Error::::SubnetIsLeased - ); - ensure!( - !SubnetSaleOffers::::contains_key(netuid), - Error::::SaleOfferAlreadyExists - ); - ensure!( - !SubnetSaleFrozenColdkeys::::contains_key(&seller_coldkey), - Error::::ColdkeyLockedDuringSale - ); - let seller_hotkey = SubnetOwnerHotkey::::try_get(netuid) - .map_err(|_| Error::::HotKeyAccountNotExists)?; - ensure!( - !SubnetSaleFrozenHotkeys::::contains_key(&seller_hotkey), - Error::::HotkeyLockedDuringSale - ); - - let id = Self::get_next_sale_offer_id()?; - - SubnetSaleOffers::::insert( - netuid, - SubnetSaleOffer { - id, - netuid, - seller_coldkey: seller_coldkey.clone(), - seller_hotkey: seller_hotkey.clone(), - authorized_buyer: authorized_buyer.clone(), - price: price.into(), - created_at: frame_system::Pallet::::block_number(), - }, - ); - SubnetSaleFrozenColdkeys::::insert(&seller_coldkey, ()); - // When the seller coldkey and seller hotkey are the same account, the coldkey freeze - // already locks it (and still permits cancellation). Freezing it in the hotkey map as - // well would block cancellation, permanently locking the seller out of their own - // offer, so we skip it in that case. - if seller_hotkey != seller_coldkey { - SubnetSaleFrozenHotkeys::::insert(&seller_hotkey, ()); - } - - Self::deposit_event(Event::SubnetSaleOfferCreated { - id, - seller_coldkey, - netuid, - price, - authorized_buyer, - }); - - Ok(()) - } - - /// Mint the next unique sale offer id, incrementing the on-chain counter. - fn get_next_sale_offer_id() -> Result> { - let id = NextSubnetSaleOfferId::::get(); - let next_id = id.checked_add(1).ok_or(Error::::Overflow)?; - NextSubnetSaleOfferId::::put(next_id); - Ok(id) - } - - pub fn do_cancel_sale_offer( - maybe_seller_coldkey: Option, - netuid: NetUid, - ) -> DispatchResult { - let offer = SubnetSaleOffers::::get(netuid).ok_or(Error::::SaleOfferNotFound)?; - - // If the caller is not the seller, they are root. - if let Some(seller_coldkey) = maybe_seller_coldkey { - ensure!( - seller_coldkey == offer.seller_coldkey, - Error::::NotSubnetOwner - ); - } - - let seller_coldkey = offer.seller_coldkey.clone(); - SubnetSaleOffers::::remove(offer.netuid); - SubnetSaleFrozenColdkeys::::remove(&offer.seller_coldkey); - SubnetSaleFrozenHotkeys::::remove(&offer.seller_hotkey); - - Self::deposit_event(Event::SubnetSaleOfferCancelled { - id: offer.id, - seller_coldkey, - netuid, - }); - - Ok(()) - } -} diff --git a/pallets/subtensor/src/swap/swap_hotkey.rs b/pallets/subtensor/src/swap/swap_hotkey.rs index 187dafef4e..b4fb7336f0 100644 --- a/pallets/subtensor/src/swap/swap_hotkey.rs +++ b/pallets/subtensor/src/swap/swap_hotkey.rs @@ -123,14 +123,6 @@ impl Pallet { }); } - // 5.2 Ensure the old hotkey is not frozen by an active subnet sale offer. - // Swapping it would rewrite SubnetOwnerHotkey while the sale freeze maps still - // reference the old hotkey, bypassing the freeze and leaving it frozen forever. - ensure!( - !SubnetSaleFrozenHotkeys::::contains_key(old_hotkey), - Error::::HotkeyLockedDuringSale - ); - // 6. Get the current block number let block: u64 = Self::get_current_block_as_u64(); diff --git a/pallets/subtensor/src/tests/mock.rs b/pallets/subtensor/src/tests/mock.rs index 15f55e2b24..d9ab976293 100644 --- a/pallets/subtensor/src/tests/mock.rs +++ b/pallets/subtensor/src/tests/mock.rs @@ -197,7 +197,6 @@ impl system::Config for Test { type Block = Block; type DispatchExtension = ( crate::CheckColdkeySwap, - crate::CheckSubnetSale, crate::CheckWeights, crate::CheckRateLimits, crate::CheckDelegateTake, diff --git a/pallets/subtensor/src/tests/mod.rs b/pallets/subtensor/src/tests/mod.rs index f6d665023b..bbf2c4404a 100644 --- a/pallets/subtensor/src/tests/mod.rs +++ b/pallets/subtensor/src/tests/mod.rs @@ -28,7 +28,6 @@ mod neuron_info; mod recycle_alpha; mod registration; mod remove_data_tests; -mod sale_offer; mod serving; mod staking; mod staking2; diff --git a/pallets/subtensor/src/tests/sale_offer.rs b/pallets/subtensor/src/tests/sale_offer.rs deleted file mode 100644 index 52e36f9587..0000000000 --- a/pallets/subtensor/src/tests/sale_offer.rs +++ /dev/null @@ -1,421 +0,0 @@ -#![allow(clippy::unwrap_used)] - -use super::mock::*; -use crate::*; -use frame_support::{assert_err, assert_noop, assert_ok}; -use sp_core::U256; -use subtensor_runtime_common::{NetUid, TaoBalance}; - -const SELLER: u64 = 1; -const OWNER_HOTKEY: u64 = 2; -const BUYER: u64 = 3; - -fn sale_fixture() -> (NetUid, U256, U256, U256) { - let seller = U256::from(SELLER); - let owner_hotkey = U256::from(OWNER_HOTKEY); - let buyer = U256::from(BUYER); - let netuid = add_dynamic_network(&owner_hotkey, &seller); - - (netuid, seller, owner_hotkey, buyer) -} - -fn create_offer(netuid: NetUid, seller: U256, buyer: Option) { - assert_ok!(SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - TaoBalance::from(1_000_000_000_u64), - buyer, - )); -} - -#[test] -fn create_sale_offer_stores_offer_and_freezes_keys() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, owner_hotkey, buyer) = sale_fixture(); - let price = TaoBalance::from(1_000_000_000_u64); - - assert_ok!(SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - price, - Some(buyer), - )); - - let offer = SubnetSaleOffers::::get(netuid).unwrap(); - assert_eq!(offer.id, 0); - assert_eq!(offer.netuid, netuid); - assert_eq!(offer.seller_coldkey, seller); - assert_eq!(offer.seller_hotkey, owner_hotkey); - assert_eq!(offer.authorized_buyer, Some(buyer)); - assert_eq!(offer.price, price); - assert_eq!(offer.created_at, System::block_number()); - assert!(SubnetSaleFrozenColdkeys::::contains_key(seller)); - assert!(SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); - assert_eq!( - last_event(), - RuntimeEvent::SubtensorModule(Event::SubnetSaleOfferCreated { - id: 0, - seller_coldkey: seller, - netuid, - price, - authorized_buyer: Some(buyer), - }) - ); - }); -} - -#[test] -fn create_sale_offer_assigns_incrementing_ids() { - new_test_ext(1).execute_with(|| { - let (first_netuid, seller, _first_owner_hotkey, buyer) = sale_fixture(); - let second_owner_hotkey = U256::from(20); - let second_seller = U256::from(21); - let second_netuid = add_dynamic_network(&second_owner_hotkey, &second_seller); - - create_offer(first_netuid, seller, Some(buyer)); - create_offer(second_netuid, second_seller, None); - - assert_eq!(SubnetSaleOffers::::get(first_netuid).unwrap().id, 0); - assert_eq!(SubnetSaleOffers::::get(second_netuid).unwrap().id, 1); - // The counter keeps advancing; ids are never reused. - assert_eq!(NextSubnetSaleOfferId::::get(), 2); - }); -} - -#[test] -fn create_sale_offer_allows_open_offer() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, _owner_hotkey, _buyer) = sale_fixture(); - - assert_ok!(SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - TaoBalance::from(1_000_000_000_u64), - None, - )); - - let offer = SubnetSaleOffers::::get(netuid).unwrap(); - assert_eq!(offer.authorized_buyer, None); - }); -} - -#[test] -fn create_sale_offer_rejects_zero_price() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, _owner_hotkey, buyer) = sale_fixture(); - - assert_noop!( - SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - TaoBalance::from(0_u64), - Some(buyer), - ), - Error::::AmountTooLow, - ); - }); -} - -#[test] -fn create_sale_offer_rejects_missing_subnet() { - new_test_ext(1).execute_with(|| { - let seller = U256::from(SELLER); - let missing_netuid = NetUid::from(99); - - assert_noop!( - SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(seller), - missing_netuid, - TaoBalance::from(1_000_000_000_u64), - None, - ), - Error::::SubnetNotExists, - ); - }); -} - -#[test] -fn create_sale_offer_rejects_non_owner() { - new_test_ext(1).execute_with(|| { - let (netuid, _seller, _owner_hotkey, buyer) = sale_fixture(); - let not_owner = U256::from(99); - - assert_noop!( - SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(not_owner), - netuid, - TaoBalance::from(1_000_000_000_u64), - Some(buyer), - ), - Error::::NotSubnetOwner, - ); - }); -} - -#[test] -fn create_sale_offer_rejects_existing_offer() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, _owner_hotkey, buyer) = sale_fixture(); - create_offer(netuid, seller, Some(buyer)); - - assert_noop!( - SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - TaoBalance::from(2_000_000_000_u64), - None, - ), - Error::::SaleOfferAlreadyExists, - ); - }); -} - -#[test] -fn create_sale_offer_rejects_frozen_seller() { - new_test_ext(1).execute_with(|| { - let (first_netuid, seller, _first_owner_hotkey, buyer) = sale_fixture(); - let second_owner_hotkey = U256::from(20); - let second_netuid = add_dynamic_network(&second_owner_hotkey, &seller); - create_offer(first_netuid, seller, Some(buyer)); - - assert_noop!( - SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(seller), - second_netuid, - TaoBalance::from(2_000_000_000_u64), - None, - ), - Error::::ColdkeyLockedDuringSale, - ); - }); -} - -#[test] -fn create_sale_offer_rejects_missing_owner_hotkey() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, _owner_hotkey, buyer) = sale_fixture(); - SubnetOwnerHotkey::::remove(netuid); - - assert_noop!( - SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - TaoBalance::from(1_000_000_000_u64), - Some(buyer), - ), - Error::::HotKeyAccountNotExists, - ); - }); -} - -#[test] -fn create_sale_offer_allows_owner_hotkey_same_as_seller() { - new_test_ext(1).execute_with(|| { - let seller = U256::from(SELLER); - let buyer = U256::from(BUYER); - // Subnet whose owner coldkey and owner hotkey are the same account. - let netuid = add_dynamic_network(&seller, &seller); - - assert_ok!(SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - TaoBalance::from(1_000_000_000_u64), - Some(buyer), - )); - - // Only the coldkey is frozen: freezing the same account in the hotkey map as well - // would block the seller from ever cancelling their own offer. - assert!(SubnetSaleFrozenColdkeys::::contains_key(seller)); - assert!(!SubnetSaleFrozenHotkeys::::contains_key(seller)); - - // The seller can still cancel and fully release the lock. - assert_ok!(SubtensorModule::cancel_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - )); - assert!(!SubnetSaleOffers::::contains_key(netuid)); - assert!(!SubnetSaleFrozenColdkeys::::contains_key(seller)); - }); -} - -#[test] -fn create_sale_offer_rejects_leased_subnet() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, _owner_hotkey, buyer) = sale_fixture(); - SubnetUidToLeaseId::::insert(netuid, 0); - - assert_noop!( - SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - TaoBalance::from(1_000_000_000_u64), - Some(buyer), - ), - Error::::SubnetIsLeased, - ); - }); -} - -#[test] -fn create_sale_offer_rejects_frozen_owner_hotkey() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, owner_hotkey, buyer) = sale_fixture(); - SubnetSaleFrozenHotkeys::::insert(owner_hotkey, ()); - - assert_noop!( - SubtensorModule::create_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - TaoBalance::from(1_000_000_000_u64), - Some(buyer), - ), - Error::::HotkeyLockedDuringSale, - ); - }); -} - -#[test] -fn cancel_sale_offer_unfreezes_keys() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, owner_hotkey, buyer) = sale_fixture(); - create_offer(netuid, seller, Some(buyer)); - - assert_ok!(SubtensorModule::cancel_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - )); - - assert!(!SubnetSaleOffers::::contains_key(netuid)); - assert!(!SubnetSaleFrozenColdkeys::::contains_key(seller)); - assert!(!SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); - assert_eq!( - last_event(), - RuntimeEvent::SubtensorModule(Event::SubnetSaleOfferCancelled { - id: 0, - seller_coldkey: seller, - netuid - }) - ); - }); -} - -#[test] -fn cancel_sale_offer_root_unfreezes_keys() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, owner_hotkey, buyer) = sale_fixture(); - create_offer(netuid, seller, Some(buyer)); - - assert_ok!(SubtensorModule::cancel_sale_offer( - RuntimeOrigin::root(), - netuid, - )); - - assert!(!SubnetSaleOffers::::contains_key(netuid)); - assert!(!SubnetSaleFrozenColdkeys::::contains_key(seller)); - assert!(!SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); - assert_eq!( - last_event(), - RuntimeEvent::SubtensorModule(Event::SubnetSaleOfferCancelled { - id: 0, - seller_coldkey: seller, - netuid - }) - ); - }); -} - -#[test] -fn cancel_sale_offer_rejects_missing_offer() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, _owner_hotkey, _buyer) = sale_fixture(); - - assert_noop!( - SubtensorModule::cancel_sale_offer(RuntimeOrigin::signed(seller), netuid), - Error::::SaleOfferNotFound, - ); - }); -} - -#[test] -fn cancel_sale_offer_rejects_non_seller() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, _owner_hotkey, buyer) = sale_fixture(); - let not_seller = U256::from(99); - create_offer(netuid, seller, Some(buyer)); - - assert_noop!( - SubtensorModule::cancel_sale_offer(RuntimeOrigin::signed(not_seller), netuid), - Error::::NotSubnetOwner, - ); - }); -} - -#[test] -fn cancel_sale_offer_unfreezes_original_hotkey_after_owner_hotkey_change() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, owner_hotkey, buyer) = sale_fixture(); - create_offer(netuid, seller, Some(buyer)); - - // Simulate the subnet owner hotkey changing mid-sale (only root can do this - // while the seller is frozen). - let new_owner_hotkey = U256::from(99); - SubnetOwnerHotkey::::insert(netuid, new_owner_hotkey); - - assert_ok!(SubtensorModule::cancel_sale_offer( - RuntimeOrigin::signed(seller), - netuid, - )); - - // The hotkey frozen at offer creation is unfrozen, not the current one. - assert!(!SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); - assert!(!SubnetSaleFrozenHotkeys::::contains_key( - new_owner_hotkey - )); - assert!(!SubnetSaleFrozenColdkeys::::contains_key(seller)); - }); -} - -#[test] -fn swap_hotkey_rejects_sale_frozen_owner_hotkey() { - new_test_ext(1).execute_with(|| { - // The subnet owner hotkey is owned by a coldkey other than the seller, so the - // sale freeze on the seller coldkey alone would not stop the owner from - // swapping the hotkey out from under the offer. - let (netuid, seller, _owner_hotkey, buyer) = sale_fixture(); - let other_coldkey = U256::from(50); - let other_hotkey = U256::from(51); - let new_hotkey = U256::from(52); - register_ok_neuron(netuid, other_hotkey, other_coldkey, 0); - SubnetOwnerHotkey::::insert(netuid, other_hotkey); - create_offer(netuid, seller, Some(buyer)); - assert!(SubnetSaleFrozenHotkeys::::contains_key(other_hotkey)); - - assert_err!( - SubtensorModule::do_swap_hotkey( - RuntimeOrigin::signed(other_coldkey), - &other_hotkey, - &new_hotkey, - None, - false, - ), - Error::::HotkeyLockedDuringSale - ); - }); -} - -#[test] -fn remove_network_cleans_sale_offer() { - new_test_ext(1).execute_with(|| { - let (netuid, seller, owner_hotkey, buyer) = sale_fixture(); - create_offer(netuid, seller, Some(buyer)); - - assert_ok!(SubtensorModule::root_dissolve_network( - RuntimeOrigin::root(), - netuid, - )); - - assert!(!SubnetSaleOffers::::contains_key(netuid)); - assert!(!SubnetSaleFrozenColdkeys::::contains_key(seller)); - assert!(!SubnetSaleFrozenHotkeys::::contains_key(owner_hotkey)); - }); -} diff --git a/pallets/subtensor/src/weights.rs b/pallets/subtensor/src/weights.rs index 6165719b16..dcae372b81 100644 --- a/pallets/subtensor/src/weights.rs +++ b/pallets/subtensor/src/weights.rs @@ -84,8 +84,6 @@ pub trait WeightInfo { fn remove_stake_full_limit() -> Weight; fn register_leased_network(k: u32, ) -> Weight; fn terminate_lease(k: u32, ) -> Weight; - fn create_sale_offer() -> Weight; - fn cancel_sale_offer() -> Weight; fn update_symbol() -> Weight; fn commit_timelocked_weights() -> Weight; fn set_coldkey_auto_stake_hotkey() -> Weight; @@ -101,7 +99,6 @@ pub trait WeightInfo { fn associate_evm_key() -> Weight; fn trigger_epoch() -> Weight; fn check_coldkey_swap_extension() -> Weight; - fn check_subnet_sale_extension() -> Weight; fn check_weights_extension() -> Weight; fn check_rate_limits_extension() -> Weight; fn check_delegate_take_extension() -> Weight; @@ -2633,27 +2630,6 @@ impl WeightInfo for SubstrateWeight { .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(k.into()))) .saturating_add(Weight::from_parts(0, 2529).saturating_mul(k.into())) } - /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) - /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) - /// Storage: `SubtensorModule::SubnetUidToLeaseId` (r:1 w:0) - /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:1) - /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:1) - /// Storage: `SubtensorModule::NextSubnetSaleOfferId` (r:1 w:1) - fn create_sale_offer() -> Weight { - Weight::from_parts(34_762_000, 4508) - .saturating_add(T::DbWeight::get().reads(8_u64)) - .saturating_add(T::DbWeight::get().writes(4_u64)) - } - /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) - fn cancel_sale_offer() -> Weight { - Weight::from_parts(12_969_000, 4237) - .saturating_add(T::DbWeight::get().reads(1_u64)) - .saturating_add(T::DbWeight::get().writes(3_u64)) - } /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) @@ -3032,12 +3008,6 @@ impl WeightInfo for SubstrateWeight { Weight::from_parts(10_000_000, 4198) .saturating_add(T::DbWeight::get().reads(2_u64)) } - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - fn check_subnet_sale_extension() -> Weight { - Weight::from_parts(8_342_000, 4028) - .saturating_add(T::DbWeight::get().reads(2_u64)) - } /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TaoWeight` (r:1 w:0) @@ -3458,17 +3428,14 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::TotalStake` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:0) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) fn dissolve_network() -> Weight { // Proof Size summary in bytes: // Measured: `1080` // Estimated: `4545` // Minimum execution time: 45_000_000 picoseconds. Weight::from_parts(52_000_000, 4545) - .saturating_add(T::DbWeight::get().reads(8_u64)) - .saturating_add(T::DbWeight::get().writes(9_u64)) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:1) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) @@ -3484,17 +3451,14 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SubtensorModule::TotalStake` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:0) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) fn root_dissolve_network() -> Weight { // Proof Size summary in bytes: // Measured: `1080` // Estimated: `4545` // Minimum execution time: 43_000_000 picoseconds. Weight::from_parts(51_000_000, 4545) - .saturating_add(T::DbWeight::get().reads(8_u64)) - .saturating_add(T::DbWeight::get().writes(9_u64)) + .saturating_add(T::DbWeight::get().reads(7_u64)) + .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `SubtensorModule::TransactionKeyLastBlock` (r:1 w:1) /// Proof: `SubtensorModule::TransactionKeyLastBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) @@ -6280,27 +6244,6 @@ impl WeightInfo for () { .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(k.into()))) .saturating_add(Weight::from_parts(0, 2529).saturating_mul(k.into())) } - /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) - /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) - /// Storage: `SubtensorModule::SubnetUidToLeaseId` (r:1 w:0) - /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:1) - /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:1) - /// Storage: `SubtensorModule::NextSubnetSaleOfferId` (r:1 w:1) - fn create_sale_offer() -> Weight { - Weight::from_parts(34_762_000, 4508) - .saturating_add(RocksDbWeight::get().reads(8_u64)) - .saturating_add(RocksDbWeight::get().writes(4_u64)) - } - /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) - fn cancel_sale_offer() -> Weight { - Weight::from_parts(12_969_000, 4237) - .saturating_add(RocksDbWeight::get().reads(1_u64)) - .saturating_add(RocksDbWeight::get().writes(3_u64)) - } /// Storage: `SubtensorModule::SubnetOwner` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwner` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:0) @@ -6679,12 +6622,6 @@ impl WeightInfo for () { Weight::from_parts(10_000_000, 4198) .saturating_add(RocksDbWeight::get().reads(2_u64)) } - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - fn check_subnet_sale_extension() -> Weight { - Weight::from_parts(8_342_000, 4028) - .saturating_add(RocksDbWeight::get().reads(2_u64)) - } /// Storage: `SubtensorModule::SubnetOwnerHotkey` (r:1 w:0) /// Proof: `SubtensorModule::SubnetOwnerHotkey` (`max_values`: None, `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::TaoWeight` (r:1 w:0) @@ -7105,17 +7042,14 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::TotalStake` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:0) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) fn dissolve_network() -> Weight { // Proof Size summary in bytes: // Measured: `1080` // Estimated: `4545` // Minimum execution time: 45_000_000 picoseconds. Weight::from_parts(52_000_000, 4545) - .saturating_add(RocksDbWeight::get().reads(8_u64)) - .saturating_add(RocksDbWeight::get().writes(9_u64)) + .saturating_add(RocksDbWeight::get().reads(7_u64)) + .saturating_add(RocksDbWeight::get().writes(6_u64)) } /// Storage: `SubtensorModule::NetworksAdded` (r:1 w:1) /// Proof: `SubtensorModule::NetworksAdded` (`max_values`: None, `max_size`: None, mode: `Measured`) @@ -7131,17 +7065,14 @@ impl WeightInfo for () { /// Proof: `SubtensorModule::TotalStake` (`max_values`: Some(1), `max_size`: None, mode: `Measured`) /// Storage: `SubtensorModule::SubnetTAO` (r:1 w:0) /// Proof: `SubtensorModule::SubnetTAO` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleOffers` (r:1 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:0 w:1) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:0 w:1) fn root_dissolve_network() -> Weight { // Proof Size summary in bytes: // Measured: `1080` // Estimated: `4545` // Minimum execution time: 43_000_000 picoseconds. Weight::from_parts(51_000_000, 4545) - .saturating_add(RocksDbWeight::get().reads(8_u64)) - .saturating_add(RocksDbWeight::get().writes(9_u64)) + .saturating_add(RocksDbWeight::get().reads(7_u64)) + .saturating_add(RocksDbWeight::get().writes(6_u64)) } /// Storage: `SubtensorModule::TransactionKeyLastBlock` (r:1 w:1) /// Proof: `SubtensorModule::TransactionKeyLastBlock` (`max_values`: None, `max_size`: None, mode: `Measured`) diff --git a/pallets/utility/src/weights.rs b/pallets/utility/src/weights.rs index 44d3c9d4e5..9b2801b6ea 100644 --- a/pallets/utility/src/weights.rs +++ b/pallets/utility/src/weights.rs @@ -53,10 +53,6 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { // Proof Size summary in bytes: @@ -72,10 +68,6 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn as_derivative() -> Weight { // Proof Size summary in bytes: // Measured: `518` @@ -88,10 +80,6 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { // Proof Size summary in bytes: @@ -114,10 +102,6 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { // Proof Size summary in bytes: @@ -140,10 +124,6 @@ impl WeightInfo for SubstrateWeight { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn if_else() -> Weight { // Proof Size summary in bytes: // Measured: `518` @@ -167,10 +147,6 @@ impl WeightInfo for () { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 1000]`. fn batch(c: u32, ) -> Weight { // Proof Size summary in bytes: @@ -186,10 +162,6 @@ impl WeightInfo for () { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn as_derivative() -> Weight { // Proof Size summary in bytes: // Measured: `518` @@ -202,10 +174,6 @@ impl WeightInfo for () { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 1000]`. fn batch_all(c: u32, ) -> Weight { // Proof Size summary in bytes: @@ -228,10 +196,6 @@ impl WeightInfo for () { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) /// The range of component `c` is `[0, 1000]`. fn force_batch(c: u32, ) -> Weight { // Proof Size summary in bytes: @@ -254,10 +218,6 @@ impl WeightInfo for () { /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `SubtensorModule::ColdkeySwapAnnouncements` (r:1 w:0) /// Proof: `SubtensorModule::ColdkeySwapAnnouncements` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenColdkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenColdkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) - /// Storage: `SubtensorModule::SubnetSaleFrozenHotkeys` (r:1 w:0) - /// Proof: `SubtensorModule::SubnetSaleFrozenHotkeys` (`max_values`: None, `max_size`: None, mode: `Measured`) fn if_else() -> Weight { // Proof Size summary in bytes: // Measured: `518` diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 6cfd49336b..545d4d700d 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -350,7 +350,6 @@ impl frame_system::Config for Runtime { type ExtensionsWeightInfo = frame_system::SubstrateExtensionsWeight; type DispatchExtension = ( pallet_subtensor::CheckColdkeySwap, - pallet_subtensor::CheckSubnetSale, pallet_subtensor::CheckWeights, pallet_subtensor::CheckRateLimits, pallet_subtensor::CheckDelegateTake, diff --git a/runtime/src/proxy_filters/call_groups.rs b/runtime/src/proxy_filters/call_groups.rs index 6e296b6614..213b9be332 100644 --- a/runtime/src/proxy_filters/call_groups.rs +++ b/runtime/src/proxy_filters/call_groups.rs @@ -438,7 +438,7 @@ call_filter_group!( // Residual pallet-subtensor calls that no proxy needs to grant on their own: // weights, serving, delegate-take, alpha lock/burn/preferences, network // registration, childkey admin, account association, tempo control, voting -// power, root-claim admin, lease teardown, and sale-offer cancellation. +// power, root-claim admin, and lease teardown. call_filter_group!( SubtensorCommonCalls, [ @@ -479,7 +479,6 @@ call_filter_group!( RuntimeCall::SubtensorModule(SubtensorCall::sudo_set_min_childkey_take), RuntimeCall::SubtensorModule(SubtensorCall::sudo_set_max_childkey_take), RuntimeCall::SubtensorModule(SubtensorCall::terminate_lease), - RuntimeCall::SubtensorModule(SubtensorCall::cancel_sale_offer), RuntimeCall::SubtensorModule(SubtensorCall::trigger_epoch), RuntimeCall::SubtensorModule(SubtensorCall::sudo_set_num_root_claims), RuntimeCall::SubtensorModule(SubtensorCall::sudo_set_root_claim_threshold), @@ -489,16 +488,6 @@ call_filter_group!( ] ); -// Listing an owned subnet for sale: an ownership/economic disposal (the offer's -// price/buyer become a pre-authorized sale once finalization lands), so it is -// granted by no proxy allowlist — only `Any` or the coldkey directly. -call_filter_group!( - SubnetSaleCalls, - [RuntimeCall::SubtensorModule( - SubtensorCall::create_sale_offer - ),] -); - // Subnet parameters a subnet owner may set directly. This includes deprecated // Subtensor compatibility calls plus AdminUtils calls guarded by // `ensure_sn_owner_or_root`, as opposed to the root-only `RootConfigCalls`. @@ -702,7 +691,6 @@ type SubtensorSplitCalls = ( SubnetIdentityCalls, SubnetActivationCalls, SubtensorCommonCalls, - SubnetSaleCalls, ); // AdminUtils calls and deprecated owner-call shims, split for owner proxies. diff --git a/runtime/src/proxy_filters/mod.rs b/runtime/src/proxy_filters/mod.rs index 725ed2ccc4..d0a356770d 100644 --- a/runtime/src/proxy_filters/mod.rs +++ b/runtime/src/proxy_filters/mod.rs @@ -309,7 +309,6 @@ mod tests { let denied = &(&group_calls::() | &group_calls::()) | &(&group_calls::() | &group_calls::()); - let denied = &denied | &group_calls::(); assert_eq!( allowed_calls(ProxyType::NonTransfer), &all_runtime_calls() - &denied @@ -324,7 +323,6 @@ mod tests { | &(&(&group_calls::() | &group_calls::()) | &(&group_calls::() | &group_calls::())); - let denied = &denied | &group_calls::(); assert_eq!( allowed_calls(ProxyType::NonFungible), &all_runtime_calls() - &denied @@ -336,7 +334,6 @@ mod tests { let denied = &(&(&group_calls::() | &group_calls::()) | &(&group_calls::() | &group_calls::())) | &group_calls::(); - let denied = &denied | &group_calls::(); assert_eq!( allowed_calls(ProxyType::NonCritical), &all_runtime_calls() - &denied @@ -543,36 +540,6 @@ mod tests { ); } - // Creating a sale offer is a disposal of the subnet, so no proxy but `Any` - // may do it; cancellation stays broadly available. - #[test] - fn sale_offer_creation_is_any_only() { - let create = "SubtensorModule::create_sale_offer"; - let cancel = "SubtensorModule::cancel_sale_offer"; - - for proxy_type in all_proxy_types() { - let allowed = allowed_calls(proxy_type); - if proxy_type == ProxyType::Any { - assert!(allowed.contains(create)); - } else { - assert!( - !allowed.contains(create), - "{:?} must not be able to create a sale offer", - proxy_type - ); - } - } - - // The broad proxies can still cancel an offer. - for proxy_type in [ - ProxyType::NonTransfer, - ProxyType::NonFungible, - ProxyType::NonCritical, - ] { - assert!(allowed_calls(proxy_type).contains(cancel)); - } - } - // The SmallTransfer / SudoUncheckedSetCode metadata must carry their // amount / nested-call constraints. #[test] diff --git a/website/apps/bittensor-website/public/catalog/errors.json b/website/apps/bittensor-website/public/catalog/errors.json index d5907248dd..bc4a790569 100644 --- a/website/apps/bittensor-website/public/catalog/errors.json +++ b/website/apps/bittensor-website/public/catalog/errors.json @@ -123,8 +123,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 343, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L343", + "line": 333, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L333", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -141,8 +141,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 321, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L321", + "line": 311, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L311", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -159,8 +159,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 331, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L331", + "line": 321, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L321", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -195,8 +195,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 303, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L303", + "line": 293, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L293", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -213,8 +213,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 253, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L253", + "line": 243, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L243", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -429,8 +429,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 337, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L337", + "line": 327, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L327", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -492,8 +492,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 249, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L249", + "line": 239, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L239", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -636,8 +636,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 271, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L271", + "line": 261, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L261", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -699,8 +699,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 323, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L323", + "line": 313, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L313", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -798,8 +798,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 283, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L283", + "line": 273, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L273", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -879,8 +879,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 354, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L354", + "line": 344, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L344", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -897,8 +897,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 358, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L358", + "line": 348, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L348", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -933,8 +933,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 305, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L305", + "line": 295, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L295", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -969,8 +969,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 309, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L309", + "line": 299, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L299", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -987,8 +987,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 307, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L307", + "line": 297, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L297", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1367,8 +1367,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 297, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L297", + "line": 287, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L287", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" }, { @@ -1399,8 +1399,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 311, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L311", + "line": 301, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L301", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1525,8 +1525,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 341, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L341", + "line": 331, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L331", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1552,8 +1552,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 334, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L334", + "line": 324, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L324", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1570,8 +1570,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 273, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L273", + "line": 263, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L263", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1588,8 +1588,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 275, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L275", + "line": 265, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L265", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1633,8 +1633,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 251, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L251", + "line": 241, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L241", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -1912,8 +1912,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 259, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L259", + "line": 249, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L249", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2002,8 +2002,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 349, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L349", + "line": 339, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L339", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2091,8 +2091,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 317, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L317", + "line": 307, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L307", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2388,8 +2388,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 285, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L285", + "line": 275, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L275", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2478,8 +2478,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 261, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L261", + "line": 251, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L251", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2496,8 +2496,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 287, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L287", + "line": 277, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L277", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2588,8 +2588,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 289, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L289", + "line": 279, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L279", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2625,8 +2625,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 267, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L267", + "line": 257, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L257", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" }, { @@ -2650,8 +2650,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 295, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L295", + "line": 285, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L285", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2848,8 +2848,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 315, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L315", + "line": 305, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L305", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -2866,8 +2866,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 345, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L345", + "line": 335, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L335", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -3225,8 +3225,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 301, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L301", + "line": 291, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L291", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -3378,8 +3378,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 319, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L319", + "line": 309, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L309", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -3966,8 +3966,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 247, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L247", + "line": 237, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L237", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" }, { @@ -4189,8 +4189,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 313, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L313", + "line": 303, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L303", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4315,8 +4315,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 263, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L263", + "line": 253, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L253", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4333,8 +4333,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 265, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L265", + "line": 255, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L255", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4405,8 +4405,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 277, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L277", + "line": 267, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L267", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4594,8 +4594,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 347, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L347", + "line": 337, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L337", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4675,8 +4675,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 299, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L299", + "line": 289, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L289", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4711,8 +4711,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 269, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L269", + "line": 259, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L259", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4809,8 +4809,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 257, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L257", + "line": 247, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L247", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4827,8 +4827,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 255, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L255", + "line": 245, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L245", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -4854,8 +4854,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 329, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L329", + "line": 319, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L319", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -5089,8 +5089,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 291, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L291", + "line": 281, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L281", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -5188,8 +5188,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 281, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L281", + "line": 271, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L271", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -5242,8 +5242,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 279, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L279", + "line": 269, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L269", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -5405,8 +5405,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 325, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L325", + "line": 315, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L315", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -5513,8 +5513,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 293, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L293", + "line": 283, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L283", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] @@ -5531,8 +5531,8 @@ { "pallet": "SubtensorModule", "path": "pallets/subtensor/src/macros/errors.rs", - "line": 327, - "url": "/code/pallets/subtensor/src/macros/errors.rs#L327", + "line": 317, + "url": "/code/pallets/subtensor/src/macros/errors.rs#L317", "raw_url": "/code/raw/pallets/subtensor/src/macros/errors.rs" } ] diff --git a/website/apps/bittensor-website/public/catalog/intents.json b/website/apps/bittensor-website/public/catalog/intents.json index 432c523211..c50db921d4 100644 --- a/website/apps/bittensor-website/public/catalog/intents.json +++ b/website/apps/bittensor-website/public/catalog/intents.json @@ -56,9 +56,9 @@ "pallet": "SubtensorModule", "call": "add_collateral", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2460, - "end_line": 2468, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2458-L2468", + "line": 2457, + "end_line": 2465, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2455-L2465", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -188,9 +188,9 @@ "pallet": "SubtensorModule", "call": "add_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1402, - "end_line": 1419, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1400-L1419", + "line": 1399, + "end_line": 1416, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1397-L1416", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -258,9 +258,9 @@ "pallet": "SubtensorModule", "call": "add_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1402, - "end_line": 1419, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1400-L1419", + "line": 1399, + "end_line": 1416, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1397-L1416", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -300,9 +300,9 @@ "pallet": "SubtensorModule", "call": "announce_coldkey_swap", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1996, - "end_line": 2022, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1994-L2022", + "line": 1993, + "end_line": 2019, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1991-L2019", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -357,9 +357,9 @@ "pallet": "SubtensorModule", "call": "associate_evm_key", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1588, - "end_line": 1596, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1582-L1596", + "line": 1585, + "end_line": 1593, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1579-L1593", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -397,9 +397,9 @@ "pallet": "SubtensorModule", "call": "try_associate_hotkey", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1530, - "end_line": 1536, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1528-L1536", + "line": 1527, + "end_line": 1533, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1525-L1533", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -530,9 +530,9 @@ "pallet": "SubtensorModule", "call": "claim_root", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1900, - "end_line": 1916, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1898-L1916", + "line": 1897, + "end_line": 1913, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1895-L1913", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -565,9 +565,9 @@ "pallet": "SubtensorModule", "call": "clear_coldkey_swap_announcement", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2195, - "end_line": 2210, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2193-L2210", + "line": 2192, + "end_line": 2207, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2190-L2207", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -633,9 +633,9 @@ "pallet": "SubtensorModule", "call": "commit_timelocked_mechanism_weights", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1861, - "end_line": 1877, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1859-L1877", + "line": 1858, + "end_line": 1874, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1856-L1874", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -914,9 +914,9 @@ "pallet": "SubtensorModule", "call": "dispute_coldkey_swap", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2065, - "end_line": 2082, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2063-L2082", + "line": 2062, + "end_line": 2079, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2060-L2079", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1318,9 +1318,9 @@ "pallet": "SubtensorModule", "call": "lock_stake", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2267, - "end_line": 2275, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2265-L2275", + "line": 2264, + "end_line": 2272, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2262-L2272", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1365,9 +1365,9 @@ "pallet": "SubtensorModule", "call": "move_lock", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2291, - "end_line": 2298, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2289-L2298", + "line": 2288, + "end_line": 2295, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2286-L2295", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1436,9 +1436,9 @@ "pallet": "SubtensorModule", "call": "move_stake", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1266, - "end_line": 1282, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1264-L1282", + "line": 1263, + "end_line": 1279, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1261-L1279", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1700,9 +1700,9 @@ "pallet": "SubtensorModule", "call": "register_leased_network", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1682, - "end_line": 1688, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1680-L1688", + "line": 1679, + "end_line": 1685, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1677-L1685", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1740,9 +1740,9 @@ "pallet": "SubtensorModule", "call": "register_network", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1008, - "end_line": 1010, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1006-L1010", + "line": 1005, + "end_line": 1007, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1003-L1007", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1913,9 +1913,9 @@ "pallet": "SubtensorModule", "call": "remove_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1455, - "end_line": 1471, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1453-L1471", + "line": 1452, + "end_line": 1468, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1450-L1468", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1989,9 +1989,9 @@ "pallet": "SubtensorModule", "call": "remove_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1455, - "end_line": 1471, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1453-L1471", + "line": 1452, + "end_line": 1468, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1450-L1468", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -2368,9 +2368,9 @@ "pallet": "SubtensorModule", "call": "set_coldkey_auto_stake_hotkey", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1795, - "end_line": 1835, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1793-L1835", + "line": 1792, + "end_line": 1832, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1790-L1832", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -2423,9 +2423,9 @@ "pallet": "SubtensorModule", "call": "set_childkey_take", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 931, - "end_line": 941, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L929-L941", + "line": 928, + "end_line": 938, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L926-L938", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -2474,9 +2474,9 @@ "pallet": "SubtensorModule", "call": "set_children", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1088, - "end_line": 1096, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1081-L1096", + "line": 1085, + "end_line": 1093, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1078-L1093", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3041,9 +3041,9 @@ "pallet": "SubtensorModule", "call": "set_identity", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1129, - "end_line": 1149, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1127-L1149", + "line": 1126, + "end_line": 1146, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1124-L1146", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3148,9 +3148,9 @@ "pallet": "SubtensorModule", "call": "set_min_collateral", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2495, - "end_line": 2502, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2493-L2502", + "line": 2492, + "end_line": 2499, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2490-L2499", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3195,9 +3195,9 @@ "pallet": "SubtensorModule", "call": "set_perpetual_lock", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2307, - "end_line": 2314, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2305-L2314", + "line": 2304, + "end_line": 2311, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2302-L2311", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3239,9 +3239,9 @@ "pallet": "SubtensorModule", "call": "set_root_claim_type", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1927, - "end_line": 1941, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1925-L1941", + "line": 1924, + "end_line": 1938, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1922-L1938", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3368,9 +3368,9 @@ "pallet": "SubtensorModule", "call": "set_subnet_identity", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1164, - "end_line": 1188, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1162-L1188", + "line": 1161, + "end_line": 1185, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1159-L1185", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3508,9 +3508,9 @@ "pallet": "SubtensorModule", "call": "commit_timelocked_mechanism_weights", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1861, - "end_line": 1877, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1859-L1877", + "line": 1858, + "end_line": 1874, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1856-L1874", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3573,9 +3573,9 @@ "pallet": "SubtensorModule", "call": "add_stake_burn", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2179, - "end_line": 2187, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2177-L2187", + "line": 2176, + "end_line": 2184, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2174-L2184", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3615,9 +3615,9 @@ "pallet": "SubtensorModule", "call": "start_call", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1548, - "end_line": 1551, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1546-L1551", + "line": 1545, + "end_line": 1548, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1543-L1548", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3657,9 +3657,9 @@ "pallet": "SubtensorModule", "call": "swap_coldkey_announced", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2034, - "end_line": 2054, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2032-L2054", + "line": 2031, + "end_line": 2051, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2029-L2051", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3785,18 +3785,18 @@ "pallet": "SubtensorModule", "call": "swap_stake", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1352, - "end_line": 1366, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1350-L1366", + "line": 1349, + "end_line": 1363, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1347-L1363", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" }, { "pallet": "SubtensorModule", "call": "swap_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1500, - "end_line": 1518, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1498-L1518", + "line": 1497, + "end_line": 1515, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1495-L1515", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3840,9 +3840,9 @@ "pallet": "SubtensorModule", "call": "terminate_lease", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1705, - "end_line": 1711, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1703-L1711", + "line": 1702, + "end_line": 1708, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1700-L1708", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -4017,18 +4017,18 @@ "pallet": "SubtensorModule", "call": "transfer_stake", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1310, - "end_line": 1326, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1308-L1326", + "line": 1307, + "end_line": 1323, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1305-L1323", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" }, { "pallet": "SubtensorModule", "call": "transfer_stake_and_hotkey", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2402, - "end_line": 2420, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2400-L2420", + "line": 2399, + "end_line": 2417, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2397-L2417", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -4115,9 +4115,9 @@ "pallet": "SubtensorModule", "call": "unstake_all", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1221, - "end_line": 1223, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1219-L1223", + "line": 1218, + "end_line": 1220, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1216-L1220", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -4157,9 +4157,9 @@ "pallet": "SubtensorModule", "call": "unstake_all_alpha", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1245, - "end_line": 1247, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1243-L1247", + "line": 1242, + "end_line": 1244, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1240-L1244", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -4363,9 +4363,9 @@ "pallet": "SubtensorModule", "call": "update_symbol", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1730, - "end_line": 1745, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1728-L1745", + "line": 1727, + "end_line": 1742, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1725-L1742", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] diff --git a/website/apps/bittensor-website/public/catalog/reads.json b/website/apps/bittensor-website/public/catalog/reads.json index b4142b709e..ef8ee1e2e9 100644 --- a/website/apps/bittensor-website/public/catalog/reads.json +++ b/website/apps/bittensor-website/public/catalog/reads.json @@ -42,9 +42,9 @@ "container": "SwapRuntimeApi", "name": "current_alpha_price_all", "path": "runtime/src/lib.rs", - "line": 2426, - "end_line": 2436, - "url": "/code/runtime/src/lib.rs#L2426-L2436", + "line": 2425, + "end_line": 2435, + "url": "/code/runtime/src/lib.rs#L2425-L2435", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -71,8 +71,8 @@ "container": "SubtensorModule", "name": "AssociatedEvmAddress", "path": "pallets/subtensor/src/lib.rs", - "line": 2748, - "url": "/code/pallets/subtensor/src/lib.rs#L2748", + "line": 2745, + "url": "/code/pallets/subtensor/src/lib.rs#L2745", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -99,8 +99,8 @@ "container": "SubtensorModule", "name": "AutoStakeDestination", "path": "pallets/subtensor/src/lib.rs", - "line": 1567, - "url": "/code/pallets/subtensor/src/lib.rs#L1567", + "line": 1564, + "url": "/code/pallets/subtensor/src/lib.rs#L1564", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -125,8 +125,8 @@ "container": "SubtensorModule", "name": "AutoStakeDestination", "path": "pallets/subtensor/src/lib.rs", - "line": 1567, - "url": "/code/pallets/subtensor/src/lib.rs#L1567", + "line": 1564, + "url": "/code/pallets/subtensor/src/lib.rs#L1564", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -221,8 +221,8 @@ "container": "SubtensorModule", "name": "BlocksSinceLastStep", "path": "pallets/subtensor/src/lib.rs", - "line": 2097, - "url": "/code/pallets/subtensor/src/lib.rs#L2097", + "line": 2094, + "url": "/code/pallets/subtensor/src/lib.rs#L2094", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -249,8 +249,8 @@ "container": "SubtensorModule", "name": "LastUpdate", "path": "pallets/subtensor/src/lib.rs", - "line": 2480, - "url": "/code/pallets/subtensor/src/lib.rs#L2480", + "line": 2477, + "url": "/code/pallets/subtensor/src/lib.rs#L2477", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -304,8 +304,8 @@ "container": "SubtensorModule", "name": "Bonds", "path": "pallets/subtensor/src/lib.rs", - "line": 2508, - "url": "/code/pallets/subtensor/src/lib.rs#L2508", + "line": 2505, + "url": "/code/pallets/subtensor/src/lib.rs#L2505", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -330,8 +330,8 @@ "container": "SubtensorModule", "name": "Burn", "path": "pallets/subtensor/src/lib.rs", - "line": 2251, - "url": "/code/pallets/subtensor/src/lib.rs#L2251", + "line": 2248, + "url": "/code/pallets/subtensor/src/lib.rs#L2248", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -358,8 +358,8 @@ "container": "SubtensorModule", "name": "ChildKeys", "path": "pallets/subtensor/src/lib.rs", - "line": 1390, - "url": "/code/pallets/subtensor/src/lib.rs#L1390", + "line": 1387, + "url": "/code/pallets/subtensor/src/lib.rs#L1387", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -386,8 +386,8 @@ "container": "SubtensorModule", "name": "Lock", "path": "pallets/subtensor/src/lib.rs", - "line": 1690, - "url": "/code/pallets/subtensor/src/lib.rs#L1690", + "line": 1687, + "url": "/code/pallets/subtensor/src/lib.rs#L1687", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -412,8 +412,8 @@ "container": "SubtensorModule", "name": "ColdkeySwapAnnouncements", "path": "pallets/subtensor/src/lib.rs", - "line": 1602, - "url": "/code/pallets/subtensor/src/lib.rs#L1602", + "line": 1599, + "url": "/code/pallets/subtensor/src/lib.rs#L1599", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -421,8 +421,8 @@ "container": "SubtensorModule", "name": "ColdkeySwapDisputes", "path": "pallets/subtensor/src/lib.rs", - "line": 1608, - "url": "/code/pallets/subtensor/src/lib.rs#L1608", + "line": 1605, + "url": "/code/pallets/subtensor/src/lib.rs#L1605", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -462,8 +462,8 @@ "container": "SubtensorModule", "name": "CommitRevealWeightsEnabled", "path": "pallets/subtensor/src/lib.rs", - "line": 2246, - "url": "/code/pallets/subtensor/src/lib.rs#L2246", + "line": 2243, + "url": "/code/pallets/subtensor/src/lib.rs#L2243", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -632,8 +632,8 @@ "container": "SubtensorModule", "name": "Delegates", "path": "pallets/subtensor/src/lib.rs", - "line": 1360, - "url": "/code/pallets/subtensor/src/lib.rs#L1360", + "line": 1357, + "url": "/code/pallets/subtensor/src/lib.rs#L1357", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -641,8 +641,8 @@ "container": "SubtensorModule", "name": "MinDelegateTake", "path": "pallets/subtensor/src/lib.rs", - "line": 1333, - "url": "/code/pallets/subtensor/src/lib.rs#L1333", + "line": 1330, + "url": "/code/pallets/subtensor/src/lib.rs#L1330", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -650,8 +650,8 @@ "container": "SubtensorModule", "name": "MaxDelegateTake", "path": "pallets/subtensor/src/lib.rs", - "line": 1329, - "url": "/code/pallets/subtensor/src/lib.rs#L1329", + "line": 1326, + "url": "/code/pallets/subtensor/src/lib.rs#L1326", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -726,8 +726,8 @@ "container": "SubtensorModule", "name": "Difficulty", "path": "pallets/subtensor/src/lib.rs", - "line": 2255, - "url": "/code/pallets/subtensor/src/lib.rs#L2255", + "line": 2252, + "url": "/code/pallets/subtensor/src/lib.rs#L2252", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -752,8 +752,8 @@ "container": "SubtensorModule", "name": "Tempo", "path": "pallets/subtensor/src/lib.rs", - "line": 1955, - "url": "/code/pallets/subtensor/src/lib.rs#L1955", + "line": 1952, + "url": "/code/pallets/subtensor/src/lib.rs#L1952", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -761,8 +761,8 @@ "container": "SubtensorModule", "name": "LastEpochBlock", "path": "pallets/subtensor/src/lib.rs", - "line": 1980, - "url": "/code/pallets/subtensor/src/lib.rs#L1980", + "line": 1977, + "url": "/code/pallets/subtensor/src/lib.rs#L1977", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -770,8 +770,8 @@ "container": "SubtensorModule", "name": "BlocksSinceLastStep", "path": "pallets/subtensor/src/lib.rs", - "line": 2097, - "url": "/code/pallets/subtensor/src/lib.rs#L2097", + "line": 2094, + "url": "/code/pallets/subtensor/src/lib.rs#L2094", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -779,8 +779,8 @@ "container": "SubtensorModule", "name": "PendingEpochAt", "path": "pallets/subtensor/src/lib.rs", - "line": 1986, - "url": "/code/pallets/subtensor/src/lib.rs#L1986", + "line": 1983, + "url": "/code/pallets/subtensor/src/lib.rs#L1983", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -788,8 +788,8 @@ "container": "SubtensorModule", "name": "SubnetEpochIndex", "path": "pallets/subtensor/src/lib.rs", - "line": 1992, - "url": "/code/pallets/subtensor/src/lib.rs#L1992", + "line": 1989, + "url": "/code/pallets/subtensor/src/lib.rs#L1989", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -820,8 +820,8 @@ "container": "Balances", "name": "ExistentialDeposit", "path": "runtime/src/lib.rs", - "line": 477, - "url": "/code/runtime/src/lib.rs#L477", + "line": 476, + "url": "/code/runtime/src/lib.rs#L476", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -848,9 +848,9 @@ "container": "StakeInfoRuntimeApi", "name": "get_hotkey_conviction", "path": "runtime/src/lib.rs", - "line": 2339, - "end_line": 2341, - "url": "/code/runtime/src/lib.rs#L2339-L2341", + "line": 2338, + "end_line": 2340, + "url": "/code/runtime/src/lib.rs#L2338-L2340", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -875,8 +875,8 @@ "container": "SubtensorModule", "name": "Owner", "path": "pallets/subtensor/src/lib.rs", - "line": 1350, - "url": "/code/pallets/subtensor/src/lib.rs#L1350", + "line": 1347, + "url": "/code/pallets/subtensor/src/lib.rs#L1347", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -884,8 +884,8 @@ "container": "SubtensorModule", "name": "IdentitiesV2", "path": "pallets/subtensor/src/lib.rs", - "line": 2570, - "url": "/code/pallets/subtensor/src/lib.rs#L2570", + "line": 2567, + "url": "/code/pallets/subtensor/src/lib.rs#L2567", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -910,8 +910,8 @@ "container": "SubtensorModule", "name": "Owner", "path": "pallets/subtensor/src/lib.rs", - "line": 1350, - "url": "/code/pallets/subtensor/src/lib.rs#L1350", + "line": 1347, + "url": "/code/pallets/subtensor/src/lib.rs#L1347", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -936,8 +936,8 @@ "container": "SubtensorModule", "name": "IdentitiesV2", "path": "pallets/subtensor/src/lib.rs", - "line": 2570, - "url": "/code/pallets/subtensor/src/lib.rs#L2570", + "line": 2567, + "url": "/code/pallets/subtensor/src/lib.rs#L2567", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -962,8 +962,8 @@ "container": "SubtensorModule", "name": "ImmunityPeriod", "path": "pallets/subtensor/src/lib.rs", - "line": 2165, - "url": "/code/pallets/subtensor/src/lib.rs#L2165", + "line": 2162, + "url": "/code/pallets/subtensor/src/lib.rs#L2162", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1026,8 +1026,8 @@ "container": "SubtensorModule", "name": "SubnetLeases", "path": "pallets/subtensor/src/lib.rs", - "line": 2766, - "url": "/code/pallets/subtensor/src/lib.rs#L2766", + "line": 2763, + "url": "/code/pallets/subtensor/src/lib.rs#L2763", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1048,8 +1048,8 @@ "container": "SubtensorModule", "name": "SubnetLeases", "path": "pallets/subtensor/src/lib.rs", - "line": 2766, - "url": "/code/pallets/subtensor/src/lib.rs#L2766", + "line": 2763, + "url": "/code/pallets/subtensor/src/lib.rs#L2763", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1074,8 +1074,8 @@ "container": "SubtensorModule", "name": "Lock", "path": "pallets/subtensor/src/lib.rs", - "line": 1690, - "url": "/code/pallets/subtensor/src/lib.rs#L1690", + "line": 1687, + "url": "/code/pallets/subtensor/src/lib.rs#L1687", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1100,8 +1100,8 @@ "container": "SubtensorModule", "name": "MaxWeightsLimit", "path": "pallets/subtensor/src/lib.rs", - "line": 2181, - "url": "/code/pallets/subtensor/src/lib.rs#L2181", + "line": 2178, + "url": "/code/pallets/subtensor/src/lib.rs#L2178", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1126,8 +1126,8 @@ "container": "SubtensorModule", "name": "MechanismCountCurrent", "path": "pallets/subtensor/src/lib.rs", - "line": 2863, - "url": "/code/pallets/subtensor/src/lib.rs#L2863", + "line": 2837, + "url": "/code/pallets/subtensor/src/lib.rs#L2837", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1152,8 +1152,8 @@ "container": "SubtensorModule", "name": "MechanismEmissionSplit", "path": "pallets/subtensor/src/lib.rs", - "line": 2868, - "url": "/code/pallets/subtensor/src/lib.rs#L2868", + "line": 2842, + "url": "/code/pallets/subtensor/src/lib.rs#L2842", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1226,8 +1226,8 @@ "container": "SubtensorModule", "name": "MinAllowedWeights", "path": "pallets/subtensor/src/lib.rs", - "line": 2191, - "url": "/code/pallets/subtensor/src/lib.rs#L2191", + "line": 2188, + "url": "/code/pallets/subtensor/src/lib.rs#L2188", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1256,8 +1256,8 @@ "container": "SubtensorModule", "name": "Owner", "path": "pallets/subtensor/src/lib.rs", - "line": 1350, - "url": "/code/pallets/subtensor/src/lib.rs#L1350", + "line": 1347, + "url": "/code/pallets/subtensor/src/lib.rs#L1347", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1282,9 +1282,9 @@ "container": "StakeInfoRuntimeApi", "name": "get_most_convicted_hotkey_on_subnet", "path": "runtime/src/lib.rs", - "line": 2343, - "end_line": 2345, - "url": "/code/runtime/src/lib.rs#L2343-L2345", + "line": 2342, + "end_line": 2344, + "url": "/code/runtime/src/lib.rs#L2342-L2344", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -1333,8 +1333,8 @@ "container": "SubtensorModule", "name": "IsNetworkMember", "path": "pallets/subtensor/src/lib.rs", - "line": 2023, - "url": "/code/pallets/subtensor/src/lib.rs#L2023", + "line": 2020, + "url": "/code/pallets/subtensor/src/lib.rs#L2020", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1425,8 +1425,8 @@ "container": "SubtensorModule", "name": "OwnedHotkeys", "path": "pallets/subtensor/src/lib.rs", - "line": 1562, - "url": "/code/pallets/subtensor/src/lib.rs#L1562", + "line": 1559, + "url": "/code/pallets/subtensor/src/lib.rs#L1559", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1453,8 +1453,8 @@ "container": "SubtensorModule", "name": "ParentKeys", "path": "pallets/subtensor/src/lib.rs", - "line": 1403, - "url": "/code/pallets/subtensor/src/lib.rs#L1403", + "line": 1400, + "url": "/code/pallets/subtensor/src/lib.rs#L1400", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1481,8 +1481,8 @@ "container": "SubtensorModule", "name": "PendingChildKeys", "path": "pallets/subtensor/src/lib.rs", - "line": 1377, - "url": "/code/pallets/subtensor/src/lib.rs#L1377", + "line": 1374, + "url": "/code/pallets/subtensor/src/lib.rs#L1374", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1535,9 +1535,9 @@ "container": "SwapRuntimeApi", "name": "sim_swap_tao_for_alpha", "path": "runtime/src/lib.rs", - "line": 2438, - "end_line": 2466, - "url": "/code/runtime/src/lib.rs#L2438-L2466", + "line": 2437, + "end_line": 2465, + "url": "/code/runtime/src/lib.rs#L2437-L2465", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -1564,9 +1564,9 @@ "container": "SwapRuntimeApi", "name": "sim_swap_alpha_for_tao", "path": "runtime/src/lib.rs", - "line": 2468, - "end_line": 2496, - "url": "/code/runtime/src/lib.rs#L2468-L2496", + "line": 2467, + "end_line": 2495, + "url": "/code/runtime/src/lib.rs#L2467-L2495", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -1591,8 +1591,8 @@ "container": "SubtensorModule", "name": "RevealPeriodEpochs", "path": "pallets/subtensor/src/lib.rs", - "line": 2683, - "url": "/code/pallets/subtensor/src/lib.rs#L2683", + "line": 2680, + "url": "/code/pallets/subtensor/src/lib.rs#L2680", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1645,8 +1645,8 @@ "container": "SubtensorModule", "name": "RootClaimType", "path": "pallets/subtensor/src/lib.rs", - "line": 2725, - "url": "/code/pallets/subtensor/src/lib.rs#L2725", + "line": 2722, + "url": "/code/pallets/subtensor/src/lib.rs#L2722", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1810,8 +1810,8 @@ "container": "SubtensorModule", "name": "StakingHotkeys", "path": "pallets/subtensor/src/lib.rs", - "line": 1557, - "url": "/code/pallets/subtensor/src/lib.rs#L1557", + "line": 1554, + "url": "/code/pallets/subtensor/src/lib.rs#L1554", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1836,8 +1836,8 @@ "container": "SubtensorModule", "name": "Tempo", "path": "pallets/subtensor/src/lib.rs", - "line": 1955, - "url": "/code/pallets/subtensor/src/lib.rs#L1955", + "line": 1952, + "url": "/code/pallets/subtensor/src/lib.rs#L1952", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1845,8 +1845,8 @@ "container": "SubtensorModule", "name": "Burn", "path": "pallets/subtensor/src/lib.rs", - "line": 2251, - "url": "/code/pallets/subtensor/src/lib.rs#L2251", + "line": 2248, + "url": "/code/pallets/subtensor/src/lib.rs#L2248", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1854,8 +1854,8 @@ "container": "SubtensorModule", "name": "SubnetworkN", "path": "pallets/subtensor/src/lib.rs", - "line": 2014, - "url": "/code/pallets/subtensor/src/lib.rs#L2014", + "line": 2011, + "url": "/code/pallets/subtensor/src/lib.rs#L2011", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1880,8 +1880,8 @@ "container": "SubtensorModule", "name": "Uids", "path": "pallets/subtensor/src/lib.rs", - "line": 2433, - "url": "/code/pallets/subtensor/src/lib.rs#L2433", + "line": 2430, + "url": "/code/pallets/subtensor/src/lib.rs#L2430", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -1906,8 +1906,8 @@ "container": "SubtensorModule", "name": "HotkeyLock", "path": "pallets/subtensor/src/lib.rs", - "line": 1716, - "url": "/code/pallets/subtensor/src/lib.rs#L1716", + "line": 1713, + "url": "/code/pallets/subtensor/src/lib.rs#L1713", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1915,8 +1915,8 @@ "container": "SubtensorModule", "name": "DecayingHotkeyLock", "path": "pallets/subtensor/src/lib.rs", - "line": 1728, - "url": "/code/pallets/subtensor/src/lib.rs#L1728", + "line": 1725, + "url": "/code/pallets/subtensor/src/lib.rs#L1725", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1924,8 +1924,8 @@ "container": "SubtensorModule", "name": "OwnerLock", "path": "pallets/subtensor/src/lib.rs", - "line": 1740, - "url": "/code/pallets/subtensor/src/lib.rs#L1740", + "line": 1737, + "url": "/code/pallets/subtensor/src/lib.rs#L1737", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1933,8 +1933,8 @@ "container": "SubtensorModule", "name": "DecayingOwnerLock", "path": "pallets/subtensor/src/lib.rs", - "line": 1744, - "url": "/code/pallets/subtensor/src/lib.rs#L1744", + "line": 1741, + "url": "/code/pallets/subtensor/src/lib.rs#L1741", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1942,8 +1942,8 @@ "container": "SubtensorModule", "name": "SubnetOwnerHotkey", "path": "pallets/subtensor/src/lib.rs", - "line": 2112, - "url": "/code/pallets/subtensor/src/lib.rs#L2112", + "line": 2109, + "url": "/code/pallets/subtensor/src/lib.rs#L2109", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1951,8 +1951,8 @@ "container": "SubtensorModule", "name": "SubnetAlphaOut", "path": "pallets/subtensor/src/lib.rs", - "line": 1548, - "url": "/code/pallets/subtensor/src/lib.rs#L1548", + "line": 1545, + "url": "/code/pallets/subtensor/src/lib.rs#L1545", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1960,8 +1960,8 @@ "container": "SubtensorModule", "name": "UnlockRate", "path": "pallets/subtensor/src/lib.rs", - "line": 1782, - "url": "/code/pallets/subtensor/src/lib.rs#L1782", + "line": 1779, + "url": "/code/pallets/subtensor/src/lib.rs#L1779", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1969,8 +1969,8 @@ "container": "SubtensorModule", "name": "MaturityRate", "path": "pallets/subtensor/src/lib.rs", - "line": 1778, - "url": "/code/pallets/subtensor/src/lib.rs#L1778", + "line": 1775, + "url": "/code/pallets/subtensor/src/lib.rs#L1775", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -1978,8 +1978,8 @@ "container": "SubtensorModule", "name": "NetworkRegisteredAt", "path": "pallets/subtensor/src/lib.rs", - "line": 2046, - "url": "/code/pallets/subtensor/src/lib.rs#L2046", + "line": 2043, + "url": "/code/pallets/subtensor/src/lib.rs#L2043", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2004,8 +2004,8 @@ "container": "SubtensorModule", "name": "SubnetEmissionEnabled", "path": "pallets/subtensor/src/lib.rs", - "line": 1518, - "url": "/code/pallets/subtensor/src/lib.rs#L1518", + "line": 1515, + "url": "/code/pallets/subtensor/src/lib.rs#L1515", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2057,8 +2057,8 @@ "container": "SubtensorModule", "name": "SubnetIdentitiesV3", "path": "pallets/subtensor/src/lib.rs", - "line": 2575, - "url": "/code/pallets/subtensor/src/lib.rs#L2575", + "line": 2572, + "url": "/code/pallets/subtensor/src/lib.rs#L2572", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2079,8 +2079,8 @@ "container": "SubtensorModule", "name": "SubnetIdentitiesV3", "path": "pallets/subtensor/src/lib.rs", - "line": 2575, - "url": "/code/pallets/subtensor/src/lib.rs#L2575", + "line": 2572, + "url": "/code/pallets/subtensor/src/lib.rs#L2572", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2101,9 +2101,9 @@ "container": "SubnetRegistrationRuntimeApi", "name": "get_network_registration_cost", "path": "runtime/src/lib.rs", - "line": 2349, - "end_line": 2351, - "url": "/code/runtime/src/lib.rs#L2349-L2351", + "line": 2348, + "end_line": 2350, + "url": "/code/runtime/src/lib.rs#L2348-L2350", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -2128,8 +2128,8 @@ "container": "SubtensorModule", "name": "NetworkRegisteredAt", "path": "pallets/subtensor/src/lib.rs", - "line": 2046, - "url": "/code/pallets/subtensor/src/lib.rs#L2046", + "line": 2043, + "url": "/code/pallets/subtensor/src/lib.rs#L2043", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -2137,8 +2137,8 @@ "container": "SubtensorModule", "name": "InitialStartCallDelay", "path": "runtime/src/lib.rs", - "line": 852, - "url": "/code/runtime/src/lib.rs#L852", + "line": 851, + "url": "/code/runtime/src/lib.rs#L851", "raw_url": "/code/raw/runtime/src/lib.rs" } ] @@ -2159,8 +2159,8 @@ "container": "SubtensorModule", "name": "NetworksAdded", "path": "pallets/subtensor/src/lib.rs", - "line": 2018, - "url": "/code/pallets/subtensor/src/lib.rs#L2018", + "line": 2015, + "url": "/code/pallets/subtensor/src/lib.rs#L2015", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -2168,8 +2168,8 @@ "container": "SubtensorModule", "name": "Tempo", "path": "pallets/subtensor/src/lib.rs", - "line": 1955, - "url": "/code/pallets/subtensor/src/lib.rs#L1955", + "line": 1952, + "url": "/code/pallets/subtensor/src/lib.rs#L1952", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -2177,8 +2177,8 @@ "container": "SubtensorModule", "name": "Burn", "path": "pallets/subtensor/src/lib.rs", - "line": 2251, - "url": "/code/pallets/subtensor/src/lib.rs#L2251", + "line": 2248, + "url": "/code/pallets/subtensor/src/lib.rs#L2248", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" }, { @@ -2186,8 +2186,8 @@ "container": "SubtensorModule", "name": "SubnetworkN", "path": "pallets/subtensor/src/lib.rs", - "line": 2014, - "url": "/code/pallets/subtensor/src/lib.rs#L2014", + "line": 2011, + "url": "/code/pallets/subtensor/src/lib.rs#L2011", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2214,8 +2214,8 @@ "container": "SubtensorModule", "name": "TimelockedWeightCommits", "path": "pallets/subtensor/src/lib.rs", - "line": 2631, - "url": "/code/pallets/subtensor/src/lib.rs#L2631", + "line": 2628, + "url": "/code/pallets/subtensor/src/lib.rs#L2628", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2247,8 +2247,8 @@ "container": "SubtensorModule", "name": "TokenSymbol", "path": "pallets/subtensor/src/lib.rs", - "line": 1796, - "url": "/code/pallets/subtensor/src/lib.rs#L1796", + "line": 1793, + "url": "/code/pallets/subtensor/src/lib.rs#L1793", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2269,8 +2269,8 @@ "container": "SubtensorModule", "name": "TxRateLimit", "path": "pallets/subtensor/src/lib.rs", - "line": 2309, - "url": "/code/pallets/subtensor/src/lib.rs#L2309", + "line": 2306, + "url": "/code/pallets/subtensor/src/lib.rs#L2306", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2297,8 +2297,8 @@ "container": "SubtensorModule", "name": "Uids", "path": "pallets/subtensor/src/lib.rs", - "line": 2433, - "url": "/code/pallets/subtensor/src/lib.rs#L2433", + "line": 2430, + "url": "/code/pallets/subtensor/src/lib.rs#L2430", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2325,8 +2325,8 @@ "container": "SubtensorModule", "name": "Weights", "path": "pallets/subtensor/src/lib.rs", - "line": 2495, - "url": "/code/pallets/subtensor/src/lib.rs#L2495", + "line": 2492, + "url": "/code/pallets/subtensor/src/lib.rs#L2492", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] @@ -2351,8 +2351,8 @@ "container": "SubtensorModule", "name": "WeightsSetRateLimit", "path": "pallets/subtensor/src/lib.rs", - "line": 2221, - "url": "/code/pallets/subtensor/src/lib.rs#L2221", + "line": 2218, + "url": "/code/pallets/subtensor/src/lib.rs#L2218", "raw_url": "/code/raw/pallets/subtensor/src/lib.rs" } ] From 75be7f7742d161b988f41c21ddaa06277bb27849 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 10:14:48 -0700 Subject: [PATCH 51/63] Revert parent-child cycle prevention --- docs/tx/add-collateral.mdx | 4 +- docs/tx/add-stake-limit.mdx | 4 +- docs/tx/add-stake.mdx | 4 +- docs/tx/announce-coldkey-swap.mdx | 4 +- docs/tx/associate-evm-key.mdx | 4 +- docs/tx/associate-hotkey.mdx | 4 +- docs/tx/claim-root.mdx | 4 +- docs/tx/clear-coldkey-swap-announcement.mdx | 4 +- docs/tx/commit-weights.mdx | 4 +- docs/tx/dispute-coldkey-swap.mdx | 4 +- docs/tx/lock-stake.mdx | 4 +- docs/tx/move-lock.mdx | 4 +- docs/tx/move-stake.mdx | 4 +- docs/tx/register-leased-network.mdx | 4 +- docs/tx/remove-stake-limit.mdx | 4 +- docs/tx/remove-stake.mdx | 4 +- docs/tx/set-auto-stake.mdx | 4 +- docs/tx/set-childkey-take.mdx | 2 +- docs/tx/set-children.mdx | 13 +- docs/tx/set-identity.mdx | 4 +- docs/tx/set-min-collateral.mdx | 4 +- docs/tx/set-perpetual-lock.mdx | 4 +- docs/tx/set-root-claim-type.mdx | 4 +- docs/tx/set-subnet-identity.mdx | 4 +- docs/tx/set-weights.mdx | 4 +- docs/tx/stake-burn.mdx | 4 +- docs/tx/start-call.mdx | 4 +- docs/tx/swap-coldkey-announced.mdx | 4 +- docs/tx/swap-stake.mdx | 6 +- docs/tx/terminate-lease.mdx | 4 +- docs/tx/transfer-stake.mdx | 6 +- docs/tx/unstake-all-alpha.mdx | 4 +- docs/tx/unstake-all.mdx | 4 +- docs/tx/update-symbol.mdx | 4 +- pallets/subtensor/src/macros/dispatches.rs | 7 +- pallets/subtensor/src/staking/set_children.rs | 69 ------ pallets/subtensor/src/tests/children.rs | 97 -------- .../public/catalog/intents.json | 210 +++++++++--------- 38 files changed, 177 insertions(+), 353 deletions(-) diff --git a/docs/tx/add-collateral.mdx b/docs/tx/add-collateral.mdx index 3ff99c9f5b..7431a44d7a 100644 --- a/docs/tx/add-collateral.mdx +++ b/docs/tx/add-collateral.mdx @@ -23,7 +23,7 @@ to clear unshielded at an unbounded AMM price. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_collateral`](/code/pallets/subtensor/src/macros/dispatches.rs#L2455-L2465) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_collateral`](/code/pallets/subtensor/src/macros/dispatches.rs#L2450-L2460) | ## Parameters @@ -77,7 +77,7 @@ result = sub.execute_tool("add_collateral", {...}, wallet) ## On-chain implementation -`SubtensorModule.add_collateral` — [`pallets/subtensor/src/macros/dispatches.rs#L2457`](/code/pallets/subtensor/src/macros/dispatches.rs#L2455-L2465): +`SubtensorModule.add_collateral` — [`pallets/subtensor/src/macros/dispatches.rs#L2452`](/code/pallets/subtensor/src/macros/dispatches.rs#L2450-L2460): ```rust #[pallet::call_index(144)] diff --git a/docs/tx/add-stake-limit.mdx b/docs/tx/add-stake-limit.mdx index e62959b57f..9f02e57544 100644 --- a/docs/tx/add-stake-limit.mdx +++ b/docs/tx/add-stake-limit.mdx @@ -15,7 +15,7 @@ for large amounts or thin pools, where the swap itself moves the price. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1397-L1416) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1392-L1411) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("add_stake_limit", {...}, wallet) ## On-chain implementation -`SubtensorModule.add_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1399`](/code/pallets/subtensor/src/macros/dispatches.rs#L1397-L1416): +`SubtensorModule.add_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1394`](/code/pallets/subtensor/src/macros/dispatches.rs#L1392-L1411): ```rust #[pallet::call_index(88)] diff --git a/docs/tx/add-stake.mdx b/docs/tx/add-stake.mdx index bf02999f39..51c68bfb6f 100644 --- a/docs/tx/add-stake.mdx +++ b/docs/tx/add-stake.mdx @@ -22,7 +22,7 @@ reserve (`InsufficientLiquidity`). | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L559-L568), [`SubtensorModule.add_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1397-L1416) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L559-L568), [`SubtensorModule.add_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1392-L1411) | ## Parameters @@ -96,7 +96,7 @@ pub fn add_stake( Delegates to [`do_add_stake`](/code/pallets/subtensor/src/staking/add_stake.rs#L30). -`SubtensorModule.add_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1399`](/code/pallets/subtensor/src/macros/dispatches.rs#L1397-L1416): +`SubtensorModule.add_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1394`](/code/pallets/subtensor/src/macros/dispatches.rs#L1392-L1411): ```rust #[pallet::call_index(88)] diff --git a/docs/tx/announce-coldkey-swap.mdx b/docs/tx/announce-coldkey-swap.mdx index ba7edd4f7c..26d4081d16 100644 --- a/docs/tx/announce-coldkey-swap.mdx +++ b/docs/tx/announce-coldkey-swap.mdx @@ -23,7 +23,7 @@ an unauthorized one with `dispute_coldkey_swap`. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.announce_coldkey_swap`](/code/pallets/subtensor/src/macros/dispatches.rs#L1991-L2019) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.announce_coldkey_swap`](/code/pallets/subtensor/src/macros/dispatches.rs#L1986-L2014) | ## Parameters @@ -72,7 +72,7 @@ result = sub.execute_tool("announce_coldkey_swap", {...}, wallet) ## On-chain implementation -`SubtensorModule.announce_coldkey_swap` — [`pallets/subtensor/src/macros/dispatches.rs#L1993`](/code/pallets/subtensor/src/macros/dispatches.rs#L1991-L2019): +`SubtensorModule.announce_coldkey_swap` — [`pallets/subtensor/src/macros/dispatches.rs#L1988`](/code/pallets/subtensor/src/macros/dispatches.rs#L1986-L2014): ```rust #[pallet::call_index(125)] diff --git a/docs/tx/associate-evm-key.mdx b/docs/tx/associate-evm-key.mdx index 1e841ff448..067ad382d0 100644 --- a/docs/tx/associate-evm-key.mdx +++ b/docs/tx/associate-evm-key.mdx @@ -20,7 +20,7 @@ neuron. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.associate_evm_key`](/code/pallets/subtensor/src/macros/dispatches.rs#L1579-L1593) | +| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.associate_evm_key`](/code/pallets/subtensor/src/macros/dispatches.rs#L1574-L1588) | ## Parameters @@ -78,7 +78,7 @@ result = sub.execute_tool("associate_evm_key", {...}, wallet) ## On-chain implementation -`SubtensorModule.associate_evm_key` — [`pallets/subtensor/src/macros/dispatches.rs#L1585`](/code/pallets/subtensor/src/macros/dispatches.rs#L1579-L1593): +`SubtensorModule.associate_evm_key` — [`pallets/subtensor/src/macros/dispatches.rs#L1580`](/code/pallets/subtensor/src/macros/dispatches.rs#L1574-L1588): ```rust #[pallet::call_index(93)] diff --git a/docs/tx/associate-hotkey.mdx b/docs/tx/associate-hotkey.mdx index 3d2ec6d739..e8ff711891 100644 --- a/docs/tx/associate-hotkey.mdx +++ b/docs/tx/associate-hotkey.mdx @@ -15,7 +15,7 @@ take over the hotkey. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.try_associate_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L1525-L1533) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.try_associate_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L1520-L1528) | ## Parameters @@ -62,7 +62,7 @@ result = sub.execute_tool("associate_hotkey", {...}, wallet) ## On-chain implementation -`SubtensorModule.try_associate_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L1527`](/code/pallets/subtensor/src/macros/dispatches.rs#L1525-L1533): +`SubtensorModule.try_associate_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L1522`](/code/pallets/subtensor/src/macros/dispatches.rs#L1520-L1528): ```rust #[pallet::call_index(91)] diff --git a/docs/tx/claim-root.mdx b/docs/tx/claim-root.mdx index 77de4f07ef..3a41959421 100644 --- a/docs/tx/claim-root.mdx +++ b/docs/tx/claim-root.mdx @@ -17,7 +17,7 @@ deadline — but each call pays out only the subnets listed. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.claim_root`](/code/pallets/subtensor/src/macros/dispatches.rs#L1895-L1913) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.claim_root`](/code/pallets/subtensor/src/macros/dispatches.rs#L1890-L1908) | ## Parameters @@ -66,7 +66,7 @@ result = sub.execute_tool("claim_root", {...}, wallet) ## On-chain implementation -`SubtensorModule.claim_root` — [`pallets/subtensor/src/macros/dispatches.rs#L1897`](/code/pallets/subtensor/src/macros/dispatches.rs#L1895-L1913): +`SubtensorModule.claim_root` — [`pallets/subtensor/src/macros/dispatches.rs#L1892`](/code/pallets/subtensor/src/macros/dispatches.rs#L1890-L1908): ```rust #[pallet::call_index(121)] diff --git a/docs/tx/clear-coldkey-swap-announcement.mdx b/docs/tx/clear-coldkey-swap-announcement.mdx index 166d094c2c..0cf073a023 100644 --- a/docs/tx/clear-coldkey-swap-announcement.mdx +++ b/docs/tx/clear-coldkey-swap-announcement.mdx @@ -17,7 +17,7 @@ right call instead. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.clear_coldkey_swap_announcement`](/code/pallets/subtensor/src/macros/dispatches.rs#L2190-L2207) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.clear_coldkey_swap_announcement`](/code/pallets/subtensor/src/macros/dispatches.rs#L2185-L2202) | ## Parameters @@ -62,7 +62,7 @@ result = sub.execute_tool("clear_coldkey_swap_announcement", {...}, wallet) ## On-chain implementation -`SubtensorModule.clear_coldkey_swap_announcement` — [`pallets/subtensor/src/macros/dispatches.rs#L2192`](/code/pallets/subtensor/src/macros/dispatches.rs#L2190-L2207): +`SubtensorModule.clear_coldkey_swap_announcement` — [`pallets/subtensor/src/macros/dispatches.rs#L2187`](/code/pallets/subtensor/src/macros/dispatches.rs#L2185-L2202): ```rust #[pallet::call_index(133)] diff --git a/docs/tx/commit-weights.mdx b/docs/tx/commit-weights.mdx index a89bd5cb77..cae59e3f30 100644 --- a/docs/tx/commit-weights.mdx +++ b/docs/tx/commit-weights.mdx @@ -16,7 +16,7 @@ commit-reveal setting. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.commit_timelocked_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L1856-L1874) | +| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.commit_timelocked_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L1851-L1869) | ## Parameters @@ -70,7 +70,7 @@ result = sub.execute_tool("commit_weights", {...}, wallet) ## On-chain implementation -`SubtensorModule.commit_timelocked_mechanism_weights` — [`pallets/subtensor/src/macros/dispatches.rs#L1858`](/code/pallets/subtensor/src/macros/dispatches.rs#L1856-L1874): +`SubtensorModule.commit_timelocked_mechanism_weights` — [`pallets/subtensor/src/macros/dispatches.rs#L1853`](/code/pallets/subtensor/src/macros/dispatches.rs#L1851-L1869): ```rust #[pallet::call_index(118)] diff --git a/docs/tx/dispute-coldkey-swap.mdx b/docs/tx/dispute-coldkey-swap.mdx index 7580b28b17..a55a96619e 100644 --- a/docs/tx/dispute-coldkey-swap.mdx +++ b/docs/tx/dispute-coldkey-swap.mdx @@ -18,7 +18,7 @@ you made yourself. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.dispute_coldkey_swap`](/code/pallets/subtensor/src/macros/dispatches.rs#L2060-L2079) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.dispute_coldkey_swap`](/code/pallets/subtensor/src/macros/dispatches.rs#L2055-L2074) | ## Parameters @@ -63,7 +63,7 @@ result = sub.execute_tool("dispute_coldkey_swap", {...}, wallet) ## On-chain implementation -`SubtensorModule.dispute_coldkey_swap` — [`pallets/subtensor/src/macros/dispatches.rs#L2062`](/code/pallets/subtensor/src/macros/dispatches.rs#L2060-L2079): +`SubtensorModule.dispute_coldkey_swap` — [`pallets/subtensor/src/macros/dispatches.rs#L2057`](/code/pallets/subtensor/src/macros/dispatches.rs#L2055-L2074): ```rust #[pallet::call_index(127)] diff --git a/docs/tx/lock-stake.mdx b/docs/tx/lock-stake.mdx index 068a1e1e6e..79fcf19da5 100644 --- a/docs/tx/lock-stake.mdx +++ b/docs/tx/lock-stake.mdx @@ -21,7 +21,7 @@ persists is controlled per coldkey per subnet with | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.lock_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L2262-L2272) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.lock_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L2257-L2267) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("lock_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.lock_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L2264`](/code/pallets/subtensor/src/macros/dispatches.rs#L2262-L2272): +`SubtensorModule.lock_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L2259`](/code/pallets/subtensor/src/macros/dispatches.rs#L2257-L2267): ```rust #[pallet::call_index(136)] diff --git a/docs/tx/move-lock.mdx b/docs/tx/move-lock.mdx index 6f6f2f7592..c08b3f59e5 100644 --- a/docs/tx/move-lock.mdx +++ b/docs/tx/move-lock.mdx @@ -16,7 +16,7 @@ existing lock on the subnet to move. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.move_lock`](/code/pallets/subtensor/src/macros/dispatches.rs#L2286-L2295) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.move_lock`](/code/pallets/subtensor/src/macros/dispatches.rs#L2281-L2290) | ## Parameters @@ -68,7 +68,7 @@ result = sub.execute_tool("move_lock", {...}, wallet) ## On-chain implementation -`SubtensorModule.move_lock` — [`pallets/subtensor/src/macros/dispatches.rs#L2288`](/code/pallets/subtensor/src/macros/dispatches.rs#L2286-L2295): +`SubtensorModule.move_lock` — [`pallets/subtensor/src/macros/dispatches.rs#L2283`](/code/pallets/subtensor/src/macros/dispatches.rs#L2281-L2290): ```rust #[pallet::call_index(137)] diff --git a/docs/tx/move-stake.mdx b/docs/tx/move-stake.mdx index 1a074e7371..26b664b268 100644 --- a/docs/tx/move-stake.mdx +++ b/docs/tx/move-stake.mdx @@ -16,7 +16,7 @@ changes. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.move_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1261-L1279) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.move_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1256-L1274) | ## Parameters @@ -77,7 +77,7 @@ result = sub.execute_tool("move_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.move_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1263`](/code/pallets/subtensor/src/macros/dispatches.rs#L1261-L1279): +`SubtensorModule.move_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1258`](/code/pallets/subtensor/src/macros/dispatches.rs#L1256-L1274): ```rust #[pallet::call_index(85)] diff --git a/docs/tx/register-leased-network.mdx b/docs/tx/register-leased-network.mdx index 70c7cbcebf..71ff678c13 100644 --- a/docs/tx/register-leased-network.mdx +++ b/docs/tx/register-leased-network.mdx @@ -19,7 +19,7 @@ perpetual and ownership never transfers. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.register_leased_network`](/code/pallets/subtensor/src/macros/dispatches.rs#L1677-L1685) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.register_leased_network`](/code/pallets/subtensor/src/macros/dispatches.rs#L1672-L1680) | ## Parameters @@ -69,7 +69,7 @@ result = sub.execute_tool("register_leased_network", {...}, wallet) ## On-chain implementation -`SubtensorModule.register_leased_network` — [`pallets/subtensor/src/macros/dispatches.rs#L1679`](/code/pallets/subtensor/src/macros/dispatches.rs#L1677-L1685): +`SubtensorModule.register_leased_network` — [`pallets/subtensor/src/macros/dispatches.rs#L1674`](/code/pallets/subtensor/src/macros/dispatches.rs#L1672-L1680): ```rust #[pallet::call_index(110)] diff --git a/docs/tx/remove-stake-limit.mdx b/docs/tx/remove-stake-limit.mdx index 68ac1febe5..0fa466bc2a 100644 --- a/docs/tx/remove-stake-limit.mdx +++ b/docs/tx/remove-stake-limit.mdx @@ -16,7 +16,7 @@ this over plain `remove_stake` when exiting large positions. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.remove_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1450-L1468) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.remove_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1445-L1463) | ## Parameters @@ -75,7 +75,7 @@ result = sub.execute_tool("remove_stake_limit", {...}, wallet) ## On-chain implementation -`SubtensorModule.remove_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1452`](/code/pallets/subtensor/src/macros/dispatches.rs#L1450-L1468): +`SubtensorModule.remove_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1447`](/code/pallets/subtensor/src/macros/dispatches.rs#L1445-L1463): ```rust #[pallet::call_index(89)] diff --git a/docs/tx/remove-stake.mdx b/docs/tx/remove-stake.mdx index 75276f8c9f..928e8ade62 100644 --- a/docs/tx/remove-stake.mdx +++ b/docs/tx/remove-stake.mdx @@ -22,7 +22,7 @@ position instead of leaving dust (`AmountTooLow`). | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.remove_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L593-L602), [`SubtensorModule.remove_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1450-L1468) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.remove_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L593-L602), [`SubtensorModule.remove_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1445-L1463) | ## Parameters @@ -96,7 +96,7 @@ pub fn remove_stake( Delegates to [`do_remove_stake`](/code/pallets/subtensor/src/staking/remove_stake.rs#L35). -`SubtensorModule.remove_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1452`](/code/pallets/subtensor/src/macros/dispatches.rs#L1450-L1468): +`SubtensorModule.remove_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1447`](/code/pallets/subtensor/src/macros/dispatches.rs#L1445-L1463): ```rust #[pallet::call_index(89)] diff --git a/docs/tx/set-auto-stake.mdx b/docs/tx/set-auto-stake.mdx index d76d1775f4..c098db4fd6 100644 --- a/docs/tx/set-auto-stake.mdx +++ b/docs/tx/set-auto-stake.mdx @@ -17,7 +17,7 @@ back with the `auto_stake` read. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_coldkey_auto_stake_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L1790-L1832) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_coldkey_auto_stake_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L1785-L1827) | ## Parameters @@ -67,7 +67,7 @@ result = sub.execute_tool("set_auto_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_coldkey_auto_stake_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L1792`](/code/pallets/subtensor/src/macros/dispatches.rs#L1790-L1832): +`SubtensorModule.set_coldkey_auto_stake_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L1787`](/code/pallets/subtensor/src/macros/dispatches.rs#L1785-L1827): ```rust #[pallet::call_index(114)] diff --git a/docs/tx/set-childkey-take.mdx b/docs/tx/set-childkey-take.mdx index 75c8bb80cf..627f399d34 100644 --- a/docs/tx/set-childkey-take.mdx +++ b/docs/tx/set-childkey-take.mdx @@ -85,6 +85,6 @@ pub fn set_childkey_take( } ``` -Delegates to [`do_set_childkey_take`](/code/pallets/subtensor/src/staking/set_children.rs#L776). +Delegates to [`do_set_childkey_take`](/code/pallets/subtensor/src/staking/set_children.rs#L707). Every file is browsable under [/code](/code) exactly as built into the runtime, or as plain text under `/code/raw/` (index: [`/code/index.json`](/code/index.json)). diff --git a/docs/tx/set-children.mdx b/docs/tx/set-children.mdx index c109764614..7bd80dc4c6 100644 --- a/docs/tx/set-children.mdx +++ b/docs/tx/set-children.mdx @@ -26,7 +26,7 @@ is not yet enabled, where they apply immediately. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_children`](/code/pallets/subtensor/src/macros/dispatches.rs#L1078-L1093) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_children`](/code/pallets/subtensor/src/macros/dispatches.rs#L1078-L1088) | ## Parameters @@ -79,16 +79,11 @@ result = sub.execute_tool("set_children", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_children` — [`pallets/subtensor/src/macros/dispatches.rs#L1085`](/code/pallets/subtensor/src/macros/dispatches.rs#L1078-L1093): +`SubtensorModule.set_children` — [`pallets/subtensor/src/macros/dispatches.rs#L1080`](/code/pallets/subtensor/src/macros/dispatches.rs#L1078-L1088): ```rust #[pallet::call_index(67)] -#[pallet::weight(( - ::WeightInfo::set_children(children.len() as u32) - .saturating_add(crate::Pallet::::set_children_cycle_check_weight()), - DispatchClass::Normal, - Pays::Yes -))] +#[pallet::weight((::WeightInfo::set_children(children.len() as u32), DispatchClass::Normal, Pays::Yes))] pub fn set_children( origin: OriginFor, hotkey: T::AccountId, @@ -100,6 +95,6 @@ pub fn set_children( } ``` -Delegates to [`do_schedule_children`](/code/pallets/subtensor/src/staking/set_children.rs#L543). +Delegates to [`do_schedule_children`](/code/pallets/subtensor/src/staking/set_children.rs#L475). Every file is browsable under [/code](/code) exactly as built into the runtime, or as plain text under `/code/raw/` (index: [`/code/index.json`](/code/index.json)). diff --git a/docs/tx/set-identity.mdx b/docs/tx/set-identity.mdx index f49bc68e97..ce6fd88233 100644 --- a/docs/tx/set-identity.mdx +++ b/docs/tx/set-identity.mdx @@ -17,7 +17,7 @@ cosmetic: no effect on balances, stake, or permissions. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_identity`](/code/pallets/subtensor/src/macros/dispatches.rs#L1124-L1146) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_identity`](/code/pallets/subtensor/src/macros/dispatches.rs#L1119-L1141) | ## Parameters @@ -72,7 +72,7 @@ result = sub.execute_tool("set_identity", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_identity` — [`pallets/subtensor/src/macros/dispatches.rs#L1126`](/code/pallets/subtensor/src/macros/dispatches.rs#L1124-L1146): +`SubtensorModule.set_identity` — [`pallets/subtensor/src/macros/dispatches.rs#L1121`](/code/pallets/subtensor/src/macros/dispatches.rs#L1119-L1141): ```rust #[pallet::call_index(68)] diff --git a/docs/tx/set-min-collateral.mdx b/docs/tx/set-min-collateral.mdx index 75bcb35c37..2231be96c2 100644 --- a/docs/tx/set-min-collateral.mdx +++ b/docs/tx/set-min-collateral.mdx @@ -15,7 +15,7 @@ immediately). Zero clears the floor and restores pure drain behavior. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_min_collateral`](/code/pallets/subtensor/src/macros/dispatches.rs#L2490-L2499) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_min_collateral`](/code/pallets/subtensor/src/macros/dispatches.rs#L2485-L2494) | ## Parameters @@ -68,7 +68,7 @@ result = sub.execute_tool("set_min_collateral", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_min_collateral` — [`pallets/subtensor/src/macros/dispatches.rs#L2492`](/code/pallets/subtensor/src/macros/dispatches.rs#L2490-L2499): +`SubtensorModule.set_min_collateral` — [`pallets/subtensor/src/macros/dispatches.rs#L2487`](/code/pallets/subtensor/src/macros/dispatches.rs#L2485-L2494): ```rust #[pallet::call_index(145)] diff --git a/docs/tx/set-perpetual-lock.mdx b/docs/tx/set-perpetual-lock.mdx index 748d7ead2c..ccf168fe20 100644 --- a/docs/tx/set-perpetual-lock.mdx +++ b/docs/tx/set-perpetual-lock.mdx @@ -15,7 +15,7 @@ illiquid until you switch back to decaying and the lock runs off. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_perpetual_lock`](/code/pallets/subtensor/src/macros/dispatches.rs#L2302-L2311) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_perpetual_lock`](/code/pallets/subtensor/src/macros/dispatches.rs#L2297-L2306) | ## Parameters @@ -67,7 +67,7 @@ result = sub.execute_tool("set_perpetual_lock", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_perpetual_lock` — [`pallets/subtensor/src/macros/dispatches.rs#L2304`](/code/pallets/subtensor/src/macros/dispatches.rs#L2302-L2311): +`SubtensorModule.set_perpetual_lock` — [`pallets/subtensor/src/macros/dispatches.rs#L2299`](/code/pallets/subtensor/src/macros/dispatches.rs#L2297-L2306): ```rust #[pallet::call_index(138)] diff --git a/docs/tx/set-root-claim-type.mdx b/docs/tx/set-root-claim-type.mdx index 8442dd0bab..e6284cbac3 100644 --- a/docs/tx/set-root-claim-type.mdx +++ b/docs/tx/set-root-claim-type.mdx @@ -14,7 +14,7 @@ already claimed. Read it back with the `root_claim_type` read. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_root_claim_type`](/code/pallets/subtensor/src/macros/dispatches.rs#L1922-L1938) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_root_claim_type`](/code/pallets/subtensor/src/macros/dispatches.rs#L1917-L1933) | ## Parameters @@ -62,7 +62,7 @@ result = sub.execute_tool("set_root_claim_type", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_root_claim_type` — [`pallets/subtensor/src/macros/dispatches.rs#L1924`](/code/pallets/subtensor/src/macros/dispatches.rs#L1922-L1938): +`SubtensorModule.set_root_claim_type` — [`pallets/subtensor/src/macros/dispatches.rs#L1919`](/code/pallets/subtensor/src/macros/dispatches.rs#L1917-L1933): ```rust #[pallet::call_index(122)] diff --git a/docs/tx/set-subnet-identity.mdx b/docs/tx/set-subnet-identity.mdx index afa391c82f..30f4a60250 100644 --- a/docs/tx/set-subnet-identity.mdx +++ b/docs/tx/set-subnet-identity.mdx @@ -15,7 +15,7 @@ for economics use `set_hyperparameter`. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.set_subnet_identity`](/code/pallets/subtensor/src/macros/dispatches.rs#L1159-L1185) | +| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.set_subnet_identity`](/code/pallets/subtensor/src/macros/dispatches.rs#L1154-L1180) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("set_subnet_identity", {...}, wallet) ## On-chain implementation -`SubtensorModule.set_subnet_identity` — [`pallets/subtensor/src/macros/dispatches.rs#L1161`](/code/pallets/subtensor/src/macros/dispatches.rs#L1159-L1185): +`SubtensorModule.set_subnet_identity` — [`pallets/subtensor/src/macros/dispatches.rs#L1156`](/code/pallets/subtensor/src/macros/dispatches.rs#L1154-L1180): ```rust #[pallet::call_index(78)] diff --git a/docs/tx/set-weights.mdx b/docs/tx/set-weights.mdx index 388dbe6c68..b11e1db90a 100644 --- a/docs/tx/set-weights.mdx +++ b/docs/tx/set-weights.mdx @@ -22,7 +22,7 @@ unless you specifically need to force one path. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L128-L143), [`SubtensorModule.commit_timelocked_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L1856-L1874) | +| `hotkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.set_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L128-L143), [`SubtensorModule.commit_timelocked_mechanism_weights`](/code/pallets/subtensor/src/macros/dispatches.rs#L1851-L1869) | ## Parameters @@ -98,7 +98,7 @@ pub fn set_mechanism_weights( Delegates to [`get_commit_reveal_weights_enabled`](/code/pallets/subtensor/src/utils/misc.rs#L607), [`do_set_mechanism_weights`](/code/pallets/subtensor/src/subnets/weights.rs#L916). -`SubtensorModule.commit_timelocked_mechanism_weights` — [`pallets/subtensor/src/macros/dispatches.rs#L1858`](/code/pallets/subtensor/src/macros/dispatches.rs#L1856-L1874): +`SubtensorModule.commit_timelocked_mechanism_weights` — [`pallets/subtensor/src/macros/dispatches.rs#L1853`](/code/pallets/subtensor/src/macros/dispatches.rs#L1851-L1869): ```rust #[pallet::call_index(118)] diff --git a/docs/tx/stake-burn.mdx b/docs/tx/stake-burn.mdx index d702512424..d8766cd125 100644 --- a/docs/tx/stake-burn.mdx +++ b/docs/tx/stake-burn.mdx @@ -18,7 +18,7 @@ cap. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake_burn`](/code/pallets/subtensor/src/macros/dispatches.rs#L2174-L2184) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.add_stake_burn`](/code/pallets/subtensor/src/macros/dispatches.rs#L2169-L2179) | ## Parameters @@ -74,7 +74,7 @@ result = sub.execute_tool("stake_burn", {...}, wallet) ## On-chain implementation -`SubtensorModule.add_stake_burn` — [`pallets/subtensor/src/macros/dispatches.rs#L2176`](/code/pallets/subtensor/src/macros/dispatches.rs#L2174-L2184): +`SubtensorModule.add_stake_burn` — [`pallets/subtensor/src/macros/dispatches.rs#L2171`](/code/pallets/subtensor/src/macros/dispatches.rs#L2169-L2179): ```rust #[pallet::call_index(132)] diff --git a/docs/tx/start-call.mdx b/docs/tx/start-call.mdx index 515dc4b428..a9878949f8 100644 --- a/docs/tx/start-call.mdx +++ b/docs/tx/start-call.mdx @@ -16,7 +16,7 @@ as soon as the delay allows. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.start_call`](/code/pallets/subtensor/src/macros/dispatches.rs#L1543-L1548) | +| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.start_call`](/code/pallets/subtensor/src/macros/dispatches.rs#L1538-L1543) | ## Parameters @@ -65,7 +65,7 @@ result = sub.execute_tool("start_call", {...}, wallet) ## On-chain implementation -`SubtensorModule.start_call` — [`pallets/subtensor/src/macros/dispatches.rs#L1545`](/code/pallets/subtensor/src/macros/dispatches.rs#L1543-L1548): +`SubtensorModule.start_call` — [`pallets/subtensor/src/macros/dispatches.rs#L1540`](/code/pallets/subtensor/src/macros/dispatches.rs#L1538-L1543): ```rust #[pallet::call_index(92)] diff --git a/docs/tx/swap-coldkey-announced.mdx b/docs/tx/swap-coldkey-announced.mdx index d1ff64e4e7..e48ba8ec55 100644 --- a/docs/tx/swap-coldkey-announced.mdx +++ b/docs/tx/swap-coldkey-announced.mdx @@ -15,7 +15,7 @@ future operations sign with the new coldkey. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.swap_coldkey_announced`](/code/pallets/subtensor/src/macros/dispatches.rs#L2029-L2051) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.swap_coldkey_announced`](/code/pallets/subtensor/src/macros/dispatches.rs#L2024-L2046) | ## Parameters @@ -64,7 +64,7 @@ result = sub.execute_tool("swap_coldkey_announced", {...}, wallet) ## On-chain implementation -`SubtensorModule.swap_coldkey_announced` — [`pallets/subtensor/src/macros/dispatches.rs#L2031`](/code/pallets/subtensor/src/macros/dispatches.rs#L2029-L2051): +`SubtensorModule.swap_coldkey_announced` — [`pallets/subtensor/src/macros/dispatches.rs#L2026`](/code/pallets/subtensor/src/macros/dispatches.rs#L2024-L2046): ```rust #[pallet::call_index(126)] diff --git a/docs/tx/swap-stake.mdx b/docs/tx/swap-stake.mdx index cb5cd667ee..10a7bace0c 100644 --- a/docs/tx/swap-stake.mdx +++ b/docs/tx/swap-stake.mdx @@ -18,7 +18,7 @@ only if you want to control each leg separately. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.swap_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1347-L1363), [`SubtensorModule.swap_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1495-L1515) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.swap_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1342-L1358), [`SubtensorModule.swap_stake_limit`](/code/pallets/subtensor/src/macros/dispatches.rs#L1490-L1510) | ## Parameters @@ -78,7 +78,7 @@ result = sub.execute_tool("swap_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.swap_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1349`](/code/pallets/subtensor/src/macros/dispatches.rs#L1347-L1363): +`SubtensorModule.swap_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1344`](/code/pallets/subtensor/src/macros/dispatches.rs#L1342-L1358): ```rust #[pallet::call_index(87)] @@ -102,7 +102,7 @@ pub fn swap_stake( Delegates to [`do_swap_stake`](/code/pallets/subtensor/src/staking/move_stake.rs#L260). -`SubtensorModule.swap_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1497`](/code/pallets/subtensor/src/macros/dispatches.rs#L1495-L1515): +`SubtensorModule.swap_stake_limit` — [`pallets/subtensor/src/macros/dispatches.rs#L1492`](/code/pallets/subtensor/src/macros/dispatches.rs#L1490-L1510): ```rust #[pallet::call_index(90)] diff --git a/docs/tx/terminate-lease.mdx b/docs/tx/terminate-lease.mdx index 4d1696b077..978da36226 100644 --- a/docs/tx/terminate-lease.mdx +++ b/docs/tx/terminate-lease.mdx @@ -14,7 +14,7 @@ block with the `lease` read before calling. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.terminate_lease`](/code/pallets/subtensor/src/macros/dispatches.rs#L1700-L1708) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.terminate_lease`](/code/pallets/subtensor/src/macros/dispatches.rs#L1695-L1703) | ## Parameters @@ -64,7 +64,7 @@ result = sub.execute_tool("terminate_lease", {...}, wallet) ## On-chain implementation -`SubtensorModule.terminate_lease` — [`pallets/subtensor/src/macros/dispatches.rs#L1702`](/code/pallets/subtensor/src/macros/dispatches.rs#L1700-L1708): +`SubtensorModule.terminate_lease` — [`pallets/subtensor/src/macros/dispatches.rs#L1697`](/code/pallets/subtensor/src/macros/dispatches.rs#L1695-L1703): ```rust #[pallet::call_index(111)] diff --git a/docs/tx/transfer-stake.mdx b/docs/tx/transfer-stake.mdx index cfb9b0f942..3b948f2e6d 100644 --- a/docs/tx/transfer-stake.mdx +++ b/docs/tx/transfer-stake.mdx @@ -19,7 +19,7 @@ this as an unbounded spend and blocks it until the cap is raised. Use | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.transfer_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1305-L1323), [`SubtensorModule.transfer_stake_and_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L2397-L2417) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.transfer_stake`](/code/pallets/subtensor/src/macros/dispatches.rs#L1300-L1318), [`SubtensorModule.transfer_stake_and_hotkey`](/code/pallets/subtensor/src/macros/dispatches.rs#L2392-L2412) | ## Parameters @@ -81,7 +81,7 @@ result = sub.execute_tool("transfer_stake", {...}, wallet) ## On-chain implementation -`SubtensorModule.transfer_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1307`](/code/pallets/subtensor/src/macros/dispatches.rs#L1305-L1323): +`SubtensorModule.transfer_stake` — [`pallets/subtensor/src/macros/dispatches.rs#L1302`](/code/pallets/subtensor/src/macros/dispatches.rs#L1300-L1318): ```rust #[pallet::call_index(86)] @@ -107,7 +107,7 @@ pub fn transfer_stake( Delegates to [`do_transfer_stake`](/code/pallets/subtensor/src/staking/move_stake.rs#L120). -`SubtensorModule.transfer_stake_and_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L2399`](/code/pallets/subtensor/src/macros/dispatches.rs#L2397-L2417): +`SubtensorModule.transfer_stake_and_hotkey` — [`pallets/subtensor/src/macros/dispatches.rs#L2394`](/code/pallets/subtensor/src/macros/dispatches.rs#L2392-L2412): ```rust #[pallet::call_index(143)] diff --git a/docs/tx/unstake-all-alpha.mdx b/docs/tx/unstake-all-alpha.mdx index 264e582a71..6c96c92213 100644 --- a/docs/tx/unstake-all-alpha.mdx +++ b/docs/tx/unstake-all-alpha.mdx @@ -16,7 +16,7 @@ incur slippage. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all_alpha`](/code/pallets/subtensor/src/macros/dispatches.rs#L1240-L1244) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all_alpha`](/code/pallets/subtensor/src/macros/dispatches.rs#L1235-L1239) | ## Parameters @@ -65,7 +65,7 @@ result = sub.execute_tool("unstake_all_alpha", {...}, wallet) ## On-chain implementation -`SubtensorModule.unstake_all_alpha` — [`pallets/subtensor/src/macros/dispatches.rs#L1242`](/code/pallets/subtensor/src/macros/dispatches.rs#L1240-L1244): +`SubtensorModule.unstake_all_alpha` — [`pallets/subtensor/src/macros/dispatches.rs#L1237`](/code/pallets/subtensor/src/macros/dispatches.rs#L1235-L1239): ```rust #[pallet::call_index(84)] diff --git a/docs/tx/unstake-all.mdx b/docs/tx/unstake-all.mdx index 535243aa60..59c75bb442 100644 --- a/docs/tx/unstake-all.mdx +++ b/docs/tx/unstake-all.mdx @@ -17,7 +17,7 @@ staked. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all`](/code/pallets/subtensor/src/macros/dispatches.rs#L1216-L1220) | +| `coldkey` | signed account (pallet role may apply) | SubtensorModule | [`SubtensorModule.unstake_all`](/code/pallets/subtensor/src/macros/dispatches.rs#L1211-L1215) | ## Parameters @@ -66,7 +66,7 @@ result = sub.execute_tool("unstake_all", {...}, wallet) ## On-chain implementation -`SubtensorModule.unstake_all` — [`pallets/subtensor/src/macros/dispatches.rs#L1218`](/code/pallets/subtensor/src/macros/dispatches.rs#L1216-L1220): +`SubtensorModule.unstake_all` — [`pallets/subtensor/src/macros/dispatches.rs#L1213`](/code/pallets/subtensor/src/macros/dispatches.rs#L1211-L1215): ```rust #[pallet::call_index(83)] diff --git a/docs/tx/update-symbol.mdx b/docs/tx/update-symbol.mdx index 22496ffe11..e028138654 100644 --- a/docs/tx/update-symbol.mdx +++ b/docs/tx/update-symbol.mdx @@ -15,7 +15,7 @@ stake, and emissions are untouched. | Signer | Origin | Pallet | Wraps | | --- | --- | --- | --- | -| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.update_symbol`](/code/pallets/subtensor/src/macros/dispatches.rs#L1725-L1742) | +| `coldkey` | subnet owner | SubtensorModule | [`SubtensorModule.update_symbol`](/code/pallets/subtensor/src/macros/dispatches.rs#L1720-L1737) | ## Parameters @@ -67,7 +67,7 @@ result = sub.execute_tool("update_symbol", {...}, wallet) ## On-chain implementation -`SubtensorModule.update_symbol` — [`pallets/subtensor/src/macros/dispatches.rs#L1727`](/code/pallets/subtensor/src/macros/dispatches.rs#L1725-L1742): +`SubtensorModule.update_symbol` — [`pallets/subtensor/src/macros/dispatches.rs#L1722`](/code/pallets/subtensor/src/macros/dispatches.rs#L1720-L1737): ```rust #[pallet::call_index(112)] diff --git a/pallets/subtensor/src/macros/dispatches.rs b/pallets/subtensor/src/macros/dispatches.rs index e697bbe1b3..4ce0c69be6 100644 --- a/pallets/subtensor/src/macros/dispatches.rs +++ b/pallets/subtensor/src/macros/dispatches.rs @@ -1076,12 +1076,7 @@ mod dispatches { /// 8. **New Children Assignment**: Assigns the new child to the hotkey and updates the parent list for the new child. // TODO: Benchmark this call #[pallet::call_index(67)] - #[pallet::weight(( - ::WeightInfo::set_children(children.len() as u32) - .saturating_add(crate::Pallet::::set_children_cycle_check_weight()), - DispatchClass::Normal, - Pays::Yes - ))] + #[pallet::weight((::WeightInfo::set_children(children.len() as u32), DispatchClass::Normal, Pays::Yes))] pub fn set_children( origin: OriginFor, hotkey: T::AccountId, diff --git a/pallets/subtensor/src/staking/set_children.rs b/pallets/subtensor/src/staking/set_children.rs index 949d9bff0d..2c516eda5d 100644 --- a/pallets/subtensor/src/staking/set_children.rs +++ b/pallets/subtensor/src/staking/set_children.rs @@ -4,13 +4,6 @@ use sp_runtime::PerU16; use sp_std::collections::{btree_map::BTreeMap, btree_set::BTreeSet}; use subtensor_runtime_common::NetUid; -/// Maximum number of existing child edges followed from a proposed child. -/// Keeping this deliberately small bounds both execution time and hierarchy depth. -pub const MAX_CHILDKEY_REACHABILITY_DEPTH: u8 = 4; - -/// Maximum number of distinct hotkeys inspected by one cycle check. -pub const MAX_CHILDKEY_REACHABILITY_NODES: u32 = 32; - pub struct PCRelations { /// The distinguished `hotkey` this structure is built around. pivot: T::AccountId, @@ -164,67 +157,6 @@ impl PCRelations { } impl Pallet { - /// Weight reserved for the bounded cycle check. Each visited hotkey reads - /// `PendingChildKeys` and, when no pending replacement exists, `ChildKeys`. - pub fn set_children_cycle_check_weight() -> Weight { - T::DbWeight::get().reads(MAX_CHILDKEY_REACHABILITY_NODES.saturating_mul(2).into()) - } - - /// Reject a proposed `parent -> children` update when a child can already - /// reach `parent`. Pending child updates take precedence over active edges, - /// matching the graph that will exist once the pending queue is applied. - /// - /// The walk fails closed when either bound is reached. This prevents an - /// attacker from constructing an expensive graph and also places a small - /// upper bound on childkey hierarchy depth. - fn ensure_bounded_childkey_reachability( - parent: &T::AccountId, - netuid: NetUid, - children: &[(u64, T::AccountId)], - ) -> DispatchResult { - let mut seen = BTreeSet::::new(); - let mut stack = Vec::<(T::AccountId, u8)>::new(); - - for (_, child) in children { - ensure!(child != parent, Error::::InvalidChild); - if seen.insert(child.clone()) { - ensure!( - seen.len() <= MAX_CHILDKEY_REACHABILITY_NODES as usize, - Error::::ChildParentInconsistency - ); - stack.push((child.clone(), 0)); - } - } - - while let Some((hotkey, depth)) = stack.pop() { - let descendants = PendingChildKeys::::try_get(netuid, &hotkey) - .map(|(pending, _)| pending) - .unwrap_or_else(|_| ChildKeys::::get(&hotkey, netuid)); - - if descendants.is_empty() { - continue; - } - - ensure!( - depth < MAX_CHILDKEY_REACHABILITY_DEPTH, - Error::::ChildParentInconsistency - ); - - for (_, descendant) in descendants { - ensure!(descendant != *parent, Error::::ChildParentInconsistency); - if seen.insert(descendant.clone()) { - ensure!( - seen.len() <= MAX_CHILDKEY_REACHABILITY_NODES as usize, - Error::::ChildParentInconsistency - ); - stack.push((descendant, depth.saturating_add(1))); - } - } - } - - Ok(()) - } - /// Set childkeys vector making sure there are no empty vectors in the state fn set_childkeys(parent: T::AccountId, netuid: NetUid, childkey_vec: Vec<(u64, T::AccountId)>) { if childkey_vec.is_empty() { @@ -593,7 +525,6 @@ impl Pallet { // - Bipartite separation (no A <-> B relations) let relations = Self::load_child_parent_relations(&hotkey, netuid)?; relations.ensure_pending_consistency(&children)?; - Self::ensure_bounded_childkey_reachability(&hotkey, netuid, &children)?; // Check that the parent key has at least the minimum own stake // if children vector is not empty diff --git a/pallets/subtensor/src/tests/children.rs b/pallets/subtensor/src/tests/children.rs index 46d0ffd9ba..703ecb4807 100644 --- a/pallets/subtensor/src/tests/children.rs +++ b/pallets/subtensor/src/tests/children.rs @@ -44,103 +44,6 @@ fn test_do_set_child_singular_success() { }); } -#[test] -fn test_set_children_rejects_three_node_active_cycle() { - new_test_ext(1).execute_with(|| { - let netuid = NetUid::from(1); - let coldkey_a = U256::from(1); - let hotkey_a = U256::from(2); - let coldkey_b = U256::from(3); - let hotkey_b = U256::from(4); - let coldkey_c = U256::from(5); - let hotkey_c = U256::from(6); - - add_network(netuid, 13, 0); - register_ok_neuron(netuid, hotkey_a, coldkey_a, 0); - register_ok_neuron(netuid, hotkey_b, coldkey_b, 0); - register_ok_neuron(netuid, hotkey_c, coldkey_c, 0); - - mock_schedule_children(&coldkey_a, &hotkey_a, netuid, &[(u64::MAX, hotkey_b)]); - mock_schedule_children(&coldkey_b, &hotkey_b, netuid, &[(u64::MAX, hotkey_c)]); - - assert_noop!( - SubtensorModule::do_schedule_children( - RuntimeOrigin::signed(coldkey_c), - hotkey_c, - netuid, - vec![(u64::MAX, hotkey_a)], - ), - Error::::ChildParentInconsistency - ); - }); -} - -#[test] -fn test_set_children_rejects_three_node_pending_cycle() { - new_test_ext(1).execute_with(|| { - let netuid = NetUid::from(1); - let coldkey_a = U256::from(11); - let hotkey_a = U256::from(12); - let coldkey_b = U256::from(13); - let hotkey_b = U256::from(14); - let coldkey_c = U256::from(15); - let hotkey_c = U256::from(16); - - add_network(netuid, 13, 0); - SubtokenEnabled::::insert(netuid, true); - register_ok_neuron(netuid, hotkey_a, coldkey_a, 0); - register_ok_neuron(netuid, hotkey_b, coldkey_b, 0); - register_ok_neuron(netuid, hotkey_c, coldkey_c, 0); - - mock_schedule_children(&coldkey_a, &hotkey_a, netuid, &[(u64::MAX, hotkey_b)]); - mock_schedule_children(&coldkey_b, &hotkey_b, netuid, &[(u64::MAX, hotkey_c)]); - - assert_noop!( - SubtensorModule::do_schedule_children( - RuntimeOrigin::signed(coldkey_c), - hotkey_c, - netuid, - vec![(u64::MAX, hotkey_a)], - ), - Error::::ChildParentInconsistency - ); - }); -} - -#[test] -fn test_set_children_rejects_hierarchy_beyond_reachability_depth() { - new_test_ext(1).execute_with(|| { - let netuid = NetUid::from(1); - let coldkeys: Vec = (21..28).map(U256::from).collect(); - let hotkeys: Vec = (31..38).map(U256::from).collect(); - - add_network(netuid, 13, 0); - for (coldkey, hotkey) in coldkeys.iter().zip(hotkeys.iter()) { - register_ok_neuron(netuid, *hotkey, *coldkey, 0); - } - - // Build from the tail so every accepted update is within the bound. - for index in (1..hotkeys.len() - 1).rev() { - mock_schedule_children( - &coldkeys[index], - &hotkeys[index], - netuid, - &[(u64::MAX, hotkeys[index + 1])], - ); - } - - assert_noop!( - SubtensorModule::do_schedule_children( - RuntimeOrigin::signed(coldkeys[0]), - hotkeys[0], - netuid, - vec![(u64::MAX, hotkeys[1])], - ), - Error::::ChildParentInconsistency - ); - }); -} - // 2: Attempt to set child in non-existent network // SKIP_WASM_BUILD=1 RUST_LOG=debug cargo test --package pallet-subtensor --lib -- tests::children::test_do_set_child_singular_network_does_not_exist --exact --show-output --nocapture #[test] diff --git a/website/apps/bittensor-website/public/catalog/intents.json b/website/apps/bittensor-website/public/catalog/intents.json index c50db921d4..d8e31171a1 100644 --- a/website/apps/bittensor-website/public/catalog/intents.json +++ b/website/apps/bittensor-website/public/catalog/intents.json @@ -56,9 +56,9 @@ "pallet": "SubtensorModule", "call": "add_collateral", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2457, - "end_line": 2465, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2455-L2465", + "line": 2452, + "end_line": 2460, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2450-L2460", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -188,9 +188,9 @@ "pallet": "SubtensorModule", "call": "add_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1399, - "end_line": 1416, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1397-L1416", + "line": 1394, + "end_line": 1411, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1392-L1411", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -258,9 +258,9 @@ "pallet": "SubtensorModule", "call": "add_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1399, - "end_line": 1416, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1397-L1416", + "line": 1394, + "end_line": 1411, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1392-L1411", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -300,9 +300,9 @@ "pallet": "SubtensorModule", "call": "announce_coldkey_swap", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1993, - "end_line": 2019, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1991-L2019", + "line": 1988, + "end_line": 2014, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1986-L2014", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -357,9 +357,9 @@ "pallet": "SubtensorModule", "call": "associate_evm_key", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1585, - "end_line": 1593, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1579-L1593", + "line": 1580, + "end_line": 1588, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1574-L1588", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -397,9 +397,9 @@ "pallet": "SubtensorModule", "call": "try_associate_hotkey", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1527, - "end_line": 1533, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1525-L1533", + "line": 1522, + "end_line": 1528, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1520-L1528", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -530,9 +530,9 @@ "pallet": "SubtensorModule", "call": "claim_root", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1897, - "end_line": 1913, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1895-L1913", + "line": 1892, + "end_line": 1908, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1890-L1908", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -565,9 +565,9 @@ "pallet": "SubtensorModule", "call": "clear_coldkey_swap_announcement", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2192, - "end_line": 2207, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2190-L2207", + "line": 2187, + "end_line": 2202, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2185-L2202", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -633,9 +633,9 @@ "pallet": "SubtensorModule", "call": "commit_timelocked_mechanism_weights", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1858, - "end_line": 1874, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1856-L1874", + "line": 1853, + "end_line": 1869, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1851-L1869", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -914,9 +914,9 @@ "pallet": "SubtensorModule", "call": "dispute_coldkey_swap", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2062, - "end_line": 2079, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2060-L2079", + "line": 2057, + "end_line": 2074, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2055-L2074", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1318,9 +1318,9 @@ "pallet": "SubtensorModule", "call": "lock_stake", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2264, - "end_line": 2272, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2262-L2272", + "line": 2259, + "end_line": 2267, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2257-L2267", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1365,9 +1365,9 @@ "pallet": "SubtensorModule", "call": "move_lock", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2288, - "end_line": 2295, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2286-L2295", + "line": 2283, + "end_line": 2290, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2281-L2290", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1436,9 +1436,9 @@ "pallet": "SubtensorModule", "call": "move_stake", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1263, - "end_line": 1279, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1261-L1279", + "line": 1258, + "end_line": 1274, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1256-L1274", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1700,9 +1700,9 @@ "pallet": "SubtensorModule", "call": "register_leased_network", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1679, - "end_line": 1685, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1677-L1685", + "line": 1674, + "end_line": 1680, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1672-L1680", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1913,9 +1913,9 @@ "pallet": "SubtensorModule", "call": "remove_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1452, - "end_line": 1468, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1450-L1468", + "line": 1447, + "end_line": 1463, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1445-L1463", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -1989,9 +1989,9 @@ "pallet": "SubtensorModule", "call": "remove_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1452, - "end_line": 1468, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1450-L1468", + "line": 1447, + "end_line": 1463, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1445-L1463", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -2368,9 +2368,9 @@ "pallet": "SubtensorModule", "call": "set_coldkey_auto_stake_hotkey", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1792, - "end_line": 1832, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1790-L1832", + "line": 1787, + "end_line": 1827, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1785-L1827", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -2474,9 +2474,9 @@ "pallet": "SubtensorModule", "call": "set_children", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1085, - "end_line": 1093, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1078-L1093", + "line": 1080, + "end_line": 1088, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1078-L1088", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3041,9 +3041,9 @@ "pallet": "SubtensorModule", "call": "set_identity", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1126, - "end_line": 1146, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1124-L1146", + "line": 1121, + "end_line": 1141, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1119-L1141", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3148,9 +3148,9 @@ "pallet": "SubtensorModule", "call": "set_min_collateral", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2492, - "end_line": 2499, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2490-L2499", + "line": 2487, + "end_line": 2494, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2485-L2494", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3195,9 +3195,9 @@ "pallet": "SubtensorModule", "call": "set_perpetual_lock", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2304, - "end_line": 2311, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2302-L2311", + "line": 2299, + "end_line": 2306, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2297-L2306", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3239,9 +3239,9 @@ "pallet": "SubtensorModule", "call": "set_root_claim_type", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1924, - "end_line": 1938, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1922-L1938", + "line": 1919, + "end_line": 1933, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1917-L1933", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3368,9 +3368,9 @@ "pallet": "SubtensorModule", "call": "set_subnet_identity", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1161, - "end_line": 1185, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1159-L1185", + "line": 1156, + "end_line": 1180, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1154-L1180", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3508,9 +3508,9 @@ "pallet": "SubtensorModule", "call": "commit_timelocked_mechanism_weights", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1858, - "end_line": 1874, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1856-L1874", + "line": 1853, + "end_line": 1869, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1851-L1869", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3573,9 +3573,9 @@ "pallet": "SubtensorModule", "call": "add_stake_burn", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2176, - "end_line": 2184, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2174-L2184", + "line": 2171, + "end_line": 2179, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2169-L2179", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3615,9 +3615,9 @@ "pallet": "SubtensorModule", "call": "start_call", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1545, - "end_line": 1548, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1543-L1548", + "line": 1540, + "end_line": 1543, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1538-L1543", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3657,9 +3657,9 @@ "pallet": "SubtensorModule", "call": "swap_coldkey_announced", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2031, - "end_line": 2051, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2029-L2051", + "line": 2026, + "end_line": 2046, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2024-L2046", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3785,18 +3785,18 @@ "pallet": "SubtensorModule", "call": "swap_stake", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1349, - "end_line": 1363, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1347-L1363", + "line": 1344, + "end_line": 1358, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1342-L1358", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" }, { "pallet": "SubtensorModule", "call": "swap_stake_limit", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1497, - "end_line": 1515, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1495-L1515", + "line": 1492, + "end_line": 1510, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1490-L1510", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -3840,9 +3840,9 @@ "pallet": "SubtensorModule", "call": "terminate_lease", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1702, - "end_line": 1708, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1700-L1708", + "line": 1697, + "end_line": 1703, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1695-L1703", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -4017,18 +4017,18 @@ "pallet": "SubtensorModule", "call": "transfer_stake", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1307, - "end_line": 1323, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1305-L1323", + "line": 1302, + "end_line": 1318, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1300-L1318", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" }, { "pallet": "SubtensorModule", "call": "transfer_stake_and_hotkey", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 2399, - "end_line": 2417, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2397-L2417", + "line": 2394, + "end_line": 2412, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L2392-L2412", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -4115,9 +4115,9 @@ "pallet": "SubtensorModule", "call": "unstake_all", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1218, - "end_line": 1220, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1216-L1220", + "line": 1213, + "end_line": 1215, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1211-L1215", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -4157,9 +4157,9 @@ "pallet": "SubtensorModule", "call": "unstake_all_alpha", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1242, - "end_line": 1244, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1240-L1244", + "line": 1237, + "end_line": 1239, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1235-L1239", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] @@ -4363,9 +4363,9 @@ "pallet": "SubtensorModule", "call": "update_symbol", "path": "pallets/subtensor/src/macros/dispatches.rs", - "line": 1727, - "end_line": 1742, - "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1725-L1742", + "line": 1722, + "end_line": 1737, + "url": "/code/pallets/subtensor/src/macros/dispatches.rs#L1720-L1737", "raw_url": "/code/raw/pallets/subtensor/src/macros/dispatches.rs" } ] From 82aea7e2c7b0c5e1ab819d80fc5fb5929a5a5288 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 10:35:53 -0700 Subject: [PATCH 52/63] Remove trusted docs preview deployment --- .github/workflows/deploy-docs-preview.yml | 330 --------------------- .github/workflows/request-docs-preview.yml | 137 --------- 2 files changed, 467 deletions(-) delete mode 100644 .github/workflows/deploy-docs-preview.yml delete mode 100644 .github/workflows/request-docs-preview.yml diff --git a/.github/workflows/deploy-docs-preview.yml b/.github/workflows/deploy-docs-preview.yml deleted file mode 100644 index e1849a6ea6..0000000000 --- a/.github/workflows/deploy-docs-preview.yml +++ /dev/null @@ -1,330 +0,0 @@ -name: Deploy Docs Preview - -# Trusted half of docs previews. Always taken from the default branch -# (`workflow_run`), so a PR cannot rewrite these steps to exfiltrate secrets. -# -# Never checks out PR HEAD and never runs PR-controlled scripts. Consumes only -# the sealed artifact from `Request Docs Preview`, then deploys / aliases / -# comments (or cleans up) with Vercel + GoDaddy credentials. - -on: - workflow_run: - workflows: ["Request Docs Preview"] - types: [completed] - -permissions: - actions: read - contents: read - pull-requests: write - -jobs: - deploy: - name: Deploy or clean up docs preview - if: > - github.event.workflow_run.conclusion == 'success' && - github.event.workflow_run.event == 'pull_request' && - github.event.workflow_run.head_repository.full_name == github.repository - runs-on: [self-hosted, fireactions-turbo-8] - concurrency: - group: docs-preview-domain-dns - cancel-in-progress: false - # No secrets at job scope — each step opts into only what it needs so - # `npm install` / artifact extract never see Vercel/GoDaddy/GH credentials. - env: - DOCS_DOMAIN: ${{ vars.DOCS_DOMAIN || 'bittensor.com' }} - steps: - - name: Resolve PR number and download artifact - id: meta - env: - # Pass event fields via env (never interpolate into the script body) - # so a crafted PR branch/title cannot break out of a shell quote. - # GH_TOKEN here is only for `gh run download` of our own artifact. - GH_TOKEN: ${{ github.token }} - WORKFLOW_PULL_REQUESTS: ${{ toJSON(github.event.workflow_run.pull_requests) }} - WORKFLOW_HEAD_SHA: ${{ github.event.workflow_run.head_sha }} - WORKFLOW_RUN_ID: ${{ github.event.workflow_run.id }} - REPO: ${{ github.repository }} - run: | - set -euo pipefail - # Prefer the pull_requests list; fall back to the commit→PR API when - # workflow_run omits it (race on just-opened PRs). - pr=$(node -e ' - const ev = JSON.parse(process.env.WORKFLOW_PULL_REQUESTS || "[]"); - if (Array.isArray(ev) && ev[0] && ev[0].number) { - process.stdout.write(String(ev[0].number)); - } - ') - if [ -z "${pr}" ]; then - pr=$(gh api \ - "repos/${REPO}/commits/${WORKFLOW_HEAD_SHA}/pulls" \ - --jq '.[0].number // empty') - fi - if [ -z "${pr}" ]; then - echo "Could not resolve PR number for workflow_run ${WORKFLOW_RUN_ID}" >&2 - exit 1 - fi - # PR numbers are digits only — reject anything else before using in paths. - case "${pr}" in - ''|*[!0-9]*) echo "invalid PR number: ${pr}" >&2; exit 1 ;; - esac - echo "pr=$pr" >> "$GITHUB_OUTPUT" - echo "alias=pr-${pr}.preview.${DOCS_DOMAIN}" >> "$GITHUB_OUTPUT" - echo "url=https://pr-${pr}.preview.${DOCS_DOMAIN}" >> "$GITHUB_OUTPUT" - - # download-artifact@v4 needs the producing run id for workflow_run. - mkdir -p artifact - gh run download "${WORKFLOW_RUN_ID}" \ - --repo "${REPO}" \ - --name "docs-preview-${pr}" \ - --dir artifact - action=$(tr -d '[:space:]' < artifact/docs-preview-action.txt) - echo "action=$action" >> "$GITHUB_OUTPUT" - - - name: Set up Node.js - if: steps.meta.outputs.action == 'deploy' - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 - with: - node-version: 20 - - - name: Install vercel CLI (no secrets) - if: steps.meta.outputs.action == 'deploy' - id: vercel_cli - run: | - set -euo pipefail - # Clean prefix + ignore-scripts: no deploy credentials in this step's - # environment, and no package lifecycle scripts from the registry. - CLEAN_CLI="${RUNNER_TEMP}/vercel-cli" - mkdir -p "$CLEAN_CLI" - npm install --prefix "$CLEAN_CLI" --no-save --no-package-lock --ignore-scripts vercel@56.4.1 - test -x "$CLEAN_CLI/node_modules/.bin/vercel" - echo "dir=$CLEAN_CLI" >> "$GITHUB_OUTPUT" - - - name: Extract sealed archive (no secrets) - if: steps.meta.outputs.action == 'deploy' - id: extract - run: | - set -euo pipefail - DEPLOY_ROOT="${RUNNER_TEMP}/docs-preview-deploy" - rm -rf "$DEPLOY_ROOT" - mkdir -p "$DEPLOY_ROOT" - ARCHIVE="$(pwd)/artifact/docs-preview-sealed.tgz" - # Heredoc body must be unindented — leading spaces would SyntaxError. - # Quotas bound a hostile PR archive before it can fill the runner disk. - MAX_ARCHIVE_BYTES=$((2 * 1024 * 1024 * 1024)) # 2 GiB compressed - MAX_MEMBERS=400000 - MAX_TOTAL_UNCOMPRESSED=$((4 * 1024 * 1024 * 1024)) # 4 GiB - MAX_FILE_BYTES=$((512 * 1024 * 1024)) # 512 MiB per member - archive_bytes=$(wc -c < "$ARCHIVE") - if [ "$archive_bytes" -gt "$MAX_ARCHIVE_BYTES" ]; then - echo "archive too large: ${archive_bytes} bytes" >&2 - exit 1 - fi - python3 - "$ARCHIVE" "$DEPLOY_ROOT" "$MAX_MEMBERS" "$MAX_TOTAL_UNCOMPRESSED" "$MAX_FILE_BYTES" <<'PY' -import os, sys, tarfile - -archive, dest = sys.argv[1], sys.argv[2] -max_members = int(sys.argv[3]) -max_total = int(sys.argv[4]) -max_file = int(sys.argv[5]) -dest = os.path.realpath(dest) -allowed_prefixes = (".vercel/", "website/node_modules/") - -with tarfile.open(archive, "r:gz") as tf: - members = tf.getmembers() - if len(members) > max_members: - raise SystemExit(f"too many members: {len(members)} > {max_members}") - total = 0 - for member in members: - name = member.name.lstrip("./") - if name.startswith("/") or name.startswith("\\") or ".." in name.split("/"): - raise SystemExit(f"refusing unsafe path: {member.name!r}") - if not name.startswith(allowed_prefixes): - raise SystemExit(f"refusing unexpected path: {member.name!r}") - if member.issym() or member.islnk(): - raise SystemExit(f"refusing link member: {member.name!r}") - if not (member.isfile() or member.isdir()): - raise SystemExit(f"refusing non-file member: {member.name!r}") - size = member.size or 0 - if size > max_file: - raise SystemExit(f"member too large: {member.name!r} ({size} bytes)") - total += size - if total > max_total: - raise SystemExit(f"uncompressed total too large: {total} > {max_total}") - target = os.path.realpath(os.path.join(dest, name)) - if target != dest and not target.startswith(dest + os.sep): - raise SystemExit(f"refusing path escape: {member.name!r}") - try: - tf.extractall(dest, filter="data") - except TypeError: - tf.extractall(dest) -PY - test -f "$DEPLOY_ROOT/.vercel/output/functions/_global-error.func/.vc-config.json" - test -d "$DEPLOY_ROOT/website/node_modules" - echo "root=$DEPLOY_ROOT" >> "$GITHUB_OUTPUT" - - - name: Deploy prebuilt - if: steps.meta.outputs.action == 'deploy' - id: deploy - env: - PR_NUMBER: ${{ steps.meta.outputs.pr }} - ALIAS: ${{ steps.meta.outputs.alias }} - CLEAN_CLI: ${{ steps.vercel_cli.outputs.dir }} - DEPLOY_ROOT: ${{ steps.extract.outputs.root }} - VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} - VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} - VERCEL_PROJECT_ID: ${{ secrets.VERCEL_DOCS_PROJECT_ID }} - run: | - set -euo pipefail - VERCEL_BIN="$CLEAN_CLI/node_modules/.bin/vercel" - test -x "$VERCEL_BIN" - # Keep PATH free of the artifact tree. - export PATH="${CLEAN_CLI}/node_modules/.bin:/usr/local/bin:/usr/bin:/bin" - cd "$DEPLOY_ROOT" - mkdir -p website/apps/bittensor-website .vercel - node -e ' - const fs = require("fs"); - fs.writeFileSync(".vercel/project.json", JSON.stringify({ - projectId: process.env.VERCEL_PROJECT_ID, - orgId: process.env.VERCEL_ORG_ID, - })); - ' - - url=$("$VERCEL_BIN" deploy --prebuilt --archive=tgz --token "$VERCEL_TOKEN") - echo "Deployed: $url" - - dep_id=$(curl -sf -H "Authorization: Bearer $VERCEL_TOKEN" \ - "https://api.vercel.com/v13/deployments/${url#https://}?teamId=$VERCEL_ORG_ID" \ - | node -e 'let s="";process.stdin.on("data",d=>s+=d);process.stdin.on("end",()=>process.stdout.write(JSON.parse(s).id))') - echo "deployment_id=$dep_id" >> "$GITHUB_OUTPUT" - - - name: Register domain, alias deployment - if: steps.meta.outputs.action == 'deploy' - env: - ALIAS: ${{ steps.meta.outputs.alias }} - DEPLOYMENT_ID: ${{ steps.deploy.outputs.deployment_id }} - VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} - VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} - VERCEL_PROJECT_ID: ${{ secrets.VERCEL_DOCS_PROJECT_ID }} - GODADDY_API_KEY: ${{ secrets.GODADDY_API_KEY }} - GODADDY_API_SECRET: ${{ secrets.GODADDY_API_SECRET }} - run: | - set -euo pipefail - - resp=$(curl -sS -X POST \ - -H "Authorization: Bearer $VERCEL_TOKEN" \ - -H "Content-Type: application/json" \ - -d "{\"name\":\"$ALIAS\"}" \ - "https://api.vercel.com/v10/projects/${VERCEL_PROJECT_ID}/domains?teamId=${VERCEL_ORG_ID}" \ - || true) - if ! echo "$resp" | node -e 'const d=JSON.parse(require("fs").readFileSync(0,"utf8")); if(!d.name) process.exit(1)'; then - resp=$(curl -sf -H "Authorization: Bearer $VERCEL_TOKEN" \ - "https://api.vercel.com/v9/projects/${VERCEL_PROJECT_ID}/domains/${ALIAS}?teamId=${VERCEL_ORG_ID}") - fi - - verified=$(echo "$resp" | node -pe 'JSON.parse(require("fs").readFileSync(0,"utf8")).verified === true ? "yes" : "no"') - if [ "$verified" != "yes" ]; then - # Use `node -e`, not `-pe`: `-p` also prints the expression - # result, and `stdout.write` returns true, which corrupted the - # TXT value to "...true" and broke Vercel verification. - challenge=$(echo "$resp" | node -e ' - const d = JSON.parse(require("fs").readFileSync(0, "utf8")); - const v = (d.verification || []).find((x) => x.type === "TXT"); - if (!v) { process.stderr.write("no TXT challenge\n"); process.exit(1); } - process.stdout.write(v.value); - ') - - existing=$(curl -sf \ - -H "Authorization: sso-key ${GODADDY_API_KEY}:${GODADDY_API_SECRET}" \ - "https://api.godaddy.com/v1/domains/${DOCS_DOMAIN}/records/TXT/_vercel") - payload=$(EXISTING_JSON="$existing" CHALLENGE="$challenge" node -e ' - const existing = JSON.parse(process.env.EXISTING_JSON); - const values = new Set(existing.map((r) => r.data)); - values.add(process.env.CHALLENGE); - process.stdout.write(JSON.stringify( - [...values].sort().map((data) => ({ data, ttl: 600 })) - )); - ') - curl -sf -X PUT \ - -H "Authorization: sso-key ${GODADDY_API_KEY}:${GODADDY_API_SECRET}" \ - -H "Content-Type: application/json" \ - -d "$payload" \ - "https://api.godaddy.com/v1/domains/${DOCS_DOMAIN}/records/TXT/_vercel" > /dev/null - - verified=no - for i in 1 2 3 4 5 6 7 8 9 10; do - verify=$(curl -sS -X POST \ - -H "Authorization: Bearer $VERCEL_TOKEN" \ - "https://api.vercel.com/v9/projects/${VERCEL_PROJECT_ID}/domains/${ALIAS}/verify?teamId=${VERCEL_ORG_ID}" \ - || true) - if echo "$verify" | node -pe 'JSON.parse(require("fs").readFileSync(0,"utf8")).verified === true ? "yes" : "no"' | grep -q yes; then - verified=yes - break - fi - sleep 15 - done - if [ "$verified" != "yes" ]; then - echo "Timed out verifying $ALIAS" >&2 - echo "$verify" >&2 - exit 1 - fi - fi - - curl -sf -X POST \ - -H "Authorization: Bearer $VERCEL_TOKEN" \ - -H "Content-Type: application/json" \ - -d "{\"alias\":\"$ALIAS\"}" \ - "https://api.vercel.com/v2/deployments/${DEPLOYMENT_ID}/aliases?teamId=${VERCEL_ORG_ID}" > /dev/null - - echo "Aliased to https://${ALIAS}" >> "$GITHUB_STEP_SUMMARY" - - - name: Comment preview URL on PR - if: steps.meta.outputs.action == 'deploy' - env: - PR_NUMBER: ${{ steps.meta.outputs.pr }} - PREVIEW_URL: ${{ steps.meta.outputs.url }} - GH_TOKEN: ${{ github.token }} - run: | - marker="" - body=$(printf '%s\n' \ - "${marker}" \ - "### Docs preview" \ - "" \ - "${PREVIEW_URL}/docs" \ - "" \ - "Stable for this PR — updates on each push that touches \`docs/**\` or \`website/**\`.") - - existing=$(gh api \ - "repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/comments" \ - --jq ".[] | select(.body | contains(\"${marker}\")) | .id" \ - | head -n 1) - - if [ -n "$existing" ]; then - gh api \ - --method PATCH \ - "repos/${GITHUB_REPOSITORY}/issues/comments/${existing}" \ - -f body="$body" > /dev/null - else - gh api \ - --method POST \ - "repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/comments" \ - -f body="$body" > /dev/null - fi - - - name: Remove PR docs preview domain - if: steps.meta.outputs.action == 'cleanup' - env: - ALIAS: ${{ steps.meta.outputs.alias }} - VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} - VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} - VERCEL_PROJECT_ID: ${{ secrets.VERCEL_DOCS_PROJECT_ID }} - run: | - set -euo pipefail - code=$(curl -sS -o /tmp/del.json -w "%{http_code}" -X DELETE \ - -H "Authorization: Bearer $VERCEL_TOKEN" \ - "https://api.vercel.com/v9/projects/${VERCEL_PROJECT_ID}/domains/${ALIAS}?teamId=${VERCEL_ORG_ID}" \ - || true) - if [ "$code" = "200" ] || [ "$code" = "204" ]; then - echo "Removed ${ALIAS} from Vercel project" >> "$GITHUB_STEP_SUMMARY" - else - echo "No project domain to remove for ${ALIAS} (HTTP ${code})" >> "$GITHUB_STEP_SUMMARY" - fi diff --git a/.github/workflows/request-docs-preview.yml b/.github/workflows/request-docs-preview.yml deleted file mode 100644 index bf99432e77..0000000000 --- a/.github/workflows/request-docs-preview.yml +++ /dev/null @@ -1,137 +0,0 @@ -name: Request Docs Preview - -# Secret-free PR gate for docs previews. -# -# Trust boundary: this workflow runs untrusted PR HEAD and must never receive -# VERCEL_TOKEN, GoDaddy credentials, or any other deploy secret. Same-repo PRs -# can edit this file; keeping it credential-free closes that path. -# -# Build output is sealed and handed to the default-branch -# `Deploy Docs Preview` workflow (`workflow_run`), which alone holds secrets -# and never checks out or executes PR code. -# -# Requires repository variables (not secrets — these are public project IDs): -# VERCEL_ORG_ID -# VERCEL_DOCS_PROJECT_ID - -on: - pull_request: - types: [opened, synchronize, reopened, closed] - paths: - - "docs/**" - - "website/**" - - ".github/workflows/request-docs-preview.yml" - -permissions: - contents: read - -jobs: - build: - name: Build PR docs preview (no secrets) - if: > - github.event.action != 'closed' && - !github.event.pull_request.head.repo.fork && - github.event.pull_request.head.repo.full_name == github.repository - runs-on: [self-hosted, fireactions-turbo-8] - concurrency: - group: request-docs-preview-build-${{ github.event.pull_request.number }} - cancel-in-progress: true - env: - # Public project identifiers only — never a deploy token. - VERCEL_ORG_ID: ${{ vars.VERCEL_ORG_ID }} - VERCEL_PROJECT_ID: ${{ vars.VERCEL_DOCS_PROJECT_ID }} - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.head.sha }} - - - name: Require public Vercel project vars - run: | - set -euo pipefail - if [ -z "${VERCEL_ORG_ID}" ] || [ -z "${VERCEL_PROJECT_ID}" ]; then - echo "Set repository variables VERCEL_ORG_ID and VERCEL_DOCS_PROJECT_ID" >&2 - echo "(project/org IDs are not secrets; the deploy token stays on the trusted workflow)." >&2 - exit 1 - fi - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - - - name: Enable corepack (yarn 4) - run: corepack enable - - - name: Assemble Vercel prebuilt output (no deploy token) - run: | - set -euo pipefail - mkdir -p .vercel - # Full project settings (framework / rootDirectory / node) — same - # payload `vercel pull` writes. IDs + settings are not secrets; the - # deploy token stays off this workflow. - node -e ' - const fs = require("fs"); - fs.writeFileSync(".vercel/project.json", JSON.stringify({ - projectId: process.env.VERCEL_PROJECT_ID, - orgId: process.env.VERCEL_ORG_ID, - projectName: "subtensor", - settings: { - framework: "nextjs", - devCommand: null, - installCommand: null, - buildCommand: null, - outputDirectory: null, - rootDirectory: "website/apps/bittensor-website", - directoryListing: false, - nodeVersion: "24.x", - }, - }, null, 2)); - ' - # Local assemble only — do not pass --token. - npx --yes vercel@56.4.1 build - test -f .vercel/output/functions/_global-error.func/.vc-config.json - test -d website/node_modules - - - name: Seal prebuilt output for trusted deploy - run: | - set -euo pipefail - # Include website/node_modules: Next NFT traces resolve there during - # `vercel deploy --prebuilt`. Dereference links so the trusted - # extractor never has to honor PR-controlled symlinks/hardlinks. - tar --create --gzip --file=docs-preview-sealed.tgz \ - --hard-dereference --dereference \ - .vercel/output website/node_modules - printf '%s\n' "${{ github.event.pull_request.number }}" > docs-preview-pr-number.txt - printf '%s\n' "deploy" > docs-preview-action.txt - - - name: Upload sealed prebuilt output - uses: actions/upload-artifact@v4 - with: - name: docs-preview-${{ github.event.pull_request.number }} - path: | - docs-preview-sealed.tgz - docs-preview-pr-number.txt - docs-preview-action.txt - retention-days: 1 - - request-cleanup: - name: Request preview cleanup (no secrets) - if: > - github.event.action == 'closed' && - !github.event.pull_request.head.repo.fork && - github.event.pull_request.head.repo.full_name == github.repository - runs-on: [self-hosted, fireactions-turbo-8] - steps: - - name: Upload cleanup marker - run: | - set -euo pipefail - printf '%s\n' "${{ github.event.pull_request.number }}" > docs-preview-pr-number.txt - printf '%s\n' "cleanup" > docs-preview-action.txt - - - uses: actions/upload-artifact@v4 - with: - name: docs-preview-${{ github.event.pull_request.number }} - path: | - docs-preview-pr-number.txt - docs-preview-action.txt - retention-days: 1 From 990181e0365d2d558aced50436deb2898d5dafb8 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 10:41:19 -0700 Subject: [PATCH 53/63] Add v438 release article --- .openai/hosting.json | 3 + .../(pages-without-footer)/releases/page.tsx | 10 + .../releases/v438-upgrade/page.tsx | 389 ++++++++++++++++++ .../apps/bittensor-website/src/app/sitemap.ts | 6 +- 4 files changed, 404 insertions(+), 4 deletions(-) create mode 100644 .openai/hosting.json create mode 100644 website/apps/bittensor-website/src/app/(pages-without-footer)/releases/v438-upgrade/page.tsx diff --git a/.openai/hosting.json b/.openai/hosting.json new file mode 100644 index 0000000000..3a1ebd240a --- /dev/null +++ b/.openai/hosting.json @@ -0,0 +1,3 @@ +{ + "project_id": "appgprj_6a62521dc1d48191b692008a17c5aa1a" +} diff --git a/website/apps/bittensor-website/src/app/(pages-without-footer)/releases/page.tsx b/website/apps/bittensor-website/src/app/(pages-without-footer)/releases/page.tsx index 50b936b8b2..b28a23c90e 100644 --- a/website/apps/bittensor-website/src/app/(pages-without-footer)/releases/page.tsx +++ b/website/apps/bittensor-website/src/app/(pages-without-footer)/releases/page.tsx @@ -22,6 +22,16 @@ type Release = { // Newest first. Add new releases to the top. const releases: Release[] = [ + { + tag: 'v438', + date: 'July 2026', + title: 'Interfaces & Reliability', + summary: + 'Bounded EVM staking views, Ledger-friendly limit-order signatures, exact mechanism ' + + 'emission splits, predictable epoch counters, repaired testnet warp sync, and a more ' + + 'recoverable release train.', + href: '/releases/v438-upgrade', + }, { tag: 'v437', date: 'July 2026', diff --git a/website/apps/bittensor-website/src/app/(pages-without-footer)/releases/v438-upgrade/page.tsx b/website/apps/bittensor-website/src/app/(pages-without-footer)/releases/v438-upgrade/page.tsx new file mode 100644 index 0000000000..def2ae687a --- /dev/null +++ b/website/apps/bittensor-website/src/app/(pages-without-footer)/releases/v438-upgrade/page.tsx @@ -0,0 +1,389 @@ +import FadeInWrapper from '@/app/components/FadeInWrapper'; +import {Link} from '@raofoundation/ui'; +import type {Metadata} from 'next'; +import {Suspense} from 'react'; +import styles from '../v436-upgrade/page.module.css'; + +export const metadata: Metadata = { + title: 'The V438 Upgrade — Interfaces & Reliability', + description: + 'Bounded EVM staking views, Ledger-friendly limit-order signatures, exact mechanism ' + + 'emission splits, predictable epoch counters, testnet warp-sync repair, and a more ' + + 'recoverable release train.', + alternates: {canonical: '/releases/v438-upgrade'}, +}; + +const DocLink = ({href, children}: {href: string; children: React.ReactNode}) => ( + + {children} + +); + +const GRAPH_TEXT = { + fontFamily: 'FiraCode', + fontSize: 10, + fill: 'rgb(41, 41, 41)', +} as const; + +const INK = 'rgb(41, 41, 41)'; +const MUTED = 'rgba(41, 41, 41, 0.5)'; +const ACCENT = '#d15168'; + +const EvmStakeReadDiagram = () => ( + + + + EVM CONTRACT + + + COLDKEY · NETUID + + + ≤ 64 HOTKEYS + + + + + + STATICCALL + + + + + STAKING PRECOMPILE + + + 0x…0805 + + + + DISTINCT INPUTS + + + BOUNDED READS + + + NON-ZERO OUTPUTS + + + + + + + + STAKEINFO[] + + + HOTKEY + + + ALPHA STAKE + + + GAS-BOUNDED + + + + CALLER CHOOSES THE SEARCH SET · THE RUNTIME NEVER WALKS AN UNBOUNDED HISTORY + + +); + +const SignatureCompatibilityDiagram = () => ( + + + LIMIT ORDER + + + + SCALE BYTES + + + + + + DIRECT + + + + + + + BLAKE2-256 + + + <BYTES>…</BYTES> + + + LEDGER SIGNRAW + + + + + RUNTIME VERIFIER + + + + SR25519 ✓ + + + ED25519 ✓ + + + ECDSA ✕ + + + SAME ORDER ID + + + + + + + + EXECUTABLE + + +); + +const page = () => { + return ( + }> + +
+

The V438 Upgrade

+

+ Interfaces & Reliability · July 2026 +

+
+ +
+

Introduction

+

+ Spec 438 is a focused compatibility and correctness release after{' '} + v437. It gives smart contracts a + bounded way to inspect staking positions, lets Ledger-style signatures authorize limit + orders, closes two small but important gaps in mechanism and epoch accounting, repairs + testnet warp sync, and makes the release pipeline recover cleanly from a partial Python + publication. There is no new token model or migration for ordinary wallets: v438 + tightens the surfaces that applications, operators, and automation already use. +

+
+ +
+

Staking data, directly from EVM

+

+ Contracts can now read a coldkey's non-zero alpha positions on one subnet through + the staking precompile at 0x…0805.{' '} + + getStakeInfoForColdkeyAndNetuid + {' '} + accepts a coldkey, netuid, and up to 64 distinct candidate hotkeys, then returns only + the candidates with stake. The caller supplies the search set deliberately: the + precompile never walks the coldkey's unbounded historical hotkey index, so its work + and gas remain proportional to the request. +

+
+            {`IStaking.StakeInfo[] memory positions =
+    staking.getStakeInfoForColdkeyAndNetuid(coldkey, netuid, hotkeys);
+
+uint256 baseMinimum = staking.getDefaultMinStake();`}
+          
+ +

+ The contract chooses at most 64 distinct candidate hotkeys. The precompile charges for + the bounded reads and returns only non-zero (hotkey, stake) pairs. +

+

+ The companion getDefaultMinStake() view exposes the runtime's base + staking minimum. It is intentionally a primitive, not a quote: operation fees, subnet + price conversion, and full-unstake rules can still change what a particular transaction + accepts. Both selectors are added to the Solidity interface, JSON ABI, Rust precompile, + and gas-accounting tests, so Solidity and SDK callers share one contract. +

+
+ +
+

Limit orders meet hardware wallets

+

+ A signed limit order can now use either sr25519 or ed25519 and can cover either the raw + SCALE-encoded order or the Ledger-compatible{' '} + <Bytes>blake2_256(order)</Bytes> payload produced by + signRaw. The order ID is unchanged: it remains the blake2-256 hash of the + versioned order, so cancellation, replay protection, partial fills, and relayer + restrictions behave exactly as before. ECDSA remains rejected because its account + recovery model does not map to the 32-byte signer identity used by the pallet. +

+ +

+ Software keys can continue signing the order bytes directly. Ledger and compatible + signers can sign the wrapped order hash; both paths verify against the same signer and + derive the same on-chain order ID. +

+
+            {`raw       = SCALE(versioned_order)
+order_id  = blake2_256(raw)
+wrapped   = "" ++ order_id ++ ""
+
+accepted  = sr25519(raw | wrapped) or ed25519(raw | wrapped)
+rejected  = ecdsa`}
+          
+
+ +
+

Mechanism emission splits are exact

+

+ A custom mechanism split must now contain{' '} + one entry for every active mechanism, and the entries must still sum to + 65,535. Previously, a shorter vector passed validation and was padded with zeroes, which + could silently starve trailing mechanisms while rounding residue was assigned to + mechanism zero. Owners that want an even split can continue clearing the custom value; + owners that set one explicitly must describe the full mechanism set. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConfigurationBefore v438v438
No custom splitEven distributionEven distribution
Full vector, sum = 65,535AcceptedAccepted
Short vectorZero-paddedRejected
Wrong sumRejectedRejected
+
+ +
+

Epoch observability stays bounded

+

+ + BlocksSinceLastStep + {' '} + is now capped at the subnet's tempo + 1. The scheduler's safety + check uses that same subnet-specific tempo instead of a global maximum. Deferred epochs + can still report the one-block-overdue state that triggers the fallback, but dashboards + and clients no longer see a counter grow indefinitely during inconsistent or delayed + state. The related epoch-status and next-epoch queries use the same model. +

+
+ +
+

Testnet warp sync, repaired

+

+ Testnet nodes now start GRANDPA warp sync from two trusted, genesis-scoped authority + checkpoints. The checkpoints are enabled only when the node sees the testnet genesis + hash; mainnet and development chains retain their existing initial set-ID behavior. This + repairs fast synchronization across historical authority-set changes without weakening + checkpoint selection on any other network. The release also aligns the Polkadot SDK + revision needed to verify those proofs and corrects dependency features that affected + node log decoding. +

+
+ +
+

Release train, recoverable

+

+ The mainnet watcher now tracks GitHub release completion and stable Python publication + independently. A release can exist while a failed or partial PyPI upload is retried on + the next watcher run; a provenance-bound completion marker is written only after every + expected distribution is accepted. That removes the old failure mode where a successful + GitHub release prevented the SDK publication from being retried. +

+

+ Every merge to main also publishes the moving development image{' '} + ghcr.io/raofoundation/subtensor:main. The deployed :latest tag + remains tied to an executed mainnet release, while + :devnet and :testnet continue following their network mirrors. + Developers can therefore test merged code without mistaking it for the version running + on mainnet. The complete promotion sequence is documented in the{' '} + release process. +

+
+ +
+

What to do

+
    +
  • + Node operators: wait for the on-chain spec_version to + move to 438, then update to the matching release. Testnet operators should update + promptly to pick up the warp-sync checkpoints. +
  • +
  • + EVM integrators: refresh stakingV2.abi and use a + bounded, duplicate-free hotkey list when calling the new stake-position view. +
  • +
  • + Limit-order clients: raw sr25519 signatures remain valid. + Ledger-style wrapped sr25519 and ed25519 signatures are now valid; do not emit ECDSA + orders. +
  • +
  • + Subnet owners: when setting a custom mechanism emission split, send + exactly one value per active mechanism and keep the total at 65,535. +
  • +
  • + Indexers: treat BlocksSinceLastStep as a bounded status + counter, not an elapsed-time source beyond tempo + 1. +
  • +
+

+ Signers: after the release train proposes, use{' '} + btcli upgrade sign --url <v438 release URL> -w <wallet>. +

+
+ + + Read the release process + +
+
+ ); +}; + +export default page; diff --git a/website/apps/bittensor-website/src/app/sitemap.ts b/website/apps/bittensor-website/src/app/sitemap.ts index 8177c50b22..30df6844b7 100644 --- a/website/apps/bittensor-website/src/app/sitemap.ts +++ b/website/apps/bittensor-website/src/app/sitemap.ts @@ -14,15 +14,13 @@ const staticRoutes = [ '/releases', '/releases/v431-upgrade', '/releases/v436-upgrade', + '/releases/v438-upgrade', '/wallet', '/whitepaper', ]; export default function sitemap(): MetadataRoute.Sitemap { - const pages = [ - ...staticRoutes, - ...source.getPages().map((page) => page.url), - ]; + const pages = [...staticRoutes, ...source.getPages().map((page) => page.url)]; return pages.map((path) => ({ url: `${siteUrl}${path === '/' ? '' : path}`, From 202b3541b09e0053b805767509bee7c0debc1e65 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 10:59:01 -0700 Subject: [PATCH 54/63] Highlight v438 code examples as Rust --- .../releases/v438-upgrade/page.tsx | 15 +++++++++------ .../src/app/components/Code/Code.tsx | 2 ++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/website/apps/bittensor-website/src/app/(pages-without-footer)/releases/v438-upgrade/page.tsx b/website/apps/bittensor-website/src/app/(pages-without-footer)/releases/v438-upgrade/page.tsx index def2ae687a..00b47c4922 100644 --- a/website/apps/bittensor-website/src/app/(pages-without-footer)/releases/v438-upgrade/page.tsx +++ b/website/apps/bittensor-website/src/app/(pages-without-footer)/releases/v438-upgrade/page.tsx @@ -1,4 +1,5 @@ import FadeInWrapper from '@/app/components/FadeInWrapper'; +import {Code} from '@/app/components/Code/Code'; import {Link} from '@raofoundation/ui'; import type {Metadata} from 'next'; import {Suspense} from 'react'; @@ -209,12 +210,13 @@ const page = () => { precompile never walks the coldkey's unbounded historical hotkey index, so its work and gas remain proportional to the request.

-
-            {`IStaking.StakeInfo[] memory positions =
+          
+          />
           
           

The contract chooses at most 64 distinct candidate hotkeys. The precompile charges for @@ -246,14 +248,15 @@ uint256 baseMinimum = staking.getDefaultMinStake();`} signers can sign the wrapped order hash; both paths verify against the same signer and derive the same on-chain order ID.

-
-            {`raw       = SCALE(versioned_order)
+          "
 
 accepted  = sr25519(raw | wrapped) or ed25519(raw | wrapped)
 rejected  = ecdsa`}
-          
+ />
diff --git a/website/apps/bittensor-website/src/app/components/Code/Code.tsx b/website/apps/bittensor-website/src/app/components/Code/Code.tsx index fd325a29b7..fe80d790cb 100644 --- a/website/apps/bittensor-website/src/app/components/Code/Code.tsx +++ b/website/apps/bittensor-website/src/app/components/Code/Code.tsx @@ -1,3 +1,5 @@ +'use client'; + import SyntaxHighlighter from 'react-syntax-highlighter'; import syntaxStyles from './syntaxStyles'; import {Icon} from '@raofoundation/ui'; From e94e0bf8ef2487a9b7904987dcfa79ff32c62dfb Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 11:07:11 -0700 Subject: [PATCH 55/63] Ignore malformed legacy emission splits --- pallets/subtensor/src/subnets/mechanism.rs | 10 +++------ pallets/subtensor/src/tests/mechanism.rs | 24 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/pallets/subtensor/src/subnets/mechanism.rs b/pallets/subtensor/src/subnets/mechanism.rs index 11aeb76b8a..30c4e90086 100644 --- a/pallets/subtensor/src/subnets/mechanism.rs +++ b/pallets/subtensor/src/subnets/mechanism.rs @@ -229,9 +229,10 @@ impl Pallet { /// pub fn split_emissions(netuid: NetUid, alpha: AlphaBalance) -> Vec { let mechanism_count = u64::from(MechanismCountCurrent::::get(netuid)); - let maybe_split = MechanismEmissionSplit::::get(netuid); + let maybe_split = MechanismEmissionSplit::::get(netuid) + .filter(|split| split.len() == mechanism_count as usize); - // Unset split means even distribution + // Unset or legacy malformed split means even distribution let mut result: Vec = if let Some(split) = maybe_split { split .iter() @@ -248,11 +249,6 @@ impl Pallet { vec![AlphaBalance::from(per_mechanism); mechanism_count as usize] }; - // Trim / extend and pad with zeroes if result is shorter than mechanism_count - if result.len() != mechanism_count as usize { - result.resize(mechanism_count as usize, 0u64.into()); // pad with AlphaBalance::from(0) - } - // If there's any rounding error or lost due to truncation emission, credit it to mechanism 0 let rounding_err = u64::from(alpha).saturating_sub(result.iter().map(|s| u64::from(*s)).sum()); diff --git a/pallets/subtensor/src/tests/mechanism.rs b/pallets/subtensor/src/tests/mechanism.rs index c2075f041f..764e67617e 100644 --- a/pallets/subtensor/src/tests/mechanism.rs +++ b/pallets/subtensor/src/tests/mechanism.rs @@ -424,6 +424,30 @@ fn split_emissions_even_division() { }); } +#[test] +fn split_emissions_treats_legacy_malformed_split_as_unset() { + new_test_ext(1).execute_with(|| { + let netuid = NetUid::from(5u16); + MechanismCountCurrent::::insert(netuid, MechId::from(3u8)); + + for split in [vec![u16::MAX], vec![u16::MAX, 0, 0, 0]] { + MechanismEmissionSplit::::insert(netuid, split.clone()); + + let out = SubtensorModule::split_emissions(netuid, AlphaBalance::from(10u64)); + + assert_eq!( + out, + vec![ + AlphaBalance::from(4u64), + AlphaBalance::from(3u64), + AlphaBalance::from(3u64), + ] + ); + assert_eq!(MechanismEmissionSplit::::get(netuid), Some(split)); + } + }); +} + #[test] fn split_emissions_rounding_to_first() { new_test_ext(1).execute_with(|| { From a9b5499f5763e2b980bde252dfed3de2bd53e84f Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 11:48:47 -0700 Subject: [PATCH 56/63] update metadata --- sdk/python/bittensor/_generated/calls.py | 12 ++++++------ sdk/python/bittensor/_generated/constants.py | 2 +- sdk/python/bittensor/_generated/errors.py | 2 +- sdk/python/bittensor/_generated/runtime_apis.py | 2 +- sdk/python/bittensor/_generated/storage.py | 6 ++++-- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/sdk/python/bittensor/_generated/calls.py b/sdk/python/bittensor/_generated/calls.py index fe145a0c42..1bd2b8b822 100644 --- a/sdk/python/bittensor/_generated/calls.py +++ b/sdk/python/bittensor/_generated/calls.py @@ -1,7 +1,7 @@ """Generated from runtime metadata by codegen. DO NOT EDIT BY HAND. Regenerate with: python -m codegen -Spec version: 437 +Spec version: 438 """ from typing import Any, NamedTuple @@ -684,12 +684,12 @@ class Multisig: @staticmethod def approve_as_multi(threshold: 'u16', other_signatories: 'Any', maybe_timepoint: 'Any', call_hash: 'Any', max_weight: 'Weight') -> Call: - 'Register approval for a dispatch to be made from a deterministic composite account if approved by a total of `threshold - 1` of `other_signatories`. Payment: `DepositBase` will be reserved if this is the first approval, plus `threshold` times `DepositFactor`. It is returned once this dispatch happens or is cancelled. The dispatch origin for this call must be _Signed_. - `threshold`: The total number of approvals for this dispatch before it is executed. - `other_signatories`: The accounts (other than the sender) who can approve this dispatch. May not be empty. - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is not the first approval, then it must be `Some`, with the timepoint (block number and transaction index) of the first approval transaction. - `call_hash`: The hash of the call to be executed. NOTE: If this is the final approval, you will want to use `as_multi` instead. ## Complexity - `O(S)`. - Up to one balance-reserve or unreserve operation. - One passthrough operation, one insert, both `O(S)` where `S` is the number of signatories. `S` is capped by `MaxSignatories`, with weight being proportional. - One encode & hash, both of complexity `O(S)`. - Up to one binary search and insert (`O(logS + S)`). - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. - One event. - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit taken for its lifetime of `DepositBase + threshold * DepositFactor`.' + 'Register approval for a dispatch to be made from a deterministic composite account if approved by a total of `threshold - 1` of `other_signatories`. **This function will NEVER execute the call, even if the approval threshold is reached.** It only registers approval. To actually execute the call, `as_multi` must be called with the full call data by any of the signatories. This function is more efficient than `as_multi` for intermediate approvals since it only requires the call hash, not the full call data. Payment: `DepositBase` will be reserved if this is the first approval, plus `threshold` times `DepositFactor`. It is returned once this dispatch happens or is cancelled. The dispatch origin for this call must be _Signed_. - `threshold`: The total number of approvals for this dispatch before it is executed. - `other_signatories`: The accounts (other than the sender) who can approve this dispatch. May not be empty. - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is not the first approval, then it must be `Some`, with the timepoint (block number and transaction index) of the first approval transaction. - `call_hash`: The hash of the call to be executed. NOTE: To execute the call after approvals are gathered, any signatory must call `as_multi` with the full call data. This function cannot execute the call. ## Complexity - `O(S)`. - Up to one balance-reserve or unreserve operation. - One passthrough operation, one insert, both `O(S)` where `S` is the number of signatories. `S` is capped by `MaxSignatories`, with weight being proportional. - One encode & hash, both of complexity `O(S)`. - Up to one binary search and insert (`O(logS + S)`). - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. - One event. - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit taken for its lifetime of `DepositBase + threshold * DepositFactor`.' return Call('Multisig', 'approve_as_multi', {'threshold': threshold, 'other_signatories': other_signatories, 'maybe_timepoint': maybe_timepoint, 'call_hash': call_hash, 'max_weight': max_weight}) @staticmethod def as_multi(threshold: 'u16', other_signatories: 'Any', maybe_timepoint: 'Any', call: 'RuntimeCall', max_weight: 'Weight') -> Call: - 'Register approval for a dispatch to be made from a deterministic composite account if approved by a total of `threshold - 1` of `other_signatories`. If there are enough, then dispatch the call. Payment: `DepositBase` will be reserved if this is the first approval, plus `threshold` times `DepositFactor`. It is returned once this dispatch happens or is cancelled. The dispatch origin for this call must be _Signed_. - `threshold`: The total number of approvals for this dispatch before it is executed. - `other_signatories`: The accounts (other than the sender) who can approve this dispatch. May not be empty. - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is not the first approval, then it must be `Some`, with the timepoint (block number and transaction index) of the first approval transaction. - `call`: The call to be executed. NOTE: Unless this is the final approval, you will generally want to use `approve_as_multi` instead, since it only requires a hash of the call. Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise on success, result is `Ok` and the result from the interior call, if it was executed, may be found in the deposited `MultisigExecuted` event. ## Complexity - `O(S + Z + Call)`. - Up to one balance-reserve or unreserve operation. - One passthrough operation, one insert, both `O(S)` where `S` is the number of signatories. `S` is capped by `MaxSignatories`, with weight being proportional. - One call encode & hash, both of complexity `O(Z)` where `Z` is tx-len. - One encode & hash, both of complexity `O(S)`. - Up to one binary search and insert (`O(logS + S)`). - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. - One event. - The weight of the `call`. - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit taken for its lifetime of `DepositBase + threshold * DepositFactor`.' + "Register approval for a dispatch to be made from a deterministic composite account if approved by a total of `threshold - 1` of `other_signatories`. **If the approval threshold is met (including the sender's approval), this will immediately execute the call.** This is the only way to execute a multisig call - `approve_as_multi` will never trigger execution. Payment: `DepositBase` will be reserved if this is the first approval, plus `threshold` times `DepositFactor`. It is returned once this dispatch happens or is cancelled. The dispatch origin for this call must be _Signed_. - `threshold`: The total number of approvals for this dispatch before it is executed. - `other_signatories`: The accounts (other than the sender) who can approve this dispatch. May not be empty. - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is not the first approval, then it must be `Some`, with the timepoint (block number and transaction index) of the first approval transaction. - `call`: The call to be executed. NOTE: For intermediate approvals (not the final approval), you should generally use `approve_as_multi` instead, since it only requires a hash of the call and is more efficient. Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise on success, result is `Ok` and the result from the interior call, if it was executed, may be found in the deposited `MultisigExecuted` event. ## Complexity - `O(S + Z + Call)`. - Up to one balance-reserve or unreserve operation. - One passthrough operation, one insert, both `O(S)` where `S` is the number of signatories. `S` is capped by `MaxSignatories`, with weight being proportional. - One call encode & hash, both of complexity `O(Z)` where `Z` is tx-len. - One encode & hash, both of complexity `O(S)`. - Up to one binary search and insert (`O(logS + S)`). - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. - One event. - The weight of the `call`. - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit taken for its lifetime of `DepositBase + threshold * DepositFactor`." return Call('Multisig', 'as_multi', {'threshold': threshold, 'other_signatories': other_signatories, 'maybe_timepoint': maybe_timepoint, 'call': call, 'max_weight': max_weight}) @staticmethod @@ -742,7 +742,7 @@ class Scheduler: @staticmethod def cancel(when: 'u32', index: 'u32') -> Call: - 'Cancel an anonymously scheduled task.' + "Cancel a scheduled task (named or anonymous), by providing the block it is scheduled for execution in, as well as the index of the task in that block's agenda. In the case of a named task, it will remove it from the lookup table as well." return Call('Scheduler', 'cancel', {'when': when, 'index': index}) @staticmethod @@ -782,12 +782,12 @@ def schedule_named_after(id: 'Any', after: 'u32', maybe_periodic: 'Any', priorit @staticmethod def set_retry(task: 'Any', retries: 'u8', period: 'u32') -> Call: - "Set a retry configuration for a task so that, in case its scheduled run fails, it will be retried after `period` blocks, for a total amount of `retries` retries or until it succeeds. Tasks which need to be scheduled for a retry are still subject to weight metering and agenda space, same as a regular task. If a periodic task fails, it will be scheduled normally while the task is retrying. Tasks scheduled as a result of a retry for a periodic task are unnamed, non-periodic clones of the original task. Their retry configuration will be derived from the original task's configuration, but will have a lower value for `remaining` than the original `total_retries`." + "Set a retry configuration for a task so that, in case its scheduled run fails, it will be retried after `period` blocks, for a total amount of `retries` retries or until it succeeds. Tasks which need to be scheduled for a retry are still subject to weight metering and agenda space, same as a regular task. If a periodic task fails, it will be scheduled normally while the task is retrying. Tasks scheduled as a result of a retry for a periodic task are unnamed, non-periodic clones of the original task. Their retry configuration will be derived from the original task's configuration, but will have a lower value for `remaining` than the original `total_retries`. This call **cannot** be used to set a retry configuration for a named task." return Call('Scheduler', 'set_retry', {'task': task, 'retries': retries, 'period': period}) @staticmethod def set_retry_named(id: 'Any', retries: 'u8', period: 'u32') -> Call: - "Set a retry configuration for a named task so that, in case its scheduled run fails, it will be retried after `period` blocks, for a total amount of `retries` retries or until it succeeds. Tasks which need to be scheduled for a retry are still subject to weight metering and agenda space, same as a regular task. If a periodic task fails, it will be scheduled normally while the task is retrying. Tasks scheduled as a result of a retry for a periodic task are unnamed, non-periodic clones of the original task. Their retry configuration will be derived from the original task's configuration, but will have a lower value for `remaining` than the original `total_retries`." + "Set a retry configuration for a named task so that, in case its scheduled run fails, it will be retried after `period` blocks, for a total amount of `retries` retries or until it succeeds. Tasks which need to be scheduled for a retry are still subject to weight metering and agenda space, same as a regular task. If a periodic task fails, it will be scheduled normally while the task is retrying. Tasks scheduled as a result of a retry for a periodic task are unnamed, non-periodic clones of the original task. Their retry configuration will be derived from the original task's configuration, but will have a lower value for `remaining` than the original `total_retries`. This is the only way to set a retry configuration for a named task." return Call('Scheduler', 'set_retry_named', {'id': id, 'retries': retries, 'period': period}) diff --git a/sdk/python/bittensor/_generated/constants.py b/sdk/python/bittensor/_generated/constants.py index a07a7c6a14..002b2ad00a 100644 --- a/sdk/python/bittensor/_generated/constants.py +++ b/sdk/python/bittensor/_generated/constants.py @@ -1,7 +1,7 @@ """Generated from runtime metadata by codegen. DO NOT EDIT BY HAND. Regenerate with: python -m codegen -Spec version: 437 +Spec version: 438 Pallet constant descriptors: unpack into substrate.constant. """ diff --git a/sdk/python/bittensor/_generated/errors.py b/sdk/python/bittensor/_generated/errors.py index 7654c4a338..3a326b5dd1 100644 --- a/sdk/python/bittensor/_generated/errors.py +++ b/sdk/python/bittensor/_generated/errors.py @@ -1,7 +1,7 @@ """Generated from runtime metadata by codegen. DO NOT EDIT BY HAND. Regenerate with: python -m codegen -Spec version: 437 +Spec version: 438 """ from dataclasses import dataclass diff --git a/sdk/python/bittensor/_generated/runtime_apis.py b/sdk/python/bittensor/_generated/runtime_apis.py index 3a10bc849d..19e961afb2 100644 --- a/sdk/python/bittensor/_generated/runtime_apis.py +++ b/sdk/python/bittensor/_generated/runtime_apis.py @@ -1,7 +1,7 @@ """Generated from runtime metadata by codegen. DO NOT EDIT BY HAND. Regenerate with: python -m codegen -Spec version: 437 +Spec version: 438 Runtime API method descriptors: unpack into substrate.runtime_call. """ diff --git a/sdk/python/bittensor/_generated/storage.py b/sdk/python/bittensor/_generated/storage.py index 823e11897f..e3685d54d7 100644 --- a/sdk/python/bittensor/_generated/storage.py +++ b/sdk/python/bittensor/_generated/storage.py @@ -1,7 +1,7 @@ """Generated from runtime metadata by codegen. DO NOT EDIT BY HAND. Regenerate with: python -m codegen -Spec version: 437 +Spec version: 438 Storage item descriptors: unpack into substrate.query/query_map. Each carries its VALUE's type identity (value_type_ident) so normalization can key on the runtime's own type names without a node round-trip. """ @@ -26,7 +26,7 @@ class System: ExtrinsicCount = Item('System', 'ExtrinsicCount', 'u32') InherentsApplied = Item('System', 'InherentsApplied', 'bool') BlockWeight = Item('System', 'BlockWeight', 'PerDispatchClass') - AllExtrinsicsLen = Item('System', 'AllExtrinsicsLen', 'u32') + BlockSize = Item('System', 'BlockSize', 'u32') BlockHash = Item('System', 'BlockHash', 'H256') ExtrinsicData = Item('System', 'ExtrinsicData', 'Vec') Number = Item('System', 'Number', 'u32') @@ -36,6 +36,7 @@ class System: EventCount = Item('System', 'EventCount', 'u32') EventTopics = Item('System', 'EventTopics', 'Vec<(u32, u32)>') LastRuntimeUpgrade = Item('System', 'LastRuntimeUpgrade', 'LastRuntimeUpgradeInfo') + BlocksTillUpgrade = Item('System', 'BlocksTillUpgrade', 'u8') UpgradedToU32RefCount = Item('System', 'UpgradedToU32RefCount', 'bool') UpgradedToTripleRefCount = Item('System', 'UpgradedToTripleRefCount', 'bool') ExecutionPhase = Item('System', 'ExecutionPhase', 'Phase') @@ -74,6 +75,7 @@ class Balances: class TransactionPayment: NextFeeMultiplier = Item('TransactionPayment', 'NextFeeMultiplier', 'FixedU128') StorageVersion = Item('TransactionPayment', 'StorageVersion', 'Releases') + TxPaymentCredit = Item('TransactionPayment', 'TxPaymentCredit', '()') class SubtensorModule: MinActivityCutoff = Item('SubtensorModule', 'MinActivityCutoff', 'u16') From c93269da20ee6c484c711daa6719b30445844282 Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 11:57:43 -0700 Subject: [PATCH 57/63] restore base workflows --- .github/workflows/deploy-docs-preview.yml | 330 +++++++++++++++++++++ .github/workflows/request-docs-preview.yml | 137 +++++++++ 2 files changed, 467 insertions(+) create mode 100644 .github/workflows/deploy-docs-preview.yml create mode 100644 .github/workflows/request-docs-preview.yml diff --git a/.github/workflows/deploy-docs-preview.yml b/.github/workflows/deploy-docs-preview.yml new file mode 100644 index 0000000000..e1849a6ea6 --- /dev/null +++ b/.github/workflows/deploy-docs-preview.yml @@ -0,0 +1,330 @@ +name: Deploy Docs Preview + +# Trusted half of docs previews. Always taken from the default branch +# (`workflow_run`), so a PR cannot rewrite these steps to exfiltrate secrets. +# +# Never checks out PR HEAD and never runs PR-controlled scripts. Consumes only +# the sealed artifact from `Request Docs Preview`, then deploys / aliases / +# comments (or cleans up) with Vercel + GoDaddy credentials. + +on: + workflow_run: + workflows: ["Request Docs Preview"] + types: [completed] + +permissions: + actions: read + contents: read + pull-requests: write + +jobs: + deploy: + name: Deploy or clean up docs preview + if: > + github.event.workflow_run.conclusion == 'success' && + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.head_repository.full_name == github.repository + runs-on: [self-hosted, fireactions-turbo-8] + concurrency: + group: docs-preview-domain-dns + cancel-in-progress: false + # No secrets at job scope — each step opts into only what it needs so + # `npm install` / artifact extract never see Vercel/GoDaddy/GH credentials. + env: + DOCS_DOMAIN: ${{ vars.DOCS_DOMAIN || 'bittensor.com' }} + steps: + - name: Resolve PR number and download artifact + id: meta + env: + # Pass event fields via env (never interpolate into the script body) + # so a crafted PR branch/title cannot break out of a shell quote. + # GH_TOKEN here is only for `gh run download` of our own artifact. + GH_TOKEN: ${{ github.token }} + WORKFLOW_PULL_REQUESTS: ${{ toJSON(github.event.workflow_run.pull_requests) }} + WORKFLOW_HEAD_SHA: ${{ github.event.workflow_run.head_sha }} + WORKFLOW_RUN_ID: ${{ github.event.workflow_run.id }} + REPO: ${{ github.repository }} + run: | + set -euo pipefail + # Prefer the pull_requests list; fall back to the commit→PR API when + # workflow_run omits it (race on just-opened PRs). + pr=$(node -e ' + const ev = JSON.parse(process.env.WORKFLOW_PULL_REQUESTS || "[]"); + if (Array.isArray(ev) && ev[0] && ev[0].number) { + process.stdout.write(String(ev[0].number)); + } + ') + if [ -z "${pr}" ]; then + pr=$(gh api \ + "repos/${REPO}/commits/${WORKFLOW_HEAD_SHA}/pulls" \ + --jq '.[0].number // empty') + fi + if [ -z "${pr}" ]; then + echo "Could not resolve PR number for workflow_run ${WORKFLOW_RUN_ID}" >&2 + exit 1 + fi + # PR numbers are digits only — reject anything else before using in paths. + case "${pr}" in + ''|*[!0-9]*) echo "invalid PR number: ${pr}" >&2; exit 1 ;; + esac + echo "pr=$pr" >> "$GITHUB_OUTPUT" + echo "alias=pr-${pr}.preview.${DOCS_DOMAIN}" >> "$GITHUB_OUTPUT" + echo "url=https://pr-${pr}.preview.${DOCS_DOMAIN}" >> "$GITHUB_OUTPUT" + + # download-artifact@v4 needs the producing run id for workflow_run. + mkdir -p artifact + gh run download "${WORKFLOW_RUN_ID}" \ + --repo "${REPO}" \ + --name "docs-preview-${pr}" \ + --dir artifact + action=$(tr -d '[:space:]' < artifact/docs-preview-action.txt) + echo "action=$action" >> "$GITHUB_OUTPUT" + + - name: Set up Node.js + if: steps.meta.outputs.action == 'deploy' + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 20 + + - name: Install vercel CLI (no secrets) + if: steps.meta.outputs.action == 'deploy' + id: vercel_cli + run: | + set -euo pipefail + # Clean prefix + ignore-scripts: no deploy credentials in this step's + # environment, and no package lifecycle scripts from the registry. + CLEAN_CLI="${RUNNER_TEMP}/vercel-cli" + mkdir -p "$CLEAN_CLI" + npm install --prefix "$CLEAN_CLI" --no-save --no-package-lock --ignore-scripts vercel@56.4.1 + test -x "$CLEAN_CLI/node_modules/.bin/vercel" + echo "dir=$CLEAN_CLI" >> "$GITHUB_OUTPUT" + + - name: Extract sealed archive (no secrets) + if: steps.meta.outputs.action == 'deploy' + id: extract + run: | + set -euo pipefail + DEPLOY_ROOT="${RUNNER_TEMP}/docs-preview-deploy" + rm -rf "$DEPLOY_ROOT" + mkdir -p "$DEPLOY_ROOT" + ARCHIVE="$(pwd)/artifact/docs-preview-sealed.tgz" + # Heredoc body must be unindented — leading spaces would SyntaxError. + # Quotas bound a hostile PR archive before it can fill the runner disk. + MAX_ARCHIVE_BYTES=$((2 * 1024 * 1024 * 1024)) # 2 GiB compressed + MAX_MEMBERS=400000 + MAX_TOTAL_UNCOMPRESSED=$((4 * 1024 * 1024 * 1024)) # 4 GiB + MAX_FILE_BYTES=$((512 * 1024 * 1024)) # 512 MiB per member + archive_bytes=$(wc -c < "$ARCHIVE") + if [ "$archive_bytes" -gt "$MAX_ARCHIVE_BYTES" ]; then + echo "archive too large: ${archive_bytes} bytes" >&2 + exit 1 + fi + python3 - "$ARCHIVE" "$DEPLOY_ROOT" "$MAX_MEMBERS" "$MAX_TOTAL_UNCOMPRESSED" "$MAX_FILE_BYTES" <<'PY' +import os, sys, tarfile + +archive, dest = sys.argv[1], sys.argv[2] +max_members = int(sys.argv[3]) +max_total = int(sys.argv[4]) +max_file = int(sys.argv[5]) +dest = os.path.realpath(dest) +allowed_prefixes = (".vercel/", "website/node_modules/") + +with tarfile.open(archive, "r:gz") as tf: + members = tf.getmembers() + if len(members) > max_members: + raise SystemExit(f"too many members: {len(members)} > {max_members}") + total = 0 + for member in members: + name = member.name.lstrip("./") + if name.startswith("/") or name.startswith("\\") or ".." in name.split("/"): + raise SystemExit(f"refusing unsafe path: {member.name!r}") + if not name.startswith(allowed_prefixes): + raise SystemExit(f"refusing unexpected path: {member.name!r}") + if member.issym() or member.islnk(): + raise SystemExit(f"refusing link member: {member.name!r}") + if not (member.isfile() or member.isdir()): + raise SystemExit(f"refusing non-file member: {member.name!r}") + size = member.size or 0 + if size > max_file: + raise SystemExit(f"member too large: {member.name!r} ({size} bytes)") + total += size + if total > max_total: + raise SystemExit(f"uncompressed total too large: {total} > {max_total}") + target = os.path.realpath(os.path.join(dest, name)) + if target != dest and not target.startswith(dest + os.sep): + raise SystemExit(f"refusing path escape: {member.name!r}") + try: + tf.extractall(dest, filter="data") + except TypeError: + tf.extractall(dest) +PY + test -f "$DEPLOY_ROOT/.vercel/output/functions/_global-error.func/.vc-config.json" + test -d "$DEPLOY_ROOT/website/node_modules" + echo "root=$DEPLOY_ROOT" >> "$GITHUB_OUTPUT" + + - name: Deploy prebuilt + if: steps.meta.outputs.action == 'deploy' + id: deploy + env: + PR_NUMBER: ${{ steps.meta.outputs.pr }} + ALIAS: ${{ steps.meta.outputs.alias }} + CLEAN_CLI: ${{ steps.vercel_cli.outputs.dir }} + DEPLOY_ROOT: ${{ steps.extract.outputs.root }} + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_DOCS_PROJECT_ID }} + run: | + set -euo pipefail + VERCEL_BIN="$CLEAN_CLI/node_modules/.bin/vercel" + test -x "$VERCEL_BIN" + # Keep PATH free of the artifact tree. + export PATH="${CLEAN_CLI}/node_modules/.bin:/usr/local/bin:/usr/bin:/bin" + cd "$DEPLOY_ROOT" + mkdir -p website/apps/bittensor-website .vercel + node -e ' + const fs = require("fs"); + fs.writeFileSync(".vercel/project.json", JSON.stringify({ + projectId: process.env.VERCEL_PROJECT_ID, + orgId: process.env.VERCEL_ORG_ID, + })); + ' + + url=$("$VERCEL_BIN" deploy --prebuilt --archive=tgz --token "$VERCEL_TOKEN") + echo "Deployed: $url" + + dep_id=$(curl -sf -H "Authorization: Bearer $VERCEL_TOKEN" \ + "https://api.vercel.com/v13/deployments/${url#https://}?teamId=$VERCEL_ORG_ID" \ + | node -e 'let s="";process.stdin.on("data",d=>s+=d);process.stdin.on("end",()=>process.stdout.write(JSON.parse(s).id))') + echo "deployment_id=$dep_id" >> "$GITHUB_OUTPUT" + + - name: Register domain, alias deployment + if: steps.meta.outputs.action == 'deploy' + env: + ALIAS: ${{ steps.meta.outputs.alias }} + DEPLOYMENT_ID: ${{ steps.deploy.outputs.deployment_id }} + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_DOCS_PROJECT_ID }} + GODADDY_API_KEY: ${{ secrets.GODADDY_API_KEY }} + GODADDY_API_SECRET: ${{ secrets.GODADDY_API_SECRET }} + run: | + set -euo pipefail + + resp=$(curl -sS -X POST \ + -H "Authorization: Bearer $VERCEL_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{\"name\":\"$ALIAS\"}" \ + "https://api.vercel.com/v10/projects/${VERCEL_PROJECT_ID}/domains?teamId=${VERCEL_ORG_ID}" \ + || true) + if ! echo "$resp" | node -e 'const d=JSON.parse(require("fs").readFileSync(0,"utf8")); if(!d.name) process.exit(1)'; then + resp=$(curl -sf -H "Authorization: Bearer $VERCEL_TOKEN" \ + "https://api.vercel.com/v9/projects/${VERCEL_PROJECT_ID}/domains/${ALIAS}?teamId=${VERCEL_ORG_ID}") + fi + + verified=$(echo "$resp" | node -pe 'JSON.parse(require("fs").readFileSync(0,"utf8")).verified === true ? "yes" : "no"') + if [ "$verified" != "yes" ]; then + # Use `node -e`, not `-pe`: `-p` also prints the expression + # result, and `stdout.write` returns true, which corrupted the + # TXT value to "...true" and broke Vercel verification. + challenge=$(echo "$resp" | node -e ' + const d = JSON.parse(require("fs").readFileSync(0, "utf8")); + const v = (d.verification || []).find((x) => x.type === "TXT"); + if (!v) { process.stderr.write("no TXT challenge\n"); process.exit(1); } + process.stdout.write(v.value); + ') + + existing=$(curl -sf \ + -H "Authorization: sso-key ${GODADDY_API_KEY}:${GODADDY_API_SECRET}" \ + "https://api.godaddy.com/v1/domains/${DOCS_DOMAIN}/records/TXT/_vercel") + payload=$(EXISTING_JSON="$existing" CHALLENGE="$challenge" node -e ' + const existing = JSON.parse(process.env.EXISTING_JSON); + const values = new Set(existing.map((r) => r.data)); + values.add(process.env.CHALLENGE); + process.stdout.write(JSON.stringify( + [...values].sort().map((data) => ({ data, ttl: 600 })) + )); + ') + curl -sf -X PUT \ + -H "Authorization: sso-key ${GODADDY_API_KEY}:${GODADDY_API_SECRET}" \ + -H "Content-Type: application/json" \ + -d "$payload" \ + "https://api.godaddy.com/v1/domains/${DOCS_DOMAIN}/records/TXT/_vercel" > /dev/null + + verified=no + for i in 1 2 3 4 5 6 7 8 9 10; do + verify=$(curl -sS -X POST \ + -H "Authorization: Bearer $VERCEL_TOKEN" \ + "https://api.vercel.com/v9/projects/${VERCEL_PROJECT_ID}/domains/${ALIAS}/verify?teamId=${VERCEL_ORG_ID}" \ + || true) + if echo "$verify" | node -pe 'JSON.parse(require("fs").readFileSync(0,"utf8")).verified === true ? "yes" : "no"' | grep -q yes; then + verified=yes + break + fi + sleep 15 + done + if [ "$verified" != "yes" ]; then + echo "Timed out verifying $ALIAS" >&2 + echo "$verify" >&2 + exit 1 + fi + fi + + curl -sf -X POST \ + -H "Authorization: Bearer $VERCEL_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{\"alias\":\"$ALIAS\"}" \ + "https://api.vercel.com/v2/deployments/${DEPLOYMENT_ID}/aliases?teamId=${VERCEL_ORG_ID}" > /dev/null + + echo "Aliased to https://${ALIAS}" >> "$GITHUB_STEP_SUMMARY" + + - name: Comment preview URL on PR + if: steps.meta.outputs.action == 'deploy' + env: + PR_NUMBER: ${{ steps.meta.outputs.pr }} + PREVIEW_URL: ${{ steps.meta.outputs.url }} + GH_TOKEN: ${{ github.token }} + run: | + marker="" + body=$(printf '%s\n' \ + "${marker}" \ + "### Docs preview" \ + "" \ + "${PREVIEW_URL}/docs" \ + "" \ + "Stable for this PR — updates on each push that touches \`docs/**\` or \`website/**\`.") + + existing=$(gh api \ + "repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/comments" \ + --jq ".[] | select(.body | contains(\"${marker}\")) | .id" \ + | head -n 1) + + if [ -n "$existing" ]; then + gh api \ + --method PATCH \ + "repos/${GITHUB_REPOSITORY}/issues/comments/${existing}" \ + -f body="$body" > /dev/null + else + gh api \ + --method POST \ + "repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/comments" \ + -f body="$body" > /dev/null + fi + + - name: Remove PR docs preview domain + if: steps.meta.outputs.action == 'cleanup' + env: + ALIAS: ${{ steps.meta.outputs.alias }} + VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_DOCS_PROJECT_ID }} + run: | + set -euo pipefail + code=$(curl -sS -o /tmp/del.json -w "%{http_code}" -X DELETE \ + -H "Authorization: Bearer $VERCEL_TOKEN" \ + "https://api.vercel.com/v9/projects/${VERCEL_PROJECT_ID}/domains/${ALIAS}?teamId=${VERCEL_ORG_ID}" \ + || true) + if [ "$code" = "200" ] || [ "$code" = "204" ]; then + echo "Removed ${ALIAS} from Vercel project" >> "$GITHUB_STEP_SUMMARY" + else + echo "No project domain to remove for ${ALIAS} (HTTP ${code})" >> "$GITHUB_STEP_SUMMARY" + fi diff --git a/.github/workflows/request-docs-preview.yml b/.github/workflows/request-docs-preview.yml new file mode 100644 index 0000000000..bf99432e77 --- /dev/null +++ b/.github/workflows/request-docs-preview.yml @@ -0,0 +1,137 @@ +name: Request Docs Preview + +# Secret-free PR gate for docs previews. +# +# Trust boundary: this workflow runs untrusted PR HEAD and must never receive +# VERCEL_TOKEN, GoDaddy credentials, or any other deploy secret. Same-repo PRs +# can edit this file; keeping it credential-free closes that path. +# +# Build output is sealed and handed to the default-branch +# `Deploy Docs Preview` workflow (`workflow_run`), which alone holds secrets +# and never checks out or executes PR code. +# +# Requires repository variables (not secrets — these are public project IDs): +# VERCEL_ORG_ID +# VERCEL_DOCS_PROJECT_ID + +on: + pull_request: + types: [opened, synchronize, reopened, closed] + paths: + - "docs/**" + - "website/**" + - ".github/workflows/request-docs-preview.yml" + +permissions: + contents: read + +jobs: + build: + name: Build PR docs preview (no secrets) + if: > + github.event.action != 'closed' && + !github.event.pull_request.head.repo.fork && + github.event.pull_request.head.repo.full_name == github.repository + runs-on: [self-hosted, fireactions-turbo-8] + concurrency: + group: request-docs-preview-build-${{ github.event.pull_request.number }} + cancel-in-progress: true + env: + # Public project identifiers only — never a deploy token. + VERCEL_ORG_ID: ${{ vars.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ vars.VERCEL_DOCS_PROJECT_ID }} + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Require public Vercel project vars + run: | + set -euo pipefail + if [ -z "${VERCEL_ORG_ID}" ] || [ -z "${VERCEL_PROJECT_ID}" ]; then + echo "Set repository variables VERCEL_ORG_ID and VERCEL_DOCS_PROJECT_ID" >&2 + echo "(project/org IDs are not secrets; the deploy token stays on the trusted workflow)." >&2 + exit 1 + fi + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Enable corepack (yarn 4) + run: corepack enable + + - name: Assemble Vercel prebuilt output (no deploy token) + run: | + set -euo pipefail + mkdir -p .vercel + # Full project settings (framework / rootDirectory / node) — same + # payload `vercel pull` writes. IDs + settings are not secrets; the + # deploy token stays off this workflow. + node -e ' + const fs = require("fs"); + fs.writeFileSync(".vercel/project.json", JSON.stringify({ + projectId: process.env.VERCEL_PROJECT_ID, + orgId: process.env.VERCEL_ORG_ID, + projectName: "subtensor", + settings: { + framework: "nextjs", + devCommand: null, + installCommand: null, + buildCommand: null, + outputDirectory: null, + rootDirectory: "website/apps/bittensor-website", + directoryListing: false, + nodeVersion: "24.x", + }, + }, null, 2)); + ' + # Local assemble only — do not pass --token. + npx --yes vercel@56.4.1 build + test -f .vercel/output/functions/_global-error.func/.vc-config.json + test -d website/node_modules + + - name: Seal prebuilt output for trusted deploy + run: | + set -euo pipefail + # Include website/node_modules: Next NFT traces resolve there during + # `vercel deploy --prebuilt`. Dereference links so the trusted + # extractor never has to honor PR-controlled symlinks/hardlinks. + tar --create --gzip --file=docs-preview-sealed.tgz \ + --hard-dereference --dereference \ + .vercel/output website/node_modules + printf '%s\n' "${{ github.event.pull_request.number }}" > docs-preview-pr-number.txt + printf '%s\n' "deploy" > docs-preview-action.txt + + - name: Upload sealed prebuilt output + uses: actions/upload-artifact@v4 + with: + name: docs-preview-${{ github.event.pull_request.number }} + path: | + docs-preview-sealed.tgz + docs-preview-pr-number.txt + docs-preview-action.txt + retention-days: 1 + + request-cleanup: + name: Request preview cleanup (no secrets) + if: > + github.event.action == 'closed' && + !github.event.pull_request.head.repo.fork && + github.event.pull_request.head.repo.full_name == github.repository + runs-on: [self-hosted, fireactions-turbo-8] + steps: + - name: Upload cleanup marker + run: | + set -euo pipefail + printf '%s\n' "${{ github.event.pull_request.number }}" > docs-preview-pr-number.txt + printf '%s\n' "cleanup" > docs-preview-action.txt + + - uses: actions/upload-artifact@v4 + with: + name: docs-preview-${{ github.event.pull_request.number }} + path: | + docs-preview-pr-number.txt + docs-preview-action.txt + retention-days: 1 From 9054571d6d546f1fd4014ea87d09982d1659d31a Mon Sep 17 00:00:00 2001 From: UnArbosSix Date: Thu, 23 Jul 2026 12:34:54 -0700 Subject: [PATCH 58/63] fix metadata --- sdk/python/bittensor/_generated/calls.py | 10 +++++----- sdk/python/bittensor/_generated/storage.py | 4 +--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/sdk/python/bittensor/_generated/calls.py b/sdk/python/bittensor/_generated/calls.py index 1bd2b8b822..2119e91fa7 100644 --- a/sdk/python/bittensor/_generated/calls.py +++ b/sdk/python/bittensor/_generated/calls.py @@ -684,12 +684,12 @@ class Multisig: @staticmethod def approve_as_multi(threshold: 'u16', other_signatories: 'Any', maybe_timepoint: 'Any', call_hash: 'Any', max_weight: 'Weight') -> Call: - 'Register approval for a dispatch to be made from a deterministic composite account if approved by a total of `threshold - 1` of `other_signatories`. **This function will NEVER execute the call, even if the approval threshold is reached.** It only registers approval. To actually execute the call, `as_multi` must be called with the full call data by any of the signatories. This function is more efficient than `as_multi` for intermediate approvals since it only requires the call hash, not the full call data. Payment: `DepositBase` will be reserved if this is the first approval, plus `threshold` times `DepositFactor`. It is returned once this dispatch happens or is cancelled. The dispatch origin for this call must be _Signed_. - `threshold`: The total number of approvals for this dispatch before it is executed. - `other_signatories`: The accounts (other than the sender) who can approve this dispatch. May not be empty. - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is not the first approval, then it must be `Some`, with the timepoint (block number and transaction index) of the first approval transaction. - `call_hash`: The hash of the call to be executed. NOTE: To execute the call after approvals are gathered, any signatory must call `as_multi` with the full call data. This function cannot execute the call. ## Complexity - `O(S)`. - Up to one balance-reserve or unreserve operation. - One passthrough operation, one insert, both `O(S)` where `S` is the number of signatories. `S` is capped by `MaxSignatories`, with weight being proportional. - One encode & hash, both of complexity `O(S)`. - Up to one binary search and insert (`O(logS + S)`). - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. - One event. - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit taken for its lifetime of `DepositBase + threshold * DepositFactor`.' + 'Register approval for a dispatch to be made from a deterministic composite account if approved by a total of `threshold - 1` of `other_signatories`. Payment: `DepositBase` will be reserved if this is the first approval, plus `threshold` times `DepositFactor`. It is returned once this dispatch happens or is cancelled. The dispatch origin for this call must be _Signed_. - `threshold`: The total number of approvals for this dispatch before it is executed. - `other_signatories`: The accounts (other than the sender) who can approve this dispatch. May not be empty. - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is not the first approval, then it must be `Some`, with the timepoint (block number and transaction index) of the first approval transaction. - `call_hash`: The hash of the call to be executed. NOTE: If this is the final approval, you will want to use `as_multi` instead. ## Complexity - `O(S)`. - Up to one balance-reserve or unreserve operation. - One passthrough operation, one insert, both `O(S)` where `S` is the number of signatories. `S` is capped by `MaxSignatories`, with weight being proportional. - One encode & hash, both of complexity `O(S)`. - Up to one binary search and insert (`O(logS + S)`). - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. - One event. - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit taken for its lifetime of `DepositBase + threshold * DepositFactor`.' return Call('Multisig', 'approve_as_multi', {'threshold': threshold, 'other_signatories': other_signatories, 'maybe_timepoint': maybe_timepoint, 'call_hash': call_hash, 'max_weight': max_weight}) @staticmethod def as_multi(threshold: 'u16', other_signatories: 'Any', maybe_timepoint: 'Any', call: 'RuntimeCall', max_weight: 'Weight') -> Call: - "Register approval for a dispatch to be made from a deterministic composite account if approved by a total of `threshold - 1` of `other_signatories`. **If the approval threshold is met (including the sender's approval), this will immediately execute the call.** This is the only way to execute a multisig call - `approve_as_multi` will never trigger execution. Payment: `DepositBase` will be reserved if this is the first approval, plus `threshold` times `DepositFactor`. It is returned once this dispatch happens or is cancelled. The dispatch origin for this call must be _Signed_. - `threshold`: The total number of approvals for this dispatch before it is executed. - `other_signatories`: The accounts (other than the sender) who can approve this dispatch. May not be empty. - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is not the first approval, then it must be `Some`, with the timepoint (block number and transaction index) of the first approval transaction. - `call`: The call to be executed. NOTE: For intermediate approvals (not the final approval), you should generally use `approve_as_multi` instead, since it only requires a hash of the call and is more efficient. Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise on success, result is `Ok` and the result from the interior call, if it was executed, may be found in the deposited `MultisigExecuted` event. ## Complexity - `O(S + Z + Call)`. - Up to one balance-reserve or unreserve operation. - One passthrough operation, one insert, both `O(S)` where `S` is the number of signatories. `S` is capped by `MaxSignatories`, with weight being proportional. - One call encode & hash, both of complexity `O(Z)` where `Z` is tx-len. - One encode & hash, both of complexity `O(S)`. - Up to one binary search and insert (`O(logS + S)`). - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. - One event. - The weight of the `call`. - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit taken for its lifetime of `DepositBase + threshold * DepositFactor`." + 'Register approval for a dispatch to be made from a deterministic composite account if approved by a total of `threshold - 1` of `other_signatories`. If there are enough, then dispatch the call. Payment: `DepositBase` will be reserved if this is the first approval, plus `threshold` times `DepositFactor`. It is returned once this dispatch happens or is cancelled. The dispatch origin for this call must be _Signed_. - `threshold`: The total number of approvals for this dispatch before it is executed. - `other_signatories`: The accounts (other than the sender) who can approve this dispatch. May not be empty. - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is not the first approval, then it must be `Some`, with the timepoint (block number and transaction index) of the first approval transaction. - `call`: The call to be executed. NOTE: Unless this is the final approval, you will generally want to use `approve_as_multi` instead, since it only requires a hash of the call. Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise on success, result is `Ok` and the result from the interior call, if it was executed, may be found in the deposited `MultisigExecuted` event. ## Complexity - `O(S + Z + Call)`. - Up to one balance-reserve or unreserve operation. - One passthrough operation, one insert, both `O(S)` where `S` is the number of signatories. `S` is capped by `MaxSignatories`, with weight being proportional. - One call encode & hash, both of complexity `O(Z)` where `Z` is tx-len. - One encode & hash, both of complexity `O(S)`. - Up to one binary search and insert (`O(logS + S)`). - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove. - One event. - The weight of the `call`. - Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit taken for its lifetime of `DepositBase + threshold * DepositFactor`.' return Call('Multisig', 'as_multi', {'threshold': threshold, 'other_signatories': other_signatories, 'maybe_timepoint': maybe_timepoint, 'call': call, 'max_weight': max_weight}) @staticmethod @@ -742,7 +742,7 @@ class Scheduler: @staticmethod def cancel(when: 'u32', index: 'u32') -> Call: - "Cancel a scheduled task (named or anonymous), by providing the block it is scheduled for execution in, as well as the index of the task in that block's agenda. In the case of a named task, it will remove it from the lookup table as well." + 'Cancel an anonymously scheduled task.' return Call('Scheduler', 'cancel', {'when': when, 'index': index}) @staticmethod @@ -782,12 +782,12 @@ def schedule_named_after(id: 'Any', after: 'u32', maybe_periodic: 'Any', priorit @staticmethod def set_retry(task: 'Any', retries: 'u8', period: 'u32') -> Call: - "Set a retry configuration for a task so that, in case its scheduled run fails, it will be retried after `period` blocks, for a total amount of `retries` retries or until it succeeds. Tasks which need to be scheduled for a retry are still subject to weight metering and agenda space, same as a regular task. If a periodic task fails, it will be scheduled normally while the task is retrying. Tasks scheduled as a result of a retry for a periodic task are unnamed, non-periodic clones of the original task. Their retry configuration will be derived from the original task's configuration, but will have a lower value for `remaining` than the original `total_retries`. This call **cannot** be used to set a retry configuration for a named task." + "Set a retry configuration for a task so that, in case its scheduled run fails, it will be retried after `period` blocks, for a total amount of `retries` retries or until it succeeds. Tasks which need to be scheduled for a retry are still subject to weight metering and agenda space, same as a regular task. If a periodic task fails, it will be scheduled normally while the task is retrying. Tasks scheduled as a result of a retry for a periodic task are unnamed, non-periodic clones of the original task. Their retry configuration will be derived from the original task's configuration, but will have a lower value for `remaining` than the original `total_retries`." return Call('Scheduler', 'set_retry', {'task': task, 'retries': retries, 'period': period}) @staticmethod def set_retry_named(id: 'Any', retries: 'u8', period: 'u32') -> Call: - "Set a retry configuration for a named task so that, in case its scheduled run fails, it will be retried after `period` blocks, for a total amount of `retries` retries or until it succeeds. Tasks which need to be scheduled for a retry are still subject to weight metering and agenda space, same as a regular task. If a periodic task fails, it will be scheduled normally while the task is retrying. Tasks scheduled as a result of a retry for a periodic task are unnamed, non-periodic clones of the original task. Their retry configuration will be derived from the original task's configuration, but will have a lower value for `remaining` than the original `total_retries`. This is the only way to set a retry configuration for a named task." + "Set a retry configuration for a named task so that, in case its scheduled run fails, it will be retried after `period` blocks, for a total amount of `retries` retries or until it succeeds. Tasks which need to be scheduled for a retry are still subject to weight metering and agenda space, same as a regular task. If a periodic task fails, it will be scheduled normally while the task is retrying. Tasks scheduled as a result of a retry for a periodic task are unnamed, non-periodic clones of the original task. Their retry configuration will be derived from the original task's configuration, but will have a lower value for `remaining` than the original `total_retries`." return Call('Scheduler', 'set_retry_named', {'id': id, 'retries': retries, 'period': period}) diff --git a/sdk/python/bittensor/_generated/storage.py b/sdk/python/bittensor/_generated/storage.py index e3685d54d7..cd76e7ec71 100644 --- a/sdk/python/bittensor/_generated/storage.py +++ b/sdk/python/bittensor/_generated/storage.py @@ -26,7 +26,7 @@ class System: ExtrinsicCount = Item('System', 'ExtrinsicCount', 'u32') InherentsApplied = Item('System', 'InherentsApplied', 'bool') BlockWeight = Item('System', 'BlockWeight', 'PerDispatchClass') - BlockSize = Item('System', 'BlockSize', 'u32') + AllExtrinsicsLen = Item('System', 'AllExtrinsicsLen', 'u32') BlockHash = Item('System', 'BlockHash', 'H256') ExtrinsicData = Item('System', 'ExtrinsicData', 'Vec') Number = Item('System', 'Number', 'u32') @@ -36,7 +36,6 @@ class System: EventCount = Item('System', 'EventCount', 'u32') EventTopics = Item('System', 'EventTopics', 'Vec<(u32, u32)>') LastRuntimeUpgrade = Item('System', 'LastRuntimeUpgrade', 'LastRuntimeUpgradeInfo') - BlocksTillUpgrade = Item('System', 'BlocksTillUpgrade', 'u8') UpgradedToU32RefCount = Item('System', 'UpgradedToU32RefCount', 'bool') UpgradedToTripleRefCount = Item('System', 'UpgradedToTripleRefCount', 'bool') ExecutionPhase = Item('System', 'ExecutionPhase', 'Phase') @@ -75,7 +74,6 @@ class Balances: class TransactionPayment: NextFeeMultiplier = Item('TransactionPayment', 'NextFeeMultiplier', 'FixedU128') StorageVersion = Item('TransactionPayment', 'StorageVersion', 'Releases') - TxPaymentCredit = Item('TransactionPayment', 'TxPaymentCredit', '()') class SubtensorModule: MinActivityCutoff = Item('SubtensorModule', 'MinActivityCutoff', 'u16') From 080bb347a5a5579867071a4974df10d8ed2d3526 Mon Sep 17 00:00:00 2001 From: UnArbosFive Date: Thu, 23 Jul 2026 19:16:50 +0200 Subject: [PATCH 59/63] Fix stable Python release publishing --- .github/scripts/resolve-release-artifact.sh | 4 +- .github/workflows/release-train.yml | 23 ++++++++ .github/workflows/watch-mainnet-release.yml | 65 ++++++++++++++------- docs/internals/release-process.mdx | 8 ++- sdk/bittensor-core-py/pyproject.toml | 2 +- sdk/python/pyproject.toml | 4 +- sdk/python/tests/unit/test_cli.py | 3 +- sdk/python/uv.lock | 4 +- 8 files changed, 80 insertions(+), 33 deletions(-) diff --git a/.github/scripts/resolve-release-artifact.sh b/.github/scripts/resolve-release-artifact.sh index cacb121c7b..510f9b29c7 100755 --- a/.github/scripts/resolve-release-artifact.sh +++ b/.github/scripts/resolve-release-artifact.sh @@ -31,8 +31,8 @@ repo_id=$(gh api "repos/$GITHUB_REPOSITORY" --jq '.id') # Newest-first so that, among equally-trusted artifacts, we take the latest. artifacts=$(gh api \ "repos/$GITHUB_REPOSITORY/actions/artifacts?name=mainnet-upgrade-${spec}&per_page=100" \ - --paginate --slurp \ - | jq -c '[.[].artifacts[]] | sort_by(.created_at) | reverse') + --paginate \ + | jq -sc '[.[].artifacts[]] | sort_by(.created_at) | reverse') count=$(jq 'length' <<<"$artifacts") i=0 diff --git a/.github/workflows/release-train.yml b/.github/workflows/release-train.yml index 868e236c19..3e7a5dd603 100644 --- a/.github/workflows/release-train.yml +++ b/.github/workflows/release-train.yml @@ -321,6 +321,29 @@ jobs: : ${base:?could not parse base version from sdk/python/pyproject.toml} core_base=$(sed -n 's/^version = "\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/p' sdk/bittensor-core-py/pyproject.toml | head -n 1) : ${core_base:?could not parse base version from sdk/bittensor-core-py/pyproject.toml} + + # PyPI versions are immutable. Reject an already-published stable + # base before producing more release candidates that can never be + # promoted to a final release. + for package_version in "bittensor:${base}" "bittensor-core:${core_base}"; do + package=${package_version%%:*} + version=${package_version#*:} + status=$(curl -sS --connect-timeout 10 --max-time 30 \ + -o /dev/null -w '%{http_code}' \ + "https://pypi.org/pypi/${package}/${version}/json") + case "$status" in + 404) ;; + 200) + echo "${package} ${version} is already published; bump the base version." + exit 1 + ;; + *) + echo "PyPI availability check for ${package} ${version} returned HTTP ${status}." + exit 1 + ;; + esac + done + echo "sdk=${base}rc${GITHUB_RUN_NUMBER}" >> $GITHUB_OUTPUT echo "core=${core_base}rc${GITHUB_RUN_NUMBER}" >> $GITHUB_OUTPUT diff --git a/.github/workflows/watch-mainnet-release.yml b/.github/workflows/watch-mainnet-release.yml index cbf67faea8..6cd365173c 100644 --- a/.github/workflows/watch-mainnet-release.yml +++ b/.github/workflows/watch-mainnet-release.yml @@ -44,6 +44,7 @@ jobs: release_needed: ${{ steps.compare.outputs.release_needed }} python_needed: ${{ steps.compare.outputs.python_needed }} spec_version: ${{ steps.compare.outputs.spec_version }} + release_tag: ${{ steps.compare.outputs.release_tag }} sha: ${{ steps.compare.outputs.sha }} steps: - uses: actions/checkout@v4 @@ -78,15 +79,22 @@ jobs: # Match both this workflow's tags (v424) and the legacy scheme # inherited from upstream (v3.4.9-424). Pre-releases do not count. - if gh release list --repo "$GITHUB_REPOSITORY" --limit 300 \ - --json tagName,isPrerelease \ - --jq '.[] | select(.isPrerelease | not) | .tagName' \ - | grep -Eq "^v${chain_spec}$|-${chain_spec}$"; then + release_tag=$(gh release list --repo "$GITHUB_REPOSITORY" --limit 300 \ + --json tagName,isDraft,isPrerelease \ + | jq -r --arg exact "v${chain_spec}" --arg suffix "-${chain_spec}" \ + '.[] | + select(.isDraft == false and .isPrerelease == false) | + select(.tagName == $exact or (.tagName | endswith($suffix))) | + .tagName' \ + | head -n 1) + if [ -n "$release_tag" ]; then echo "GitHub release for spec_version $chain_spec is complete." release_needed=false else + release_tag="v${chain_spec}" release_needed=true fi + echo "release_tag=$release_tag" >> "$GITHUB_OUTPUT" # v432 and earlier predate this marker. Every later # release retries until PyPI succeeds and this exact marker is stored. @@ -94,7 +102,7 @@ jobs: echo "v432 Python publication is handled manually." python_needed=false else - marker_id=$(gh api "repos/$GITHUB_REPOSITORY/releases/tags/v${chain_spec}" \ + marker_id=$(gh api "repos/$GITHUB_REPOSITORY/releases/tags/${release_tag}" \ --jq '.assets[] | select(.name == "python-publish-complete.json") | .id' \ 2>/dev/null | head -n 1 || true) if [ -z "$marker_id" ]; then @@ -103,7 +111,7 @@ jobs: gh api -H "Accept: application/octet-stream" \ "repos/$GITHUB_REPOSITORY/releases/assets/$marker_id" \ > /tmp/python-publish-complete.json - tag_sha=$(gh api "repos/$GITHUB_REPOSITORY/commits/v${chain_spec}" --jq '.sha') + tag_sha=$(gh api "repos/$GITHUB_REPOSITORY/commits/${release_tag}" --jq '.sha') jq -e --arg sha "$tag_sha" --argjson spec "$chain_spec" \ '.schema == 1 and .spec_version == $spec and .commit == $sha' \ /tmp/python-publish-complete.json >/dev/null \ @@ -121,6 +129,18 @@ jobs: exit 0 fi + # Once the GitHub release exists, its immutable tag is sufficient + # provenance for a Python-only retry. Do not keep the retry path + # dependent on the release train's 90-day workflow artifact. + if [ "$release_needed" = false ]; then + release_sha=$(gh api \ + "repos/$GITHUB_REPOSITORY/commits/${release_tag}" --jq '.sha') + : ${release_sha:?could not resolve released commit from $release_tag} + echo "Retrying Python publication from $release_tag at $release_sha" + echo "sha=$release_sha" >> "$GITHUB_OUTPUT" + exit 0 + fi + # Resolve what actually runs on chain, not HEAD: main can advance # while a multisig waits for its final signature. The provenance gate # admits artifacts only from release-train.yml pushes to main. @@ -310,23 +330,23 @@ jobs: working-directory: sdk/python run: uv build --out-dir ../../dist - # Second half of the v432 recovery: refuse to publish anything but the - # intended stable artifacts, so a failed stamp can never leak - # 11.0.0.dev0 to PyPI. - - name: Verify stable artifacts (v432 recovery) - if: needs.check.outputs.spec_version == '432' && needs.check.outputs.sha == '8586e65ec279644a6837cf25b12333064c77474e' + # Refuse to publish development or release-candidate artifacts from the + # stable channel. Also require the complete SDK/core platform set. + - name: Verify stable artifacts run: | + sdk_version=$(sed -n 's/^version = "\(.*\)"/\1/p' sdk/python/pyproject.toml | head -n 1) + core_version=$(sed -n 's/^version = "\(.*\)"/\1/p' sdk/bittensor-core-py/pyproject.toml | head -n 1) + : ${sdk_version:?could not parse stable SDK version} + : ${core_version:?could not parse stable core version} + [[ "$sdk_version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] \ + || { echo "SDK version is not stable: $sdk_version"; exit 1; } + [[ "$core_version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] \ + || { echo "core version is not stable: $core_version"; exit 1; } ls -la dist - test -f dist/bittensor-11.0.0-py3-none-any.whl - test -f dist/bittensor-11.0.0.tar.gz - compgen -G 'dist/bittensor_core-0.1.0-*.whl' >/dev/null - test -f dist/bittensor_core-0.1.0.tar.gz - for f in dist/*; do - # *0rc* not *rc*: "aarch64" in wheel platform tags contains "rc" - case "$f" in - *dev*|*0rc*) echo "unexpected pre-release artifact: $f"; exit 1 ;; - esac - done + test -f "dist/bittensor-${sdk_version}-py3-none-any.whl" + test -f "dist/bittensor-${sdk_version}.tar.gz" + compgen -G "dist/bittensor_core-${core_version}-*.whl" >/dev/null + test -f "dist/bittensor_core-${core_version}.tar.gz" # PEP 740 provenance: sign every dist with this job's OIDC identity. # Must happen here, not in build-core-wheels.yml — PyPI only accepts @@ -359,7 +379,8 @@ jobs: --arg workflow_run "$GITHUB_RUN_ID" \ '{schema: 1, spec_version: $spec, commit: $sha, workflow_run: $workflow_run}' \ > python-publish-complete.json - gh release upload "v${SPEC_VERSION}" --repo "$GITHUB_REPOSITORY" --clobber \ + gh release upload "${{ needs.check.outputs.release_tag }}" \ + --repo "$GITHUB_REPOSITORY" --clobber \ python-publish-complete.json publish-crates: diff --git a/docs/internals/release-process.mdx b/docs/internals/release-process.mdx index b5126afebb..f55a1faa52 100644 --- a/docs/internals/release-process.mdx +++ b/docs/internals/release-process.mdx @@ -92,9 +92,11 @@ mainnet*, not what was merged. Stable Python publication has an independent completion marker attached to the GitHub release. The marker is written only after PyPI accepts every SDK and `bittensor-core` distribution, so a failed or partial upload is retried on the -next watcher run even if the GitHub release already exists. The SDK's committed -`X.Y.Z.dev0` version is stamped to `X.Y.Z` for this build. The already-deployed -v432 release predates the marker and is recovered manually. +next watcher run even if the GitHub release already exists or the release-train +artifact has expired. The SDK's committed `X.Y.Z.dev0` version is stamped to +`X.Y.Z` for this build. The release train rejects a base SDK or core version +that already exists on PyPI before publishing release candidates. The +already-deployed v432 release predates the marker and is recovered manually. The watcher explicitly dispatches `docker.yml` and `docker-localnet.yml` because releases created with the default `GITHUB_TOKEN` do not emit another diff --git a/sdk/bittensor-core-py/pyproject.toml b/sdk/bittensor-core-py/pyproject.toml index 9f5306119c..b0781c3453 100644 --- a/sdk/bittensor-core-py/pyproject.toml +++ b/sdk/bittensor-core-py/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "maturin" name = "bittensor-core" # Static (not read from Cargo.toml) so the release train can stamp PEP 440 # rc/dev suffixes that cargo's semver would reject. -version = "0.1.0" +version = "0.1.1" description = "The chain-defined compute core for Bittensor clients: sp-core keys, keyfiles, drand timelock, ML-KEM, SCALE codec, and RFC-0078 metadata digest, built from the bittensor monorepo" readme = "README.md" requires-python = ">=3.10" diff --git a/sdk/python/pyproject.toml b/sdk/python/pyproject.toml index 7c2667331b..0b5b726b96 100644 --- a/sdk/python/pyproject.toml +++ b/sdk/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "bittensor" -version = "11.0.0.dev0" +version = "11.0.1.dev0" description = "A lean Python SDK (import bittensor) and CLI (btcli) for the Bittensor chain." readme = "README.md" requires-python = ">=3.10,<3.14" @@ -18,7 +18,7 @@ dependencies = [ # Keys, keyfiles, timelock, ML-KEM crypto, and the SCALE codec/runtime # engine: the in-repo Rust core, built against the same crate revisions # as the runtime. - "bittensor-core>=0.1.0,<0.2.0", + "bittensor-core>=0.1.1,<0.2.0", # `btcli` terminal UI. The CLI is a first-class part of the package, so # its dependencies are unconditional. "typer>=0.12.0", diff --git a/sdk/python/tests/unit/test_cli.py b/sdk/python/tests/unit/test_cli.py index f89274ce9e..06216594c3 100644 --- a/sdk/python/tests/unit/test_cli.py +++ b/sdk/python/tests/unit/test_cli.py @@ -10,6 +10,7 @@ import contextlib import json +from importlib.metadata import version as package_version import pytest from typer.testing import CliRunner @@ -77,7 +78,7 @@ def test_help(self): def test_version(self): result = invoke("--version") assert result.exit_code == 0 - assert "11.0.0" in result.output + assert result.output.strip() == package_version("bittensor") def test_tools_catalog(self): result = invoke("tools") diff --git a/sdk/python/uv.lock b/sdk/python/uv.lock index d58ced3cb9..08e35d7fc8 100644 --- a/sdk/python/uv.lock +++ b/sdk/python/uv.lock @@ -90,7 +90,7 @@ wheels = [ [[package]] name = "bittensor" -version = "11.0.0.dev0" +version = "11.0.1.dev0" source = { editable = "." } dependencies = [ { name = "bittensor-core" }, @@ -137,7 +137,7 @@ dev = [ [[package]] name = "bittensor-core" -version = "0.1.0" +version = "0.1.1" source = { directory = "../bittensor-core-py" } [[package]] From b2f28ed155a282c75f9bf8330ddd2b853ca77a90 Mon Sep 17 00:00:00 2001 From: UnArbosFive Date: Thu, 23 Jul 2026 19:25:15 +0200 Subject: [PATCH 60/63] Harden release retry provenance --- .github/workflows/watch-mainnet-release.yml | 43 ++++++++++++++++++--- docs/internals/release-process.mdx | 10 +++-- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/.github/workflows/watch-mainnet-release.yml b/.github/workflows/watch-mainnet-release.yml index 6cd365173c..99bfd82b14 100644 --- a/.github/workflows/watch-mainnet-release.yml +++ b/.github/workflows/watch-mainnet-release.yml @@ -129,13 +129,46 @@ jobs: exit 0 fi - # Once the GitHub release exists, its immutable tag is sufficient - # provenance for a Python-only retry. Do not keep the retry path - # dependent on the release train's 90-day workflow artifact. + # The final release carries pending-release.json copied from the + # provenance-gated workflow artifact. Use that durable manifest for + # Python-only retries, and fail closed if the release target or tag + # has moved away from its verified commit. if [ "$release_needed" = false ]; then - release_sha=$(gh api \ + release_json=$(gh api \ + "repos/$GITHUB_REPOSITORY/releases/tags/${release_tag}") + manifest_id=$(jq -r \ + '.assets[] | select(.name == "pending-release.json") | .id' \ + <<<"$release_json" | head -n 1) + : ${manifest_id:?release $release_tag has no pending-release.json provenance asset} + gh api -H "Accept: application/octet-stream" \ + "repos/$GITHUB_REPOSITORY/releases/assets/${manifest_id}" \ + > /tmp/released-pending-release.json + + release_sha=$(jq -er \ + '.commit | strings | select(test("^[0-9a-f]{40}$"))' \ + /tmp/released-pending-release.json) + manifest_spec=$(jq -er '.expected_spec_version | numbers' \ + /tmp/released-pending-release.json) + [ "$manifest_spec" = "$chain_spec" ] \ + || { echo "release manifest expects spec $manifest_spec, chain runs $chain_spec"; exit 1; } + + target_sha=$(jq -er \ + '.target_commitish | strings | select(test("^[0-9a-f]{40}$"))' \ + <<<"$release_json") + tag_sha=$(gh api \ "repos/$GITHUB_REPOSITORY/commits/${release_tag}" --jq '.sha') - : ${release_sha:?could not resolve released commit from $release_tag} + [ "$release_sha" = "$target_sha" ] \ + || { echo "release target $target_sha does not match manifest commit $release_sha"; exit 1; } + [ "$release_sha" = "$tag_sha" ] \ + || { echo "tag $release_tag moved from manifest commit $release_sha to $tag_sha"; exit 1; } + + status=$(gh api \ + "repos/$GITHUB_REPOSITORY/compare/${release_sha}...main" --jq '.status') + case "$status" in + ahead|identical) ;; + *) echo "released commit $release_sha is not an ancestor of main"; exit 1 ;; + esac + echo "Retrying Python publication from $release_tag at $release_sha" echo "sha=$release_sha" >> "$GITHUB_OUTPUT" exit 0 diff --git a/docs/internals/release-process.mdx b/docs/internals/release-process.mdx index f55a1faa52..8721a13bac 100644 --- a/docs/internals/release-process.mdx +++ b/docs/internals/release-process.mdx @@ -93,10 +93,12 @@ Stable Python publication has an independent completion marker attached to the GitHub release. The marker is written only after PyPI accepts every SDK and `bittensor-core` distribution, so a failed or partial upload is retried on the next watcher run even if the GitHub release already exists or the release-train -artifact has expired. The SDK's committed `X.Y.Z.dev0` version is stamped to -`X.Y.Z` for this build. The release train rejects a base SDK or core version -that already exists on PyPI before publishing release candidates. The -already-deployed v432 release predates the marker and is recovered manually. +artifact has expired. Retries use the release's provenance manifest and require +its commit to still match both the release target and tag. The SDK's committed +`X.Y.Z.dev0` version is stamped to `X.Y.Z` for this build. The release train +rejects a base SDK or core version that already exists on PyPI before +publishing release candidates. The already-deployed v432 release predates the +marker and is recovered manually. The watcher explicitly dispatches `docker.yml` and `docker-localnet.yml` because releases created with the default `GITHUB_TOKEN` do not emit another From 1f701da2a66aa62f3b79b4d143e98f18ec530436 Mon Sep 17 00:00:00 2001 From: UnArbosFive Date: Thu, 23 Jul 2026 19:31:20 +0200 Subject: [PATCH 61/63] Bind release retries to mainnet mirror --- .github/workflows/watch-mainnet-release.yml | 8 ++++++++ docs/internals/release-process.mdx | 10 +++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/workflows/watch-mainnet-release.yml b/.github/workflows/watch-mainnet-release.yml index 99bfd82b14..574ecbc47b 100644 --- a/.github/workflows/watch-mainnet-release.yml +++ b/.github/workflows/watch-mainnet-release.yml @@ -162,6 +162,14 @@ jobs: [ "$release_sha" = "$tag_sha" ] \ || { echo "tag $release_tag moved from manifest commit $release_sha to $tag_sha"; exit 1; } + # The mainnet mirror is moved by the release job through its + # protected deploy key only after the on-chain upgrade executes. + # Unlike release metadata, it is an independent trust anchor. + mainnet_sha=$(gh api \ + "repos/$GITHUB_REPOSITORY/commits/mainnet" --jq '.sha') + [ "$release_sha" = "$mainnet_sha" ] \ + || { echo "protected mainnet mirror $mainnet_sha does not match release commit $release_sha"; exit 1; } + status=$(gh api \ "repos/$GITHUB_REPOSITORY/compare/${release_sha}...main" --jq '.status') case "$status" in diff --git a/docs/internals/release-process.mdx b/docs/internals/release-process.mdx index 8721a13bac..9502ed5159 100644 --- a/docs/internals/release-process.mdx +++ b/docs/internals/release-process.mdx @@ -94,11 +94,11 @@ GitHub release. The marker is written only after PyPI accepts every SDK and `bittensor-core` distribution, so a failed or partial upload is retried on the next watcher run even if the GitHub release already exists or the release-train artifact has expired. Retries use the release's provenance manifest and require -its commit to still match both the release target and tag. The SDK's committed -`X.Y.Z.dev0` version is stamped to `X.Y.Z` for this build. The release train -rejects a base SDK or core version that already exists on PyPI before -publishing release candidates. The already-deployed v432 release predates the -marker and is recovered manually. +its commit to still match the release target, tag, and protected `mainnet` +mirror. The SDK's committed `X.Y.Z.dev0` version is stamped to `X.Y.Z` for this +build. The release train rejects a base SDK or core version that already exists +on PyPI before publishing release candidates. The already-deployed v432 release +predates the marker and is recovered manually. The watcher explicitly dispatches `docker.yml` and `docker-localnet.yml` because releases created with the default `GITHUB_TOKEN` do not emit another From f0a271308b8949d8a9d3d3c8959a25fa91d5893a Mon Sep 17 00:00:00 2001 From: UnArbosFive Date: Thu, 23 Jul 2026 21:32:49 +0200 Subject: [PATCH 62/63] Harden stable release publication --- .github/scripts/check-python-release.py | 344 ++++++++++++++++++ .github/scripts/release-python-versions.py | 46 +++ .github/scripts/resolve-release-artifact.sh | 40 +- .github/scripts/verify-release-artifact.py | 177 +++++++++ .github/workflows/release-train.yml | 101 ++++-- .github/workflows/watch-mainnet-release.yml | 381 +++++++++++--------- docs/internals/release-process.mdx | 40 +- 7 files changed, 919 insertions(+), 210 deletions(-) create mode 100644 .github/scripts/check-python-release.py create mode 100644 .github/scripts/release-python-versions.py create mode 100644 .github/scripts/verify-release-artifact.py diff --git a/.github/scripts/check-python-release.py b/.github/scripts/check-python-release.py new file mode 100644 index 0000000000..fc24b233e2 --- /dev/null +++ b/.github/scripts/check-python-release.py @@ -0,0 +1,344 @@ +#!/usr/bin/env python3 +"""Check whether the complete, attested stable Python release exists on PyPI.""" + +from __future__ import annotations + +import argparse +import base64 +import json +import re +import sys +from collections.abc import Callable +from typing import Any +from urllib.error import HTTPError, URLError +from urllib.parse import quote +from urllib.request import Request, urlopen + + +VERSION_RE = re.compile(r"^[0-9]+\.[0-9]+\.[0-9]+$") +SHA256_RE = re.compile(r"^[0-9a-f]{64}$") +MAX_RESPONSE_SIZE = 10 * 1024 * 1024 +PUBLISH_PREDICATE = "https://docs.pypi.org/attestations/publish/v1" +STATEMENT_TYPE = "https://in-toto.io/Statement/v1" + + +class ApiError(RuntimeError): + """PyPI could not provide authoritative state.""" + + +class IncompleteRelease(RuntimeError): + """One or more required, correctly attested files are not yet on PyPI.""" + + +def fetch_json(url: str, *, timeout: int = 30) -> dict[str, Any] | None: + request = Request( + url, + headers={ + "Accept": "application/json", + "User-Agent": "subtensor-release-watcher/1", + }, + ) + try: + with urlopen(request, timeout=timeout) as response: + data = response.read(MAX_RESPONSE_SIZE + 1) + except HTTPError as error: + if error.code == 404: + return None + raise ApiError(f"{url} returned HTTP {error.code}") from error + except (OSError, URLError) as error: + raise ApiError(f"could not fetch {url}: {error}") from error + if len(data) > MAX_RESPONSE_SIZE: + raise ApiError(f"{url} exceeded the response size limit") + try: + value = json.loads(data) + except (UnicodeDecodeError, json.JSONDecodeError) as error: + raise ApiError(f"{url} did not return valid JSON") from error + if not isinstance(value, dict): + raise ApiError(f"{url} did not return a JSON object") + return value + + +def _valid_file(entry: object, *, package_type: str) -> bool: + if not isinstance(entry, dict): + return False + digest = entry.get("digests") + return ( + entry.get("packagetype") == package_type + and entry.get("yanked") is False + and isinstance(entry.get("filename"), str) + and isinstance(digest, dict) + and isinstance(digest.get("sha256"), str) + and SHA256_RE.fullmatch(digest["sha256"]) is not None + ) + + +def _core_platform(filename: str, version: str) -> str | None: + prefix = f"bittensor_core-{version}-" + if not filename.startswith(prefix) or not filename.endswith(".whl"): + return None + wheel_tags = filename[len(prefix) : -4].split("-", 2) + if len(wheel_tags) != 3 or wheel_tags[0] != "cp310" or wheel_tags[1] != "abi3": + return None + platform = wheel_tags[2] + if "manylinux" in platform and platform.endswith("_x86_64"): + return "linux-x86_64" + if "manylinux" in platform and platform.endswith("_aarch64"): + return "linux-aarch64" + if platform.startswith("macosx_") and platform.endswith("_x86_64"): + return "macos-x86_64" + if platform.startswith("macosx_") and platform.endswith("_arm64"): + return "macos-arm64" + return None + + +def _release_files( + metadata: dict[str, Any], *, package: str +) -> dict[str, dict[str, Any]]: + entries = metadata.get("urls") + if not isinstance(entries, list): + raise ApiError(f"PyPI metadata for {package} has no file list") + + files: dict[str, dict[str, Any]] = {} + for entry in entries: + if not isinstance(entry, dict): + raise ApiError(f"PyPI metadata for {package} has an invalid file entry") + if entry.get("yanked") is not False: + filename = entry.get("filename", "") + raise IncompleteRelease(f"{package} has yanked distribution {filename}") + package_type = entry.get("packagetype") + if package_type not in {"bdist_wheel", "sdist"} or not _valid_file( + entry, package_type=package_type + ): + filename = entry.get("filename", "") + raise IncompleteRelease( + f"{package} has invalid non-yanked distribution metadata for {filename}" + ) + filename = entry["filename"] + if filename in files: + raise IncompleteRelease( + f"{package} has duplicate non-yanked distribution {filename}" + ) + files[filename] = entry + return files + + +def _required_files( + sdk_metadata: dict[str, Any], core_metadata: dict[str, Any], sdk: str, core: str +) -> dict[str, dict[str, Any]]: + required: dict[str, dict[str, Any]] = {} + expected_sdk = { + f"bittensor-{sdk}-py3-none-any.whl": "bdist_wheel", + f"bittensor-{sdk}.tar.gz": "sdist", + } + sdk_files = _release_files(sdk_metadata, package="bittensor") + if set(sdk_files) != set(expected_sdk): + missing = sorted(set(expected_sdk) - set(sdk_files)) + unexpected = sorted(set(sdk_files) - set(expected_sdk)) + details = [] + if missing: + details.append(f"missing {', '.join(missing)}") + if unexpected: + details.append(f"unexpected {', '.join(unexpected)}") + raise IncompleteRelease( + f"bittensor {sdk} distribution set is incomplete or unsafe: " + + "; ".join(details) + ) + for filename, package_type in expected_sdk.items(): + entry = sdk_files[filename] + if entry["packagetype"] != package_type: + raise IncompleteRelease( + f"{filename} has package type {entry['packagetype']}, expected {package_type}" + ) + required[f"sdk:{filename}"] = entry + + core_sdist = f"bittensor_core-{core}.tar.gz" + core_files = _release_files(core_metadata, package="bittensor-core") + core_sdist_entry = core_files.pop(core_sdist, None) + if core_sdist_entry is None: + raise IncompleteRelease(f"missing non-yanked {core_sdist}") + if core_sdist_entry["packagetype"] != "sdist": + raise IncompleteRelease( + f"{core_sdist} has package type {core_sdist_entry['packagetype']}, expected sdist" + ) + required[f"core:{core_sdist}"] = core_sdist_entry + + expected_platforms = { + "linux-x86_64", + "linux-aarch64", + "macos-x86_64", + "macos-arm64", + } + platform_files: dict[str, dict[str, Any]] = {} + unexpected_core: list[str] = [] + for filename, entry in sorted(core_files.items()): + platform = ( + _core_platform(filename, core) + if entry["packagetype"] == "bdist_wheel" + else None + ) + if platform is None or platform not in expected_platforms: + unexpected_core.append(filename) + continue + if platform in platform_files: + raise IncompleteRelease( + f"multiple non-yanked bittensor-core {platform} cp310-abi3 wheels" + ) + platform_files[platform] = entry + if unexpected_core: + raise IncompleteRelease( + "bittensor-core has unexpected non-yanked distributions: " + + ", ".join(unexpected_core) + ) + missing_platforms = sorted(expected_platforms - set(platform_files)) + if missing_platforms: + raise IncompleteRelease( + "missing non-yanked bittensor-core cp310-abi3 wheels for " + + ", ".join(missing_platforms) + ) + for platform, entry in sorted(platform_files.items()): + required[f"core:{platform}"] = entry + return required + + +def _matching_publish_attestation( + provenance: dict[str, Any], + *, + filename: str, + sha256: str, + repository: str, + workflow: str, + environment: str, +) -> bool: + if provenance.get("version") != 1: + return False + bundles = provenance.get("attestation_bundles") + if not isinstance(bundles, list): + return False + for bundle in bundles: + if not isinstance(bundle, dict): + continue + publisher = bundle.get("publisher") + if not isinstance(publisher, dict) or any( + ( + publisher.get("kind") != "GitHub", + publisher.get("repository") != repository, + publisher.get("workflow") != workflow, + publisher.get("environment") != environment, + ) + ): + continue + attestations = bundle.get("attestations") + if not isinstance(attestations, list): + continue + for attestation in attestations: + try: + encoded = attestation["envelope"]["statement"] + statement = json.loads(base64.b64decode(encoded, validate=True)) + except ( + KeyError, + TypeError, + ValueError, + UnicodeDecodeError, + json.JSONDecodeError, + ): + continue + if not isinstance(statement, dict): + continue + if ( + statement.get("_type") != STATEMENT_TYPE + or statement.get("predicateType") != PUBLISH_PREDICATE + ): + continue + subjects = statement.get("subject") + if not isinstance(subjects, list): + continue + for subject in subjects: + if ( + isinstance(subject, dict) + and subject.get("name") == filename + and isinstance(subject.get("digest"), dict) + and subject["digest"].get("sha256") == sha256 + ): + return True + return False + + +def check_release( + *, + sdk_version: str, + core_version: str, + repository: str, + workflow: str, + environment: str, + base_url: str = "https://pypi.org", + get_json: Callable[[str], dict[str, Any] | None] = fetch_json, +) -> list[str]: + for version in (sdk_version, core_version): + if VERSION_RE.fullmatch(version) is None: + raise ValueError(f"{version!r} is not a stable X.Y.Z version") + + sdk_url = f"{base_url}/pypi/bittensor/{quote(sdk_version, safe='')}/json" + core_url = f"{base_url}/pypi/bittensor-core/{quote(core_version, safe='')}/json" + sdk_metadata = get_json(sdk_url) + core_metadata = get_json(core_url) + if sdk_metadata is None: + raise IncompleteRelease(f"bittensor {sdk_version} is not published") + if core_metadata is None: + raise IncompleteRelease(f"bittensor-core {core_version} is not published") + + required = _required_files(sdk_metadata, core_metadata, sdk_version, core_version) + verified: list[str] = [] + for key, entry in sorted(required.items()): + package = "bittensor" if key.startswith("sdk:") else "bittensor-core" + filename = entry["filename"] + provenance_url = ( + f"{base_url}/integrity/{package}/" + f"{quote(sdk_version if package == 'bittensor' else core_version, safe='')}/" + f"{quote(filename, safe='')}/provenance" + ) + provenance = get_json(provenance_url) + if provenance is None or not _matching_publish_attestation( + provenance, + filename=filename, + sha256=entry["digests"]["sha256"], + repository=repository, + workflow=workflow, + environment=environment, + ): + raise IncompleteRelease( + f"{filename} has no matching trusted-publisher attestation" + ) + verified.append(filename) + return verified + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--sdk-version", required=True) + parser.add_argument("--core-version", required=True) + parser.add_argument("--repository", required=True) + parser.add_argument("--workflow", default="watch-mainnet-release.yml") + parser.add_argument("--environment", default="mainnet") + parser.add_argument("--base-url", default="https://pypi.org") + arguments = parser.parse_args() + try: + verified = check_release( + sdk_version=arguments.sdk_version, + core_version=arguments.core_version, + repository=arguments.repository, + workflow=arguments.workflow, + environment=arguments.environment, + base_url=arguments.base_url.rstrip("/"), + ) + except IncompleteRelease as error: + print(f"Python release incomplete: {error}", file=sys.stderr) + return 1 + except (ApiError, ValueError) as error: + print(f"could not verify Python release: {error}", file=sys.stderr) + return 2 + print(f"verified {len(verified)} attested Python release files") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/.github/scripts/release-python-versions.py b/.github/scripts/release-python-versions.py new file mode 100644 index 0000000000..092daa019a --- /dev/null +++ b/.github/scripts/release-python-versions.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python3 +"""Read the stable Python versions expected from an immutable release commit.""" + +from __future__ import annotations + +import argparse +import json +import re +import sys +from pathlib import Path + + +SDK_VERSION_RE = re.compile( + r'^version = "([0-9]+\.[0-9]+\.[0-9]+)\.dev0"$', re.MULTILINE +) +CORE_VERSION_RE = re.compile(r'^version = "([0-9]+\.[0-9]+\.[0-9]+)"$', re.MULTILINE) + + +def release_versions(sdk_manifest: str, core_manifest: str) -> tuple[str, str]: + sdk = SDK_VERSION_RE.search(sdk_manifest) + if sdk is None: + raise ValueError("SDK manifest must declare version X.Y.Z.dev0") + core = CORE_VERSION_RE.search(core_manifest) + if core is None: + raise ValueError("core manifest must declare stable version X.Y.Z") + return sdk.group(1), core.group(1) + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("sdk_manifest", type=Path) + parser.add_argument("core_manifest", type=Path) + arguments = parser.parse_args() + try: + sdk, core = release_versions( + arguments.sdk_manifest.read_text(), arguments.core_manifest.read_text() + ) + except (OSError, ValueError) as error: + print(f"could not determine release versions: {error}", file=sys.stderr) + return 1 + print(json.dumps({"sdk": sdk, "core": core}, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/.github/scripts/resolve-release-artifact.sh b/.github/scripts/resolve-release-artifact.sh index 510f9b29c7..7cc0940b83 100755 --- a/.github/scripts/resolve-release-artifact.sh +++ b/.github/scripts/resolve-release-artifact.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash # Resolve the id of the `mainnet-upgrade-` workflow artifact, but only -# accept one whose provenance proves the release train produced it. +# accept one whose provenance and contents match the immutable release tag and +# the runtime bytes finalized on chain. # # Why this matters: GitHub stores artifacts uploaded by *fork* pull requests in # the *base* repository's artifact store. The artifact name is attacker- @@ -14,19 +15,31 @@ # # We require the artifact's producing run to be: # * from this repository (not a fork) — head_repository_id == repo id -# * a push to the trunk — event == push, head_branch == main +# * a train run on the trunk — push/workflow_dispatch on main # * the release train workflow — path == release-train.yml +# * built from the immutable release tag — head_sha == expected commit # * built from a commit on main — head_sha is an ancestor of main +# * the exact finalized runtime — BLAKE2b-256(wasm) == :code hash # # Prints the resolved artifact id to stdout on success; exits non-zero if no # trustworthy artifact exists. set -euo pipefail spec="${1:?spec_version required}" +expected_commit="${2:?expected commit required}" +expected_code_hash="${3:?expected finalized code hash required}" : "${GITHUB_REPOSITORY:?GITHUB_REPOSITORY required}" : "${GH_TOKEN:?GH_TOKEN required}" +[[ "$spec" =~ ^[0-9]+$ ]] || { echo "spec_version must be an integer" >&2; exit 1; } +[[ "$expected_commit" =~ ^[0-9a-f]{40}$ ]] \ + || { echo "expected commit must be a lowercase 40-byte Git SHA" >&2; exit 1; } +[[ "$expected_code_hash" =~ ^0x[0-9a-f]{64}$ ]] \ + || { echo "expected code hash must be a lowercase 32-byte hex digest" >&2; exit 1; } + repo_id=$(gh api "repos/$GITHUB_REPOSITORY" --jq '.id') +temp_dir=$(mktemp -d) +trap 'rm -rf "$temp_dir"' EXIT # Newest-first so that, among equally-trusted artifacts, we take the latest. artifacts=$(gh api \ @@ -51,12 +64,18 @@ while (( i < count )); do [[ -n "$run_id" ]] || continue [[ "$head_repo_id" == "$repo_id" ]] || { echo "skip artifact $art_id: not from this repo (head_repository_id=$head_repo_id)" >&2; continue; } [[ "$head_branch" == "main" ]] || { echo "skip artifact $art_id: head_branch=$head_branch != main" >&2; continue; } + [[ "$head_sha" == "$expected_commit" ]] || { echo "skip artifact $art_id: head_sha=$head_sha != release tag $expected_commit" >&2; continue; } run=$(gh api "repos/$GITHUB_REPOSITORY/actions/runs/${run_id}") event=$(jq -r '.event' <<<"$run") wf_path=$(jq -r '.path' <<<"$run") - [[ "$event" == "push" ]] || { echo "skip artifact $art_id: run event=$event != push" >&2; continue; } + run_sha=$(jq -r '.head_sha // empty' <<<"$run") + run_repo_id=$(jq -r '.head_repository.id // empty' <<<"$run") + [[ "$run_repo_id" == "$repo_id" ]] || { echo "skip artifact $art_id: run is not from this repo" >&2; continue; } + [[ "$event" == "push" || "$event" == "workflow_dispatch" ]] \ + || { echo "skip artifact $art_id: unsupported run event=$event" >&2; continue; } [[ "$wf_path" == ".github/workflows/release-train.yml" ]] || { echo "skip artifact $art_id: run workflow=$wf_path" >&2; continue; } + [[ "$run_sha" == "$expected_commit" ]] || { echo "skip artifact $art_id: run head_sha=$run_sha != release tag $expected_commit" >&2; continue; } # head_sha must be reachable from main. Use the compare API so we do not need # a full local clone: main is "ahead"/"identical" iff head_sha is an ancestor. @@ -66,9 +85,22 @@ while (( i < count )); do *) echo "skip artifact $art_id: head_sha $head_sha not an ancestor of main (compare status=$status)" >&2; continue ;; esac + archive="$temp_dir/artifact-${art_id}.zip" + if ! gh api "repos/$GITHUB_REPOSITORY/actions/artifacts/${art_id}/zip" > "$archive"; then + echo "skip artifact $art_id: could not download archive" >&2 + continue + fi + if ! python3 .github/scripts/verify-release-artifact.py "$archive" \ + --spec "$spec" \ + --commit "$expected_commit" \ + --code-hash "$expected_code_hash" >&2; then + echo "skip artifact $art_id: contents do not match finalized release" >&2 + continue + fi + echo "$art_id" exit 0 done -echo "no trustworthy mainnet-upgrade-${spec} artifact found (must be produced by a push to main of release-train.yml in this repo)" >&2 +echo "no trustworthy mainnet-upgrade-${spec} artifact matches tag commit ${expected_commit} and finalized code hash ${expected_code_hash}" >&2 exit 1 diff --git a/.github/scripts/verify-release-artifact.py b/.github/scripts/verify-release-artifact.py new file mode 100644 index 0000000000..bd57138961 --- /dev/null +++ b/.github/scripts/verify-release-artifact.py @@ -0,0 +1,177 @@ +#!/usr/bin/env python3 +"""Verify that a release-train artifact is the runtime finalized on chain.""" + +from __future__ import annotations + +import argparse +import hashlib +import json +import re +import sys +import zipfile +from pathlib import Path +from typing import Any + + +SHA_RE = re.compile(r"^[0-9a-f]{40}$") +HASH_RE = re.compile(r"^(?:0x)?([0-9a-f]{64})$") +MAX_ARCHIVE_SIZE = 100 * 1024 * 1024 +MAX_JSON_SIZE = 2 * 1024 * 1024 +MAX_WASM_SIZE = 50 * 1024 * 1024 +MAX_CALL_DATA_SIZE = 20 * 1024 * 1024 + + +class ValidationError(ValueError): + """The artifact does not match the expected immutable release identity.""" + + +def _hash(value: str, name: str) -> str: + match = HASH_RE.fullmatch(value) + if match is None: + raise ValidationError(f"{name} must be a lowercase 32-byte hex digest") + return match.group(1) + + +def _object(data: bytes, name: str) -> dict[str, Any]: + if len(data) > MAX_JSON_SIZE: + raise ValidationError(f"{name} is unexpectedly large") + try: + value = json.loads(data) + except (UnicodeDecodeError, json.JSONDecodeError) as error: + raise ValidationError(f"{name} is not valid JSON") from error + if not isinstance(value, dict): + raise ValidationError(f"{name} must contain a JSON object") + return value + + +def _require_equal(actual: object, expected: object, name: str) -> None: + if actual != expected: + raise ValidationError(f"{name} is {actual!r}, expected {expected!r}") + + +def verify_archive( + archive: Path, + *, + expected_spec: int, + expected_commit: str, + expected_code_hash: str, +) -> dict[str, object]: + """Validate an Actions artifact zip and return its verified identity.""" + if expected_spec < 0: + raise ValidationError("expected spec_version must be non-negative") + if SHA_RE.fullmatch(expected_commit) is None: + raise ValidationError("expected commit must be a lowercase 40-byte Git SHA") + code_hash = _hash(expected_code_hash, "expected code hash") + + try: + artifact = zipfile.ZipFile(archive) + except (OSError, zipfile.BadZipFile) as error: + raise ValidationError("artifact is not a readable zip file") from error + + with artifact: + files: dict[str, zipfile.ZipInfo] = {} + total_size = 0 + for member in artifact.infolist(): + if member.is_dir(): + continue + name = member.filename + parts = Path(name).parts + if ( + name.startswith(("/", "\\")) + or "\\" in name + or ".." in parts + or len(parts) != 1 + ): + raise ValidationError(f"artifact contains unsafe member {name!r}") + if name in files: + raise ValidationError(f"artifact contains duplicate member {name!r}") + total_size += member.file_size + files[name] = member + if total_size > MAX_ARCHIVE_SIZE: + raise ValidationError("artifact expands beyond the size limit") + + required = { + "subtensor.wasm", + "subtensor-digest.json", + "proxy_proxy_blob.hex", + "pending-release.json", + "upgrade-manifest.json", + } + missing = sorted(required - files.keys()) + if missing: + raise ValidationError(f"artifact is missing: {', '.join(missing)}") + + wasm_info = files["subtensor.wasm"] + if not 0 < wasm_info.file_size <= MAX_WASM_SIZE: + raise ValidationError("subtensor.wasm has an invalid size") + wasm = artifact.read(wasm_info) + + call_data_info = files["proxy_proxy_blob.hex"] + if not 0 < call_data_info.file_size <= MAX_CALL_DATA_SIZE: + raise ValidationError("proxy_proxy_blob.hex has an invalid size") + + pending = _object( + artifact.read(files["pending-release.json"]), "pending-release.json" + ) + digest = _object( + artifact.read(files["subtensor-digest.json"]), "subtensor-digest.json" + ) + manifest = _object( + artifact.read(files["upgrade-manifest.json"]), "upgrade-manifest.json" + ) + + _require_equal( + pending.get("expected_spec_version"), + expected_spec, + "pending release spec_version", + ) + _require_equal(pending.get("commit"), expected_commit, "pending release commit") + + wasm_sha256 = hashlib.sha256(wasm).hexdigest() + wasm_code_hash = hashlib.blake2b(wasm, digest_size=32).hexdigest() + _require_equal(wasm_code_hash, code_hash, "runtime code hash") + _require_equal( + _hash(str(digest.get("sha256", "")), "srtool sha256"), + wasm_sha256, + "srtool sha256", + ) + + _require_equal(manifest.get("spec_version"), expected_spec, "manifest spec_version") + _require_equal(manifest.get("commit"), expected_commit, "manifest commit") + _require_equal( + _hash(str(manifest.get("wasm_sha256", "")), "manifest wasm_sha256"), + wasm_sha256, + "manifest wasm_sha256", + ) + + return { + "spec_version": expected_spec, + "commit": expected_commit, + "code_hash": f"0x{wasm_code_hash}", + "wasm_sha256": wasm_sha256, + } + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("archive", type=Path) + parser.add_argument("--spec", type=int, required=True) + parser.add_argument("--commit", required=True) + parser.add_argument("--code-hash", required=True) + arguments = parser.parse_args() + try: + result = verify_archive( + arguments.archive, + expected_spec=arguments.spec, + expected_commit=arguments.commit, + expected_code_hash=arguments.code_hash, + ) + except ValidationError as error: + print(f"invalid release artifact: {error}", file=sys.stderr) + return 1 + print(json.dumps(result, sort_keys=True)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/.github/workflows/release-train.yml b/.github/workflows/release-train.yml index 3e7a5dd603..35346d7d7c 100644 --- a/.github/workflows/release-train.yml +++ b/.github/workflows/release-train.yml @@ -464,6 +464,45 @@ jobs: working-directory: .github/scripts/deploy run: npm ci --ignore-scripts + # Reserve the release identity before any on-chain side effect. Tag + # rules make v immutable; a retry from the same commit is safe, + # while changed code must bump spec_version rather than retargeting a + # proposal that signers may already be reviewing. + - name: Reserve immutable release tag + if: steps.guard.outputs.should_propose == 'true' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + set -euo pipefail + tag="v${{ needs.build.outputs.spec_version }}" + tag_ref="repos/$GITHUB_REPOSITORY/git/ref/tags/$tag" + + if tag_json=$(gh api "$tag_ref" 2>/dev/null); then + tag_type=$(jq -er '.object.type' <<<"$tag_json") + [ "$tag_type" = commit ] \ + || { echo "release tag $tag must be a lightweight Git tag, found $tag_type"; exit 1; } + tag_sha=$(jq -er '.object.sha' <<<"$tag_json") + echo "release tag $tag already exists at $tag_sha" + else + if gh api --method POST "repos/$GITHUB_REPOSITORY/git/refs" \ + -f ref="refs/tags/$tag" -f sha="$GITHUB_SHA" >/dev/null; then + echo "reserved release tag $tag" + else + # Handle a concurrent same-commit reservation without making + # tag creation racy. Any other failure remains fatal here. + echo "tag creation raced; verifying the exact tag ref" + fi + tag_json=$(gh api "$tag_ref") + tag_type=$(jq -er '.object.type' <<<"$tag_json") + [ "$tag_type" = commit ] \ + || { echo "release tag $tag must be a lightweight Git tag, found $tag_type"; exit 1; } + tag_sha=$(jq -er '.object.sha' <<<"$tag_json") + fi + [[ "$tag_sha" =~ ^[0-9a-f]{40}$ ]] \ + || { echo "tag $tag did not resolve to a Git commit"; exit 1; } + [ "$tag_sha" = "$GITHUB_SHA" ] \ + || { echo "tag $tag is reserved for $tag_sha, not $GITHUB_SHA; bump spec_version"; exit 1; } + - name: Submit multisig proposal (CI half of deployment multisig) if: steps.guard.outputs.should_propose == 'true' working-directory: .github/scripts/deploy @@ -557,19 +596,15 @@ jobs: tag="v${spec}" url="https://github.com/${GITHUB_REPOSITORY}/releases/tag/${tag}" - # A published (non-prerelease) v means this spec already - # shipped; never touch it. A pre-release for the same spec is a - # respun proposal (e.g. the first train failed mid-way): replace it. - if existing=$(gh release view "$tag" --json isPrerelease --jq '.isPrerelease' 2>/dev/null); then - if [ "$existing" != "true" ]; then - echo "release $tag already published as a final release; refusing to overwrite" - exit 1 - fi - echo "replacing existing proposal pre-release $tag" - gh release delete "$tag" --cleanup-tag --yes - fi - commit=$(jq -r '.commit' wasm/pending-release.json) + tag_json=$(gh api \ + "repos/$GITHUB_REPOSITORY/git/ref/tags/$tag") + tag_type=$(jq -er '.object.type' <<<"$tag_json") + [ "$tag_type" = commit ] \ + || { echo "release tag $tag must be a lightweight Git tag, found $tag_type"; exit 1; } + tag_sha=$(jq -er '.object.sha' <<<"$tag_json") + [ "$tag_sha" = "$commit" ] \ + || { echo "immutable tag $tag points at $tag_sha, expected $commit"; exit 1; } call_hash=$(jq -r '.proposal.callHash' wasm/pending-release.json) height=$(jq -r '.proposal.blockHeight' wasm/pending-release.json) index=$(jq -r '.proposal.extrinsicIndex' wasm/pending-release.json) @@ -625,17 +660,39 @@ jobs: | wasm sha256 | \`${sha256}\` | EOF - gh release create "$tag" \ - --repo "$GITHUB_REPOSITORY" \ - --target "$commit" \ - --prerelease \ - --title "Runtime ${spec} (proposed)" \ - --notes-file release-body.md \ - wasm/subtensor.wasm \ - wasm/subtensor-digest.json \ - wasm/proxy_proxy_blob.hex \ - wasm/pending-release.json \ + assets=( + wasm/subtensor.wasm + wasm/subtensor-digest.json + wasm/proxy_proxy_blob.hex + wasm/pending-release.json wasm/upgrade-manifest.json + ) + if release_json=$(gh api \ + "repos/$GITHUB_REPOSITORY/releases/tags/$tag" 2>/dev/null); then + is_prerelease=$(jq -er '.prerelease | booleans' <<<"$release_json") + [ "$is_prerelease" = true ] \ + || { echo "release $tag is already final; refusing to overwrite it"; exit 1; } + target_sha=$(jq -er \ + '.target_commitish | strings | select(test("^[0-9a-f]{40}$"))' \ + <<<"$release_json") + [ "$target_sha" = "$commit" ] \ + || { echo "pre-release target $target_sha does not match $commit"; exit 1; } + gh release upload "$tag" \ + --repo "$GITHUB_REPOSITORY" --clobber "${assets[@]}" + gh release edit "$tag" \ + --repo "$GITHUB_REPOSITORY" \ + --title "Runtime ${spec} (proposed)" \ + --notes-file release-body.md \ + --prerelease + else + gh release create "$tag" \ + --repo "$GITHUB_REPOSITORY" \ + --target "$commit" \ + --prerelease \ + --title "Runtime ${spec} (proposed)" \ + --notes-file release-body.md \ + "${assets[@]}" + fi { echo "## Share this with the other signers" diff --git a/.github/workflows/watch-mainnet-release.yml b/.github/workflows/watch-mainnet-release.yml index 574ecbc47b..166ade623f 100644 --- a/.github/workflows/watch-mainnet-release.yml +++ b/.github/workflows/watch-mainnet-release.yml @@ -2,9 +2,11 @@ name: Watch Mainnet Release # The mainnet upgrade is executed by the triumvirate signing the multisig # proposal submitted by the release train (release-train.yml). This watcher -# polls the chain; once an upgrade executes, it cuts the release. Stable Python -# publication has its own completion marker so a later run can retry a failed -# or partial PyPI upload even when the GitHub release already exists: +# polls the finalized chain state; once an upgrade executes, it cuts the +# release. The immutable release tag, protected mainnet mirror, and finalized +# runtime hash must all identify the same release-train commit. PyPI itself is +# the terminal state for stable Python publication, so a later run can retry a +# failed or partial upload: # 1. GitHub release v, with the srtool wasm + digest and # multisig call data from the release train attached as assets # 2. Docker images via explicit dispatch of docker.yml and @@ -14,9 +16,10 @@ name: Watch Mainnet Release # 3. Python SDK + bittensor-core wheels to PyPI # 4. Publishable Rust crates to crates.io # 5. Production website/docs deployment on Vercel -# 6. The `mainnet` branch is force-updated to the release-train commit, -# so it always contains the code running on mainnet (the devnet and -# testnet branches are updated by release-train.yml at deploy time) +# 6. Before finalizing the GitHub release, the `mainnet` branch is +# force-updated to the release-train commit, so it always contains the +# code running on mainnet (the devnet and testnet branches are updated by +# release-train.yml at deploy time) on: schedule: @@ -46,6 +49,10 @@ jobs: spec_version: ${{ steps.compare.outputs.spec_version }} release_tag: ${{ steps.compare.outputs.release_tag }} sha: ${{ steps.compare.outputs.sha }} + artifact_id: ${{ steps.compare.outputs.artifact_id }} + code_hash: ${{ steps.compare.outputs.code_hash }} + sdk_version: ${{ steps.compare.outputs.sdk_version }} + core_version: ${{ steps.compare.outputs.core_version }} steps: - uses: actions/checkout@v4 @@ -59,15 +66,27 @@ jobs: local_spec=$(grep -Eo 'spec_version: *[0-9]+' runtime/src/lib.rs | head -n 1 | grep -Eo '[0-9]+') : ${local_spec:?could not parse spec_version from runtime/src/lib.rs} + finalized_head=$(curl -sf -H "Content-Type: application/json" \ + -d '{"id":1,"jsonrpc":"2.0","method":"chain_getFinalizedHead","params":[]}' \ + "$MAINNET_HTTP" | jq -er \ + '.result | strings | select(test("^0x[0-9a-f]{64}$"))') + runtime_request=$(jq -cn --arg block "$finalized_head" \ + '{id: 1, jsonrpc: "2.0", method: "state_getRuntimeVersion", params: [$block]}') chain_spec=$(curl -sf -H "Content-Type: application/json" \ - -d '{"id":1,"jsonrpc":"2.0","method":"state_getRuntimeVersion","params":[]}' \ - "$MAINNET_HTTP" | jq -r '.result.specVersion') - : ${chain_spec:?could not fetch chain spec_version} + -d "$runtime_request" "$MAINNET_HTTP" | jq -er '.result.specVersion') + code_hash_request=$(jq -cn --arg block "$finalized_head" \ + '{id: 1, jsonrpc: "2.0", method: "state_getStorageHash", + params: ["0x3a636f6465", $block]}') + chain_code_hash=$(curl -sf -H "Content-Type: application/json" \ + -d "$code_hash_request" "$MAINNET_HTTP" | jq -er \ + '.result | strings | select(test("^0x[0-9a-f]{64}$"))') [[ "$local_spec" =~ ^[0-9]+$ && "$chain_spec" =~ ^[0-9]+$ ]] \ || { echo "spec_version values must be integers"; exit 1; } echo "main spec_version: $local_spec" echo "on-chain spec_version: $chain_spec" + echo "finalized block: $finalized_head" + echo "runtime code hash: $chain_code_hash" if [ "$chain_spec" -gt "$local_spec" ]; then echo "Main does not contain the on-chain runtime yet; refusing to publish." @@ -76,128 +95,120 @@ jobs: exit 0 fi echo "spec_version=$chain_spec" >> "$GITHUB_OUTPUT" + echo "code_hash=$chain_code_hash" >> "$GITHUB_OUTPUT" - # Match both this workflow's tags (v424) and the legacy scheme - # inherited from upstream (v3.4.9-424). Pre-releases do not count. - release_tag=$(gh release list --repo "$GITHUB_REPOSITORY" --limit 300 \ - --json tagName,isDraft,isPrerelease \ - | jq -r --arg exact "v${chain_spec}" --arg suffix "-${chain_spec}" \ - '.[] | - select(.isDraft == false and .isPrerelease == false) | - select(.tagName == $exact or (.tagName | endswith($suffix))) | - .tagName' \ - | head -n 1) - if [ -n "$release_tag" ]; then - echo "GitHub release for spec_version $chain_spec is complete." - release_needed=false - else - release_tag="v${chain_spec}" - release_needed=true + # Old releases used several tag formats and predate automated stable + # Python publication. They are terminal historical state, not inputs + # to the immutable release flow below. + if [ "$chain_spec" -le 432 ]; then + release_tag=$(gh release list --repo "$GITHUB_REPOSITORY" --limit 300 \ + --json tagName,isDraft,isPrerelease \ + | jq -r --arg exact "v${chain_spec}" --arg suffix "-${chain_spec}" \ + '.[] | + select(.isDraft == false and .isPrerelease == false) | + select(.tagName == $exact or (.tagName | endswith($suffix))) | + .tagName' \ + | head -n 1) + : ${release_tag:?historical runtime v${chain_spec} has no final GitHub release} + echo "Historical release $release_tag is complete; Python was handled manually." + echo "release_tag=$release_tag" >> "$GITHUB_OUTPUT" + echo "release_needed=false" >> "$GITHUB_OUTPUT" + echo "python_needed=false" >> "$GITHUB_OUTPUT" + exit 0 fi + + release_tag="v${chain_spec}" echo "release_tag=$release_tag" >> "$GITHUB_OUTPUT" - # v432 and earlier predate this marker. Every later - # release retries until PyPI succeeds and this exact marker is stored. - if [ "$chain_spec" -le 432 ]; then - echo "v432 Python publication is handled manually." - python_needed=false - else - marker_id=$(gh api "repos/$GITHUB_REPOSITORY/releases/tags/${release_tag}" \ - --jq '.assets[] | select(.name == "python-publish-complete.json") | .id' \ - 2>/dev/null | head -n 1 || true) - if [ -z "$marker_id" ]; then - python_needed=true - else - gh api -H "Accept: application/octet-stream" \ - "repos/$GITHUB_REPOSITORY/releases/assets/$marker_id" \ - > /tmp/python-publish-complete.json - tag_sha=$(gh api "repos/$GITHUB_REPOSITORY/commits/${release_tag}" --jq '.sha') - jq -e --arg sha "$tag_sha" --argjson spec "$chain_spec" \ - '.schema == 1 and .spec_version == $spec and .commit == $sha' \ - /tmp/python-publish-complete.json >/dev/null \ - || { echo "invalid Python publish marker for v${chain_spec}"; exit 1; } - echo "Stable Python packages are already published." - python_needed=false - fi - fi - echo "release_needed=$release_needed" >> "$GITHUB_OUTPUT" - echo "python_needed=$python_needed" >> "$GITHUB_OUTPUT" + # The release train reserves this exact lightweight tag before + # submitting the multisig. Never accept an ambiguously named branch. + tag_json=$(gh api \ + "repos/$GITHUB_REPOSITORY/git/ref/tags/${release_tag}") + tag_type=$(jq -er '.object.type' <<<"$tag_json") + [ "$tag_type" = commit ] \ + || { echo "release tag must be a lightweight Git tag, found $tag_type"; exit 1; } + release_sha=$(jq -er '.object.sha' <<<"$tag_json") + [[ "$release_sha" =~ ^[0-9a-f]{40}$ ]] \ + || { echo "release tag did not resolve to a Git commit"; exit 1; } + status=$(gh api \ + "repos/$GITHUB_REPOSITORY/compare/${release_sha}...main" --jq '.status') + case "$status" in + ahead|identical) ;; + *) echo "tagged commit $release_sha is not an ancestor of main"; exit 1 ;; + esac + echo "sha=$release_sha" >> "$GITHUB_OUTPUT" - # A valid marker is the durable terminal state. Resolve the expiring - # workflow artifact only while release or Python work is pending. - if [ "$release_needed" = false ] && [ "$python_needed" = false ]; then - exit 0 + release_needed=true + release_json="" + if release_json=$(gh api \ + "repos/$GITHUB_REPOSITORY/releases/tags/${release_tag}" 2>/dev/null); then + is_draft=$(jq -er '.draft | booleans' <<<"$release_json") + is_prerelease=$(jq -er '.prerelease | booleans' <<<"$release_json") + if [ "$is_draft" = false ] && [ "$is_prerelease" = false ]; then + release_needed=false + target_sha=$(jq -er \ + '.target_commitish | strings | select(test("^[0-9a-f]{40}$"))' \ + <<<"$release_json") + [ "$target_sha" = "$release_sha" ] \ + || { echo "release target $target_sha does not match tag $release_sha"; exit 1; } + fi fi - # The final release carries pending-release.json copied from the - # provenance-gated workflow artifact. Use that durable manifest for - # Python-only retries, and fail closed if the release target or tag - # has moved away from its verified commit. + # Once final, the independently protected mainnet branch must point + # to the tag before any downstream publication is considered. if [ "$release_needed" = false ]; then - release_json=$(gh api \ - "repos/$GITHUB_REPOSITORY/releases/tags/${release_tag}") - manifest_id=$(jq -r \ - '.assets[] | select(.name == "pending-release.json") | .id' \ - <<<"$release_json" | head -n 1) - : ${manifest_id:?release $release_tag has no pending-release.json provenance asset} - gh api -H "Accept: application/octet-stream" \ - "repos/$GITHUB_REPOSITORY/releases/assets/${manifest_id}" \ - > /tmp/released-pending-release.json - - release_sha=$(jq -er \ - '.commit | strings | select(test("^[0-9a-f]{40}$"))' \ - /tmp/released-pending-release.json) - manifest_spec=$(jq -er '.expected_spec_version | numbers' \ - /tmp/released-pending-release.json) - [ "$manifest_spec" = "$chain_spec" ] \ - || { echo "release manifest expects spec $manifest_spec, chain runs $chain_spec"; exit 1; } - - target_sha=$(jq -er \ - '.target_commitish | strings | select(test("^[0-9a-f]{40}$"))' \ - <<<"$release_json") - tag_sha=$(gh api \ - "repos/$GITHUB_REPOSITORY/commits/${release_tag}" --jq '.sha') - [ "$release_sha" = "$target_sha" ] \ - || { echo "release target $target_sha does not match manifest commit $release_sha"; exit 1; } - [ "$release_sha" = "$tag_sha" ] \ - || { echo "tag $release_tag moved from manifest commit $release_sha to $tag_sha"; exit 1; } - - # The mainnet mirror is moved by the release job through its - # protected deploy key only after the on-chain upgrade executes. - # Unlike release metadata, it is an independent trust anchor. - mainnet_sha=$(gh api \ - "repos/$GITHUB_REPOSITORY/commits/mainnet" --jq '.sha') + mainnet_json=$(gh api \ + "repos/$GITHUB_REPOSITORY/git/ref/heads/mainnet") + mainnet_type=$(jq -er '.object.type' <<<"$mainnet_json") + [ "$mainnet_type" = commit ] \ + || { echo "protected mainnet mirror did not resolve to a commit"; exit 1; } + mainnet_sha=$(jq -er '.object.sha' <<<"$mainnet_json") [ "$release_sha" = "$mainnet_sha" ] \ || { echo "protected mainnet mirror $mainnet_sha does not match release commit $release_sha"; exit 1; } + fi - status=$(gh api \ - "repos/$GITHUB_REPOSITORY/compare/${release_sha}...main" --jq '.status') - case "$status" in - ahead|identical) ;; - *) echo "released commit $release_sha is not an ancestor of main"; exit 1 ;; - esac - - echo "Retrying Python publication from $release_tag at $release_sha" - echo "sha=$release_sha" >> "$GITHUB_OUTPUT" - exit 0 + # Derive the exact stable Python versions from the immutable tag, + # never from the moving default branch or mutable release metadata. + gh api -H "Accept: application/vnd.github.raw+json" \ + "repos/$GITHUB_REPOSITORY/contents/sdk/python/pyproject.toml?ref=${release_sha}" \ + > /tmp/release-sdk-pyproject.toml + gh api -H "Accept: application/vnd.github.raw+json" \ + "repos/$GITHUB_REPOSITORY/contents/sdk/bittensor-core-py/pyproject.toml?ref=${release_sha}" \ + > /tmp/release-core-pyproject.toml + versions=$(python3 .github/scripts/release-python-versions.py \ + /tmp/release-sdk-pyproject.toml /tmp/release-core-pyproject.toml) + sdk_version=$(jq -er '.sdk' <<<"$versions") + core_version=$(jq -er '.core' <<<"$versions") + echo "sdk_version=$sdk_version" >> "$GITHUB_OUTPUT" + echo "core_version=$core_version" >> "$GITHUB_OUTPUT" + + if [ "$release_needed" = true ]; then + # The exact artifact is needed only until its bytes have been + # verified and attached to the final release. + artifact_id=$(.github/scripts/resolve-release-artifact.sh \ + "$chain_spec" "$release_sha" "$chain_code_hash") + : ${artifact_id:?no artifact matches the immutable tag and finalized runtime} + echo "artifact_id=$artifact_id" >> "$GITHUB_OUTPUT" + python_needed=true + elif python3 .github/scripts/check-python-release.py \ + --sdk-version "$sdk_version" \ + --core-version "$core_version" \ + --repository "$GITHUB_REPOSITORY"; then + echo "Stable Python packages are complete on PyPI." + python_needed=false + else + python_status=$? + if [ "$python_status" -eq 1 ]; then + echo "Stable Python publication is incomplete and will be retried." + python_needed=true + else + echo "PyPI could not provide authoritative release state." + exit "$python_status" + fi fi - # Resolve what actually runs on chain, not HEAD: main can advance - # while a multisig waits for its final signature. The provenance gate - # admits artifacts only from release-train.yml pushes to main. - artifact_id=$(.github/scripts/resolve-release-artifact.sh "$chain_spec") - : ${artifact_id:?no trustworthy mainnet-upgrade-${chain_spec} artifact found — did the release train run?} - rm -rf /tmp/release-artifact /tmp/release-artifact.zip - gh api "repos/$GITHUB_REPOSITORY/actions/artifacts/${artifact_id}/zip" > /tmp/release-artifact.zip - unzip -o /tmp/release-artifact.zip -d /tmp/release-artifact - release_sha=$(jq -r '.commit' /tmp/release-artifact/pending-release.json) - : ${release_sha:?pending-release.json missing commit field} - expected_spec=$(jq -er '.expected_spec_version | numbers' \ - /tmp/release-artifact/pending-release.json) - [ "$expected_spec" = "$chain_spec" ] \ - || { echo "artifact expects spec $expected_spec, chain runs $chain_spec"; exit 1; } - echo "Release train commit: $release_sha" - echo "sha=$release_sha" >> "$GITHUB_OUTPUT" + echo "release_needed=$release_needed" >> "$GITHUB_OUTPUT" + echo "python_needed=$python_needed" >> "$GITHUB_OUTPUT" release: name: Cut GitHub release @@ -229,13 +240,27 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | spec="${{ needs.check.outputs.spec_version }}" - artifact_id=$(.github/scripts/resolve-release-artifact.sh "$spec") - : ${artifact_id:?no trustworthy mainnet-upgrade-${spec} artifact found — did the release train run?} + artifact_id="${{ needs.check.outputs.artifact_id }}" + : ${artifact_id:?check job did not resolve a release artifact} gh api "repos/$GITHUB_REPOSITORY/actions/artifacts/${artifact_id}/zip" > artifact.zip + python3 .github/scripts/verify-release-artifact.py artifact.zip \ + --spec "$spec" \ + --commit "${{ needs.check.outputs.sha }}" \ + --code-hash "${{ needs.check.outputs.code_hash }}" mkdir -p wasm unzip -o artifact.zip -d wasm ls -la wasm + # Mirror first. If this protected push fails, the proposal stays a + # pre-release and the next scheduled watcher run can retry safely. + - name: Point mainnet branch at released commit + run: | + release_sha="${{ needs.check.outputs.sha }}" + git push --force origin "${release_sha}:refs/heads/mainnet" + mirrored_sha=$(git ls-remote origin refs/heads/mainnet | awk '{print $1}') + [ "$mirrored_sha" = "$release_sha" ] \ + || { echo "mainnet mirror is $mirrored_sha, expected $release_sha"; exit 1; } + - name: Create or promote release with runtime assets env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -251,43 +276,51 @@ jobs: ) [ -f wasm/upgrade-manifest.json ] && assets+=(wasm/upgrade-manifest.json) - # The release train published the proposal as a pre-release at this - # tag; the upgrade has now executed on chain, so promote it to the - # final release. Assets are re-uploaded from the provenance-gated - # workflow artifact so the release always carries the trusted bytes. - # Fall back to creating the release for trains that predate the - # proposal pre-release flow. - if gh release view "$tag" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then - tag_sha=$(gh api "repos/$GITHUB_REPOSITORY/git/ref/tags/$tag" --jq '.object.sha' || true) - if [ -n "$tag_sha" ] && [ "$tag_sha" != "$RELEASE_SHA" ]; then - echo "tag $tag points at $tag_sha but the released commit is $RELEASE_SHA;" - echo "the proposal pre-release does not match the executed upgrade — resolve manually." - exit 1 - fi - notes=$(gh api "repos/$GITHUB_REPOSITORY/releases/generate-notes" \ - -f tag_name="$tag" -f target_commitish="$RELEASE_SHA" --jq '.body' || true) - gh release upload "$tag" --repo "$GITHUB_REPOSITORY" --clobber "${assets[@]}" - gh release edit "$tag" \ - --repo "$GITHUB_REPOSITORY" \ - --title "Runtime ${SPEC_VERSION}" \ - ${notes:+--notes "$notes"} \ - --prerelease=false \ - --latest + tag_json=$(gh api \ + "repos/$GITHUB_REPOSITORY/git/ref/tags/$tag") + tag_type=$(jq -er '.object.type' <<<"$tag_json") + [ "$tag_type" = commit ] \ + || { echo "release tag $tag must be a lightweight Git tag, found $tag_type"; exit 1; } + tag_sha=$(jq -er '.object.sha' <<<"$tag_json") + [ "$tag_sha" = "$RELEASE_SHA" ] \ + || { echo "tag $tag points at $tag_sha, expected $RELEASE_SHA"; exit 1; } + + # The release train published the proposal as a pre-release. Assets + # are re-uploaded from the exact artifact verified against finalized + # on-chain bytes, then the same release is promoted. A missing + # pre-release is recoverable, but an existing final release is not + # rewritten by a retry. + if release_json=$(gh api \ + "repos/$GITHUB_REPOSITORY/releases/tags/$tag" 2>/dev/null); then + is_prerelease=$(jq -er '.prerelease | booleans' <<<"$release_json") + [ "$is_prerelease" = true ] \ + || { echo "release $tag is already final; refusing to rewrite it"; exit 1; } + target_sha=$(jq -er \ + '.target_commitish | strings | select(test("^[0-9a-f]{40}$"))' \ + <<<"$release_json") + [ "$target_sha" = "$RELEASE_SHA" ] \ + || { echo "release target $target_sha does not match $RELEASE_SHA"; exit 1; } else + # Create only a pre-release here. If a later asset upload fails, + # the next watcher run can safely resume instead of finding an + # incomplete final release. gh release create "$tag" \ --repo "$GITHUB_REPOSITORY" \ --target "$RELEASE_SHA" \ - --title "Runtime ${SPEC_VERSION}" \ - --generate-notes \ - "${assets[@]}" + --prerelease \ + --title "Runtime ${SPEC_VERSION} (finalizing)" \ + --notes "Runtime finalized on chain; release assets are being attached." fi - # Mirror: the mainnet branch always points at the code now running on - # mainnet (the release-train commit, not HEAD of main). Pushed over - # SSH with the mirror deploy key configured by the checkout above, - # the only actor allowed past the network-branch-mirrors ruleset. - - name: Point mainnet branch at released commit - run: git push --force origin "${{ needs.check.outputs.sha }}:refs/heads/mainnet" + notes=$(gh api "repos/$GITHUB_REPOSITORY/releases/generate-notes" \ + -f tag_name="$tag" -f target_commitish="$RELEASE_SHA" --jq '.body' || true) + gh release upload "$tag" --repo "$GITHUB_REPOSITORY" --clobber "${assets[@]}" + gh release edit "$tag" \ + --repo "$GITHUB_REPOSITORY" \ + --title "Runtime ${SPEC_VERSION}" \ + ${notes:+--notes "$notes"} \ + --prerelease=false \ + --latest publish-docker: name: Dispatch Docker image publishing @@ -333,7 +366,7 @@ jobs: environment: mainnet permissions: id-token: write - contents: write # attach the durable completion marker to the release + contents: read steps: - uses: actions/checkout@v4 with: @@ -374,6 +407,9 @@ jobs: # Refuse to publish development or release-candidate artifacts from the # stable channel. Also require the complete SDK/core platform set. - name: Verify stable artifacts + env: + EXPECTED_SDK_VERSION: ${{ needs.check.outputs.sdk_version }} + EXPECTED_CORE_VERSION: ${{ needs.check.outputs.core_version }} run: | sdk_version=$(sed -n 's/^version = "\(.*\)"/\1/p' sdk/python/pyproject.toml | head -n 1) core_version=$(sed -n 's/^version = "\(.*\)"/\1/p' sdk/bittensor-core-py/pyproject.toml | head -n 1) @@ -383,6 +419,10 @@ jobs: || { echo "SDK version is not stable: $sdk_version"; exit 1; } [[ "$core_version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] \ || { echo "core version is not stable: $core_version"; exit 1; } + [ "$sdk_version" = "$EXPECTED_SDK_VERSION" ] \ + || { echo "SDK version $sdk_version != expected $EXPECTED_SDK_VERSION"; exit 1; } + [ "$core_version" = "$EXPECTED_CORE_VERSION" ] \ + || { echo "core version $core_version != expected $EXPECTED_CORE_VERSION"; exit 1; } ls -la dist test -f "dist/bittensor-${sdk_version}-py3-none-any.whl" test -f "dist/bittensor-${sdk_version}.tar.gz" @@ -406,23 +446,30 @@ jobs: uv publish --trusted-publishing always \ --check-url https://pypi.org/simple/ dist/* - # This is the only durable state for Python publication. It is written - # after uv reports that every distribution was uploaded or already exists. - - name: Record successful Python publication + # PyPI is the authoritative terminal state. Its JSON and Integrity APIs + # can lag an upload briefly, so poll for the complete SDK/core platform + # set and the trusted-publisher attestation on every file. + - name: Verify complete publication on PyPI env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - RELEASE_SHA: ${{ needs.check.outputs.sha }} - SPEC_VERSION: ${{ needs.check.outputs.spec_version }} + SDK_VERSION: ${{ needs.check.outputs.sdk_version }} + CORE_VERSION: ${{ needs.check.outputs.core_version }} run: | - jq -n \ - --arg sha "$RELEASE_SHA" \ - --argjson spec "$SPEC_VERSION" \ - --arg workflow_run "$GITHUB_RUN_ID" \ - '{schema: 1, spec_version: $spec, commit: $sha, workflow_run: $workflow_run}' \ - > python-publish-complete.json - gh release upload "${{ needs.check.outputs.release_tag }}" \ - --repo "$GITHUB_REPOSITORY" --clobber \ - python-publish-complete.json + for attempt in $(seq 1 12); do + status=0 + python3 .github/scripts/check-python-release.py \ + --sdk-version "$SDK_VERSION" \ + --core-version "$CORE_VERSION" \ + --repository "$GITHUB_REPOSITORY" || status=$? + if [ "$status" -eq 0 ]; then + exit 0 + fi + if [ "$attempt" -lt 12 ]; then + echo "PyPI state not authoritative yet (attempt $attempt/12); retrying." + sleep 10 + fi + done + echo "PyPI did not expose the complete attested release within two minutes." + exit 1 publish-crates: name: Publish Rust crates to crates.io diff --git a/docs/internals/release-process.mdx b/docs/internals/release-process.mdx index 9502ed5159..94210c0ded 100644 --- a/docs/internals/release-process.mdx +++ b/docs/internals/release-process.mdx @@ -62,11 +62,13 @@ independent image builds run. ### The mainnet multisig ceremony -CI never upgrades mainnet directly. The train's final job submits a **multisig -proposal**: the CI key is one half of a 2-of-2 deployment multisig that holds -a `SudoUncheckedSetCode` proxy on the sudo key. The triumvirate then approves -the proposal 2-of-3 **out-of-band** — no GitHub credential can unilaterally -change the mainnet runtime. Until they sign, nothing happens on chain. +CI never upgrades mainnet directly. Before any on-chain action, the train +reserves the immutable `v` tag at the exact source commit. Its +final job then submits a **multisig proposal**: the CI key is one half of a +2-of-2 deployment multisig that holds a `SudoUncheckedSetCode` proxy on the +sudo key. The triumvirate then approves the proposal 2-of-3 **out-of-band** — +no GitHub credential can unilaterally change the mainnet runtime. Until they +sign, nothing happens on chain. For rehearsal, the `mainnet-clone` PR label spins up a live clone of mainnet running your runtime with a public endpoint @@ -75,8 +77,10 @@ running your runtime with a public endpoint ## The release watcher `watch-mainnet-release.yml` polls mainnet every 10 minutes. When an upgrade -executes, it resolves the release-train artifact for the `spec_version` -actually running on chain and cuts the release: +executes, it resolves the release-train artifact whose commit matches the +immutable tag and whose runtime hash matches the finalized on-chain `:code`. +It moves the protected `mainnet` mirror to that exact commit before cutting +the release: 1. **GitHub release** `v` 2. **Production Docker images** tagged `v` and `latest` @@ -89,16 +93,18 @@ actually running on chain and cuts the release: This ordering means the release always reflects what is *actually running on mainnet*, not what was merged. -Stable Python publication has an independent completion marker attached to the -GitHub release. The marker is written only after PyPI accepts every SDK and -`bittensor-core` distribution, so a failed or partial upload is retried on the -next watcher run even if the GitHub release already exists or the release-train -artifact has expired. Retries use the release's provenance manifest and require -its commit to still match the release target, tag, and protected `mainnet` -mirror. The SDK's committed `X.Y.Z.dev0` version is stamped to `X.Y.Z` for this -build. The release train rejects a base SDK or core version that already exists -on PyPI before publishing release candidates. The already-deployed v432 release -predates the marker and is recovered manually. +PyPI is the terminal state for stable Python publication. The watcher requires +the SDK wheel and source distribution plus the full `bittensor-core` Linux and +macOS wheel matrix and source distribution. Every file must carry a PEP 740 +attestation from this repository's mainnet release workflow. A failed or +partial upload is retried on the next watcher run even if the GitHub release +already exists or the release-train artifact has expired. Retries require the +release target, immutable tag, protected `mainnet` mirror, and finalized +runtime bytes to agree. The SDK's committed `X.Y.Z.dev0` version is stamped to +`X.Y.Z` for this build. The release train rejects a base SDK or core version +that already exists on PyPI before publishing release candidates. Releases +through v432 predate automated stable Python publication and are handled as +historical state. The watcher explicitly dispatches `docker.yml` and `docker-localnet.yml` because releases created with the default `GITHUB_TOKEN` do not emit another From a38ca0d6a3f320cf719b722311063ce5dfa25854 Mon Sep 17 00:00:00 2001 From: UnArbosFive Date: Thu, 23 Jul 2026 19:39:13 +0200 Subject: [PATCH 63/63] Support Python 3.14 in bittensor 11.0.1 --- .github/workflows/runtime-checks.yml | 3 +- docs/index.mdx | 2 +- docs/migration.mdx | 10 +- docs/quickstart.mdx | 2 +- sdk/python/README.md | 2 +- sdk/python/pyproject.toml | 4 +- sdk/python/tests/unit/test_cli.py | 5 +- sdk/python/uv.lock | 1562 +++++++++++++++----------- 8 files changed, 912 insertions(+), 678 deletions(-) diff --git a/.github/workflows/runtime-checks.yml b/.github/workflows/runtime-checks.yml index 2b128cf731..3e2bd43dec 100644 --- a/.github/workflows/runtime-checks.yml +++ b/.github/workflows/runtime-checks.yml @@ -495,7 +495,8 @@ jobs: working-directory: sdk/python run: | python3 ../../.github/scripts/test_prepare_sdk_dist.py - uv sync --locked --all-extras --dev + uv sync --python 3.14 --locked --all-extras --dev + uv run btcli --version uv run ruff check . uv run ruff format --check . uv run ty check --exit-zero-on-warning bittensor diff --git a/docs/index.mdx b/docs/index.mdx index 820792b9ff..5f6a4dad5b 100644 --- a/docs/index.mdx +++ b/docs/index.mdx @@ -35,7 +35,7 @@ perform every user-facing operation on the chain. ## Install -Requires Python 3.10–3.13. Using [uv](https://docs.astral.sh/uv/): +Requires Python 3.10–3.14. Using [uv](https://docs.astral.sh/uv/): ```bash uv venv && source .venv/bin/activate diff --git a/docs/migration.mdx b/docs/migration.mdx index fdb293a7ca..9508b8ced0 100644 --- a/docs/migration.mdx +++ b/docs/migration.mdx @@ -36,7 +36,7 @@ equivalent. | SDK | `bittensor` 10.x | `bittensor` 11.x | | CLI | `bittensor-cli` 9.x (separate package) | included in `bittensor` | | Wallet | `bittensor_wallet` (separate package) | included: `bittensor.wallet` | -| Python | 3.10+ | 3.10–3.13 | +| Python | 3.10+ | 3.10–3.14 | ```bash uv pip install bittensor # library + btcli, one package @@ -70,18 +70,14 @@ pip install --force-reinstall --no-deps bittensor While a stale `bittensor-cli` is still installed, the v11 `btcli` prints a warning with this fix on every run. -Two version pitfalls that fail *silently*: +One version pitfall fails *silently*: -- **Python 3.14**: v10 allowed it, v11 supports 3.10–3.13. On a 3.14 - interpreter `pip install -U bittensor` quietly keeps 10.x (pip picks the - newest release whose `requires-python` matches). If `btcli --version` - still says 9.x/10.x after upgrading, check `python --version` first. - **Pinned requirements**: anything pinning `bittensor<11` or `bittensor~=10` keeps working against v10 untouched — the new package changes nothing until you move the pin. Platform support: wheels ship for Linux (x86_64, aarch64) and macOS -(Apple Silicon and Intel), Python 3.10–3.13 — the same coverage as the old +(Apple Silicon and Intel), Python 3.10–3.14 — the same coverage as the old stack. Windows is unsupported natively (as before); use WSL. On any other platform pip falls back to a source build, which requires a Rust toolchain. diff --git a/docs/quickstart.mdx b/docs/quickstart.mdx index 9e1a156ab6..56afac9286 100644 --- a/docs/quickstart.mdx +++ b/docs/quickstart.mdx @@ -5,7 +5,7 @@ description: Install, connect, read chain state, and submit your first transacti ## 1. Install -Requires Python 3.10–3.13: +Requires Python 3.10–3.14: ```bash uv venv && source .venv/bin/activate diff --git a/sdk/python/README.md b/sdk/python/README.md index 1f89ef2c3c..89745d42d8 100644 --- a/sdk/python/README.md +++ b/sdk/python/README.md @@ -32,7 +32,7 @@ Almost everything is a projection of the chain's own runtime metadata: ## Install -Requires Python 3.10–3.13. Using [uv](https://docs.astral.sh/uv/): +Requires Python 3.10–3.14. Using [uv](https://docs.astral.sh/uv/): ```bash uv venv && source .venv/bin/activate diff --git a/sdk/python/pyproject.toml b/sdk/python/pyproject.toml index 0b5b726b96..26baf7f9f0 100644 --- a/sdk/python/pyproject.toml +++ b/sdk/python/pyproject.toml @@ -7,7 +7,7 @@ name = "bittensor" version = "11.0.1.dev0" description = "A lean Python SDK (import bittensor) and CLI (btcli) for the Bittensor chain." readme = "README.md" -requires-python = ">=3.10,<3.14" +requires-python = ">=3.10,<3.15" license = { text = "Apache-2.0" } authors = [{ name = "RaoFoundation" }] dependencies = [ @@ -65,7 +65,7 @@ dev = [ "pytest-asyncio>=0.24", "pytest-cov>=6.0", "pytest-xdist>=3.6", - "hypothesis>=6.100", + "hypothesis>=6.161.0", "ruff>=0.14", "ty", ] diff --git a/sdk/python/tests/unit/test_cli.py b/sdk/python/tests/unit/test_cli.py index 06216594c3..a39178f2c8 100644 --- a/sdk/python/tests/unit/test_cli.py +++ b/sdk/python/tests/unit/test_cli.py @@ -10,13 +10,12 @@ import contextlib import json -from importlib.metadata import version as package_version import pytest from typer.testing import CliRunner import bittensor.cli.context as cli_context -from bittensor import wallets +from bittensor import __version__, wallets from bittensor.cli.main import app from bittensor.client import Client from bittensor.intents import REGISTRY @@ -78,7 +77,7 @@ def test_help(self): def test_version(self): result = invoke("--version") assert result.exit_code == 0 - assert result.output.strip() == package_version("bittensor") + assert result.output.strip() == __version__ def test_tools_catalog(self): result = invoke("tools") diff --git a/sdk/python/uv.lock b/sdk/python/uv.lock index 08e35d7fc8..b68f49f14a 100644 --- a/sdk/python/uv.lock +++ b/sdk/python/uv.lock @@ -1,91 +1,118 @@ version = 1 -requires-python = ">=3.10, <3.14" +revision = 3 +requires-python = ">=3.10, <3.15" [[package]] name = "annotated-doc" version = "0.0.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288 } +sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303 }, + { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, ] [[package]] name = "annotated-types" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, ] [[package]] name = "backports-asyncio-runner" version = "1.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893 } +sdist = { url = "https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz", hash = "sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size = 69893, upload-time = "2025-07-02T02:27:15.685Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313 }, + { url = "https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl", hash = "sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size = 12313, upload-time = "2025-07-02T02:27:14.263Z" }, ] [[package]] name = "bitarray" version = "3.8.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/9b/ca307b554eaa233d004cae07d5594f9d45affd1f8e118687059aa06fcc6b/bitarray-3.8.2.tar.gz", hash = "sha256:2675a0c17c0b2d12d0fbcf3b27eb833f96936a588da47ac445c0743c5aa69e6b", size = 153516 } +sdist = { url = "https://files.pythonhosted.org/packages/bb/9b/ca307b554eaa233d004cae07d5594f9d45affd1f8e118687059aa06fcc6b/bitarray-3.8.2.tar.gz", hash = "sha256:2675a0c17c0b2d12d0fbcf3b27eb833f96936a588da47ac445c0743c5aa69e6b", size = 153516, upload-time = "2026-06-17T17:22:23.921Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/48/f7/f3dc5577d53e311c7a7650472e847a29361fbd79a5c8c7a34b4be4eae974/bitarray-3.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f5930731b736e3f9654029f3e9082bfb1721d81f04bff9e6eab8eb38b4dfed", size = 150023 }, - { url = "https://files.pythonhosted.org/packages/74/56/b847e84d0310c19b8a127eda77be2e3429d548d485a6a81ef1ee32a6d91e/bitarray-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e835f33ab5aa297a9ce21b7813222c22ff1618b8f8c5e6f921e54b4ae8b8f43", size = 146927 }, - { url = "https://files.pythonhosted.org/packages/90/71/1aa47086b72034b25b55388335765a6640bc232a5e0aad5dabb4ea677d68/bitarray-3.8.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1061cb959efbe3b747c38d550d8d7f0794090a757dd552eae8cf614a5f8d76b6", size = 325474 }, - { url = "https://files.pythonhosted.org/packages/9f/f5/1092c5a3e34a09bbe11149bc9e19c6c23b82c7383ac61d2aef8bb205eda6/bitarray-3.8.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:82a6574e98bdddfb7fdac4d41c1176e90e1fcaaed97fda39836a9e0d8b247ec3", size = 353442 }, - { url = "https://files.pythonhosted.org/packages/f7/c0/99755ded6bcde8e577374722f1d14bf43d98a9ceb8bae07e5ad445ff10b8/bitarray-3.8.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9a34663e05bf79ccb92e931e720fbd281e84007ed996d38754aadfbc33e71c24", size = 363901 }, - { url = "https://files.pythonhosted.org/packages/51/b3/312207693283b29d59c9a28ee662e6daa1d762a475dce21811929fb3bd77/bitarray-3.8.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:819f93a1aa7e711ccbb083647a8995bbb0da8f741c8b691576ff1bf5b5018c51", size = 331861 }, - { url = "https://files.pythonhosted.org/packages/cc/70/83e0698a8d32322e0ed5c35eda339f85e5a828d8e30e24cbafcaa36e74d9/bitarray-3.8.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:07c20505dc8935b55d6de0bb1cc7e0e35de792d5f118d60b177dee53771a474f", size = 323169 }, - { url = "https://files.pythonhosted.org/packages/28/55/c77597c5d5fab09a24b67b7e626d9de505d91fa03dac728d153663ab8149/bitarray-3.8.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:874c6806c2c7b861da0f0e9eead173bb3b9b7a62fcfadc01be51c32d50d7f71c", size = 351476 }, - { url = "https://files.pythonhosted.org/packages/b6/17/fff630b5584985f9f203f89eb16f50a860e5198265eb94e6f4c3af482c96/bitarray-3.8.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:4403e5b4da88ec195afe3eab5969b34358157d196e1c63e93328e64e632abbed", size = 347982 }, - { url = "https://files.pythonhosted.org/packages/39/60/7e0c8c84d25251a93a0f56419738a914efe3134923e17f8ead6dbbb336a0/bitarray-3.8.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8a23e06e87cfa2ba361040eae87479ac197502ba10533c0f2de03d3d93cce91b", size = 328606 }, - { url = "https://files.pythonhosted.org/packages/c6/15/77d9d43e478f2bf9fc84ce2414b845a97369ebfb46d1a3c3e8da72cb4e5a/bitarray-3.8.2-cp310-cp310-win32.whl", hash = "sha256:e65b91b68aa072732d144fa11d86518324b8b27af7e2474bd7a50c88648dc5d4", size = 143238 }, - { url = "https://files.pythonhosted.org/packages/18/8f/17808e4980e88ec314fb40404308d49b648e41092c19e2fb71d2a9e0d058/bitarray-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:156c6d964111e1c0029c5bb41148a73aa870ca10c03a03279b5597fa68ac6761", size = 149868 }, - { url = "https://files.pythonhosted.org/packages/42/75/285f2c9315a6ca19fec9281737f2fb31a3401584ccf82e4d689f6142d266/bitarray-3.8.2-cp310-cp310-win_arm64.whl", hash = "sha256:1b7c6fd8755dda32bc83b171e0a0f625fea545bb6f8a70a7481244dc847b1c9e", size = 147722 }, - { url = "https://files.pythonhosted.org/packages/48/85/c19b7928447d4259418b915857200f7a471920e88241d5a27083a4ceedb2/bitarray-3.8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7540de3e7609693b208020cb3cb28cb16395eb915dff742bdcdd9909d475bf3d", size = 150025 }, - { url = "https://files.pythonhosted.org/packages/27/a2/3faeec7783733b596f63b887eb29fd6abfda6937195a269dc1fc6236ac76/bitarray-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c073cd936904e520990339745a2d561ceabc9daa1cefcaf9592196a3355eb1cd", size = 146925 }, - { url = "https://files.pythonhosted.org/packages/68/75/b8e778aaa9d184b1361560a96974d99400c43e70f389a17382951969165e/bitarray-3.8.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4c1c97c5712ad45c6c1427b70bb6524f40532e4a544ca2b7e0375ca61c09244", size = 333297 }, - { url = "https://files.pythonhosted.org/packages/74/18/4c52fa2ec6dac3db01fd51ab2fdccba0a3e86b9b3eb9c76ab6e6e9190008/bitarray-3.8.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7627bfa750a609f5df05c1da337984b8f3821927591aaf861ba70f38bc5f6da1", size = 361658 }, - { url = "https://files.pythonhosted.org/packages/8e/ff/3e34aef8ad52ef63eb426dada698de6240cf45a99a6949b4678954e96814/bitarray-3.8.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ff06e0511682f117d0c24828f0ef1b4f2c3617d38984c7b3ce78d107bee016ab", size = 372260 }, - { url = "https://files.pythonhosted.org/packages/f2/26/6a7e0f9254753b7c81ef3a7465533e7de0aa7da882aec6c19e993329d4d7/bitarray-3.8.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bcaeccab426b0a6e26c10bd8d8c21c15f81757320ad158a8c9e3e953ab81d223", size = 339446 }, - { url = "https://files.pythonhosted.org/packages/37/2f/e866171e3b4ab8f12378d8fbd0d24944a12af623c130126b1e8d145deecc/bitarray-3.8.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:385045390630f5f433c89caeed9bca9f5b40e3986ae2d7e829e93098c1a96b94", size = 331180 }, - { url = "https://files.pythonhosted.org/packages/be/ee/9371212756ab3e9c0f3247709ec3b341015ca8fc7d9de4a3a2f30c2b4439/bitarray-3.8.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:30541722bfa0f8213d8e621772bef538204fe9eeb4357f4261d404688c2281a5", size = 359108 }, - { url = "https://files.pythonhosted.org/packages/75/4c/97d2ced53249890cbb6f16569da2fd4c73f767faf70bbbc03bd7329caa02/bitarray-3.8.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:3daf8f1e040d48bf7ee664bd5c9df9d029c55780c671221d753f6f4fc769f10a", size = 356253 }, - { url = "https://files.pythonhosted.org/packages/a6/cc/68d2d511182c5cced2734086ca6b5b7fc778ce1babcfbe5e43d33fffde48/bitarray-3.8.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c223cf53e4a458b05b9f78723d88d5a1221fa11fb00cd1a696ccd483dcae3f8c", size = 336632 }, - { url = "https://files.pythonhosted.org/packages/b6/b4/739981ea2ea25e8199c3f58e3ac6b52749d26f4999db5bf673dadabef83f/bitarray-3.8.2-cp311-cp311-win32.whl", hash = "sha256:d9367a5eb2a3dda6958a129ca939ce7dd1555a3b13967eb2e7c9dc8df2cdffa0", size = 143420 }, - { url = "https://files.pythonhosted.org/packages/52/f1/841be2f5c3d1c79ab319eaf52871afb6616f8c7e6ef916517ef13b7e4c47/bitarray-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:2d0af077831aff8f44d8befe6459544bea1cd8fbce6b5b2a30ae1cb086a50620", size = 150060 }, - { url = "https://files.pythonhosted.org/packages/82/de/5d275dcb5abc23ccf3139b478e304efc41d7bd7dc78901bfcc5ef3f251ff/bitarray-3.8.2-cp311-cp311-win_arm64.whl", hash = "sha256:a78778a0899c682537ac612b1a03ecd4ad30063c118825d0138d0f7518270e54", size = 148006 }, - { url = "https://files.pythonhosted.org/packages/52/20/53916ba8d01bc92e01d89c03cd7745107df48923de091b5f957578ff38ff/bitarray-3.8.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d5dcca2b64bbfce46dc43d77a2973d0b949e2260d74e8bd4e9a766de3afd0e70", size = 150156 }, - { url = "https://files.pythonhosted.org/packages/18/a8/bfa7c8f4141b3119decc54ff6656b8e2f6d4303dc71577021f2d4b42cf42/bitarray-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c78dfbb8883133caeb11aa4ec375165ff1b456a28898cbe45536173369accb24", size = 146884 }, - { url = "https://files.pythonhosted.org/packages/f5/60/fb0e9118dce7e1858fc4f608d0c13460207b227fc13819a23c6f3c70ec78/bitarray-3.8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c32189234e4206c3832f947ebdf1735926dea0dbe0e966effd62771884dedf63", size = 336496 }, - { url = "https://files.pythonhosted.org/packages/be/b5/8d50bb4d55113535919812adb66dcdb590a95a032d5975254d951146c2b4/bitarray-3.8.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:26490091d3ad8c039829b33ab1bc776941ce359ecdcf8beef3c1efc330fcf1a5", size = 364673 }, - { url = "https://files.pythonhosted.org/packages/f2/c2/90ca21488fb0ac791a00b98c49c3dbab7ca1aca59e8745dabe073133370f/bitarray-3.8.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8ad858bd35dbb554de248c277ba9052f31d8e153c133195ef40c198303725dc8", size = 375966 }, - { url = "https://files.pythonhosted.org/packages/3b/39/f414699060068ef15b886353e6ae6d2f476715e5c7db205b47710e5e7b4c/bitarray-3.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:58aeaf943929716b411a4ff24422c2b8bbf2c2d8ef3e23bbf08dc7d47c49e2ae", size = 343994 }, - { url = "https://files.pythonhosted.org/packages/32/84/70a8ae25ba927f0b7656041c7cceea011296cbf6cc3770788bc331a5be88/bitarray-3.8.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3b016d736e2b4aa8962962724b69893adce076622374cf4a275503049f5c7207", size = 334129 }, - { url = "https://files.pythonhosted.org/packages/4e/20/3ec71a1e9a8cab12e7306cbfcf0f6e6ae7726f11ca4a7aa2bd047d8d105e/bitarray-3.8.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6871b2b1680580e54fbf0196b3ab7b40a417b4d1fdb3ebda0debf3948e9b8604", size = 361708 }, - { url = "https://files.pythonhosted.org/packages/90/fc/6cae06eac8a25e5715f5607de6bae4bc3ec3b0634f790d5e22debab1802d/bitarray-3.8.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a4c6bb948d011bf18642e09a0a4d1dd067f0722db09d2d4b5d6cce292d71b448", size = 359888 }, - { url = "https://files.pythonhosted.org/packages/c0/cc/078932ee7b41862571e8b3cfb7dc4e03af5c4843b8246a5a663af8678773/bitarray-3.8.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:78622f067a89360e8acf146be7878f62deafe687db40feb16dabfc808a20717c", size = 340969 }, - { url = "https://files.pythonhosted.org/packages/f6/19/719edf77615864263a12351287832979b02a6277b4058ec6b53669ecbf7e/bitarray-3.8.2-cp312-cp312-win32.whl", hash = "sha256:75999de62a7c4686b901458d441bc3c6c03dade68d1dfbe808439e748d086ea3", size = 143759 }, - { url = "https://files.pythonhosted.org/packages/e9/af/6806f09441de299ccd42b361c2e25138425457331c0e59aef23aba0e901e/bitarray-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:3e44247fcf5dffa86031d5412b20278a953e4dcef4033012c93ebd9985d48fec", size = 150393 }, - { url = "https://files.pythonhosted.org/packages/99/e0/b9c738cfc16a59fcb4b17dd4f699d235257d2d3074e403892d4cd37ccc53/bitarray-3.8.2-cp312-cp312-win_arm64.whl", hash = "sha256:f823fa67f074c0ede82014fd5c2020f301b88f351635f5ba7b802f53b5e0eade", size = 148168 }, - { url = "https://files.pythonhosted.org/packages/48/99/01fb3b90cbf8a930d2326945df2b28a5f046380c0f966ea78cada00dae45/bitarray-3.8.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:71d7350c801eea43afb0a8679fd7475b0fd9868fd15352f0d3069f335b44af06", size = 150167 }, - { url = "https://files.pythonhosted.org/packages/e7/ce/b26a94753fcfd9e7652805a539df60a83085997319be81ef6d59192ad37c/bitarray-3.8.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa3be101ed71c4e4989899da744a926d1f55f5d5f7f93242c32f727f7c11350b", size = 146882 }, - { url = "https://files.pythonhosted.org/packages/a9/8e/0bdf36618f4f585d5c35cb033f6a5611337d873d8718feca41d27453cc54/bitarray-3.8.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f684eb138bae893a5d98c811d99ecd89fa4a1af4700b0e512b8e2b794c9cabd", size = 335677 }, - { url = "https://files.pythonhosted.org/packages/cc/99/5588cbe69640d7fa2386be315ddb0e1bde6de8e922c025dccee769cc6d9e/bitarray-3.8.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:94e7da622b723705caddd59ee681cee0355b444901cc6fb2bcdc24bafba85911", size = 363773 }, - { url = "https://files.pythonhosted.org/packages/80/4f/7d2946d88ae77306833bd5b91746d212404d5a86347341274b61d08c3f7e/bitarray-3.8.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3110786b00b28a756fd948c8d63e6ca3a74810b2d115582d85593d9d48035c49", size = 375005 }, - { url = "https://files.pythonhosted.org/packages/fd/be/9a645b2e1bb0da4779dd9cab5a075d7c5bb68a16d8c90f051d47393bbcfe/bitarray-3.8.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd40cf27e2b54b5e30d0ce1da4f59bc16dd7c8363a20786b6e9deeb0b8ebe8e0", size = 343273 }, - { url = "https://files.pythonhosted.org/packages/98/8d/73c658d200671c5e023225163be6aa545f675a676e960e5a4e19ac21274b/bitarray-3.8.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:24c6b97f27bd3868e28b201e1d777f5e168805862b7d9528099138bbb8c6a636", size = 333403 }, - { url = "https://files.pythonhosted.org/packages/94/bc/819abd376bd6a892ce27840a1d5a4378be228be1ab3bca41845203ee672b/bitarray-3.8.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:786dedb4b1ced22dfeaaa89902561616f7edfa91774702b1aac31df3a6073c88", size = 360846 }, - { url = "https://files.pythonhosted.org/packages/83/59/b8ea1e31928d06db1f2b12187631b51bb3c83186b18581754bc008cec0aa/bitarray-3.8.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:01bf9ff247117533c11963a81f3529bc12283c600dd195cf3b28a97b095f5d1c", size = 359168 }, - { url = "https://files.pythonhosted.org/packages/6e/31/ef3b2f58517f7dbba8119f2592c1ea556a687bc8d405dd93c07f9c28d514/bitarray-3.8.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cc7a76e77c158e793d7c1e0b6c2240374087ac690a8bcacc8f18c427e5d9e20c", size = 340091 }, - { url = "https://files.pythonhosted.org/packages/8f/83/bf92dcfec4eefd59fa4d8491504e100ae86e11b8cec353ae5532b25708e6/bitarray-3.8.2-cp313-cp313-win32.whl", hash = "sha256:db9add8dcc87154c0f011e0e1ce9b856e5948fbcf6faf44305aa140e525ec9a7", size = 143786 }, - { url = "https://files.pythonhosted.org/packages/1c/29/1f57913a96bffb27bed486a9ca592021dd8161f6c95fd632aad7d4f0bb95/bitarray-3.8.2-cp313-cp313-win_amd64.whl", hash = "sha256:cf4926098970d2d1a14156c0fbddb47554124347db4acf3ba616064fb021cd1e", size = 150414 }, - { url = "https://files.pythonhosted.org/packages/17/9c/f36b91fcb93af54c9a28e3bd1fbf39ef7706fc623a526f3450113c0a0dae/bitarray-3.8.2-cp313-cp313-win_arm64.whl", hash = "sha256:5c8281d0eb35e8685235e1d50f9b26156803dad398d0e7868ce9aae254c3777d", size = 148197 }, + { url = "https://files.pythonhosted.org/packages/48/f7/f3dc5577d53e311c7a7650472e847a29361fbd79a5c8c7a34b4be4eae974/bitarray-3.8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f5930731b736e3f9654029f3e9082bfb1721d81f04bff9e6eab8eb38b4dfed", size = 150023, upload-time = "2026-06-17T17:19:57.898Z" }, + { url = "https://files.pythonhosted.org/packages/74/56/b847e84d0310c19b8a127eda77be2e3429d548d485a6a81ef1ee32a6d91e/bitarray-3.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e835f33ab5aa297a9ce21b7813222c22ff1618b8f8c5e6f921e54b4ae8b8f43", size = 146927, upload-time = "2026-06-17T17:19:59.585Z" }, + { url = "https://files.pythonhosted.org/packages/90/71/1aa47086b72034b25b55388335765a6640bc232a5e0aad5dabb4ea677d68/bitarray-3.8.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1061cb959efbe3b747c38d550d8d7f0794090a757dd552eae8cf614a5f8d76b6", size = 325474, upload-time = "2026-06-17T17:20:00.806Z" }, + { url = "https://files.pythonhosted.org/packages/9f/f5/1092c5a3e34a09bbe11149bc9e19c6c23b82c7383ac61d2aef8bb205eda6/bitarray-3.8.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:82a6574e98bdddfb7fdac4d41c1176e90e1fcaaed97fda39836a9e0d8b247ec3", size = 353442, upload-time = "2026-06-17T17:20:02.082Z" }, + { url = "https://files.pythonhosted.org/packages/f7/c0/99755ded6bcde8e577374722f1d14bf43d98a9ceb8bae07e5ad445ff10b8/bitarray-3.8.2-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9a34663e05bf79ccb92e931e720fbd281e84007ed996d38754aadfbc33e71c24", size = 363901, upload-time = "2026-06-17T17:20:03.418Z" }, + { url = "https://files.pythonhosted.org/packages/51/b3/312207693283b29d59c9a28ee662e6daa1d762a475dce21811929fb3bd77/bitarray-3.8.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:819f93a1aa7e711ccbb083647a8995bbb0da8f741c8b691576ff1bf5b5018c51", size = 331861, upload-time = "2026-06-17T17:20:04.69Z" }, + { url = "https://files.pythonhosted.org/packages/cc/70/83e0698a8d32322e0ed5c35eda339f85e5a828d8e30e24cbafcaa36e74d9/bitarray-3.8.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:07c20505dc8935b55d6de0bb1cc7e0e35de792d5f118d60b177dee53771a474f", size = 323169, upload-time = "2026-06-17T17:20:05.986Z" }, + { url = "https://files.pythonhosted.org/packages/28/55/c77597c5d5fab09a24b67b7e626d9de505d91fa03dac728d153663ab8149/bitarray-3.8.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:874c6806c2c7b861da0f0e9eead173bb3b9b7a62fcfadc01be51c32d50d7f71c", size = 351476, upload-time = "2026-06-17T17:20:07.249Z" }, + { url = "https://files.pythonhosted.org/packages/b6/17/fff630b5584985f9f203f89eb16f50a860e5198265eb94e6f4c3af482c96/bitarray-3.8.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:4403e5b4da88ec195afe3eab5969b34358157d196e1c63e93328e64e632abbed", size = 347982, upload-time = "2026-06-17T17:20:08.616Z" }, + { url = "https://files.pythonhosted.org/packages/39/60/7e0c8c84d25251a93a0f56419738a914efe3134923e17f8ead6dbbb336a0/bitarray-3.8.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8a23e06e87cfa2ba361040eae87479ac197502ba10533c0f2de03d3d93cce91b", size = 328606, upload-time = "2026-06-17T17:20:09.741Z" }, + { url = "https://files.pythonhosted.org/packages/c6/15/77d9d43e478f2bf9fc84ce2414b845a97369ebfb46d1a3c3e8da72cb4e5a/bitarray-3.8.2-cp310-cp310-win32.whl", hash = "sha256:e65b91b68aa072732d144fa11d86518324b8b27af7e2474bd7a50c88648dc5d4", size = 143238, upload-time = "2026-06-17T17:20:10.924Z" }, + { url = "https://files.pythonhosted.org/packages/18/8f/17808e4980e88ec314fb40404308d49b648e41092c19e2fb71d2a9e0d058/bitarray-3.8.2-cp310-cp310-win_amd64.whl", hash = "sha256:156c6d964111e1c0029c5bb41148a73aa870ca10c03a03279b5597fa68ac6761", size = 149868, upload-time = "2026-06-17T17:20:11.981Z" }, + { url = "https://files.pythonhosted.org/packages/42/75/285f2c9315a6ca19fec9281737f2fb31a3401584ccf82e4d689f6142d266/bitarray-3.8.2-cp310-cp310-win_arm64.whl", hash = "sha256:1b7c6fd8755dda32bc83b171e0a0f625fea545bb6f8a70a7481244dc847b1c9e", size = 147722, upload-time = "2026-06-17T17:20:13.038Z" }, + { url = "https://files.pythonhosted.org/packages/48/85/c19b7928447d4259418b915857200f7a471920e88241d5a27083a4ceedb2/bitarray-3.8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7540de3e7609693b208020cb3cb28cb16395eb915dff742bdcdd9909d475bf3d", size = 150025, upload-time = "2026-06-17T17:20:14.573Z" }, + { url = "https://files.pythonhosted.org/packages/27/a2/3faeec7783733b596f63b887eb29fd6abfda6937195a269dc1fc6236ac76/bitarray-3.8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c073cd936904e520990339745a2d561ceabc9daa1cefcaf9592196a3355eb1cd", size = 146925, upload-time = "2026-06-17T17:20:15.747Z" }, + { url = "https://files.pythonhosted.org/packages/68/75/b8e778aaa9d184b1361560a96974d99400c43e70f389a17382951969165e/bitarray-3.8.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4c1c97c5712ad45c6c1427b70bb6524f40532e4a544ca2b7e0375ca61c09244", size = 333297, upload-time = "2026-06-17T17:20:16.851Z" }, + { url = "https://files.pythonhosted.org/packages/74/18/4c52fa2ec6dac3db01fd51ab2fdccba0a3e86b9b3eb9c76ab6e6e9190008/bitarray-3.8.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7627bfa750a609f5df05c1da337984b8f3821927591aaf861ba70f38bc5f6da1", size = 361658, upload-time = "2026-06-17T17:20:18.242Z" }, + { url = "https://files.pythonhosted.org/packages/8e/ff/3e34aef8ad52ef63eb426dada698de6240cf45a99a6949b4678954e96814/bitarray-3.8.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ff06e0511682f117d0c24828f0ef1b4f2c3617d38984c7b3ce78d107bee016ab", size = 372260, upload-time = "2026-06-17T17:20:19.438Z" }, + { url = "https://files.pythonhosted.org/packages/f2/26/6a7e0f9254753b7c81ef3a7465533e7de0aa7da882aec6c19e993329d4d7/bitarray-3.8.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bcaeccab426b0a6e26c10bd8d8c21c15f81757320ad158a8c9e3e953ab81d223", size = 339446, upload-time = "2026-06-17T17:20:20.794Z" }, + { url = "https://files.pythonhosted.org/packages/37/2f/e866171e3b4ab8f12378d8fbd0d24944a12af623c130126b1e8d145deecc/bitarray-3.8.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:385045390630f5f433c89caeed9bca9f5b40e3986ae2d7e829e93098c1a96b94", size = 331180, upload-time = "2026-06-17T17:20:21.904Z" }, + { url = "https://files.pythonhosted.org/packages/be/ee/9371212756ab3e9c0f3247709ec3b341015ca8fc7d9de4a3a2f30c2b4439/bitarray-3.8.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:30541722bfa0f8213d8e621772bef538204fe9eeb4357f4261d404688c2281a5", size = 359108, upload-time = "2026-06-17T17:20:23.112Z" }, + { url = "https://files.pythonhosted.org/packages/75/4c/97d2ced53249890cbb6f16569da2fd4c73f767faf70bbbc03bd7329caa02/bitarray-3.8.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:3daf8f1e040d48bf7ee664bd5c9df9d029c55780c671221d753f6f4fc769f10a", size = 356253, upload-time = "2026-06-17T17:20:24.447Z" }, + { url = "https://files.pythonhosted.org/packages/a6/cc/68d2d511182c5cced2734086ca6b5b7fc778ce1babcfbe5e43d33fffde48/bitarray-3.8.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c223cf53e4a458b05b9f78723d88d5a1221fa11fb00cd1a696ccd483dcae3f8c", size = 336632, upload-time = "2026-06-17T17:20:25.786Z" }, + { url = "https://files.pythonhosted.org/packages/b6/b4/739981ea2ea25e8199c3f58e3ac6b52749d26f4999db5bf673dadabef83f/bitarray-3.8.2-cp311-cp311-win32.whl", hash = "sha256:d9367a5eb2a3dda6958a129ca939ce7dd1555a3b13967eb2e7c9dc8df2cdffa0", size = 143420, upload-time = "2026-06-17T17:20:26.906Z" }, + { url = "https://files.pythonhosted.org/packages/52/f1/841be2f5c3d1c79ab319eaf52871afb6616f8c7e6ef916517ef13b7e4c47/bitarray-3.8.2-cp311-cp311-win_amd64.whl", hash = "sha256:2d0af077831aff8f44d8befe6459544bea1cd8fbce6b5b2a30ae1cb086a50620", size = 150060, upload-time = "2026-06-17T17:20:28.094Z" }, + { url = "https://files.pythonhosted.org/packages/82/de/5d275dcb5abc23ccf3139b478e304efc41d7bd7dc78901bfcc5ef3f251ff/bitarray-3.8.2-cp311-cp311-win_arm64.whl", hash = "sha256:a78778a0899c682537ac612b1a03ecd4ad30063c118825d0138d0f7518270e54", size = 148006, upload-time = "2026-06-17T17:20:29.193Z" }, + { url = "https://files.pythonhosted.org/packages/52/20/53916ba8d01bc92e01d89c03cd7745107df48923de091b5f957578ff38ff/bitarray-3.8.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d5dcca2b64bbfce46dc43d77a2973d0b949e2260d74e8bd4e9a766de3afd0e70", size = 150156, upload-time = "2026-06-17T17:20:30.372Z" }, + { url = "https://files.pythonhosted.org/packages/18/a8/bfa7c8f4141b3119decc54ff6656b8e2f6d4303dc71577021f2d4b42cf42/bitarray-3.8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c78dfbb8883133caeb11aa4ec375165ff1b456a28898cbe45536173369accb24", size = 146884, upload-time = "2026-06-17T17:20:31.615Z" }, + { url = "https://files.pythonhosted.org/packages/f5/60/fb0e9118dce7e1858fc4f608d0c13460207b227fc13819a23c6f3c70ec78/bitarray-3.8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c32189234e4206c3832f947ebdf1735926dea0dbe0e966effd62771884dedf63", size = 336496, upload-time = "2026-06-17T17:20:32.944Z" }, + { url = "https://files.pythonhosted.org/packages/be/b5/8d50bb4d55113535919812adb66dcdb590a95a032d5975254d951146c2b4/bitarray-3.8.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:26490091d3ad8c039829b33ab1bc776941ce359ecdcf8beef3c1efc330fcf1a5", size = 364673, upload-time = "2026-06-17T17:20:34.394Z" }, + { url = "https://files.pythonhosted.org/packages/f2/c2/90ca21488fb0ac791a00b98c49c3dbab7ca1aca59e8745dabe073133370f/bitarray-3.8.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8ad858bd35dbb554de248c277ba9052f31d8e153c133195ef40c198303725dc8", size = 375966, upload-time = "2026-06-17T17:20:35.555Z" }, + { url = "https://files.pythonhosted.org/packages/3b/39/f414699060068ef15b886353e6ae6d2f476715e5c7db205b47710e5e7b4c/bitarray-3.8.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:58aeaf943929716b411a4ff24422c2b8bbf2c2d8ef3e23bbf08dc7d47c49e2ae", size = 343994, upload-time = "2026-06-17T17:20:37.24Z" }, + { url = "https://files.pythonhosted.org/packages/32/84/70a8ae25ba927f0b7656041c7cceea011296cbf6cc3770788bc331a5be88/bitarray-3.8.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3b016d736e2b4aa8962962724b69893adce076622374cf4a275503049f5c7207", size = 334129, upload-time = "2026-06-17T17:20:38.476Z" }, + { url = "https://files.pythonhosted.org/packages/4e/20/3ec71a1e9a8cab12e7306cbfcf0f6e6ae7726f11ca4a7aa2bd047d8d105e/bitarray-3.8.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6871b2b1680580e54fbf0196b3ab7b40a417b4d1fdb3ebda0debf3948e9b8604", size = 361708, upload-time = "2026-06-17T17:20:40.302Z" }, + { url = "https://files.pythonhosted.org/packages/90/fc/6cae06eac8a25e5715f5607de6bae4bc3ec3b0634f790d5e22debab1802d/bitarray-3.8.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a4c6bb948d011bf18642e09a0a4d1dd067f0722db09d2d4b5d6cce292d71b448", size = 359888, upload-time = "2026-06-17T17:20:42.132Z" }, + { url = "https://files.pythonhosted.org/packages/c0/cc/078932ee7b41862571e8b3cfb7dc4e03af5c4843b8246a5a663af8678773/bitarray-3.8.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:78622f067a89360e8acf146be7878f62deafe687db40feb16dabfc808a20717c", size = 340969, upload-time = "2026-06-17T17:20:43.326Z" }, + { url = "https://files.pythonhosted.org/packages/f6/19/719edf77615864263a12351287832979b02a6277b4058ec6b53669ecbf7e/bitarray-3.8.2-cp312-cp312-win32.whl", hash = "sha256:75999de62a7c4686b901458d441bc3c6c03dade68d1dfbe808439e748d086ea3", size = 143759, upload-time = "2026-06-17T17:20:44.753Z" }, + { url = "https://files.pythonhosted.org/packages/e9/af/6806f09441de299ccd42b361c2e25138425457331c0e59aef23aba0e901e/bitarray-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:3e44247fcf5dffa86031d5412b20278a953e4dcef4033012c93ebd9985d48fec", size = 150393, upload-time = "2026-06-17T17:20:45.983Z" }, + { url = "https://files.pythonhosted.org/packages/99/e0/b9c738cfc16a59fcb4b17dd4f699d235257d2d3074e403892d4cd37ccc53/bitarray-3.8.2-cp312-cp312-win_arm64.whl", hash = "sha256:f823fa67f074c0ede82014fd5c2020f301b88f351635f5ba7b802f53b5e0eade", size = 148168, upload-time = "2026-06-17T17:20:47.169Z" }, + { url = "https://files.pythonhosted.org/packages/48/99/01fb3b90cbf8a930d2326945df2b28a5f046380c0f966ea78cada00dae45/bitarray-3.8.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:71d7350c801eea43afb0a8679fd7475b0fd9868fd15352f0d3069f335b44af06", size = 150167, upload-time = "2026-06-17T17:20:48.408Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ce/b26a94753fcfd9e7652805a539df60a83085997319be81ef6d59192ad37c/bitarray-3.8.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa3be101ed71c4e4989899da744a926d1f55f5d5f7f93242c32f727f7c11350b", size = 146882, upload-time = "2026-06-17T17:20:49.58Z" }, + { url = "https://files.pythonhosted.org/packages/a9/8e/0bdf36618f4f585d5c35cb033f6a5611337d873d8718feca41d27453cc54/bitarray-3.8.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f684eb138bae893a5d98c811d99ecd89fa4a1af4700b0e512b8e2b794c9cabd", size = 335677, upload-time = "2026-06-17T17:20:50.856Z" }, + { url = "https://files.pythonhosted.org/packages/cc/99/5588cbe69640d7fa2386be315ddb0e1bde6de8e922c025dccee769cc6d9e/bitarray-3.8.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:94e7da622b723705caddd59ee681cee0355b444901cc6fb2bcdc24bafba85911", size = 363773, upload-time = "2026-06-17T17:20:52.143Z" }, + { url = "https://files.pythonhosted.org/packages/80/4f/7d2946d88ae77306833bd5b91746d212404d5a86347341274b61d08c3f7e/bitarray-3.8.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3110786b00b28a756fd948c8d63e6ca3a74810b2d115582d85593d9d48035c49", size = 375005, upload-time = "2026-06-17T17:20:53.525Z" }, + { url = "https://files.pythonhosted.org/packages/fd/be/9a645b2e1bb0da4779dd9cab5a075d7c5bb68a16d8c90f051d47393bbcfe/bitarray-3.8.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd40cf27e2b54b5e30d0ce1da4f59bc16dd7c8363a20786b6e9deeb0b8ebe8e0", size = 343273, upload-time = "2026-06-17T17:20:54.938Z" }, + { url = "https://files.pythonhosted.org/packages/98/8d/73c658d200671c5e023225163be6aa545f675a676e960e5a4e19ac21274b/bitarray-3.8.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:24c6b97f27bd3868e28b201e1d777f5e168805862b7d9528099138bbb8c6a636", size = 333403, upload-time = "2026-06-17T17:20:56.533Z" }, + { url = "https://files.pythonhosted.org/packages/94/bc/819abd376bd6a892ce27840a1d5a4378be228be1ab3bca41845203ee672b/bitarray-3.8.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:786dedb4b1ced22dfeaaa89902561616f7edfa91774702b1aac31df3a6073c88", size = 360846, upload-time = "2026-06-17T17:20:57.862Z" }, + { url = "https://files.pythonhosted.org/packages/83/59/b8ea1e31928d06db1f2b12187631b51bb3c83186b18581754bc008cec0aa/bitarray-3.8.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:01bf9ff247117533c11963a81f3529bc12283c600dd195cf3b28a97b095f5d1c", size = 359168, upload-time = "2026-06-17T17:20:59.48Z" }, + { url = "https://files.pythonhosted.org/packages/6e/31/ef3b2f58517f7dbba8119f2592c1ea556a687bc8d405dd93c07f9c28d514/bitarray-3.8.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cc7a76e77c158e793d7c1e0b6c2240374087ac690a8bcacc8f18c427e5d9e20c", size = 340091, upload-time = "2026-06-17T17:21:01.183Z" }, + { url = "https://files.pythonhosted.org/packages/8f/83/bf92dcfec4eefd59fa4d8491504e100ae86e11b8cec353ae5532b25708e6/bitarray-3.8.2-cp313-cp313-win32.whl", hash = "sha256:db9add8dcc87154c0f011e0e1ce9b856e5948fbcf6faf44305aa140e525ec9a7", size = 143786, upload-time = "2026-06-17T17:21:02.43Z" }, + { url = "https://files.pythonhosted.org/packages/1c/29/1f57913a96bffb27bed486a9ca592021dd8161f6c95fd632aad7d4f0bb95/bitarray-3.8.2-cp313-cp313-win_amd64.whl", hash = "sha256:cf4926098970d2d1a14156c0fbddb47554124347db4acf3ba616064fb021cd1e", size = 150414, upload-time = "2026-06-17T17:21:03.649Z" }, + { url = "https://files.pythonhosted.org/packages/17/9c/f36b91fcb93af54c9a28e3bd1fbf39ef7706fc623a526f3450113c0a0dae/bitarray-3.8.2-cp313-cp313-win_arm64.whl", hash = "sha256:5c8281d0eb35e8685235e1d50f9b26156803dad398d0e7868ce9aae254c3777d", size = 148197, upload-time = "2026-06-17T17:21:04.892Z" }, + { url = "https://files.pythonhosted.org/packages/c6/86/aa2f29699763f4867359289a946ff3597d45239470c20f6ccb8dba48e7af/bitarray-3.8.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cbe96e7384e36963a2cdf5bc4ac9d0a78ae0d87fc78c53159cd5ac08c661ff34", size = 150139, upload-time = "2026-06-17T17:21:06.258Z" }, + { url = "https://files.pythonhosted.org/packages/56/1f/0d759c53a7129e4979c3c03b3f2372291c4c5a1cc851d9e749273b34ddf8/bitarray-3.8.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8b4fcecbbd0969988cc115bee74119c767636e48606fad318361eb9fe40a13c6", size = 146888, upload-time = "2026-06-17T17:21:07.515Z" }, + { url = "https://files.pythonhosted.org/packages/49/2e/0611d057e6cb010ccaf55ec6630ef41d3e7546a285383dfa2a99f545e440/bitarray-3.8.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48798fc274e8a0329ca75185a0dc1e0a93ff627ea8f30c339bdf0a2ef26b1723", size = 335581, upload-time = "2026-06-17T17:21:08.808Z" }, + { url = "https://files.pythonhosted.org/packages/11/0d/201befb06fbb6275046ffe2d21cbe3b059e4f5c6b258da6e6b41f53dd9af/bitarray-3.8.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f4205ae045129e58e7b7a9abe929ea0b9a3c63fad39d760e6e3b90062b6e5aa5", size = 363929, upload-time = "2026-06-17T17:21:10.225Z" }, + { url = "https://files.pythonhosted.org/packages/b6/3c/2639aaa97eb81cabc453f78277493ea31ff49b3514e17eca56129d613279/bitarray-3.8.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:49c16cdedbd3c4d6bf64aca7b370ea02456e9be030201e80c282d8df6af36d19", size = 374562, upload-time = "2026-06-17T17:21:11.771Z" }, + { url = "https://files.pythonhosted.org/packages/52/1d/f11ba5b55f6a0f0007985f435c0e32c7a3459775cdee308cfb5938628670/bitarray-3.8.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5cad241cd0ceb79a0e4f76e86b36660c22d36c32efb364badcf7609ed5a9e5c", size = 343166, upload-time = "2026-06-17T17:21:13.101Z" }, + { url = "https://files.pythonhosted.org/packages/4b/b9/2f8f62e1cd42f60f20ca55ed3de57ff2295b85a70eff119501ae2f0e8c48/bitarray-3.8.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3b44650aba323cb1c2285c310ffa6b1adfd5293acecd7f84aaa91afa27c802c", size = 333564, upload-time = "2026-06-17T17:21:14.629Z" }, + { url = "https://files.pythonhosted.org/packages/22/de/1525e32e7663980b82098ae0c6e032823782b9190cabed6a1f09e67c7831/bitarray-3.8.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5fc8fa50c6a89b1e75edcea4ae17787a0a9b424cdbaa03485e73a837262eca27", size = 361034, upload-time = "2026-06-17T17:21:16.318Z" }, + { url = "https://files.pythonhosted.org/packages/df/55/7bfe6af3fa577f5132380209c3f3ec560149c0af4e540ce16d84f8b76599/bitarray-3.8.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5f246319a26221e36eaf3f6aed9cd98172f81e91740bbf5cdf31b4490ecfb87a", size = 358728, upload-time = "2026-06-17T17:21:17.598Z" }, + { url = "https://files.pythonhosted.org/packages/9d/c8/85898711f7b4cf5b06c49d8e36a6702a303f1990cb21cbb39dbe186730a0/bitarray-3.8.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e76c01ae0f191c5572c12b1fda333243bfe4d58ad1d601048f9e4928d94db0c5", size = 339747, upload-time = "2026-06-17T17:21:19.092Z" }, + { url = "https://files.pythonhosted.org/packages/5b/56/94cc5250be3d530c52d15e41bdbf5f891a492aeebb9e978914aa4559c00a/bitarray-3.8.2-cp314-cp314-win32.whl", hash = "sha256:a1df20419ccc23a0326ee0cb391d1c524ee3c338856e66528d73f4dcec0389d0", size = 142830, upload-time = "2026-06-17T17:21:20.347Z" }, + { url = "https://files.pythonhosted.org/packages/b4/eb/b9ba05ae59d56a9e5cb8e812072d33be38076717db6579302e1ee85fd688/bitarray-3.8.2-cp314-cp314-win_amd64.whl", hash = "sha256:4bfbeba9156834455ab107936ebd461728f1ed35ded8f15aafde2c3dac9badf5", size = 148912, upload-time = "2026-06-17T17:21:21.556Z" }, + { url = "https://files.pythonhosted.org/packages/b6/07/e279a5ba7cd114398f00d853026e6c72e198035b925c74866e3c1973daca/bitarray-3.8.2-cp314-cp314-win_arm64.whl", hash = "sha256:4149aeb7c8cad12f9ea13783550ab5508e6d553eeefead5e3da659ce6724c5a5", size = 147373, upload-time = "2026-06-17T17:21:23.051Z" }, + { url = "https://files.pythonhosted.org/packages/94/a4/4014952965ef7edf80076f8004df31484bccecba97af7b3e9c99269a053d/bitarray-3.8.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:f6f6cf5ec3be7e1bd32bfe1f4b24f7d1de28d72394d7f58789b9f9042d19f5f6", size = 151073, upload-time = "2026-06-17T17:21:24.285Z" }, + { url = "https://files.pythonhosted.org/packages/ff/00/850095c3bc551797c97a4b54c7755fc46eb115ce288fcf6962d8e8c5b678/bitarray-3.8.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b2b9790847024cf1de275c8b2495331fe0982d099e407be1c1413ed40ddf2b5d", size = 148009, upload-time = "2026-06-17T17:21:25.595Z" }, + { url = "https://files.pythonhosted.org/packages/dd/4d/74f0440d95d00f086a80e6c429e3333ebb29cecf55a8d401ceb0c65a3b4b/bitarray-3.8.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c172161b8847f91e9f9ea9ae2e31fcfa784ec5d0cd413900c82574999e21ad05", size = 343487, upload-time = "2026-06-17T17:21:26.96Z" }, + { url = "https://files.pythonhosted.org/packages/78/e9/ea9c182ff0edb671853bb7a54b790572dc0b73d4a3b13e358f42aa34dca0/bitarray-3.8.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5fcc57961bc78885091a45b9ced5a5924b3b1fdd439a0e1d4b7e3aedf0c31ae2", size = 372305, upload-time = "2026-06-17T17:21:28.399Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ff/307cacc432e2ec304b870676189852c3f34a803d15b26f73bb36c549166b/bitarray-3.8.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b5fdb5399f0f2c42abcca87f8167d7ad746cf6ca7decadb4f5ad432280cc3a2f", size = 382242, upload-time = "2026-06-17T17:21:29.77Z" }, + { url = "https://files.pythonhosted.org/packages/b8/ae/757a10ce90e2090dd2dff8c5059a47439122a8d68f5fa9cf06ed07a1dc74/bitarray-3.8.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8bb6195a2edafceee0e9ee12c13aad2162e9578d91a24e7c501c3bd4ab90511a", size = 348509, upload-time = "2026-06-17T17:21:31.195Z" }, + { url = "https://files.pythonhosted.org/packages/ef/d3/a035bb2c459e1f7bc86974fd43057aa8bb76466dd6bd75787d8eb9c534ed/bitarray-3.8.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ce3b3dd599d4eca214f9c7fb7ac2343ccab41d91f3da7aa3b75ddbbea49ec2d5", size = 340539, upload-time = "2026-06-17T17:21:32.652Z" }, + { url = "https://files.pythonhosted.org/packages/bc/6d/e7af02d167c227d143d208cd1c54d8e4f024d8d0bb59a0f2c38c32d56ad0/bitarray-3.8.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:11cd9766ce95199bef5010ff63f73c880d9c0b6ba9c4c233aeeebc11ab1dfbb3", size = 369505, upload-time = "2026-06-17T17:21:34.115Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/29d0538ac245941127a25735d33f7b6658be6612c35115bcac60ef7c3c1c/bitarray-3.8.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:7a4bbbad17d3db92615497302b74cf77504f821eb9585b7948d92093017d5e70", size = 365262, upload-time = "2026-06-17T17:21:35.829Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c8/2feabadbbc365e000821c7af82906e71366b29719329ef5709d64707fd4c/bitarray-3.8.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e715498f3dc9af954b9d0977470aa352cb3fe1c39e80c32f5ac4c0348e461f6d", size = 344014, upload-time = "2026-06-17T17:21:37.228Z" }, + { url = "https://files.pythonhosted.org/packages/6c/88/dc465cbfe5c74b7da8c19b9dc2565d8a4391fad418c48e1559a0267fd00b/bitarray-3.8.2-cp314-cp314t-win32.whl", hash = "sha256:c85569fb99cf9d4aa964d2dbba3c095c7580b4368f63f51252e85b939fcd0a2c", size = 143775, upload-time = "2026-06-17T17:21:38.789Z" }, + { url = "https://files.pythonhosted.org/packages/08/75/50f2ef697d8ce46ba0986830f2d1288bff883e7f4833590076956a073496/bitarray-3.8.2-cp314-cp314t-win_amd64.whl", hash = "sha256:7de416b313fc8e8aa1e323b83d2ba86b7c84161f7ebbaf986bdab80f9d06a2fb", size = 149884, upload-time = "2026-06-17T17:21:40.315Z" }, + { url = "https://files.pythonhosted.org/packages/df/0e/6aa2133fffbac3efcb468c7c12163eff7bbe55b86a0d6a1c687ef57e2654/bitarray-3.8.2-cp314-cp314t-win_arm64.whl", hash = "sha256:7199451493d34a5c62cb7c9077fcfd238499af4e0d13a32d33760afe73054135", size = 148321, upload-time = "2026-06-17T17:21:41.804Z" }, ] [[package]] @@ -123,10 +150,11 @@ requires-dist = [ { name = "typing-extensions", marker = "python_full_version < '3.11'", specifier = ">=4.0.0" }, { name = "websockets", specifier = ">=14.1,<17" }, ] +provides-extras = ["evm", "cli"] [package.metadata.requires-dev] dev = [ - { name = "hypothesis", specifier = ">=6.100" }, + { name = "hypothesis", specifier = ">=6.161.0" }, { name = "pytest", specifier = ">=8.0" }, { name = "pytest-asyncio", specifier = ">=0.24" }, { name = "pytest-cov", specifier = ">=6.0" }, @@ -144,117 +172,163 @@ source = { directory = "../bittensor-core-py" } name = "ckzg" version = "2.1.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/12/44/fdb579a0d035a1e510511e3c3b9ca98ba2ea240a24f112b1882478bfc2ff/ckzg-2.1.7.tar.gz", hash = "sha256:a0c61c5fd573af0267bcb435ef0f499911289ceb05e863480779ea284a3bb928", size = 1127878 } +sdist = { url = "https://files.pythonhosted.org/packages/12/44/fdb579a0d035a1e510511e3c3b9ca98ba2ea240a24f112b1882478bfc2ff/ckzg-2.1.7.tar.gz", hash = "sha256:a0c61c5fd573af0267bcb435ef0f499911289ceb05e863480779ea284a3bb928", size = 1127878, upload-time = "2026-03-11T14:11:13.745Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/13/543f474f03dc293828abbfc8a2efed2c3bd5bb10c78d0b6527d4cc880140/ckzg-2.1.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:21fbb7f5689413994d224046c0c06cb8385fb8de33c5171b2c057151710cffed", size = 96363 }, - { url = "https://files.pythonhosted.org/packages/ca/6e/8fb39b7aa945da20652e9ca5f44a2186a3b65564b106bacaf8b9fdf317df/ckzg-2.1.7-cp310-cp310-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:83f56b03c54fd9a610aeefd9fd241bb2af960cb703f208c7806b37ccc9fb7fb8", size = 179526 }, - { url = "https://files.pythonhosted.org/packages/15/4c/47e3865ffe4ae97232b67c4757b8a633f73465955d819e9d82ceb75029d7/ckzg-2.1.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8bfa41d97ee31a2053d0b2f2a53793f67745bfa694f48b6d091ae499a04c272f", size = 165238 }, - { url = "https://files.pythonhosted.org/packages/33/0f/8c809f835702a1f0c519ff35d9085783155ba44f921704fd5869b499ccc6/ckzg-2.1.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:244acf422fb727dbc376a082f71d66f6f2787b570ec27d17d20c3c3b85aef6fb", size = 174946 }, - { url = "https://files.pythonhosted.org/packages/77/e6/e61ba4caa703a84a9535c10c78180cec0c39279fd21361931dc147dab96a/ckzg-2.1.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8705f73a7efe0f01b8ce67677320be99c7d7c7077311d255bbf2d4e55fdc6a9b", size = 172853 }, - { url = "https://files.pythonhosted.org/packages/a1/c0/b76384bf8716acb7115a6a032c7e3362cb0466dd93a7567bde5c17a5b9b2/ckzg-2.1.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c6b29572b2a4f678991a1edc2426f1802e9190eb763510cf1e9bafe797f004ba", size = 187908 }, - { url = "https://files.pythonhosted.org/packages/51/32/86f473ee8b6cb9f7ffdf0007ee54fc30431d9bdf79f10240d6af2b4ab0f9/ckzg-2.1.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6ce04e32c1c459afae80edd32304956340a1dc5464a9f732f115f1119e3ec51d", size = 182481 }, - { url = "https://files.pythonhosted.org/packages/3b/59/bdbd795e51402e654652693cbaa44573b7bc2b91cb9a662b7575d46bc5aa/ckzg-2.1.7-cp310-cp310-win_amd64.whl", hash = "sha256:f537529bebfc58de21a6326100ad33e7d7ee98b0d49e44ee7f53d17ef899dfd5", size = 99827 }, - { url = "https://files.pythonhosted.org/packages/78/f1/aa4fac509f986ada4718517a2d167b7ce7efae9624c0f7f71c113c4debbd/ckzg-2.1.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c9172f571ac7ec6d90207ad1903d921c38e48482bc028f723d6908720af1add6", size = 96366 }, - { url = "https://files.pythonhosted.org/packages/96/c6/30cdc5b43928221c67b3853c10c54a21c525802a10af23cbfc188f6ad2d8/ckzg-2.1.7-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:c5494f39edeffedfa085fe85614a1c05ddd895ceb9d6c1800dc5355f9132a8f9", size = 180266 }, - { url = "https://files.pythonhosted.org/packages/e5/97/86f6030cb6daff6d87b8d0c2a666f09360b5b179fdc3507bcc60ef26318e/ckzg-2.1.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb67250207b93d2df7f694bb74bd6b4a15fb2bb67d6a78977ae8ff431678c7e7", size = 165983 }, - { url = "https://files.pythonhosted.org/packages/19/85/547814b4c6a09ebd27af9f682b7066c5c4569acd4fea74841cfe8964e5ab/ckzg-2.1.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7828cb549e2e8368e966c9dab87f3a51456647f1a3e79bdac9194e17bbc4d54", size = 175698 }, - { url = "https://files.pythonhosted.org/packages/30/a0/890e33ac991222aaa919a092e0de397e59df75baa92ec17f89370062863d/ckzg-2.1.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23eacac20c6d3be2c87e592c11d02e4a1912e799d77e2559502455e85113e7b4", size = 173516 }, - { url = "https://files.pythonhosted.org/packages/a8/71/ec6f713fb1056a647d4a7fad4ced15faedcd5d7b2a6f34ece81a9d1dbdd8/ckzg-2.1.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4dd2afdc41f063e57eb569034b81088ba724240d3247ca78ea6591a1e04df50d", size = 188621 }, - { url = "https://files.pythonhosted.org/packages/d8/86/04572a67546e66b809946a7234cac0e3aa67bfa4a256d8440eefb1deaf87/ckzg-2.1.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b3af91c230982d59afe6f42c9c2a4c74412424a566bd09a42ffdfb451872335a", size = 183257 }, - { url = "https://files.pythonhosted.org/packages/da/c1/3060e997955e61699e4f6a431ff3cd3f780cd8ccfab0a2e0462848680185/ckzg-2.1.7-cp311-cp311-win_amd64.whl", hash = "sha256:f959a3bbc6d7aa7a653946e67dadaa78c0c79828aaa93b125a26f171a602b8fa", size = 99823 }, - { url = "https://files.pythonhosted.org/packages/09/40/8c2d610066a2efd4048553ff12aa832c916822ec9c888ca924565e520a7b/ckzg-2.1.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:126050ffb23b504c34c4c2073c54bd8b42f4a3034798a631c9e85911e26caf47", size = 96386 }, - { url = "https://files.pythonhosted.org/packages/29/b6/092bd10eb35e9fe3d316410791d9055039c5dd29caf03c72cc86fce45624/ckzg-2.1.7-cp312-cp312-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:936b4bffc1a6fa2bf261eb5e673f4fcc59feaf70c6c07aac1b02e3e1f942fdb6", size = 180447 }, - { url = "https://files.pythonhosted.org/packages/53/7e/f1c15ec078bee7660a2cafa103c4efdf9686256a348565ef6a1cb70ff1c4/ckzg-2.1.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:902c03b689d13684cd8b61c8e1b7a65528fdd5e1ab9d76338ddb2e902b5fd1ea", size = 166242 }, - { url = "https://files.pythonhosted.org/packages/bf/de/c22535e16163a836f76d7c3606a6e579a7a02862b4797b832cd6de5f6a1d/ckzg-2.1.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e635e5e1f6ff8ffc05d2961ccfc4b3e8c95e50c87d9765b2dfe09e32474c402", size = 176015 }, - { url = "https://files.pythonhosted.org/packages/af/4f/56c303eab20d92e5d140f96881c8c7e2eaa05976d6cb887ab574d780d09d/ckzg-2.1.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbedb5e4732d37c87fe45a2b25891d00f434d4e0f4dd612daa034fe2011e5939", size = 173682 }, - { url = "https://files.pythonhosted.org/packages/85/0a/0feb878383e9c83d6dcd760b8de2f3095546cc09b1717ae65cbb47f90b20/ckzg-2.1.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:665d0094466b576e390b4a5e1caf199f1165841e99bf7b3cc65117f12ba4ea74", size = 188873 }, - { url = "https://files.pythonhosted.org/packages/48/29/c2eb07882465c32478e575334311ad6cea21c5d76d54da6c900dd6cb8e62/ckzg-2.1.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f5d4d1fb20eda15b901fc393a4bfd39b1be661008218f9f0db47d4e143d25d62", size = 183566 }, - { url = "https://files.pythonhosted.org/packages/c8/48/4d1f5c470cc6eb73aaba30125e6fb62759ce69bbdb2a74c160f69f601236/ckzg-2.1.7-cp312-cp312-win_amd64.whl", hash = "sha256:b580f65e61f3d89a99bfeeac0e256cf68c63d29df1c1e5e788785085083a303b", size = 99811 }, - { url = "https://files.pythonhosted.org/packages/87/32/495600f43a277bcb413d08f23f594dc548ac0d7927ad1ce7db28e58afadd/ckzg-2.1.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e23e10b227209bfae11f6f1f88ff2a8b0a2232248f985321e5e844c9dd7a4c5f", size = 96394 }, - { url = "https://files.pythonhosted.org/packages/e4/fe/c3708cfdbc228298c0f5fa4d08ceee7cc01cb7f7d105bfc9ebc68c39060d/ckzg-2.1.7-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:382c015860e7159b1ec5a85642127d4b55f6b36eef5f73d664fc409d26a3b367", size = 180484 }, - { url = "https://files.pythonhosted.org/packages/28/55/d689769ea0f9b2c2c16d8390f4c3cf7cd7dea0df68542b2a435c341df0b0/ckzg-2.1.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6666801e925d2f1d7c045fe943c1265c39b90444f88288735cc1245c4fa8018a", size = 166301 }, - { url = "https://files.pythonhosted.org/packages/16/ff/e172b4ae4bef05bf88bb8f27d2b9858b56c9984ad1708eeef82ac787fe7c/ckzg-2.1.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e823de2fd4103abc4b51512d27aa3e14107e84718e11a596eefcddc6f313b25", size = 176052 }, - { url = "https://files.pythonhosted.org/packages/61/0a/dcf28e0126e5a6f8f8b7505b4b5b637ca25e1095272fbee73f8967e3a545/ckzg-2.1.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a65c7be0bb72a159c5a4b98cc3c759b868274697de11d8248f5dde32f2400776", size = 173691 }, - { url = "https://files.pythonhosted.org/packages/2a/d2/fe404ad0bd79aaeb1e75fb4981d21e37364e59517813f7f085914026a7f6/ckzg-2.1.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62523b275f74f2729fc788d02b26e447dabfd7706ffe8882ee96d776db54b920", size = 188909 }, - { url = "https://files.pythonhosted.org/packages/55/d7/ef2d30c88270ab1a0daffa8a0f8453b72035569d3295ad3dcaba9b5250a6/ckzg-2.1.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d998cd6d0f8e37e969c96315ac8c1e87fcf581cf27ab970bd33e62dc1c43357", size = 183597 }, - { url = "https://files.pythonhosted.org/packages/93/77/1e04840c866284bec3489154caec22855829b0c2d028bd1de771655175e3/ckzg-2.1.7-cp313-cp313-win_amd64.whl", hash = "sha256:d48b75fca9e928b2ea288fc079b0522fb91af5742b5eb4f2fdea4fc33a1b7b4e", size = 99808 }, + { url = "https://files.pythonhosted.org/packages/e4/13/543f474f03dc293828abbfc8a2efed2c3bd5bb10c78d0b6527d4cc880140/ckzg-2.1.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:21fbb7f5689413994d224046c0c06cb8385fb8de33c5171b2c057151710cffed", size = 96363, upload-time = "2026-03-11T14:10:06.585Z" }, + { url = "https://files.pythonhosted.org/packages/ca/6e/8fb39b7aa945da20652e9ca5f44a2186a3b65564b106bacaf8b9fdf317df/ckzg-2.1.7-cp310-cp310-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:83f56b03c54fd9a610aeefd9fd241bb2af960cb703f208c7806b37ccc9fb7fb8", size = 179526, upload-time = "2026-03-11T14:10:07.936Z" }, + { url = "https://files.pythonhosted.org/packages/15/4c/47e3865ffe4ae97232b67c4757b8a633f73465955d819e9d82ceb75029d7/ckzg-2.1.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8bfa41d97ee31a2053d0b2f2a53793f67745bfa694f48b6d091ae499a04c272f", size = 165238, upload-time = "2026-03-11T14:10:09.031Z" }, + { url = "https://files.pythonhosted.org/packages/33/0f/8c809f835702a1f0c519ff35d9085783155ba44f921704fd5869b499ccc6/ckzg-2.1.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:244acf422fb727dbc376a082f71d66f6f2787b570ec27d17d20c3c3b85aef6fb", size = 174946, upload-time = "2026-03-11T14:10:10.096Z" }, + { url = "https://files.pythonhosted.org/packages/77/e6/e61ba4caa703a84a9535c10c78180cec0c39279fd21361931dc147dab96a/ckzg-2.1.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8705f73a7efe0f01b8ce67677320be99c7d7c7077311d255bbf2d4e55fdc6a9b", size = 172853, upload-time = "2026-03-11T14:10:11.048Z" }, + { url = "https://files.pythonhosted.org/packages/a1/c0/b76384bf8716acb7115a6a032c7e3362cb0466dd93a7567bde5c17a5b9b2/ckzg-2.1.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c6b29572b2a4f678991a1edc2426f1802e9190eb763510cf1e9bafe797f004ba", size = 187908, upload-time = "2026-03-11T14:10:12.018Z" }, + { url = "https://files.pythonhosted.org/packages/51/32/86f473ee8b6cb9f7ffdf0007ee54fc30431d9bdf79f10240d6af2b4ab0f9/ckzg-2.1.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6ce04e32c1c459afae80edd32304956340a1dc5464a9f732f115f1119e3ec51d", size = 182481, upload-time = "2026-03-11T14:10:13.013Z" }, + { url = "https://files.pythonhosted.org/packages/3b/59/bdbd795e51402e654652693cbaa44573b7bc2b91cb9a662b7575d46bc5aa/ckzg-2.1.7-cp310-cp310-win_amd64.whl", hash = "sha256:f537529bebfc58de21a6326100ad33e7d7ee98b0d49e44ee7f53d17ef899dfd5", size = 99827, upload-time = "2026-03-11T14:10:14.224Z" }, + { url = "https://files.pythonhosted.org/packages/78/f1/aa4fac509f986ada4718517a2d167b7ce7efae9624c0f7f71c113c4debbd/ckzg-2.1.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c9172f571ac7ec6d90207ad1903d921c38e48482bc028f723d6908720af1add6", size = 96366, upload-time = "2026-03-11T14:10:15.098Z" }, + { url = "https://files.pythonhosted.org/packages/96/c6/30cdc5b43928221c67b3853c10c54a21c525802a10af23cbfc188f6ad2d8/ckzg-2.1.7-cp311-cp311-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:c5494f39edeffedfa085fe85614a1c05ddd895ceb9d6c1800dc5355f9132a8f9", size = 180266, upload-time = "2026-03-11T14:10:16.142Z" }, + { url = "https://files.pythonhosted.org/packages/e5/97/86f6030cb6daff6d87b8d0c2a666f09360b5b179fdc3507bcc60ef26318e/ckzg-2.1.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb67250207b93d2df7f694bb74bd6b4a15fb2bb67d6a78977ae8ff431678c7e7", size = 165983, upload-time = "2026-03-11T14:10:17.407Z" }, + { url = "https://files.pythonhosted.org/packages/19/85/547814b4c6a09ebd27af9f682b7066c5c4569acd4fea74841cfe8964e5ab/ckzg-2.1.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7828cb549e2e8368e966c9dab87f3a51456647f1a3e79bdac9194e17bbc4d54", size = 175698, upload-time = "2026-03-11T14:10:18.35Z" }, + { url = "https://files.pythonhosted.org/packages/30/a0/890e33ac991222aaa919a092e0de397e59df75baa92ec17f89370062863d/ckzg-2.1.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23eacac20c6d3be2c87e592c11d02e4a1912e799d77e2559502455e85113e7b4", size = 173516, upload-time = "2026-03-11T14:10:19.615Z" }, + { url = "https://files.pythonhosted.org/packages/a8/71/ec6f713fb1056a647d4a7fad4ced15faedcd5d7b2a6f34ece81a9d1dbdd8/ckzg-2.1.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4dd2afdc41f063e57eb569034b81088ba724240d3247ca78ea6591a1e04df50d", size = 188621, upload-time = "2026-03-11T14:10:20.865Z" }, + { url = "https://files.pythonhosted.org/packages/d8/86/04572a67546e66b809946a7234cac0e3aa67bfa4a256d8440eefb1deaf87/ckzg-2.1.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b3af91c230982d59afe6f42c9c2a4c74412424a566bd09a42ffdfb451872335a", size = 183257, upload-time = "2026-03-11T14:10:21.808Z" }, + { url = "https://files.pythonhosted.org/packages/da/c1/3060e997955e61699e4f6a431ff3cd3f780cd8ccfab0a2e0462848680185/ckzg-2.1.7-cp311-cp311-win_amd64.whl", hash = "sha256:f959a3bbc6d7aa7a653946e67dadaa78c0c79828aaa93b125a26f171a602b8fa", size = 99823, upload-time = "2026-03-11T14:10:22.674Z" }, + { url = "https://files.pythonhosted.org/packages/09/40/8c2d610066a2efd4048553ff12aa832c916822ec9c888ca924565e520a7b/ckzg-2.1.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:126050ffb23b504c34c4c2073c54bd8b42f4a3034798a631c9e85911e26caf47", size = 96386, upload-time = "2026-03-11T14:10:23.532Z" }, + { url = "https://files.pythonhosted.org/packages/29/b6/092bd10eb35e9fe3d316410791d9055039c5dd29caf03c72cc86fce45624/ckzg-2.1.7-cp312-cp312-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:936b4bffc1a6fa2bf261eb5e673f4fcc59feaf70c6c07aac1b02e3e1f942fdb6", size = 180447, upload-time = "2026-03-11T14:10:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/53/7e/f1c15ec078bee7660a2cafa103c4efdf9686256a348565ef6a1cb70ff1c4/ckzg-2.1.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:902c03b689d13684cd8b61c8e1b7a65528fdd5e1ab9d76338ddb2e902b5fd1ea", size = 166242, upload-time = "2026-03-11T14:10:25.671Z" }, + { url = "https://files.pythonhosted.org/packages/bf/de/c22535e16163a836f76d7c3606a6e579a7a02862b4797b832cd6de5f6a1d/ckzg-2.1.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e635e5e1f6ff8ffc05d2961ccfc4b3e8c95e50c87d9765b2dfe09e32474c402", size = 176015, upload-time = "2026-03-11T14:10:26.976Z" }, + { url = "https://files.pythonhosted.org/packages/af/4f/56c303eab20d92e5d140f96881c8c7e2eaa05976d6cb887ab574d780d09d/ckzg-2.1.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cbedb5e4732d37c87fe45a2b25891d00f434d4e0f4dd612daa034fe2011e5939", size = 173682, upload-time = "2026-03-11T14:10:27.857Z" }, + { url = "https://files.pythonhosted.org/packages/85/0a/0feb878383e9c83d6dcd760b8de2f3095546cc09b1717ae65cbb47f90b20/ckzg-2.1.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:665d0094466b576e390b4a5e1caf199f1165841e99bf7b3cc65117f12ba4ea74", size = 188873, upload-time = "2026-03-11T14:10:28.85Z" }, + { url = "https://files.pythonhosted.org/packages/48/29/c2eb07882465c32478e575334311ad6cea21c5d76d54da6c900dd6cb8e62/ckzg-2.1.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f5d4d1fb20eda15b901fc393a4bfd39b1be661008218f9f0db47d4e143d25d62", size = 183566, upload-time = "2026-03-11T14:10:29.777Z" }, + { url = "https://files.pythonhosted.org/packages/c8/48/4d1f5c470cc6eb73aaba30125e6fb62759ce69bbdb2a74c160f69f601236/ckzg-2.1.7-cp312-cp312-win_amd64.whl", hash = "sha256:b580f65e61f3d89a99bfeeac0e256cf68c63d29df1c1e5e788785085083a303b", size = 99811, upload-time = "2026-03-11T14:10:30.719Z" }, + { url = "https://files.pythonhosted.org/packages/87/32/495600f43a277bcb413d08f23f594dc548ac0d7927ad1ce7db28e58afadd/ckzg-2.1.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e23e10b227209bfae11f6f1f88ff2a8b0a2232248f985321e5e844c9dd7a4c5f", size = 96394, upload-time = "2026-03-11T14:10:31.535Z" }, + { url = "https://files.pythonhosted.org/packages/e4/fe/c3708cfdbc228298c0f5fa4d08ceee7cc01cb7f7d105bfc9ebc68c39060d/ckzg-2.1.7-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:382c015860e7159b1ec5a85642127d4b55f6b36eef5f73d664fc409d26a3b367", size = 180484, upload-time = "2026-03-11T14:10:32.418Z" }, + { url = "https://files.pythonhosted.org/packages/28/55/d689769ea0f9b2c2c16d8390f4c3cf7cd7dea0df68542b2a435c341df0b0/ckzg-2.1.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6666801e925d2f1d7c045fe943c1265c39b90444f88288735cc1245c4fa8018a", size = 166301, upload-time = "2026-03-11T14:10:33.363Z" }, + { url = "https://files.pythonhosted.org/packages/16/ff/e172b4ae4bef05bf88bb8f27d2b9858b56c9984ad1708eeef82ac787fe7c/ckzg-2.1.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e823de2fd4103abc4b51512d27aa3e14107e84718e11a596eefcddc6f313b25", size = 176052, upload-time = "2026-03-11T14:10:34.621Z" }, + { url = "https://files.pythonhosted.org/packages/61/0a/dcf28e0126e5a6f8f8b7505b4b5b637ca25e1095272fbee73f8967e3a545/ckzg-2.1.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a65c7be0bb72a159c5a4b98cc3c759b868274697de11d8248f5dde32f2400776", size = 173691, upload-time = "2026-03-11T14:10:35.577Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d2/fe404ad0bd79aaeb1e75fb4981d21e37364e59517813f7f085914026a7f6/ckzg-2.1.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62523b275f74f2729fc788d02b26e447dabfd7706ffe8882ee96d776db54b920", size = 188909, upload-time = "2026-03-11T14:10:36.798Z" }, + { url = "https://files.pythonhosted.org/packages/55/d7/ef2d30c88270ab1a0daffa8a0f8453b72035569d3295ad3dcaba9b5250a6/ckzg-2.1.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5d998cd6d0f8e37e969c96315ac8c1e87fcf581cf27ab970bd33e62dc1c43357", size = 183597, upload-time = "2026-03-11T14:10:37.812Z" }, + { url = "https://files.pythonhosted.org/packages/93/77/1e04840c866284bec3489154caec22855829b0c2d028bd1de771655175e3/ckzg-2.1.7-cp313-cp313-win_amd64.whl", hash = "sha256:d48b75fca9e928b2ea288fc079b0522fb91af5742b5eb4f2fdea4fc33a1b7b4e", size = 99808, upload-time = "2026-03-11T14:10:38.701Z" }, + { url = "https://files.pythonhosted.org/packages/24/ab/11eb63c520cae074195b05cd644bf45be061b910b5c97abdaae02876a50e/ckzg-2.1.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c19b98f29f4459587e1ec4cce3e2e10963a6974293cf3143d13ce43c30542806", size = 96400, upload-time = "2026-03-11T14:10:39.59Z" }, + { url = "https://files.pythonhosted.org/packages/31/7d/3678cbb22f31a50dd354b9d3efcb9366dd5b97cdddbf270213a66b03ad41/ckzg-2.1.7-cp314-cp314-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:d31583a24cf8166d81c36f1e424de1f343c1d604dbc8c68d938a908236ae11a3", size = 180492, upload-time = "2026-03-11T14:10:40.766Z" }, + { url = "https://files.pythonhosted.org/packages/48/a5/355f898c75e19ac6426798c28a9767bdc734bebb40c4cd15572f644745ba/ckzg-2.1.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:baf6ac696e6a40b33ddb57aa0729d5e39230bd13fa4f1e40fe9236e8920d83fe", size = 166322, upload-time = "2026-03-11T14:10:41.752Z" }, + { url = "https://files.pythonhosted.org/packages/ff/f5/7ffc482dc628c43d9c7a1b19392e1a920ccfd1da8d2e07d7dcc79c3e3bd2/ckzg-2.1.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8bbdf89f9327e442415a810beca692729c35664e154a6830296124a5c6f05470", size = 176061, upload-time = "2026-03-11T14:10:42.649Z" }, + { url = "https://files.pythonhosted.org/packages/26/56/f79ee2a177b4522fe47709e9f7e48407cd54a63c3d7bc1ca3002c705b3a7/ckzg-2.1.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:716c2dde0a91c0095797b843f78a6425e20a3d8945ecb4f90550b5c681b6be05", size = 173746, upload-time = "2026-03-11T14:10:43.657Z" }, + { url = "https://files.pythonhosted.org/packages/b9/a7/95b160707b22161817245de8b9e44ea143b9a2083b0c625e5e5cd4a2e20a/ckzg-2.1.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:2a9f1a05ed44512b80581e47918b1f4546974e8e924ee0e8de84ab32de197326", size = 188923, upload-time = "2026-03-11T14:10:44.635Z" }, + { url = "https://files.pythonhosted.org/packages/33/d4/ecfbecf763d42606dba8ab9d7de557d01816afad1e2f3cb1cc7efd6fc254/ckzg-2.1.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:42005c188e37c2f65d44f3a2585e89de18e0e229bc667a600d8716808ea2c33b", size = 183607, upload-time = "2026-03-11T14:10:45.846Z" }, + { url = "https://files.pythonhosted.org/packages/4a/72/becb801d8f1224de265f299790f5b2c95e71546ab7ab24a1fd3ebb99519e/ckzg-2.1.7-cp314-cp314-win_amd64.whl", hash = "sha256:14fbc642b1e81893df76a1636fddc169173da5dcdb55fc08a030658cd186150e", size = 102517, upload-time = "2026-03-11T14:10:47.079Z" }, + { url = "https://files.pythonhosted.org/packages/a8/6c/b310f05a6a27baaa53915b43483cc061080e3245c7facaa3c5b3a3cd7c5e/ckzg-2.1.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:da1a07e25ecaeb341ad4caf583fdec12c6af1ef3642289bb7dfcad2ca1b73dd3", size = 96609, upload-time = "2026-03-11T14:10:48.019Z" }, + { url = "https://files.pythonhosted.org/packages/0d/96/e1ccbf3f90595d50aa98a8a9c3c1327e6be0575ddbf8292b26b0cfa69b06/ckzg-2.1.7-cp314-cp314t-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:c657892f93eb70e3295b4f385e25380644c40f8bfebfcd55659f5017257c5b8c", size = 183315, upload-time = "2026-03-11T14:10:49.224Z" }, + { url = "https://files.pythonhosted.org/packages/bc/94/2c7ff1983f82756b29011ad612bc0e1d8f4a1989073c94fd66868bc296d3/ckzg-2.1.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:03af4cf053be82c22a893c8ef971d17687182dd2e75bcc2fab320bc27a62b7cb", size = 169457, upload-time = "2026-03-11T14:10:50.601Z" }, + { url = "https://files.pythonhosted.org/packages/98/cd/8c7247181843185ff5e34ebd400594e0fbe2d81e03324f124834f377ea74/ckzg-2.1.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6ecd9c44427a0035a8a9cb3dc18b4b3c72347f7be7c9f6866b8eddd6598bf0a9", size = 178841, upload-time = "2026-03-11T14:10:51.598Z" }, + { url = "https://files.pythonhosted.org/packages/da/cb/cf2ed4cf461bd2891792317615075745053e2585d8a2cf26a8414ad01983/ckzg-2.1.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:16e313e6029e88a564724217dd8eddd6226fbf0a0c07bf65a210bf3512c7b8ad", size = 176489, upload-time = "2026-03-11T14:10:52.905Z" }, + { url = "https://files.pythonhosted.org/packages/50/65/8b7d9cf8883f0df1a15cb20ecec99dfc02fc7bf05bf53509bb270e3a1db0/ckzg-2.1.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:8461ec7d69ccb450d4a4d031494a86dc6c15ad54b671967d4a8bdcd8158155b2", size = 191690, upload-time = "2026-03-11T14:10:53.855Z" }, + { url = "https://files.pythonhosted.org/packages/83/56/a1fba1b4a2f90d5fc48d3e62f59f0791c90e85b6ebb600ffeee81ea9cfa6/ckzg-2.1.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:53f420a3fa55a92265e23394caa2aac5b0e1e63ee6489d414cafeb0accde9a9e", size = 186204, upload-time = "2026-03-11T14:10:54.821Z" }, + { url = "https://files.pythonhosted.org/packages/c7/a9/a3284a64216f31a886ff216621c6b3806ca7ad7388908f68fcab9007c881/ckzg-2.1.7-cp314-cp314t-win_amd64.whl", hash = "sha256:2cdcc023d842900564d6070e397cab0d04fd393e6af07d60bdd1c97dc3ff09fd", size = 102660, upload-time = "2026-03-11T14:10:55.974Z" }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] [[package]] name = "coverage" version = "7.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/8b/adeb62ea8951f13c4c7fef2e7a85e1a06b499c8d8237ea589d496029e53f/coverage-7.15.0.tar.gz", hash = "sha256:9ac3fe7a1435986463eaa8ee253ae2f2a268709ba4ae5c7dd1f52a05391ad78f", size = 925362 } +sdist = { url = "https://files.pythonhosted.org/packages/cc/8b/adeb62ea8951f13c4c7fef2e7a85e1a06b499c8d8237ea589d496029e53f/coverage-7.15.0.tar.gz", hash = "sha256:9ac3fe7a1435986463eaa8ee253ae2f2a268709ba4ae5c7dd1f52a05391ad78f", size = 925362, upload-time = "2026-07-02T13:10:50.535Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/97/c52dc440c390b6cfa87be9432b141a956e2d56d9b9f5fc8bd71c5f471722/coverage-7.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50913d4bf5ddafa6ca3693da5e4dd833dd1b772e0283c99ca7f7d287db67331a", size = 220539 }, - { url = "https://files.pythonhosted.org/packages/3f/26/602de8c2aec7e2e3e99ebfb8e04ba65598f746275396eea5f6794ff4673f/coverage-7.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:359e141ccd33893ce3f1ad5525f8b96083003677c82182e5907d62d4ea5799fc", size = 221058 }, - { url = "https://files.pythonhosted.org/packages/fc/13/ebab0743138891c1d646d61e247ec29639afcbb6c4e1905e6a0f0c75291a/coverage-7.15.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3200b6204935f928c64b2ca1f923ab8c1acb7c9de45ec61569711b34d25cccaf", size = 247797 }, - { url = "https://files.pythonhosted.org/packages/d3/b7/b6ffb9e042aa48dc4144a8a65529affaec8dca0685309353614a2a7386ad/coverage-7.15.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:be616bf61346883b2cfdc5178669647e03531d81ab761a7e378558b7e8bcb628", size = 249626 }, - { url = "https://files.pythonhosted.org/packages/9c/06/243ff05b652333d8e3d060c11223efc2723b19cacf6605e433fa686ab5d4/coverage-7.15.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc7bafc3fe1059463a8fdd97ca79972d6e2bf819d775c7d54991b5b1971201d6", size = 251493 }, - { url = "https://files.pythonhosted.org/packages/d3/2b/867faa17030a806114dae388b32a3fa929d8cd4bf39226fbc11f6e6bb705/coverage-7.15.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b713aa7fcf325a01d4184d848acb46fd84f78fdb0978470c636b23a06a753d91", size = 253406 }, - { url = "https://files.pythonhosted.org/packages/94/c0/d789ce18f6605afc4895db75723424be2ef494282f77f61d8e5832923183/coverage-7.15.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e38e6fba2d56652fdfaf0231f8f78aeb805234a912de25dc291ee5cce5b8faa4", size = 248512 }, - { url = "https://files.pythonhosted.org/packages/c9/b6/b2673c30739f4a2e06649a0a38ad8b093c4d865462dc7bab0e9524a2c3b1/coverage-7.15.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:884499f42e382675be80770391983b90e0c0c774d87dbeeebf5f991cf6612b20", size = 249532 }, - { url = "https://files.pythonhosted.org/packages/3c/2e/acd79e9a41beabee92b623afe4f30b549916f48566271475f2907e752828/coverage-7.15.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:840481b12e083dbcbafab14794a8781a958edf327c8d3d70b4eee42f9b8253aa", size = 247537 }, - { url = "https://files.pythonhosted.org/packages/12/d4/2d301c4d1b3238d7c88b70ab9d13fd53ed9505662a7ff1b46ba1e2e4e3c3/coverage-7.15.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:276646e9481703d09f854f3b2f018f24e19fd7049ae670a92570043eb97203b1", size = 251348 }, - { url = "https://files.pythonhosted.org/packages/35/bb/c67708b2bc00f32e12805ec23d5fa677a0a51652f449341a89f9d6b1b715/coverage-7.15.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4de4b4d3f5545aa6c60dc4efd9c63b5b5dcc3bf00fe83146b2bdfffb8f6613bd", size = 247806 }, - { url = "https://files.pythonhosted.org/packages/eb/6c/57c4f653c47a6e917748f8938e389e72fbcae44e3643cd906664f0477a13/coverage-7.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5c504097b2a89b1e85bc6070d920df77daec701337e3aeef2c17775a5dd0ca90", size = 248410 }, - { url = "https://files.pythonhosted.org/packages/6c/94/bb083041aef828903668f134273f319f2bd49224962875359c52faa5497f/coverage-7.15.0-cp310-cp310-win32.whl", hash = "sha256:f6e80ed91f98316e86b9c137206b04b2bcfbffccbdff49bd2eb09dddb1cf14e0", size = 222588 }, - { url = "https://files.pythonhosted.org/packages/ef/94/a09d8ee618956f626741b0734854bac4425a00e10c0565f5abca64e7e751/coverage-7.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:b3b3e22030f3f6f5e01a5ce69936552a5c0f6992b7698777377b99041961031f", size = 223214 }, - { url = "https://files.pythonhosted.org/packages/ae/23/82e910835ef4b8391047025e1d53aa48d66029f444eb8b25373c849bf503/coverage-7.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:003fff99412ea848c0aaebcc78ed2b6ce7d8a1227ed17e68470672770b78a02a", size = 220662 }, - { url = "https://files.pythonhosted.org/packages/6d/0d/c7b213dde2f1579de5231062b386d8413f79c11667eb58c39319b25991da/coverage-7.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5cbd804bf2784ce7b45114516050f346ecd50f960c4bb630a7ee9e1d78fa2118", size = 221168 }, - { url = "https://files.pythonhosted.org/packages/33/77/d000aeedfac085088337b3c7becdad328474b1f8a9e4c9368a0c99605d68/coverage-7.15.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8773e15c23305b58882a4611fb9b2755977eae0dc2e515366a1b6c98866cc4c2", size = 251587 }, - { url = "https://files.pythonhosted.org/packages/cc/e0/86787c56b9df17afd370d5e293515dd4d9a107a561d13054873eefad8ecc/coverage-7.15.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f50e40081494c1dc4239ebb202014cbcc3306ea96fb6302a34c8cc0967fc5ae8", size = 253497 }, - { url = "https://files.pythonhosted.org/packages/3f/02/181bc917359299c07dead6270f94e411151c8b60cec905c33499da69afe6/coverage-7.15.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:daf96f37f5fc3a7b6c6da862eb4aee61c426bd63da236ed4a73ef0e503b4bca5", size = 255607 }, - { url = "https://files.pythonhosted.org/packages/b9/35/ca5e7427699913da6788c4f910e73ab16c5f4b59ec5d3a999dce2a45112f/coverage-7.15.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:51aa20f6ae2788fd197747766edf4cd8234fd9423309b934257fa6b21a592723", size = 257563 }, - { url = "https://files.pythonhosted.org/packages/0b/4d/b8220bacc2fc3c4e9078e27c32e99fb411479a4718a72bdd00036a9891c8/coverage-7.15.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03d1f922757662eb7af586e77834792274cff776bc7b1d1a0b66a49ea9d84735", size = 251726 }, - { url = "https://files.pythonhosted.org/packages/c4/e4/2e145da1991d72189b9c3cf7eca05c716ee7080d099aaea6757cfc7df008/coverage-7.15.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a6d6acc9a7666245e6133dd15144ca038a85a9cd5026bb06d6bbae9e77440dc9", size = 253301 }, - { url = "https://files.pythonhosted.org/packages/72/28/d2c841d698bf762e481f08bd4839d370246b6d9b61dab085a7b20b201a08/coverage-7.15.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1ac2c4c27c7df851dc9a017c2d7de00b69147e84ba3d96f37a530b0b6fb51035", size = 251361 }, - { url = "https://files.pythonhosted.org/packages/9d/ed/55d9ffde994fba3897c0c783f77a7d053b0c18787f6892ed5b0aed73f469/coverage-7.15.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b761a1d504fd4bd1f20f418753964dca9f5862a511fc854dac58296b3b223671", size = 255129 }, - { url = "https://files.pythonhosted.org/packages/1d/c0/ecbf33b8c460ea2718aeb813e2df8140d0370e5f67261c31524ceb0a2a8d/coverage-7.15.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:e43b045e11c16e897895758ae90e4a90cf99e93d58549e2f90c0e2272e155695", size = 251081 }, - { url = "https://files.pythonhosted.org/packages/a9/de/fb87b4261f54448dd2b9504ef19a58be42cef0d9520595fbfe1219b15234/coverage-7.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:589b54513e901739f4b4582c705ce96b80c96f57641b1464607e2367a270e540", size = 251988 }, - { url = "https://files.pythonhosted.org/packages/df/27/3494d5f291b9a4cb868f73c11221a8bd2d5bd761a8f9acea61ff57128dd1/coverage-7.15.0-cp311-cp311-win32.whl", hash = "sha256:106781b8482749162d0b47056937ba0933508e5d9447f65a5e7d5c422f0d6bb4", size = 222754 }, - { url = "https://files.pythonhosted.org/packages/2a/ee/cd4847ebc9be6a9c0123d763645a6f1f3be6b8c58c962706368b79cbac07/coverage-7.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:821e92b3631d762a339695824cadbbc73020354eba2a23a551a99ad34938fbe6", size = 223225 }, - { url = "https://files.pythonhosted.org/packages/57/37/5011581aa7f2be498b97dcc7c9902192442a42f4f9a748aeadb3d6506b42/coverage-7.15.0-cp311-cp311-win_arm64.whl", hash = "sha256:309990eb5fb8014b9f67cb211f7fd41876ec8a88a88d3ae76de0ed1d611e3640", size = 222774 }, - { url = "https://files.pythonhosted.org/packages/2a/74/fd4c0901137c4f8d81a76ada99e43c65163b4c94a02ece107a4ec0c6b615/coverage-7.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b75ee5e8cb7575636ac598719b4307ac529ec8fcd79608a35c3cd4d4dada812d", size = 220838 }, - { url = "https://files.pythonhosted.org/packages/0f/2e/2347583467bd7f0402635101a916961915cc68fce652cd0db5f173ea04fc/coverage-7.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffb31267816b93b075302248cc1737506081b4f163df4401e9df1a6424aafabe", size = 221197 }, - { url = "https://files.pythonhosted.org/packages/f0/17/99fa688541ae1d6e84543a0e544f83de0c944815b63e9e7b1ed411d15036/coverage-7.15.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e4d0bb73455bf97ab243a8f12c37c686ccf1c13bb614b7b85f1d062f06f42b2c", size = 252705 }, - { url = "https://files.pythonhosted.org/packages/fb/02/6a95a5cd83b74839017ef9cf48d2d8c9ae60af919e17a3f336e6f9f1b7bd/coverage-7.15.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:20d9ccc4ebd0edc434d86dfd2a1dd2a8efa6b6b3073d0485a394fee86459ebb4", size = 255441 }, - { url = "https://files.pythonhosted.org/packages/67/f2/406f6c57d600f68185942422c4c00f1a3255d60aee6e5fd961425cd9987e/coverage-7.15.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:20c8a976c365c8cb12f0cbd099508772ea41fb5fa80657a8506df0e11bd278c5", size = 256556 }, - { url = "https://files.pythonhosted.org/packages/74/8e/d3fa48489c15ecdec1ba48fd61f68798555dddd2f6716f9ad42adeb1a2a9/coverage-7.15.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f948fd5ba1b9cbca91f0ae08b4c1ce2b139509149a435e2585d056d57d70bf01", size = 258815 }, - { url = "https://files.pythonhosted.org/packages/47/2e/2d40ddd110462c6a2769677cf7f1c119a52b45f568978fc6c98e4cc0dd0f/coverage-7.15.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f58185f06edf6ad68ec9fb155d63ef650c82f3fbd7e1770e2867751fb13158f4", size = 253117 }, - { url = "https://files.pythonhosted.org/packages/51/c0/310782f0d7c3cb2b5ac05ba8d205fe91f24a36f6bf3256098f1782181c38/coverage-7.15.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02adc79a920c73c647c5d117f55747df7f2de94571884758ce8bc58e04f0a796", size = 254475 }, - { url = "https://files.pythonhosted.org/packages/86/f7/702da6c275f8ae6ade423d2877243122932c9b27f5403003b9ef8c927d12/coverage-7.15.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6eb7c300fbed667fd6e3588eba71c1904cdb06110ca6fdf908c26bdd88b8e382", size = 252619 }, - { url = "https://files.pythonhosted.org/packages/fb/84/c5b15a7e5ecba4e56218d772d99fe80a63e63f8d11f12783723a6005ab45/coverage-7.15.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b5fb23fa2de9dce1f5c36c09066d8fcda16cd96e8e26686caa2d7cb9b567d65c", size = 256689 }, - { url = "https://files.pythonhosted.org/packages/95/2f/c8b07559b57701230c61b23a953858c052890c12ef568d81780c6c46e92e/coverage-7.15.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:cec79341dbe6281484024979976d0c7f22beae08b4a254655decd25d42cbe766", size = 252189 }, - { url = "https://files.pythonhosted.org/packages/6b/80/6d2f049dd3fd3dbfd60b62ba6b2162a04009e2c002ce70b24cf3878dec7a/coverage-7.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6c664c5444b1d970b1b2a450e21fb19ee5c9cfdf151ded2dda37260031cca0da", size = 254059 }, - { url = "https://files.pythonhosted.org/packages/ce/92/b0287a2c42031d25c628f815f89a3cd9f8268ee78bb1252c9356cda1c689/coverage-7.15.0-cp312-cp312-win32.whl", hash = "sha256:5f764a3fa339bde6b3aa97657f5a6a3a9451e4a5b4ea98a2892c773a43525f77", size = 222893 }, - { url = "https://files.pythonhosted.org/packages/a9/69/e34c481915fecb499b3146975061dac528752e37706edc1804f32c822469/coverage-7.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:52f9a4d2c4c56c8848bc2f524916698354b0211488b38c49ad9ae54f6cafbff6", size = 223429 }, - { url = "https://files.pythonhosted.org/packages/fe/98/6e878f0b571d32684ef3f38d7c03db241ca5b82a5da8a5391596a8f209c4/coverage-7.15.0-cp312-cp312-win_arm64.whl", hash = "sha256:31e5c3e70c85307ea35a12964e2e40f56ca2ee4b1c8c721ccf4609d17071080b", size = 222810 }, - { url = "https://files.pythonhosted.org/packages/76/04/145a3748098bcc86b631a85408d2c3dc5c104e0bd86d605468239b25b6c4/coverage-7.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5be4caf3b28836f078abe700f8944dac4a65d78f16d6c600c89cb624e5535782", size = 220863 }, - { url = "https://files.pythonhosted.org/packages/a4/5c/4ed55708fed2c64b63c9bc5715daef670872202101938869b7fe5d5fbb8f/coverage-7.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dd58ad1404704303ca8d4f4b8a1095e7cbc7040ef17a66df1e6619aa10176430", size = 221230 }, - { url = "https://files.pythonhosted.org/packages/7b/19/3a80b97d3b2a5c77a01ae359c6bed20c13738fe3d9380f08616d4fec0281/coverage-7.15.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bbcbb317c2e5ded5b21104af81c29f391be2af98d065693ffbe8d23949b948e5", size = 252227 }, - { url = "https://files.pythonhosted.org/packages/a1/fa/b70062750686bd7da454da27927622f48bbac6990ac7a4c4a4653e7b0036/coverage-7.15.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:27f31ecb458da3f859aab3f15ada871eb7a7768807d88df4a9f186bb17737970", size = 254823 }, - { url = "https://files.pythonhosted.org/packages/a9/09/dad6a75a2e561b9dc5086a8c5257a7591d584246f67e23e70d2995b89ab6/coverage-7.15.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13fb759be317fdc62e0f56bffdf61cfcb45c7761ad6b71e3e583e71a67ae753c", size = 256059 }, - { url = "https://files.pythonhosted.org/packages/e6/e7/b5d2941fa9564573d44b693a871ff3156f0c42cbefe977a09fa7fdc59971/coverage-7.15.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d5cf007add5ab4bb8fa9f4c77e3732127c9e6cad501d7db43355fbfafca0be84", size = 258190 }, - { url = "https://files.pythonhosted.org/packages/7c/1d/8e895bcde3c57ccd46d896dda5f2b3d5df761a1b0c6c9d450d175dedc632/coverage-7.15.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cc78d9843bd576fbe2118248258d485e968dc535f95ed504a7b0867ba9b51389", size = 252456 }, - { url = "https://files.pythonhosted.org/packages/14/4c/f6997da343ddeb959be82c3b05322793f92c071ad45f7cb8a96336e2dd5f/coverage-7.15.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a263060f1de0b4b74b4e089c2a70b8003b3781c733329a9c8fd54995328f9950", size = 254192 }, - { url = "https://files.pythonhosted.org/packages/17/27/a0bc09d032267b9da89d95a2d874cfbef2a5aebbf0e87cf7aba221d79a99/coverage-7.15.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c48decf16e0dfd5b049c7d5e82200c23c08126719142998d4f172444e3d0529e", size = 252153 }, - { url = "https://files.pythonhosted.org/packages/54/c0/77fc233d9fba07b244c40948c53fe27308b8f21732fb3417f87fbd6fd992/coverage-7.15.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:08fb028000ed0aaa0a4cbdfbb98be7cb42f370db973fbbb469733505ab20e13e", size = 256310 }, - { url = "https://files.pythonhosted.org/packages/d5/24/601cecfb5825becacb8d45219a018a3b55b9dbaec624efdb0ea249d08be2/coverage-7.15.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb7dc0c3b7d8a1077abea0b8546ebc5e26d6ef6ecefc2f0f5ad2b8a53bdad837", size = 251974 }, - { url = "https://files.pythonhosted.org/packages/47/1e/6f45e5a5b3d5484318d368702af6716b5ab8913b0428bec981a562fcf296/coverage-7.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6cb3602054ccbe9f0d8c2dc04bbeba90d5719236e2cd06e042ddd6d3fc7b6e37", size = 253745 }, - { url = "https://files.pythonhosted.org/packages/8e/db/4df027a77bd11d0e527f44c53557c76e54ad027413d0304252ea3a78d67e/coverage-7.15.0-cp313-cp313-win32.whl", hash = "sha256:0bf781da64326b677be344df505171435b6f58716108606621d5d27d964fff8b", size = 222902 }, - { url = "https://files.pythonhosted.org/packages/a0/10/0355894d34e231f2c5449e71287e81a50793a325df2e2b027b7bcd9dfd19/coverage-7.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:2c57a275078ee3fa185f83e400f765bc764a549de66d99b47881645cbd4ea629", size = 223444 }, - { url = "https://files.pythonhosted.org/packages/06/ef/bb725f263befaaff851203ab338e68af15e195d7f7b5f323162532d9b6a8/coverage-7.15.0-cp313-cp313-win_arm64.whl", hash = "sha256:3812c61afc6685c7999b39320779ab8f43b7a3081fdb0def39976e56fbdb9a21", size = 222839 }, - { url = "https://files.pythonhosted.org/packages/52/30/21b2ad45959cd50e909e02ebac1e30b4ceb7162e91c11d4c570223a458b7/coverage-7.15.0-py3-none-any.whl", hash = "sha256:56da6a4cbe8f7e9e80bd072ca9cefe67d7106a440a7ec06519ec6507ac94ad19", size = 212632 }, + { url = "https://files.pythonhosted.org/packages/2a/97/c52dc440c390b6cfa87be9432b141a956e2d56d9b9f5fc8bd71c5f471722/coverage-7.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:50913d4bf5ddafa6ca3693da5e4dd833dd1b772e0283c99ca7f7d287db67331a", size = 220539, upload-time = "2026-07-02T13:08:19.252Z" }, + { url = "https://files.pythonhosted.org/packages/3f/26/602de8c2aec7e2e3e99ebfb8e04ba65598f746275396eea5f6794ff4673f/coverage-7.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:359e141ccd33893ce3f1ad5525f8b96083003677c82182e5907d62d4ea5799fc", size = 221058, upload-time = "2026-07-02T13:08:21.013Z" }, + { url = "https://files.pythonhosted.org/packages/fc/13/ebab0743138891c1d646d61e247ec29639afcbb6c4e1905e6a0f0c75291a/coverage-7.15.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3200b6204935f928c64b2ca1f923ab8c1acb7c9de45ec61569711b34d25cccaf", size = 247797, upload-time = "2026-07-02T13:08:22.474Z" }, + { url = "https://files.pythonhosted.org/packages/d3/b7/b6ffb9e042aa48dc4144a8a65529affaec8dca0685309353614a2a7386ad/coverage-7.15.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:be616bf61346883b2cfdc5178669647e03531d81ab761a7e378558b7e8bcb628", size = 249626, upload-time = "2026-07-02T13:08:23.803Z" }, + { url = "https://files.pythonhosted.org/packages/9c/06/243ff05b652333d8e3d060c11223efc2723b19cacf6605e433fa686ab5d4/coverage-7.15.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc7bafc3fe1059463a8fdd97ca79972d6e2bf819d775c7d54991b5b1971201d6", size = 251493, upload-time = "2026-07-02T13:08:25.397Z" }, + { url = "https://files.pythonhosted.org/packages/d3/2b/867faa17030a806114dae388b32a3fa929d8cd4bf39226fbc11f6e6bb705/coverage-7.15.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b713aa7fcf325a01d4184d848acb46fd84f78fdb0978470c636b23a06a753d91", size = 253406, upload-time = "2026-07-02T13:08:26.842Z" }, + { url = "https://files.pythonhosted.org/packages/94/c0/d789ce18f6605afc4895db75723424be2ef494282f77f61d8e5832923183/coverage-7.15.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e38e6fba2d56652fdfaf0231f8f78aeb805234a912de25dc291ee5cce5b8faa4", size = 248512, upload-time = "2026-07-02T13:08:28.398Z" }, + { url = "https://files.pythonhosted.org/packages/c9/b6/b2673c30739f4a2e06649a0a38ad8b093c4d865462dc7bab0e9524a2c3b1/coverage-7.15.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:884499f42e382675be80770391983b90e0c0c774d87dbeeebf5f991cf6612b20", size = 249532, upload-time = "2026-07-02T13:08:29.731Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/acd79e9a41beabee92b623afe4f30b549916f48566271475f2907e752828/coverage-7.15.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:840481b12e083dbcbafab14794a8781a958edf327c8d3d70b4eee42f9b8253aa", size = 247537, upload-time = "2026-07-02T13:08:31.173Z" }, + { url = "https://files.pythonhosted.org/packages/12/d4/2d301c4d1b3238d7c88b70ab9d13fd53ed9505662a7ff1b46ba1e2e4e3c3/coverage-7.15.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:276646e9481703d09f854f3b2f018f24e19fd7049ae670a92570043eb97203b1", size = 251348, upload-time = "2026-07-02T13:08:32.63Z" }, + { url = "https://files.pythonhosted.org/packages/35/bb/c67708b2bc00f32e12805ec23d5fa677a0a51652f449341a89f9d6b1b715/coverage-7.15.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4de4b4d3f5545aa6c60dc4efd9c63b5b5dcc3bf00fe83146b2bdfffb8f6613bd", size = 247806, upload-time = "2026-07-02T13:08:33.931Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6c/57c4f653c47a6e917748f8938e389e72fbcae44e3643cd906664f0477a13/coverage-7.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5c504097b2a89b1e85bc6070d920df77daec701337e3aeef2c17775a5dd0ca90", size = 248410, upload-time = "2026-07-02T13:08:35.189Z" }, + { url = "https://files.pythonhosted.org/packages/6c/94/bb083041aef828903668f134273f319f2bd49224962875359c52faa5497f/coverage-7.15.0-cp310-cp310-win32.whl", hash = "sha256:f6e80ed91f98316e86b9c137206b04b2bcfbffccbdff49bd2eb09dddb1cf14e0", size = 222588, upload-time = "2026-07-02T13:08:36.486Z" }, + { url = "https://files.pythonhosted.org/packages/ef/94/a09d8ee618956f626741b0734854bac4425a00e10c0565f5abca64e7e751/coverage-7.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:b3b3e22030f3f6f5e01a5ce69936552a5c0f6992b7698777377b99041961031f", size = 223214, upload-time = "2026-07-02T13:08:37.885Z" }, + { url = "https://files.pythonhosted.org/packages/ae/23/82e910835ef4b8391047025e1d53aa48d66029f444eb8b25373c849bf503/coverage-7.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:003fff99412ea848c0aaebcc78ed2b6ce7d8a1227ed17e68470672770b78a02a", size = 220662, upload-time = "2026-07-02T13:08:39.205Z" }, + { url = "https://files.pythonhosted.org/packages/6d/0d/c7b213dde2f1579de5231062b386d8413f79c11667eb58c39319b25991da/coverage-7.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5cbd804bf2784ce7b45114516050f346ecd50f960c4bb630a7ee9e1d78fa2118", size = 221168, upload-time = "2026-07-02T13:08:40.471Z" }, + { url = "https://files.pythonhosted.org/packages/33/77/d000aeedfac085088337b3c7becdad328474b1f8a9e4c9368a0c99605d68/coverage-7.15.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8773e15c23305b58882a4611fb9b2755977eae0dc2e515366a1b6c98866cc4c2", size = 251587, upload-time = "2026-07-02T13:08:42.033Z" }, + { url = "https://files.pythonhosted.org/packages/cc/e0/86787c56b9df17afd370d5e293515dd4d9a107a561d13054873eefad8ecc/coverage-7.15.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f50e40081494c1dc4239ebb202014cbcc3306ea96fb6302a34c8cc0967fc5ae8", size = 253497, upload-time = "2026-07-02T13:08:43.387Z" }, + { url = "https://files.pythonhosted.org/packages/3f/02/181bc917359299c07dead6270f94e411151c8b60cec905c33499da69afe6/coverage-7.15.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:daf96f37f5fc3a7b6c6da862eb4aee61c426bd63da236ed4a73ef0e503b4bca5", size = 255607, upload-time = "2026-07-02T13:08:44.897Z" }, + { url = "https://files.pythonhosted.org/packages/b9/35/ca5e7427699913da6788c4f910e73ab16c5f4b59ec5d3a999dce2a45112f/coverage-7.15.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:51aa20f6ae2788fd197747766edf4cd8234fd9423309b934257fa6b21a592723", size = 257563, upload-time = "2026-07-02T13:08:46.334Z" }, + { url = "https://files.pythonhosted.org/packages/0b/4d/b8220bacc2fc3c4e9078e27c32e99fb411479a4718a72bdd00036a9891c8/coverage-7.15.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03d1f922757662eb7af586e77834792274cff776bc7b1d1a0b66a49ea9d84735", size = 251726, upload-time = "2026-07-02T13:08:47.941Z" }, + { url = "https://files.pythonhosted.org/packages/c4/e4/2e145da1991d72189b9c3cf7eca05c716ee7080d099aaea6757cfc7df008/coverage-7.15.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a6d6acc9a7666245e6133dd15144ca038a85a9cd5026bb06d6bbae9e77440dc9", size = 253301, upload-time = "2026-07-02T13:08:49.5Z" }, + { url = "https://files.pythonhosted.org/packages/72/28/d2c841d698bf762e481f08bd4839d370246b6d9b61dab085a7b20b201a08/coverage-7.15.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1ac2c4c27c7df851dc9a017c2d7de00b69147e84ba3d96f37a530b0b6fb51035", size = 251361, upload-time = "2026-07-02T13:08:51.304Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ed/55d9ffde994fba3897c0c783f77a7d053b0c18787f6892ed5b0aed73f469/coverage-7.15.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b761a1d504fd4bd1f20f418753964dca9f5862a511fc854dac58296b3b223671", size = 255129, upload-time = "2026-07-02T13:08:52.661Z" }, + { url = "https://files.pythonhosted.org/packages/1d/c0/ecbf33b8c460ea2718aeb813e2df8140d0370e5f67261c31524ceb0a2a8d/coverage-7.15.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:e43b045e11c16e897895758ae90e4a90cf99e93d58549e2f90c0e2272e155695", size = 251081, upload-time = "2026-07-02T13:08:54.188Z" }, + { url = "https://files.pythonhosted.org/packages/a9/de/fb87b4261f54448dd2b9504ef19a58be42cef0d9520595fbfe1219b15234/coverage-7.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:589b54513e901739f4b4582c705ce96b80c96f57641b1464607e2367a270e540", size = 251988, upload-time = "2026-07-02T13:08:55.726Z" }, + { url = "https://files.pythonhosted.org/packages/df/27/3494d5f291b9a4cb868f73c11221a8bd2d5bd761a8f9acea61ff57128dd1/coverage-7.15.0-cp311-cp311-win32.whl", hash = "sha256:106781b8482749162d0b47056937ba0933508e5d9447f65a5e7d5c422f0d6bb4", size = 222754, upload-time = "2026-07-02T13:08:57.091Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ee/cd4847ebc9be6a9c0123d763645a6f1f3be6b8c58c962706368b79cbac07/coverage-7.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:821e92b3631d762a339695824cadbbc73020354eba2a23a551a99ad34938fbe6", size = 223225, upload-time = "2026-07-02T13:08:58.594Z" }, + { url = "https://files.pythonhosted.org/packages/57/37/5011581aa7f2be498b97dcc7c9902192442a42f4f9a748aeadb3d6506b42/coverage-7.15.0-cp311-cp311-win_arm64.whl", hash = "sha256:309990eb5fb8014b9f67cb211f7fd41876ec8a88a88d3ae76de0ed1d611e3640", size = 222774, upload-time = "2026-07-02T13:09:00.074Z" }, + { url = "https://files.pythonhosted.org/packages/2a/74/fd4c0901137c4f8d81a76ada99e43c65163b4c94a02ece107a4ec0c6b615/coverage-7.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b75ee5e8cb7575636ac598719b4307ac529ec8fcd79608a35c3cd4d4dada812d", size = 220838, upload-time = "2026-07-02T13:09:02.084Z" }, + { url = "https://files.pythonhosted.org/packages/0f/2e/2347583467bd7f0402635101a916961915cc68fce652cd0db5f173ea04fc/coverage-7.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffb31267816b93b075302248cc1737506081b4f163df4401e9df1a6424aafabe", size = 221197, upload-time = "2026-07-02T13:09:03.617Z" }, + { url = "https://files.pythonhosted.org/packages/f0/17/99fa688541ae1d6e84543a0e544f83de0c944815b63e9e7b1ed411d15036/coverage-7.15.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e4d0bb73455bf97ab243a8f12c37c686ccf1c13bb614b7b85f1d062f06f42b2c", size = 252705, upload-time = "2026-07-02T13:09:05.059Z" }, + { url = "https://files.pythonhosted.org/packages/fb/02/6a95a5cd83b74839017ef9cf48d2d8c9ae60af919e17a3f336e6f9f1b7bd/coverage-7.15.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:20d9ccc4ebd0edc434d86dfd2a1dd2a8efa6b6b3073d0485a394fee86459ebb4", size = 255441, upload-time = "2026-07-02T13:09:06.559Z" }, + { url = "https://files.pythonhosted.org/packages/67/f2/406f6c57d600f68185942422c4c00f1a3255d60aee6e5fd961425cd9987e/coverage-7.15.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:20c8a976c365c8cb12f0cbd099508772ea41fb5fa80657a8506df0e11bd278c5", size = 256556, upload-time = "2026-07-02T13:09:08.197Z" }, + { url = "https://files.pythonhosted.org/packages/74/8e/d3fa48489c15ecdec1ba48fd61f68798555dddd2f6716f9ad42adeb1a2a9/coverage-7.15.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f948fd5ba1b9cbca91f0ae08b4c1ce2b139509149a435e2585d056d57d70bf01", size = 258815, upload-time = "2026-07-02T13:09:09.691Z" }, + { url = "https://files.pythonhosted.org/packages/47/2e/2d40ddd110462c6a2769677cf7f1c119a52b45f568978fc6c98e4cc0dd0f/coverage-7.15.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f58185f06edf6ad68ec9fb155d63ef650c82f3fbd7e1770e2867751fb13158f4", size = 253117, upload-time = "2026-07-02T13:09:11.212Z" }, + { url = "https://files.pythonhosted.org/packages/51/c0/310782f0d7c3cb2b5ac05ba8d205fe91f24a36f6bf3256098f1782181c38/coverage-7.15.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02adc79a920c73c647c5d117f55747df7f2de94571884758ce8bc58e04f0a796", size = 254475, upload-time = "2026-07-02T13:09:13.029Z" }, + { url = "https://files.pythonhosted.org/packages/86/f7/702da6c275f8ae6ade423d2877243122932c9b27f5403003b9ef8c927d12/coverage-7.15.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6eb7c300fbed667fd6e3588eba71c1904cdb06110ca6fdf908c26bdd88b8e382", size = 252619, upload-time = "2026-07-02T13:09:14.699Z" }, + { url = "https://files.pythonhosted.org/packages/fb/84/c5b15a7e5ecba4e56218d772d99fe80a63e63f8d11f12783723a6005ab45/coverage-7.15.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b5fb23fa2de9dce1f5c36c09066d8fcda16cd96e8e26686caa2d7cb9b567d65c", size = 256689, upload-time = "2026-07-02T13:09:16.103Z" }, + { url = "https://files.pythonhosted.org/packages/95/2f/c8b07559b57701230c61b23a953858c052890c12ef568d81780c6c46e92e/coverage-7.15.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:cec79341dbe6281484024979976d0c7f22beae08b4a254655decd25d42cbe766", size = 252189, upload-time = "2026-07-02T13:09:17.828Z" }, + { url = "https://files.pythonhosted.org/packages/6b/80/6d2f049dd3fd3dbfd60b62ba6b2162a04009e2c002ce70b24cf3878dec7a/coverage-7.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6c664c5444b1d970b1b2a450e21fb19ee5c9cfdf151ded2dda37260031cca0da", size = 254059, upload-time = "2026-07-02T13:09:19.304Z" }, + { url = "https://files.pythonhosted.org/packages/ce/92/b0287a2c42031d25c628f815f89a3cd9f8268ee78bb1252c9356cda1c689/coverage-7.15.0-cp312-cp312-win32.whl", hash = "sha256:5f764a3fa339bde6b3aa97657f5a6a3a9451e4a5b4ea98a2892c773a43525f77", size = 222893, upload-time = "2026-07-02T13:09:20.812Z" }, + { url = "https://files.pythonhosted.org/packages/a9/69/e34c481915fecb499b3146975061dac528752e37706edc1804f32c822469/coverage-7.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:52f9a4d2c4c56c8848bc2f524916698354b0211488b38c49ad9ae54f6cafbff6", size = 223429, upload-time = "2026-07-02T13:09:22.315Z" }, + { url = "https://files.pythonhosted.org/packages/fe/98/6e878f0b571d32684ef3f38d7c03db241ca5b82a5da8a5391596a8f209c4/coverage-7.15.0-cp312-cp312-win_arm64.whl", hash = "sha256:31e5c3e70c85307ea35a12964e2e40f56ca2ee4b1c8c721ccf4609d17071080b", size = 222810, upload-time = "2026-07-02T13:09:23.812Z" }, + { url = "https://files.pythonhosted.org/packages/76/04/145a3748098bcc86b631a85408d2c3dc5c104e0bd86d605468239b25b6c4/coverage-7.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5be4caf3b28836f078abe700f8944dac4a65d78f16d6c600c89cb624e5535782", size = 220863, upload-time = "2026-07-02T13:09:25.371Z" }, + { url = "https://files.pythonhosted.org/packages/a4/5c/4ed55708fed2c64b63c9bc5715daef670872202101938869b7fe5d5fbb8f/coverage-7.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dd58ad1404704303ca8d4f4b8a1095e7cbc7040ef17a66df1e6619aa10176430", size = 221230, upload-time = "2026-07-02T13:09:26.897Z" }, + { url = "https://files.pythonhosted.org/packages/7b/19/3a80b97d3b2a5c77a01ae359c6bed20c13738fe3d9380f08616d4fec0281/coverage-7.15.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bbcbb317c2e5ded5b21104af81c29f391be2af98d065693ffbe8d23949b948e5", size = 252227, upload-time = "2026-07-02T13:09:28.543Z" }, + { url = "https://files.pythonhosted.org/packages/a1/fa/b70062750686bd7da454da27927622f48bbac6990ac7a4c4a4653e7b0036/coverage-7.15.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:27f31ecb458da3f859aab3f15ada871eb7a7768807d88df4a9f186bb17737970", size = 254823, upload-time = "2026-07-02T13:09:30.177Z" }, + { url = "https://files.pythonhosted.org/packages/a9/09/dad6a75a2e561b9dc5086a8c5257a7591d584246f67e23e70d2995b89ab6/coverage-7.15.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13fb759be317fdc62e0f56bffdf61cfcb45c7761ad6b71e3e583e71a67ae753c", size = 256059, upload-time = "2026-07-02T13:09:31.979Z" }, + { url = "https://files.pythonhosted.org/packages/e6/e7/b5d2941fa9564573d44b693a871ff3156f0c42cbefe977a09fa7fdc59971/coverage-7.15.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d5cf007add5ab4bb8fa9f4c77e3732127c9e6cad501d7db43355fbfafca0be84", size = 258190, upload-time = "2026-07-02T13:09:34.035Z" }, + { url = "https://files.pythonhosted.org/packages/7c/1d/8e895bcde3c57ccd46d896dda5f2b3d5df761a1b0c6c9d450d175dedc632/coverage-7.15.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cc78d9843bd576fbe2118248258d485e968dc535f95ed504a7b0867ba9b51389", size = 252456, upload-time = "2026-07-02T13:09:35.765Z" }, + { url = "https://files.pythonhosted.org/packages/14/4c/f6997da343ddeb959be82c3b05322793f92c071ad45f7cb8a96336e2dd5f/coverage-7.15.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a263060f1de0b4b74b4e089c2a70b8003b3781c733329a9c8fd54995328f9950", size = 254192, upload-time = "2026-07-02T13:09:37.445Z" }, + { url = "https://files.pythonhosted.org/packages/17/27/a0bc09d032267b9da89d95a2d874cfbef2a5aebbf0e87cf7aba221d79a99/coverage-7.15.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c48decf16e0dfd5b049c7d5e82200c23c08126719142998d4f172444e3d0529e", size = 252153, upload-time = "2026-07-02T13:09:39.422Z" }, + { url = "https://files.pythonhosted.org/packages/54/c0/77fc233d9fba07b244c40948c53fe27308b8f21732fb3417f87fbd6fd992/coverage-7.15.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:08fb028000ed0aaa0a4cbdfbb98be7cb42f370db973fbbb469733505ab20e13e", size = 256310, upload-time = "2026-07-02T13:09:41.006Z" }, + { url = "https://files.pythonhosted.org/packages/d5/24/601cecfb5825becacb8d45219a018a3b55b9dbaec624efdb0ea249d08be2/coverage-7.15.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb7dc0c3b7d8a1077abea0b8546ebc5e26d6ef6ecefc2f0f5ad2b8a53bdad837", size = 251974, upload-time = "2026-07-02T13:09:42.733Z" }, + { url = "https://files.pythonhosted.org/packages/47/1e/6f45e5a5b3d5484318d368702af6716b5ab8913b0428bec981a562fcf296/coverage-7.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6cb3602054ccbe9f0d8c2dc04bbeba90d5719236e2cd06e042ddd6d3fc7b6e37", size = 253745, upload-time = "2026-07-02T13:09:44.376Z" }, + { url = "https://files.pythonhosted.org/packages/8e/db/4df027a77bd11d0e527f44c53557c76e54ad027413d0304252ea3a78d67e/coverage-7.15.0-cp313-cp313-win32.whl", hash = "sha256:0bf781da64326b677be344df505171435b6f58716108606621d5d27d964fff8b", size = 222902, upload-time = "2026-07-02T13:09:46.122Z" }, + { url = "https://files.pythonhosted.org/packages/a0/10/0355894d34e231f2c5449e71287e81a50793a325df2e2b027b7bcd9dfd19/coverage-7.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:2c57a275078ee3fa185f83e400f765bc764a549de66d99b47881645cbd4ea629", size = 223444, upload-time = "2026-07-02T13:09:47.687Z" }, + { url = "https://files.pythonhosted.org/packages/06/ef/bb725f263befaaff851203ab338e68af15e195d7f7b5f323162532d9b6a8/coverage-7.15.0-cp313-cp313-win_arm64.whl", hash = "sha256:3812c61afc6685c7999b39320779ab8f43b7a3081fdb0def39976e56fbdb9a21", size = 222839, upload-time = "2026-07-02T13:09:49.717Z" }, + { url = "https://files.pythonhosted.org/packages/4f/9c/1e3ca54f72a3185ece06c58d871099898c48f0ed6430d17b6ab75f0d180a/coverage-7.15.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:41cb79af843222e11da87127ad0ecbfa878abadd0f770a4a99391a27d3887324", size = 220906, upload-time = "2026-07-02T13:09:51.339Z" }, + { url = "https://files.pythonhosted.org/packages/09/37/f718613d83b274880382f6b67e78f3802549ae39b0b3e65ae5b5974df56e/coverage-7.15.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7d2008989ef8fe54188d3f3bfa2e3099b025af11e90a6a1b9e7dc433d04263d8", size = 221239, upload-time = "2026-07-02T13:09:53.138Z" }, + { url = "https://files.pythonhosted.org/packages/a7/ce/22bae91e0b75445f68d365c7643ed0aa4880bbf77450ee74ca65bdae53a7/coverage-7.15.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:769e8ece11a596315ebf5aa7ec383aeeed016c091d2bf6363ffb996d41529092", size = 252286, upload-time = "2026-07-02T13:09:54.996Z" }, + { url = "https://files.pythonhosted.org/packages/dd/1e/bec5e32aa508615d9d7a2790effb25fb4dc28606e995816afe400b25ece3/coverage-7.15.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:65a6b6164ee5c39e2f3803f314292d6c61a607ba7fee253d1e03c42dc3903502", size = 254789, upload-time = "2026-07-02T13:09:56.678Z" }, + { url = "https://files.pythonhosted.org/packages/17/29/0e865435b4354e4a7c03b1b7920046d31d0a273d55decefea27e011cb9bf/coverage-7.15.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:75128817f95a5c45bb01d65fd2d8b9cb54bbe03d81608fb70e3e14b437ad56c2", size = 256135, upload-time = "2026-07-02T13:09:58.343Z" }, + { url = "https://files.pythonhosted.org/packages/84/ff/33a870b58a13325d62fc0a6c8f01fa0ff667cef60c7498e2382a147dfa18/coverage-7.15.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9887bb428fe2d4cd4bee89bac1a6c9932f484afd5b36fbd4ff6ea5f825bb1f5e", size = 258449, upload-time = "2026-07-02T13:10:00.057Z" }, + { url = "https://files.pythonhosted.org/packages/18/7b/6fffe596bf3ddba8462758d02c5dad730fd91055a6634aa2e4226229181a/coverage-7.15.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0bfc0be1f702042207a93a00523b1065ee1fe951e96edf311581c0bbc2e34888", size = 252313, upload-time = "2026-07-02T13:10:01.946Z" }, + { url = "https://files.pythonhosted.org/packages/58/1b/11468dd6c1676ab831a70cb9a8d4e198e8607fa0b7220ab918b73fe9bfbd/coverage-7.15.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f64627d55def5a43282d70e08396672692f77e4da610a5bb8bb4060b432b6859", size = 254142, upload-time = "2026-07-02T13:10:04.065Z" }, + { url = "https://files.pythonhosted.org/packages/79/41/29328e21d16b1b95092c30dd700e08cf915bd3734f836df8f3bdb0e8fa9f/coverage-7.15.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:2c6f0fa473003905c6d5bac328ee4eba9fbea654f15bc24b8a3274b23363fa99", size = 252108, upload-time = "2026-07-02T13:10:06.11Z" }, + { url = "https://files.pythonhosted.org/packages/9b/de/05ccfb990439655b35afbfd8e0d13fe66677565a7d4eb38c3f5ef2635e1c/coverage-7.15.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2bcf9afaf064172c6ec3c58a325a9957ad1178c05dd934e25f253321776e0676", size = 256385, upload-time = "2026-07-02T13:10:08.141Z" }, + { url = "https://files.pythonhosted.org/packages/51/0e/486828a3d2695ea7a2609f17ff572f6b01905e608379440a11da4b8dffbe/coverage-7.15.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:baf06bc987115d6fb938d403f7eab684a057766c490367999a2b71a6883110c6", size = 251923, upload-time = "2026-07-02T13:10:10.179Z" }, + { url = "https://files.pythonhosted.org/packages/18/c7/03582b6715f078e5e558354c87616d945b9894cda2dace8e4009b17035e4/coverage-7.15.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f0405f2ff97b1c4c0e782cb32e02f32369bcf2e6b618b591d67e1ea754575dfe", size = 253580, upload-time = "2026-07-02T13:10:12.052Z" }, + { url = "https://files.pythonhosted.org/packages/db/dc/9e578bbaf2ecb4959a81b7e7601ad8cca772cba2892e8d144cb749b4a71a/coverage-7.15.0-cp314-cp314-win32.whl", hash = "sha256:ab282853ed5fbd64bbb162f19cb8fcb7087187508a6374b4f9c34ec1577c4e8f", size = 223107, upload-time = "2026-07-02T13:10:13.994Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3e/c8c3b75d8dbe0e35f7b0cc3ff5e949fc59500f70b21d0398813f66740664/coverage-7.15.0-cp314-cp314-win_amd64.whl", hash = "sha256:3bb3040e9f4bbe26fcb0cd7cc85ac63e630d3f3a9c74f027abf4caa27e706663", size = 223597, upload-time = "2026-07-02T13:10:15.906Z" }, + { url = "https://files.pythonhosted.org/packages/cd/bc/3cbc9fb036eb388519bccd521f783499c39b64256013fbc362782f196fe1/coverage-7.15.0-cp314-cp314-win_arm64.whl", hash = "sha256:346771144d34f7fa84ec28386f78e0f31653f33cf35e19d253d5b35f9e8201da", size = 223020, upload-time = "2026-07-02T13:10:17.844Z" }, + { url = "https://files.pythonhosted.org/packages/28/00/199c4a8d656dff63102577a056c0fce2ff6a79e40adac092fc986c49cbf1/coverage-7.15.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d34a010905fb6401324ba016b5da03d574967f7b21ce48ea41e66f0f1f95f641", size = 221638, upload-time = "2026-07-02T13:10:19.703Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8e/9d0092c96a3d3a26951ecc7020826aa57bcb1b119ca81acbba996884ab13/coverage-7.15.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:bb25d825d885ca8036795dacfc3924d33091fc76d71ebc99420c6b79e77d96fa", size = 221903, upload-time = "2026-07-02T13:10:21.514Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b4/c0ca3028f42c9a08e51feb4561ef1192e5de99797cd1db5b04590c215bda/coverage-7.15.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:94c9686bfe8a9a6810297aecbd99beaa3445f9e8dc2f80b1382cca0d86b64461", size = 263267, upload-time = "2026-07-02T13:10:23.261Z" }, + { url = "https://files.pythonhosted.org/packages/5f/aa/a375e3846e5d3c013dc600b2a3231089055c73d77f5393dd2192a8d64da6/coverage-7.15.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9bd671c25f9d85f09d7ec481d0e43d5139f486c06a37139847a7ce569788af72", size = 265390, upload-time = "2026-07-02T13:10:25.152Z" }, + { url = "https://files.pythonhosted.org/packages/92/e1/5783cdabb797305e1c9e4809fea496d31834c51fa772514f73dc148bcfc9/coverage-7.15.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:110cbdf8d2e216577312cf06ccf85539c0e5a5420ef747e4a4719b5e483c88cd", size = 267811, upload-time = "2026-07-02T13:10:27.249Z" }, + { url = "https://files.pythonhosted.org/packages/85/31/96d8bbf58b8e9193bc8389574a91a0db48355ee98feb66aa6bf8d1b32eea/coverage-7.15.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2c5d4619214f1d9993e7b00a8600d14614b7e9d84e89507460b126aa5e6559e5", size = 268928, upload-time = "2026-07-02T13:10:29.242Z" }, + { url = "https://files.pythonhosted.org/packages/5e/7a/5294567e811a1cb7eda93140c628fa050d66189da28da320f93d1d815c73/coverage-7.15.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:781a704516e2d8346fbbd5be6c6f3412dd824785146528b3a01816f26c081007", size = 262378, upload-time = "2026-07-02T13:10:31.107Z" }, + { url = "https://files.pythonhosted.org/packages/69/3f/3f48538421f899f28946f90a3d272136a4686e1abf461cc9249a783ee0f3/coverage-7.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd4a1b44bcb65ee29e947ac92bbee04956df3a6bfc6143641bb6cae7ede00fc9", size = 265263, upload-time = "2026-07-02T13:10:32.942Z" }, + { url = "https://files.pythonhosted.org/packages/ce/d3/092df15efcab8a9c1467ee960eb8019bbad3f9300d115d89ea6195f369ff/coverage-7.15.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0e4950c9d6d3e39c64c991814ff315e2d0b9cb8152363594212c9e55208c0a8f", size = 262866, upload-time = "2026-07-02T13:10:35.104Z" }, + { url = "https://files.pythonhosted.org/packages/e5/ab/0254d2b88665efb2c57ad368cc77ab5de3435bd8d5add4729c1b0e79431e/coverage-7.15.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:fe9c87ff42e5472d80d21704972e1f96e104a0a599d77c5e35db5a3c562e2571", size = 266599, upload-time = "2026-07-02T13:10:37.05Z" }, + { url = "https://files.pythonhosted.org/packages/a8/79/1cfa4023e489ce6fbc7be4a5d442dbc375edb4f4fda39a352cedb53263c2/coverage-7.15.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f00d5ae1dd2fe13fb8186e3e7d37bcbd8b25c0d764ff7d1b32cef9be058510a8", size = 261714, upload-time = "2026-07-02T13:10:38.966Z" }, + { url = "https://files.pythonhosted.org/packages/b7/eb/fee5c8665656be63f497418d410484637c438172568688e8ac92e06574e7/coverage-7.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:363ab38cc78b615f11c9cac3cf1d7eef950c18b9fdedfb9066f59461dcf84d68", size = 264025, upload-time = "2026-07-02T13:10:40.789Z" }, + { url = "https://files.pythonhosted.org/packages/ab/99/63005db722f91edc81abc16302f9cc2f6228c1679e46e15be9ae144b14d0/coverage-7.15.0-cp314-cp314t-win32.whl", hash = "sha256:54fd9c53a5fafff509195f1b6a3f9be615d8e8362a3629ff1de23d270c03c86b", size = 223413, upload-time = "2026-07-02T13:10:42.597Z" }, + { url = "https://files.pythonhosted.org/packages/c1/e8/2bc6181c4fb06f1a6b981eb85330cc57bfad7e3f710fc9c9d350013ba228/coverage-7.15.0-cp314-cp314t-win_amd64.whl", hash = "sha256:87b47553097ba185ed964866078e7e63adea9f5f51b5f39691c34f30afd21080", size = 224245, upload-time = "2026-07-02T13:10:44.47Z" }, + { url = "https://files.pythonhosted.org/packages/79/b8/4d959bf9cc45d0cfed2f4d35cafcab978cdb6ea02eb5100009cd740632a3/coverage-7.15.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aeefb2dd178fe7eee79f0ad25d75855cb35ee9ed472db2c5ea06f5b4fd00cec5", size = 223558, upload-time = "2026-07-02T13:10:46.368Z" }, + { url = "https://files.pythonhosted.org/packages/52/30/21b2ad45959cd50e909e02ebac1e30b4ceb7162e91c11d4c570223a458b7/coverage-7.15.0-py3-none-any.whl", hash = "sha256:56da6a4cbe8f7e9e80bd072ca9cefe67d7106a440a7ec06519ec6507ac94ad19", size = 212632, upload-time = "2026-07-02T13:10:48.641Z" }, ] [package.optional-dependencies] @@ -269,117 +343,160 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "toolz" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bd/d4/16916f3dc20a3f5455b63c35dcb260b3716f59ce27a93586804e70e431d5/cytoolz-1.1.0.tar.gz", hash = "sha256:13a7bf254c3c0d28b12e2290b82aed0f0977a4c2a2bf84854fcdc7796a29f3b0", size = 642510 } +sdist = { url = "https://files.pythonhosted.org/packages/bd/d4/16916f3dc20a3f5455b63c35dcb260b3716f59ce27a93586804e70e431d5/cytoolz-1.1.0.tar.gz", hash = "sha256:13a7bf254c3c0d28b12e2290b82aed0f0977a4c2a2bf84854fcdc7796a29f3b0", size = 642510, upload-time = "2025-10-19T00:44:56.174Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/7a/3244e6e3587be9abfee3b1c320e43a279831b3c3a31fe5d08c1ee6193e6b/cytoolz-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:72d7043a88ea5e61ba9d17ea0d1c1eff10f645d7edfcc4e56a31ef78be287644", size = 1307813 }, - { url = "https://files.pythonhosted.org/packages/32/7e/eaf504ca59addce323ef4d4ffedc2913d83c121ec19f6419bc402f7702dc/cytoolz-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d759e9ed421bacfeb456d47af8d734c057b9912b5f2441f95b27ca35e5efab07", size = 985777 }, - { url = "https://files.pythonhosted.org/packages/d4/a1/ec95443f0cf4cd0dbc574fa26ac85a0442d35f3b601a90a0e3dda077f614/cytoolz-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fdb5be8fbcc0396141189022724155a4c1c93712ac4aef8c03829af0c2a816d7", size = 982865 }, - { url = "https://files.pythonhosted.org/packages/a7/1b/8503604b0c0534977363fb77d371019395dfa031a216f9b1d8729d1280e4/cytoolz-1.1.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c8c0a513dc89bc05cc72893609118815bced5ef201f1a317b4cc3423b3a0e750", size = 2597969 }, - { url = "https://files.pythonhosted.org/packages/4e/e5/30748da06417cb2d4bc58e380b0c11d8c6539f4e289dc1e4f4b4fc248d0e/cytoolz-1.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce94db4f8ebe842c30c0ece42ff5de977c47859088c2c363dede5a68f6906484", size = 2692230 }, - { url = "https://files.pythonhosted.org/packages/d6/84/e06580b74deb97dfd3513e4e6b660c2dedc220c7653f5bd3e4f772f4d885/cytoolz-1.1.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b622d4f54e370c853ded94a668f94fe72c6d70e06ac102f17a2746661c27ab52", size = 2565243 }, - { url = "https://files.pythonhosted.org/packages/91/5e/79c0122a34c33afcb5aaee1fec35be24fe16cecefb9bb8890f2908feae56/cytoolz-1.1.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:375a65baa5a5b4ff6a0c5ff17e170cf23312e4c710755771ca966144c24216b5", size = 2868602 }, - { url = "https://files.pythonhosted.org/packages/3f/84/404698ff02b32292db1e39cc4a2fbdabe15164b092cc364902984c3ce0f4/cytoolz-1.1.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c0d51bcdb3203a062a78f66bbe33db5e3123048e24a5f0e1402422d79df8ee2d", size = 2905121 }, - { url = "https://files.pythonhosted.org/packages/9f/33/afad6593829ba73fc87b5ae64441e380fc937f79f24a1cda60d23cb99b8c/cytoolz-1.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1010869529bb05dc9802b6d776a34ca1b6d48b9deec70ad5e2918ae175be5c2f", size = 2684382 }, - { url = "https://files.pythonhosted.org/packages/ce/86/7900013a82ca9c6cadbfb22bf50d0fbfc3b192915d2bdd9fab3f69a9afba/cytoolz-1.1.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:11a8f2e83295bdb33f35454d6bafcb7845b03b5881dcaed66ecbd726c7f16772", size = 2518183 }, - { url = "https://files.pythonhosted.org/packages/c3/4b/acf9be2953fed6a6d795fb66de37c367915037a998a5b3d3b69476cf91fe/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0499c5e0a8e688ed367a2e51cc13792ae8f08226c15f7d168589fc44b9b9cada", size = 2609368 }, - { url = "https://files.pythonhosted.org/packages/fd/ec/3e30455fd526f5cc37bd3dd2a0e2aafb803ae4d271e50ce53bfc30810053/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:87d44e6033d4c5e95a7d39ba59b8e105ba1c29b1ccd1d215f26477cc1d64be39", size = 2561458 }, - { url = "https://files.pythonhosted.org/packages/49/27/e5815c85bb18cdf95780f9596dcfd76dee910a4d635a1924648cb8a636c6/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a68cef396a7de237f7b97422a6a450dfb111722296ba217ba5b34551832f1f6e", size = 2578236 }, - { url = "https://files.pythonhosted.org/packages/17/db/588e266eff397670398ea335a809152e77b02ee92e0ec42091115b42f09b/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:06ad4c95b258141f138a93ebfdc1d76ac087afc1a82f1401100a1f44b44ba656", size = 2770523 }, - { url = "https://files.pythonhosted.org/packages/ab/ad/82be0b999c7a0a0b362cedfc183eb090b872fd42937af2d6e97d58bc70f8/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:ada59a4b3c59d4ac7162e0ed08667ffa78abf48e975c8a9f9d5b9bc50720f4fd", size = 2512909 }, - { url = "https://files.pythonhosted.org/packages/25/21/45f07ab0339a20c518bc9006100922babc397ab7ea5ef40a395db83b9cdd/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a8957bcaea1ba01327a9b219d2adb84144377684f51444253890dab500ca171f", size = 2755345 }, - { url = "https://files.pythonhosted.org/packages/8b/a7/e530bf2b304206f79b36d793caba1ff9448348713a41bb1ad0197714a0f2/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6d8cdc299d67eb0f3b9ecdafeeb55eb3b7b7470e2d950ac34b05ed4c7a5572b8", size = 2617790 }, - { url = "https://files.pythonhosted.org/packages/9f/77/7f53092121d7431589344c7d65c3d43c4111547aafabb21d3ca9032d126c/cytoolz-1.1.0-cp310-cp310-win32.whl", hash = "sha256:d8e08464c5cdea4f6df31e84b11ed6bfd79cedb99fbcbfdc15eb9361a6053c5a", size = 900209 }, - { url = "https://files.pythonhosted.org/packages/84/e4/902578658303b9bc76b1704d3ed85e6d307d311bd9fa0b919581bea56e62/cytoolz-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:7e49922a7ed54262d41960bf3b835a7700327bf79cff1e9bfc73d79021132ff8", size = 944802 }, - { url = "https://files.pythonhosted.org/packages/71/9f/56a7003617b4eabd8ddfb470aacc240425cbe6ddeb756adfbbaadaa175f1/cytoolz-1.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:943a662d2e72ffc4438d43ab5a1de8d852237775a423236594a3b3e381b8032c", size = 904835 }, - { url = "https://files.pythonhosted.org/packages/69/82/edf1d0c32b6222f2c22e5618d6db855d44eb59f9b6f22436ff963c5d0a5c/cytoolz-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:dba8e5a8c6e3c789d27b0eb5e7ce5ed7d032a7a9aae17ca4ba5147b871f6e327", size = 1314345 }, - { url = "https://files.pythonhosted.org/packages/2d/b5/0e3c1edaa26c2bd9db90cba0ac62c85bbca84224c7ae1c2e0072c4ea64c5/cytoolz-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:44b31c05addb0889167a720123b3b497b28dd86f8a0aeaf3ae4ffa11e2c85d55", size = 989259 }, - { url = "https://files.pythonhosted.org/packages/09/aa/e2b2ee9fc684867e817640764ea5807f9d25aa1e7bdba02dd4b249aab0f7/cytoolz-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:653cb18c4fc5d8a8cfce2bce650aabcbe82957cd0536827367d10810566d5294", size = 986551 }, - { url = "https://files.pythonhosted.org/packages/39/9f/4e8ee41acf6674f10a9c2c9117b2f219429a5a0f09bba6135f34ca4f08a6/cytoolz-1.1.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:853a5b4806915020c890e1ce70cc056bbc1dd8bc44f2d74d555cccfd7aefba7d", size = 2688378 }, - { url = "https://files.pythonhosted.org/packages/78/94/ef006f3412bc22444d855a0fc9ecb81424237fb4e5c1a1f8f5fb79ac978f/cytoolz-1.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7b44e9de86bea013fe84fd8c399d6016bbb96c37c5290769e5c99460b9c53e5", size = 2798299 }, - { url = "https://files.pythonhosted.org/packages/df/aa/365953926ee8b4f2e07df7200c0d73632155908c8867af14b2d19cc9f1f7/cytoolz-1.1.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:098d628a801dc142e9740126be5624eb7aef1d732bc7a5719f60a2095547b485", size = 2639311 }, - { url = "https://files.pythonhosted.org/packages/7c/ee/62beaaee7df208f22590ad07ef8875519af49c52ca39d99460b14a00f15a/cytoolz-1.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:779ee4096ed7a82cffab89372ffc339631c285079dbf33dbe7aff1f6174985df", size = 2979532 }, - { url = "https://files.pythonhosted.org/packages/c5/04/2211251e450bed111ada1194dc42c461da9aea441de62a01e4085ea6de9f/cytoolz-1.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f2ce18dd99533d077e9712f9faa852f389f560351b1efd2f2bdb193a95eddde2", size = 3018632 }, - { url = "https://files.pythonhosted.org/packages/ed/a2/4a3400e4d07d3916172bf74fede08020d7b4df01595d8a97f1e9507af5ae/cytoolz-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac266a34437812cf841cecbfe19f355ab9c3dd1ef231afc60415d40ff12a76e4", size = 2788579 }, - { url = "https://files.pythonhosted.org/packages/fe/82/bb88caa53a41f600e7763c517d50e2efbbe6427ea395716a92b83f44882a/cytoolz-1.1.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1920b9b9c13d60d0bb6cd14594b3bce0870022eccb430618c37156da5f2b7a55", size = 2593024 }, - { url = "https://files.pythonhosted.org/packages/09/a8/8b25e59570da16c7a0f173b8c6ec0aa6f3abd47fd385c007485acb459896/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47caa376dafd2bdc29f8a250acf59c810ec9105cd6f7680b9a9d070aae8490ec", size = 2715304 }, - { url = "https://files.pythonhosted.org/packages/d4/56/faec7696f235521b926ffdf92c102f5b029f072d28e1020364e55b084820/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5ab2c97d8aaa522b038cca9187b1153347af22309e7c998b14750c6fdec7b1cb", size = 2654461 }, - { url = "https://files.pythonhosted.org/packages/aa/82/f790ed167c04b8d2a33bed30770a9b7066fc4f573321d797190e5f05685f/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4bce006121b120e8b359244ee140bb0b1093908efc8b739db8dbaa3f8fb42139", size = 2672077 }, - { url = "https://files.pythonhosted.org/packages/d9/b3/80b8183e7eee44f45bfa3cdd3ebdadf3dd43ffc686f96d442a6c4dded45d/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7fc0f1e4e9bb384d26e73c6657bbc26abdae4ff66a95933c00f3d578be89181b", size = 2881589 }, - { url = "https://files.pythonhosted.org/packages/8f/05/ac5ba5ddb88a3ba7ecea4bf192194a838af564d22ea7a4812cbb6bd106ce/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:dd3f894ff972da1994d06ac6157d74e40dda19eb31fe5e9b7863ca4278c3a167", size = 2589924 }, - { url = "https://files.pythonhosted.org/packages/8e/cd/100483cae3849d24351c8333a815dc6adaf3f04912486e59386d86d9db9a/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0846f49cf8a4496bd42659040e68bd0484ce6af819709cae234938e039203ba0", size = 2868059 }, - { url = "https://files.pythonhosted.org/packages/34/6e/3a7c56b325772d39397fc3aafb4dc054273982097178b6c3917c6dad48de/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:16a3af394ade1973226d64bb2f9eb3336adbdea03ed5b134c1bbec5a3b20028e", size = 2721692 }, - { url = "https://files.pythonhosted.org/packages/fa/ca/9fdaee32c3bc769dfb7e7991d9499136afccea67e423d097b8fb3c5acbc1/cytoolz-1.1.0-cp311-cp311-win32.whl", hash = "sha256:b786c9c8aeab76cc2f76011e986f7321a23a56d985b77d14f155d5e5514ea781", size = 899349 }, - { url = "https://files.pythonhosted.org/packages/fd/04/2ab98edeea90311e4029e1643e43d2027b54da61453292d9ea51a103ee87/cytoolz-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:ebf06d1c5344fb22fee71bf664234733e55db72d74988f2ecb7294b05e4db30c", size = 945831 }, - { url = "https://files.pythonhosted.org/packages/b4/8d/777d86ea6bcc68b0fc926b0ef8ab51819e2176b37aadea072aac949d5231/cytoolz-1.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:b63f5f025fac893393b186e132e3e242de8ee7265d0cd3f5bdd4dda93f6616c9", size = 904076 }, - { url = "https://files.pythonhosted.org/packages/c6/ec/01426224f7acf60183d3921b25e1a8e71713d3d39cb464d64ac7aace6ea6/cytoolz-1.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:99f8e134c9be11649342853ec8c90837af4089fc8ff1e8f9a024a57d1fa08514", size = 1327800 }, - { url = "https://files.pythonhosted.org/packages/b4/07/e07e8fedd332ac9626ad58bea31416dda19bfd14310731fa38b16a97e15f/cytoolz-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0a6f44cf9319c30feb9a50aa513d777ef51efec16f31c404409e7deb8063df64", size = 997118 }, - { url = "https://files.pythonhosted.org/packages/ab/72/c0f766d63ed2f9ea8dc8e1628d385d99b41fb834ce17ac3669e3f91e115d/cytoolz-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:945580dc158c557172fca899a35a99a16fbcebf6db0c77cb6621084bc82189f9", size = 991169 }, - { url = "https://files.pythonhosted.org/packages/df/4b/1f757353d1bf33e56a7391ecc9bc49c1e529803b93a9d2f67fe5f92906fe/cytoolz-1.1.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:257905ec050d04f2f856854620d1e25556fd735064cebd81b460f54939b9f9d5", size = 2700680 }, - { url = "https://files.pythonhosted.org/packages/25/73/9b25bb7ed8d419b9d6ff2ae0b3d06694de79a3f98f5169a1293ff7ad3a3f/cytoolz-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:82779049f352fb3ab5e8c993ab45edbb6e02efb1f17f0b50f4972c706cc51d76", size = 2824951 }, - { url = "https://files.pythonhosted.org/packages/0c/93/9c787f7c909e75670fff467f2504725d06d8c3f51d6dfe22c55a08c8ccd4/cytoolz-1.1.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7d3e405e435320e08c5a1633afaf285a392e2d9cef35c925d91e2a31dfd7a688", size = 2679635 }, - { url = "https://files.pythonhosted.org/packages/50/aa/9ee92c302cccf7a41a7311b325b51ebeff25d36c1f82bdc1bbe3f58dc947/cytoolz-1.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:923df8f5591e0d20543060c29909c149ab1963a7267037b39eee03a83dbc50a8", size = 2938352 }, - { url = "https://files.pythonhosted.org/packages/6a/a3/3b58c5c1692c3bacd65640d0d5c7267a7ebb76204f7507aec29de7063d2f/cytoolz-1.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:25db9e4862f22ea0ae2e56c8bec9fc9fd756b655ae13e8c7b5625d7ed1c582d4", size = 3022121 }, - { url = "https://files.pythonhosted.org/packages/e1/93/c647bc3334355088c57351a536c2d4a83dd45f7de591fab383975e45bff9/cytoolz-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7a98deb11ccd8e5d9f9441ef2ff3352aab52226a2b7d04756caaa53cd612363", size = 2857656 }, - { url = "https://files.pythonhosted.org/packages/b2/c2/43fea146bf4141deea959e19dcddf268c5ed759dec5c2ed4a6941d711933/cytoolz-1.1.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dce4ee9fc99104bc77efdea80f32ca5a650cd653bcc8a1d984a931153d3d9b58", size = 2551284 }, - { url = "https://files.pythonhosted.org/packages/6f/df/cdc7a81ce5cfcde7ef523143d545635fc37e80ccacce140ae58483a21da3/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80d6da158f7d20c15819701bbda1c041f0944ede2f564f5c739b1bc80a9ffb8b", size = 2721673 }, - { url = "https://files.pythonhosted.org/packages/45/be/f8524bb9ad8812ad375e61238dcaa3177628234d1b908ad0b74e3657cafd/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3b5c5a192abda123ad45ef716ec9082b4cf7d95e9ada8291c5c2cc5558be858b", size = 2722884 }, - { url = "https://files.pythonhosted.org/packages/23/e6/6bb8e4f9c267ad42d1ff77b6d2e4984665505afae50a216290e1d7311431/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5b399ce7d967b1cb6280250818b786be652aa8ddffd3c0bb5c48c6220d945ab5", size = 2685486 }, - { url = "https://files.pythonhosted.org/packages/d7/dd/88619f9c8d2b682562c0c886bbb7c35720cb83fda2ac9a41bdd14073d9bd/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e7e29a1a03f00b4322196cfe8e2c38da9a6c8d573566052c586df83aacc5663c", size = 2839661 }, - { url = "https://files.pythonhosted.org/packages/b8/8d/4478ebf471ee78dd496d254dc0f4ad729cd8e6ba8257de4f0a98a2838ef2/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5291b117d71652a817ec164e7011f18e6a51f8a352cc9a70ed5b976c51102fda", size = 2547095 }, - { url = "https://files.pythonhosted.org/packages/e6/68/f1dea33367b0b3f64e199c230a14a6b6f243c189020effafd31e970ca527/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8caef62f846a9011676c51bda9189ae394cdd6bb17f2946ecaedc23243268320", size = 2870901 }, - { url = "https://files.pythonhosted.org/packages/4a/9a/33591c09dfe799b8fb692cf2ad383e2c41ab6593cc960b00d1fc8a145655/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:de425c5a8e3be7bb3a195e19191d28d9eb3c2038046064a92edc4505033ec9cb", size = 2765422 }, - { url = "https://files.pythonhosted.org/packages/60/2b/a8aa233c9416df87f004e57ae4280bd5e1f389b4943d179f01020c6ec629/cytoolz-1.1.0-cp312-cp312-win32.whl", hash = "sha256:296440a870e8d1f2e1d1edf98f60f1532b9d3ab8dfbd4b25ec08cd76311e79e5", size = 901933 }, - { url = "https://files.pythonhosted.org/packages/ad/33/4c9bdf8390dc01d2617c7f11930697157164a52259b6818ddfa2f94f89f4/cytoolz-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:07156987f224c6dac59aa18fb8bf91e1412f5463961862716a3381bf429c8699", size = 947989 }, - { url = "https://files.pythonhosted.org/packages/35/ac/6e2708835875f5acb52318462ed296bf94ed0cb8c7cb70e62fbd03f709e3/cytoolz-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:23e616b38f5b3160c7bb45b0f84a8f3deb4bd26b29fb2dfc716f241c738e27b8", size = 903913 }, - { url = "https://files.pythonhosted.org/packages/71/4a/b3ddb3ee44fe0045e95dd973746f93f033b6f92cce1fc3cbbe24b329943c/cytoolz-1.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:76c9b58555300be6dde87a41faf1f97966d79b9a678b7a526fcff75d28ef4945", size = 976728 }, - { url = "https://files.pythonhosted.org/packages/42/21/a3681434aa425875dd828bb515924b0f12c37a55c7d2bc5c0c5de3aeb0b4/cytoolz-1.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d1d638b10d3144795655e9395566ce35807df09219fd7cacd9e6acbdef67946a", size = 986057 }, - { url = "https://files.pythonhosted.org/packages/d9/cb/efc1b29e211e0670a6953222afaac84dcbba5cb940b130c0e49858978040/cytoolz-1.1.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:26801c1a165e84786a99e03c9c9973356caaca002d66727b761fb1042878ef06", size = 992632 }, - { url = "https://files.pythonhosted.org/packages/be/b0/e50621d21e939338c97faab651f58ea7fa32101226a91de79ecfb89d71e1/cytoolz-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2a9a464542912d3272f6dccc5142df057c71c6a5cbd30439389a732df401afb7", size = 1317534 }, - { url = "https://files.pythonhosted.org/packages/0d/6b/25aa9739b0235a5bc4c1ea293186bc6822a4c6607acfe1422423287e7400/cytoolz-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ed6104fa942aa5784bf54f339563de637557e3443b105760bc4de8f16a7fc79b", size = 992336 }, - { url = "https://files.pythonhosted.org/packages/e1/53/5f4deb0ff958805309d135d899c764364c1e8a632ce4994bd7c45fb98df2/cytoolz-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56161f0ab60dc4159ec343509abaf809dc88e85c7e420e354442c62e3e7cbb77", size = 986118 }, - { url = "https://files.pythonhosted.org/packages/1c/e3/f6255b76c8cc0debbe1c0779130777dc0434da6d9b28a90d9f76f8cb67cd/cytoolz-1.1.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:832bd36cc9123535f1945acf6921f8a2a15acc19cfe4065b1c9b985a28671886", size = 2679563 }, - { url = "https://files.pythonhosted.org/packages/59/8a/acc6e39a84e930522b965586ad3a36694f9bf247b23188ee0eb47b1c9ed1/cytoolz-1.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1842636b6e034f229bf084c2bcdcfd36c8437e752eefd2c74ce9e2f10415cb6e", size = 2813020 }, - { url = "https://files.pythonhosted.org/packages/db/f5/0083608286ad1716eda7c41f868e85ac549f6fd6b7646993109fa0bdfd98/cytoolz-1.1.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:823df012ab90d2f2a0f92fea453528539bf71ac1879e518524cd0c86aa6df7b9", size = 2669312 }, - { url = "https://files.pythonhosted.org/packages/47/a8/d16080b575520fe5da00cede1ece4e0a4180ec23f88dcdc6a2f5a90a7f7f/cytoolz-1.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2f1fcf9e7e7b3487883ff3f815abc35b89dcc45c4cf81c72b7ee457aa72d197b", size = 2922147 }, - { url = "https://files.pythonhosted.org/packages/7e/bc/716c9c1243701e58cad511eb3937fd550e645293c5ed1907639c5d66f194/cytoolz-1.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4cdb3fa1772116827f263f25b0cdd44c663b6701346a56411960534a06c082de", size = 2981602 }, - { url = "https://files.pythonhosted.org/packages/14/bc/571b232996846b27f4ac0c957dc8bf60261e9b4d0d01c8d955e82329544e/cytoolz-1.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d1b5c95041741b81430454db65183e133976f45ac3c03454cfa8147952568529", size = 2830103 }, - { url = "https://files.pythonhosted.org/packages/5b/55/c594afb46ecd78e4b7e1fb92c947ed041807875661ceda73baaf61baba4f/cytoolz-1.1.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b2079fd9f1a65f4c61e6278c8a6d4f85edf30c606df8d5b32f1add88cbbe2286", size = 2533802 }, - { url = "https://files.pythonhosted.org/packages/93/83/1edcf95832555a78fc43b975f3ebe8ceadcc9664dd47fd33747a14df5069/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a92a320d72bef1c7e2d4c6d875125cf57fc38be45feb3fac1bfa64ea401f54a4", size = 2706071 }, - { url = "https://files.pythonhosted.org/packages/e2/df/035a408df87f25cfe3611557818b250126cd2281b2104cd88395de205583/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:06d1c79aa51e6a92a90b0e456ebce2288f03dd6a76c7f582bfaa3eda7692e8a5", size = 2707575 }, - { url = "https://files.pythonhosted.org/packages/7a/a4/ef78e13e16e93bf695a9331321d75fbc834a088d941f1c19e6b63314e257/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e1d7be25f6971e986a52b6d3a0da28e1941850985417c35528f6823aef2cfec5", size = 2660486 }, - { url = "https://files.pythonhosted.org/packages/30/7a/2c3d60682b26058d435416c4e90d4a94db854de5be944dfd069ed1be648a/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:964b248edc31efc50a65e9eaa0c845718503823439d2fa5f8d2c7e974c2b5409", size = 2819605 }, - { url = "https://files.pythonhosted.org/packages/45/92/19b722a1d83cc443fbc0c16e0dc376f8a451437890d3d9ee370358cf0709/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c9ff2b3c57c79b65cb5be14a18c6fd4a06d5036fb3f33e973a9f70e9ac13ca28", size = 2533559 }, - { url = "https://files.pythonhosted.org/packages/1d/15/fa3b7891da51115204416f14192081d3dea0eaee091f123fdc1347de8dd1/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:22290b73086af600042d99f5ce52a43d4ad9872c382610413176e19fc1d4fd2d", size = 2839171 }, - { url = "https://files.pythonhosted.org/packages/46/40/d3519d5cd86eebebf1e8b7174ec32dfb6ecec67b48b0cfb92bf226659b5a/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a2ade74fccd080ea793382968913ee38d7a35c921df435bbf0a6aeecf0d17574", size = 2743379 }, - { url = "https://files.pythonhosted.org/packages/93/e2/a9e7511f0a13fdbefa5bf73cf8e4763878140de9453fd3e50d6ac57b6be7/cytoolz-1.1.0-cp313-cp313-win32.whl", hash = "sha256:db5dbcfda1c00e937426cbf9bdc63c24ebbc358c3263bfcbc1ab4a88dc52aa8e", size = 900844 }, - { url = "https://files.pythonhosted.org/packages/d6/a4/fb7eb403c6a4c81e5a30363f34a71adcc8bf5292dc8ea32e2440aa5668f2/cytoolz-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9e2d3fe3b45c3eb7233746f7aca37789be3dceec3e07dcc406d3e045ea0f7bdc", size = 946461 }, - { url = "https://files.pythonhosted.org/packages/93/bb/1c8c33d353548d240bc6e8677ee8c3560ce5fa2f084e928facf7c35a6dcf/cytoolz-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:32c559f95ff44a9ebcbd934acaa1e6dc8f3e6ffce4762a79a88528064873d6d5", size = 902673 }, - { url = "https://files.pythonhosted.org/packages/c4/ba/4a53acc60f59030fcaf48c7766e3c4c81bd997379425aa45b129396557b5/cytoolz-1.1.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:9e2cd93b28f667c5870a070ab2b8bb4397470a85c4b204f2454b0ad001cd1ca3", size = 1372336 }, - { url = "https://files.pythonhosted.org/packages/ac/90/f28fd8ad8319d8f5c8da69a2c29b8cf52a6d2c0161602d92b366d58926ab/cytoolz-1.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f494124e141a9361f31d79875fe7ea459a3be2b9dadd90480427c0c52a0943d4", size = 1011930 }, - { url = "https://files.pythonhosted.org/packages/c9/95/4561c4e0ad1c944f7673d6d916405d68080f10552cfc5d69a1cf2475a9a1/cytoolz-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:53a3262bf221f19437ed544bf8c0e1980c81ac8e2a53d87a9bc075dba943d36f", size = 1020610 }, - { url = "https://files.pythonhosted.org/packages/c3/14/b2e1ffa4995ec36e1372e243411ff36325e4e6d7ffa34eb4098f5357d176/cytoolz-1.1.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:47663e57d3f3f124921f38055e86a1022d0844c444ede2e8f090d3bbf80deb65", size = 2917327 }, - { url = "https://files.pythonhosted.org/packages/4a/29/7cab6c609b4514ac84cca2f7dca6c509977a8fc16d27c3a50e97f105fa6a/cytoolz-1.1.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5a8755c4104ee4e3d5ba434c543b5f85fdee6a1f1df33d93f518294da793a60", size = 3108951 }, - { url = "https://files.pythonhosted.org/packages/9a/71/1d1103b819458679277206ad07d78ca6b31c4bb88d6463fd193e19bfb270/cytoolz-1.1.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4d96ff3d381423af1b105295f97de86d1db51732c9566eb37378bab6670c5010", size = 2807149 }, - { url = "https://files.pythonhosted.org/packages/1a/d4/3d83a05a21e7d2ed2b9e6daf489999c29934b005de9190272b8a2e3735d0/cytoolz-1.1.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0ec96b3d537cdf47d4e76ded199f7440715f4c71029b45445cff92c1248808c2", size = 3111608 }, - { url = "https://files.pythonhosted.org/packages/51/88/96f68354c3d4af68de41f0db4fe41a23b96a50a4a416636cea325490cfeb/cytoolz-1.1.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:208e2f2ef90a32b0acbff3303d90d89b13570a228d491d2e622a7883a3c68148", size = 3179373 }, - { url = "https://files.pythonhosted.org/packages/ce/50/ed87a5cd8e6f27ffbb64c39e9730e18ec66c37631db2888ae711909f10c9/cytoolz-1.1.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d416a81bb0bd517558668e49d30a7475b5445f9bbafaab7dcf066f1e9adba36", size = 3003120 }, - { url = "https://files.pythonhosted.org/packages/d3/a7/acde155b050d6eaa8e9c7845c98fc5fb28501568e78e83ebbf44f8855274/cytoolz-1.1.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f32e94c91ffe49af04835ee713ebd8e005c85ebe83e7e1fdcc00f27164c2d636", size = 2703225 }, - { url = "https://files.pythonhosted.org/packages/1b/b6/9d518597c5bdea626b61101e8d2ff94124787a42259dafd9f5fc396f346a/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15d0c6405efc040499c46df44056a5c382f551a7624a41cf3e4c84a96b988a15", size = 2956033 }, - { url = "https://files.pythonhosted.org/packages/89/7a/93e5f860926165538c85e1c5e1670ad3424f158df810f8ccd269da652138/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:bf069c5381d757debae891401b88b3a346ba3a28ca45ba9251103b282463fad8", size = 2862950 }, - { url = "https://files.pythonhosted.org/packages/76/e6/99d6af00487bedc27597b54c9fcbfd5c833a69c6b7a9b9f0fff777bfc7aa/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7d5cf15892e63411ec1bd67deff0e84317d974e6ab2cdfefdd4a7cea2989df66", size = 2861757 }, - { url = "https://files.pythonhosted.org/packages/71/ca/adfa1fb7949478135a37755cb8e88c20cd6b75c22a05f1128f05f3ab2c60/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:3e3872c21170f8341656f8692f8939e8800dcee6549ad2474d4c817bdefd62cd", size = 2979049 }, - { url = "https://files.pythonhosted.org/packages/70/4c/7bf47a03a4497d500bc73d4204e2d907771a017fa4457741b2a1d7c09319/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:b9ddeff8e8fd65eb1fcefa61018100b2b627e759ea6ad275d2e2a93ffac147bf", size = 2699492 }, - { url = "https://files.pythonhosted.org/packages/7e/e7/3d034b0e4817314f07aa465d5864e9b8df9d25cb260a53dd84583e491558/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:02feeeda93e1fa3b33414eb57c2b0aefd1db8f558dd33fdfcce664a0f86056e4", size = 2995646 }, - { url = "https://files.pythonhosted.org/packages/c1/62/be357181c71648d9fe1d1ce91cd42c63457dcf3c158e144416fd51dced83/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d08154ad45349162b6c37f12d5d1b2e6eef338e657b85e1621e4e6a4a69d64cb", size = 2919481 }, - { url = "https://files.pythonhosted.org/packages/62/d5/bf5434fde726c4f80cb99912b2d8e0afa1587557e2a2d7e0315eb942f2de/cytoolz-1.1.0-cp313-cp313t-win32.whl", hash = "sha256:10ae4718a056948d73ca3e1bb9ab1f95f897ec1e362f829b9d37cc29ab566c60", size = 951595 }, - { url = "https://files.pythonhosted.org/packages/64/29/39c161e9204a9715321ddea698cbd0abc317e78522c7c642363c20589e71/cytoolz-1.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:1bb77bc6197e5cb19784b6a42bb0f8427e81737a630d9d7dda62ed31733f9e6c", size = 1004445 }, - { url = "https://files.pythonhosted.org/packages/e2/5a/7cbff5e9a689f558cb0bdf277f9562b2ac51acf7cd15e055b8c3efb0e1ef/cytoolz-1.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:563dda652c6ff52d215704fbe6b491879b78d7bbbb3a9524ec8e763483cb459f", size = 926207 }, - { url = "https://files.pythonhosted.org/packages/84/32/0522207170294cf691112a93c70a8ef942f60fa9ff8e793b63b1f09cedc0/cytoolz-1.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f32e93a55681d782fc6af939f6df36509d65122423cbc930be39b141064adff8", size = 922014 }, - { url = "https://files.pythonhosted.org/packages/4c/49/9be2d24adaa18fa307ff14e3e43f02b2ae4b69c4ce51cee6889eb2114990/cytoolz-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5d9bc596751cbda8073e65be02ca11706f00029768fbbbc81e11a8c290bb41aa", size = 918134 }, - { url = "https://files.pythonhosted.org/packages/5c/b3/6a76c3b94c6c87c72ea822e7e67405be6b649c2e37778eeac7c0c0c69de8/cytoolz-1.1.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9b16660d01c3931951fab49db422c627897c38c1a1f0393a97582004019a4887", size = 981970 }, - { url = "https://files.pythonhosted.org/packages/f6/8a/606e4c7ed14aa6a86aee6ca84a2cb804754dc6c4905b8f94e09e49f1ce60/cytoolz-1.1.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b7de5718e2113d4efccea3f06055758cdbc17388ecc3341ba4d1d812837d7c1a", size = 978877 }, - { url = "https://files.pythonhosted.org/packages/97/ec/ad474dcb1f6c1ebfdda3c2ad2edbb1af122a0e79c9ff2cb901ffb5f59662/cytoolz-1.1.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a12a2a1a6bc44099491c05a12039efa08cc33a3d0f8c7b0566185e085e139283", size = 964279 }, - { url = "https://files.pythonhosted.org/packages/68/8c/d245fd416c69d27d51f14d5ad62acc4ee5971088ee31c40ffe1cc109af68/cytoolz-1.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:047defa7f5f9a32f82373dbc3957289562e8a3fa58ae02ec8e4dca4f43a33a21", size = 916630 }, + { url = "https://files.pythonhosted.org/packages/a7/7a/3244e6e3587be9abfee3b1c320e43a279831b3c3a31fe5d08c1ee6193e6b/cytoolz-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:72d7043a88ea5e61ba9d17ea0d1c1eff10f645d7edfcc4e56a31ef78be287644", size = 1307813, upload-time = "2025-10-19T00:39:34.198Z" }, + { url = "https://files.pythonhosted.org/packages/32/7e/eaf504ca59addce323ef4d4ffedc2913d83c121ec19f6419bc402f7702dc/cytoolz-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d759e9ed421bacfeb456d47af8d734c057b9912b5f2441f95b27ca35e5efab07", size = 985777, upload-time = "2025-10-19T00:39:36.545Z" }, + { url = "https://files.pythonhosted.org/packages/d4/a1/ec95443f0cf4cd0dbc574fa26ac85a0442d35f3b601a90a0e3dda077f614/cytoolz-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fdb5be8fbcc0396141189022724155a4c1c93712ac4aef8c03829af0c2a816d7", size = 982865, upload-time = "2025-10-19T00:39:38.19Z" }, + { url = "https://files.pythonhosted.org/packages/a7/1b/8503604b0c0534977363fb77d371019395dfa031a216f9b1d8729d1280e4/cytoolz-1.1.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c8c0a513dc89bc05cc72893609118815bced5ef201f1a317b4cc3423b3a0e750", size = 2597969, upload-time = "2025-10-19T00:39:40.26Z" }, + { url = "https://files.pythonhosted.org/packages/4e/e5/30748da06417cb2d4bc58e380b0c11d8c6539f4e289dc1e4f4b4fc248d0e/cytoolz-1.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce94db4f8ebe842c30c0ece42ff5de977c47859088c2c363dede5a68f6906484", size = 2692230, upload-time = "2025-10-19T00:39:42.327Z" }, + { url = "https://files.pythonhosted.org/packages/d6/84/e06580b74deb97dfd3513e4e6b660c2dedc220c7653f5bd3e4f772f4d885/cytoolz-1.1.0-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b622d4f54e370c853ded94a668f94fe72c6d70e06ac102f17a2746661c27ab52", size = 2565243, upload-time = "2025-10-19T00:39:44.403Z" }, + { url = "https://files.pythonhosted.org/packages/91/5e/79c0122a34c33afcb5aaee1fec35be24fe16cecefb9bb8890f2908feae56/cytoolz-1.1.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:375a65baa5a5b4ff6a0c5ff17e170cf23312e4c710755771ca966144c24216b5", size = 2868602, upload-time = "2025-10-19T00:39:46.051Z" }, + { url = "https://files.pythonhosted.org/packages/3f/84/404698ff02b32292db1e39cc4a2fbdabe15164b092cc364902984c3ce0f4/cytoolz-1.1.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c0d51bcdb3203a062a78f66bbe33db5e3123048e24a5f0e1402422d79df8ee2d", size = 2905121, upload-time = "2025-10-19T00:39:48.078Z" }, + { url = "https://files.pythonhosted.org/packages/9f/33/afad6593829ba73fc87b5ae64441e380fc937f79f24a1cda60d23cb99b8c/cytoolz-1.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1010869529bb05dc9802b6d776a34ca1b6d48b9deec70ad5e2918ae175be5c2f", size = 2684382, upload-time = "2025-10-19T00:39:49.766Z" }, + { url = "https://files.pythonhosted.org/packages/ce/86/7900013a82ca9c6cadbfb22bf50d0fbfc3b192915d2bdd9fab3f69a9afba/cytoolz-1.1.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:11a8f2e83295bdb33f35454d6bafcb7845b03b5881dcaed66ecbd726c7f16772", size = 2518183, upload-time = "2025-10-19T00:39:51.433Z" }, + { url = "https://files.pythonhosted.org/packages/c3/4b/acf9be2953fed6a6d795fb66de37c367915037a998a5b3d3b69476cf91fe/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0499c5e0a8e688ed367a2e51cc13792ae8f08226c15f7d168589fc44b9b9cada", size = 2609368, upload-time = "2025-10-19T00:39:53.458Z" }, + { url = "https://files.pythonhosted.org/packages/fd/ec/3e30455fd526f5cc37bd3dd2a0e2aafb803ae4d271e50ce53bfc30810053/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:87d44e6033d4c5e95a7d39ba59b8e105ba1c29b1ccd1d215f26477cc1d64be39", size = 2561458, upload-time = "2025-10-19T00:39:55.493Z" }, + { url = "https://files.pythonhosted.org/packages/49/27/e5815c85bb18cdf95780f9596dcfd76dee910a4d635a1924648cb8a636c6/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a68cef396a7de237f7b97422a6a450dfb111722296ba217ba5b34551832f1f6e", size = 2578236, upload-time = "2025-10-19T00:39:57.512Z" }, + { url = "https://files.pythonhosted.org/packages/17/db/588e266eff397670398ea335a809152e77b02ee92e0ec42091115b42f09b/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:06ad4c95b258141f138a93ebfdc1d76ac087afc1a82f1401100a1f44b44ba656", size = 2770523, upload-time = "2025-10-19T00:39:59.194Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ad/82be0b999c7a0a0b362cedfc183eb090b872fd42937af2d6e97d58bc70f8/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:ada59a4b3c59d4ac7162e0ed08667ffa78abf48e975c8a9f9d5b9bc50720f4fd", size = 2512909, upload-time = "2025-10-19T00:40:01.199Z" }, + { url = "https://files.pythonhosted.org/packages/25/21/45f07ab0339a20c518bc9006100922babc397ab7ea5ef40a395db83b9cdd/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a8957bcaea1ba01327a9b219d2adb84144377684f51444253890dab500ca171f", size = 2755345, upload-time = "2025-10-19T00:40:03.322Z" }, + { url = "https://files.pythonhosted.org/packages/8b/a7/e530bf2b304206f79b36d793caba1ff9448348713a41bb1ad0197714a0f2/cytoolz-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6d8cdc299d67eb0f3b9ecdafeeb55eb3b7b7470e2d950ac34b05ed4c7a5572b8", size = 2617790, upload-time = "2025-10-19T00:40:05.03Z" }, + { url = "https://files.pythonhosted.org/packages/9f/77/7f53092121d7431589344c7d65c3d43c4111547aafabb21d3ca9032d126c/cytoolz-1.1.0-cp310-cp310-win32.whl", hash = "sha256:d8e08464c5cdea4f6df31e84b11ed6bfd79cedb99fbcbfdc15eb9361a6053c5a", size = 900209, upload-time = "2025-10-19T00:40:06.647Z" }, + { url = "https://files.pythonhosted.org/packages/84/e4/902578658303b9bc76b1704d3ed85e6d307d311bd9fa0b919581bea56e62/cytoolz-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:7e49922a7ed54262d41960bf3b835a7700327bf79cff1e9bfc73d79021132ff8", size = 944802, upload-time = "2025-10-19T00:40:08.983Z" }, + { url = "https://files.pythonhosted.org/packages/71/9f/56a7003617b4eabd8ddfb470aacc240425cbe6ddeb756adfbbaadaa175f1/cytoolz-1.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:943a662d2e72ffc4438d43ab5a1de8d852237775a423236594a3b3e381b8032c", size = 904835, upload-time = "2025-10-19T00:40:11.024Z" }, + { url = "https://files.pythonhosted.org/packages/69/82/edf1d0c32b6222f2c22e5618d6db855d44eb59f9b6f22436ff963c5d0a5c/cytoolz-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:dba8e5a8c6e3c789d27b0eb5e7ce5ed7d032a7a9aae17ca4ba5147b871f6e327", size = 1314345, upload-time = "2025-10-19T00:40:13.273Z" }, + { url = "https://files.pythonhosted.org/packages/2d/b5/0e3c1edaa26c2bd9db90cba0ac62c85bbca84224c7ae1c2e0072c4ea64c5/cytoolz-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:44b31c05addb0889167a720123b3b497b28dd86f8a0aeaf3ae4ffa11e2c85d55", size = 989259, upload-time = "2025-10-19T00:40:15.196Z" }, + { url = "https://files.pythonhosted.org/packages/09/aa/e2b2ee9fc684867e817640764ea5807f9d25aa1e7bdba02dd4b249aab0f7/cytoolz-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:653cb18c4fc5d8a8cfce2bce650aabcbe82957cd0536827367d10810566d5294", size = 986551, upload-time = "2025-10-19T00:40:16.831Z" }, + { url = "https://files.pythonhosted.org/packages/39/9f/4e8ee41acf6674f10a9c2c9117b2f219429a5a0f09bba6135f34ca4f08a6/cytoolz-1.1.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:853a5b4806915020c890e1ce70cc056bbc1dd8bc44f2d74d555cccfd7aefba7d", size = 2688378, upload-time = "2025-10-19T00:40:18.552Z" }, + { url = "https://files.pythonhosted.org/packages/78/94/ef006f3412bc22444d855a0fc9ecb81424237fb4e5c1a1f8f5fb79ac978f/cytoolz-1.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7b44e9de86bea013fe84fd8c399d6016bbb96c37c5290769e5c99460b9c53e5", size = 2798299, upload-time = "2025-10-19T00:40:20.191Z" }, + { url = "https://files.pythonhosted.org/packages/df/aa/365953926ee8b4f2e07df7200c0d73632155908c8867af14b2d19cc9f1f7/cytoolz-1.1.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:098d628a801dc142e9740126be5624eb7aef1d732bc7a5719f60a2095547b485", size = 2639311, upload-time = "2025-10-19T00:40:22.289Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ee/62beaaee7df208f22590ad07ef8875519af49c52ca39d99460b14a00f15a/cytoolz-1.1.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:779ee4096ed7a82cffab89372ffc339631c285079dbf33dbe7aff1f6174985df", size = 2979532, upload-time = "2025-10-19T00:40:24.006Z" }, + { url = "https://files.pythonhosted.org/packages/c5/04/2211251e450bed111ada1194dc42c461da9aea441de62a01e4085ea6de9f/cytoolz-1.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f2ce18dd99533d077e9712f9faa852f389f560351b1efd2f2bdb193a95eddde2", size = 3018632, upload-time = "2025-10-19T00:40:26.175Z" }, + { url = "https://files.pythonhosted.org/packages/ed/a2/4a3400e4d07d3916172bf74fede08020d7b4df01595d8a97f1e9507af5ae/cytoolz-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ac266a34437812cf841cecbfe19f355ab9c3dd1ef231afc60415d40ff12a76e4", size = 2788579, upload-time = "2025-10-19T00:40:27.878Z" }, + { url = "https://files.pythonhosted.org/packages/fe/82/bb88caa53a41f600e7763c517d50e2efbbe6427ea395716a92b83f44882a/cytoolz-1.1.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1920b9b9c13d60d0bb6cd14594b3bce0870022eccb430618c37156da5f2b7a55", size = 2593024, upload-time = "2025-10-19T00:40:29.601Z" }, + { url = "https://files.pythonhosted.org/packages/09/a8/8b25e59570da16c7a0f173b8c6ec0aa6f3abd47fd385c007485acb459896/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47caa376dafd2bdc29f8a250acf59c810ec9105cd6f7680b9a9d070aae8490ec", size = 2715304, upload-time = "2025-10-19T00:40:31.151Z" }, + { url = "https://files.pythonhosted.org/packages/d4/56/faec7696f235521b926ffdf92c102f5b029f072d28e1020364e55b084820/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5ab2c97d8aaa522b038cca9187b1153347af22309e7c998b14750c6fdec7b1cb", size = 2654461, upload-time = "2025-10-19T00:40:32.884Z" }, + { url = "https://files.pythonhosted.org/packages/aa/82/f790ed167c04b8d2a33bed30770a9b7066fc4f573321d797190e5f05685f/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4bce006121b120e8b359244ee140bb0b1093908efc8b739db8dbaa3f8fb42139", size = 2672077, upload-time = "2025-10-19T00:40:34.543Z" }, + { url = "https://files.pythonhosted.org/packages/d9/b3/80b8183e7eee44f45bfa3cdd3ebdadf3dd43ffc686f96d442a6c4dded45d/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7fc0f1e4e9bb384d26e73c6657bbc26abdae4ff66a95933c00f3d578be89181b", size = 2881589, upload-time = "2025-10-19T00:40:36.315Z" }, + { url = "https://files.pythonhosted.org/packages/8f/05/ac5ba5ddb88a3ba7ecea4bf192194a838af564d22ea7a4812cbb6bd106ce/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:dd3f894ff972da1994d06ac6157d74e40dda19eb31fe5e9b7863ca4278c3a167", size = 2589924, upload-time = "2025-10-19T00:40:38.317Z" }, + { url = "https://files.pythonhosted.org/packages/8e/cd/100483cae3849d24351c8333a815dc6adaf3f04912486e59386d86d9db9a/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0846f49cf8a4496bd42659040e68bd0484ce6af819709cae234938e039203ba0", size = 2868059, upload-time = "2025-10-19T00:40:40.025Z" }, + { url = "https://files.pythonhosted.org/packages/34/6e/3a7c56b325772d39397fc3aafb4dc054273982097178b6c3917c6dad48de/cytoolz-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:16a3af394ade1973226d64bb2f9eb3336adbdea03ed5b134c1bbec5a3b20028e", size = 2721692, upload-time = "2025-10-19T00:40:41.621Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ca/9fdaee32c3bc769dfb7e7991d9499136afccea67e423d097b8fb3c5acbc1/cytoolz-1.1.0-cp311-cp311-win32.whl", hash = "sha256:b786c9c8aeab76cc2f76011e986f7321a23a56d985b77d14f155d5e5514ea781", size = 899349, upload-time = "2025-10-19T00:40:43.183Z" }, + { url = "https://files.pythonhosted.org/packages/fd/04/2ab98edeea90311e4029e1643e43d2027b54da61453292d9ea51a103ee87/cytoolz-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:ebf06d1c5344fb22fee71bf664234733e55db72d74988f2ecb7294b05e4db30c", size = 945831, upload-time = "2025-10-19T00:40:44.693Z" }, + { url = "https://files.pythonhosted.org/packages/b4/8d/777d86ea6bcc68b0fc926b0ef8ab51819e2176b37aadea072aac949d5231/cytoolz-1.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:b63f5f025fac893393b186e132e3e242de8ee7265d0cd3f5bdd4dda93f6616c9", size = 904076, upload-time = "2025-10-19T00:40:46.678Z" }, + { url = "https://files.pythonhosted.org/packages/c6/ec/01426224f7acf60183d3921b25e1a8e71713d3d39cb464d64ac7aace6ea6/cytoolz-1.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:99f8e134c9be11649342853ec8c90837af4089fc8ff1e8f9a024a57d1fa08514", size = 1327800, upload-time = "2025-10-19T00:40:48.674Z" }, + { url = "https://files.pythonhosted.org/packages/b4/07/e07e8fedd332ac9626ad58bea31416dda19bfd14310731fa38b16a97e15f/cytoolz-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0a6f44cf9319c30feb9a50aa513d777ef51efec16f31c404409e7deb8063df64", size = 997118, upload-time = "2025-10-19T00:40:50.919Z" }, + { url = "https://files.pythonhosted.org/packages/ab/72/c0f766d63ed2f9ea8dc8e1628d385d99b41fb834ce17ac3669e3f91e115d/cytoolz-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:945580dc158c557172fca899a35a99a16fbcebf6db0c77cb6621084bc82189f9", size = 991169, upload-time = "2025-10-19T00:40:52.887Z" }, + { url = "https://files.pythonhosted.org/packages/df/4b/1f757353d1bf33e56a7391ecc9bc49c1e529803b93a9d2f67fe5f92906fe/cytoolz-1.1.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:257905ec050d04f2f856854620d1e25556fd735064cebd81b460f54939b9f9d5", size = 2700680, upload-time = "2025-10-19T00:40:54.597Z" }, + { url = "https://files.pythonhosted.org/packages/25/73/9b25bb7ed8d419b9d6ff2ae0b3d06694de79a3f98f5169a1293ff7ad3a3f/cytoolz-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:82779049f352fb3ab5e8c993ab45edbb6e02efb1f17f0b50f4972c706cc51d76", size = 2824951, upload-time = "2025-10-19T00:40:56.137Z" }, + { url = "https://files.pythonhosted.org/packages/0c/93/9c787f7c909e75670fff467f2504725d06d8c3f51d6dfe22c55a08c8ccd4/cytoolz-1.1.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7d3e405e435320e08c5a1633afaf285a392e2d9cef35c925d91e2a31dfd7a688", size = 2679635, upload-time = "2025-10-19T00:40:57.799Z" }, + { url = "https://files.pythonhosted.org/packages/50/aa/9ee92c302cccf7a41a7311b325b51ebeff25d36c1f82bdc1bbe3f58dc947/cytoolz-1.1.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:923df8f5591e0d20543060c29909c149ab1963a7267037b39eee03a83dbc50a8", size = 2938352, upload-time = "2025-10-19T00:40:59.49Z" }, + { url = "https://files.pythonhosted.org/packages/6a/a3/3b58c5c1692c3bacd65640d0d5c7267a7ebb76204f7507aec29de7063d2f/cytoolz-1.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:25db9e4862f22ea0ae2e56c8bec9fc9fd756b655ae13e8c7b5625d7ed1c582d4", size = 3022121, upload-time = "2025-10-19T00:41:01.209Z" }, + { url = "https://files.pythonhosted.org/packages/e1/93/c647bc3334355088c57351a536c2d4a83dd45f7de591fab383975e45bff9/cytoolz-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7a98deb11ccd8e5d9f9441ef2ff3352aab52226a2b7d04756caaa53cd612363", size = 2857656, upload-time = "2025-10-19T00:41:03.456Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c2/43fea146bf4141deea959e19dcddf268c5ed759dec5c2ed4a6941d711933/cytoolz-1.1.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:dce4ee9fc99104bc77efdea80f32ca5a650cd653bcc8a1d984a931153d3d9b58", size = 2551284, upload-time = "2025-10-19T00:41:05.347Z" }, + { url = "https://files.pythonhosted.org/packages/6f/df/cdc7a81ce5cfcde7ef523143d545635fc37e80ccacce140ae58483a21da3/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80d6da158f7d20c15819701bbda1c041f0944ede2f564f5c739b1bc80a9ffb8b", size = 2721673, upload-time = "2025-10-19T00:41:07.528Z" }, + { url = "https://files.pythonhosted.org/packages/45/be/f8524bb9ad8812ad375e61238dcaa3177628234d1b908ad0b74e3657cafd/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3b5c5a192abda123ad45ef716ec9082b4cf7d95e9ada8291c5c2cc5558be858b", size = 2722884, upload-time = "2025-10-19T00:41:09.698Z" }, + { url = "https://files.pythonhosted.org/packages/23/e6/6bb8e4f9c267ad42d1ff77b6d2e4984665505afae50a216290e1d7311431/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5b399ce7d967b1cb6280250818b786be652aa8ddffd3c0bb5c48c6220d945ab5", size = 2685486, upload-time = "2025-10-19T00:41:11.349Z" }, + { url = "https://files.pythonhosted.org/packages/d7/dd/88619f9c8d2b682562c0c886bbb7c35720cb83fda2ac9a41bdd14073d9bd/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e7e29a1a03f00b4322196cfe8e2c38da9a6c8d573566052c586df83aacc5663c", size = 2839661, upload-time = "2025-10-19T00:41:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/b8/8d/4478ebf471ee78dd496d254dc0f4ad729cd8e6ba8257de4f0a98a2838ef2/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5291b117d71652a817ec164e7011f18e6a51f8a352cc9a70ed5b976c51102fda", size = 2547095, upload-time = "2025-10-19T00:41:16.054Z" }, + { url = "https://files.pythonhosted.org/packages/e6/68/f1dea33367b0b3f64e199c230a14a6b6f243c189020effafd31e970ca527/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8caef62f846a9011676c51bda9189ae394cdd6bb17f2946ecaedc23243268320", size = 2870901, upload-time = "2025-10-19T00:41:17.727Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9a/33591c09dfe799b8fb692cf2ad383e2c41ab6593cc960b00d1fc8a145655/cytoolz-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:de425c5a8e3be7bb3a195e19191d28d9eb3c2038046064a92edc4505033ec9cb", size = 2765422, upload-time = "2025-10-19T00:41:20.075Z" }, + { url = "https://files.pythonhosted.org/packages/60/2b/a8aa233c9416df87f004e57ae4280bd5e1f389b4943d179f01020c6ec629/cytoolz-1.1.0-cp312-cp312-win32.whl", hash = "sha256:296440a870e8d1f2e1d1edf98f60f1532b9d3ab8dfbd4b25ec08cd76311e79e5", size = 901933, upload-time = "2025-10-19T00:41:21.646Z" }, + { url = "https://files.pythonhosted.org/packages/ad/33/4c9bdf8390dc01d2617c7f11930697157164a52259b6818ddfa2f94f89f4/cytoolz-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:07156987f224c6dac59aa18fb8bf91e1412f5463961862716a3381bf429c8699", size = 947989, upload-time = "2025-10-19T00:41:23.288Z" }, + { url = "https://files.pythonhosted.org/packages/35/ac/6e2708835875f5acb52318462ed296bf94ed0cb8c7cb70e62fbd03f709e3/cytoolz-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:23e616b38f5b3160c7bb45b0f84a8f3deb4bd26b29fb2dfc716f241c738e27b8", size = 903913, upload-time = "2025-10-19T00:41:24.992Z" }, + { url = "https://files.pythonhosted.org/packages/71/4a/b3ddb3ee44fe0045e95dd973746f93f033b6f92cce1fc3cbbe24b329943c/cytoolz-1.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:76c9b58555300be6dde87a41faf1f97966d79b9a678b7a526fcff75d28ef4945", size = 976728, upload-time = "2025-10-19T00:41:26.5Z" }, + { url = "https://files.pythonhosted.org/packages/42/21/a3681434aa425875dd828bb515924b0f12c37a55c7d2bc5c0c5de3aeb0b4/cytoolz-1.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d1d638b10d3144795655e9395566ce35807df09219fd7cacd9e6acbdef67946a", size = 986057, upload-time = "2025-10-19T00:41:28.911Z" }, + { url = "https://files.pythonhosted.org/packages/d9/cb/efc1b29e211e0670a6953222afaac84dcbba5cb940b130c0e49858978040/cytoolz-1.1.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:26801c1a165e84786a99e03c9c9973356caaca002d66727b761fb1042878ef06", size = 992632, upload-time = "2025-10-19T00:41:30.612Z" }, + { url = "https://files.pythonhosted.org/packages/be/b0/e50621d21e939338c97faab651f58ea7fa32101226a91de79ecfb89d71e1/cytoolz-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2a9a464542912d3272f6dccc5142df057c71c6a5cbd30439389a732df401afb7", size = 1317534, upload-time = "2025-10-19T00:41:32.625Z" }, + { url = "https://files.pythonhosted.org/packages/0d/6b/25aa9739b0235a5bc4c1ea293186bc6822a4c6607acfe1422423287e7400/cytoolz-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ed6104fa942aa5784bf54f339563de637557e3443b105760bc4de8f16a7fc79b", size = 992336, upload-time = "2025-10-19T00:41:34.073Z" }, + { url = "https://files.pythonhosted.org/packages/e1/53/5f4deb0ff958805309d135d899c764364c1e8a632ce4994bd7c45fb98df2/cytoolz-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56161f0ab60dc4159ec343509abaf809dc88e85c7e420e354442c62e3e7cbb77", size = 986118, upload-time = "2025-10-19T00:41:35.7Z" }, + { url = "https://files.pythonhosted.org/packages/1c/e3/f6255b76c8cc0debbe1c0779130777dc0434da6d9b28a90d9f76f8cb67cd/cytoolz-1.1.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:832bd36cc9123535f1945acf6921f8a2a15acc19cfe4065b1c9b985a28671886", size = 2679563, upload-time = "2025-10-19T00:41:37.926Z" }, + { url = "https://files.pythonhosted.org/packages/59/8a/acc6e39a84e930522b965586ad3a36694f9bf247b23188ee0eb47b1c9ed1/cytoolz-1.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1842636b6e034f229bf084c2bcdcfd36c8437e752eefd2c74ce9e2f10415cb6e", size = 2813020, upload-time = "2025-10-19T00:41:39.935Z" }, + { url = "https://files.pythonhosted.org/packages/db/f5/0083608286ad1716eda7c41f868e85ac549f6fd6b7646993109fa0bdfd98/cytoolz-1.1.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:823df012ab90d2f2a0f92fea453528539bf71ac1879e518524cd0c86aa6df7b9", size = 2669312, upload-time = "2025-10-19T00:41:41.55Z" }, + { url = "https://files.pythonhosted.org/packages/47/a8/d16080b575520fe5da00cede1ece4e0a4180ec23f88dcdc6a2f5a90a7f7f/cytoolz-1.1.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2f1fcf9e7e7b3487883ff3f815abc35b89dcc45c4cf81c72b7ee457aa72d197b", size = 2922147, upload-time = "2025-10-19T00:41:43.252Z" }, + { url = "https://files.pythonhosted.org/packages/7e/bc/716c9c1243701e58cad511eb3937fd550e645293c5ed1907639c5d66f194/cytoolz-1.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4cdb3fa1772116827f263f25b0cdd44c663b6701346a56411960534a06c082de", size = 2981602, upload-time = "2025-10-19T00:41:45.354Z" }, + { url = "https://files.pythonhosted.org/packages/14/bc/571b232996846b27f4ac0c957dc8bf60261e9b4d0d01c8d955e82329544e/cytoolz-1.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d1b5c95041741b81430454db65183e133976f45ac3c03454cfa8147952568529", size = 2830103, upload-time = "2025-10-19T00:41:47.959Z" }, + { url = "https://files.pythonhosted.org/packages/5b/55/c594afb46ecd78e4b7e1fb92c947ed041807875661ceda73baaf61baba4f/cytoolz-1.1.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b2079fd9f1a65f4c61e6278c8a6d4f85edf30c606df8d5b32f1add88cbbe2286", size = 2533802, upload-time = "2025-10-19T00:41:49.683Z" }, + { url = "https://files.pythonhosted.org/packages/93/83/1edcf95832555a78fc43b975f3ebe8ceadcc9664dd47fd33747a14df5069/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a92a320d72bef1c7e2d4c6d875125cf57fc38be45feb3fac1bfa64ea401f54a4", size = 2706071, upload-time = "2025-10-19T00:41:51.386Z" }, + { url = "https://files.pythonhosted.org/packages/e2/df/035a408df87f25cfe3611557818b250126cd2281b2104cd88395de205583/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:06d1c79aa51e6a92a90b0e456ebce2288f03dd6a76c7f582bfaa3eda7692e8a5", size = 2707575, upload-time = "2025-10-19T00:41:53.305Z" }, + { url = "https://files.pythonhosted.org/packages/7a/a4/ef78e13e16e93bf695a9331321d75fbc834a088d941f1c19e6b63314e257/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e1d7be25f6971e986a52b6d3a0da28e1941850985417c35528f6823aef2cfec5", size = 2660486, upload-time = "2025-10-19T00:41:55.542Z" }, + { url = "https://files.pythonhosted.org/packages/30/7a/2c3d60682b26058d435416c4e90d4a94db854de5be944dfd069ed1be648a/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:964b248edc31efc50a65e9eaa0c845718503823439d2fa5f8d2c7e974c2b5409", size = 2819605, upload-time = "2025-10-19T00:41:58.257Z" }, + { url = "https://files.pythonhosted.org/packages/45/92/19b722a1d83cc443fbc0c16e0dc376f8a451437890d3d9ee370358cf0709/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c9ff2b3c57c79b65cb5be14a18c6fd4a06d5036fb3f33e973a9f70e9ac13ca28", size = 2533559, upload-time = "2025-10-19T00:42:00.324Z" }, + { url = "https://files.pythonhosted.org/packages/1d/15/fa3b7891da51115204416f14192081d3dea0eaee091f123fdc1347de8dd1/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:22290b73086af600042d99f5ce52a43d4ad9872c382610413176e19fc1d4fd2d", size = 2839171, upload-time = "2025-10-19T00:42:01.881Z" }, + { url = "https://files.pythonhosted.org/packages/46/40/d3519d5cd86eebebf1e8b7174ec32dfb6ecec67b48b0cfb92bf226659b5a/cytoolz-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a2ade74fccd080ea793382968913ee38d7a35c921df435bbf0a6aeecf0d17574", size = 2743379, upload-time = "2025-10-19T00:42:03.809Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/a9e7511f0a13fdbefa5bf73cf8e4763878140de9453fd3e50d6ac57b6be7/cytoolz-1.1.0-cp313-cp313-win32.whl", hash = "sha256:db5dbcfda1c00e937426cbf9bdc63c24ebbc358c3263bfcbc1ab4a88dc52aa8e", size = 900844, upload-time = "2025-10-19T00:42:05.967Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a4/fb7eb403c6a4c81e5a30363f34a71adcc8bf5292dc8ea32e2440aa5668f2/cytoolz-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9e2d3fe3b45c3eb7233746f7aca37789be3dceec3e07dcc406d3e045ea0f7bdc", size = 946461, upload-time = "2025-10-19T00:42:07.983Z" }, + { url = "https://files.pythonhosted.org/packages/93/bb/1c8c33d353548d240bc6e8677ee8c3560ce5fa2f084e928facf7c35a6dcf/cytoolz-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:32c559f95ff44a9ebcbd934acaa1e6dc8f3e6ffce4762a79a88528064873d6d5", size = 902673, upload-time = "2025-10-19T00:42:09.982Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/4a53acc60f59030fcaf48c7766e3c4c81bd997379425aa45b129396557b5/cytoolz-1.1.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:9e2cd93b28f667c5870a070ab2b8bb4397470a85c4b204f2454b0ad001cd1ca3", size = 1372336, upload-time = "2025-10-19T00:42:12.104Z" }, + { url = "https://files.pythonhosted.org/packages/ac/90/f28fd8ad8319d8f5c8da69a2c29b8cf52a6d2c0161602d92b366d58926ab/cytoolz-1.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f494124e141a9361f31d79875fe7ea459a3be2b9dadd90480427c0c52a0943d4", size = 1011930, upload-time = "2025-10-19T00:42:14.231Z" }, + { url = "https://files.pythonhosted.org/packages/c9/95/4561c4e0ad1c944f7673d6d916405d68080f10552cfc5d69a1cf2475a9a1/cytoolz-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:53a3262bf221f19437ed544bf8c0e1980c81ac8e2a53d87a9bc075dba943d36f", size = 1020610, upload-time = "2025-10-19T00:42:15.877Z" }, + { url = "https://files.pythonhosted.org/packages/c3/14/b2e1ffa4995ec36e1372e243411ff36325e4e6d7ffa34eb4098f5357d176/cytoolz-1.1.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:47663e57d3f3f124921f38055e86a1022d0844c444ede2e8f090d3bbf80deb65", size = 2917327, upload-time = "2025-10-19T00:42:17.706Z" }, + { url = "https://files.pythonhosted.org/packages/4a/29/7cab6c609b4514ac84cca2f7dca6c509977a8fc16d27c3a50e97f105fa6a/cytoolz-1.1.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5a8755c4104ee4e3d5ba434c543b5f85fdee6a1f1df33d93f518294da793a60", size = 3108951, upload-time = "2025-10-19T00:42:19.363Z" }, + { url = "https://files.pythonhosted.org/packages/9a/71/1d1103b819458679277206ad07d78ca6b31c4bb88d6463fd193e19bfb270/cytoolz-1.1.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4d96ff3d381423af1b105295f97de86d1db51732c9566eb37378bab6670c5010", size = 2807149, upload-time = "2025-10-19T00:42:20.964Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d4/3d83a05a21e7d2ed2b9e6daf489999c29934b005de9190272b8a2e3735d0/cytoolz-1.1.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0ec96b3d537cdf47d4e76ded199f7440715f4c71029b45445cff92c1248808c2", size = 3111608, upload-time = "2025-10-19T00:42:22.684Z" }, + { url = "https://files.pythonhosted.org/packages/51/88/96f68354c3d4af68de41f0db4fe41a23b96a50a4a416636cea325490cfeb/cytoolz-1.1.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:208e2f2ef90a32b0acbff3303d90d89b13570a228d491d2e622a7883a3c68148", size = 3179373, upload-time = "2025-10-19T00:42:24.395Z" }, + { url = "https://files.pythonhosted.org/packages/ce/50/ed87a5cd8e6f27ffbb64c39e9730e18ec66c37631db2888ae711909f10c9/cytoolz-1.1.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d416a81bb0bd517558668e49d30a7475b5445f9bbafaab7dcf066f1e9adba36", size = 3003120, upload-time = "2025-10-19T00:42:26.18Z" }, + { url = "https://files.pythonhosted.org/packages/d3/a7/acde155b050d6eaa8e9c7845c98fc5fb28501568e78e83ebbf44f8855274/cytoolz-1.1.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f32e94c91ffe49af04835ee713ebd8e005c85ebe83e7e1fdcc00f27164c2d636", size = 2703225, upload-time = "2025-10-19T00:42:27.93Z" }, + { url = "https://files.pythonhosted.org/packages/1b/b6/9d518597c5bdea626b61101e8d2ff94124787a42259dafd9f5fc396f346a/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15d0c6405efc040499c46df44056a5c382f551a7624a41cf3e4c84a96b988a15", size = 2956033, upload-time = "2025-10-19T00:42:29.993Z" }, + { url = "https://files.pythonhosted.org/packages/89/7a/93e5f860926165538c85e1c5e1670ad3424f158df810f8ccd269da652138/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:bf069c5381d757debae891401b88b3a346ba3a28ca45ba9251103b282463fad8", size = 2862950, upload-time = "2025-10-19T00:42:31.803Z" }, + { url = "https://files.pythonhosted.org/packages/76/e6/99d6af00487bedc27597b54c9fcbfd5c833a69c6b7a9b9f0fff777bfc7aa/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7d5cf15892e63411ec1bd67deff0e84317d974e6ab2cdfefdd4a7cea2989df66", size = 2861757, upload-time = "2025-10-19T00:42:33.625Z" }, + { url = "https://files.pythonhosted.org/packages/71/ca/adfa1fb7949478135a37755cb8e88c20cd6b75c22a05f1128f05f3ab2c60/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:3e3872c21170f8341656f8692f8939e8800dcee6549ad2474d4c817bdefd62cd", size = 2979049, upload-time = "2025-10-19T00:42:35.377Z" }, + { url = "https://files.pythonhosted.org/packages/70/4c/7bf47a03a4497d500bc73d4204e2d907771a017fa4457741b2a1d7c09319/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:b9ddeff8e8fd65eb1fcefa61018100b2b627e759ea6ad275d2e2a93ffac147bf", size = 2699492, upload-time = "2025-10-19T00:42:37.133Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e7/3d034b0e4817314f07aa465d5864e9b8df9d25cb260a53dd84583e491558/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:02feeeda93e1fa3b33414eb57c2b0aefd1db8f558dd33fdfcce664a0f86056e4", size = 2995646, upload-time = "2025-10-19T00:42:38.912Z" }, + { url = "https://files.pythonhosted.org/packages/c1/62/be357181c71648d9fe1d1ce91cd42c63457dcf3c158e144416fd51dced83/cytoolz-1.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d08154ad45349162b6c37f12d5d1b2e6eef338e657b85e1621e4e6a4a69d64cb", size = 2919481, upload-time = "2025-10-19T00:42:40.85Z" }, + { url = "https://files.pythonhosted.org/packages/62/d5/bf5434fde726c4f80cb99912b2d8e0afa1587557e2a2d7e0315eb942f2de/cytoolz-1.1.0-cp313-cp313t-win32.whl", hash = "sha256:10ae4718a056948d73ca3e1bb9ab1f95f897ec1e362f829b9d37cc29ab566c60", size = 951595, upload-time = "2025-10-19T00:42:42.877Z" }, + { url = "https://files.pythonhosted.org/packages/64/29/39c161e9204a9715321ddea698cbd0abc317e78522c7c642363c20589e71/cytoolz-1.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:1bb77bc6197e5cb19784b6a42bb0f8427e81737a630d9d7dda62ed31733f9e6c", size = 1004445, upload-time = "2025-10-19T00:42:44.855Z" }, + { url = "https://files.pythonhosted.org/packages/e2/5a/7cbff5e9a689f558cb0bdf277f9562b2ac51acf7cd15e055b8c3efb0e1ef/cytoolz-1.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:563dda652c6ff52d215704fbe6b491879b78d7bbbb3a9524ec8e763483cb459f", size = 926207, upload-time = "2025-10-19T00:42:46.456Z" }, + { url = "https://files.pythonhosted.org/packages/b7/e8/297a85ba700f437c01eba962428e6ab4572f6c3e68e8ff442ce5c9d3a496/cytoolz-1.1.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d542cee7c7882d2a914a33dec4d3600416fb336734df979473249d4c53d207a1", size = 980613, upload-time = "2025-10-19T00:42:47.988Z" }, + { url = "https://files.pythonhosted.org/packages/e8/d7/2b02c9d18e9cc263a0e22690f78080809f1eafe72f26b29ccc115d3bf5c8/cytoolz-1.1.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:31922849b701b0f24bb62e56eb2488dcd3aa6ae3057694bd6b3b7c4c2bc27c2f", size = 990476, upload-time = "2025-10-19T00:42:49.653Z" }, + { url = "https://files.pythonhosted.org/packages/89/26/b6b159d2929310fca0eff8a4989cd4b1ecbdf7c46fdff46c7a20fcae55c8/cytoolz-1.1.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:e68308d32afd31943314735c1335e4ab5696110e96b405f6bdb8f2a8dc771a16", size = 992712, upload-time = "2025-10-19T00:42:51.306Z" }, + { url = "https://files.pythonhosted.org/packages/42/a0/f7c572aa151ed466b0fce4a327c3cc916d3ef3c82e341be59ea4b9bee9e4/cytoolz-1.1.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fc4bb48b3b866e1867f7c6411a4229e5b44be3989060663713e10efc24c9bd5f", size = 1322596, upload-time = "2025-10-19T00:42:52.978Z" }, + { url = "https://files.pythonhosted.org/packages/72/7c/a55d035e20b77b6725e85c8f1a418b3a4c23967288b8b0c2d1a40f158cbe/cytoolz-1.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:456f77207d1445025d7ef262b8370a05492dcb1490cb428b0f3bf1bd744a89b0", size = 992825, upload-time = "2025-10-19T00:42:55.026Z" }, + { url = "https://files.pythonhosted.org/packages/03/af/39d2d3db322136e12e9336a1f13bab51eab88b386bfb11f91d3faff8ba34/cytoolz-1.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:174ebc71ebb20a9baeffce6ee07ee2cd913754325c93f99d767380d8317930f7", size = 990525, upload-time = "2025-10-19T00:42:56.666Z" }, + { url = "https://files.pythonhosted.org/packages/a6/bd/65d7a869d307f9b10ad45c2c1cbb40b81a8d0ed1138fa17fd904f5c83298/cytoolz-1.1.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8b3604fef602bcd53415055a4f68468339192fd17be39e687ae24f476d23d56e", size = 2672409, upload-time = "2025-10-19T00:42:58.81Z" }, + { url = "https://files.pythonhosted.org/packages/2d/fb/74dfd844bfd67e810bd36e8e3903a143035447245828e7fcd7c81351d775/cytoolz-1.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3604b959a01f64c366e7d10ec7634d5f5cfe10301e27a8f090f6eb3b2a628a18", size = 2808477, upload-time = "2025-10-19T00:43:00.577Z" }, + { url = "https://files.pythonhosted.org/packages/d6/1f/587686c43e31c19241ec317da66438d093523921ea7749bbc65558a30df9/cytoolz-1.1.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6db2127a3c1bc2f59f08010d2ae53a760771a9de2f67423ad8d400e9ba4276e8", size = 2636881, upload-time = "2025-10-19T00:43:02.24Z" }, + { url = "https://files.pythonhosted.org/packages/bc/6d/90468cd34f77cb38a11af52c4dc6199efcc97a486395a21bef72e9b7602e/cytoolz-1.1.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56584745ac647993a016a21bc76399113b7595e312f8d0a1b140c9fcf9b58a27", size = 2937315, upload-time = "2025-10-19T00:43:03.954Z" }, + { url = "https://files.pythonhosted.org/packages/d9/50/7b92cd78c613b92e3509e6291d3fb7e0d72ebda999a8df806a96c40ca9ab/cytoolz-1.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:db2c4c3a7f7bd7e03bb1a236a125c8feb86c75802f4ecda6ecfaf946610b2930", size = 2959988, upload-time = "2025-10-19T00:43:05.758Z" }, + { url = "https://files.pythonhosted.org/packages/44/d5/34b5a28a8d9bb329f984b4c2259407ca3f501d1abeb01bacea07937d85d1/cytoolz-1.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:48cb8a692111a285d2b9acd16d185428176bfbffa8a7c274308525fccd01dd42", size = 2795116, upload-time = "2025-10-19T00:43:07.411Z" }, + { url = "https://files.pythonhosted.org/packages/f5/d9/5dd829e33273ec03bdc3c812e6c3281987ae2c5c91645582f6c331544a64/cytoolz-1.1.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d2f344ba5eb17dcf38ee37fdde726f69053f54927db8f8a1bed6ac61e5b1890d", size = 2535390, upload-time = "2025-10-19T00:43:09.104Z" }, + { url = "https://files.pythonhosted.org/packages/87/1f/7f9c58068a8eec2183110df051bc6b69dd621143f84473eeb6dc1b32905a/cytoolz-1.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:abf76b1c1abd031f098f293b6d90ee08bdaa45f8b5678430e331d991b82684b1", size = 2704834, upload-time = "2025-10-19T00:43:10.942Z" }, + { url = "https://files.pythonhosted.org/packages/d2/90/667def5665333575d01a65fe3ec0ca31b897895f6e3bc1a42d6ea3659369/cytoolz-1.1.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:ddf9a38a5b686091265ff45b53d142e44a538cd6c2e70610d3bc6be094219032", size = 2658441, upload-time = "2025-10-19T00:43:12.655Z" }, + { url = "https://files.pythonhosted.org/packages/23/79/6615f9a14960bd29ac98b823777b6589357833f65cf1a11b5abc1587c120/cytoolz-1.1.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:946786755274f07bb2be0400f28adb31d7d85a7c7001873c0a8e24a503428fb3", size = 2654766, upload-time = "2025-10-19T00:43:14.325Z" }, + { url = "https://files.pythonhosted.org/packages/b0/99/be59c6e0ae02153ef10ae1ff0f380fb19d973c651b50cf829a731f6c9e79/cytoolz-1.1.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:d5b8f78b9fed79cf185ad4ddec099abeef45951bdcb416c5835ba05f0a1242c7", size = 2827649, upload-time = "2025-10-19T00:43:16.132Z" }, + { url = "https://files.pythonhosted.org/packages/19/b7/854ddcf9f9618844108677c20d48f4611b5c636956adea0f0e85e027608f/cytoolz-1.1.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:fccde6efefdbc02e676ccb352a2ccc8a8e929f59a1c6d3d60bb78e923a49ca44", size = 2533456, upload-time = "2025-10-19T00:43:17.764Z" }, + { url = "https://files.pythonhosted.org/packages/45/66/bfe6fbb2bdcf03c8377c8c2f542576e15f3340c905a09d78a6cb3badd39a/cytoolz-1.1.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:717b7775313da5f51b0fbf50d865aa9c39cb241bd4cb605df3cf2246d6567397", size = 2826455, upload-time = "2025-10-19T00:43:19.561Z" }, + { url = "https://files.pythonhosted.org/packages/c3/0c/cce4047bd927e95f59e73319c02c9bc86bd3d76392e0eb9e41a1147a479c/cytoolz-1.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5158744a09d0e0e4a4f82225e3a3c4ebf38f9ae74467aaa905467270e52f2794", size = 2714897, upload-time = "2025-10-19T00:43:21.291Z" }, + { url = "https://files.pythonhosted.org/packages/ac/9a/061323bb289b565802bad14fb7ab59fcd8713105df142bcf4dd9ff64f8ac/cytoolz-1.1.0-cp314-cp314-win32.whl", hash = "sha256:1ed534bdbbf063b2bb28fca7d0f6723a3e5a72b086e7c7fe6d74ae8c3e4d00e2", size = 901490, upload-time = "2025-10-19T00:43:22.895Z" }, + { url = "https://files.pythonhosted.org/packages/a3/20/1f3a733d710d2a25d6f10b463bef55ada52fe6392a5d233c8d770191f48a/cytoolz-1.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:472c1c9a085f5ad973ec0ad7f0b9ba0969faea6f96c9e397f6293d386f3a25ec", size = 946730, upload-time = "2025-10-19T00:43:24.838Z" }, + { url = "https://files.pythonhosted.org/packages/f2/22/2d657db4a5d1c10a152061800f812caba9ef20d7bd2406f51a5fd800c180/cytoolz-1.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:a7ad7ca3386fa86bd301be3fa36e7f0acb024f412f665937955acfc8eb42deff", size = 905722, upload-time = "2025-10-19T00:43:26.439Z" }, + { url = "https://files.pythonhosted.org/packages/19/97/b4a8c76796a9a8b9bc90c7992840fa1589a1af8e0426562dea4ce9b384a7/cytoolz-1.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:64b63ed4b71b1ba813300ad0f06b8aff19a12cf51116e0e4f1ed837cea4debcf", size = 1372606, upload-time = "2025-10-19T00:43:28.491Z" }, + { url = "https://files.pythonhosted.org/packages/08/d4/a1bb1a32b454a2d650db8374ff3bf875ba0fc1c36e6446ec02a83b9140a1/cytoolz-1.1.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a60ba6f2ed9eb0003a737e1ee1e9fa2258e749da6477946008d4324efa25149f", size = 1012189, upload-time = "2025-10-19T00:43:30.177Z" }, + { url = "https://files.pythonhosted.org/packages/21/4b/2f5cbbd81588918ee7dd70cffb66731608f578a9b72166aafa991071af7d/cytoolz-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1aa58e2434d732241f7f051e6f17657e969a89971025e24578b5cbc6f1346485", size = 1020624, upload-time = "2025-10-19T00:43:31.712Z" }, + { url = "https://files.pythonhosted.org/packages/f5/99/c4954dd86cd593cd776a038b36795a259b8b5c12cbab6363edf5f6d9c909/cytoolz-1.1.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:6965af3fc7214645970e312deb9bd35a213a1eaabcfef4f39115e60bf2f76867", size = 2917016, upload-time = "2025-10-19T00:43:33.531Z" }, + { url = "https://files.pythonhosted.org/packages/b2/7c/f1f70a17e272b433232bc8a27df97e46b202d6cc07e3b0d63f7f41ba0f2d/cytoolz-1.1.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddd2863f321d67527d3b67a93000a378ad6f967056f68c06467fe011278a6d0e", size = 3107634, upload-time = "2025-10-19T00:43:35.57Z" }, + { url = "https://files.pythonhosted.org/packages/8f/bd/c3226a57474b4aef1f90040510cba30d0decd3515fed48dc229b37c2f898/cytoolz-1.1.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4e6b428e9eb5126053c2ae0efa62512ff4b38ed3951f4d0888ca7005d63e56f5", size = 2806221, upload-time = "2025-10-19T00:43:37.707Z" }, + { url = "https://files.pythonhosted.org/packages/c3/47/2f7bfe4aaa1e07dc9828bea228ed744faf73b26aee0c1bdf3b5520bf1909/cytoolz-1.1.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d758e5ef311d2671e0ae8c214c52e44617cf1e58bef8f022b547b9802a5a7f30", size = 3107671, upload-time = "2025-10-19T00:43:39.401Z" }, + { url = "https://files.pythonhosted.org/packages/4d/12/6ff3b04fbd1369d0fcd5f8b5910ba6e427e33bf113754c4c35ec3f747924/cytoolz-1.1.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a95416eca473e6c1179b48d86adcf528b59c63ce78f4cb9934f2e413afa9b56b", size = 3176350, upload-time = "2025-10-19T00:43:41.148Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8c/6691d986b728e77b5d2872743ebcd962d37a2d0f7e9ad95a81b284fbf905/cytoolz-1.1.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:36c8ede93525cf11e2cc787b7156e5cecd7340193ef800b816a16f1404a8dc6d", size = 3001173, upload-time = "2025-10-19T00:43:42.923Z" }, + { url = "https://files.pythonhosted.org/packages/7a/cb/f59d83a5058e1198db5a1f04e4a124c94d60390e4fa89b6d2e38ee8288a0/cytoolz-1.1.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c949755b6d8a649c5fbc888bc30915926f1b09fe42fea9f289e297c2f6ddd3", size = 2701374, upload-time = "2025-10-19T00:43:44.716Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f0/1ae6d28df503b0bdae094879da2072b8ba13db5919cd3798918761578411/cytoolz-1.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e1b6d37545816905a76d9ed59fa4e332f929e879f062a39ea0f6f620405cdc27", size = 2953081, upload-time = "2025-10-19T00:43:47.103Z" }, + { url = "https://files.pythonhosted.org/packages/f4/06/d86fe811c6222dc32d3e08f5d88d2be598a6055b4d0590e7c1428d55c386/cytoolz-1.1.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:05332112d4087904842b36954cd1d3fc0e463a2f4a7ef9477bd241427c593c3b", size = 2862228, upload-time = "2025-10-19T00:43:49.353Z" }, + { url = "https://files.pythonhosted.org/packages/ae/32/978ef6f42623be44a0a03ae9de875ab54aa26c7e38c5c4cd505460b0927d/cytoolz-1.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:31538ca2fad2d688cbd962ccc3f1da847329e2258a52940f10a2ac0719e526be", size = 2861971, upload-time = "2025-10-19T00:43:51.028Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f7/74c69497e756b752b359925d1feef68b91df024a4124a823740f675dacd3/cytoolz-1.1.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:747562aa70abf219ea16f07d50ac0157db856d447f7f498f592e097cbc77df0b", size = 2975304, upload-time = "2025-10-19T00:43:52.99Z" }, + { url = "https://files.pythonhosted.org/packages/5b/2b/3ce0e6889a6491f3418ad4d84ae407b8456b02169a5a1f87990dbba7433b/cytoolz-1.1.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:3dc15c48b20c0f467e15e341e102896c8422dccf8efc6322def5c1b02f074629", size = 2697371, upload-time = "2025-10-19T00:43:55.312Z" }, + { url = "https://files.pythonhosted.org/packages/15/87/c616577f0891d97860643c845f7221e95240aa589586de727e28a5eb6e52/cytoolz-1.1.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:3c03137ee6103ba92d5d6ad6a510e86fded69cd67050bd8a1843f15283be17ac", size = 2992436, upload-time = "2025-10-19T00:43:57.253Z" }, + { url = "https://files.pythonhosted.org/packages/e7/9f/490c81bffb3428ab1fa114051fbb5ba18aaa2e2fe4da5bf4170ca524e6b3/cytoolz-1.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:be8e298d88f88bd172b59912240558be3b7a04959375646e7fd4996401452941", size = 2917612, upload-time = "2025-10-19T00:43:59.423Z" }, + { url = "https://files.pythonhosted.org/packages/66/35/0fec2769660ca6472bbf3317ab634675827bb706d193e3240aaf20eab961/cytoolz-1.1.0-cp314-cp314t-win32.whl", hash = "sha256:3d407140f5604a89578285d4aac7b18b8eafa055cf776e781aabb89c48738fad", size = 960842, upload-time = "2025-10-19T00:44:01.143Z" }, + { url = "https://files.pythonhosted.org/packages/46/b4/b7ce3d3cd20337becfec978ecfa6d0ef64884d0cf32d44edfed8700914b9/cytoolz-1.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:56e5afb69eb6e1b3ffc34716ee5f92ffbdb5cb003b3a5ca4d4b0fe700e217162", size = 1020835, upload-time = "2025-10-19T00:44:03.246Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1f/0498009aa563a9c5d04f520aadc6e1c0942434d089d0b2f51ea986470f55/cytoolz-1.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:27b19b4a286b3ff52040efa42dbe403730aebe5fdfd2def704eb285e2125c63e", size = 927963, upload-time = "2025-10-19T00:44:04.85Z" }, + { url = "https://files.pythonhosted.org/packages/84/32/0522207170294cf691112a93c70a8ef942f60fa9ff8e793b63b1f09cedc0/cytoolz-1.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f32e93a55681d782fc6af939f6df36509d65122423cbc930be39b141064adff8", size = 922014, upload-time = "2025-10-19T00:44:44.911Z" }, + { url = "https://files.pythonhosted.org/packages/4c/49/9be2d24adaa18fa307ff14e3e43f02b2ae4b69c4ce51cee6889eb2114990/cytoolz-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5d9bc596751cbda8073e65be02ca11706f00029768fbbbc81e11a8c290bb41aa", size = 918134, upload-time = "2025-10-19T00:44:47.122Z" }, + { url = "https://files.pythonhosted.org/packages/5c/b3/6a76c3b94c6c87c72ea822e7e67405be6b649c2e37778eeac7c0c0c69de8/cytoolz-1.1.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9b16660d01c3931951fab49db422c627897c38c1a1f0393a97582004019a4887", size = 981970, upload-time = "2025-10-19T00:44:48.906Z" }, + { url = "https://files.pythonhosted.org/packages/f6/8a/606e4c7ed14aa6a86aee6ca84a2cb804754dc6c4905b8f94e09e49f1ce60/cytoolz-1.1.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b7de5718e2113d4efccea3f06055758cdbc17388ecc3341ba4d1d812837d7c1a", size = 978877, upload-time = "2025-10-19T00:44:50.819Z" }, + { url = "https://files.pythonhosted.org/packages/97/ec/ad474dcb1f6c1ebfdda3c2ad2edbb1af122a0e79c9ff2cb901ffb5f59662/cytoolz-1.1.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a12a2a1a6bc44099491c05a12039efa08cc33a3d0f8c7b0566185e085e139283", size = 964279, upload-time = "2025-10-19T00:44:52.476Z" }, + { url = "https://files.pythonhosted.org/packages/68/8c/d245fd416c69d27d51f14d5ad62acc4ee5971088ee31c40ffe1cc109af68/cytoolz-1.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:047defa7f5f9a32f82373dbc3957289562e8a3fa58ae02ec8e4dca4f43a33a21", size = 916630, upload-time = "2025-10-19T00:44:54.059Z" }, ] [[package]] @@ -391,9 +508,9 @@ dependencies = [ { name = "eth-utils" }, { name = "parsimonious" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/00/71/d9e1380bd77fd22f98b534699af564f189b56d539cc2b9dab908d4e4c242/eth_abi-5.2.0.tar.gz", hash = "sha256:178703fa98c07d8eecd5ae569e7e8d159e493ebb6eeb534a8fe973fbc4e40ef0", size = 49797 } +sdist = { url = "https://files.pythonhosted.org/packages/00/71/d9e1380bd77fd22f98b534699af564f189b56d539cc2b9dab908d4e4c242/eth_abi-5.2.0.tar.gz", hash = "sha256:178703fa98c07d8eecd5ae569e7e8d159e493ebb6eeb534a8fe973fbc4e40ef0", size = 49797, upload-time = "2025-01-14T16:29:34.629Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/b4/2f3982c4cbcbf5eeb6aec62df1533c0e63c653b3021ff338d44944405676/eth_abi-5.2.0-py3-none-any.whl", hash = "sha256:17abe47560ad753f18054f5b3089fcb588f3e3a092136a416b6c1502cb7e8877", size = 28511 }, + { url = "https://files.pythonhosted.org/packages/7a/b4/2f3982c4cbcbf5eeb6aec62df1533c0e63c653b3021ff338d44944405676/eth_abi-5.2.0-py3-none-any.whl", hash = "sha256:17abe47560ad753f18054f5b3089fcb588f3e3a092136a416b6c1502cb7e8877", size = 28511, upload-time = "2025-01-14T16:29:31.862Z" }, ] [[package]] @@ -412,18 +529,18 @@ dependencies = [ { name = "pydantic" }, { name = "rlp" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/74/cf/20f76a29be97339c969fd765f1237154286a565a1d61be98e76bb7af946a/eth_account-0.13.7.tar.gz", hash = "sha256:5853ecbcbb22e65411176f121f5f24b8afeeaf13492359d254b16d8b18c77a46", size = 935998 } +sdist = { url = "https://files.pythonhosted.org/packages/74/cf/20f76a29be97339c969fd765f1237154286a565a1d61be98e76bb7af946a/eth_account-0.13.7.tar.gz", hash = "sha256:5853ecbcbb22e65411176f121f5f24b8afeeaf13492359d254b16d8b18c77a46", size = 935998, upload-time = "2025-04-21T21:11:21.204Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/18/088fb250018cbe665bc2111974301b2d59f294a565aff7564c4df6878da2/eth_account-0.13.7-py3-none-any.whl", hash = "sha256:39727de8c94d004ff61d10da7587509c04d2dc7eac71e04830135300bdfc6d24", size = 587452 }, + { url = "https://files.pythonhosted.org/packages/46/18/088fb250018cbe665bc2111974301b2d59f294a565aff7564c4df6878da2/eth_account-0.13.7-py3-none-any.whl", hash = "sha256:39727de8c94d004ff61d10da7587509c04d2dc7eac71e04830135300bdfc6d24", size = 587452, upload-time = "2025-04-21T21:11:18.346Z" }, ] [[package]] name = "eth-hash" version = "0.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3c/f5/c67fc24f2f676aa9b7ab29679d44f113f314c817207cd4319353356f62da/eth_hash-0.8.0.tar.gz", hash = "sha256:b009752b620da2e9c7668014849d1f5fadbe4f138603f1871cc5d4ca706896b1", size = 12225 } +sdist = { url = "https://files.pythonhosted.org/packages/3c/f5/c67fc24f2f676aa9b7ab29679d44f113f314c817207cd4319353356f62da/eth_hash-0.8.0.tar.gz", hash = "sha256:b009752b620da2e9c7668014849d1f5fadbe4f138603f1871cc5d4ca706896b1", size = 12225, upload-time = "2026-03-25T16:36:55.099Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/87/b36792150ca0b28e4df683a34be15a61461ca0e349e5b5cf3ec8f694edb9/eth_hash-0.8.0-py3-none-any.whl", hash = "sha256:523718a51b369ab89866b929a5c93c52978cd866ea309192ad980dd8271f9fac", size = 7965 }, + { url = "https://files.pythonhosted.org/packages/87/87/b36792150ca0b28e4df683a34be15a61461ca0e349e5b5cf3ec8f694edb9/eth_hash-0.8.0-py3-none-any.whl", hash = "sha256:523718a51b369ab89866b929a5c93c52978cd866ea309192ad980dd8271f9fac", size = 7965, upload-time = "2026-03-25T16:36:54.205Z" }, ] [[package]] @@ -435,9 +552,9 @@ dependencies = [ { name = "eth-utils" }, { name = "pycryptodome" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/35/66/dd823b1537befefbbff602e2ada88f1477c5b40ec3731e3d9bc676c5f716/eth_keyfile-0.8.1.tar.gz", hash = "sha256:9708bc31f386b52cca0969238ff35b1ac72bd7a7186f2a84b86110d3c973bec1", size = 12267 } +sdist = { url = "https://files.pythonhosted.org/packages/35/66/dd823b1537befefbbff602e2ada88f1477c5b40ec3731e3d9bc676c5f716/eth_keyfile-0.8.1.tar.gz", hash = "sha256:9708bc31f386b52cca0969238ff35b1ac72bd7a7186f2a84b86110d3c973bec1", size = 12267, upload-time = "2024-04-23T20:28:53.862Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/fc/48a586175f847dd9e05e5b8994d2fe8336098781ec2e9836a2ad94280281/eth_keyfile-0.8.1-py3-none-any.whl", hash = "sha256:65387378b82fe7e86d7cb9f8d98e6d639142661b2f6f490629da09fddbef6d64", size = 7510 }, + { url = "https://files.pythonhosted.org/packages/88/fc/48a586175f847dd9e05e5b8994d2fe8336098781ec2e9836a2ad94280281/eth_keyfile-0.8.1-py3-none-any.whl", hash = "sha256:65387378b82fe7e86d7cb9f8d98e6d639142661b2f6f490629da09fddbef6d64", size = 7510, upload-time = "2024-04-23T20:28:51.063Z" }, ] [[package]] @@ -448,9 +565,9 @@ dependencies = [ { name = "eth-typing" }, { name = "eth-utils" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/58/11/1ed831c50bd74f57829aa06e58bd82a809c37e070ee501c953b9ac1f1552/eth_keys-0.7.0.tar.gz", hash = "sha256:79d24fd876201df67741de3e3fefb3f4dbcbb6ace66e47e6fe662851a4547814", size = 30166 } +sdist = { url = "https://files.pythonhosted.org/packages/58/11/1ed831c50bd74f57829aa06e58bd82a809c37e070ee501c953b9ac1f1552/eth_keys-0.7.0.tar.gz", hash = "sha256:79d24fd876201df67741de3e3fefb3f4dbcbb6ace66e47e6fe662851a4547814", size = 30166, upload-time = "2025-04-07T17:40:21.697Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/25/0ae00f2b0095e559d61ad3dc32171bd5a29dfd95ab04b4edd641f7c75f72/eth_keys-0.7.0-py3-none-any.whl", hash = "sha256:b0cdda8ffe8e5ba69c7c5ca33f153828edcace844f67aabd4542d7de38b159cf", size = 20656 }, + { url = "https://files.pythonhosted.org/packages/4d/25/0ae00f2b0095e559d61ad3dc32171bd5a29dfd95ab04b4edd641f7c75f72/eth_keys-0.7.0-py3-none-any.whl", hash = "sha256:b0cdda8ffe8e5ba69c7c5ca33f153828edcace844f67aabd4542d7de38b159cf", size = 20656, upload-time = "2025-04-07T17:40:20.441Z" }, ] [[package]] @@ -463,9 +580,9 @@ dependencies = [ { name = "rlp" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7f/ea/ad39d001fa9fed07fad66edb00af701e29b48be0ed44a3bcf58cb3adf130/eth_rlp-2.2.0.tar.gz", hash = "sha256:5e4b2eb1b8213e303d6a232dfe35ab8c29e2d3051b86e8d359def80cd21db83d", size = 7720 } +sdist = { url = "https://files.pythonhosted.org/packages/7f/ea/ad39d001fa9fed07fad66edb00af701e29b48be0ed44a3bcf58cb3adf130/eth_rlp-2.2.0.tar.gz", hash = "sha256:5e4b2eb1b8213e303d6a232dfe35ab8c29e2d3051b86e8d359def80cd21db83d", size = 7720, upload-time = "2025-02-04T21:51:08.134Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/99/3b/57efe2bc2df0980680d57c01a36516cd3171d2319ceb30e675de19fc2cc5/eth_rlp-2.2.0-py3-none-any.whl", hash = "sha256:5692d595a741fbaef1203db6a2fedffbd2506d31455a6ad378c8449ee5985c47", size = 4446 }, + { url = "https://files.pythonhosted.org/packages/99/3b/57efe2bc2df0980680d57c01a36516cd3171d2319ceb30e675de19fc2cc5/eth_rlp-2.2.0-py3-none-any.whl", hash = "sha256:5692d595a741fbaef1203db6a2fedffbd2506d31455a6ad378c8449ee5985c47", size = 4446, upload-time = "2025-02-04T21:51:05.823Z" }, ] [[package]] @@ -475,9 +592,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/37/e7/06c5af99ad40494f6d10126a9030ff4eb14c5b773f2a4076017efb0a163a/eth_typing-6.0.0.tar.gz", hash = "sha256:315dd460dc0b71c15a6cd51e3c0b70d237eec8771beb844144f3a1fb4adb2392", size = 21852 } +sdist = { url = "https://files.pythonhosted.org/packages/37/e7/06c5af99ad40494f6d10126a9030ff4eb14c5b773f2a4076017efb0a163a/eth_typing-6.0.0.tar.gz", hash = "sha256:315dd460dc0b71c15a6cd51e3c0b70d237eec8771beb844144f3a1fb4adb2392", size = 21852, upload-time = "2026-03-25T16:41:57.444Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/0d/e756622fab29f404d846d7464f929d642a7ee6eff5b38bcc79e7c64ac630/eth_typing-6.0.0-py3-none-any.whl", hash = "sha256:ee74fb641eb36dd885e1c42c2a3055314efa532b3e71480816df70a94d35cfb9", size = 19191 }, + { url = "https://files.pythonhosted.org/packages/aa/0d/e756622fab29f404d846d7464f929d642a7ee6eff5b38bcc79e7c64ac630/eth_typing-6.0.0-py3-none-any.whl", hash = "sha256:ee74fb641eb36dd885e1c42c2a3055314efa532b3e71480816df70a94d35cfb9", size = 19191, upload-time = "2026-03-25T16:41:55.544Z" }, ] [[package]] @@ -491,9 +608,9 @@ dependencies = [ { name = "pydantic" }, { name = "toolz", marker = "implementation_name == 'pypy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e9/1b/0b8548da7b31eba87ed58bca1d0de5dcb13a6c113e02c09019ec5a6716ed/eth_utils-6.0.0.tar.gz", hash = "sha256:eb54b2f82dd300d3142c49a89da195e823f5e5284d43203593f87c67bad92a96", size = 123457 } +sdist = { url = "https://files.pythonhosted.org/packages/e9/1b/0b8548da7b31eba87ed58bca1d0de5dcb13a6c113e02c09019ec5a6716ed/eth_utils-6.0.0.tar.gz", hash = "sha256:eb54b2f82dd300d3142c49a89da195e823f5e5284d43203593f87c67bad92a96", size = 123457, upload-time = "2026-03-25T17:11:51.433Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/53/45/a20b907227b9d1aea2e36f7b12818d055629ca9bc65fc282b45738f28ca3/eth_utils-6.0.0-py3-none-any.whl", hash = "sha256:63cf48ee32c45541cb5748751909a8345c470432fb6f0fed4bd7c53fd6400469", size = 102473 }, + { url = "https://files.pythonhosted.org/packages/53/45/a20b907227b9d1aea2e36f7b12818d055629ca9bc65fc282b45738f28ca3/eth_utils-6.0.0-py3-none-any.whl", hash = "sha256:63cf48ee32c45541cb5748751909a8345c470432fb6f0fed4bd7c53fd6400469", size = 102473, upload-time = "2026-03-25T17:11:49.953Z" }, ] [[package]] @@ -503,80 +620,105 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740 }, + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, ] [[package]] name = "execnet" version = "2.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bf/89/780e11f9588d9e7128a3f87788354c7946a9cbb1401ad38a48c4db9a4f07/execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd", size = 166622 } +sdist = { url = "https://files.pythonhosted.org/packages/bf/89/780e11f9588d9e7128a3f87788354c7946a9cbb1401ad38a48c4db9a4f07/execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd", size = 166622, upload-time = "2025-11-12T09:56:37.75Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec", size = 40708 }, + { url = "https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec", size = 40708, upload-time = "2025-11-12T09:56:36.333Z" }, ] [[package]] name = "hexbytes" version = "1.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7f/87/adf4635b4b8c050283d74e6db9a81496063229c9263e6acc1903ab79fbec/hexbytes-1.3.1.tar.gz", hash = "sha256:a657eebebdfe27254336f98d8af6e2236f3f83aed164b87466b6cf6c5f5a4765", size = 8633 } +sdist = { url = "https://files.pythonhosted.org/packages/7f/87/adf4635b4b8c050283d74e6db9a81496063229c9263e6acc1903ab79fbec/hexbytes-1.3.1.tar.gz", hash = "sha256:a657eebebdfe27254336f98d8af6e2236f3f83aed164b87466b6cf6c5f5a4765", size = 8633, upload-time = "2025-05-14T16:45:17.5Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/e0/3b31492b1c89da3c5a846680517871455b30c54738486fc57ac79a5761bd/hexbytes-1.3.1-py3-none-any.whl", hash = "sha256:da01ff24a1a9a2b1881c4b85f0e9f9b0f51b526b379ffa23832ae7899d29c2c7", size = 5074 }, + { url = "https://files.pythonhosted.org/packages/8d/e0/3b31492b1c89da3c5a846680517871455b30c54738486fc57ac79a5761bd/hexbytes-1.3.1-py3-none-any.whl", hash = "sha256:da01ff24a1a9a2b1881c4b85f0e9f9b0f51b526b379ffa23832ae7899d29c2c7", size = 5074, upload-time = "2025-05-14T16:45:16.179Z" }, ] [[package]] name = "hypothesis" -version = "6.156.2" +version = "6.161.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "sortedcontainers" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/41/96/35022710908b82d20af0c57ab8be4d4a3e4045a74d3ae9c806eb4443297c/hypothesis-6.161.0.tar.gz", hash = "sha256:c357150f826fc7492304621d535a23e8f1b7440a3b10a337c23bea52102e2e7f", size = 485855, upload-time = "2026-07-23T07:17:40.745Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b6/21/a2952857336f5ea65a390314d8cd25f21fab3d27574c3f593190fb14783d/hypothesis-6.156.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:daed1365bc2bcbc4a182b4e5e5f058bc9c87c8d2ef3ec7659e5b874f1b6284c5", size = 749510 }, - { url = "https://files.pythonhosted.org/packages/90/ff/608c6124d3d581e5eba00735458bba89ec3acc93848f6ecdcb5af3d1d8da/hypothesis-6.156.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f7df4266316f775b2364ce0528428106629de6d9ad37f780ac502de024b7367", size = 743935 }, - { url = "https://files.pythonhosted.org/packages/66/c2/afa64507b819f3f8fe208d3b3ec08a2a51b68dcd07542e5b689ac021e1a4/hypothesis-6.156.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40dc8d28287a82568283575808bde2caa0499cadfabf50d70a95a7d697ae39d0", size = 1071102 }, - { url = "https://files.pythonhosted.org/packages/52/21/d47f87f6fd1515c3a3c2b80334cc0c8c20233af43b9630bfd09a02bd92d3/hypothesis-6.156.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:371c08669e26cc31044d4cddddae3d0d229813dcd3d2809e0e4e705f8275102f", size = 1120823 }, - { url = "https://files.pythonhosted.org/packages/b0/2f/70e93e5f8976087b4971464c34211874348e9252768f56451a5a6f78add6/hypothesis-6.156.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9d4eddc3d62dfa44e2c97c6c80546441df2cf7b1234fec1dd9c6480e6bbd1c51", size = 1245796 }, - { url = "https://files.pythonhosted.org/packages/69/f1/985c0a29ad5d2cfdb76f8e46854526c299ce0ab5803ec9c96f9bb0940ec2/hypothesis-6.156.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:41a32e9b6a1271fe6fa1ea95384379fedbb9ca45355dc2e18064a4fe4ea9dd73", size = 1288182 }, - { url = "https://files.pythonhosted.org/packages/a8/52/9ebb10e98b220cac229035c5c03dec7c3c1e7095438722e4c3443fe692e7/hypothesis-6.156.2-cp310-cp310-win_amd64.whl", hash = "sha256:9763271f4deaeb999dc9969d89c1a9e897bb903feb80f26e750bcc13dac73800", size = 640343 }, - { url = "https://files.pythonhosted.org/packages/41/28/58a8f25b5fd61ade0ed400d0fa6b0416dcffbcfaf0e8be3a937c32b4f924/hypothesis-6.156.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:e4ce83092be96243097134a8012629a9a07e282588e697cb8957680ac2b55456", size = 749187 }, - { url = "https://files.pythonhosted.org/packages/8e/5e/295e6ed2d81acb61623ea4a489a6cd323f6d6a15b9c4632e5f98ecda5aaf/hypothesis-6.156.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e351ecc5046ded68e51fe4b196f626e5e7918a8330f1b971bb20e66652089469", size = 743702 }, - { url = "https://files.pythonhosted.org/packages/80/d7/7a3e409998ab996e5ed8146cdb8904cac1dbcb3cbce94a1eda7b1420b3d5/hypothesis-6.156.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dabfc6c77eca309a8fe9fe71afd9cf12cb9bd3a569e8de48dddcbf7d2ad40f59", size = 1071010 }, - { url = "https://files.pythonhosted.org/packages/78/62/244cdd3dd502312891276ba64245fabac6c61f6214c4aafb141bef432f28/hypothesis-6.156.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f97801a57b2c712e80acc2376deb6c08e3dbae11076c0a7bebc7d8c6306ff4a", size = 1120628 }, - { url = "https://files.pythonhosted.org/packages/f7/14/1dabaa47f0c9e88687ed0336aec07bc8b4a33f528c1c687834f710994722/hypothesis-6.156.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:82f2761177b3c25f51f5f7788c7eb985c9c4ade4d92077b7171f21c15db4e44b", size = 1245250 }, - { url = "https://files.pythonhosted.org/packages/8a/48/995841c9f7d080d33070397f4968180dab1d78215769e41d3bc6944d0ff3/hypothesis-6.156.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:20098b742fdc238c5c47fc7c686ae790b9830e1910c8a3da98a17ea6e3192d52", size = 1287868 }, - { url = "https://files.pythonhosted.org/packages/78/07/58acb4724f584d9e2239ed7b4c83294c34e69b5e8b457d73b5a2e3410af8/hypothesis-6.156.2-cp311-cp311-win_amd64.whl", hash = "sha256:04f64cea5bb80c775cba24e50602d0c4d695ece74e0576c60047ac2a897afadc", size = 640180 }, - { url = "https://files.pythonhosted.org/packages/2a/04/cba9692e3ba6802a7f881ee1000634bc327c50999eff31c848a89572b94e/hypothesis-6.156.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:089abb5f72c980c7d3a8fd6986c08743cbb9105fab826a8a3d4e34dcf4b3c446", size = 749034 }, - { url = "https://files.pythonhosted.org/packages/be/a6/023e521d053b9b99d70f6c493d626f4f1b51a87d9a6f6cdb286b0c8532f5/hypothesis-6.156.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:94e027517e435d0bda48557ef736552cf14a06af76961375e48a3c2c48afb502", size = 741911 }, - { url = "https://files.pythonhosted.org/packages/cd/d9/1822df320ce0ea4cbfa1cbeb888f88d5dbd3b8ecfcb1fd7236cd2cbcbf64/hypothesis-6.156.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74f49b87e367d9ac844350b617eab9846126d45c57d3062d5515545e5d3854cf", size = 1069816 }, - { url = "https://files.pythonhosted.org/packages/dd/1a/33682e317f96ff04d101782ba174d2eb9c70b709b51cb4c22de4a1cc48d0/hypothesis-6.156.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8f3ab2c0b70231c73fe3bc686f3ecf827882a132dbd44758fdfe562b92b725a", size = 1119540 }, - { url = "https://files.pythonhosted.org/packages/45/9d/96d39aa32fc5a53a0598bafae9fdd7150e0d1679b37ca820df85ddecd166/hypothesis-6.156.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:94fddaef961465db10201e385366366d7a394073a3e5915d402c38e184a30490", size = 1243862 }, - { url = "https://files.pythonhosted.org/packages/47/41/c0272ca96dff030d7e4119c35feac4cd388395f4317739273a11f1f57378/hypothesis-6.156.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:32cbdbbdf9bd4416270e0849db90791bf43128c616f44af498140ed8c6b13ef1", size = 1286413 }, - { url = "https://files.pythonhosted.org/packages/1b/0f/22b5a9f54b08f989d694c61c5aef7dff20fd4e377029d88f67072e307f35/hypothesis-6.156.2-cp312-cp312-win_amd64.whl", hash = "sha256:5ba8941f566c6efae9db4cb77a77ba4132b330f410d503842f6fb5c32e7a50b7", size = 637645 }, - { url = "https://files.pythonhosted.org/packages/5f/f1/40b782791455411d09eb181fd688d615b0f46945f50a2b8ad1525a9aa0e2/hypothesis-6.156.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5ebeddf95d2d60283d079e9e3ee434ec2654868d35deb8d7de01221d86b9bd67", size = 749445 }, - { url = "https://files.pythonhosted.org/packages/33/92/e92493ff3903a57d84618d379a180566e6e77b3a8e14fab0e6e15d6958b8/hypothesis-6.156.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:082f81fb0697d42809b9ca9b7d2b01e319363f9b6b368dded0f7cf29574228f8", size = 742078 }, - { url = "https://files.pythonhosted.org/packages/0c/fb/3c9ae5cdc9e2c296bbd08a00f6a369df509b4ec19443d099d59258f02738/hypothesis-6.156.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a23eede8f93ae5768b6161e51511e40fd0b3e6f08f25d94f17e476827a3e3f", size = 1069980 }, - { url = "https://files.pythonhosted.org/packages/f8/0d/b9cd9bb75beeda4dc520b81d818db300c67659bb15d4c0d1eaac7b5818dd/hypothesis-6.156.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cc703d7f8d16006f2afb8b5c9de79d145888e1bc917431edef7ab058447910a", size = 1119942 }, - { url = "https://files.pythonhosted.org/packages/63/b7/590bda127ac08d5ca03787f530093d9a97746550bded6cbe11c38cc33526/hypothesis-6.156.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bc6a9801926b34d124628e54166c4f5e466831456349c1b32b3abb4320c5588", size = 1244026 }, - { url = "https://files.pythonhosted.org/packages/ba/f2/45416c2fa565a6d9df9f1ee3844123c6332cc2f5444e65d0089cd4250d8b/hypothesis-6.156.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9494e7dfdcbafa1fb0b109929500e1f2ee71e58cc531919cc7721acb3ea0e0a9", size = 1286715 }, - { url = "https://files.pythonhosted.org/packages/cf/15/c973adc18512e74da8e9deba457019b19b142f6e6b0fae432637ed7c3ce2/hypothesis-6.156.2-cp313-cp313-win_amd64.whl", hash = "sha256:e1778a7446a7aff9420367241740d021bc9093f6f38f39ebdd45c3737fa7fcb4", size = 637936 }, - { url = "https://files.pythonhosted.org/packages/64/8f/348c3f4846ac2c08efea75170f6947554781ec243e60f6ec03dd664ac038/hypothesis-6.156.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:db6b62ac14b799e52522f0878ec6fdc82944a700b708c4b0d8ba667d2c811fa4", size = 749749 }, - { url = "https://files.pythonhosted.org/packages/f3/18/ebeedf919e845ebe59750dbfae72846086e10635f9fabe4c8573dc10a7f2/hypothesis-6.156.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:43457c97a8572d41b411066ad104c2688e88d889b4bd887c4789ce52f140df76", size = 744373 }, - { url = "https://files.pythonhosted.org/packages/50/a5/5b1e8cc1f08ea0fdbb87e7062c66b3613b9b1fc65c3512b255724c21e8a1/hypothesis-6.156.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a7ed48c2693536460b6161cb30cb064542e1a702b51df94202bedc477b17915", size = 1071365 }, - { url = "https://files.pythonhosted.org/packages/49/7e/0d2a19de897a129be4e2907f3c1171f8f1f918bde13c703d1be2ccdf3023/hypothesis-6.156.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f23fbfa240f75a2dd234011a8bc4dab8cfd68aba8299c2cc8a4e6684d73c6ab", size = 1121412 }, - { url = "https://files.pythonhosted.org/packages/25/92/a3a2b7298925fe7308df52bcb41dcd47d25e76c18f984acebf1fbd79d18e/hypothesis-6.156.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:229e19f43e151cad06fa6566c31e847b39b171cfbb5d6aefba9274b048cbeb81", size = 640760 }, + { url = "https://files.pythonhosted.org/packages/f5/b9/c8b80fb7517e6f3039d0ef9a5df6aaee53667935e62c6c9d9d635436708d/hypothesis-6.161.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c9f877e288dfb46207b5c3bfcc8ab28e2613e529be8621816423960403377286", size = 766230, upload-time = "2026-07-23T07:16:54.313Z" }, + { url = "https://files.pythonhosted.org/packages/90/16/e5c1287fee682f7c1e9afccc91c07ae36a6855a5863d0b3c15d7bfa0b322/hypothesis-6.161.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:b7b6980265cb04605b2b42132dc8ef5735917fc482869298611a49d2e06dc322", size = 761883, upload-time = "2026-07-23T07:17:05.884Z" }, + { url = "https://files.pythonhosted.org/packages/c9/b8/d9792e24e53f82bb1455935f79cf3b56ccf556fac325c8a90f7968180706/hypothesis-6.161.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f10253cac459922cad3bc09e397718188e57dffefe810e5db1d444e7113d7fb5", size = 1091083, upload-time = "2026-07-23T07:17:10.987Z" }, + { url = "https://files.pythonhosted.org/packages/f7/15/33cba9c6bee8a80ab18f48e40669038275bf4b82e8dfb0fa9fe716925265/hypothesis-6.161.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:232ab78dd8cb0a891914d20697e0fd340ca1e6d4d8d5855df5e433d8161173e2", size = 1140530, upload-time = "2026-07-23T07:16:14.195Z" }, + { url = "https://files.pythonhosted.org/packages/bb/f6/30c421822cd65b8edd56b2b90a5e1acf4a624d5619067957668027ab7e46/hypothesis-6.161.0-cp310-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:264336ca1e9f31edd24a8885c4020db8e18986c51a255613db28c076ac4289a8", size = 1132680, upload-time = "2026-07-23T07:16:49.73Z" }, + { url = "https://files.pythonhosted.org/packages/e9/db/d18e45339b2ffda57a52395e03df6166bc4e428bc90e878dd3f20a7423c0/hypothesis-6.161.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:323aac4347e6ffa86929407b7f386cbf54e1c66faf923ffd6b4b86c21815d117", size = 1264892, upload-time = "2026-07-23T07:16:21.657Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7e/f4b7600272fbc9a2b28c95b96059d89cf5093ae705e52360a818df8154a5/hypothesis-6.161.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5dc83c8e83b9d133babcf9468703cece0ddb25413983561f2516927edddcc52d", size = 1307563, upload-time = "2026-07-23T07:16:43.15Z" }, + { url = "https://files.pythonhosted.org/packages/d6/28/fa4f2d50c7434076ec7653a8372750531576e4d11cd5f3316ad83e12a553/hypothesis-6.161.0-cp310-abi3-win32.whl", hash = "sha256:75a3036121e6ae2cf55b7433f1953834cc9eca97c2e4e4be3369fe080c86b237", size = 652098, upload-time = "2026-07-23T07:16:24.134Z" }, + { url = "https://files.pythonhosted.org/packages/93/5c/6811eee772a5cc33f9bf863326983f493977e9aee9535c8dbb6c172575d3/hypothesis-6.161.0-cp310-abi3-win_amd64.whl", hash = "sha256:e3f5b2527789a748b54d6ef46b2b042f3225164d54c24ba74a137ddb10a39407", size = 658272, upload-time = "2026-07-23T07:16:51.173Z" }, + { url = "https://files.pythonhosted.org/packages/97/97/49216c1087962033451cc6e3093deb765b0d14eed7dda2980f6d8dfc9062/hypothesis-6.161.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:38eea270b81398c9e2c7eed028f53ba51dc7005eb97fa681c7c90007ba029423", size = 766930, upload-time = "2026-07-23T07:17:33.625Z" }, + { url = "https://files.pythonhosted.org/packages/9a/6d/766a280bea353045ae7311ba847a50ebb939155e2a990fd08040be2b6b5b/hypothesis-6.161.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6b7183980c7729d7cf084ab26c127e4c591876536278ecb84ed2449d4d93f4e", size = 762699, upload-time = "2026-07-23T07:17:38.977Z" }, + { url = "https://files.pythonhosted.org/packages/62/86/f28648668b5ce18bba7ae846c629c54427aa622a76280309c3bc3dca4f2d/hypothesis-6.161.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3e60bbe528d6005373146808bd0b5e618bf1a20e912c0568ae56802e8c455fc", size = 1091551, upload-time = "2026-07-23T07:16:28.499Z" }, + { url = "https://files.pythonhosted.org/packages/52/e3/3ae24ad1056e1c992dade22e9c784c93d57ea0dc3ff9fa6a48683548489d/hypothesis-6.161.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3167e3153a9b8a8ad43284a22cbe1e3c1819d6d944f727f9810bb115a9c2ade", size = 1141106, upload-time = "2026-07-23T07:17:19.854Z" }, + { url = "https://files.pythonhosted.org/packages/c4/37/fa3a21edcd7c4a104d6782ee98135af8ef86ae42d39ea9eb55072f84b668/hypothesis-6.161.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1489ef3b86688fc0051d0c86db238ff8f3732bd353dc4b6b28a81c3897bd756e", size = 1265529, upload-time = "2026-07-23T07:16:44.815Z" }, + { url = "https://files.pythonhosted.org/packages/6e/2e/f377a5ea8aba231213da1b26f333a6af29c43fcdac7dda790304dd9c3ffc/hypothesis-6.161.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28a450d338067845870b03a8c61ba6d83cccf5d1ed360a6b1cfebb4f42818791", size = 1307881, upload-time = "2026-07-23T07:16:18.438Z" }, + { url = "https://files.pythonhosted.org/packages/8f/73/276defee614d45462a1512888283d4a9bdf852e3f9d74f564bd8d6cecd09/hypothesis-6.161.0-cp310-cp310-win_amd64.whl", hash = "sha256:170fc6fe2157c8e813818a08709d78c79ffa9171b015389c50f5538eab3de1bb", size = 658159, upload-time = "2026-07-23T07:16:38.473Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1f/07054e18c7696fe5aa127952e1ff2b74c7917100e0998d77405f9aea7bbf/hypothesis-6.161.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2658a95ac7cf1943b9397725d58481373a1709e79b6867628108f695b202ff3f", size = 766737, upload-time = "2026-07-23T07:16:27.055Z" }, + { url = "https://files.pythonhosted.org/packages/21/1b/6a04fbda729f5889b486aa3b20912ee6c7391c8db0a2926346a1b3ad0834/hypothesis-6.161.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:584906b4f8f9504d7c9d6fd3c42bf991fa42ab64c3a4490a84d6e4acf69fe7fe", size = 762514, upload-time = "2026-07-23T07:17:25.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/12/609a956b716ab20cb81263d8e0cecfe442fb46e4d54ae9b82b453f2465fe/hypothesis-6.161.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87a996d0a1c865173ed67a0b3537efbe6736bcf9f58ac28826712a48ed8d2d23", size = 1091414, upload-time = "2026-07-23T07:16:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/fc/99/093bc8aca6dddc05e88dd0baa64c5586e031737d798c66e770fbeb034510/hypothesis-6.161.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0250e209ed2401cf6c80c956c5c1906097b537d05fa748f03e9c53060a837d3f", size = 1140888, upload-time = "2026-07-23T07:17:07.579Z" }, + { url = "https://files.pythonhosted.org/packages/65/fc/f681828dc1ca13243622eb6ddc3f7370efb1cb7931ea7505f8ade4d37ba6/hypothesis-6.161.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:210024a6e84c361803545ca055218bcae06e17fcb53d5956db7db6a1e14d7769", size = 1265245, upload-time = "2026-07-23T07:16:56.103Z" }, + { url = "https://files.pythonhosted.org/packages/53/d4/98deace31c31369196ece4d6f32bb8c1820bf5cf5584721bda791bffa0cc/hypothesis-6.161.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c3e39be8141496a73115f1ea2c8fd7146f78d26f148e884f3d4a68dec06418a0", size = 1307841, upload-time = "2026-07-23T07:16:59.457Z" }, + { url = "https://files.pythonhosted.org/packages/c3/5d/d9bbe1fc769e46b21d368497d4739375fcb17270eba611bac1117473e337/hypothesis-6.161.0-cp311-cp311-win_amd64.whl", hash = "sha256:e234937af9de105e28dc7ffdac5d7932265abb5881f0264aff01d3515baee732", size = 657953, upload-time = "2026-07-23T07:17:18.224Z" }, + { url = "https://files.pythonhosted.org/packages/01/f5/b01692ea422f9995260435a5c2a425dd558ceb0b6544cf4037d312b52927/hypothesis-6.161.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:8cf6149e5bcb1deaa3d029280c2c9a47fede2186ea58d8dc3e71864428b748b5", size = 767859, upload-time = "2026-07-23T07:16:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/1e/ea/147f96f352a1c62f4fa4d46ec2d8b103d39cafce236826531aba9dfbf6fc/hypothesis-6.161.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:439b9ccefc2b87b9752752d2ec6c9d40f92de2acaf07f4da94c2ebcbde4eb660", size = 759491, upload-time = "2026-07-23T07:17:37.046Z" }, + { url = "https://files.pythonhosted.org/packages/44/05/c1ddd72ca9af054332a05bdb19b666b1dbb4ff904cac2b6e04bc483518fa/hypothesis-6.161.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35c577d4b635b914e2cdd59d144448e0de82e47f8422d8373cbb48daa5571686", size = 1089838, upload-time = "2026-07-23T07:16:52.774Z" }, + { url = "https://files.pythonhosted.org/packages/46/79/0d9adc2ca7fe226e4f81e0e9ff88ab9a2025395a705e55e8447e8833b2e2/hypothesis-6.161.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:894af9777f2fd51bca9625fd07573456c1fa67b6bed3f6aa1659cb60255594e0", size = 1139915, upload-time = "2026-07-23T07:16:11.769Z" }, + { url = "https://files.pythonhosted.org/packages/50/48/c557ee9899ab58e6d373712dcfe019b4eb65035f5bbffcb7624201984bd4/hypothesis-6.161.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c9f15d18d3041216d80d2a3203c1b8881efb7c20296f068651e2ad34f3852392", size = 1262692, upload-time = "2026-07-23T07:17:09.328Z" }, + { url = "https://files.pythonhosted.org/packages/1c/37/8eede820af48d8f7a73c0741c659b4839ffe9825b020affe43d52f58acb5/hypothesis-6.161.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f5588bde17a517c943b5ef6172cacfce6ef2d542c9249cc1bd86ce3c4c07161b", size = 1306904, upload-time = "2026-07-23T07:16:32.698Z" }, + { url = "https://files.pythonhosted.org/packages/ba/6b/16282f58b92b6698dbed7b23d7015fb9f7d5dfb78e7ba2e4b44c88116bca/hypothesis-6.161.0-cp312-cp312-win_amd64.whl", hash = "sha256:c7994d32bcca19b7cbf3c087172245fe9f4d55b21bccef81693efd5a0637d4d9", size = 655392, upload-time = "2026-07-23T07:16:16.988Z" }, + { url = "https://files.pythonhosted.org/packages/27/13/50b3fabaa9a52f82905d6bf70b0027cbc61972f0b60dcf68506e4a85674f/hypothesis-6.161.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:d5217e3df508ab71303bf1288b412548e96483eef195f6008b6472770e4fe4ed", size = 767734, upload-time = "2026-07-23T07:16:35.638Z" }, + { url = "https://files.pythonhosted.org/packages/72/0c/0176f7722896dffef2aa677699df75cd2a53ed00d4dc6b2959c40c1c8389/hypothesis-6.161.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ad4899908abec1888d0d16eb70acd54c9d8198b58410ec26a346ba35d384fc0d", size = 759394, upload-time = "2026-07-23T07:16:57.551Z" }, + { url = "https://files.pythonhosted.org/packages/97/1d/5ade6e0c80ce8160bbcd55c300d95a5450cdb82fa04fdcdd8a33f6198441/hypothesis-6.161.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fee553e5150af6d66ee058f3ccbc3b5b83e6df62139e8935abd0510254a2d4a7", size = 1089752, upload-time = "2026-07-23T07:16:34.18Z" }, + { url = "https://files.pythonhosted.org/packages/99/02/14c6d54e60159ba9991a52b14ea5a9b6935d4878ffe9d0a8fabd2d166767/hypothesis-6.161.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f8110cd815f3a79e2351700654c21771eec47d98a78db56cc81879d41f08ed1", size = 1139731, upload-time = "2026-07-23T07:17:28.51Z" }, + { url = "https://files.pythonhosted.org/packages/36/98/c099c382b0fbf6dfd209d35961e6ee9739ad1d787288a40eb364b278217a/hypothesis-6.161.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:16aacb26a277d25da7466f0588c2687811334455753d513c55d8ca4dbbc5174e", size = 1262736, upload-time = "2026-07-23T07:16:07.875Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3a/6b1fbde6e2a1c9bd54acb1e5d8fa866c6fef59a829a67ca310f5d12a8fbe/hypothesis-6.161.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eb24cf5f7f301ad3db14caa4462ebc2e693fe38815d793ff6dbc116820b18dff", size = 1306628, upload-time = "2026-07-23T07:16:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/8b/c2/033da1694f956f0c566b12a1f0667138ad06a3b0a67837f17c6873cc2513/hypothesis-6.161.0-cp313-cp313-win_amd64.whl", hash = "sha256:e4f715f5598444a0d569aa8a3e74ebc14a46c67a873193db38c8542b2838e91f", size = 655355, upload-time = "2026-07-23T07:16:48.054Z" }, + { url = "https://files.pythonhosted.org/packages/2b/26/29582b8ba467eedf270515422f41cb564d06b4eef38bdf06e236cc841546/hypothesis-6.161.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:a046954e17a1edd20b6c95e9d29f1df7bc20ccab94c01aa8b4177552896230fb", size = 767928, upload-time = "2026-07-23T07:17:12.935Z" }, + { url = "https://files.pythonhosted.org/packages/f7/25/bb7cfd851f6b0f4b0130485785a3447621523116b89f8d82042fb9897752/hypothesis-6.161.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2d503b0fdb916371d536b33fad0c4f909846af2fc4273d3049ca6fe661aa81ff", size = 759542, upload-time = "2026-07-23T07:16:41.736Z" }, + { url = "https://files.pythonhosted.org/packages/d9/ab/bc31d4aa5840c2438e011a615095b0e2fae5de94c3abfc18a01686825ea7/hypothesis-6.161.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df011a94870dc3e1b5fb4fb8d2c68dd641b412a3b73050288d85af1467c9a689", size = 1090304, upload-time = "2026-07-23T07:16:19.817Z" }, + { url = "https://files.pythonhosted.org/packages/51/ee/6304f6184aee6a1b91fff746a767b4f3aab58c29e48e64cc16d56fc6dedc/hypothesis-6.161.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4678e3988503b3bd5be0ed995f84cc15ac4f99c168bade32456a08c04868f3f3", size = 1139915, upload-time = "2026-07-23T07:17:14.565Z" }, + { url = "https://files.pythonhosted.org/packages/f5/6d/23efce26bf7f1773346732c58a23cbe33ed4f171da1bb3aa11bf349fdb4c/hypothesis-6.161.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:74c6e5b5623f37eb6af8be6f861d138fac3ee3528ee30c3b48ff11c39f7be4b7", size = 1263070, upload-time = "2026-07-23T07:16:15.695Z" }, + { url = "https://files.pythonhosted.org/packages/0b/a2/e0b4bf410630f16661eea6fdf9c3970e47c749a837de12098d63c81bb01b/hypothesis-6.161.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b841c25267ab360812a523d1861e0b0ed0f5cc4e6d7bcecc9d9eddd3f835aa0f", size = 1306929, upload-time = "2026-07-23T07:16:37.086Z" }, + { url = "https://files.pythonhosted.org/packages/03/13/58047eb148a31ae7cce26ec0b2f0e980c46874c6673c1110c53684ba181a/hypothesis-6.161.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:a0f3830c1e816e34bd8cd940244c8c877dedc2ecfea771d2ecea252bc35eb21d", size = 599455, upload-time = "2026-07-23T07:16:25.552Z" }, + { url = "https://files.pythonhosted.org/packages/f0/0e/a206013edd7dfd44b9a81ae1946a1ea30d878974850d60a61fa128cc170d/hypothesis-6.161.0-cp314-cp314-win_amd64.whl", hash = "sha256:d1d38f05acb9c25181157f1756f5faaa1759b4641ff6b32cb1d2ab1d55d6af2d", size = 655306, upload-time = "2026-07-23T07:17:30.273Z" }, + { url = "https://files.pythonhosted.org/packages/e2/74/32d224a0ccf4ca9af6acc1d805047e12cd13105e0769d54ac00a86f25850/hypothesis-6.161.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:81570959521eebd0172ea9132ffab71b90050e7cd44d045da67210aa9a594376", size = 766503, upload-time = "2026-07-23T07:16:10.253Z" }, + { url = "https://files.pythonhosted.org/packages/ce/5d/8b61c3490fd8195a25fdc37e951ccba3ae4df2c74839ffe6a6d5720fdb79/hypothesis-6.161.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:46a6039181337b85a995666e9bf87cc2390282720ba345479bb9be9c867914da", size = 758013, upload-time = "2026-07-23T07:17:26.71Z" }, + { url = "https://files.pythonhosted.org/packages/d9/11/ac4ab15ec4586a23bb4e2acdcbed814517e341f2940eeb74fbf428dac243/hypothesis-6.161.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f2d4141c952f522d6aae0e493d170f9b0127c001319bd312ee9cfba7ed419d4", size = 1088871, upload-time = "2026-07-23T07:17:02.884Z" }, + { url = "https://files.pythonhosted.org/packages/27/13/fd83965bcdd44dc5002c67fe8e8e2e974ed45c82dc6864e104c1c70093d5/hypothesis-6.161.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6ed3e1b9c036954bfabe64899072a18e6b5113703d32a96645c6656a8cfc43e", size = 1138801, upload-time = "2026-07-23T07:17:35.354Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e7/a4ad5f3b0b805fd2e583d193e2a762cd413465b524ef07829452521dca6d/hypothesis-6.161.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:aba1508da6c317819305e875bf6c4d4dd0922193c76416d4cc907447ebe08fea", size = 1261305, upload-time = "2026-07-23T07:17:23.201Z" }, + { url = "https://files.pythonhosted.org/packages/38/54/35e1b62ece96c24921e9a1e811179d54a6429d9611a2cd49504f5b95382e/hypothesis-6.161.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:981acb3efa88df363a0d31e0f4bacd36ef739104eee789a6b12c7f7200a457fc", size = 1305689, upload-time = "2026-07-23T07:17:21.476Z" }, + { url = "https://files.pythonhosted.org/packages/04/87/6491e9a36d8e8df67a3b9c3eeb5a85c12c6b0d5302b5ce395b5427698b52/hypothesis-6.161.0-cp314-cp314t-win_amd64.whl", hash = "sha256:e71e229f2dec694685245b8e55e908855b475c17ab8337bcf848768b4c32aa97", size = 655436, upload-time = "2026-07-23T07:17:04.424Z" }, + { url = "https://files.pythonhosted.org/packages/54/e2/0782e45562fb091cd75bd12f69932c8aa55a9e3bb699599f43e5258d013c/hypothesis-6.161.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:33a19886dc05b489f0ab632c89b8ca9dc6f89a0b380b6405671cecb2b0d5b5c4", size = 767674, upload-time = "2026-07-23T07:17:16.37Z" }, + { url = "https://files.pythonhosted.org/packages/03/46/eaccb5375ed83396be3153857f9de808b5d5ecc001fab8e30bf8e30d33d4/hypothesis-6.161.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:b4fd38d0e757ae290583774b3695ab0d7f0da80e924c6473de84483449c6da8d", size = 763579, upload-time = "2026-07-23T07:16:46.309Z" }, + { url = "https://files.pythonhosted.org/packages/99/48/31ca6b9414cf30388ba825c740b13ab74f6afcf856a194a9256f7f1ca38d/hypothesis-6.161.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59dc6871e2fbbfd2d28e7e6f33d19bd8513a3b7510bd0b224a59bbebdd5cc1b3", size = 1092394, upload-time = "2026-07-23T07:17:01.136Z" }, + { url = "https://files.pythonhosted.org/packages/75/1d/709c03af162418c0b3e0cf624549b13ecacd8df0f2ca09d53214702cb1f8/hypothesis-6.161.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55ff16ec4b4e98bfd97e9a2a44905eaf7a3ec8f3f157d8c7eac2385a88059a29", size = 1142170, upload-time = "2026-07-23T07:17:32.044Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ae/63458a5f80db8433beb7556482e3de1a6789b6c469a5f2f99c21aaa7fdef/hypothesis-6.161.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:77ae374d9ed7046b15443053b11f5b05e185bca24b3b849c3f473a9e4cc85451", size = 659069, upload-time = "2026-07-23T07:16:12.922Z" }, ] [[package]] name = "iniconfig" version = "2.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503 } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484 }, + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] [[package]] @@ -586,27 +728,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mdurl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454 } +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687 }, + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, ] [[package]] name = "mdurl" version = "0.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, ] [[package]] name = "packaging" version = "26.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134 } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195 }, + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, ] [[package]] @@ -616,55 +758,53 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "regex" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7b/91/abdc50c4ef06fdf8d047f60ee777ca9b2a7885e1a9cea81343fbecda52d7/parsimonious-0.10.0.tar.gz", hash = "sha256:8281600da180ec8ae35427a4ab4f7b82bfec1e3d1e52f80cb60ea82b9512501c", size = 52172 } +sdist = { url = "https://files.pythonhosted.org/packages/7b/91/abdc50c4ef06fdf8d047f60ee777ca9b2a7885e1a9cea81343fbecda52d7/parsimonious-0.10.0.tar.gz", hash = "sha256:8281600da180ec8ae35427a4ab4f7b82bfec1e3d1e52f80cb60ea82b9512501c", size = 52172, upload-time = "2022-09-03T17:01:17.004Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/0f/c8b64d9b54ea631fcad4e9e3c8dbe8c11bb32a623be94f22974c88e71eaf/parsimonious-0.10.0-py3-none-any.whl", hash = "sha256:982ab435fabe86519b57f6b35610aa4e4e977e9f02a14353edf4bbc75369fc0f", size = 48427 }, + { url = "https://files.pythonhosted.org/packages/aa/0f/c8b64d9b54ea631fcad4e9e3c8dbe8c11bb32a623be94f22974c88e71eaf/parsimonious-0.10.0-py3-none-any.whl", hash = "sha256:982ab435fabe86519b57f6b35610aa4e4e977e9f02a14353edf4bbc75369fc0f", size = 48427, upload-time = "2022-09-03T17:01:13.814Z" }, ] [[package]] name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] [[package]] name = "pycryptodome" version = "3.23.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/a6/8452177684d5e906854776276ddd34eca30d1b1e15aa1ee9cefc289a33f5/pycryptodome-3.23.0.tar.gz", hash = "sha256:447700a657182d60338bab09fdb27518f8856aecd80ae4c6bdddb67ff5da44ef", size = 4921276 } +sdist = { url = "https://files.pythonhosted.org/packages/8e/a6/8452177684d5e906854776276ddd34eca30d1b1e15aa1ee9cefc289a33f5/pycryptodome-3.23.0.tar.gz", hash = "sha256:447700a657182d60338bab09fdb27518f8856aecd80ae4c6bdddb67ff5da44ef", size = 4921276, upload-time = "2025-05-17T17:21:45.242Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/5d/bdb09489b63cd34a976cc9e2a8d938114f7a53a74d3dd4f125ffa49dce82/pycryptodome-3.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:0011f7f00cdb74879142011f95133274741778abba114ceca229adbf8e62c3e4", size = 2495152 }, - { url = "https://files.pythonhosted.org/packages/a7/ce/7840250ed4cc0039c433cd41715536f926d6e86ce84e904068eb3244b6a6/pycryptodome-3.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:90460fc9e088ce095f9ee8356722d4f10f86e5be06e2354230a9880b9c549aae", size = 1639348 }, - { url = "https://files.pythonhosted.org/packages/ee/f0/991da24c55c1f688d6a3b5a11940567353f74590734ee4a64294834ae472/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4764e64b269fc83b00f682c47443c2e6e85b18273712b98aa43bcb77f8570477", size = 2184033 }, - { url = "https://files.pythonhosted.org/packages/54/16/0e11882deddf00f68b68dd4e8e442ddc30641f31afeb2bc25588124ac8de/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb8f24adb74984aa0e5d07a2368ad95276cf38051fe2dc6605cbcf482e04f2a7", size = 2270142 }, - { url = "https://files.pythonhosted.org/packages/d5/fc/4347fea23a3f95ffb931f383ff28b3f7b1fe868739182cb76718c0da86a1/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d97618c9c6684a97ef7637ba43bdf6663a2e2e77efe0f863cce97a76af396446", size = 2309384 }, - { url = "https://files.pythonhosted.org/packages/6e/d9/c5261780b69ce66d8cfab25d2797bd6e82ba0241804694cd48be41add5eb/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9a53a4fe5cb075075d515797d6ce2f56772ea7e6a1e5e4b96cf78a14bac3d265", size = 2183237 }, - { url = "https://files.pythonhosted.org/packages/5a/6f/3af2ffedd5cfa08c631f89452c6648c4d779e7772dfc388c77c920ca6bbf/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:763d1d74f56f031788e5d307029caef067febf890cd1f8bf61183ae142f1a77b", size = 2343898 }, - { url = "https://files.pythonhosted.org/packages/9a/dc/9060d807039ee5de6e2f260f72f3d70ac213993a804f5e67e0a73a56dd2f/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:954af0e2bd7cea83ce72243b14e4fb518b18f0c1649b576d114973e2073b273d", size = 2269197 }, - { url = "https://files.pythonhosted.org/packages/f9/34/e6c8ca177cb29dcc4967fef73f5de445912f93bd0343c9c33c8e5bf8cde8/pycryptodome-3.23.0-cp313-cp313t-win32.whl", hash = "sha256:257bb3572c63ad8ba40b89f6fc9d63a2a628e9f9708d31ee26560925ebe0210a", size = 1768600 }, - { url = "https://files.pythonhosted.org/packages/e4/1d/89756b8d7ff623ad0160f4539da571d1f594d21ee6d68be130a6eccb39a4/pycryptodome-3.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6501790c5b62a29fcb227bd6b62012181d886a767ce9ed03b303d1f22eb5c625", size = 1799740 }, - { url = "https://files.pythonhosted.org/packages/5d/61/35a64f0feaea9fd07f0d91209e7be91726eb48c0f1bfc6720647194071e4/pycryptodome-3.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:9a77627a330ab23ca43b48b130e202582e91cc69619947840ea4d2d1be21eb39", size = 1703685 }, - { url = "https://files.pythonhosted.org/packages/db/6c/a1f71542c969912bb0e106f64f60a56cc1f0fabecf9396f45accbe63fa68/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:187058ab80b3281b1de11c2e6842a357a1f71b42cb1e15bce373f3d238135c27", size = 2495627 }, - { url = "https://files.pythonhosted.org/packages/6e/4e/a066527e079fc5002390c8acdd3aca431e6ea0a50ffd7201551175b47323/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cfb5cd445280c5b0a4e6187a7ce8de5a07b5f3f897f235caa11f1f435f182843", size = 1640362 }, - { url = "https://files.pythonhosted.org/packages/50/52/adaf4c8c100a8c49d2bd058e5b551f73dfd8cb89eb4911e25a0c469b6b4e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67bd81fcbe34f43ad9422ee8fd4843c8e7198dd88dd3d40e6de42ee65fbe1490", size = 2182625 }, - { url = "https://files.pythonhosted.org/packages/5f/e9/a09476d436d0ff1402ac3867d933c61805ec2326c6ea557aeeac3825604e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8987bd3307a39bc03df5c8e0e3d8be0c4c3518b7f044b0f4c15d1aa78f52575", size = 2268954 }, - { url = "https://files.pythonhosted.org/packages/f9/c5/ffe6474e0c551d54cab931918127c46d70cab8f114e0c2b5a3c071c2f484/pycryptodome-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa0698f65e5b570426fc31b8162ed4603b0c2841cbb9088e2b01641e3065915b", size = 2308534 }, - { url = "https://files.pythonhosted.org/packages/18/28/e199677fc15ecf43010f2463fde4c1a53015d1fe95fb03bca2890836603a/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:53ecbafc2b55353edcebd64bf5da94a2a2cdf5090a6915bcca6eca6cc452585a", size = 2181853 }, - { url = "https://files.pythonhosted.org/packages/ce/ea/4fdb09f2165ce1365c9eaefef36625583371ee514db58dc9b65d3a255c4c/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:156df9667ad9f2ad26255926524e1c136d6664b741547deb0a86a9acf5ea631f", size = 2342465 }, - { url = "https://files.pythonhosted.org/packages/22/82/6edc3fc42fe9284aead511394bac167693fb2b0e0395b28b8bedaa07ef04/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:dea827b4d55ee390dc89b2afe5927d4308a8b538ae91d9c6f7a5090f397af1aa", size = 2267414 }, - { url = "https://files.pythonhosted.org/packages/59/fe/aae679b64363eb78326c7fdc9d06ec3de18bac68be4b612fc1fe8902693c/pycryptodome-3.23.0-cp37-abi3-win32.whl", hash = "sha256:507dbead45474b62b2bbe318eb1c4c8ee641077532067fec9c1aa82c31f84886", size = 1768484 }, - { url = "https://files.pythonhosted.org/packages/54/2f/e97a1b8294db0daaa87012c24a7bb714147c7ade7656973fd6c736b484ff/pycryptodome-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:c75b52aacc6c0c260f204cbdd834f76edc9fb0d8e0da9fbf8352ef58202564e2", size = 1799636 }, - { url = "https://files.pythonhosted.org/packages/18/3d/f9441a0d798bf2b1e645adc3265e55706aead1255ccdad3856dbdcffec14/pycryptodome-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:11eeeb6917903876f134b56ba11abe95c0b0fd5e3330def218083c7d98bbcb3c", size = 1703675 }, - { url = "https://files.pythonhosted.org/packages/9f/7c/f5b0556590e7b4e710509105e668adb55aa9470a9f0e4dea9c40a4a11ce1/pycryptodome-3.23.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:350ebc1eba1da729b35ab7627a833a1a355ee4e852d8ba0447fafe7b14504d56", size = 1705791 }, - { url = "https://files.pythonhosted.org/packages/33/38/dcc795578d610ea1aaffef4b148b8cafcfcf4d126b1e58231ddc4e475c70/pycryptodome-3.23.0-pp27-pypy_73-win32.whl", hash = "sha256:93837e379a3e5fd2bb00302a47aee9fdf7940d83595be3915752c74033d17ca7", size = 1780265 }, - { url = "https://files.pythonhosted.org/packages/d9/12/e33935a0709c07de084d7d58d330ec3f4daf7910a18e77937affdb728452/pycryptodome-3.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ddb95b49df036ddd264a0ad246d1be5b672000f12d6961ea2c267083a5e19379", size = 1623886 }, - { url = "https://files.pythonhosted.org/packages/22/0b/aa8f9419f25870889bebf0b26b223c6986652bdf071f000623df11212c90/pycryptodome-3.23.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e95564beb8782abfd9e431c974e14563a794a4944c29d6d3b7b5ea042110b4", size = 1672151 }, - { url = "https://files.pythonhosted.org/packages/d4/5e/63f5cbde2342b7f70a39e591dbe75d9809d6338ce0b07c10406f1a140cdc/pycryptodome-3.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14e15c081e912c4b0d75632acd8382dfce45b258667aa3c67caf7a4d4c13f630", size = 1664461 }, - { url = "https://files.pythonhosted.org/packages/d6/92/608fbdad566ebe499297a86aae5f2a5263818ceeecd16733006f1600403c/pycryptodome-3.23.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7fc76bf273353dc7e5207d172b83f569540fc9a28d63171061c42e361d22353", size = 1702440 }, - { url = "https://files.pythonhosted.org/packages/d1/92/2eadd1341abd2989cce2e2740b4423608ee2014acb8110438244ee97d7ff/pycryptodome-3.23.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:45c69ad715ca1a94f778215a11e66b7ff989d792a4d63b68dc586a1da1392ff5", size = 1803005 }, + { url = "https://files.pythonhosted.org/packages/04/5d/bdb09489b63cd34a976cc9e2a8d938114f7a53a74d3dd4f125ffa49dce82/pycryptodome-3.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:0011f7f00cdb74879142011f95133274741778abba114ceca229adbf8e62c3e4", size = 2495152, upload-time = "2025-05-17T17:20:20.833Z" }, + { url = "https://files.pythonhosted.org/packages/a7/ce/7840250ed4cc0039c433cd41715536f926d6e86ce84e904068eb3244b6a6/pycryptodome-3.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:90460fc9e088ce095f9ee8356722d4f10f86e5be06e2354230a9880b9c549aae", size = 1639348, upload-time = "2025-05-17T17:20:23.171Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f0/991da24c55c1f688d6a3b5a11940567353f74590734ee4a64294834ae472/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4764e64b269fc83b00f682c47443c2e6e85b18273712b98aa43bcb77f8570477", size = 2184033, upload-time = "2025-05-17T17:20:25.424Z" }, + { url = "https://files.pythonhosted.org/packages/54/16/0e11882deddf00f68b68dd4e8e442ddc30641f31afeb2bc25588124ac8de/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb8f24adb74984aa0e5d07a2368ad95276cf38051fe2dc6605cbcf482e04f2a7", size = 2270142, upload-time = "2025-05-17T17:20:27.808Z" }, + { url = "https://files.pythonhosted.org/packages/d5/fc/4347fea23a3f95ffb931f383ff28b3f7b1fe868739182cb76718c0da86a1/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d97618c9c6684a97ef7637ba43bdf6663a2e2e77efe0f863cce97a76af396446", size = 2309384, upload-time = "2025-05-17T17:20:30.765Z" }, + { url = "https://files.pythonhosted.org/packages/6e/d9/c5261780b69ce66d8cfab25d2797bd6e82ba0241804694cd48be41add5eb/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9a53a4fe5cb075075d515797d6ce2f56772ea7e6a1e5e4b96cf78a14bac3d265", size = 2183237, upload-time = "2025-05-17T17:20:33.736Z" }, + { url = "https://files.pythonhosted.org/packages/5a/6f/3af2ffedd5cfa08c631f89452c6648c4d779e7772dfc388c77c920ca6bbf/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:763d1d74f56f031788e5d307029caef067febf890cd1f8bf61183ae142f1a77b", size = 2343898, upload-time = "2025-05-17T17:20:36.086Z" }, + { url = "https://files.pythonhosted.org/packages/9a/dc/9060d807039ee5de6e2f260f72f3d70ac213993a804f5e67e0a73a56dd2f/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:954af0e2bd7cea83ce72243b14e4fb518b18f0c1649b576d114973e2073b273d", size = 2269197, upload-time = "2025-05-17T17:20:38.414Z" }, + { url = "https://files.pythonhosted.org/packages/f9/34/e6c8ca177cb29dcc4967fef73f5de445912f93bd0343c9c33c8e5bf8cde8/pycryptodome-3.23.0-cp313-cp313t-win32.whl", hash = "sha256:257bb3572c63ad8ba40b89f6fc9d63a2a628e9f9708d31ee26560925ebe0210a", size = 1768600, upload-time = "2025-05-17T17:20:40.688Z" }, + { url = "https://files.pythonhosted.org/packages/e4/1d/89756b8d7ff623ad0160f4539da571d1f594d21ee6d68be130a6eccb39a4/pycryptodome-3.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6501790c5b62a29fcb227bd6b62012181d886a767ce9ed03b303d1f22eb5c625", size = 1799740, upload-time = "2025-05-17T17:20:42.413Z" }, + { url = "https://files.pythonhosted.org/packages/5d/61/35a64f0feaea9fd07f0d91209e7be91726eb48c0f1bfc6720647194071e4/pycryptodome-3.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:9a77627a330ab23ca43b48b130e202582e91cc69619947840ea4d2d1be21eb39", size = 1703685, upload-time = "2025-05-17T17:20:44.388Z" }, + { url = "https://files.pythonhosted.org/packages/db/6c/a1f71542c969912bb0e106f64f60a56cc1f0fabecf9396f45accbe63fa68/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:187058ab80b3281b1de11c2e6842a357a1f71b42cb1e15bce373f3d238135c27", size = 2495627, upload-time = "2025-05-17T17:20:47.139Z" }, + { url = "https://files.pythonhosted.org/packages/6e/4e/a066527e079fc5002390c8acdd3aca431e6ea0a50ffd7201551175b47323/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cfb5cd445280c5b0a4e6187a7ce8de5a07b5f3f897f235caa11f1f435f182843", size = 1640362, upload-time = "2025-05-17T17:20:50.392Z" }, + { url = "https://files.pythonhosted.org/packages/50/52/adaf4c8c100a8c49d2bd058e5b551f73dfd8cb89eb4911e25a0c469b6b4e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67bd81fcbe34f43ad9422ee8fd4843c8e7198dd88dd3d40e6de42ee65fbe1490", size = 2182625, upload-time = "2025-05-17T17:20:52.866Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e9/a09476d436d0ff1402ac3867d933c61805ec2326c6ea557aeeac3825604e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8987bd3307a39bc03df5c8e0e3d8be0c4c3518b7f044b0f4c15d1aa78f52575", size = 2268954, upload-time = "2025-05-17T17:20:55.027Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c5/ffe6474e0c551d54cab931918127c46d70cab8f114e0c2b5a3c071c2f484/pycryptodome-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa0698f65e5b570426fc31b8162ed4603b0c2841cbb9088e2b01641e3065915b", size = 2308534, upload-time = "2025-05-17T17:20:57.279Z" }, + { url = "https://files.pythonhosted.org/packages/18/28/e199677fc15ecf43010f2463fde4c1a53015d1fe95fb03bca2890836603a/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:53ecbafc2b55353edcebd64bf5da94a2a2cdf5090a6915bcca6eca6cc452585a", size = 2181853, upload-time = "2025-05-17T17:20:59.322Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ea/4fdb09f2165ce1365c9eaefef36625583371ee514db58dc9b65d3a255c4c/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:156df9667ad9f2ad26255926524e1c136d6664b741547deb0a86a9acf5ea631f", size = 2342465, upload-time = "2025-05-17T17:21:03.83Z" }, + { url = "https://files.pythonhosted.org/packages/22/82/6edc3fc42fe9284aead511394bac167693fb2b0e0395b28b8bedaa07ef04/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:dea827b4d55ee390dc89b2afe5927d4308a8b538ae91d9c6f7a5090f397af1aa", size = 2267414, upload-time = "2025-05-17T17:21:06.72Z" }, + { url = "https://files.pythonhosted.org/packages/59/fe/aae679b64363eb78326c7fdc9d06ec3de18bac68be4b612fc1fe8902693c/pycryptodome-3.23.0-cp37-abi3-win32.whl", hash = "sha256:507dbead45474b62b2bbe318eb1c4c8ee641077532067fec9c1aa82c31f84886", size = 1768484, upload-time = "2025-05-17T17:21:08.535Z" }, + { url = "https://files.pythonhosted.org/packages/54/2f/e97a1b8294db0daaa87012c24a7bb714147c7ade7656973fd6c736b484ff/pycryptodome-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:c75b52aacc6c0c260f204cbdd834f76edc9fb0d8e0da9fbf8352ef58202564e2", size = 1799636, upload-time = "2025-05-17T17:21:10.393Z" }, + { url = "https://files.pythonhosted.org/packages/18/3d/f9441a0d798bf2b1e645adc3265e55706aead1255ccdad3856dbdcffec14/pycryptodome-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:11eeeb6917903876f134b56ba11abe95c0b0fd5e3330def218083c7d98bbcb3c", size = 1703675, upload-time = "2025-05-17T17:21:13.146Z" }, + { url = "https://files.pythonhosted.org/packages/d9/12/e33935a0709c07de084d7d58d330ec3f4daf7910a18e77937affdb728452/pycryptodome-3.23.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ddb95b49df036ddd264a0ad246d1be5b672000f12d6961ea2c267083a5e19379", size = 1623886, upload-time = "2025-05-17T17:21:20.614Z" }, + { url = "https://files.pythonhosted.org/packages/22/0b/aa8f9419f25870889bebf0b26b223c6986652bdf071f000623df11212c90/pycryptodome-3.23.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e95564beb8782abfd9e431c974e14563a794a4944c29d6d3b7b5ea042110b4", size = 1672151, upload-time = "2025-05-17T17:21:22.666Z" }, + { url = "https://files.pythonhosted.org/packages/d4/5e/63f5cbde2342b7f70a39e591dbe75d9809d6338ce0b07c10406f1a140cdc/pycryptodome-3.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14e15c081e912c4b0d75632acd8382dfce45b258667aa3c67caf7a4d4c13f630", size = 1664461, upload-time = "2025-05-17T17:21:25.225Z" }, + { url = "https://files.pythonhosted.org/packages/d6/92/608fbdad566ebe499297a86aae5f2a5263818ceeecd16733006f1600403c/pycryptodome-3.23.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7fc76bf273353dc7e5207d172b83f569540fc9a28d63171061c42e361d22353", size = 1702440, upload-time = "2025-05-17T17:21:27.991Z" }, + { url = "https://files.pythonhosted.org/packages/d1/92/2eadd1341abd2989cce2e2740b4423608ee2014acb8110438244ee97d7ff/pycryptodome-3.23.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:45c69ad715ca1a94f778215a11e66b7ff989d792a4d63b68dc586a1da1392ff5", size = 1803005, upload-time = "2025-05-17T17:21:31.37Z" }, ] [[package]] @@ -677,9 +817,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775 } +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262 }, + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, ] [[package]] @@ -689,92 +829,122 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464 } +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4", size = 2113146 }, - { url = "https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5", size = 1949769 }, - { url = "https://files.pythonhosted.org/packages/64/ba/bfb1d928fd5b49e1258935ff104ae356e9fd89384a55bf9f847e9193ad40/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba", size = 1974958 }, - { url = "https://files.pythonhosted.org/packages/4e/74/76223bfb117b64af743c9b6670d1364516f5c0604f96b48f3272f6af6cc6/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b", size = 2042118 }, - { url = "https://files.pythonhosted.org/packages/cb/7b/848732968bc8f48f3187542f08358b9d842db564147b256669426ebb1652/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c", size = 2222876 }, - { url = "https://files.pythonhosted.org/packages/b5/2f/e90b63ee2e14bd8d3db8f705a6d75d64e6ee1b7c2c8833747ce706e1e0ce/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50", size = 2286703 }, - { url = "https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd", size = 2092042 }, - { url = "https://files.pythonhosted.org/packages/a9/da/0a422b57bf8504102bf3c4ccea9c41bab5a5cee6a54650acf8faf67f5a24/pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01", size = 2117231 }, - { url = "https://files.pythonhosted.org/packages/bd/2a/2ac13c3af305843e23c5078c53d135656b3f05a2fd78cb7bbbb12e97b473/pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d", size = 2168388 }, - { url = "https://files.pythonhosted.org/packages/72/04/2beacf7e1607e93eefe4aed1b4709f079b905fb77530179d4f7c71745f22/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4", size = 2184769 }, - { url = "https://files.pythonhosted.org/packages/9e/29/d2b9fd9f539133548eaf622c06a4ce176cb46ac59f32d0359c4abc0de047/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f", size = 2319312 }, - { url = "https://files.pythonhosted.org/packages/7c/af/0f7a5b85fec6075bea96e3ef9187de38fccced0de92c1e7feda8d5cc7bb9/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39", size = 2361817 }, - { url = "https://files.pythonhosted.org/packages/25/a4/73363fec545fd3ec025490bdda2743c56d0dd5b6266b1a53bbe9e4265375/pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d", size = 1987085 }, - { url = "https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf", size = 2074311 }, - { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872 }, - { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255 }, - { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827 }, - { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051 }, - { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314 }, - { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146 }, - { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685 }, - { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420 }, - { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122 }, - { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573 }, - { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139 }, - { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433 }, - { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513 }, - { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114 }, - { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298 }, - { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158 }, - { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724 }, - { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742 }, - { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418 }, - { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274 }, - { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940 }, - { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516 }, - { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854 }, - { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306 }, - { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044 }, - { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133 }, - { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464 }, - { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823 }, - { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919 }, - { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604 }, - { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306 }, - { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906 }, - { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802 }, - { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446 }, - { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757 }, - { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275 }, - { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467 }, - { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417 }, - { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782 }, - { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782 }, - { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334 }, - { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986 }, - { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693 }, - { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819 }, - { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411 }, - { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589 }, - { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552 }, - { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984 }, - { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417 }, - { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527 }, - { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024 }, - { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696 }, - { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590 }, - { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782 }, - { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146 }, - { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492 }, - { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604 }, - { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828 }, - { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000 }, - { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286 }, - { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071 }, + { url = "https://files.pythonhosted.org/packages/e7/08/f1ba952f1c8ae5581c70fa9c6da89f247b83e3dd8c09c035d5d7931fc23d/pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4", size = 2113146, upload-time = "2026-05-06T13:37:36.537Z" }, + { url = "https://files.pythonhosted.org/packages/56/c6/65f646c7ff09bd257f660434adb45c4dfcbbcebcc030562fecf6f5bf887d/pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5", size = 1949769, upload-time = "2026-05-06T13:37:46.365Z" }, + { url = "https://files.pythonhosted.org/packages/64/ba/bfb1d928fd5b49e1258935ff104ae356e9fd89384a55bf9f847e9193ad40/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba", size = 1974958, upload-time = "2026-05-06T13:37:28.611Z" }, + { url = "https://files.pythonhosted.org/packages/4e/74/76223bfb117b64af743c9b6670d1364516f5c0604f96b48f3272f6af6cc6/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b", size = 2042118, upload-time = "2026-05-06T13:36:55.216Z" }, + { url = "https://files.pythonhosted.org/packages/cb/7b/848732968bc8f48f3187542f08358b9d842db564147b256669426ebb1652/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c", size = 2222876, upload-time = "2026-05-06T13:38:25.455Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2f/e90b63ee2e14bd8d3db8f705a6d75d64e6ee1b7c2c8833747ce706e1e0ce/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50", size = 2286703, upload-time = "2026-05-06T13:37:53.304Z" }, + { url = "https://files.pythonhosted.org/packages/ba/1e/acc4d70f88a0a277e4a1fa77ebb985ceabaf900430f875bf9338e11c9420/pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd", size = 2092042, upload-time = "2026-05-06T13:38:46.981Z" }, + { url = "https://files.pythonhosted.org/packages/a9/da/0a422b57bf8504102bf3c4ccea9c41bab5a5cee6a54650acf8faf67f5a24/pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01", size = 2117231, upload-time = "2026-05-06T13:39:23.146Z" }, + { url = "https://files.pythonhosted.org/packages/bd/2a/2ac13c3af305843e23c5078c53d135656b3f05a2fd78cb7bbbb12e97b473/pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d", size = 2168388, upload-time = "2026-05-06T13:40:08.06Z" }, + { url = "https://files.pythonhosted.org/packages/72/04/2beacf7e1607e93eefe4aed1b4709f079b905fb77530179d4f7c71745f22/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4", size = 2184769, upload-time = "2026-05-06T13:38:13.901Z" }, + { url = "https://files.pythonhosted.org/packages/9e/29/d2b9fd9f539133548eaf622c06a4ce176cb46ac59f32d0359c4abc0de047/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f", size = 2319312, upload-time = "2026-05-06T13:39:08.24Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/0f7a5b85fec6075bea96e3ef9187de38fccced0de92c1e7feda8d5cc7bb9/pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39", size = 2361817, upload-time = "2026-05-06T13:38:43.2Z" }, + { url = "https://files.pythonhosted.org/packages/25/a4/73363fec545fd3ec025490bdda2743c56d0dd5b6266b1a53bbe9e4265375/pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d", size = 1987085, upload-time = "2026-05-06T13:39:25.497Z" }, + { url = "https://files.pythonhosted.org/packages/01/aa/62f082da2c91fac1c234bc9ee0066257ce83f0604abd72e4c9d5991f2d84/pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf", size = 2074311, upload-time = "2026-05-06T13:39:59.922Z" }, + { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, + { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, + { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, + { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, + { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, + { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, + { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, + { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, + { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, + { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, + { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" }, + { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, + { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, + { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, + { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, + { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, + { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, + { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, + { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, ] [[package]] name = "pygments" version = "2.20.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991 } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151 }, + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, ] [[package]] @@ -790,9 +960,9 @@ dependencies = [ { name = "pygments" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369 } +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536 }, + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, ] [[package]] @@ -804,9 +974,9 @@ dependencies = [ { name = "pytest" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/43/7c/d36d04db312ecf4298932ef77e6e4a9e8ad017906e24e34f0b0c361a2473/pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42", size = 58514 } +sdist = { url = "https://files.pythonhosted.org/packages/43/7c/d36d04db312ecf4298932ef77e6e4a9e8ad017906e24e34f0b0c361a2473/pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42", size = 58514, upload-time = "2026-05-26T09:56:04.083Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/03/e2/08a497ef684b88559c9cc5f4ad53a37e7b99e727094a86d6ea32536d5d3c/pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1", size = 16930 }, + { url = "https://files.pythonhosted.org/packages/03/e2/08a497ef684b88559c9cc5f4ad53a37e7b99e727094a86d6ea32536d5d3c/pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1", size = 16930, upload-time = "2026-05-26T09:56:02.576Z" }, ] [[package]] @@ -818,9 +988,9 @@ dependencies = [ { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592 } +sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876 }, + { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876, upload-time = "2026-03-21T20:11:14.438Z" }, ] [[package]] @@ -831,9 +1001,9 @@ dependencies = [ { name = "execnet" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069 } +sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload-time = "2025-07-01T13:30:59.346Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396 }, + { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" }, ] [[package]] @@ -843,98 +1013,130 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8f/b2/7fc2931bfae0af02d5f53b174e9cf701adbb35f39d69c2af63d4a39f81a9/qrcode-8.2.tar.gz", hash = "sha256:35c3f2a4172b33136ab9f6b3ef1c00260dd2f66f858f24d88418a015f446506c", size = 43317 } +sdist = { url = "https://files.pythonhosted.org/packages/8f/b2/7fc2931bfae0af02d5f53b174e9cf701adbb35f39d69c2af63d4a39f81a9/qrcode-8.2.tar.gz", hash = "sha256:35c3f2a4172b33136ab9f6b3ef1c00260dd2f66f858f24d88418a015f446506c", size = 43317, upload-time = "2025-05-01T15:44:24.726Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dd/b8/d2d6d731733f51684bbf76bf34dab3b70a9148e8f2cef2bb544fccec681a/qrcode-8.2-py3-none-any.whl", hash = "sha256:16e64e0716c14960108e85d853062c9e8bba5ca8252c0b4d0231b9df4060ff4f", size = 45986 }, + { url = "https://files.pythonhosted.org/packages/dd/b8/d2d6d731733f51684bbf76bf34dab3b70a9148e8f2cef2bb544fccec681a/qrcode-8.2-py3-none-any.whl", hash = "sha256:16e64e0716c14960108e85d853062c9e8bba5ca8252c0b4d0231b9df4060ff4f", size = 45986, upload-time = "2025-05-01T15:44:22.781Z" }, ] [[package]] name = "regex" version = "2026.6.28" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/05/e4f219230e11e774a6c9987d2ab0d0c6b8573e13a17e143d0015bee710ef/regex-2026.6.28.tar.gz", hash = "sha256:3cb4b6c5cb3060cc31efdc1fbb27c25fb9b29044afd87e40601a1c4d9db54342", size = 416101 } +sdist = { url = "https://files.pythonhosted.org/packages/f1/05/e4f219230e11e774a6c9987d2ab0d0c6b8573e13a17e143d0015bee710ef/regex-2026.6.28.tar.gz", hash = "sha256:3cb4b6c5cb3060cc31efdc1fbb27c25fb9b29044afd87e40601a1c4d9db54342", size = 416101, upload-time = "2026-06-28T19:56:55.302Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/dc/f7a8c9cf0768f704153d358fae2bc883199bc4ea1e4aa458f1be9d0ef2ce/regex-2026.6.28-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b83932645630965fd860fdb70ebbf964bf3e8007f08851ea424d01f8d35454a8", size = 489471 }, - { url = "https://files.pythonhosted.org/packages/44/b3/9786a4a2133e2f1cc5897ed3d2da3da29ff54b775ffa38bc5935fc24be82/regex-2026.6.28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e81f1952355042e517dc9861ce65c676e4a098f42402993c40461786d1f794d4", size = 291294 }, - { url = "https://files.pythonhosted.org/packages/dd/1f/bfe5b529257f0853aa6b94146e0f6462f4d45aa4f3c05d5a828f415dfd40/regex-2026.6.28-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2097591101d70bcc108af64c46f6066bb698ee067fec5f75beac0be317639311", size = 289216 }, - { url = "https://files.pythonhosted.org/packages/25/56/f615165e90ac5f3b72b249240643439520bbac0ac60a9de06868528eba4c/regex-2026.6.28-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:31d7538a614b5842bf53ce329d07b43f97754ca7e6db8d69f347e071bce1c953", size = 784787 }, - { url = "https://files.pythonhosted.org/packages/04/94/c9e3ad31b3d5fbe1228fee8319e0c02a5460296624f220d08764547fe6ae/regex-2026.6.28-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f5561e47bbe2b75373b695326507743fcdd4d2cc7f5022312024ccf39fa094e0", size = 852137 }, - { url = "https://files.pythonhosted.org/packages/c0/77/d506a428e446466ee298f5425a774737d0671d070425ed794bb3314d60c6/regex-2026.6.28-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c10f2c5a55ab3dd8318d8ad5f11b530e2691c0edebebde7713066f484902c3fb", size = 899525 }, - { url = "https://files.pythonhosted.org/packages/aa/72/becc00d839f19401f10a20168b44711c7b02f7f62bba875b2d8f98417435/regex-2026.6.28-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23f7e0cc60c72486b42a685f1ff4eec90d50d4fb05e4f9c7d5363b03aa02600d", size = 794116 }, - { url = "https://files.pythonhosted.org/packages/fa/11/ea2ca423eeaac2e18077a18b058614e9201f130750df2126d444e39acab2/regex-2026.6.28-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:76493755f79a88d5ed2c9e63a41d3c05997e0a7ffbe76ed8c4ded8be35b8b14c", size = 786257 }, - { url = "https://files.pythonhosted.org/packages/6d/9e/f5bf7ecbd14ff2086f015c54dc24fd0d74ba5327fef0de479213f8128615/regex-2026.6.28-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ff0f41a00f23ea5054acb61901380c41813d813eee3f80f800995710bcc52ecd", size = 769914 }, - { url = "https://files.pythonhosted.org/packages/43/04/f9040a5360a06241ba5b7f2e6f1c6184e104a84e6f6522535700e94bf8e2/regex-2026.6.28-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3c60b297292e7e1ef5d02a4759f9e452ee4c8bb95e168d8fd0b5db01bd806f9f", size = 775013 }, - { url = "https://files.pythonhosted.org/packages/73/97/4e46f7abf2f864319d2bcac609af3c0532968c66a3364337778fd232b83c/regex-2026.6.28-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a7cf03c87f7b9cbc25a8894cf9be83818406677b6b391b003ec7c884923387b5", size = 848814 }, - { url = "https://files.pythonhosted.org/packages/f7/b8/3d1f995727799a1e2e693e397acb7358094606e5591b6b5fd3128d2d1409/regex-2026.6.28-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:418208ea0af51cfed4f46eb9b1ea7cfc990ca284f0084ecbd951460fb089421e", size = 757702 }, - { url = "https://files.pythonhosted.org/packages/20/10/fd5653b8572910a4fe9055f8959b070d7d9443c94ce986529fcdb5fb2a3c/regex-2026.6.28-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:7635fa2cddb917a6bbfac7890602573d2d8c4e470703b0640e6f86a988817ec3", size = 837140 }, - { url = "https://files.pythonhosted.org/packages/5d/31/da77e3ef7b594a2aacbd03ce3d0050f33ab3e021df50c6901467c9006511/regex-2026.6.28-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7bb96c13d6cf5880d31bbef84ca701a64d738aa491c2b79975cc33f8ad00a31e", size = 782105 }, - { url = "https://files.pythonhosted.org/packages/cd/4d/c379001448d0f58b6946f168d4af96ad60a16c1553259c27b0df8701b640/regex-2026.6.28-cp310-cp310-win32.whl", hash = "sha256:56f05194c4843957dd8b3af87eb0c52d8cf0509e7f18e172d727f5f8ff840646", size = 266728 }, - { url = "https://files.pythonhosted.org/packages/f3/8f/cb656529efa87d74cce0d69e606c745537016da3bdfae78f342af2242ee3/regex-2026.6.28-cp310-cp310-win_amd64.whl", hash = "sha256:70710927033af3b54369f17aaba1343b97a23d0b1aa994fa1512b08b1b8c136a", size = 277901 }, - { url = "https://files.pythonhosted.org/packages/7b/ac/d35ccc309c9409406445ab2ef0b56f6a341a916ccff49ff9ac5cc6bb8e9b/regex-2026.6.28-cp310-cp310-win_arm64.whl", hash = "sha256:ed7b30185ee3f8b9b053b0be567b4d226016e2afbebc17fde1c6a4580937b688", size = 276880 }, - { url = "https://files.pythonhosted.org/packages/72/db/9051b36294bdbabaa9c7db57db0fbcdfbd17f7a106c539bb423d0323faea/regex-2026.6.28-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a71b51dd08b9b62f055fafab3dee8af8bd2ec81b373a44caef18d6c5ca28f43a", size = 489481 }, - { url = "https://files.pythonhosted.org/packages/35/3f/24097a3c3ff30f9a639888900faaecabcf5f54a5bc9c851c297e11b349ef/regex-2026.6.28-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9c26a47770d30a0f85c01e261d2a3ebc342c4af6fd666dbd8c1fe4cbf3adf726", size = 291292 }, - { url = "https://files.pythonhosted.org/packages/5e/cc/e0d762a189cfb4e8926d16e691720690d139a977b38fdb80230c259332ab/regex-2026.6.28-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e5efbc1af38f97e300d43028e5a92e752d924bcfb7f465d8669d5d5a6e78c233", size = 289232 }, - { url = "https://files.pythonhosted.org/packages/4b/c8/ca0ac7f09cc88ca61e0c61c53f7db29334f660ffba5d0b52378e7c44723c/regex-2026.6.28-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1758df6fdd8c800620a5638958720e8a635e1da49a2f09df2dd63e94a24ec4a", size = 792332 }, - { url = "https://files.pythonhosted.org/packages/8e/92/04ae94cbe0dd1f478b2aef6c46f995bb6946d3e338d4b28605478b66a2b7/regex-2026.6.28-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ad73ecf20c1ef5c975639f8bf845a9370fcf7dada7edc1e3b0bca20e2f8202f6", size = 861743 }, - { url = "https://files.pythonhosted.org/packages/4c/ec/024d7638c807679ff8a0e6081d01d66c7762339af1cac71e45911587ff9a/regex-2026.6.28-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4d80c798b0eec6ea3d45f8816a1e8886c5664615d347d89e8c075b576a1b5a5d", size = 906481 }, - { url = "https://files.pythonhosted.org/packages/cd/fd/93bfe5af45f0be4fa8983945455c0e6924e1aeb879cde227958869c1e71c/regex-2026.6.28-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a361feeaf1b6ba1df060f2ff5c5947092edf537a35ce78e76387ac56d3e0f4a4", size = 799867 }, - { url = "https://files.pythonhosted.org/packages/ee/fd/e5d965d41f2398c8ce0f37a4652f03bb297fd009bb796d390134225dda12/regex-2026.6.28-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8b92366d9c8bba9642989534073662abdd9b41faf7603a7ae71597833f3b88f0", size = 773632 }, - { url = "https://files.pythonhosted.org/packages/eb/d9/ff39afaec92b9ee2dba0302a4783976005091681069808938c31cf8df3b6/regex-2026.6.28-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:11251768cc23f097dd61b18f67966e70f74da822784d17e12a444eb6b29d4288", size = 781669 }, - { url = "https://files.pythonhosted.org/packages/45/4e/e2fd4bb8228e10c24af2d7ff867182372190e498eab9fd29cbe54c403c95/regex-2026.6.28-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ad5c67786145ec28a71a267d9f9d92bdc8d70d65541eea852c253f520a01f918", size = 854497 }, - { url = "https://files.pythonhosted.org/packages/72/7c/f0340384a973082979064156d05f3d2cc1dced7371efcd7a1b45726a1a8a/regex-2026.6.28-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:f1da438e739765c3e85175ede05816cbede3caaacb1e0680568bda6119bfdfca", size = 763335 }, - { url = "https://files.pythonhosted.org/packages/e1/32/90ce0d0898e205506cc22b9c81cfb16b722e06ca5f50fad51c053c2a727b/regex-2026.6.28-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d98b639046e51c5de64d9f77351532105e99ca271cb6f7640e1f903d6ab63032", size = 844615 }, - { url = "https://files.pythonhosted.org/packages/6a/ef/55abb149599dce1ade687170557129524011eeb3d92afe02429cea7754a2/regex-2026.6.28-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e164ace4dbab5c6ad4a4ac7c41a2638fe226d0c770a86f2eb041f594bac6ee7", size = 789193 }, - { url = "https://files.pythonhosted.org/packages/f8/ea/cf7f6f6f152e52fdad978b913bf24c14df647eca0f81ef31f3aee0be8982/regex-2026.6.28-cp311-cp311-win32.whl", hash = "sha256:3169a3159e4d99d9ae85ff0ed90ef3b8906cc3152653b6078b842ace6c8f72c3", size = 266731 }, - { url = "https://files.pythonhosted.org/packages/c6/cf/a48d8e8d406b22481cad146f48fa0dfca3c5f402b91f26d8e5a0fe4f513d/regex-2026.6.28-cp311-cp311-win_amd64.whl", hash = "sha256:5977295b0a74e8241df8a4b3b27b12412a831f6fa32ee8b755039592cd768c3d", size = 277918 }, - { url = "https://files.pythonhosted.org/packages/89/b2/a222392207db7ed86281a732a99f7cf7f2bb35d332799e892b8510be000e/regex-2026.6.28-cp311-cp311-win_arm64.whl", hash = "sha256:f5fbaef40c3e9282ccee4b075f5600a0d858aa0c34147732f1baa69c8188a95d", size = 276876 }, - { url = "https://files.pythonhosted.org/packages/da/21/44aa415873032056c43eac21c67285deb2cf66cddb2a964c3cdc8f803efc/regex-2026.6.28-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:81cc5793ad33a10444445e8d29d3c73e752c8fb2e120772d70fcb6d41df40fe1", size = 490480 }, - { url = "https://files.pythonhosted.org/packages/8b/5f/30d4116093c2128099f78b6990dfc1698fdbf3ee528f1e1c647378034c79/regex-2026.6.28-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e18225243250a1f7d7e5e5d883f3b96465cd79031acf5c6db902b7025f2125d9", size = 292137 }, - { url = "https://files.pythonhosted.org/packages/cb/0e/ca20a0e0de49837e6337603a91ab77556aa27033ac5b975615d98698cfb3/regex-2026.6.28-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ecd1638b1c2db1f2d01c182a4b0d3e2e88b0e99910320a745c1727ee3638ddab", size = 289623 }, - { url = "https://files.pythonhosted.org/packages/50/11/c013422a7e2c59946df8ac93e792a4922c98287f2a2181341603c78a5d98/regex-2026.6.28-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4303ebe16b74eeb3fe2715745023266fea92fd44a23f3e7bb2fb48c7a7bbc195", size = 796756 }, - { url = "https://files.pythonhosted.org/packages/b0/95/1309645a0e1ee6fb91d954501da57a0b33d50ad2a9acb313702851a7054e/regex-2026.6.28-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56b856b70b96c381d837f609eee442a1bd320cd2159f5c294b679552fb1a7eaf", size = 865465 }, - { url = "https://files.pythonhosted.org/packages/20/06/491802db47c6f5e2904ffa2518ad3ac27fe6bbf5a66d73210a95cc080d47/regex-2026.6.28-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f74675ab76ab1d005ffba4dee308e53e89efc22be6e9f9fae5b539a3f81bdff2", size = 912350 }, - { url = "https://files.pythonhosted.org/packages/5e/60/3ba57840bcc7e2367090360de0c15a5ba6ad22be89314251105f2e943f43/regex-2026.6.28-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90581684565a93f7258af1e5d3f41ef20d7d7c61f2a428183a342bcb65485e38", size = 801261 }, - { url = "https://files.pythonhosted.org/packages/eb/27/af1eb74e9a78c782b3e450b611a595e44906da8a5107e1227f4a7fd0480b/regex-2026.6.28-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:28f9e6c28f9b90f6f784595a33240a57e181e61b6ee3dc259b25c61e356d1aa3", size = 777072 }, - { url = "https://files.pythonhosted.org/packages/20/18/fdd4c883a39e3ed00d669062af1135809bfd3281bf528150849fbd68825b/regex-2026.6.28-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:378a71d861fc7c8806b04ac5b133d53c0e774f92f5d9663a539872d3fa2b0417", size = 785119 }, - { url = "https://files.pythonhosted.org/packages/1c/79/0aabe34b8482dcadf64355f70f96e22eba5ec6c1efb33563f89654f4061c/regex-2026.6.28-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4cc199874ecd6267a49b111052250825bfe19b5101b23b2ba80f54efa3e0994e", size = 860118 }, - { url = "https://files.pythonhosted.org/packages/a8/2c/c973323306a27c9db7d160e9584eb7e0ece2a96224ccb0d39060558b31f9/regex-2026.6.28-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:b916a10431494ef4b4d62c6c89cab6426af7873125b8cd6c15811bf5fc58eec8", size = 765786 }, - { url = "https://files.pythonhosted.org/packages/e3/df/9ca3e378e352242a4cb45573a5e9162c3ee791507702a23966fa559e36b5/regex-2026.6.28-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2e27727fba075f1e4409416d2f537d4c30fc11f012ea507f7bd74d3e19ecb57a", size = 852120 }, - { url = "https://files.pythonhosted.org/packages/a2/3e/3e31e255c4971f53cbce6306b5e3c76cbd3735a54f419bb3b2f194e9f68c/regex-2026.6.28-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:700fc6a7844bb2c4149292ac79d1df8841a00acd4d45cd32c1ebc7bcc1fd0da8", size = 789503 }, - { url = "https://files.pythonhosted.org/packages/72/01/d36561c21c3033d7eeb31d51b491916817de7861acefccc5fc9db8a5037c/regex-2026.6.28-cp312-cp312-win32.whl", hash = "sha256:03376d60b6a11aecb88a79fa2be06b40faa01c6693bc31ef69435cd4818b9463", size = 267109 }, - { url = "https://files.pythonhosted.org/packages/a0/59/bbbb0591f38b18c65977cd65ce64749eba1c1996c99ac04e900fc30c0dcb/regex-2026.6.28-cp312-cp312-win_amd64.whl", hash = "sha256:fbd2ded482bf99e6651992bbfcde460272724d4bbc49ef3d6b46d9312867ec84", size = 277711 }, - { url = "https://files.pythonhosted.org/packages/86/06/be4f6b337d773ae5739a1bc238f97c16926e72017243735853c030f4c628/regex-2026.6.28-cp312-cp312-win_arm64.whl", hash = "sha256:37294d3d7ddb64c7e89184b2894e0f8f0a19c514bc59513d71fe692c3a8d5fc6", size = 277022 }, - { url = "https://files.pythonhosted.org/packages/b6/53/d5c1b3cc0b5a0c985563ad6fac93d73ff2b300cb84342d89f044625d6bc7/regex-2026.6.28-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:b295a83426e0e44e9e60fde99789e181bd26788a1890ae7fe2a24c69bb6246ca", size = 490329 }, - { url = "https://files.pythonhosted.org/packages/8d/9f/0c3503e819e91ca0e7a901a8e989ebf840ac7c7aea20b1fc7f31b6759f77/regex-2026.6.28-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0c31665c0deb5c111557a1cac8c27bd5629e2f9e7fd5058900a03576c33b601c", size = 292039 }, - { url = "https://files.pythonhosted.org/packages/bb/7f/cd004e13fcad23b3794a82307dfd222e6365eb7f598bd3caab148a830bff/regex-2026.6.28-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6bf295f2c59de77d1ea7de053607ae4dc9ceb3d57bbb6c7ec51ef4acc4ccff94", size = 289488 }, - { url = "https://files.pythonhosted.org/packages/73/4c/293fb34586fbcdc47eac436069e9c11f71fae5dadfd4889b475d7d2e5f7a/regex-2026.6.28-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:17c077586770f67e05bbffeba07fbee6b2b22244f4d4caf8d94e59d574befe04", size = 796772 }, - { url = "https://files.pythonhosted.org/packages/92/fa/c0cd1a90b7d12d9dc155cfc8bdea8df9720988ea5b07e8fa1eccbd0ab2dd/regex-2026.6.28-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0e6cb5a61486f9062397d2e189573b39d38ecfaed698fd9fb6e2756a8ebb8762", size = 865467 }, - { url = "https://files.pythonhosted.org/packages/4e/db/0b479973046d005a1eaea299d5d536aeecb9488a16d9cbb8286338102e2d/regex-2026.6.28-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e86e91a2664f44c3a4e363a7d78fb17c27d5046882e30ea5a877f5e89b28d2ba", size = 912345 }, - { url = "https://files.pythonhosted.org/packages/5b/5b/d65adfbd02f32212431bca1f06d1e2eb763a20b12978b454bafaf23dacb7/regex-2026.6.28-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4dfd1331c49233998d84fc5f1f4436cf7a435a7655f6cf0f490229bb5c7254e5", size = 801291 }, - { url = "https://files.pythonhosted.org/packages/fc/09/2103686defaf9a0a31c1663782359d5b45f42524c64cca681f5481e44a5e/regex-2026.6.28-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cadea12805a1bce0b091c302b814207be26fb60a9c0e7f9ad2f9e21790a429fe", size = 777106 }, - { url = "https://files.pythonhosted.org/packages/85/5a/b57593c0aa23ed269ec332fbcf07852abcb6b746e811d9464e0d09b4e25f/regex-2026.6.28-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5f2c1682b67ad5d2376498f2a5a2a8f782fa2e4a06d0465b5e357799806e8a20", size = 785175 }, - { url = "https://files.pythonhosted.org/packages/79/59/c36e756ad29bf14d7b6c6d7138952476b21f6160286cedb98ac13481c993/regex-2026.6.28-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:64e142eb55e84868087da1375d7c36ff97d55010951849f515322a91d5fef1b4", size = 860186 }, - { url = "https://files.pythonhosted.org/packages/61/66/49808aea0da9649c300139360708fb91b7144be1f962fcebf96755fde948/regex-2026.6.28-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:abb4daabe7be63273787a62dfd6164dadf8f7a63fbec3d2730e5e5e7126d858c", size = 765754 }, - { url = "https://files.pythonhosted.org/packages/be/c5/52bbd436cf2200decdf48825fa38363eaaeebb77011ea9928a1ef9e0b9f2/regex-2026.6.28-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ec2b2ad00ab8c16a2798cc8db80c53c4d5b8b3a2441f6cbaef06625f5ca25854", size = 852085 }, - { url = "https://files.pythonhosted.org/packages/f9/c3/0390b66e3019497143fe768b3ba567b64d8b24f3812d09506deb86f4a0f0/regex-2026.6.28-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bfc9677982c914d9085b8e1c3b3ae6e88f139fb56531c2416d6c8f338093c22b", size = 789600 }, - { url = "https://files.pythonhosted.org/packages/88/fd/ab5b03653a244975069fed93d73f4f5f7484c03a84cedb238292510d7182/regex-2026.6.28-cp313-cp313-win32.whl", hash = "sha256:bf54bc693fc4e0530e666ba5ec4bcba14dbe8f66b7cfc15c27317d1a6e40b9a5", size = 267088 }, - { url = "https://files.pythonhosted.org/packages/68/55/21022f7d3143210ae8d4ff905c45306237b657375cc0b97883f49db3d423/regex-2026.6.28-cp313-cp313-win_amd64.whl", hash = "sha256:e128feaf65bf3d9eb91bec92322a8f7e4835e9c798f3e9ea4b69f4def85620e3", size = 277680 }, - { url = "https://files.pythonhosted.org/packages/b6/99/7f664804f1aef924542b0b233996b78b3e4d0a52d9951358aac99f129f51/regex-2026.6.28-cp313-cp313-win_arm64.whl", hash = "sha256:695873e0ea8d3815ea9e92e2c68faf039cc450e2c0a62a31afe2049eb11be767", size = 277017 }, - { url = "https://files.pythonhosted.org/packages/cb/e1/9eb83518e159d719fd681c4932dc2aaff855ce72451e1d05d69466f25a96/regex-2026.6.28-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:189dbf9fc4252d9f1352bf4bd1bef885edb6cc4b7341df202a65f821aaa3891c", size = 494195 }, - { url = "https://files.pythonhosted.org/packages/fd/e2/e259c5f2f7be269d0e2fb54275c1fa6a13fb47019f389c3f3ae457447825/regex-2026.6.28-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9277a4c6503390aa39cb4483b87ec0384faee0850a23b5cea33d008b5d8d83f1", size = 293976 }, - { url = "https://files.pythonhosted.org/packages/8d/4e/9bdf444014d22b045d0c82ca114fac7e07a597b5b5331b7c4ce6328426e2/regex-2026.6.28-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17eddca4e8ea9af0b5739314776cdf0172a49731ab61f2e1ea66e066ddd46c97", size = 292340 }, - { url = "https://files.pythonhosted.org/packages/fd/3a/f49b11e59cbfe187ace0053a460bd72a0169b8cd52e7db9421a074ce7a43/regex-2026.6.28-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4466b8641e00c697aab5a73150150d2b2ea96b131c595691f42031abafd9f4d", size = 811704 }, - { url = "https://files.pythonhosted.org/packages/2f/fb/ad04c39e149bf8b6cf357df5fff78341733ec366780a00c803a36735818c/regex-2026.6.28-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9cfcd4b0bdcf768c498415c170d1ed2a25a99bf0b65fa253bbd02f68ceba6475", size = 871157 }, - { url = "https://files.pythonhosted.org/packages/7f/64/0e5ba31c11eb8ef7aac19a690c1211fc9aa9990caf09565785ebb0081b9a/regex-2026.6.28-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:80c7adf1ef647f6b1e8aa2ca280e517174cd08bdf7a2e412cdfb68bd6a0917cb", size = 917287 }, - { url = "https://files.pythonhosted.org/packages/11/75/6b78df2b858c2fcbbc4858fdc3f2975cf2703be374b2842db7d2c32591a7/regex-2026.6.28-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a043f5770e82283a22aed4cefef1a4e0f9dd8fd7184cb6ce0ad2e579e2134a9e", size = 816333 }, - { url = "https://files.pythonhosted.org/packages/b4/01/ecfe665a3694d5eda9f3ec686c856438ada0943947b6005e90556a1e2cdf/regex-2026.6.28-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3bd630a8dba06b55254ea5ee862194edab52ec783100d2ef1cd15a9c512fee27", size = 785518 }, - { url = "https://files.pythonhosted.org/packages/b4/0a/88f9cd88ff1e82881605c4ffd62d77ee67d051232cfe6f8e9a64b86cf0e8/regex-2026.6.28-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b77207e3cee13086f1906a6a2a12b41244c577e8ad9370d4b35ae1d548d354f3", size = 801371 }, - { url = "https://files.pythonhosted.org/packages/a8/97/601483732f93275482ceb9fed57813dfed7c47d3a019db6ec4a3bb6e23e0/regex-2026.6.28-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:6de82c268e5d101ee9e3ffd869924aa9a371e3a21e752cf4fa17b6ce50d219f7", size = 866517 }, - { url = "https://files.pythonhosted.org/packages/81/ed/385c2a0351b994a693453c1d1a6e9af9eb35db3c9460d76b5078acd70c62/regex-2026.6.28-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:b15859e3908544fb99cf47341dcf0bfd089147d258c4c4d8a29e5b087f8085cb", size = 772834 }, - { url = "https://files.pythonhosted.org/packages/06/bc/bbf4a5b3b29770d7f307d3c28b5b1bca0105b0cb424be0a4eb1339bc92cf/regex-2026.6.28-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:c91487a917edd48a1ea646fdf60d7936d304f0e686fa7ea8326e47efca51d816", size = 856606 }, - { url = "https://files.pythonhosted.org/packages/28/26/51d74fff82f682819979249f8d700267108ba5dc4eb284b0e11b9c85e4b3/regex-2026.6.28-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4ac65f3e3a99fd8f3a4a74e7a6610acd1ce9dfe9b8a03d346a4922380d68aeb", size = 803475 }, - { url = "https://files.pythonhosted.org/packages/7c/3e/6be10cefdc813533fe604dbf5d3c77d2638e7ee658b2749ebadc113b6b2e/regex-2026.6.28-cp313-cp313t-win32.whl", hash = "sha256:3f6316f258bc7e6c9c2acbe9954947bbd397a81be3742a637a555f1855d6618d", size = 269126 }, - { url = "https://files.pythonhosted.org/packages/3c/3c/32cda905ea1a6eeeb798291c294d8ec66ee0efe0cdba28b061e248b1d396/regex-2026.6.28-cp313-cp313t-win_amd64.whl", hash = "sha256:1484bdd6fba28422df9b5ebb04055b2e1b680e8e4f08490bb21ff0f3cc50d0ab", size = 279961 }, - { url = "https://files.pythonhosted.org/packages/ea/b9/69f4e5cd6fbe0bb420cb2dbae441ca118f2495bdda522a74da75aa9829e7/regex-2026.6.28-cp313-cp313t-win_arm64.whl", hash = "sha256:3f15020f0b69cafe57baa067ff65b29acef68ff6b1670a53bef1ca11d708e02d", size = 279266 }, + { url = "https://files.pythonhosted.org/packages/d8/dc/f7a8c9cf0768f704153d358fae2bc883199bc4ea1e4aa458f1be9d0ef2ce/regex-2026.6.28-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b83932645630965fd860fdb70ebbf964bf3e8007f08851ea424d01f8d35454a8", size = 489471, upload-time = "2026-06-28T19:53:06.385Z" }, + { url = "https://files.pythonhosted.org/packages/44/b3/9786a4a2133e2f1cc5897ed3d2da3da29ff54b775ffa38bc5935fc24be82/regex-2026.6.28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e81f1952355042e517dc9861ce65c676e4a098f42402993c40461786d1f794d4", size = 291294, upload-time = "2026-06-28T19:53:09.232Z" }, + { url = "https://files.pythonhosted.org/packages/dd/1f/bfe5b529257f0853aa6b94146e0f6462f4d45aa4f3c05d5a828f415dfd40/regex-2026.6.28-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2097591101d70bcc108af64c46f6066bb698ee067fec5f75beac0be317639311", size = 289216, upload-time = "2026-06-28T19:53:10.682Z" }, + { url = "https://files.pythonhosted.org/packages/25/56/f615165e90ac5f3b72b249240643439520bbac0ac60a9de06868528eba4c/regex-2026.6.28-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:31d7538a614b5842bf53ce329d07b43f97754ca7e6db8d69f347e071bce1c953", size = 784787, upload-time = "2026-06-28T19:53:12.393Z" }, + { url = "https://files.pythonhosted.org/packages/04/94/c9e3ad31b3d5fbe1228fee8319e0c02a5460296624f220d08764547fe6ae/regex-2026.6.28-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f5561e47bbe2b75373b695326507743fcdd4d2cc7f5022312024ccf39fa094e0", size = 852137, upload-time = "2026-06-28T19:53:14.287Z" }, + { url = "https://files.pythonhosted.org/packages/c0/77/d506a428e446466ee298f5425a774737d0671d070425ed794bb3314d60c6/regex-2026.6.28-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c10f2c5a55ab3dd8318d8ad5f11b530e2691c0edebebde7713066f484902c3fb", size = 899525, upload-time = "2026-06-28T19:53:15.987Z" }, + { url = "https://files.pythonhosted.org/packages/aa/72/becc00d839f19401f10a20168b44711c7b02f7f62bba875b2d8f98417435/regex-2026.6.28-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23f7e0cc60c72486b42a685f1ff4eec90d50d4fb05e4f9c7d5363b03aa02600d", size = 794116, upload-time = "2026-06-28T19:53:17.372Z" }, + { url = "https://files.pythonhosted.org/packages/fa/11/ea2ca423eeaac2e18077a18b058614e9201f130750df2126d444e39acab2/regex-2026.6.28-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:76493755f79a88d5ed2c9e63a41d3c05997e0a7ffbe76ed8c4ded8be35b8b14c", size = 786257, upload-time = "2026-06-28T19:53:18.712Z" }, + { url = "https://files.pythonhosted.org/packages/6d/9e/f5bf7ecbd14ff2086f015c54dc24fd0d74ba5327fef0de479213f8128615/regex-2026.6.28-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ff0f41a00f23ea5054acb61901380c41813d813eee3f80f800995710bcc52ecd", size = 769914, upload-time = "2026-06-28T19:53:20.564Z" }, + { url = "https://files.pythonhosted.org/packages/43/04/f9040a5360a06241ba5b7f2e6f1c6184e104a84e6f6522535700e94bf8e2/regex-2026.6.28-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3c60b297292e7e1ef5d02a4759f9e452ee4c8bb95e168d8fd0b5db01bd806f9f", size = 775013, upload-time = "2026-06-28T19:53:22.067Z" }, + { url = "https://files.pythonhosted.org/packages/73/97/4e46f7abf2f864319d2bcac609af3c0532968c66a3364337778fd232b83c/regex-2026.6.28-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a7cf03c87f7b9cbc25a8894cf9be83818406677b6b391b003ec7c884923387b5", size = 848814, upload-time = "2026-06-28T19:53:24.575Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b8/3d1f995727799a1e2e693e397acb7358094606e5591b6b5fd3128d2d1409/regex-2026.6.28-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:418208ea0af51cfed4f46eb9b1ea7cfc990ca284f0084ecbd951460fb089421e", size = 757702, upload-time = "2026-06-28T19:53:26.215Z" }, + { url = "https://files.pythonhosted.org/packages/20/10/fd5653b8572910a4fe9055f8959b070d7d9443c94ce986529fcdb5fb2a3c/regex-2026.6.28-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:7635fa2cddb917a6bbfac7890602573d2d8c4e470703b0640e6f86a988817ec3", size = 837140, upload-time = "2026-06-28T19:53:27.655Z" }, + { url = "https://files.pythonhosted.org/packages/5d/31/da77e3ef7b594a2aacbd03ce3d0050f33ab3e021df50c6901467c9006511/regex-2026.6.28-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7bb96c13d6cf5880d31bbef84ca701a64d738aa491c2b79975cc33f8ad00a31e", size = 782105, upload-time = "2026-06-28T19:53:29.375Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4d/c379001448d0f58b6946f168d4af96ad60a16c1553259c27b0df8701b640/regex-2026.6.28-cp310-cp310-win32.whl", hash = "sha256:56f05194c4843957dd8b3af87eb0c52d8cf0509e7f18e172d727f5f8ff840646", size = 266728, upload-time = "2026-06-28T19:53:31.813Z" }, + { url = "https://files.pythonhosted.org/packages/f3/8f/cb656529efa87d74cce0d69e606c745537016da3bdfae78f342af2242ee3/regex-2026.6.28-cp310-cp310-win_amd64.whl", hash = "sha256:70710927033af3b54369f17aaba1343b97a23d0b1aa994fa1512b08b1b8c136a", size = 277901, upload-time = "2026-06-28T19:53:33.293Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ac/d35ccc309c9409406445ab2ef0b56f6a341a916ccff49ff9ac5cc6bb8e9b/regex-2026.6.28-cp310-cp310-win_arm64.whl", hash = "sha256:ed7b30185ee3f8b9b053b0be567b4d226016e2afbebc17fde1c6a4580937b688", size = 276880, upload-time = "2026-06-28T19:53:35.029Z" }, + { url = "https://files.pythonhosted.org/packages/72/db/9051b36294bdbabaa9c7db57db0fbcdfbd17f7a106c539bb423d0323faea/regex-2026.6.28-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a71b51dd08b9b62f055fafab3dee8af8bd2ec81b373a44caef18d6c5ca28f43a", size = 489481, upload-time = "2026-06-28T19:53:36.684Z" }, + { url = "https://files.pythonhosted.org/packages/35/3f/24097a3c3ff30f9a639888900faaecabcf5f54a5bc9c851c297e11b349ef/regex-2026.6.28-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9c26a47770d30a0f85c01e261d2a3ebc342c4af6fd666dbd8c1fe4cbf3adf726", size = 291292, upload-time = "2026-06-28T19:53:38.39Z" }, + { url = "https://files.pythonhosted.org/packages/5e/cc/e0d762a189cfb4e8926d16e691720690d139a977b38fdb80230c259332ab/regex-2026.6.28-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e5efbc1af38f97e300d43028e5a92e752d924bcfb7f465d8669d5d5a6e78c233", size = 289232, upload-time = "2026-06-28T19:53:40.181Z" }, + { url = "https://files.pythonhosted.org/packages/4b/c8/ca0ac7f09cc88ca61e0c61c53f7db29334f660ffba5d0b52378e7c44723c/regex-2026.6.28-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1758df6fdd8c800620a5638958720e8a635e1da49a2f09df2dd63e94a24ec4a", size = 792332, upload-time = "2026-06-28T19:53:41.782Z" }, + { url = "https://files.pythonhosted.org/packages/8e/92/04ae94cbe0dd1f478b2aef6c46f995bb6946d3e338d4b28605478b66a2b7/regex-2026.6.28-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ad73ecf20c1ef5c975639f8bf845a9370fcf7dada7edc1e3b0bca20e2f8202f6", size = 861743, upload-time = "2026-06-28T19:53:43.261Z" }, + { url = "https://files.pythonhosted.org/packages/4c/ec/024d7638c807679ff8a0e6081d01d66c7762339af1cac71e45911587ff9a/regex-2026.6.28-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4d80c798b0eec6ea3d45f8816a1e8886c5664615d347d89e8c075b576a1b5a5d", size = 906481, upload-time = "2026-06-28T19:53:44.948Z" }, + { url = "https://files.pythonhosted.org/packages/cd/fd/93bfe5af45f0be4fa8983945455c0e6924e1aeb879cde227958869c1e71c/regex-2026.6.28-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a361feeaf1b6ba1df060f2ff5c5947092edf537a35ce78e76387ac56d3e0f4a4", size = 799867, upload-time = "2026-06-28T19:53:46.997Z" }, + { url = "https://files.pythonhosted.org/packages/ee/fd/e5d965d41f2398c8ce0f37a4652f03bb297fd009bb796d390134225dda12/regex-2026.6.28-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8b92366d9c8bba9642989534073662abdd9b41faf7603a7ae71597833f3b88f0", size = 773632, upload-time = "2026-06-28T19:53:48.892Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d9/ff39afaec92b9ee2dba0302a4783976005091681069808938c31cf8df3b6/regex-2026.6.28-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:11251768cc23f097dd61b18f67966e70f74da822784d17e12a444eb6b29d4288", size = 781669, upload-time = "2026-06-28T19:53:50.693Z" }, + { url = "https://files.pythonhosted.org/packages/45/4e/e2fd4bb8228e10c24af2d7ff867182372190e498eab9fd29cbe54c403c95/regex-2026.6.28-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ad5c67786145ec28a71a267d9f9d92bdc8d70d65541eea852c253f520a01f918", size = 854497, upload-time = "2026-06-28T19:53:52.323Z" }, + { url = "https://files.pythonhosted.org/packages/72/7c/f0340384a973082979064156d05f3d2cc1dced7371efcd7a1b45726a1a8a/regex-2026.6.28-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:f1da438e739765c3e85175ede05816cbede3caaacb1e0680568bda6119bfdfca", size = 763335, upload-time = "2026-06-28T19:53:54.024Z" }, + { url = "https://files.pythonhosted.org/packages/e1/32/90ce0d0898e205506cc22b9c81cfb16b722e06ca5f50fad51c053c2a727b/regex-2026.6.28-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d98b639046e51c5de64d9f77351532105e99ca271cb6f7640e1f903d6ab63032", size = 844615, upload-time = "2026-06-28T19:53:56.216Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/55abb149599dce1ade687170557129524011eeb3d92afe02429cea7754a2/regex-2026.6.28-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e164ace4dbab5c6ad4a4ac7c41a2638fe226d0c770a86f2eb041f594bac6ee7", size = 789193, upload-time = "2026-06-28T19:53:57.791Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ea/cf7f6f6f152e52fdad978b913bf24c14df647eca0f81ef31f3aee0be8982/regex-2026.6.28-cp311-cp311-win32.whl", hash = "sha256:3169a3159e4d99d9ae85ff0ed90ef3b8906cc3152653b6078b842ace6c8f72c3", size = 266731, upload-time = "2026-06-28T19:53:59.938Z" }, + { url = "https://files.pythonhosted.org/packages/c6/cf/a48d8e8d406b22481cad146f48fa0dfca3c5f402b91f26d8e5a0fe4f513d/regex-2026.6.28-cp311-cp311-win_amd64.whl", hash = "sha256:5977295b0a74e8241df8a4b3b27b12412a831f6fa32ee8b755039592cd768c3d", size = 277918, upload-time = "2026-06-28T19:54:01.502Z" }, + { url = "https://files.pythonhosted.org/packages/89/b2/a222392207db7ed86281a732a99f7cf7f2bb35d332799e892b8510be000e/regex-2026.6.28-cp311-cp311-win_arm64.whl", hash = "sha256:f5fbaef40c3e9282ccee4b075f5600a0d858aa0c34147732f1baa69c8188a95d", size = 276876, upload-time = "2026-06-28T19:54:03.411Z" }, + { url = "https://files.pythonhosted.org/packages/da/21/44aa415873032056c43eac21c67285deb2cf66cddb2a964c3cdc8f803efc/regex-2026.6.28-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:81cc5793ad33a10444445e8d29d3c73e752c8fb2e120772d70fcb6d41df40fe1", size = 490480, upload-time = "2026-06-28T19:54:05.392Z" }, + { url = "https://files.pythonhosted.org/packages/8b/5f/30d4116093c2128099f78b6990dfc1698fdbf3ee528f1e1c647378034c79/regex-2026.6.28-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e18225243250a1f7d7e5e5d883f3b96465cd79031acf5c6db902b7025f2125d9", size = 292137, upload-time = "2026-06-28T19:54:07.088Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/ca20a0e0de49837e6337603a91ab77556aa27033ac5b975615d98698cfb3/regex-2026.6.28-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ecd1638b1c2db1f2d01c182a4b0d3e2e88b0e99910320a745c1727ee3638ddab", size = 289623, upload-time = "2026-06-28T19:54:08.762Z" }, + { url = "https://files.pythonhosted.org/packages/50/11/c013422a7e2c59946df8ac93e792a4922c98287f2a2181341603c78a5d98/regex-2026.6.28-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4303ebe16b74eeb3fe2715745023266fea92fd44a23f3e7bb2fb48c7a7bbc195", size = 796756, upload-time = "2026-06-28T19:54:10.616Z" }, + { url = "https://files.pythonhosted.org/packages/b0/95/1309645a0e1ee6fb91d954501da57a0b33d50ad2a9acb313702851a7054e/regex-2026.6.28-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56b856b70b96c381d837f609eee442a1bd320cd2159f5c294b679552fb1a7eaf", size = 865465, upload-time = "2026-06-28T19:54:12.742Z" }, + { url = "https://files.pythonhosted.org/packages/20/06/491802db47c6f5e2904ffa2518ad3ac27fe6bbf5a66d73210a95cc080d47/regex-2026.6.28-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f74675ab76ab1d005ffba4dee308e53e89efc22be6e9f9fae5b539a3f81bdff2", size = 912350, upload-time = "2026-06-28T19:54:14.508Z" }, + { url = "https://files.pythonhosted.org/packages/5e/60/3ba57840bcc7e2367090360de0c15a5ba6ad22be89314251105f2e943f43/regex-2026.6.28-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90581684565a93f7258af1e5d3f41ef20d7d7c61f2a428183a342bcb65485e38", size = 801261, upload-time = "2026-06-28T19:54:16.432Z" }, + { url = "https://files.pythonhosted.org/packages/eb/27/af1eb74e9a78c782b3e450b611a595e44906da8a5107e1227f4a7fd0480b/regex-2026.6.28-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:28f9e6c28f9b90f6f784595a33240a57e181e61b6ee3dc259b25c61e356d1aa3", size = 777072, upload-time = "2026-06-28T19:54:18.128Z" }, + { url = "https://files.pythonhosted.org/packages/20/18/fdd4c883a39e3ed00d669062af1135809bfd3281bf528150849fbd68825b/regex-2026.6.28-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:378a71d861fc7c8806b04ac5b133d53c0e774f92f5d9663a539872d3fa2b0417", size = 785119, upload-time = "2026-06-28T19:54:20.314Z" }, + { url = "https://files.pythonhosted.org/packages/1c/79/0aabe34b8482dcadf64355f70f96e22eba5ec6c1efb33563f89654f4061c/regex-2026.6.28-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4cc199874ecd6267a49b111052250825bfe19b5101b23b2ba80f54efa3e0994e", size = 860118, upload-time = "2026-06-28T19:54:22.368Z" }, + { url = "https://files.pythonhosted.org/packages/a8/2c/c973323306a27c9db7d160e9584eb7e0ece2a96224ccb0d39060558b31f9/regex-2026.6.28-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:b916a10431494ef4b4d62c6c89cab6426af7873125b8cd6c15811bf5fc58eec8", size = 765786, upload-time = "2026-06-28T19:54:24.265Z" }, + { url = "https://files.pythonhosted.org/packages/e3/df/9ca3e378e352242a4cb45573a5e9162c3ee791507702a23966fa559e36b5/regex-2026.6.28-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2e27727fba075f1e4409416d2f537d4c30fc11f012ea507f7bd74d3e19ecb57a", size = 852120, upload-time = "2026-06-28T19:54:25.972Z" }, + { url = "https://files.pythonhosted.org/packages/a2/3e/3e31e255c4971f53cbce6306b5e3c76cbd3735a54f419bb3b2f194e9f68c/regex-2026.6.28-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:700fc6a7844bb2c4149292ac79d1df8841a00acd4d45cd32c1ebc7bcc1fd0da8", size = 789503, upload-time = "2026-06-28T19:54:27.678Z" }, + { url = "https://files.pythonhosted.org/packages/72/01/d36561c21c3033d7eeb31d51b491916817de7861acefccc5fc9db8a5037c/regex-2026.6.28-cp312-cp312-win32.whl", hash = "sha256:03376d60b6a11aecb88a79fa2be06b40faa01c6693bc31ef69435cd4818b9463", size = 267109, upload-time = "2026-06-28T19:54:29.316Z" }, + { url = "https://files.pythonhosted.org/packages/a0/59/bbbb0591f38b18c65977cd65ce64749eba1c1996c99ac04e900fc30c0dcb/regex-2026.6.28-cp312-cp312-win_amd64.whl", hash = "sha256:fbd2ded482bf99e6651992bbfcde460272724d4bbc49ef3d6b46d9312867ec84", size = 277711, upload-time = "2026-06-28T19:54:31.143Z" }, + { url = "https://files.pythonhosted.org/packages/86/06/be4f6b337d773ae5739a1bc238f97c16926e72017243735853c030f4c628/regex-2026.6.28-cp312-cp312-win_arm64.whl", hash = "sha256:37294d3d7ddb64c7e89184b2894e0f8f0a19c514bc59513d71fe692c3a8d5fc6", size = 277022, upload-time = "2026-06-28T19:54:32.97Z" }, + { url = "https://files.pythonhosted.org/packages/b6/53/d5c1b3cc0b5a0c985563ad6fac93d73ff2b300cb84342d89f044625d6bc7/regex-2026.6.28-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:b295a83426e0e44e9e60fde99789e181bd26788a1890ae7fe2a24c69bb6246ca", size = 490329, upload-time = "2026-06-28T19:54:35.775Z" }, + { url = "https://files.pythonhosted.org/packages/8d/9f/0c3503e819e91ca0e7a901a8e989ebf840ac7c7aea20b1fc7f31b6759f77/regex-2026.6.28-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0c31665c0deb5c111557a1cac8c27bd5629e2f9e7fd5058900a03576c33b601c", size = 292039, upload-time = "2026-06-28T19:54:37.977Z" }, + { url = "https://files.pythonhosted.org/packages/bb/7f/cd004e13fcad23b3794a82307dfd222e6365eb7f598bd3caab148a830bff/regex-2026.6.28-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6bf295f2c59de77d1ea7de053607ae4dc9ceb3d57bbb6c7ec51ef4acc4ccff94", size = 289488, upload-time = "2026-06-28T19:54:39.545Z" }, + { url = "https://files.pythonhosted.org/packages/73/4c/293fb34586fbcdc47eac436069e9c11f71fae5dadfd4889b475d7d2e5f7a/regex-2026.6.28-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:17c077586770f67e05bbffeba07fbee6b2b22244f4d4caf8d94e59d574befe04", size = 796772, upload-time = "2026-06-28T19:54:41.347Z" }, + { url = "https://files.pythonhosted.org/packages/92/fa/c0cd1a90b7d12d9dc155cfc8bdea8df9720988ea5b07e8fa1eccbd0ab2dd/regex-2026.6.28-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0e6cb5a61486f9062397d2e189573b39d38ecfaed698fd9fb6e2756a8ebb8762", size = 865467, upload-time = "2026-06-28T19:54:43.485Z" }, + { url = "https://files.pythonhosted.org/packages/4e/db/0b479973046d005a1eaea299d5d536aeecb9488a16d9cbb8286338102e2d/regex-2026.6.28-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e86e91a2664f44c3a4e363a7d78fb17c27d5046882e30ea5a877f5e89b28d2ba", size = 912345, upload-time = "2026-06-28T19:54:46.091Z" }, + { url = "https://files.pythonhosted.org/packages/5b/5b/d65adfbd02f32212431bca1f06d1e2eb763a20b12978b454bafaf23dacb7/regex-2026.6.28-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4dfd1331c49233998d84fc5f1f4436cf7a435a7655f6cf0f490229bb5c7254e5", size = 801291, upload-time = "2026-06-28T19:54:48.3Z" }, + { url = "https://files.pythonhosted.org/packages/fc/09/2103686defaf9a0a31c1663782359d5b45f42524c64cca681f5481e44a5e/regex-2026.6.28-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cadea12805a1bce0b091c302b814207be26fb60a9c0e7f9ad2f9e21790a429fe", size = 777106, upload-time = "2026-06-28T19:54:50.326Z" }, + { url = "https://files.pythonhosted.org/packages/85/5a/b57593c0aa23ed269ec332fbcf07852abcb6b746e811d9464e0d09b4e25f/regex-2026.6.28-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5f2c1682b67ad5d2376498f2a5a2a8f782fa2e4a06d0465b5e357799806e8a20", size = 785175, upload-time = "2026-06-28T19:54:52.172Z" }, + { url = "https://files.pythonhosted.org/packages/79/59/c36e756ad29bf14d7b6c6d7138952476b21f6160286cedb98ac13481c993/regex-2026.6.28-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:64e142eb55e84868087da1375d7c36ff97d55010951849f515322a91d5fef1b4", size = 860186, upload-time = "2026-06-28T19:54:54.11Z" }, + { url = "https://files.pythonhosted.org/packages/61/66/49808aea0da9649c300139360708fb91b7144be1f962fcebf96755fde948/regex-2026.6.28-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:abb4daabe7be63273787a62dfd6164dadf8f7a63fbec3d2730e5e5e7126d858c", size = 765754, upload-time = "2026-06-28T19:54:56.04Z" }, + { url = "https://files.pythonhosted.org/packages/be/c5/52bbd436cf2200decdf48825fa38363eaaeebb77011ea9928a1ef9e0b9f2/regex-2026.6.28-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ec2b2ad00ab8c16a2798cc8db80c53c4d5b8b3a2441f6cbaef06625f5ca25854", size = 852085, upload-time = "2026-06-28T19:54:57.988Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c3/0390b66e3019497143fe768b3ba567b64d8b24f3812d09506deb86f4a0f0/regex-2026.6.28-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bfc9677982c914d9085b8e1c3b3ae6e88f139fb56531c2416d6c8f338093c22b", size = 789600, upload-time = "2026-06-28T19:54:59.977Z" }, + { url = "https://files.pythonhosted.org/packages/88/fd/ab5b03653a244975069fed93d73f4f5f7484c03a84cedb238292510d7182/regex-2026.6.28-cp313-cp313-win32.whl", hash = "sha256:bf54bc693fc4e0530e666ba5ec4bcba14dbe8f66b7cfc15c27317d1a6e40b9a5", size = 267088, upload-time = "2026-06-28T19:55:02.159Z" }, + { url = "https://files.pythonhosted.org/packages/68/55/21022f7d3143210ae8d4ff905c45306237b657375cc0b97883f49db3d423/regex-2026.6.28-cp313-cp313-win_amd64.whl", hash = "sha256:e128feaf65bf3d9eb91bec92322a8f7e4835e9c798f3e9ea4b69f4def85620e3", size = 277680, upload-time = "2026-06-28T19:55:04.185Z" }, + { url = "https://files.pythonhosted.org/packages/b6/99/7f664804f1aef924542b0b233996b78b3e4d0a52d9951358aac99f129f51/regex-2026.6.28-cp313-cp313-win_arm64.whl", hash = "sha256:695873e0ea8d3815ea9e92e2c68faf039cc450e2c0a62a31afe2049eb11be767", size = 277017, upload-time = "2026-06-28T19:55:06.29Z" }, + { url = "https://files.pythonhosted.org/packages/cb/e1/9eb83518e159d719fd681c4932dc2aaff855ce72451e1d05d69466f25a96/regex-2026.6.28-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:189dbf9fc4252d9f1352bf4bd1bef885edb6cc4b7341df202a65f821aaa3891c", size = 494195, upload-time = "2026-06-28T19:55:08.292Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e2/e259c5f2f7be269d0e2fb54275c1fa6a13fb47019f389c3f3ae457447825/regex-2026.6.28-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9277a4c6503390aa39cb4483b87ec0384faee0850a23b5cea33d008b5d8d83f1", size = 293976, upload-time = "2026-06-28T19:55:10.014Z" }, + { url = "https://files.pythonhosted.org/packages/8d/4e/9bdf444014d22b045d0c82ca114fac7e07a597b5b5331b7c4ce6328426e2/regex-2026.6.28-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17eddca4e8ea9af0b5739314776cdf0172a49731ab61f2e1ea66e066ddd46c97", size = 292340, upload-time = "2026-06-28T19:55:11.88Z" }, + { url = "https://files.pythonhosted.org/packages/fd/3a/f49b11e59cbfe187ace0053a460bd72a0169b8cd52e7db9421a074ce7a43/regex-2026.6.28-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4466b8641e00c697aab5a73150150d2b2ea96b131c595691f42031abafd9f4d", size = 811704, upload-time = "2026-06-28T19:55:13.612Z" }, + { url = "https://files.pythonhosted.org/packages/2f/fb/ad04c39e149bf8b6cf357df5fff78341733ec366780a00c803a36735818c/regex-2026.6.28-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9cfcd4b0bdcf768c498415c170d1ed2a25a99bf0b65fa253bbd02f68ceba6475", size = 871157, upload-time = "2026-06-28T19:55:15.797Z" }, + { url = "https://files.pythonhosted.org/packages/7f/64/0e5ba31c11eb8ef7aac19a690c1211fc9aa9990caf09565785ebb0081b9a/regex-2026.6.28-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:80c7adf1ef647f6b1e8aa2ca280e517174cd08bdf7a2e412cdfb68bd6a0917cb", size = 917287, upload-time = "2026-06-28T19:55:18.692Z" }, + { url = "https://files.pythonhosted.org/packages/11/75/6b78df2b858c2fcbbc4858fdc3f2975cf2703be374b2842db7d2c32591a7/regex-2026.6.28-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a043f5770e82283a22aed4cefef1a4e0f9dd8fd7184cb6ce0ad2e579e2134a9e", size = 816333, upload-time = "2026-06-28T19:55:20.973Z" }, + { url = "https://files.pythonhosted.org/packages/b4/01/ecfe665a3694d5eda9f3ec686c856438ada0943947b6005e90556a1e2cdf/regex-2026.6.28-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3bd630a8dba06b55254ea5ee862194edab52ec783100d2ef1cd15a9c512fee27", size = 785518, upload-time = "2026-06-28T19:55:23.003Z" }, + { url = "https://files.pythonhosted.org/packages/b4/0a/88f9cd88ff1e82881605c4ffd62d77ee67d051232cfe6f8e9a64b86cf0e8/regex-2026.6.28-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b77207e3cee13086f1906a6a2a12b41244c577e8ad9370d4b35ae1d548d354f3", size = 801371, upload-time = "2026-06-28T19:55:24.888Z" }, + { url = "https://files.pythonhosted.org/packages/a8/97/601483732f93275482ceb9fed57813dfed7c47d3a019db6ec4a3bb6e23e0/regex-2026.6.28-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:6de82c268e5d101ee9e3ffd869924aa9a371e3a21e752cf4fa17b6ce50d219f7", size = 866517, upload-time = "2026-06-28T19:55:27.232Z" }, + { url = "https://files.pythonhosted.org/packages/81/ed/385c2a0351b994a693453c1d1a6e9af9eb35db3c9460d76b5078acd70c62/regex-2026.6.28-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:b15859e3908544fb99cf47341dcf0bfd089147d258c4c4d8a29e5b087f8085cb", size = 772834, upload-time = "2026-06-28T19:55:29.154Z" }, + { url = "https://files.pythonhosted.org/packages/06/bc/bbf4a5b3b29770d7f307d3c28b5b1bca0105b0cb424be0a4eb1339bc92cf/regex-2026.6.28-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:c91487a917edd48a1ea646fdf60d7936d304f0e686fa7ea8326e47efca51d816", size = 856606, upload-time = "2026-06-28T19:55:32.186Z" }, + { url = "https://files.pythonhosted.org/packages/28/26/51d74fff82f682819979249f8d700267108ba5dc4eb284b0e11b9c85e4b3/regex-2026.6.28-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4ac65f3e3a99fd8f3a4a74e7a6610acd1ce9dfe9b8a03d346a4922380d68aeb", size = 803475, upload-time = "2026-06-28T19:55:34.328Z" }, + { url = "https://files.pythonhosted.org/packages/7c/3e/6be10cefdc813533fe604dbf5d3c77d2638e7ee658b2749ebadc113b6b2e/regex-2026.6.28-cp313-cp313t-win32.whl", hash = "sha256:3f6316f258bc7e6c9c2acbe9954947bbd397a81be3742a637a555f1855d6618d", size = 269126, upload-time = "2026-06-28T19:55:36.565Z" }, + { url = "https://files.pythonhosted.org/packages/3c/3c/32cda905ea1a6eeeb798291c294d8ec66ee0efe0cdba28b061e248b1d396/regex-2026.6.28-cp313-cp313t-win_amd64.whl", hash = "sha256:1484bdd6fba28422df9b5ebb04055b2e1b680e8e4f08490bb21ff0f3cc50d0ab", size = 279961, upload-time = "2026-06-28T19:55:38.456Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b9/69f4e5cd6fbe0bb420cb2dbae441ca118f2495bdda522a74da75aa9829e7/regex-2026.6.28-cp313-cp313t-win_arm64.whl", hash = "sha256:3f15020f0b69cafe57baa067ff65b29acef68ff6b1670a53bef1ca11d708e02d", size = 279266, upload-time = "2026-06-28T19:55:40.62Z" }, + { url = "https://files.pythonhosted.org/packages/3b/fb/fad3b810a5bb1e09b9e5d6913fc6ba88cab738fdf283196827a3c59a4c10/regex-2026.6.28-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:f7c032b0c8a73739ff8ff1aaf30c281fa19c17bf7f1543256c8507390db7807c", size = 490407, upload-time = "2026-06-28T19:55:42.724Z" }, + { url = "https://files.pythonhosted.org/packages/d6/52/b8c79d12276d93e90e707e939b396034c04980caf1235312ef790f8e11fc/regex-2026.6.28-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:f6710f512c57b84f127a23d0f59560a03b64136eff419ae1be5ab557577fe5e3", size = 291988, upload-time = "2026-06-28T19:55:44.549Z" }, + { url = "https://files.pythonhosted.org/packages/23/d2/6a911f18279daa8d7bb8b20d771ddb6ef31fabd35f5921f9d3ba21640e80/regex-2026.6.28-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c0013958f427bd82509a186b9ff206d66cb8d60a81fc797a4c717afd18c5b0ba", size = 289704, upload-time = "2026-06-28T19:55:46.365Z" }, + { url = "https://files.pythonhosted.org/packages/fd/22/ad1955c47c669291a05804d53d7071cc0732dfdf166857be38003cedc2d1/regex-2026.6.28-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94f06cdcd6421f8e194ad312ea608020381250df9b8a57661c1b57e9e5273878", size = 797017, upload-time = "2026-06-28T19:55:48.166Z" }, + { url = "https://files.pythonhosted.org/packages/e5/67/a83159ff8703ab4d0c2cf99e76ebf289b7b4a501623241d09f88f3614f80/regex-2026.6.28-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ec9689392f7494ff4e3f8e7e8522f9158f11023f337eaaf04a64542fc45bbf26", size = 866112, upload-time = "2026-06-28T19:55:51.047Z" }, + { url = "https://files.pythonhosted.org/packages/b9/09/7bff2d6dbbd77421b3274aa51db1c887381cbc5b6eda93598c3e882ea345/regex-2026.6.28-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:aa084684e6d2078bf6139e374d1fc2af5ddc1ac7122759a2db716d68169f6fd0", size = 911554, upload-time = "2026-06-28T19:55:53.707Z" }, + { url = "https://files.pythonhosted.org/packages/29/44/ae59c3826e7ba492e56795cdf74ea2a7b5b7c5ea116afb79ee4956a5dff1/regex-2026.6.28-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:40455e6840dc4e96a6fe50f4cedc957de2752c954d91e789812be55d49be199a", size = 800665, upload-time = "2026-06-28T19:55:55.875Z" }, + { url = "https://files.pythonhosted.org/packages/d6/19/6fd033d2ab00f35d445aaeaf3307c1e721424dcbfd48f6f65c857cb939cf/regex-2026.6.28-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:530b5c223b9ca5dd8370ac502e080aee0e4ded32be987c6564b425fb5523d581", size = 777243, upload-time = "2026-06-28T19:55:57.909Z" }, + { url = "https://files.pythonhosted.org/packages/4e/9d/99730f26df4938049ab1e652ca75e967b4c6739444e18d9707bfdb8af20c/regex-2026.6.28-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8e0ed273ecd1a89be84466c1749bfe58609cc2a32b5d5e05006c4625ba96411b", size = 785784, upload-time = "2026-06-28T19:56:00.072Z" }, + { url = "https://files.pythonhosted.org/packages/48/49/105cd57162f5fc5c04cc917a1388a060cf8427e5c14353cd9044660fbf4d/regex-2026.6.28-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:0ab0d5344311fc8e8667078942056c3b9c9b4a4b1cc99f2eb8a5af54554f4acc", size = 860914, upload-time = "2026-06-28T19:56:02.017Z" }, + { url = "https://files.pythonhosted.org/packages/a2/a5/788245a95b69018f58bff2f4fd27d007cacaea088cdb390979743f1b2571/regex-2026.6.28-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:eacb79625323d9f7e7925366b917f492b8356fad58f5dc4fa12ff8c21d8f4ca9", size = 765915, upload-time = "2026-06-28T19:56:05.021Z" }, + { url = "https://files.pythonhosted.org/packages/ca/01/292065a39a004b05e67a337b18213670a7cb919d6856ac2d7df7f1a10dbb/regex-2026.6.28-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:20f4d87702702aa1d572721e146f301660c50eef6fd6cb596e48a22b0ace17db", size = 851404, upload-time = "2026-06-28T19:56:07.251Z" }, + { url = "https://files.pythonhosted.org/packages/98/9e/a93d865db0e13483ae1a01d81e2ce16d4a7fe2f9b9fe4aac4cc08590b136/regex-2026.6.28-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1e693940a3b9e6d6e4dc2a54ecaa74b74934f77af1ef95f518a74261ef7cc1bc", size = 789373, upload-time = "2026-06-28T19:56:09.894Z" }, + { url = "https://files.pythonhosted.org/packages/82/0c/38b1685ad4017d78efbc8fa7dbbf96d8113b53750c8aa2d3609defd46605/regex-2026.6.28-cp314-cp314-win32.whl", hash = "sha256:234a51e20ebc18ab83b2c0600cf28f2e884560a0e00f743878f0b7d8e7c4cf03", size = 272496, upload-time = "2026-06-28T19:56:11.83Z" }, + { url = "https://files.pythonhosted.org/packages/55/50/e19f261ff9ba9b50722a529e09b1743ecf65eb348be99d0fd2cd7fcede1c/regex-2026.6.28-cp314-cp314-win_amd64.whl", hash = "sha256:7b15c437bc4604f03ceb3f8d37eae2f8930e320e1bc556b259848c639d9eec1a", size = 280754, upload-time = "2026-06-28T19:56:13.758Z" }, + { url = "https://files.pythonhosted.org/packages/36/b8/c9e68f3a9e33be73f20990b2c065b144ff2d0aa242608a950d8c4f3b56e8/regex-2026.6.28-cp314-cp314-win_arm64.whl", hash = "sha256:c6e6f790d01380a74ad564f216c533b86504afb61bf66f2b2e11e7f1a3e287a7", size = 280979, upload-time = "2026-06-28T19:56:15.928Z" }, + { url = "https://files.pythonhosted.org/packages/03/e6/21c425a37880c650d007c4171c6a80325446d830d85f5fbf335e7205b1e7/regex-2026.6.28-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3527a72adcbe9e3600f1553b497d397c1a371d227580d41d96c3c5964109b65c", size = 494282, upload-time = "2026-06-28T19:56:18.049Z" }, + { url = "https://files.pythonhosted.org/packages/07/50/6647a7ccf5ffff995ba955a0b7d766440f4e58ce1666549c8ee998f2b972/regex-2026.6.28-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a644f6408692812f5ead82519eed680e08d5d546fddbd9f7d9514e3c73899aa5", size = 293977, upload-time = "2026-06-28T19:56:20.145Z" }, + { url = "https://files.pythonhosted.org/packages/8c/dc/a3e141a4eaf125e50f63105570c01fa477c06ac5259dcfa95e9b90760e84/regex-2026.6.28-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8e2fae6bb883648346f84db270dc9aafc29d8e895f62b88a75ccc83b09519820", size = 292432, upload-time = "2026-06-28T19:56:22.345Z" }, + { url = "https://files.pythonhosted.org/packages/35/ee/2ac1a6b9f167f8ff69f5a789938cc103b60cff41b24a6990daced8b88e34/regex-2026.6.28-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:debe623e09cee97ef9404575e936c610aac9bb08358c5099aaef14644a6871f2", size = 811877, upload-time = "2026-06-28T19:56:25.056Z" }, + { url = "https://files.pythonhosted.org/packages/df/7b/9a5505ee92180bcae300b1018b9ff3d3c19962436e66f2505f255e9fde35/regex-2026.6.28-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cc579c91fb4605773483a8d940b136bcc5b854fff44fa14a1572a038f46563f1", size = 871212, upload-time = "2026-06-28T19:56:27.352Z" }, + { url = "https://files.pythonhosted.org/packages/24/4d/d61a702a9f9d1bd29b22cbef1aed6d477baa961232a7eb4d91b7775b0b3e/regex-2026.6.28-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e7c42be203d84ecf7d487ff23f8a61ef0eb0534fa0fc317a2fce8c065d20618f", size = 917507, upload-time = "2026-06-28T19:56:29.762Z" }, + { url = "https://files.pythonhosted.org/packages/d4/60/1308066f5966b65fbb6905b99ba37e9f1cd753dd0ac08485f8257334ee92/regex-2026.6.28-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8184b4e2fdaf9cdfe77e38f15a4d9dc149168c9c29eb0ea17c5481d3bb80546", size = 816389, upload-time = "2026-06-28T19:56:32.043Z" }, + { url = "https://files.pythonhosted.org/packages/bd/5c/57ce2cb8d714ee0b7f11c7ee4cfe2af66df2b90f147feadcb538609a3a02/regex-2026.6.28-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:697f103104f5872d64078d8eeac59979960be8ee76115a2d3f31096312e2a400", size = 785890, upload-time = "2026-06-28T19:56:34.492Z" }, + { url = "https://files.pythonhosted.org/packages/ff/fd/1d5350d3a8a327bff0fccacb911732baf7b5b6f5529c0e3fa602a23e7dad/regex-2026.6.28-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:714d2b1aa29beef0ddfcdc72ad0771c05326551a8bb0680b0ddf74bfaad87387", size = 801451, upload-time = "2026-06-28T19:56:36.749Z" }, + { url = "https://files.pythonhosted.org/packages/f3/79/3c9e4f8a0306e030ad5a43bbbc01625fb28d58a813bc52d42fd1cc63fb2e/regex-2026.6.28-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0f09f62e450cc2f113018cc8412aeea3a120a04e1ca7e801a0d441583f9a3b06", size = 866504, upload-time = "2026-06-28T19:56:38.994Z" }, + { url = "https://files.pythonhosted.org/packages/65/12/f747de475b54f4709efb24dd0fbc8467c64cec91f5db0d047b079646ee78/regex-2026.6.28-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:731ea12d5aeb2577eaef2393d6428b995f76eb35f68a89e03e15a97719d1de19", size = 773047, upload-time = "2026-06-28T19:56:41.061Z" }, + { url = "https://files.pythonhosted.org/packages/58/3c/f02f860e0500c1b2d61a79dec7e214b37fb9656281dcddc92397edf96678/regex-2026.6.28-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:51e952c8783eabd4706d0f63922f219bcfc1bef9b8cb35941c0d1a0396578858", size = 856665, upload-time = "2026-06-28T19:56:43.466Z" }, + { url = "https://files.pythonhosted.org/packages/4d/6c/28b3fa222513484be9dee26b7222bda109056c43ea28aa2314262ca48816/regex-2026.6.28-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:43248fe4c0ab8fbb223588a0795b11268940072c97bba30ea8f9b49d8cdfde34", size = 803573, upload-time = "2026-06-28T19:56:45.791Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f0/8f86cf1a1fd85c5ab0c503c9fe4607ad4ad48978b2d8b435d94465e134c7/regex-2026.6.28-cp314-cp314t-win32.whl", hash = "sha256:fc1eddc25ad23c0f1344ab280d961ac595ead48292d7c779497975942373f493", size = 274515, upload-time = "2026-06-28T19:56:47.948Z" }, + { url = "https://files.pythonhosted.org/packages/0f/de/f8613c03b36786ddef2c930d28f9bcae861fcd541cc9203a870956cf1e83/regex-2026.6.28-cp314-cp314t-win_amd64.whl", hash = "sha256:ede8d8e53b6dde0a50f7eca902f0af76d87ab02a55aba7542da68ae3e5dfe83d", size = 283650, upload-time = "2026-06-28T19:56:50.614Z" }, + { url = "https://files.pythonhosted.org/packages/4d/f3/f5ec86839bbabe33b6dee649b62ff9a445d43de6b0ad780cf6b83c56f61e/regex-2026.6.28-cp314-cp314t-win_arm64.whl", hash = "sha256:4da6f6a72f8700b97a1a765e837fb7d5750bfd9f13acea7bae498f573e3a70a8", size = 283338, upload-time = "2026-06-28T19:56:52.879Z" }, ] [[package]] @@ -945,9 +1147,9 @@ dependencies = [ { name = "markdown-it-py" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680 } +sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654 }, + { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" }, ] [[package]] @@ -957,122 +1159,140 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "eth-utils" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1b/2d/439b0728a92964a04d9c88ea1ca9ebb128893fbbd5834faa31f987f2fd4c/rlp-4.1.0.tar.gz", hash = "sha256:be07564270a96f3e225e2c107db263de96b5bc1f27722d2855bd3459a08e95a9", size = 33429 } +sdist = { url = "https://files.pythonhosted.org/packages/1b/2d/439b0728a92964a04d9c88ea1ca9ebb128893fbbd5834faa31f987f2fd4c/rlp-4.1.0.tar.gz", hash = "sha256:be07564270a96f3e225e2c107db263de96b5bc1f27722d2855bd3459a08e95a9", size = 33429, upload-time = "2025-02-04T22:05:59.089Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/99/fb/e4c0ced9893b84ac95b7181d69a9786ce5879aeb3bbbcbba80a164f85d6a/rlp-4.1.0-py3-none-any.whl", hash = "sha256:8eca394c579bad34ee0b937aecb96a57052ff3716e19c7a578883e767bc5da6f", size = 19973 }, + { url = "https://files.pythonhosted.org/packages/99/fb/e4c0ced9893b84ac95b7181d69a9786ce5879aeb3bbbcbba80a164f85d6a/rlp-4.1.0-py3-none-any.whl", hash = "sha256:8eca394c579bad34ee0b937aecb96a57052ff3716e19c7a578883e767bc5da6f", size = 19973, upload-time = "2025-02-04T22:05:57.05Z" }, ] [[package]] name = "ruff" version = "0.15.20" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/dc/35b341fc554ba02f217fc10da57d1a75168cfbcf75b0ef2202176d4c4f2d/ruff-0.15.20.tar.gz", hash = "sha256:1416eb04349192646b54de98f146c4f59afe37d0decfc02c3cbbf396f3a28566", size = 4755489 } +sdist = { url = "https://files.pythonhosted.org/packages/43/dc/35b341fc554ba02f217fc10da57d1a75168cfbcf75b0ef2202176d4c4f2d/ruff-0.15.20.tar.gz", hash = "sha256:1416eb04349192646b54de98f146c4f59afe37d0decfc02c3cbbf396f3a28566", size = 4755489, upload-time = "2026-06-25T17:20:37.578Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/d9/2d5014f0253ba541d2061d9fa7193f48e941c8b21bb88a7ff9bbe0bd0596/ruff-0.15.20-py3-none-linux_armv6l.whl", hash = "sha256:00e188c53e499c3c1637f73c91dcf2fb56d576cab76ce1be50a27c4e80e37078", size = 10839665 }, - { url = "https://files.pythonhosted.org/packages/c6/d3/ac1798ba64f670698867fcfc591d50e7e421bef137db564858f619a30fcf/ruff-0.15.20-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9ebd1fd9b9c95fc0bd7b2761aebec1f030013d2e193a2901b224af68fe47251b", size = 11208649 }, - { url = "https://files.pythonhosted.org/packages/47/47/d3ac899991202095dfcf3d5176be4272642be3cf981a2f1a30f72a2afb95/ruff-0.15.20-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c5b16cdd67ca108185cd36dce98c576350c03b1660a751de725fb049193a0632", size = 10622638 }, - { url = "https://files.pythonhosted.org/packages/33/13/4e043fe30aa94d4ff5213a9881fc296d12960f5971b234a5263fdc225312/ruff-0.15.20-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3413bb3c3d2ca6a8208f1f4809cd2dca3c6de6d0b491c0e70847672bde6e6efd", size = 10984227 }, - { url = "https://files.pythonhosted.org/packages/76/e6/92e7bf40388bc5800073b96564f56264f7e48bfd1a498f5ced6ae6d5a769/ruff-0.15.20-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd7ec42b3bb3da066488db093308a69c4ac5ee6d2af333a86ba6e2eb2e7dd44b", size = 10622882 }, - { url = "https://files.pythonhosted.org/packages/13/7a/43460be3f24495a3aa46d4b16873e2c4941b3b5f0b00cf88c03b7b94b339/ruff-0.15.20-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1a36ad0eb77fba9aabfb69ede54de6f376d04ac18ebea022847046d340a8267", size = 11474808 }, - { url = "https://files.pythonhosted.org/packages/27/a0/f37077884873221c6b33b4ab49eb18f9f88e54a16a25a5bca59bef46dd66/ruff-0.15.20-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6df3b1e4610432f0386dba04d853b5f08cbbc903410c6fcc02f620f05aff53c", size = 12293094 }, - { url = "https://files.pythonhosted.org/packages/a6/74/165545b60256a9704c21ac0ec4a0d07933b320812f9584836c9f4aca4292/ruff-0.15.20-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e89f198a1ea6ef0d727c1cf16088bc91a6cb0ab947dedc966715691647186eae", size = 11526176 }, - { url = "https://files.pythonhosted.org/packages/86/b1/a976a136d40ade83ce743578399865f57001003a409acadc0ecbb3051082/ruff-0.15.20-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309809086c2acb67624950a3c8133e80f32d0d3e27106c0cd60ff26657c9f24b", size = 11520767 }, - { url = "https://files.pythonhosted.org/packages/19/0f/f032696cb01c9b54c0263fa393474d7758f1cdc021a01b04e3cbc2500999/ruff-0.15.20-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2d2374caa2f2c2f9e2b7da0a50802cfb8b79f55a9b5e49379f564544fbf56487", size = 11500132 }, - { url = "https://files.pythonhosted.org/packages/4b/f4/51b1a14bc69e8c224b15dab9cce8e99b425e0455d462caa2b3c9be2b6a8e/ruff-0.15.20-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a1ed17b65293e0c2f22fc387bc13198a5de94bf4429589b0ff6946b0feaf21a3", size = 10943828 }, - { url = "https://files.pythonhosted.org/packages/71/4b/fe267640783cd02bf6c5cc290b1df1051be2ec294c678b5c15fe19e52343/ruff-0.15.20-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f701305e66b38ea6c91882490eb73459796808e4c6362a1b765255e0cdcd4053", size = 10645418 }, - { url = "https://files.pythonhosted.org/packages/b0/c0/a65aa4ec2f5e87a1df32dc3ec1fede434fe3dfd5cbcf3b503cafc676ab54/ruff-0.15.20-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5b9c0c367ad8e5d0d5b5b8537864c469a0a0e55417aadfbeca41fa61333be9f4", size = 11211770 }, - { url = "https://files.pythonhosted.org/packages/5a/a4/0caa331d954ae2723d729d351c989cb4ca8b6077d5c6c2cb6de75e98c041/ruff-0.15.20-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:01cc00dd58f0df339d0e902219dd53990ea99996a0344e5d9cc8d45d5307e460", size = 11618698 }, - { url = "https://files.pythonhosted.org/packages/10/9b/5f14927848d2fd4aa891fd88d883788c5a7baba561c7874732364045708c/ruff-0.15.20-py3-none-win32.whl", hash = "sha256:ed65ef510e43a137207e0f01cfcf998aeddb1aeeda5c9d35023e910284d7cf21", size = 10857322 }, - { url = "https://files.pythonhosted.org/packages/fa/f0/fe47c501f9dea92a26d788ff98bb5d92ed4cb4c88792c5c88af6b697dc8e/ruff-0.15.20-py3-none-win_amd64.whl", hash = "sha256:a525c81c70fb0380344dd1d8745d8cc1c890b7fc94a58d5a07bd8eb9557b8415", size = 11993274 }, - { url = "https://files.pythonhosted.org/packages/d7/2b/9555445e1201d92b3195f45cdb153a0b68f24e0a4273f6e3d5ab46e212bb/ruff-0.15.20-py3-none-win_arm64.whl", hash = "sha256:2f5b2a6d614e8700388806a14996c40fab2c47b819ef57d790a34878858ed9ca", size = 11343498 }, + { url = "https://files.pythonhosted.org/packages/94/d9/2d5014f0253ba541d2061d9fa7193f48e941c8b21bb88a7ff9bbe0bd0596/ruff-0.15.20-py3-none-linux_armv6l.whl", hash = "sha256:00e188c53e499c3c1637f73c91dcf2fb56d576cab76ce1be50a27c4e80e37078", size = 10839665, upload-time = "2026-06-25T17:19:44.702Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d3/ac1798ba64f670698867fcfc591d50e7e421bef137db564858f619a30fcf/ruff-0.15.20-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9ebd1fd9b9c95fc0bd7b2761aebec1f030013d2e193a2901b224af68fe47251b", size = 11208649, upload-time = "2026-06-25T17:19:48.787Z" }, + { url = "https://files.pythonhosted.org/packages/47/47/d3ac899991202095dfcf3d5176be4272642be3cf981a2f1a30f72a2afb95/ruff-0.15.20-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c5b16cdd67ca108185cd36dce98c576350c03b1660a751de725fb049193a0632", size = 10622638, upload-time = "2026-06-25T17:19:51.354Z" }, + { url = "https://files.pythonhosted.org/packages/33/13/4e043fe30aa94d4ff5213a9881fc296d12960f5971b234a5263fdc225312/ruff-0.15.20-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3413bb3c3d2ca6a8208f1f4809cd2dca3c6de6d0b491c0e70847672bde6e6efd", size = 10984227, upload-time = "2026-06-25T17:19:54.044Z" }, + { url = "https://files.pythonhosted.org/packages/76/e6/92e7bf40388bc5800073b96564f56264f7e48bfd1a498f5ced6ae6d5a769/ruff-0.15.20-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd7ec42b3bb3da066488db093308a69c4ac5ee6d2af333a86ba6e2eb2e7dd44b", size = 10622882, upload-time = "2026-06-25T17:19:57.037Z" }, + { url = "https://files.pythonhosted.org/packages/13/7a/43460be3f24495a3aa46d4b16873e2c4941b3b5f0b00cf88c03b7b94b339/ruff-0.15.20-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1a36ad0eb77fba9aabfb69ede54de6f376d04ac18ebea022847046d340a8267", size = 11474808, upload-time = "2026-06-25T17:20:00.357Z" }, + { url = "https://files.pythonhosted.org/packages/27/a0/f37077884873221c6b33b4ab49eb18f9f88e54a16a25a5bca59bef46dd66/ruff-0.15.20-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b6df3b1e4610432f0386dba04d853b5f08cbbc903410c6fcc02f620f05aff53c", size = 12293094, upload-time = "2026-06-25T17:20:03.446Z" }, + { url = "https://files.pythonhosted.org/packages/a6/74/165545b60256a9704c21ac0ec4a0d07933b320812f9584836c9f4aca4292/ruff-0.15.20-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e89f198a1ea6ef0d727c1cf16088bc91a6cb0ab947dedc966715691647186eae", size = 11526176, upload-time = "2026-06-25T17:20:06.301Z" }, + { url = "https://files.pythonhosted.org/packages/86/b1/a976a136d40ade83ce743578399865f57001003a409acadc0ecbb3051082/ruff-0.15.20-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:309809086c2acb67624950a3c8133e80f32d0d3e27106c0cd60ff26657c9f24b", size = 11520767, upload-time = "2026-06-25T17:20:09.191Z" }, + { url = "https://files.pythonhosted.org/packages/19/0f/f032696cb01c9b54c0263fa393474d7758f1cdc021a01b04e3cbc2500999/ruff-0.15.20-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:2d2374caa2f2c2f9e2b7da0a50802cfb8b79f55a9b5e49379f564544fbf56487", size = 11500132, upload-time = "2026-06-25T17:20:13.602Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f4/51b1a14bc69e8c224b15dab9cce8e99b425e0455d462caa2b3c9be2b6a8e/ruff-0.15.20-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a1ed17b65293e0c2f22fc387bc13198a5de94bf4429589b0ff6946b0feaf21a3", size = 10943828, upload-time = "2026-06-25T17:20:16.635Z" }, + { url = "https://files.pythonhosted.org/packages/71/4b/fe267640783cd02bf6c5cc290b1df1051be2ec294c678b5c15fe19e52343/ruff-0.15.20-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f701305e66b38ea6c91882490eb73459796808e4c6362a1b765255e0cdcd4053", size = 10645418, upload-time = "2026-06-25T17:20:19.4Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c0/a65aa4ec2f5e87a1df32dc3ec1fede434fe3dfd5cbcf3b503cafc676ab54/ruff-0.15.20-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5b9c0c367ad8e5d0d5b5b8537864c469a0a0e55417aadfbeca41fa61333be9f4", size = 11211770, upload-time = "2026-06-25T17:20:22.033Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a4/0caa331d954ae2723d729d351c989cb4ca8b6077d5c6c2cb6de75e98c041/ruff-0.15.20-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:01cc00dd58f0df339d0e902219dd53990ea99996a0344e5d9cc8d45d5307e460", size = 11618698, upload-time = "2026-06-25T17:20:25.259Z" }, + { url = "https://files.pythonhosted.org/packages/10/9b/5f14927848d2fd4aa891fd88d883788c5a7baba561c7874732364045708c/ruff-0.15.20-py3-none-win32.whl", hash = "sha256:ed65ef510e43a137207e0f01cfcf998aeddb1aeeda5c9d35023e910284d7cf21", size = 10857322, upload-time = "2026-06-25T17:20:28.612Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f0/fe47c501f9dea92a26d788ff98bb5d92ed4cb4c88792c5c88af6b697dc8e/ruff-0.15.20-py3-none-win_amd64.whl", hash = "sha256:a525c81c70fb0380344dd1d8745d8cc1c890b7fc94a58d5a07bd8eb9557b8415", size = 11993274, upload-time = "2026-06-25T17:20:31.871Z" }, + { url = "https://files.pythonhosted.org/packages/d7/2b/9555445e1201d92b3195f45cdb153a0b68f24e0a4273f6e3d5ab46e212bb/ruff-0.15.20-py3-none-win_arm64.whl", hash = "sha256:2f5b2a6d614e8700388806a14996c40fab2c47b819ef57d790a34878858ed9ca", size = 11343498, upload-time = "2026-06-25T17:20:35.03Z" }, ] [[package]] name = "shellingham" version = "1.5.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310 } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755 }, + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, ] [[package]] name = "sortedcontainers" version = "2.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594 } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575 }, + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, ] [[package]] name = "tomli" version = "2.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543 } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704 }, - { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454 }, - { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561 }, - { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824 }, - { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227 }, - { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859 }, - { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204 }, - { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084 }, - { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285 }, - { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924 }, - { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018 }, - { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948 }, - { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341 }, - { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159 }, - { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290 }, - { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141 }, - { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847 }, - { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088 }, - { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866 }, - { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887 }, - { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704 }, - { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628 }, - { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180 }, - { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674 }, - { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976 }, - { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755 }, - { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265 }, - { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583 }, + { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, + { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, + { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, + { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, + { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, + { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, + { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, + { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, + { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, + { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, + { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, + { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, + { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, + { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, + { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, + { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, + { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, + { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, + { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, + { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, + { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, + { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, + { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, + { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, + { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, + { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, ] [[package]] name = "toolz" version = "1.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613 } +sdist = { url = "https://files.pythonhosted.org/packages/11/d6/114b492226588d6ff54579d95847662fc69196bdeec318eb45393b24c192/toolz-1.1.0.tar.gz", hash = "sha256:27a5c770d068c110d9ed9323f24f1543e83b2f300a687b7891c1a6d56b697b5b", size = 52613, upload-time = "2025-10-17T04:03:21.661Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093 }, + { url = "https://files.pythonhosted.org/packages/fb/12/5911ae3eeec47800503a238d971e51722ccea5feb8569b735184d5fcdbc0/toolz-1.1.0-py3-none-any.whl", hash = "sha256:15ccc861ac51c53696de0a5d6d4607f99c210739caf987b5d2054f3efed429d8", size = 58093, upload-time = "2025-10-17T04:03:20.435Z" }, ] [[package]] name = "ty" version = "0.0.56" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/55/07/fb29aea5235b0aa8ecfc4d1cc6ddf9fba8b863d67d96c6d345694d644c43/ty-0.0.56.tar.gz", hash = "sha256:84d114dc3796361c0fc72945016eabd74d46b9ee64f198cb0e485719704681e5", size = 6050123 } +sdist = { url = "https://files.pythonhosted.org/packages/55/07/fb29aea5235b0aa8ecfc4d1cc6ddf9fba8b863d67d96c6d345694d644c43/ty-0.0.56.tar.gz", hash = "sha256:84d114dc3796361c0fc72945016eabd74d46b9ee64f198cb0e485719704681e5", size = 6050123, upload-time = "2026-07-01T16:44:56.036Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/48/bce79e7ca5c1cc529d3e0d37ddd1121aea4b68a4f749974ad1cc77161871/ty-0.0.56-py3-none-linux_armv6l.whl", hash = "sha256:186d4a53e15747c947e1ec3d7eec8e345d8e40a1ca10e634c585db52497e87dd", size = 11643066 }, - { url = "https://files.pythonhosted.org/packages/80/d1/22555d8a1d719661f10050f3865d877bbf497da908961c75fe22217dd18a/ty-0.0.56-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aae1a980fd9535da0469b7ba2b2e1b54a907743a5e0f442dd57eee9f5bfd034c", size = 11407487 }, - { url = "https://files.pythonhosted.org/packages/cf/2d/b3b7a74ce8bc59ef48843ad80179bb0d9598bbd6cfc0d11d519bdf6b1352/ty-0.0.56-py3-none-macosx_11_0_arm64.whl", hash = "sha256:afd3058c0a6c5f241e814734f133008c93ee805f61c9cf4ce7412b8822b5d9ad", size = 10962270 }, - { url = "https://files.pythonhosted.org/packages/64/ac/6c2fd7de0304a8a7218a756af74f7e62a5e8540fdb175e0a869e51042345/ty-0.0.56-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:058b52f7a823ac13aae3cae30809dd6b5145794b64d8478f9ef38c75d79b4483", size = 11471406 }, - { url = "https://files.pythonhosted.org/packages/50/b6/11d861156861c03c7726b74558f9a0e0092661aff83a4fda1279df28c425/ty-0.0.56-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c66e00c1522add1f2bbdd2e45828c953b35c306b7bef03ec9169c75a63699a0", size = 11445612 }, - { url = "https://files.pythonhosted.org/packages/fb/ba/09df108582090f3c0770ec4bc8675affed60248f6793a78d909be16211d9/ty-0.0.56-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40903d71c669a30691b5a5d5728056c7877a1bd6be4f233a38883a8b28cf34d7", size = 12093889 }, - { url = "https://files.pythonhosted.org/packages/d7/f7/dbb4b4ccb69cd64c209ae55b1ab788ace8222c2bc1f6845be9e7cbedbf25/ty-0.0.56-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63fe3947fe0c46c69a7d950e6832ee70a9ec17321fefbff3d2e3c20baf9e5bd0", size = 12666337 }, - { url = "https://files.pythonhosted.org/packages/86/e9/73f903fe4a3d9ea02f26f57c1eb07e3b1029ec92b0e8c2364718893440e3/ty-0.0.56-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71a0c1a72f9854532e710e119b6871ffe4542c8a65146f1f65dcd78fecd885b4", size = 12280247 }, - { url = "https://files.pythonhosted.org/packages/d6/90/cebd222495832f1a00dcd321ba25f3cab804221a4991b992c2178bec68ee/ty-0.0.56-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70d1665596494e24d8ebd198438872b5a56ec3cae5f2bcf6c673be797acc4e3c", size = 11991107 }, - { url = "https://files.pythonhosted.org/packages/b7/07/8f7337a07250f42d975cdb6decf47fc5b421e6c7da5e3e7be1e85f63a7e5/ty-0.0.56-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:778f99e51558afc1dbbe48ee38ab6aae7b31390ed8c1a1ef1499b295e9f1e82f", size = 12298970 }, - { url = "https://files.pythonhosted.org/packages/3c/b9/a52cd59034a48f5f18c6b155cc2cc36861d874b6d0af204b12c898024c3d/ty-0.0.56-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:867bc5708e0066bb4ff6c7db524bd5deea2676c62bfe71d3303138b3be850af0", size = 11425683 }, - { url = "https://files.pythonhosted.org/packages/1d/2e/48e42d33357d52eefb695c0c3fcfc96879b73668a7447d1d1e0ad774fedc/ty-0.0.56-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a6012f4189c928edb330a37deb9930f982380bd4aa7c4b8e0428eec9651c7551", size = 11469258 }, - { url = "https://files.pythonhosted.org/packages/d5/01/ad1b4138be1e3fa97863af3925aa2134f17a593240c35dc38c3429fb5ad1/ty-0.0.56-py3-none-musllinux_1_2_i686.whl", hash = "sha256:8ee83de1a7ff4cc32837ec06134ce391d441bc5b35ecd8d3cfe053f120f3e4c1", size = 11758736 }, - { url = "https://files.pythonhosted.org/packages/09/34/9d81967ff240eaa57e9249728ef7b7790747cf6d3c9a98ec86b2cfdcc8ee/ty-0.0.56-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:62619b3b0e2c6248ef30d3f0e2f2217ae9893040585be07f32324242f197cd6f", size = 12100242 }, - { url = "https://files.pythonhosted.org/packages/c3/36/f51d4666d2de6cf33c1f3a1fcc4bb6b70b197dd6ceaa491eef71d78fe8e8/ty-0.0.56-py3-none-win32.whl", hash = "sha256:b30687bb5cd9729d34c889a289edf32770388d9bb05243e534e723fb45e0381b", size = 11093759 }, - { url = "https://files.pythonhosted.org/packages/5e/b4/8fb5d4acfa4afb152245b20fa263069a7547bd1f8e4bfca4eda280c897d7/ty-0.0.56-py3-none-win_amd64.whl", hash = "sha256:ad4c8c47b6f4e3f9ed3fc0b1a5d650088d229e17dd8f63c1826d6bbe94cc3235", size = 12100327 }, - { url = "https://files.pythonhosted.org/packages/b8/fc/6a183e71edde90d0c35c2303f23f7a45b6891d1a2c45daf7b8f869831e19/ty-0.0.56-py3-none-win_arm64.whl", hash = "sha256:57538f273d444a5f1293fa7860e967178afe3917611fc5eff16b64e1204fe0d6", size = 11538780 }, + { url = "https://files.pythonhosted.org/packages/dc/48/bce79e7ca5c1cc529d3e0d37ddd1121aea4b68a4f749974ad1cc77161871/ty-0.0.56-py3-none-linux_armv6l.whl", hash = "sha256:186d4a53e15747c947e1ec3d7eec8e345d8e40a1ca10e634c585db52497e87dd", size = 11643066, upload-time = "2026-07-01T16:44:18.374Z" }, + { url = "https://files.pythonhosted.org/packages/80/d1/22555d8a1d719661f10050f3865d877bbf497da908961c75fe22217dd18a/ty-0.0.56-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:aae1a980fd9535da0469b7ba2b2e1b54a907743a5e0f442dd57eee9f5bfd034c", size = 11407487, upload-time = "2026-07-01T16:44:20.956Z" }, + { url = "https://files.pythonhosted.org/packages/cf/2d/b3b7a74ce8bc59ef48843ad80179bb0d9598bbd6cfc0d11d519bdf6b1352/ty-0.0.56-py3-none-macosx_11_0_arm64.whl", hash = "sha256:afd3058c0a6c5f241e814734f133008c93ee805f61c9cf4ce7412b8822b5d9ad", size = 10962270, upload-time = "2026-07-01T16:44:22.959Z" }, + { url = "https://files.pythonhosted.org/packages/64/ac/6c2fd7de0304a8a7218a756af74f7e62a5e8540fdb175e0a869e51042345/ty-0.0.56-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:058b52f7a823ac13aae3cae30809dd6b5145794b64d8478f9ef38c75d79b4483", size = 11471406, upload-time = "2026-07-01T16:44:25.327Z" }, + { url = "https://files.pythonhosted.org/packages/50/b6/11d861156861c03c7726b74558f9a0e0092661aff83a4fda1279df28c425/ty-0.0.56-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c66e00c1522add1f2bbdd2e45828c953b35c306b7bef03ec9169c75a63699a0", size = 11445612, upload-time = "2026-07-01T16:44:27.531Z" }, + { url = "https://files.pythonhosted.org/packages/fb/ba/09df108582090f3c0770ec4bc8675affed60248f6793a78d909be16211d9/ty-0.0.56-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40903d71c669a30691b5a5d5728056c7877a1bd6be4f233a38883a8b28cf34d7", size = 12093889, upload-time = "2026-07-01T16:44:29.548Z" }, + { url = "https://files.pythonhosted.org/packages/d7/f7/dbb4b4ccb69cd64c209ae55b1ab788ace8222c2bc1f6845be9e7cbedbf25/ty-0.0.56-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63fe3947fe0c46c69a7d950e6832ee70a9ec17321fefbff3d2e3c20baf9e5bd0", size = 12666337, upload-time = "2026-07-01T16:44:31.586Z" }, + { url = "https://files.pythonhosted.org/packages/86/e9/73f903fe4a3d9ea02f26f57c1eb07e3b1029ec92b0e8c2364718893440e3/ty-0.0.56-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71a0c1a72f9854532e710e119b6871ffe4542c8a65146f1f65dcd78fecd885b4", size = 12280247, upload-time = "2026-07-01T16:44:33.637Z" }, + { url = "https://files.pythonhosted.org/packages/d6/90/cebd222495832f1a00dcd321ba25f3cab804221a4991b992c2178bec68ee/ty-0.0.56-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70d1665596494e24d8ebd198438872b5a56ec3cae5f2bcf6c673be797acc4e3c", size = 11991107, upload-time = "2026-07-01T16:44:36.122Z" }, + { url = "https://files.pythonhosted.org/packages/b7/07/8f7337a07250f42d975cdb6decf47fc5b421e6c7da5e3e7be1e85f63a7e5/ty-0.0.56-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:778f99e51558afc1dbbe48ee38ab6aae7b31390ed8c1a1ef1499b295e9f1e82f", size = 12298970, upload-time = "2026-07-01T16:44:38.243Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b9/a52cd59034a48f5f18c6b155cc2cc36861d874b6d0af204b12c898024c3d/ty-0.0.56-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:867bc5708e0066bb4ff6c7db524bd5deea2676c62bfe71d3303138b3be850af0", size = 11425683, upload-time = "2026-07-01T16:44:40.473Z" }, + { url = "https://files.pythonhosted.org/packages/1d/2e/48e42d33357d52eefb695c0c3fcfc96879b73668a7447d1d1e0ad774fedc/ty-0.0.56-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a6012f4189c928edb330a37deb9930f982380bd4aa7c4b8e0428eec9651c7551", size = 11469258, upload-time = "2026-07-01T16:44:42.513Z" }, + { url = "https://files.pythonhosted.org/packages/d5/01/ad1b4138be1e3fa97863af3925aa2134f17a593240c35dc38c3429fb5ad1/ty-0.0.56-py3-none-musllinux_1_2_i686.whl", hash = "sha256:8ee83de1a7ff4cc32837ec06134ce391d441bc5b35ecd8d3cfe053f120f3e4c1", size = 11758736, upload-time = "2026-07-01T16:44:44.567Z" }, + { url = "https://files.pythonhosted.org/packages/09/34/9d81967ff240eaa57e9249728ef7b7790747cf6d3c9a98ec86b2cfdcc8ee/ty-0.0.56-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:62619b3b0e2c6248ef30d3f0e2f2217ae9893040585be07f32324242f197cd6f", size = 12100242, upload-time = "2026-07-01T16:44:46.584Z" }, + { url = "https://files.pythonhosted.org/packages/c3/36/f51d4666d2de6cf33c1f3a1fcc4bb6b70b197dd6ceaa491eef71d78fe8e8/ty-0.0.56-py3-none-win32.whl", hash = "sha256:b30687bb5cd9729d34c889a289edf32770388d9bb05243e534e723fb45e0381b", size = 11093759, upload-time = "2026-07-01T16:44:49.171Z" }, + { url = "https://files.pythonhosted.org/packages/5e/b4/8fb5d4acfa4afb152245b20fa263069a7547bd1f8e4bfca4eda280c897d7/ty-0.0.56-py3-none-win_amd64.whl", hash = "sha256:ad4c8c47b6f4e3f9ed3fc0b1a5d650088d229e17dd8f63c1826d6bbe94cc3235", size = 12100327, upload-time = "2026-07-01T16:44:51.26Z" }, + { url = "https://files.pythonhosted.org/packages/b8/fc/6a183e71edde90d0c35c2303f23f7a45b6891d1a2c45daf7b8f869831e19/ty-0.0.56-py3-none-win_arm64.whl", hash = "sha256:57538f273d444a5f1293fa7860e967178afe3917611fc5eff16b64e1204fe0d6", size = 11538780, upload-time = "2026-07-01T16:44:53.8Z" }, ] [[package]] @@ -1081,22 +1301,22 @@ version = "0.26.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-doc" }, - { name = "colorama", marker = "platform_system == 'Windows'" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "rich" }, { name = "shellingham" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7c/f7/68adc395201b20b872d68e975386832e8005ffeacedd43a1d837a32815be/typer-0.26.8.tar.gz", hash = "sha256:c244a6bd558886fe3f8780efb6bdd28bb9aff005a94eedebaa5cb32926fe2f7e", size = 202097 } +sdist = { url = "https://files.pythonhosted.org/packages/7c/f7/68adc395201b20b872d68e975386832e8005ffeacedd43a1d837a32815be/typer-0.26.8.tar.gz", hash = "sha256:c244a6bd558886fe3f8780efb6bdd28bb9aff005a94eedebaa5cb32926fe2f7e", size = 202097, upload-time = "2026-06-26T09:22:45.705Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/80/87/b9fd69c92c6102a066e1b86a35243f53e70bd4c709f2a26d9f4fee4f4dc0/typer-0.26.8-py3-none-any.whl", hash = "sha256:3512ca79ac5c11113414b36e80281b872884477722440691c89d1112e321a49c", size = 122564 }, + { url = "https://files.pythonhosted.org/packages/80/87/b9fd69c92c6102a066e1b86a35243f53e70bd4c709f2a26d9f4fee4f4dc0/typer-0.26.8-py3-none-any.whl", hash = "sha256:3512ca79ac5c11113414b36e80281b872884477722440691c89d1112e321a49c", size = 122564, upload-time = "2026-06-26T09:22:44.72Z" }, ] [[package]] name = "typing-extensions" version = "4.16.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555 } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571 }, + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, ] [[package]] @@ -1106,57 +1326,75 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949 } +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611 }, + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, ] [[package]] name = "websockets" version = "16.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/04/24/4b2031d72e840ce4c1ccb255f693b15c334757fc50023e4db9537080b8c4/websockets-16.0.tar.gz", hash = "sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5", size = 179346 } +sdist = { url = "https://files.pythonhosted.org/packages/04/24/4b2031d72e840ce4c1ccb255f693b15c334757fc50023e4db9537080b8c4/websockets-16.0.tar.gz", hash = "sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5", size = 179346, upload-time = "2026-01-10T09:23:47.181Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/74/221f58decd852f4b59cc3354cccaf87e8ef695fede361d03dc9a7396573b/websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a", size = 177343 }, - { url = "https://files.pythonhosted.org/packages/19/0f/22ef6107ee52ab7f0b710d55d36f5a5d3ef19e8a205541a6d7ffa7994e5a/websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0", size = 175021 }, - { url = "https://files.pythonhosted.org/packages/10/40/904a4cb30d9b61c0e278899bf36342e9b0208eb3c470324a9ecbaac2a30f/websockets-16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957", size = 175320 }, - { url = "https://files.pythonhosted.org/packages/9d/2f/4b3ca7e106bc608744b1cdae041e005e446124bebb037b18799c2d356864/websockets-16.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72", size = 183815 }, - { url = "https://files.pythonhosted.org/packages/86/26/d40eaa2a46d4302becec8d15b0fc5e45bdde05191e7628405a19cf491ccd/websockets-16.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde", size = 185054 }, - { url = "https://files.pythonhosted.org/packages/b0/ba/6500a0efc94f7373ee8fefa8c271acdfd4dca8bd49a90d4be7ccabfc397e/websockets-16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3", size = 184565 }, - { url = "https://files.pythonhosted.org/packages/04/b4/96bf2cee7c8d8102389374a2616200574f5f01128d1082f44102140344cc/websockets-16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3", size = 183848 }, - { url = "https://files.pythonhosted.org/packages/02/8e/81f40fb00fd125357814e8c3025738fc4ffc3da4b6b4a4472a82ba304b41/websockets-16.0-cp310-cp310-win32.whl", hash = "sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9", size = 178249 }, - { url = "https://files.pythonhosted.org/packages/b4/5f/7e40efe8df57db9b91c88a43690ac66f7b7aa73a11aa6a66b927e44f26fa/websockets-16.0-cp310-cp310-win_amd64.whl", hash = "sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35", size = 178685 }, - { url = "https://files.pythonhosted.org/packages/f2/db/de907251b4ff46ae804ad0409809504153b3f30984daf82a1d84a9875830/websockets-16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8", size = 177340 }, - { url = "https://files.pythonhosted.org/packages/f3/fa/abe89019d8d8815c8781e90d697dec52523fb8ebe308bf11664e8de1877e/websockets-16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad", size = 175022 }, - { url = "https://files.pythonhosted.org/packages/58/5d/88ea17ed1ded2079358b40d31d48abe90a73c9e5819dbcde1606e991e2ad/websockets-16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d", size = 175319 }, - { url = "https://files.pythonhosted.org/packages/d2/ae/0ee92b33087a33632f37a635e11e1d99d429d3d323329675a6022312aac2/websockets-16.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe", size = 184631 }, - { url = "https://files.pythonhosted.org/packages/c8/c5/27178df583b6c5b31b29f526ba2da5e2f864ecc79c99dae630a85d68c304/websockets-16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b", size = 185870 }, - { url = "https://files.pythonhosted.org/packages/87/05/536652aa84ddc1c018dbb7e2c4cbcd0db884580bf8e95aece7593fde526f/websockets-16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5", size = 185361 }, - { url = "https://files.pythonhosted.org/packages/6d/e2/d5332c90da12b1e01f06fb1b85c50cfc489783076547415bf9f0a659ec19/websockets-16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64", size = 184615 }, - { url = "https://files.pythonhosted.org/packages/77/fb/d3f9576691cae9253b51555f841bc6600bf0a983a461c79500ace5a5b364/websockets-16.0-cp311-cp311-win32.whl", hash = "sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6", size = 178246 }, - { url = "https://files.pythonhosted.org/packages/54/67/eaff76b3dbaf18dcddabc3b8c1dba50b483761cccff67793897945b37408/websockets-16.0-cp311-cp311-win_amd64.whl", hash = "sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac", size = 178684 }, - { url = "https://files.pythonhosted.org/packages/84/7b/bac442e6b96c9d25092695578dda82403c77936104b5682307bd4deb1ad4/websockets-16.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00", size = 177365 }, - { url = "https://files.pythonhosted.org/packages/b0/fe/136ccece61bd690d9c1f715baaeefd953bb2360134de73519d5df19d29ca/websockets-16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79", size = 175038 }, - { url = "https://files.pythonhosted.org/packages/40/1e/9771421ac2286eaab95b8575b0cb701ae3663abf8b5e1f64f1fd90d0a673/websockets-16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39", size = 175328 }, - { url = "https://files.pythonhosted.org/packages/18/29/71729b4671f21e1eaa5d6573031ab810ad2936c8175f03f97f3ff164c802/websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c", size = 184915 }, - { url = "https://files.pythonhosted.org/packages/97/bb/21c36b7dbbafc85d2d480cd65df02a1dc93bf76d97147605a8e27ff9409d/websockets-16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f", size = 186152 }, - { url = "https://files.pythonhosted.org/packages/4a/34/9bf8df0c0cf88fa7bfe36678dc7b02970c9a7d5e065a3099292db87b1be2/websockets-16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1", size = 185583 }, - { url = "https://files.pythonhosted.org/packages/47/88/4dd516068e1a3d6ab3c7c183288404cd424a9a02d585efbac226cb61ff2d/websockets-16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2", size = 184880 }, - { url = "https://files.pythonhosted.org/packages/91/d6/7d4553ad4bf1c0421e1ebd4b18de5d9098383b5caa1d937b63df8d04b565/websockets-16.0-cp312-cp312-win32.whl", hash = "sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89", size = 178261 }, - { url = "https://files.pythonhosted.org/packages/c3/f0/f3a17365441ed1c27f850a80b2bc680a0fa9505d733fe152fdf5e98c1c0b/websockets-16.0-cp312-cp312-win_amd64.whl", hash = "sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea", size = 178693 }, - { url = "https://files.pythonhosted.org/packages/cc/9c/baa8456050d1c1b08dd0ec7346026668cbc6f145ab4e314d707bb845bf0d/websockets-16.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9", size = 177364 }, - { url = "https://files.pythonhosted.org/packages/7e/0c/8811fc53e9bcff68fe7de2bcbe75116a8d959ac699a3200f4847a8925210/websockets-16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230", size = 175039 }, - { url = "https://files.pythonhosted.org/packages/aa/82/39a5f910cb99ec0b59e482971238c845af9220d3ab9fa76dd9162cda9d62/websockets-16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c", size = 175323 }, - { url = "https://files.pythonhosted.org/packages/bd/28/0a25ee5342eb5d5f297d992a77e56892ecb65e7854c7898fb7d35e9b33bd/websockets-16.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5", size = 184975 }, - { url = "https://files.pythonhosted.org/packages/f9/66/27ea52741752f5107c2e41fda05e8395a682a1e11c4e592a809a90c6a506/websockets-16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82", size = 186203 }, - { url = "https://files.pythonhosted.org/packages/37/e5/8e32857371406a757816a2b471939d51c463509be73fa538216ea52b792a/websockets-16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8", size = 185653 }, - { url = "https://files.pythonhosted.org/packages/9b/67/f926bac29882894669368dc73f4da900fcdf47955d0a0185d60103df5737/websockets-16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f", size = 184920 }, - { url = "https://files.pythonhosted.org/packages/3c/a1/3d6ccdcd125b0a42a311bcd15a7f705d688f73b2a22d8cf1c0875d35d34a/websockets-16.0-cp313-cp313-win32.whl", hash = "sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a", size = 178255 }, - { url = "https://files.pythonhosted.org/packages/6b/ae/90366304d7c2ce80f9b826096a9e9048b4bb760e44d3b873bb272cba696b/websockets-16.0-cp313-cp313-win_amd64.whl", hash = "sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156", size = 178689 }, - { url = "https://files.pythonhosted.org/packages/72/07/c98a68571dcf256e74f1f816b8cc5eae6eb2d3d5cfa44d37f801619d9166/websockets-16.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d", size = 174947 }, - { url = "https://files.pythonhosted.org/packages/7e/52/93e166a81e0305b33fe416338be92ae863563fe7bce446b0f687b9df5aea/websockets-16.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03", size = 175260 }, - { url = "https://files.pythonhosted.org/packages/56/0c/2dbf513bafd24889d33de2ff0368190a0e69f37bcfa19009ef819fe4d507/websockets-16.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da", size = 176071 }, - { url = "https://files.pythonhosted.org/packages/a5/8f/aea9c71cc92bf9b6cc0f7f70df8f0b420636b6c96ef4feee1e16f80f75dd/websockets-16.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c", size = 176968 }, - { url = "https://files.pythonhosted.org/packages/9a/3f/f70e03f40ffc9a30d817eef7da1be72ee4956ba8d7255c399a01b135902a/websockets-16.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767", size = 178735 }, - { url = "https://files.pythonhosted.org/packages/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size = 171598 }, + { url = "https://files.pythonhosted.org/packages/20/74/221f58decd852f4b59cc3354cccaf87e8ef695fede361d03dc9a7396573b/websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a", size = 177343, upload-time = "2026-01-10T09:22:21.28Z" }, + { url = "https://files.pythonhosted.org/packages/19/0f/22ef6107ee52ab7f0b710d55d36f5a5d3ef19e8a205541a6d7ffa7994e5a/websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0", size = 175021, upload-time = "2026-01-10T09:22:22.696Z" }, + { url = "https://files.pythonhosted.org/packages/10/40/904a4cb30d9b61c0e278899bf36342e9b0208eb3c470324a9ecbaac2a30f/websockets-16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957", size = 175320, upload-time = "2026-01-10T09:22:23.94Z" }, + { url = "https://files.pythonhosted.org/packages/9d/2f/4b3ca7e106bc608744b1cdae041e005e446124bebb037b18799c2d356864/websockets-16.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72", size = 183815, upload-time = "2026-01-10T09:22:25.469Z" }, + { url = "https://files.pythonhosted.org/packages/86/26/d40eaa2a46d4302becec8d15b0fc5e45bdde05191e7628405a19cf491ccd/websockets-16.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde", size = 185054, upload-time = "2026-01-10T09:22:27.101Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ba/6500a0efc94f7373ee8fefa8c271acdfd4dca8bd49a90d4be7ccabfc397e/websockets-16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3", size = 184565, upload-time = "2026-01-10T09:22:28.293Z" }, + { url = "https://files.pythonhosted.org/packages/04/b4/96bf2cee7c8d8102389374a2616200574f5f01128d1082f44102140344cc/websockets-16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3", size = 183848, upload-time = "2026-01-10T09:22:30.394Z" }, + { url = "https://files.pythonhosted.org/packages/02/8e/81f40fb00fd125357814e8c3025738fc4ffc3da4b6b4a4472a82ba304b41/websockets-16.0-cp310-cp310-win32.whl", hash = "sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9", size = 178249, upload-time = "2026-01-10T09:22:32.083Z" }, + { url = "https://files.pythonhosted.org/packages/b4/5f/7e40efe8df57db9b91c88a43690ac66f7b7aa73a11aa6a66b927e44f26fa/websockets-16.0-cp310-cp310-win_amd64.whl", hash = "sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35", size = 178685, upload-time = "2026-01-10T09:22:33.345Z" }, + { url = "https://files.pythonhosted.org/packages/f2/db/de907251b4ff46ae804ad0409809504153b3f30984daf82a1d84a9875830/websockets-16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8", size = 177340, upload-time = "2026-01-10T09:22:34.539Z" }, + { url = "https://files.pythonhosted.org/packages/f3/fa/abe89019d8d8815c8781e90d697dec52523fb8ebe308bf11664e8de1877e/websockets-16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad", size = 175022, upload-time = "2026-01-10T09:22:36.332Z" }, + { url = "https://files.pythonhosted.org/packages/58/5d/88ea17ed1ded2079358b40d31d48abe90a73c9e5819dbcde1606e991e2ad/websockets-16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d", size = 175319, upload-time = "2026-01-10T09:22:37.602Z" }, + { url = "https://files.pythonhosted.org/packages/d2/ae/0ee92b33087a33632f37a635e11e1d99d429d3d323329675a6022312aac2/websockets-16.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe", size = 184631, upload-time = "2026-01-10T09:22:38.789Z" }, + { url = "https://files.pythonhosted.org/packages/c8/c5/27178df583b6c5b31b29f526ba2da5e2f864ecc79c99dae630a85d68c304/websockets-16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b", size = 185870, upload-time = "2026-01-10T09:22:39.893Z" }, + { url = "https://files.pythonhosted.org/packages/87/05/536652aa84ddc1c018dbb7e2c4cbcd0db884580bf8e95aece7593fde526f/websockets-16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5", size = 185361, upload-time = "2026-01-10T09:22:41.016Z" }, + { url = "https://files.pythonhosted.org/packages/6d/e2/d5332c90da12b1e01f06fb1b85c50cfc489783076547415bf9f0a659ec19/websockets-16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64", size = 184615, upload-time = "2026-01-10T09:22:42.442Z" }, + { url = "https://files.pythonhosted.org/packages/77/fb/d3f9576691cae9253b51555f841bc6600bf0a983a461c79500ace5a5b364/websockets-16.0-cp311-cp311-win32.whl", hash = "sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6", size = 178246, upload-time = "2026-01-10T09:22:43.654Z" }, + { url = "https://files.pythonhosted.org/packages/54/67/eaff76b3dbaf18dcddabc3b8c1dba50b483761cccff67793897945b37408/websockets-16.0-cp311-cp311-win_amd64.whl", hash = "sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac", size = 178684, upload-time = "2026-01-10T09:22:44.941Z" }, + { url = "https://files.pythonhosted.org/packages/84/7b/bac442e6b96c9d25092695578dda82403c77936104b5682307bd4deb1ad4/websockets-16.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00", size = 177365, upload-time = "2026-01-10T09:22:46.787Z" }, + { url = "https://files.pythonhosted.org/packages/b0/fe/136ccece61bd690d9c1f715baaeefd953bb2360134de73519d5df19d29ca/websockets-16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79", size = 175038, upload-time = "2026-01-10T09:22:47.999Z" }, + { url = "https://files.pythonhosted.org/packages/40/1e/9771421ac2286eaab95b8575b0cb701ae3663abf8b5e1f64f1fd90d0a673/websockets-16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39", size = 175328, upload-time = "2026-01-10T09:22:49.809Z" }, + { url = "https://files.pythonhosted.org/packages/18/29/71729b4671f21e1eaa5d6573031ab810ad2936c8175f03f97f3ff164c802/websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c", size = 184915, upload-time = "2026-01-10T09:22:51.071Z" }, + { url = "https://files.pythonhosted.org/packages/97/bb/21c36b7dbbafc85d2d480cd65df02a1dc93bf76d97147605a8e27ff9409d/websockets-16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f", size = 186152, upload-time = "2026-01-10T09:22:52.224Z" }, + { url = "https://files.pythonhosted.org/packages/4a/34/9bf8df0c0cf88fa7bfe36678dc7b02970c9a7d5e065a3099292db87b1be2/websockets-16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1", size = 185583, upload-time = "2026-01-10T09:22:53.443Z" }, + { url = "https://files.pythonhosted.org/packages/47/88/4dd516068e1a3d6ab3c7c183288404cd424a9a02d585efbac226cb61ff2d/websockets-16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2", size = 184880, upload-time = "2026-01-10T09:22:55.033Z" }, + { url = "https://files.pythonhosted.org/packages/91/d6/7d4553ad4bf1c0421e1ebd4b18de5d9098383b5caa1d937b63df8d04b565/websockets-16.0-cp312-cp312-win32.whl", hash = "sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89", size = 178261, upload-time = "2026-01-10T09:22:56.251Z" }, + { url = "https://files.pythonhosted.org/packages/c3/f0/f3a17365441ed1c27f850a80b2bc680a0fa9505d733fe152fdf5e98c1c0b/websockets-16.0-cp312-cp312-win_amd64.whl", hash = "sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea", size = 178693, upload-time = "2026-01-10T09:22:57.478Z" }, + { url = "https://files.pythonhosted.org/packages/cc/9c/baa8456050d1c1b08dd0ec7346026668cbc6f145ab4e314d707bb845bf0d/websockets-16.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9", size = 177364, upload-time = "2026-01-10T09:22:59.333Z" }, + { url = "https://files.pythonhosted.org/packages/7e/0c/8811fc53e9bcff68fe7de2bcbe75116a8d959ac699a3200f4847a8925210/websockets-16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230", size = 175039, upload-time = "2026-01-10T09:23:01.171Z" }, + { url = "https://files.pythonhosted.org/packages/aa/82/39a5f910cb99ec0b59e482971238c845af9220d3ab9fa76dd9162cda9d62/websockets-16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c", size = 175323, upload-time = "2026-01-10T09:23:02.341Z" }, + { url = "https://files.pythonhosted.org/packages/bd/28/0a25ee5342eb5d5f297d992a77e56892ecb65e7854c7898fb7d35e9b33bd/websockets-16.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5", size = 184975, upload-time = "2026-01-10T09:23:03.756Z" }, + { url = "https://files.pythonhosted.org/packages/f9/66/27ea52741752f5107c2e41fda05e8395a682a1e11c4e592a809a90c6a506/websockets-16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82", size = 186203, upload-time = "2026-01-10T09:23:05.01Z" }, + { url = "https://files.pythonhosted.org/packages/37/e5/8e32857371406a757816a2b471939d51c463509be73fa538216ea52b792a/websockets-16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8", size = 185653, upload-time = "2026-01-10T09:23:06.301Z" }, + { url = "https://files.pythonhosted.org/packages/9b/67/f926bac29882894669368dc73f4da900fcdf47955d0a0185d60103df5737/websockets-16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f", size = 184920, upload-time = "2026-01-10T09:23:07.492Z" }, + { url = "https://files.pythonhosted.org/packages/3c/a1/3d6ccdcd125b0a42a311bcd15a7f705d688f73b2a22d8cf1c0875d35d34a/websockets-16.0-cp313-cp313-win32.whl", hash = "sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a", size = 178255, upload-time = "2026-01-10T09:23:09.245Z" }, + { url = "https://files.pythonhosted.org/packages/6b/ae/90366304d7c2ce80f9b826096a9e9048b4bb760e44d3b873bb272cba696b/websockets-16.0-cp313-cp313-win_amd64.whl", hash = "sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156", size = 178689, upload-time = "2026-01-10T09:23:10.483Z" }, + { url = "https://files.pythonhosted.org/packages/f3/1d/e88022630271f5bd349ed82417136281931e558d628dd52c4d8621b4a0b2/websockets-16.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0", size = 177406, upload-time = "2026-01-10T09:23:12.178Z" }, + { url = "https://files.pythonhosted.org/packages/f2/78/e63be1bf0724eeb4616efb1ae1c9044f7c3953b7957799abb5915bffd38e/websockets-16.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904", size = 175085, upload-time = "2026-01-10T09:23:13.511Z" }, + { url = "https://files.pythonhosted.org/packages/bb/f4/d3c9220d818ee955ae390cf319a7c7a467beceb24f05ee7aaaa2414345ba/websockets-16.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4", size = 175328, upload-time = "2026-01-10T09:23:14.727Z" }, + { url = "https://files.pythonhosted.org/packages/63/bc/d3e208028de777087e6fb2b122051a6ff7bbcca0d6df9d9c2bf1dd869ae9/websockets-16.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e", size = 185044, upload-time = "2026-01-10T09:23:15.939Z" }, + { url = "https://files.pythonhosted.org/packages/ad/6e/9a0927ac24bd33a0a9af834d89e0abc7cfd8e13bed17a86407a66773cc0e/websockets-16.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4", size = 186279, upload-time = "2026-01-10T09:23:17.148Z" }, + { url = "https://files.pythonhosted.org/packages/b9/ca/bf1c68440d7a868180e11be653c85959502efd3a709323230314fda6e0b3/websockets-16.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1", size = 185711, upload-time = "2026-01-10T09:23:18.372Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f8/fdc34643a989561f217bb477cbc47a3a07212cbda91c0e4389c43c296ebf/websockets-16.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3", size = 184982, upload-time = "2026-01-10T09:23:19.652Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d1/574fa27e233764dbac9c52730d63fcf2823b16f0856b3329fc6268d6ae4f/websockets-16.0-cp314-cp314-win32.whl", hash = "sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8", size = 177915, upload-time = "2026-01-10T09:23:21.458Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f1/ae6b937bf3126b5134ce1f482365fde31a357c784ac51852978768b5eff4/websockets-16.0-cp314-cp314-win_amd64.whl", hash = "sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d", size = 178381, upload-time = "2026-01-10T09:23:22.715Z" }, + { url = "https://files.pythonhosted.org/packages/06/9b/f791d1db48403e1f0a27577a6beb37afae94254a8c6f08be4a23e4930bc0/websockets-16.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244", size = 177737, upload-time = "2026-01-10T09:23:24.523Z" }, + { url = "https://files.pythonhosted.org/packages/bd/40/53ad02341fa33b3ce489023f635367a4ac98b73570102ad2cdd770dacc9a/websockets-16.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e", size = 175268, upload-time = "2026-01-10T09:23:25.781Z" }, + { url = "https://files.pythonhosted.org/packages/74/9b/6158d4e459b984f949dcbbb0c5d270154c7618e11c01029b9bbd1bb4c4f9/websockets-16.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641", size = 175486, upload-time = "2026-01-10T09:23:27.033Z" }, + { url = "https://files.pythonhosted.org/packages/e5/2d/7583b30208b639c8090206f95073646c2c9ffd66f44df967981a64f849ad/websockets-16.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8", size = 185331, upload-time = "2026-01-10T09:23:28.259Z" }, + { url = "https://files.pythonhosted.org/packages/45/b0/cce3784eb519b7b5ad680d14b9673a31ab8dcb7aad8b64d81709d2430aa8/websockets-16.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e", size = 186501, upload-time = "2026-01-10T09:23:29.449Z" }, + { url = "https://files.pythonhosted.org/packages/19/60/b8ebe4c7e89fb5f6cdf080623c9d92789a53636950f7abacfc33fe2b3135/websockets-16.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944", size = 186062, upload-time = "2026-01-10T09:23:31.368Z" }, + { url = "https://files.pythonhosted.org/packages/88/a8/a080593f89b0138b6cba1b28f8df5673b5506f72879322288b031337c0b8/websockets-16.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206", size = 185356, upload-time = "2026-01-10T09:23:32.627Z" }, + { url = "https://files.pythonhosted.org/packages/c2/b6/b9afed2afadddaf5ebb2afa801abf4b0868f42f8539bfe4b071b5266c9fe/websockets-16.0-cp314-cp314t-win32.whl", hash = "sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6", size = 178085, upload-time = "2026-01-10T09:23:33.816Z" }, + { url = "https://files.pythonhosted.org/packages/9f/3e/28135a24e384493fa804216b79a6a6759a38cc4ff59118787b9fb693df93/websockets-16.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd", size = 178531, upload-time = "2026-01-10T09:23:35.016Z" }, + { url = "https://files.pythonhosted.org/packages/72/07/c98a68571dcf256e74f1f816b8cc5eae6eb2d3d5cfa44d37f801619d9166/websockets-16.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d", size = 174947, upload-time = "2026-01-10T09:23:36.166Z" }, + { url = "https://files.pythonhosted.org/packages/7e/52/93e166a81e0305b33fe416338be92ae863563fe7bce446b0f687b9df5aea/websockets-16.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03", size = 175260, upload-time = "2026-01-10T09:23:37.409Z" }, + { url = "https://files.pythonhosted.org/packages/56/0c/2dbf513bafd24889d33de2ff0368190a0e69f37bcfa19009ef819fe4d507/websockets-16.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da", size = 176071, upload-time = "2026-01-10T09:23:39.158Z" }, + { url = "https://files.pythonhosted.org/packages/a5/8f/aea9c71cc92bf9b6cc0f7f70df8f0b420636b6c96ef4feee1e16f80f75dd/websockets-16.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c", size = 176968, upload-time = "2026-01-10T09:23:41.031Z" }, + { url = "https://files.pythonhosted.org/packages/9a/3f/f70e03f40ffc9a30d817eef7da1be72ee4956ba8d7255c399a01b135902a/websockets-16.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767", size = 178735, upload-time = "2026-01-10T09:23:42.259Z" }, + { url = "https://files.pythonhosted.org/packages/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size = 171598, upload-time = "2026-01-10T09:23:45.395Z" }, ]