From 086d363769dcbbb3fd6fedf48cfe6a25cc6de1b5 Mon Sep 17 00:00:00 2001 From: doordashcon Date: Tue, 11 Apr 2023 16:09:17 +0100 Subject: [PATCH 01/13] set_key --- Cargo.lock | 1 + frame/sudo/Cargo.toml | 7 ++++++ frame/sudo/src/benchmarking.rs | 46 ++++++++++++++++++++++++++++++++++ frame/sudo/src/lib.rs | 3 +++ frame/sudo/src/mock.rs | 5 ++++ 5 files changed, 62 insertions(+) create mode 100644 frame/sudo/src/benchmarking.rs diff --git a/Cargo.lock b/Cargo.lock index d4185103f8c96..bb0944ee7413c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6842,6 +6842,7 @@ dependencies = [ name = "pallet-sudo" version = "4.0.0-dev" dependencies = [ + "frame-benchmarking", "frame-support", "frame-system", "parity-scale-codec", diff --git a/frame/sudo/Cargo.toml b/frame/sudo/Cargo.toml index 56d04b172c268..f1a2ce0b21446 100644 --- a/frame/sudo/Cargo.toml +++ b/frame/sudo/Cargo.toml @@ -15,6 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive"] } scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } +frame-benchmarking = { version = "4.0.0-dev", default-features = false, optional = true, path = "../benchmarking" } frame-support = { version = "4.0.0-dev", default-features = false, path = "../support" } frame-system = { version = "4.0.0-dev", default-features = false, path = "../system" } sp-io = { version = "7.0.0", default-features = false, path = "../../primitives/io" } @@ -28,6 +29,7 @@ sp-core = { version = "7.0.0", path = "../../primitives/core" } default = ["std"] std = [ "codec/std", + "frame-benchmarking?/std", "frame-support/std", "frame-system/std", "scale-info/std", @@ -35,4 +37,9 @@ std = [ "sp-runtime/std", "sp-std/std", ] +runtime-benchmarks = [ + "frame-benchmarking/runtime-benchmarks", + "frame-system/runtime-benchmarks", + "sp-runtime/runtime-benchmarks", +] try-runtime = ["frame-support/try-runtime"] diff --git a/frame/sudo/src/benchmarking.rs b/frame/sudo/src/benchmarking.rs new file mode 100644 index 0000000000000..38a61083d7386 --- /dev/null +++ b/frame/sudo/src/benchmarking.rs @@ -0,0 +1,46 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Benchmarks for Sudo Pallet + +use super::*; +use crate::Pallet; +use frame_benchmarking::v1::{account, benchmarks, whitelisted_caller}; +use frame_system::RawOrigin; + +const SEED: u32 = 0; + +fn assert_last_event(generic_event: ::RuntimeEvent) { + frame_system::Pallet::::assert_last_event(generic_event.into()); +} + +benchmarks! { + set_key { + + let caller: T::AccountId = whitelisted_caller(); + Key::::put(caller.clone()); + + let new_sudoer: T::AccountId = account("sudoer", 0, SEED); + let new_sudoer_lookup = T::Lookup::unlookup(new_sudoer.clone()); + + }: _(RawOrigin::Signed(caller.clone()), new_sudoer_lookup) + verify { + assert_last_event::(Event::KeyChanged { old_sudoer: Some(caller)}.into()); + } + + impl_benchmark_test_suite!(Pallet, crate::mock::new_bench_ext(), crate::mock::Test); +} diff --git a/frame/sudo/src/lib.rs b/frame/sudo/src/lib.rs index 1bc206e0063e4..e9a69a040f9f0 100644 --- a/frame/sudo/src/lib.rs +++ b/frame/sudo/src/lib.rs @@ -110,6 +110,9 @@ mod mock; #[cfg(test)] mod tests; +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; + pub use extension::CheckOnlySudoAccount; pub use pallet::*; diff --git a/frame/sudo/src/mock.rs b/frame/sudo/src/mock.rs index 6d6043cfd1821..949c582b16112 100644 --- a/frame/sudo/src/mock.rs +++ b/frame/sudo/src/mock.rs @@ -162,3 +162,8 @@ pub fn new_test_ext(root_key: u64) -> sp_io::TestExternalities { .unwrap(); t.into() } + +#[cfg(feature = "runtime-benchmarks")] +pub fn new_bench_ext() -> sp_io::TestExternalities { + frame_system::GenesisConfig::default().build_storage::().unwrap().into() +} From 0319a2f3412699e3d5e9916a9c2fae64550d4ded Mon Sep 17 00:00:00 2001 From: doordashcon Date: Tue, 18 Apr 2023 20:51:37 +0100 Subject: [PATCH 02/13] v2 --- frame/sudo/src/benchmarking.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/frame/sudo/src/benchmarking.rs b/frame/sudo/src/benchmarking.rs index 38a61083d7386..9e17395904745 100644 --- a/frame/sudo/src/benchmarking.rs +++ b/frame/sudo/src/benchmarking.rs @@ -19,7 +19,7 @@ use super::*; use crate::Pallet; -use frame_benchmarking::v1::{account, benchmarks, whitelisted_caller}; +use frame_benchmarking::v2::*; use frame_system::RawOrigin; const SEED: u32 = 0; @@ -28,6 +28,28 @@ fn assert_last_event(generic_event: ::RuntimeEvent) { frame_system::Pallet::::assert_last_event(generic_event.into()); } +#[benchmarks] +mod benchmarks { + use super::*; + + #[benchmark] + fn set_key() { + let caller: T::AccountId = whitelisted_caller(); + Key::::put(caller.clone()); + + let new_sudoer: T::AccountId = account("sudoer", 0, SEED); + let new_sudoer_lookup = T::Lookup::unlookup(new_sudoer.clone()); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone()), new_sudoer_lookup); + + assert_last_event::(Event::KeyChanged { old_sudoer: Some(caller) }.into()); + } + + impl_benchmark_test_suite!(Pallet, crate::mock::new_bench_ext(), crate::mock::Test); +} +/* + benchmarks! { set_key { @@ -44,3 +66,4 @@ benchmarks! { impl_benchmark_test_suite!(Pallet, crate::mock::new_bench_ext(), crate::mock::Test); } +*/ From 6cccbfee17a48e998e96da8aef3738b764632c50 Mon Sep 17 00:00:00 2001 From: doordashcon Date: Tue, 18 Apr 2023 21:43:17 +0100 Subject: [PATCH 03/13] update runtime --- bin/node/runtime/Cargo.toml | 1 + bin/node/runtime/src/lib.rs | 29 +++++++++++++++-------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/bin/node/runtime/Cargo.toml b/bin/node/runtime/Cargo.toml index bc9f3af9d879a..01802345f8ec5 100644 --- a/bin/node/runtime/Cargo.toml +++ b/bin/node/runtime/Cargo.toml @@ -268,6 +268,7 @@ runtime-benchmarks = [ "pallet-society/runtime-benchmarks", "pallet-staking/runtime-benchmarks", "pallet-state-trie-migration/runtime-benchmarks", + "pallet-sudo/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", "pallet-tips/runtime-benchmarks", "pallet-transaction-storage/runtime-benchmarks", diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 433ca8e8b839e..b0c1a40217970 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -307,21 +307,21 @@ impl InstanceFilter for ProxyType { ProxyType::Any => true, ProxyType::NonTransfer => !matches!( c, - RuntimeCall::Balances(..) | - RuntimeCall::Assets(..) | - RuntimeCall::Uniques(..) | - RuntimeCall::Nfts(..) | - RuntimeCall::Vesting(pallet_vesting::Call::vested_transfer { .. }) | - RuntimeCall::Indices(pallet_indices::Call::transfer { .. }) + RuntimeCall::Balances(..) + | RuntimeCall::Assets(..) + | RuntimeCall::Uniques(..) + | RuntimeCall::Nfts(..) + | RuntimeCall::Vesting(pallet_vesting::Call::vested_transfer { .. }) + | RuntimeCall::Indices(pallet_indices::Call::transfer { .. }) ), ProxyType::Governance => matches!( c, - RuntimeCall::Democracy(..) | - RuntimeCall::Council(..) | - RuntimeCall::Society(..) | - RuntimeCall::TechnicalCommittee(..) | - RuntimeCall::Elections(..) | - RuntimeCall::Treasury(..) + RuntimeCall::Democracy(..) + | RuntimeCall::Council(..) + | RuntimeCall::Society(..) + | RuntimeCall::TechnicalCommittee(..) + | RuntimeCall::Elections(..) + | RuntimeCall::Treasury(..) ), ProxyType::Staking => matches!(c, RuntimeCall::Staking(..)), } @@ -687,8 +687,8 @@ impl Get> for OffchainRandomBalancing { max => { let seed = sp_io::offchain::random_seed(); let random = ::decode(&mut TrailingZeroInput::new(&seed)) - .expect("input is padded with zeroes; qed") % - max.saturating_add(1); + .expect("input is padded with zeroes; qed") + % max.saturating_add(1); random as usize }, }; @@ -1917,6 +1917,7 @@ mod benches { [pallet_session, SessionBench::] [pallet_staking, Staking] [pallet_state_trie_migration, StateTrieMigration] + [pallet_sudo, Sudo] [frame_system, SystemBench::] [pallet_timestamp, Timestamp] [pallet_tips, Tips] From fd71be39cde42db009de029847cd2d0500916084 Mon Sep 17 00:00:00 2001 From: doordashcon Date: Tue, 18 Apr 2023 22:17:18 +0100 Subject: [PATCH 04/13] cargo fmt --- bin/node/runtime/src/lib.rs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index b0c1a40217970..0fce6233c271f 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -307,21 +307,21 @@ impl InstanceFilter for ProxyType { ProxyType::Any => true, ProxyType::NonTransfer => !matches!( c, - RuntimeCall::Balances(..) - | RuntimeCall::Assets(..) - | RuntimeCall::Uniques(..) - | RuntimeCall::Nfts(..) - | RuntimeCall::Vesting(pallet_vesting::Call::vested_transfer { .. }) - | RuntimeCall::Indices(pallet_indices::Call::transfer { .. }) + RuntimeCall::Balances(..) | + RuntimeCall::Assets(..) | + RuntimeCall::Uniques(..) | + RuntimeCall::Nfts(..) | + RuntimeCall::Vesting(pallet_vesting::Call::vested_transfer { .. }) | + RuntimeCall::Indices(pallet_indices::Call::transfer { .. }) ), ProxyType::Governance => matches!( c, - RuntimeCall::Democracy(..) - | RuntimeCall::Council(..) - | RuntimeCall::Society(..) - | RuntimeCall::TechnicalCommittee(..) - | RuntimeCall::Elections(..) - | RuntimeCall::Treasury(..) + RuntimeCall::Democracy(..) | + RuntimeCall::Council(..) | + RuntimeCall::Society(..) | + RuntimeCall::TechnicalCommittee(..) | + RuntimeCall::Elections(..) | + RuntimeCall::Treasury(..) ), ProxyType::Staking => matches!(c, RuntimeCall::Staking(..)), } @@ -687,8 +687,8 @@ impl Get> for OffchainRandomBalancing { max => { let seed = sp_io::offchain::random_seed(); let random = ::decode(&mut TrailingZeroInput::new(&seed)) - .expect("input is padded with zeroes; qed") - % max.saturating_add(1); + .expect("input is padded with zeroes; qed") % + max.saturating_add(1); random as usize }, }; From 823d98be101d5a3f841843a2b3a654db20e290ff Mon Sep 17 00:00:00 2001 From: doordashcon Date: Tue, 18 Apr 2023 22:34:36 +0100 Subject: [PATCH 05/13] remove commenting --- frame/sudo/src/benchmarking.rs | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/frame/sudo/src/benchmarking.rs b/frame/sudo/src/benchmarking.rs index 9e17395904745..4441df0d049a6 100644 --- a/frame/sudo/src/benchmarking.rs +++ b/frame/sudo/src/benchmarking.rs @@ -48,22 +48,3 @@ mod benchmarks { impl_benchmark_test_suite!(Pallet, crate::mock::new_bench_ext(), crate::mock::Test); } -/* - -benchmarks! { - set_key { - - let caller: T::AccountId = whitelisted_caller(); - Key::::put(caller.clone()); - - let new_sudoer: T::AccountId = account("sudoer", 0, SEED); - let new_sudoer_lookup = T::Lookup::unlookup(new_sudoer.clone()); - - }: _(RawOrigin::Signed(caller.clone()), new_sudoer_lookup) - verify { - assert_last_event::(Event::KeyChanged { old_sudoer: Some(caller)}.into()); - } - - impl_benchmark_test_suite!(Pallet, crate::mock::new_bench_ext(), crate::mock::Test); -} -*/ From 5078939a176e246bd0d09a92755d68b35a2bdd07 Mon Sep 17 00:00:00 2001 From: command-bot <> Date: Wed, 19 Apr 2023 15:27:34 +0000 Subject: [PATCH 06/13] ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_sudo --- frame/sudo/src/weights.rs | 84 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 frame/sudo/src/weights.rs diff --git a/frame/sudo/src/weights.rs b/frame/sudo/src/weights.rs new file mode 100644 index 0000000000000..539653952a841 --- /dev/null +++ b/frame/sudo/src/weights.rs @@ -0,0 +1,84 @@ +// This file is part of Substrate. + +// Copyright (C) Parity Technologies (UK) Ltd. +// SPDX-License-Identifier: Apache-2.0 + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! Autogenerated weights for pallet_sudo +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2023-04-19, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! WORST CASE MAP SIZE: `1000000` +//! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 + +// Executed Command: +// target/production/substrate +// benchmark +// pallet +// --steps=50 +// --repeat=20 +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --json-file=/var/lib/gitlab-runner/builds/zyw4fam_/0/parity/mirrors/substrate/.git/.artifacts/bench.json +// --pallet=pallet_sudo +// --chain=dev +// --header=./HEADER-APACHE2 +// --output=./frame/sudo/src/weights.rs +// --template=./.maintain/frame-weight-template.hbs + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; +use core::marker::PhantomData; + +/// Weight functions needed for pallet_sudo. +pub trait WeightInfo { + fn set_key() -> Weight; +} + +/// Weights for pallet_sudo using the Substrate node and recommended hardware. +pub struct SubstrateWeight(PhantomData); +impl WeightInfo for SubstrateWeight { + /// Storage: Sudo Key (r:1 w:1) + /// Proof: Sudo Key (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + fn set_key() -> Weight { + // Proof Size summary in bytes: + // Measured: `165` + // Estimated: `1517` + // Minimum execution time: 14_078_000 picoseconds. + Weight::from_parts(14_405_000, 1517) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } +} + +// For backwards compatibility and tests +impl WeightInfo for () { + /// Storage: Sudo Key (r:1 w:1) + /// Proof: Sudo Key (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + fn set_key() -> Weight { + // Proof Size summary in bytes: + // Measured: `165` + // Estimated: `1517` + // Minimum execution time: 14_078_000 picoseconds. + Weight::from_parts(14_405_000, 1517) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + .saturating_add(RocksDbWeight::get().writes(1_u64)) + } +} From 01a597a873beb5d70614f14b0ef79c82f52ab40e Mon Sep 17 00:00:00 2001 From: doordashcon Date: Thu, 20 Apr 2023 11:27:24 +0100 Subject: [PATCH 07/13] impl weights --- bin/node-template/runtime/src/lib.rs | 1 + bin/node/runtime/src/lib.rs | 1 + frame/sudo/src/lib.rs | 7 ++++++- frame/sudo/src/mock.rs | 1 + 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/bin/node-template/runtime/src/lib.rs b/bin/node-template/runtime/src/lib.rs index 3dcf1b5564dec..a3bcc90cdea87 100644 --- a/bin/node-template/runtime/src/lib.rs +++ b/bin/node-template/runtime/src/lib.rs @@ -265,6 +265,7 @@ impl pallet_transaction_payment::Config for Runtime { impl pallet_sudo::Config for Runtime { type RuntimeEvent = RuntimeEvent; type RuntimeCall = RuntimeCall; + type WeightInfo = pallet_sudo::weights::SubstrateWeight; } /// Configure the pallet-template in pallets/template. diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index c1666578f8559..0c986df3eec15 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -1248,6 +1248,7 @@ impl pallet_contracts::Config for Runtime { impl pallet_sudo::Config for Runtime { type RuntimeEvent = RuntimeEvent; type RuntimeCall = RuntimeCall; + type WeightInfo = pallet_sudo::weights::SubstrateWeight; } parameter_types! { diff --git a/frame/sudo/src/lib.rs b/frame/sudo/src/lib.rs index e9a69a040f9f0..18d263b774009 100644 --- a/frame/sudo/src/lib.rs +++ b/frame/sudo/src/lib.rs @@ -112,6 +112,8 @@ mod tests; #[cfg(feature = "runtime-benchmarks")] mod benchmarking; +pub mod weights; +pub use weights::*; pub use extension::CheckOnlySudoAccount; pub use pallet::*; @@ -133,6 +135,9 @@ pub mod pallet { type RuntimeCall: Parameter + UnfilteredDispatchable + GetDispatchInfo; + + /// Type representing the weight of this pallet + type WeightInfo: WeightInfo; } #[pallet::pallet] @@ -198,7 +203,7 @@ pub mod pallet { /// ## Complexity /// - O(1). #[pallet::call_index(2)] - #[pallet::weight({0})] // FIXME + #[pallet::weight(T::WeightInfo::set_key())] // FIXME pub fn set_key( origin: OriginFor, new: AccountIdLookupOf, diff --git a/frame/sudo/src/mock.rs b/frame/sudo/src/mock.rs index 949c582b16112..95a6507c12dd5 100644 --- a/frame/sudo/src/mock.rs +++ b/frame/sudo/src/mock.rs @@ -148,6 +148,7 @@ impl logger::Config for Test { impl Config for Test { type RuntimeEvent = RuntimeEvent; type RuntimeCall = RuntimeCall; + type WeightInfo = (); } // New types for dispatchable functions. From 189045600b969ec21406fe0ff9ae6f84e5a77068 Mon Sep 17 00:00:00 2001 From: doordashcon Date: Mon, 1 May 2023 14:37:47 +0100 Subject: [PATCH 08/13] sudo & sudo_as --- frame/sudo/src/benchmarking.rs | 39 +++++++++++++++++++++++++++++++++- frame/sudo/src/lib.rs | 5 +++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/frame/sudo/src/benchmarking.rs b/frame/sudo/src/benchmarking.rs index 4441df0d049a6..503e0e9ea2216 100644 --- a/frame/sudo/src/benchmarking.rs +++ b/frame/sudo/src/benchmarking.rs @@ -15,7 +15,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Benchmarks for Sudo Pallet +//! Benchmarks for Sudo Pallet use super::*; use crate::Pallet; @@ -46,5 +46,42 @@ mod benchmarks { assert_last_event::(Event::KeyChanged { old_sudoer: Some(caller) }.into()); } + #[benchmark] + fn sudo() { + let caller: T::AccountId = whitelisted_caller(); + Key::::put(caller.clone()); + + let call: ::RuntimeCall = frame_system::Call::remark { remark: vec![] }.into(); + + #[extrinsic_call] + _(RawOrigin::Signed(caller.clone()), Box::new(call.clone())); + + let res = call.dispatch_bypass_filter(RawOrigin::Signed(caller.clone()).into()); + + assert_last_event::( + Event::Sudid { sudo_result: res.map(|_| ()).map_err(|e| e.error) }.into(), + ) + } + + #[benchmark] + fn sudo_as() { + let caller: T::AccountId = whitelisted_caller(); + Key::::put(caller.clone()); + + let call: ::RuntimeCall = frame_system::Call::remark { remark: vec![] }.into(); + + let who: T::AccountId = account("as", 0, SEED); + let who_lookup = T::Lookup::unlookup(who.clone()); + + #[extrinsic_call] + _(RawOrigin::Signed(caller), who_lookup, Box::new(call.clone())); + + let res = call.dispatch_bypass_filter(RawOrigin::Signed(who).into()); + + assert_last_event::( + Event::SudoAsDone { sudo_result: res.map(|_| ()).map_err(|e| e.error) }.into(), + ) + } + impl_benchmark_test_suite!(Pallet, crate::mock::new_bench_ext(), crate::mock::Test); } diff --git a/frame/sudo/src/lib.rs b/frame/sudo/src/lib.rs index 18d263b774009..372e1c1e71db1 100644 --- a/frame/sudo/src/lib.rs +++ b/frame/sudo/src/lib.rs @@ -134,7 +134,8 @@ pub mod pallet { /// A sudo-able call. type RuntimeCall: Parameter + UnfilteredDispatchable - + GetDispatchInfo; + + GetDispatchInfo + + From>; /// Type representing the weight of this pallet type WeightInfo: WeightInfo; @@ -203,7 +204,7 @@ pub mod pallet { /// ## Complexity /// - O(1). #[pallet::call_index(2)] - #[pallet::weight(T::WeightInfo::set_key())] // FIXME + #[pallet::weight(T::WeightInfo::set_key())] pub fn set_key( origin: OriginFor, new: AccountIdLookupOf, From 28878cf75684a5c1f6bfd958aa510ca0fcf38a52 Mon Sep 17 00:00:00 2001 From: doordashcon Date: Sat, 6 May 2023 23:00:55 +0100 Subject: [PATCH 09/13] where --- bin/node-template/runtime/Cargo.toml | 1 + bin/node-template/runtime/src/lib.rs | 1 + frame/sudo/src/benchmarking.rs | 14 +++----------- frame/sudo/src/lib.rs | 5 ++--- 4 files changed, 7 insertions(+), 14 deletions(-) diff --git a/bin/node-template/runtime/Cargo.toml b/bin/node-template/runtime/Cargo.toml index 930c5b5c49ade..d7f7ca4d86a8c 100644 --- a/bin/node-template/runtime/Cargo.toml +++ b/bin/node-template/runtime/Cargo.toml @@ -95,6 +95,7 @@ runtime-benchmarks = [ "frame-system/runtime-benchmarks", "pallet-balances/runtime-benchmarks", "pallet-grandpa/runtime-benchmarks", + "pallet-sudo/runtime-benchmarks", "pallet-template/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", "sp-runtime/runtime-benchmarks", diff --git a/bin/node-template/runtime/src/lib.rs b/bin/node-template/runtime/src/lib.rs index a3bcc90cdea87..c138b390b4a94 100644 --- a/bin/node-template/runtime/src/lib.rs +++ b/bin/node-template/runtime/src/lib.rs @@ -337,6 +337,7 @@ mod benches { [frame_system, SystemBench::] [pallet_balances, Balances] [pallet_timestamp, Timestamp] + [pallet_sudo, Sudo] [pallet_template, TemplateModule] ); } diff --git a/frame/sudo/src/benchmarking.rs b/frame/sudo/src/benchmarking.rs index 503e0e9ea2216..6a365c1873c1d 100644 --- a/frame/sudo/src/benchmarking.rs +++ b/frame/sudo/src/benchmarking.rs @@ -28,7 +28,7 @@ fn assert_last_event(generic_event: ::RuntimeEvent) { frame_system::Pallet::::assert_last_event(generic_event.into()); } -#[benchmarks] +#[benchmarks( where ::RuntimeCall: From>)] mod benchmarks { use super::*; @@ -56,11 +56,7 @@ mod benchmarks { #[extrinsic_call] _(RawOrigin::Signed(caller.clone()), Box::new(call.clone())); - let res = call.dispatch_bypass_filter(RawOrigin::Signed(caller.clone()).into()); - - assert_last_event::( - Event::Sudid { sudo_result: res.map(|_| ()).map_err(|e| e.error) }.into(), - ) + assert_last_event::(Event::Sudid { sudo_result: Ok(()) }.into()) } #[benchmark] @@ -76,11 +72,7 @@ mod benchmarks { #[extrinsic_call] _(RawOrigin::Signed(caller), who_lookup, Box::new(call.clone())); - let res = call.dispatch_bypass_filter(RawOrigin::Signed(who).into()); - - assert_last_event::( - Event::SudoAsDone { sudo_result: res.map(|_| ()).map_err(|e| e.error) }.into(), - ) + assert_last_event::(Event::SudoAsDone { sudo_result: Ok(()) }.into()) } impl_benchmark_test_suite!(Pallet, crate::mock::new_bench_ext(), crate::mock::Test); diff --git a/frame/sudo/src/lib.rs b/frame/sudo/src/lib.rs index 372e1c1e71db1..a543c6173960e 100644 --- a/frame/sudo/src/lib.rs +++ b/frame/sudo/src/lib.rs @@ -113,7 +113,7 @@ mod tests; #[cfg(feature = "runtime-benchmarks")] mod benchmarking; pub mod weights; -pub use weights::*; +pub use weights::WeightInfo; pub use extension::CheckOnlySudoAccount; pub use pallet::*; @@ -134,8 +134,7 @@ pub mod pallet { /// A sudo-able call. type RuntimeCall: Parameter + UnfilteredDispatchable - + GetDispatchInfo - + From>; + + GetDispatchInfo; /// Type representing the weight of this pallet type WeightInfo: WeightInfo; From 891a949aaf5e7484b311e250d4eee79a256ef5e8 Mon Sep 17 00:00:00 2001 From: command-bot <> Date: Tue, 9 May 2023 13:08:45 +0000 Subject: [PATCH 10/13] ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_sudo --- frame/sudo/src/weights.rs | 53 +++++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/frame/sudo/src/weights.rs b/frame/sudo/src/weights.rs index 539653952a841..bc81cd607ac6d 100644 --- a/frame/sudo/src/weights.rs +++ b/frame/sudo/src/weights.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for pallet_sudo //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev -//! DATE: 2023-04-19, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2023-05-09, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `bm3`, CPU: `Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024 @@ -43,6 +43,7 @@ #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] +#![allow(missing_docs)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; use core::marker::PhantomData; @@ -50,6 +51,8 @@ use core::marker::PhantomData; /// Weight functions needed for pallet_sudo. pub trait WeightInfo { fn set_key() -> Weight; + fn sudo() -> Weight; + fn sudo_as() -> Weight; } /// Weights for pallet_sudo using the Substrate node and recommended hardware. @@ -61,11 +64,31 @@ impl WeightInfo for SubstrateWeight { // Proof Size summary in bytes: // Measured: `165` // Estimated: `1517` - // Minimum execution time: 14_078_000 picoseconds. - Weight::from_parts(14_405_000, 1517) + // Minimum execution time: 13_962_000 picoseconds. + Weight::from_parts(14_283_000, 1517) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } + /// Storage: Sudo Key (r:1 w:0) + /// Proof: Sudo Key (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + fn sudo() -> Weight { + // Proof Size summary in bytes: + // Measured: `165` + // Estimated: `1517` + // Minimum execution time: 14_009_000 picoseconds. + Weight::from_parts(14_400_000, 1517) + .saturating_add(T::DbWeight::get().reads(1_u64)) + } + /// Storage: Sudo Key (r:1 w:0) + /// Proof: Sudo Key (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + fn sudo_as() -> Weight { + // Proof Size summary in bytes: + // Measured: `165` + // Estimated: `1517` + // Minimum execution time: 13_954_000 picoseconds. + Weight::from_parts(14_248_000, 1517) + .saturating_add(T::DbWeight::get().reads(1_u64)) + } } // For backwards compatibility and tests @@ -76,9 +99,29 @@ impl WeightInfo for () { // Proof Size summary in bytes: // Measured: `165` // Estimated: `1517` - // Minimum execution time: 14_078_000 picoseconds. - Weight::from_parts(14_405_000, 1517) + // Minimum execution time: 13_962_000 picoseconds. + Weight::from_parts(14_283_000, 1517) .saturating_add(RocksDbWeight::get().reads(1_u64)) .saturating_add(RocksDbWeight::get().writes(1_u64)) } + /// Storage: Sudo Key (r:1 w:0) + /// Proof: Sudo Key (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + fn sudo() -> Weight { + // Proof Size summary in bytes: + // Measured: `165` + // Estimated: `1517` + // Minimum execution time: 14_009_000 picoseconds. + Weight::from_parts(14_400_000, 1517) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + } + /// Storage: Sudo Key (r:1 w:0) + /// Proof: Sudo Key (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen) + fn sudo_as() -> Weight { + // Proof Size summary in bytes: + // Measured: `165` + // Estimated: `1517` + // Minimum execution time: 13_954_000 picoseconds. + Weight::from_parts(14_248_000, 1517) + .saturating_add(RocksDbWeight::get().reads(1_u64)) + } } From 8ffafdfc280c926e584fad2ce7f544e9e85b0fa6 Mon Sep 17 00:00:00 2001 From: Doordashcon Date: Tue, 9 May 2023 22:03:37 +0000 Subject: [PATCH 11/13] update weights --- frame/sudo/src/lib.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/frame/sudo/src/lib.rs b/frame/sudo/src/lib.rs index a543c6173960e..7a161a370d21e 100644 --- a/frame/sudo/src/lib.rs +++ b/frame/sudo/src/lib.rs @@ -154,7 +154,10 @@ pub mod pallet { #[pallet::call_index(0)] #[pallet::weight({ let dispatch_info = call.get_dispatch_info(); - (dispatch_info.weight, dispatch_info.class) + ( + T::WeightInfo::sudo().saturating_add(dispatch_info.weight), + dispatch_info.class + ) })] pub fn sudo( origin: OriginFor, @@ -230,9 +233,7 @@ pub mod pallet { #[pallet::weight({ let dispatch_info = call.get_dispatch_info(); ( - dispatch_info.weight - // AccountData for inner call origin accountdata. - .saturating_add(T::DbWeight::get().reads_writes(1, 1)), + T::WeightInfo::sudo_as().saturating_add(dispatch_info.weight), dispatch_info.class, ) })] From ff180b3d393ea0b3b967119f9c431d0d30a20aec Mon Sep 17 00:00:00 2001 From: Doordashcon Date: Tue, 9 May 2023 22:32:25 +0000 Subject: [PATCH 12/13] cargo fmt --- frame/sudo/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frame/sudo/src/lib.rs b/frame/sudo/src/lib.rs index 7a161a370d21e..a35b870ed6a64 100644 --- a/frame/sudo/src/lib.rs +++ b/frame/sudo/src/lib.rs @@ -155,7 +155,7 @@ pub mod pallet { #[pallet::weight({ let dispatch_info = call.get_dispatch_info(); ( - T::WeightInfo::sudo().saturating_add(dispatch_info.weight), + T::WeightInfo::sudo().saturating_add(dispatch_info.weight), dispatch_info.class ) })] From 6c3acef234bef0c6ea0be8b85928d5e40db36182 Mon Sep 17 00:00:00 2001 From: Oliver Tale-Yazdi Date: Wed, 10 May 2023 22:26:47 +0200 Subject: [PATCH 13/13] Update Cargo.lock Signed-off-by: Oliver Tale-Yazdi --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 34e6fef608dbe..a9dbe18fec8c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5516,7 +5516,7 @@ dependencies = [ name = "node-template-release" version = "3.0.0" dependencies = [ - "clap 4.2.5", + "clap 4.2.7", "flate2", "fs_extra", "git2",