diff --git a/pallets/multisig/src/lib.rs b/pallets/multisig/src/lib.rs index 94d68f65..e655261c 100644 --- a/pallets/multisig/src/lib.rs +++ b/pallets/multisig/src/lib.rs @@ -10,7 +10,7 @@ //! - Propose transactions for multisig approval //! - Approve proposed transactions //! - Execute transactions once threshold is reached (automatic) -//! - Auto-cleanup of proposer's expired proposals on propose() +//! - Cleanup of expired proposals via claim_deposits() and remove_expired() //! - Per-signer proposal limits for filibuster protection //! //! ## Data Structures @@ -509,10 +509,8 @@ pub mod pallet { /// - A deposit (refundable - returned immediately on execution/cancellation) /// - A fee (non-refundable, burned immediately) /// - /// **Auto-cleanup:** Before creating a new proposal, ALL proposer's expired - /// proposals are automatically removed. This is the primary cleanup mechanism. - /// - /// **For threshold=1:** If the multisig threshold is 1, the proposal executes immediately. + /// **For threshold=1:** The proposal is created with `Approved` status immediately + /// and can be executed via `execute()` without additional approvals. /// /// **Weight:** Charged upfront for worst-case (high-security path with decode). /// Refunded to actual cost on success based on whether HS path was taken. @@ -576,12 +574,8 @@ pub mod pallet { // Get signers count (used for multiple checks below) let signers_count = multisig_data.signers.len() as u32; - // Check total proposals in storage limit - // Users must call claim_deposits() or remove_expired() to free space - let total_proposals_in_storage = - Proposals::::iter_prefix(&multisig_address).count() as u32; ensure!( - total_proposals_in_storage < T::MaxTotalProposalsInStorage::get(), + multisig_data.active_proposals < T::MaxTotalProposalsInStorage::get(), Error::::TooManyProposalsInStorage ); @@ -596,9 +590,6 @@ pub mod pallet { Error::::TooManyProposalsPerSigner ); - // Check call size - ensure!(call.len() as u32 <= T::MaxCallSize::get(), Error::::CallTooLarge); - // Validate expiry is in the future ensure!(expiry > current_block, Error::::ExpiryInPast); @@ -635,59 +626,51 @@ pub mod pallet { let bounded_call: BoundedCallOf = call.try_into().map_err(|_| Error::::CallTooLarge)?; - // Get and increment proposal nonce for unique ID - let proposal_id = Multisigs::::mutate(&multisig_address, |maybe_multisig| { - if let Some(multisig) = maybe_multisig { + let threshold_met = 1 >= multisig_data.threshold; + + let proposal_id = Multisigs::::try_mutate( + &multisig_address, + |maybe_multisig| -> Result { + let multisig = maybe_multisig.as_mut().ok_or(Error::::MultisigNotFound)?; let nonce = multisig.proposal_nonce; - multisig.proposal_nonce = multisig.proposal_nonce.saturating_add(1); - nonce - } else { - 0 // Should never happen due to earlier check - } - }); + multisig.proposal_nonce = nonce.saturating_add(1); + multisig.active_proposals = multisig.active_proposals.saturating_add(1); + let count = multisig.proposals_per_signer.get(&proposer).copied().unwrap_or(0); + multisig + .proposals_per_signer + .try_insert(proposer.clone(), count.saturating_add(1)) + .map_err(|_| Error::::TooManySigners)?; + Ok(nonce) + }, + )?; - // Create proposal with proposer as first approval let mut approvals = BoundedApprovalsOf::::default(); let _ = approvals.try_push(proposer.clone()); - let proposal = ProposalData { - proposer: proposer.clone(), - call: bounded_call, - expiry, - approvals, - deposit, - status: ProposalStatus::Active, - }; - - // Store proposal with nonce as key (simple and efficient) - Proposals::::insert(&multisig_address, proposal_id, proposal); - - // Increment proposal counters - Multisigs::::mutate(&multisig_address, |maybe_data| { - if let Some(ref mut data) = maybe_data { - data.active_proposals = data.active_proposals.saturating_add(1); - let count = data.proposals_per_signer.get(&proposer).copied().unwrap_or(0); - let _ = data - .proposals_per_signer - .try_insert(proposer.clone(), count.saturating_add(1)); - } - }); + Proposals::::insert( + &multisig_address, + proposal_id, + ProposalData { + proposer: proposer.clone(), + call: bounded_call, + expiry, + approvals, + deposit, + status: if threshold_met { + ProposalStatus::Approved + } else { + ProposalStatus::Active + }, + }, + ); - // Emit event Self::deposit_event(Event::ProposalCreated { multisig_address: multisig_address.clone(), proposer, proposal_id, }); - // Check if threshold is reached immediately (threshold=1 case) - // Proposer is already counted as first approval - if 1 >= multisig_data.threshold { - Proposals::::mutate(&multisig_address, proposal_id, |maybe_proposal| { - if let Some(ref mut p) = maybe_proposal { - p.status = ProposalStatus::Approved; - } - }); + if threshold_met { Self::deposit_event(Event::ProposalReadyToExecute { multisig_address: multisig_address.clone(), proposal_id, @@ -755,13 +738,11 @@ pub mod pallet { let actual_call_size = proposal.call.len() as u32; let actual_weight = ::WeightInfo::approve(actual_call_size); - // Check if not expired (2 reads already performed) let current_block = frame_system::Pallet::::block_number(); if current_block > proposal.expiry { return Self::err_with_weight(Error::::ProposalExpired, 2); } - // Check if already approved (2 reads already performed) if proposal.approvals.contains(&approver) { return Self::err_with_weight(Error::::AlreadyApproved, 2); } @@ -945,8 +926,8 @@ pub mod pallet { ) -> DispatchResultWithPostInfo { let caller = ensure_signed(origin)?; - // Cleanup ALL caller's expired proposals - // Returns: (cleaned_count, total_proposals_iterated, total_call_bytes) + Self::ensure_is_signer(&multisig_address, &caller)?; + let (cleaned, total_proposals_iterated, total_call_bytes) = Self::cleanup_proposer_expired(&multisig_address, &caller, &caller); diff --git a/pallets/multisig/src/tests.rs b/pallets/multisig/src/tests.rs index a2f44036..e23f7a55 100644 --- a/pallets/multisig/src/tests.rs +++ b/pallets/multisig/src/tests.rs @@ -925,6 +925,41 @@ fn claim_deposits_works() { }); } +#[test] +fn claim_deposits_fails_for_non_signer() { + new_test_ext().execute_with(|| { + System::set_block_number(1); + + let creator = alice(); + let signers = vec![bob(), charlie()]; + assert_ok!(Multisig::create_multisig( + RuntimeOrigin::signed(creator.clone()), + signers.clone(), + 2, + 0 + )); + + let multisig_address = Multisig::derive_multisig_address(&signers, 2, 0); + + assert_ok!(Multisig::propose( + RuntimeOrigin::signed(bob()), + multisig_address.clone(), + make_call(vec![1, 2, 3]), + 100 + )); + + System::set_block_number(201); + + assert_noop!( + Multisig::claim_deposits(RuntimeOrigin::signed(dave()), multisig_address.clone()), + Error::::NotASigner + ); + + assert!(Proposals::::contains_key(&multisig_address, 0)); + assert_eq!(Balances::reserved_balance(bob()), 100); + }); +} + // ==================== HELPER FUNCTION TESTS ==================== #[test] diff --git a/pallets/multisig/src/weights.rs b/pallets/multisig/src/weights.rs index e5732fe6..03f12031 100644 --- a/pallets/multisig/src/weights.rs +++ b/pallets/multisig/src/weights.rs @@ -18,8 +18,8 @@ //! Autogenerated weights for `pallet_multisig` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 49.1.0 -//! DATE: 2026-02-11, STEPS: `20`, REPEAT: `50`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 53.0.0 +//! DATE: 2026-03-10, STEPS: `20`, REPEAT: `50`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `coldbook.local`, CPU: `` //! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: `1024` @@ -76,10 +76,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `152` // Estimated: `10377` - // Minimum execution time: 189_000_000 picoseconds. - Weight::from_parts(120_513_891, 10377) - // Standard Error: 35_600 - .saturating_add(Weight::from_parts(4_800_379, 0).saturating_mul(s.into())) + // Minimum execution time: 181_000_000 picoseconds. + Weight::from_parts(117_518_033, 10377) + // Standard Error: 42_653 + .saturating_add(Weight::from_parts(5_051_077, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -87,36 +87,36 @@ impl WeightInfo for SubstrateWeight { /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(6912), added: 9387, mode: `MaxEncodedLen`) /// Storage: `ReversibleTransfers::HighSecurityAccounts` (r:1 w:0) /// Proof: `ReversibleTransfers::HighSecurityAccounts` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Multisig::Proposals` (r:1 w:1) + /// Storage: `Multisig::Proposals` (r:0 w:1) /// Proof: `Multisig::Proposals` (`max_values`: None, `max_size`: Some(13557), added: 16032, mode: `MaxEncodedLen`) /// The range of component `c` is `[0, 10140]`. fn propose(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `838` - // Estimated: `17022` - // Minimum execution time: 36_000_000 picoseconds. - Weight::from_parts(37_772_595, 17022) - // Standard Error: 7 - .saturating_add(Weight::from_parts(172, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) + // Measured: `782` + // Estimated: `10377` + // Minimum execution time: 32_000_000 picoseconds. + Weight::from_parts(39_643_053, 10377) + // Standard Error: 79 + .saturating_add(Weight::from_parts(540, 0).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `Multisig::Multisigs` (r:1 w:1) /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(6912), added: 9387, mode: `MaxEncodedLen`) /// Storage: `ReversibleTransfers::HighSecurityAccounts` (r:1 w:0) /// Proof: `ReversibleTransfers::HighSecurityAccounts` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Multisig::Proposals` (r:1 w:1) + /// Storage: `Multisig::Proposals` (r:0 w:1) /// Proof: `Multisig::Proposals` (`max_values`: None, `max_size`: Some(13557), added: 16032, mode: `MaxEncodedLen`) /// The range of component `c` is `[0, 10140]`. fn propose_high_security(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `838` - // Estimated: `17022` - // Minimum execution time: 36_000_000 picoseconds. - Weight::from_parts(38_070_055, 17022) - // Standard Error: 57 - .saturating_add(Weight::from_parts(672, 0).saturating_mul(c.into())) - .saturating_add(T::DbWeight::get().reads(3_u64)) + // Measured: `782` + // Estimated: `10377` + // Minimum execution time: 31_000_000 picoseconds. + Weight::from_parts(35_818_800, 10377) + // Standard Error: 39 + .saturating_add(Weight::from_parts(476, 0).saturating_mul(c.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `Multisig::Multisigs` (r:1 w:0) @@ -129,7 +129,7 @@ impl WeightInfo for SubstrateWeight { // Measured: `6964 + c * (1 ±0)` // Estimated: `17022` // Minimum execution time: 17_000_000 picoseconds. - Weight::from_parts(33_776_726, 17022) + Weight::from_parts(37_762_352, 17022) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -142,10 +142,10 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `6996 + c * (1 ±0)` // Estimated: `17022` - // Minimum execution time: 25_000_000 picoseconds. - Weight::from_parts(43_059_043, 17022) - // Standard Error: 99 - .saturating_add(Weight::from_parts(890, 0).saturating_mul(c.into())) + // Minimum execution time: 27_000_000 picoseconds. + Weight::from_parts(35_758_975, 17022) + // Standard Error: 123 + .saturating_add(Weight::from_parts(755, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -159,9 +159,9 @@ impl WeightInfo for SubstrateWeight { // Measured: `3891 + c * (1 ±0)` // Estimated: `17022` // Minimum execution time: 22_000_000 picoseconds. - Weight::from_parts(25_331_594, 17022) - // Standard Error: 38 - .saturating_add(Weight::from_parts(451, 0).saturating_mul(c.into())) + Weight::from_parts(25_089_117, 17022) + // Standard Error: 32 + .saturating_add(Weight::from_parts(373, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -174,17 +174,17 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `3891 + c * (1 ±0)` // Estimated: `17022` - // Minimum execution time: 21_000_000 picoseconds. - Weight::from_parts(25_274_827, 17022) - // Standard Error: 49 - .saturating_add(Weight::from_parts(425, 0).saturating_mul(c.into())) + // Minimum execution time: 22_000_000 picoseconds. + Weight::from_parts(26_273_240, 17022) + // Standard Error: 47 + .saturating_add(Weight::from_parts(211, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } - /// Storage: `Multisig::Proposals` (r:201 w:200) - /// Proof: `Multisig::Proposals` (`max_values`: None, `max_size`: Some(13557), added: 16032, mode: `MaxEncodedLen`) /// Storage: `Multisig::Multisigs` (r:1 w:1) /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(6912), added: 9387, mode: `MaxEncodedLen`) + /// Storage: `Multisig::Proposals` (r:201 w:200) + /// Proof: `Multisig::Proposals` (`max_values`: None, `max_size`: Some(13557), added: 16032, mode: `MaxEncodedLen`) /// The range of component `i` is `[1, 200]`. /// The range of component `r` is `[1, 200]`. /// The range of component `c` is `[0, 10140]`. @@ -192,12 +192,12 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `3897 + c * (1 ±0) + i * (115 ±0)` // Estimated: `17022 + i * (16032 ±0)` - // Minimum execution time: 27_000_000 picoseconds. - Weight::from_parts(30_000_000, 17022) - // Standard Error: 102_732 - .saturating_add(Weight::from_parts(11_666_897, 0).saturating_mul(i.into())) - // Standard Error: 102_732 - .saturating_add(Weight::from_parts(5_671_417, 0).saturating_mul(r.into())) + // Minimum execution time: 31_000_000 picoseconds. + Weight::from_parts(34_000_000, 17022) + // Standard Error: 113_598 + .saturating_add(Weight::from_parts(12_844_310, 0).saturating_mul(i.into())) + // Standard Error: 113_598 + .saturating_add(Weight::from_parts(6_319_705, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) @@ -218,7 +218,7 @@ impl WeightInfo for SubstrateWeight { // Measured: `526` // Estimated: `17022` // Minimum execution time: 13_000_000 picoseconds. - Weight::from_parts(16_000_000, 17022) + Weight::from_parts(15_000_000, 17022) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -234,7 +234,7 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `703` // Estimated: `17022` - // Minimum execution time: 25_000_000 picoseconds. + // Minimum execution time: 27_000_000 picoseconds. Weight::from_parts(28_000_000, 17022) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) @@ -250,10 +250,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `152` // Estimated: `10377` - // Minimum execution time: 189_000_000 picoseconds. - Weight::from_parts(120_513_891, 10377) - // Standard Error: 35_600 - .saturating_add(Weight::from_parts(4_800_379, 0).saturating_mul(s.into())) + // Minimum execution time: 181_000_000 picoseconds. + Weight::from_parts(117_518_033, 10377) + // Standard Error: 42_653 + .saturating_add(Weight::from_parts(5_051_077, 0).saturating_mul(s.into())) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -261,36 +261,36 @@ impl WeightInfo for () { /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(6912), added: 9387, mode: `MaxEncodedLen`) /// Storage: `ReversibleTransfers::HighSecurityAccounts` (r:1 w:0) /// Proof: `ReversibleTransfers::HighSecurityAccounts` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Multisig::Proposals` (r:1 w:1) + /// Storage: `Multisig::Proposals` (r:0 w:1) /// Proof: `Multisig::Proposals` (`max_values`: None, `max_size`: Some(13557), added: 16032, mode: `MaxEncodedLen`) /// The range of component `c` is `[0, 10140]`. fn propose(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `838` - // Estimated: `17022` - // Minimum execution time: 36_000_000 picoseconds. - Weight::from_parts(37_772_595, 17022) - // Standard Error: 7 - .saturating_add(Weight::from_parts(172, 0).saturating_mul(c.into())) - .saturating_add(RocksDbWeight::get().reads(3_u64)) + // Measured: `782` + // Estimated: `10377` + // Minimum execution time: 32_000_000 picoseconds. + Weight::from_parts(39_643_053, 10377) + // Standard Error: 79 + .saturating_add(Weight::from_parts(540, 0).saturating_mul(c.into())) + .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } /// Storage: `Multisig::Multisigs` (r:1 w:1) /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(6912), added: 9387, mode: `MaxEncodedLen`) /// Storage: `ReversibleTransfers::HighSecurityAccounts` (r:1 w:0) /// Proof: `ReversibleTransfers::HighSecurityAccounts` (`max_values`: None, `max_size`: Some(89), added: 2564, mode: `MaxEncodedLen`) - /// Storage: `Multisig::Proposals` (r:1 w:1) + /// Storage: `Multisig::Proposals` (r:0 w:1) /// Proof: `Multisig::Proposals` (`max_values`: None, `max_size`: Some(13557), added: 16032, mode: `MaxEncodedLen`) /// The range of component `c` is `[0, 10140]`. fn propose_high_security(c: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `838` - // Estimated: `17022` - // Minimum execution time: 36_000_000 picoseconds. - Weight::from_parts(38_070_055, 17022) - // Standard Error: 57 - .saturating_add(Weight::from_parts(672, 0).saturating_mul(c.into())) - .saturating_add(RocksDbWeight::get().reads(3_u64)) + // Measured: `782` + // Estimated: `10377` + // Minimum execution time: 31_000_000 picoseconds. + Weight::from_parts(35_818_800, 10377) + // Standard Error: 39 + .saturating_add(Weight::from_parts(476, 0).saturating_mul(c.into())) + .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } /// Storage: `Multisig::Multisigs` (r:1 w:0) @@ -303,7 +303,7 @@ impl WeightInfo for () { // Measured: `6964 + c * (1 ±0)` // Estimated: `17022` // Minimum execution time: 17_000_000 picoseconds. - Weight::from_parts(33_776_726, 17022) + Weight::from_parts(37_762_352, 17022) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -316,10 +316,10 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `6996 + c * (1 ±0)` // Estimated: `17022` - // Minimum execution time: 25_000_000 picoseconds. - Weight::from_parts(43_059_043, 17022) - // Standard Error: 99 - .saturating_add(Weight::from_parts(890, 0).saturating_mul(c.into())) + // Minimum execution time: 27_000_000 picoseconds. + Weight::from_parts(35_758_975, 17022) + // Standard Error: 123 + .saturating_add(Weight::from_parts(755, 0).saturating_mul(c.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -333,9 +333,9 @@ impl WeightInfo for () { // Measured: `3891 + c * (1 ±0)` // Estimated: `17022` // Minimum execution time: 22_000_000 picoseconds. - Weight::from_parts(25_331_594, 17022) - // Standard Error: 38 - .saturating_add(Weight::from_parts(451, 0).saturating_mul(c.into())) + Weight::from_parts(25_089_117, 17022) + // Standard Error: 32 + .saturating_add(Weight::from_parts(373, 0).saturating_mul(c.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } @@ -348,17 +348,17 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `3891 + c * (1 ±0)` // Estimated: `17022` - // Minimum execution time: 21_000_000 picoseconds. - Weight::from_parts(25_274_827, 17022) - // Standard Error: 49 - .saturating_add(Weight::from_parts(425, 0).saturating_mul(c.into())) + // Minimum execution time: 22_000_000 picoseconds. + Weight::from_parts(26_273_240, 17022) + // Standard Error: 47 + .saturating_add(Weight::from_parts(211, 0).saturating_mul(c.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64)) } - /// Storage: `Multisig::Proposals` (r:201 w:200) - /// Proof: `Multisig::Proposals` (`max_values`: None, `max_size`: Some(13557), added: 16032, mode: `MaxEncodedLen`) /// Storage: `Multisig::Multisigs` (r:1 w:1) /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(6912), added: 9387, mode: `MaxEncodedLen`) + /// Storage: `Multisig::Proposals` (r:201 w:200) + /// Proof: `Multisig::Proposals` (`max_values`: None, `max_size`: Some(13557), added: 16032, mode: `MaxEncodedLen`) /// The range of component `i` is `[1, 200]`. /// The range of component `r` is `[1, 200]`. /// The range of component `c` is `[0, 10140]`. @@ -366,12 +366,12 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `3897 + c * (1 ±0) + i * (115 ±0)` // Estimated: `17022 + i * (16032 ±0)` - // Minimum execution time: 27_000_000 picoseconds. - Weight::from_parts(30_000_000, 17022) - // Standard Error: 102_732 - .saturating_add(Weight::from_parts(11_666_897, 0).saturating_mul(i.into())) - // Standard Error: 102_732 - .saturating_add(Weight::from_parts(5_671_417, 0).saturating_mul(r.into())) + // Minimum execution time: 31_000_000 picoseconds. + Weight::from_parts(34_000_000, 17022) + // Standard Error: 113_598 + .saturating_add(Weight::from_parts(12_844_310, 0).saturating_mul(i.into())) + // Standard Error: 113_598 + .saturating_add(Weight::from_parts(6_319_705, 0).saturating_mul(r.into())) .saturating_add(RocksDbWeight::get().reads(2_u64)) .saturating_add(RocksDbWeight::get().reads((1_u64).saturating_mul(i.into()))) .saturating_add(RocksDbWeight::get().writes(2_u64)) @@ -392,7 +392,7 @@ impl WeightInfo for () { // Measured: `526` // Estimated: `17022` // Minimum execution time: 13_000_000 picoseconds. - Weight::from_parts(16_000_000, 17022) + Weight::from_parts(15_000_000, 17022) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } @@ -408,7 +408,7 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `703` // Estimated: `17022` - // Minimum execution time: 25_000_000 picoseconds. + // Minimum execution time: 27_000_000 picoseconds. Weight::from_parts(28_000_000, 17022) .saturating_add(RocksDbWeight::get().reads(4_u64)) .saturating_add(RocksDbWeight::get().writes(2_u64))