diff --git a/pallets/external-validators/src/benchmarking.rs b/pallets/external-validators/src/benchmarking.rs index e9c709635..94426ae9d 100644 --- a/pallets/external-validators/src/benchmarking.rs +++ b/pallets/external-validators/src/benchmarking.rs @@ -25,7 +25,8 @@ use { frame_support::traits::{Currency, EnsureOrigin, Get}, frame_system::{EventRecord, RawOrigin}, pallet_session::{self as session, SessionManager}, - sp_runtime::traits::Convert, + rand::{RngCore, SeedableRng}, + sp_runtime::{codec, traits::Convert}, sp_std::prelude::*, }; const SEED: u32 = 0; @@ -52,21 +53,22 @@ fn create_funded_user( user } -fn keys(c: u32) -> ::Keys { - use rand::{RngCore, SeedableRng}; - - let keys = { - let mut keys = [0u8; 256]; +struct InputFromRng<'a, T>(&'a mut T); +impl<'a, T: RngCore> codec::Input for InputFromRng<'a, T> { + fn remaining_len(&mut self) -> Result, codec::Error> { + Ok(None) + } - if c > 0 { - let mut rng = rand::rngs::StdRng::seed_from_u64(u64::from(c)); - rng.fill_bytes(&mut keys); - } + fn read(&mut self, into: &mut [u8]) -> Result<(), codec::Error> { + self.0.fill_bytes(into); + Ok(()) + } +} - keys - }; +fn keys(c: u32) -> ::Keys { + let mut rng = rand::rngs::StdRng::seed_from_u64(u64::from(c)); - Decode::decode(&mut &keys[..]).unwrap() + Decode::decode(&mut InputFromRng(&mut rng)).unwrap() } fn invulnerable( diff --git a/pallets/invulnerables/src/benchmarking.rs b/pallets/invulnerables/src/benchmarking.rs index 3aa77b363..9b3f10980 100644 --- a/pallets/invulnerables/src/benchmarking.rs +++ b/pallets/invulnerables/src/benchmarking.rs @@ -28,7 +28,8 @@ use { }, frame_system::{EventRecord, RawOrigin}, pallet_session::{self as session, SessionManager}, - sp_runtime::traits::AtLeast32BitUnsigned, + rand::{RngCore, SeedableRng}, + sp_runtime::{codec, traits::AtLeast32BitUnsigned}, sp_std::prelude::*, tp_traits::DistributeRewards, }; @@ -56,21 +57,22 @@ fn create_funded_user( user } -fn keys(c: u32) -> ::Keys { - use rand::{RngCore, SeedableRng}; - - let keys = { - let mut keys = [0u8; 128]; +struct InputFromRng<'a, T>(&'a mut T); +impl<'a, T: RngCore> codec::Input for InputFromRng<'a, T> { + fn remaining_len(&mut self) -> Result, codec::Error> { + Ok(None) + } - if c > 0 { - let mut rng = rand::rngs::StdRng::seed_from_u64(u64::from(c)); - rng.fill_bytes(&mut keys); - } + fn read(&mut self, into: &mut [u8]) -> Result<(), codec::Error> { + self.0.fill_bytes(into); + Ok(()) + } +} - keys - }; +fn keys(c: u32) -> ::Keys { + let mut rng = rand::rngs::StdRng::seed_from_u64(u64::from(c)); - Decode::decode(&mut &keys[..]).unwrap() + Decode::decode(&mut InputFromRng(&mut rng)).unwrap() } fn invulnerable( diff --git a/solo-chains/runtime/dancelight/src/lib.rs b/solo-chains/runtime/dancelight/src/lib.rs index 5af14a7d7..57c8a1b31 100644 --- a/solo-chains/runtime/dancelight/src/lib.rs +++ b/solo-chains/runtime/dancelight/src/lib.rs @@ -1300,7 +1300,7 @@ impl pallet_invulnerables::Config for Runtime { type CollatorId = ::AccountId; type CollatorIdOf = ConvertInto; type CollatorRegistration = Session; - type WeightInfo = (); + type WeightInfo = weights::pallet_invulnerables::SubstrateWeight; #[cfg(feature = "runtime-benchmarks")] type Currency = Balances; } @@ -1976,6 +1976,7 @@ mod benches { [pallet_collator_assignment, TanssiCollatorAssignment] [pallet_external_validators, ExternalValidators] [pallet_external_validator_slashes, ExternalValidatorSlashes] + [pallet_invulnerables, TanssiInvulnerables] // XCM [pallet_xcm, PalletXcmExtrinsicsBenchmark::] [pallet_xcm_benchmarks::fungible, pallet_xcm_benchmarks::fungible::Pallet::] diff --git a/solo-chains/runtime/dancelight/src/weights/mod.rs b/solo-chains/runtime/dancelight/src/weights/mod.rs index ee0098635..b67c7728a 100644 --- a/solo-chains/runtime/dancelight/src/weights/mod.rs +++ b/solo-chains/runtime/dancelight/src/weights/mod.rs @@ -23,6 +23,7 @@ pub mod pallet_conviction_voting; pub mod pallet_external_validator_slashes; pub mod pallet_external_validators; pub mod pallet_identity; +pub mod pallet_invulnerables; pub mod pallet_message_queue; pub mod pallet_multisig; pub mod pallet_parameters; diff --git a/solo-chains/runtime/dancelight/src/weights/pallet_invulnerables.rs b/solo-chains/runtime/dancelight/src/weights/pallet_invulnerables.rs new file mode 100644 index 000000000..009e87d1b --- /dev/null +++ b/solo-chains/runtime/dancelight/src/weights/pallet_invulnerables.rs @@ -0,0 +1,117 @@ +// Copyright (C) Moondance Labs Ltd. +// This file is part of Tanssi. + +// Tanssi is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Tanssi is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Tanssi. If not, see + + +//! Autogenerated weights for pallet_invulnerables +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 42.0.0 +//! DATE: 2024-11-20, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `tomasz-XPS-15-9520`, CPU: `12th Gen Intel(R) Core(TM) i7-12700H` +//! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: Some("dancelight-dev"), DB CACHE: 1024 + +// Executed Command: +// target/release/tanssi-relay +// benchmark +// pallet +// --execution=wasm +// --wasm-execution=compiled +// --pallet +// pallet_invulnerables +// --extrinsic +// * +// --chain=dancelight-dev +// --steps +// 50 +// --repeat +// 20 +// --template=benchmarking/frame-weight-runtime-template.hbs +// --json-file +// raw.json +// --output +// tmp/dancelight_weights/pallet_invulnerables.rs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use sp_std::marker::PhantomData; + +/// Weights for pallet_invulnerables using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl pallet_invulnerables::WeightInfo for SubstrateWeight { + /// Storage: `Session::NextKeys` (r:1 w:0) + /// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`) + /// Storage: `TanssiInvulnerables::Invulnerables` (r:1 w:1) + /// Proof: `TanssiInvulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// The range of component `b` is `[1, 99]`. + fn add_invulnerable(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `845 + b * (36 ±0)` + // Estimated: `4687 + b * (37 ±0)` + // Minimum execution time: 12_566_000 picoseconds. + Weight::from_parts(17_476_246, 4687) + // Standard Error: 1_484 + .saturating_add(Weight::from_parts(64_539, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + .saturating_add(Weight::from_parts(0, 37).saturating_mul(b.into())) + } + /// Storage: `TanssiInvulnerables::Invulnerables` (r:1 w:1) + /// Proof: `TanssiInvulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// The range of component `b` is `[1, 100]`. + fn remove_invulnerable(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `137 + b * (32 ±0)` + // Estimated: `4687` + // Minimum execution time: 6_954_000 picoseconds. + Weight::from_parts(9_208_806, 4687) + // Standard Error: 654 + .saturating_add(Weight::from_parts(35_463, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `TanssiInvulnerables::Invulnerables` (r:1 w:0) + /// Proof: `TanssiInvulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// The range of component `r` is `[1, 100]`. + fn new_session(r: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `137 + r * (32 ±0)` + // Estimated: `4687` + // Minimum execution time: 6_255_000 picoseconds. + Weight::from_parts(9_361_395, 4687) + // Standard Error: 1_732 + .saturating_add(Weight::from_parts(28_444, 0).saturating_mul(r.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + } + /// Storage: `TanssiInvulnerables::Invulnerables` (r:1 w:0) + /// Proof: `TanssiInvulnerables::Invulnerables` (`max_values`: Some(1), `max_size`: Some(3202), added: 3697, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(128), added: 2603, mode: `MaxEncodedLen`) + /// The range of component `b` is `[1, 100]`. + fn reward_invulnerable(b: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `285 + b * (33 ±0)` + // Estimated: `4687` + // Minimum execution time: 15_199_000 picoseconds. + Weight::from_parts(17_573_236, 4687) + // Standard Error: 801 + .saturating_add(Weight::from_parts(45_127, 0).saturating_mul(b.into())) + .saturating_add(T::DbWeight::get().reads(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} \ No newline at end of file