From 4a4159524b697687f4782f11dd296210c3617502 Mon Sep 17 00:00:00 2001
From: bgallois <benjamin@gallois.cc>
Date: Wed, 26 Apr 2023 13:46:14 +0200
Subject: [PATCH] feat(pallet_membership): add weights info

---
 pallets/duniter-wot/src/mock.rs   |  2 +
 pallets/membership/src/lib.rs     | 14 ++++--
 pallets/membership/src/mock.rs    |  1 +
 pallets/membership/src/weights.rs | 84 +++++++++++++++++++++++++++++++
 4 files changed, 96 insertions(+), 5 deletions(-)
 create mode 100644 pallets/membership/src/weights.rs

diff --git a/pallets/duniter-wot/src/mock.rs b/pallets/duniter-wot/src/mock.rs
index dd6396b8f..39f7e8ae5 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 76037d965..b8beaa20e 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 53d7f081b..e51038e9a 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 000000000..efd18e457
--- /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))
+    }
+}
-- 
GitLab