From 70ac32cd40a29d8df56a887728b3f3825b18d29d Mon Sep 17 00:00:00 2001
From: Benjamin Gallois <business@gallois.cc>
Date: Fri, 5 May 2023 17:35:26 +0200
Subject: [PATCH] Oneshot account pallet benchmark (nodes/rust/duniter-v2s!153)

* feat(runtimes): use our benchmarks for pallet oneshot_account

* feat(pallet_oneshot_account): add weights info

* fix(pallet_oneshot_account): remove unecessary where clause
---
 pallets/oneshot-account/src/benchmarking.rs | 15 +++------------
 pallets/oneshot-account/src/lib.rs          | 10 +++++++---
 pallets/oneshot-account/src/mock.rs         |  1 +
 runtime/common/src/pallets_config.rs        |  1 +
 runtime/common/src/weights.rs               |  1 +
 5 files changed, 13 insertions(+), 15 deletions(-)

diff --git a/pallets/oneshot-account/src/benchmarking.rs b/pallets/oneshot-account/src/benchmarking.rs
index a72c65851..69bdf381d 100644
--- a/pallets/oneshot-account/src/benchmarking.rs
+++ b/pallets/oneshot-account/src/benchmarking.rs
@@ -29,10 +29,11 @@ use crate::Pallet;
 const SEED: u32 = 0;
 
 benchmarks! {
-    where_clause { where
+    where_clause {
+        where
         T: pallet_balances::Config,
         T::Balance: From<u64>,
-        <T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance>
+        <T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance>+From<T::Balance>
     }
     create_oneshot_account {
         let existential_deposit = T::ExistentialDeposit::get();
@@ -51,11 +52,6 @@ benchmarks! {
         assert_eq!(Balances::<T>::free_balance(&caller), transfer_amount);
         assert_eq!(OneshotAccounts::<T>::get(&recipient), Some(transfer_amount.into()));
     }
-    where_clause { where
-        T: pallet_balances::Config,
-        T::Balance: From<u64>,
-        <T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance>+From<T::Balance>
-    }
     consume_oneshot_account {
         let existential_deposit = T::ExistentialDeposit::get();
         let caller: T::AccountId = whitelisted_caller();
@@ -85,11 +81,6 @@ benchmarks! {
             existential_deposit.saturating_mul((3).into())
         );
     }
-    where_clause { where
-        T: pallet_balances::Config,
-        T::Balance: From<u64>,
-        <T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance>+From<T::Balance>
-    }
     consume_oneshot_account_with_remaining {
         let existential_deposit = T::ExistentialDeposit::get();
         let caller: T::AccountId = whitelisted_caller();
diff --git a/pallets/oneshot-account/src/lib.rs b/pallets/oneshot-account/src/lib.rs
index 6c1b7f72e..91d782b56 100644
--- a/pallets/oneshot-account/src/lib.rs
+++ b/pallets/oneshot-account/src/lib.rs
@@ -21,10 +21,12 @@ mod check_nonce;
 #[cfg(test)]
 mod mock;
 mod types;
+pub mod weights;
 
 pub use check_nonce::CheckNonce;
 pub use pallet::*;
 pub use types::*;
+pub use weights::WeightInfo;
 
 use frame_support::pallet_prelude::*;
 use frame_support::traits::{
@@ -56,6 +58,8 @@ pub mod pallet {
         type Currency: Currency<Self::AccountId>;
         type InnerOnChargeTransaction: OnChargeTransaction<Self>;
         type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
+        /// Type representing the weight of this pallet
+        type WeightInfo: WeightInfo;
     }
 
     // STORAGE //
@@ -127,7 +131,7 @@ pub mod pallet {
         /// - `balance`: The balance to be transfered to this oneshot account.
         ///
         /// Origin account is kept alive.
-        #[pallet::weight(500_000_000)]
+        #[pallet::weight(T::WeightInfo::create_oneshot_account())]
         pub fn create_oneshot_account(
             origin: OriginFor<T>,
             dest: <T::Lookup as StaticLookup>::Source,
@@ -165,7 +169,7 @@ pub mod pallet {
         /// - `block_height`: Must be a recent block number. The limit is `BlockHashCount` in the past. (this is to prevent replay attacks)
         /// - `dest`: The destination account.
         /// - `dest_is_oneshot`: If set to `true`, then a oneshot account is created at `dest`. Else, `dest` has to be an existing account.
-        #[pallet::weight(500_000_000)]
+        #[pallet::weight(T::WeightInfo::consume_oneshot_account())]
         pub fn consume_oneshot_account(
             origin: OriginFor<T>,
             block_height: T::BlockNumber,
@@ -223,7 +227,7 @@ pub mod pallet {
         /// - `dest2`: The second destination account.
         /// - `dest2_is_oneshot`: If set to `true`, then a oneshot account is created at `dest2`. Else, `dest2` has to be an existing account.
         /// - `balance1`: The amount transfered to `dest`, the leftover being transfered to `dest2`.
-        #[pallet::weight(500_000_000)]
+        #[pallet::weight(T::WeightInfo::consume_oneshot_account_with_remaining())]
         pub fn consume_oneshot_account_with_remaining(
             origin: OriginFor<T>,
             block_height: T::BlockNumber,
diff --git a/pallets/oneshot-account/src/mock.rs b/pallets/oneshot-account/src/mock.rs
index 89ee71c47..2de611479 100644
--- a/pallets/oneshot-account/src/mock.rs
+++ b/pallets/oneshot-account/src/mock.rs
@@ -104,6 +104,7 @@ impl pallet_oneshot_account::Config for Test {
     type Currency = Balances;
     type InnerOnChargeTransaction = CurrencyAdapter<Balances, HandleFees>;
     type RuntimeEvent = RuntimeEvent;
+    type WeightInfo = ();
 }
 
 pub struct HandleFees;
diff --git a/runtime/common/src/pallets_config.rs b/runtime/common/src/pallets_config.rs
index 892cb3723..69323965e 100644
--- a/runtime/common/src/pallets_config.rs
+++ b/runtime/common/src/pallets_config.rs
@@ -186,6 +186,7 @@ macro_rules! pallets_config {
             type Currency = Balances;
             type RuntimeEvent = RuntimeEvent;
             type InnerOnChargeTransaction = CurrencyAdapter<Balances, HandleFees>;
+            type WeightInfo = common_runtime::weights::pallet_oneshot_account::WeightInfo<Runtime>;
         }
 
         // CONSENSUS  //
diff --git a/runtime/common/src/weights.rs b/runtime/common/src/weights.rs
index b692cbca4..97903b4e1 100644
--- a/runtime/common/src/weights.rs
+++ b/runtime/common/src/weights.rs
@@ -33,6 +33,7 @@ pub mod pallet_upgrade_origin;
 pub mod pallet_provide_randomness;
 pub mod pallet_identity;
 pub mod pallet_duniter_account;
+pub mod pallet_oneshot_account;
 pub mod pallet_certification_cert;
 pub mod pallet_certification_smith_cert;
 pub mod paritydb_weights;
-- 
GitLab