diff --git a/pallets/duniter-wot/src/mock.rs b/pallets/duniter-wot/src/mock.rs index dd6396b8fc4872cc38e7ef2ca4ae0b454b73b07f..39f7e8ae507ab9a456ed37b3f79d48b74283e41c 100644 --- a/pallets/duniter-wot/src/mock.rs +++ b/pallets/duniter-wot/src/mock.rs @@ -150,6 +150,7 @@ impl pallet_membership::Config<Instance1> for Test { type MetaData = (); type OnEvent = DuniterWot; type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); type PendingMembershipPeriod = PendingMembershipPeriod; } @@ -204,6 +205,7 @@ impl pallet_membership::Config<Instance2> for Test { type MetaData = (); type OnEvent = SmithsSubWot; type PendingMembershipPeriod = SmithsPendingMembershipPeriod; + type WeightInfo = (); type RuntimeEvent = RuntimeEvent; } diff --git a/pallets/membership/src/lib.rs b/pallets/membership/src/lib.rs index 76037d965cf6d8c39b4519d7a15801f606fc258a..b8beaa20e2178cae4c8a3fc5917780f36100d566 100644 --- a/pallets/membership/src/lib.rs +++ b/pallets/membership/src/lib.rs @@ -26,7 +26,10 @@ mod tests; #[cfg(feature = "runtime-benchmarks")] mod benchmarking; +pub mod weights; + pub use pallet::*; +pub use weights::WeightInfo; use frame_support::dispatch::Weight; use frame_support::error::BadOrigin; @@ -80,6 +83,7 @@ pub mod pallet { /// Because this pallet emits events, it depends on the runtime's definition of an event. type RuntimeEvent: From<Event<Self, I>> + IsType<<Self as frame_system::Config>::RuntimeEvent>; + type WeightInfo: WeightInfo; } // GENESIS STUFF // @@ -197,8 +201,8 @@ pub mod pallet { #[pallet::call] impl<T: Config<I>, I: 'static> Pallet<T, I> { - #[pallet::weight(1_000_000_000)] /// request membership without checks + #[pallet::weight(T::WeightInfo::force_request_membership())] pub fn force_request_membership( origin: OriginFor<T>, idty_id: T::IdtyId, @@ -209,9 +213,9 @@ pub mod pallet { Self::do_request_membership(idty_id, metadata) } - #[pallet::weight(1_000_000_000)] /// submit a membership request (must have a declared identity) /// (only available for sub wot, automatic for main wot) + #[pallet::weight(T::WeightInfo::request_membership())] pub fn request_membership( origin: OriginFor<T>, metadata: T::MetaData, @@ -227,9 +231,9 @@ pub mod pallet { Self::do_request_membership(idty_id, metadata) } - #[pallet::weight(1_000_000_000)] /// claim that the previously requested membership fullfills the requirements /// (only available for sub wot, automatic for main wot) + #[pallet::weight(T::WeightInfo::claim_membership())] pub fn claim_membership( origin: OriginFor<T>, maybe_idty_id: Option<T::IdtyId>, @@ -255,8 +259,8 @@ pub mod pallet { Ok(().into()) } - #[pallet::weight(1_000_000_000)] /// extend the validity period of an active membership + #[pallet::weight(T::WeightInfo::renew_membership())] pub fn renew_membership( origin: OriginFor<T>, maybe_idty_id: Option<T::IdtyId>, @@ -276,9 +280,9 @@ pub mod pallet { Ok(().into()) } - #[pallet::weight(1_000_000_000)] /// revoke an active membership /// (only available for sub wot, automatic for main wot) + #[pallet::weight(T::WeightInfo::revoke_membership())] pub fn revoke_membership( origin: OriginFor<T>, maybe_idty_id: Option<T::IdtyId>, diff --git a/pallets/membership/src/mock.rs b/pallets/membership/src/mock.rs index 53d7f081bfdc0665682ff29a1f529465aef6cda5..e51038e9a57e6b5c0566caf4c6b2c5a9e74dc890 100644 --- a/pallets/membership/src/mock.rs +++ b/pallets/membership/src/mock.rs @@ -92,6 +92,7 @@ impl pallet_membership::Config for Test { type OnEvent = (); type PendingMembershipPeriod = PendingMembershipPeriod; type RuntimeEvent = RuntimeEvent; + type WeightInfo = (); } // Build genesis storage according to the mock runtime. diff --git a/pallets/membership/src/weights.rs b/pallets/membership/src/weights.rs new file mode 100644 index 0000000000000000000000000000000000000000..efd18e4571e2f150bc9f3c676a0c250b77664cad --- /dev/null +++ b/pallets/membership/src/weights.rs @@ -0,0 +1,84 @@ +// Copyright 2021-2023 Axiom-Team +// +// This file is part of Duniter-v2S. +// +// Duniter-v2S is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, version 3 of the License. +// +// Duniter-v2S 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>. + +#![allow(clippy::unnecessary_cast)] + +use frame_support::weights::{constants::RocksDbWeight, Weight}; + +/// Weight functions needed for pallet_universal_dividend. +pub trait WeightInfo { + fn force_request_membership() -> Weight; + fn request_membership() -> Weight; + fn claim_membership() -> Weight; + fn renew_membership() -> Weight; + fn revoke_membership() -> Weight; +} + +// Insecure weights implementation, use it for tests only! +impl WeightInfo for () { + // Storage: Membership PendingMembership (r:1 w:1) + // Storage: Membership Membership (r:1 w:0) + // Storage: Parameters ParametersStorage (r:1 w:0) + // Storage: Membership PendingMembershipsExpireOn (r:1 w:1) + fn force_request_membership() -> Weight { + // Minimum execution time: 89_725 nanoseconds. + Weight::from_ref_time(98_333_000 as u64) + .saturating_add(RocksDbWeight::get().reads(4 as u64)) + .saturating_add(RocksDbWeight::get().writes(2 as u64)) + } + // Storage: Identity IdentityIndexOf (r:1 w:0) + // Storage: Identity Identities (r:1 w:0) + fn request_membership() -> Weight { + // Minimum execution time: 48_477 nanoseconds. + Weight::from_ref_time(50_689_000 as u64) + .saturating_add(RocksDbWeight::get().reads(2 as u64)) + } + // Storage: Identity IdentityIndexOf (r:1 w:0) + // Storage: Membership Membership (r:1 w:1) + // Storage: Cert StorageIdtyCertMeta (r:1 w:0) + // Storage: Parameters ParametersStorage (r:1 w:0) + // Storage: Membership PendingMembership (r:1 w:1) + // Storage: Membership CounterForMembership (r:1 w:1) + // Storage: Membership MembershipsExpireOn (r:1 w:1) + fn claim_membership() -> Weight { + // Minimum execution time: 144_079 nanoseconds. + Weight::from_ref_time(146_565_000 as u64) + .saturating_add(RocksDbWeight::get().reads(7 as u64)) + .saturating_add(RocksDbWeight::get().writes(4 as u64)) + } + // Storage: Identity IdentityIndexOf (r:1 w:0) + // Storage: Membership Membership (r:1 w:1) + // Storage: Identity Identities (r:1 w:0) + // Storage: Parameters ParametersStorage (r:1 w:0) + // Storage: Membership MembershipsExpireOn (r:1 w:1) + fn renew_membership() -> Weight { + // Minimum execution time: 120_859 nanoseconds. + Weight::from_ref_time(124_222_000 as u64) + .saturating_add(RocksDbWeight::get().reads(5 as u64)) + .saturating_add(RocksDbWeight::get().writes(2 as u64)) + } + // Storage: Identity IdentityIndexOf (r:1 w:0) + // Storage: Membership Membership (r:1 w:1) + // Storage: Membership CounterForMembership (r:1 w:1) + // Storage: Identity Identities (r:1 w:0) + // Storage: UniversalDividend CurrentUdIndex (r:1 w:0) + fn revoke_membership() -> Weight { + // Minimum execution time: 109_486 nanoseconds. + Weight::from_ref_time(113_303_000 as u64) + .saturating_add(RocksDbWeight::get().reads(5 as u64)) + .saturating_add(RocksDbWeight::get().writes(2 as u64)) + } +}