diff --git a/frame/system/benchmarking/src/lib.rs b/frame/system/benchmarking/src/lib.rs index a23ea07df0ea9..bdb34e7944db5 100644 --- a/frame/system/benchmarking/src/lib.rs +++ b/frame/system/benchmarking/src/lib.rs @@ -44,6 +44,12 @@ benchmarks! { let caller = whitelisted_caller(); }: _(RawOrigin::Signed(caller), remark_message) + remark_with_event { + let b in 0 .. *T::BlockLength::get().max.get(DispatchClass::Normal) as u32; + let remark_message = vec![1; b as usize]; + let caller = whitelisted_caller(); + }: _(RawOrigin::Signed(caller), remark_message) + set_heap_pages { }: _(RawOrigin::Root, Default::default()) diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index e521a082a91ca..124c437c44bfa 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -292,8 +292,6 @@ pub mod pallet { /// /// # /// - `O(1)` - /// - Base Weight: 0.665 µs, independent of remark length. - /// - No DB operations. /// # #[pallet::weight(T::SystemWeightInfo::remark(_remark.len() as u32))] pub(crate) fn remark(origin: OriginFor, _remark: Vec) -> DispatchResultWithPostInfo { @@ -450,11 +448,25 @@ pub mod pallet { storage::unhashed::kill_prefix(&prefix); Ok(().into()) } + + /// Make some on-chain remark and emit event. + /// + /// # + /// - `O(b)` where b is the length of the remark. + /// - 1 event. + /// # + #[pallet::weight(T::SystemWeightInfo::remark_with_event(remark.len() as u32))] + pub(crate) fn remark_with_event(origin: OriginFor, remark: Vec) -> DispatchResultWithPostInfo { + let who = ensure_signed(origin)?; + let hash = T::Hashing::hash(&remark[..]); + Self::deposit_event(Event::Remarked(who, hash)); + Ok(().into()) + } } /// Event for the System pallet. #[pallet::event] - #[pallet::metadata(T::AccountId = "AccountId")] + #[pallet::metadata(T::AccountId = "AccountId", T::Hash = "Hash")] pub enum Event { /// An extrinsic completed successfully. \[info\] ExtrinsicSuccess(DispatchInfo), @@ -466,6 +478,8 @@ pub mod pallet { NewAccount(T::AccountId), /// An \[account\] was reaped. KilledAccount(T::AccountId), + /// On on-chain remark happened. \[origin, remark_hash\] + Remarked(T::AccountId, T::Hash), } /// Old name generated by `decl_event`. diff --git a/frame/system/src/weights.rs b/frame/system/src/weights.rs index 823e4b7d1e0db..c961b47e53eaf 100644 --- a/frame/system/src/weights.rs +++ b/frame/system/src/weights.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for frame_system //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0 -//! DATE: 2021-02-23, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] +//! DATE: 2021-02-27, STEPS: [50, ], REPEAT: 20, LOW RANGE: [], HIGH RANGE: [] //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 // Executed Command: @@ -45,6 +45,7 @@ use sp_std::marker::PhantomData; /// Weight functions needed for frame_system. pub trait WeightInfo { fn remark(b: u32, ) -> Weight; + fn remark_with_event(b: u32, ) -> Weight; fn set_heap_pages() -> Weight; fn set_changes_trie_config() -> Weight; fn set_storage(i: u32, ) -> Weight; @@ -56,33 +57,38 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { fn remark(_b: u32, ) -> Weight { - (1_279_000 as Weight) + (1_296_000 as Weight) + } + fn remark_with_event(b: u32, ) -> Weight { + (13_474_000 as Weight) + // Standard Error: 0 + .saturating_add((1_000 as Weight).saturating_mul(b as Weight)) } fn set_heap_pages() -> Weight { - (2_167_000 as Weight) + (2_024_000 as Weight) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn set_changes_trie_config() -> Weight { - (10_117_000 as Weight) + (10_551_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(2 as Weight)) } fn set_storage(i: u32, ) -> Weight { (0 as Weight) // Standard Error: 0 - .saturating_add((608_000 as Weight).saturating_mul(i as Weight)) + .saturating_add((612_000 as Weight).saturating_mul(i as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) } fn kill_storage(i: u32, ) -> Weight { - (3_199_000 as Weight) + (562_000 as Weight) // Standard Error: 0 - .saturating_add((450_000 as Weight).saturating_mul(i as Weight)) + .saturating_add((442_000 as Weight).saturating_mul(i as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) } fn kill_prefix(p: u32, ) -> Weight { - (8_966_000 as Weight) + (10_499_000 as Weight) // Standard Error: 1_000 - .saturating_add((845_000 as Weight).saturating_mul(p as Weight)) + .saturating_add((840_000 as Weight).saturating_mul(p as Weight)) .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight))) } } @@ -90,33 +96,38 @@ impl WeightInfo for SubstrateWeight { // For backwards compatibility and tests impl WeightInfo for () { fn remark(_b: u32, ) -> Weight { - (1_279_000 as Weight) + (1_296_000 as Weight) + } + fn remark_with_event(b: u32, ) -> Weight { + (13_474_000 as Weight) + // Standard Error: 0 + .saturating_add((1_000 as Weight).saturating_mul(b as Weight)) } fn set_heap_pages() -> Weight { - (2_167_000 as Weight) + (2_024_000 as Weight) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } fn set_changes_trie_config() -> Weight { - (10_117_000 as Weight) + (10_551_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(2 as Weight)) } fn set_storage(i: u32, ) -> Weight { (0 as Weight) // Standard Error: 0 - .saturating_add((608_000 as Weight).saturating_mul(i as Weight)) + .saturating_add((612_000 as Weight).saturating_mul(i as Weight)) .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) } fn kill_storage(i: u32, ) -> Weight { - (3_199_000 as Weight) + (562_000 as Weight) // Standard Error: 0 - .saturating_add((450_000 as Weight).saturating_mul(i as Weight)) + .saturating_add((442_000 as Weight).saturating_mul(i as Weight)) .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(i as Weight))) } fn kill_prefix(p: u32, ) -> Weight { - (8_966_000 as Weight) + (10_499_000 as Weight) // Standard Error: 1_000 - .saturating_add((845_000 as Weight).saturating_mul(p as Weight)) + .saturating_add((840_000 as Weight).saturating_mul(p as Weight)) .saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(p as Weight))) } }