diff --git a/pallets/duniter-wot/src/mock.rs b/pallets/duniter-wot/src/mock.rs
index 02dd62b98098dc75bfebf3e98a8386e93d1e8aac..c5089c60db64d8ca7171744811fcfccd2ccea322 100644
--- a/pallets/duniter-wot/src/mock.rs
+++ b/pallets/duniter-wot/src/mock.rs
@@ -151,6 +151,7 @@ impl pallet_membership::Config<Instance1> for Test {
type MetaData = ();
type OnEvent = DuniterWot;
type RuntimeEvent = RuntimeEvent;
+ type WeightInfo = ();
type PendingMembershipPeriod = PendingMembershipPeriod;
}
@@ -204,7 +205,9 @@ impl pallet_membership::Config<Instance2> for Test {
type MembershipPeriod = SmithMembershipPeriod;
type MetaData = ();
type OnEvent = SmithSubWot;
+ type OnEvent = SmithsSubWot;
type PendingMembershipPeriod = SmithPendingMembershipPeriod;
+ 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))
+ }
+}