From b94bd8d46be12f1116105818b19bc001333ca3da Mon Sep 17 00:00:00 2001
From: Svyatoslav Nikolsky <svyatonik@gmail.com>
Date: Mon, 5 Dec 2022 13:36:11 +0300
Subject: [PATCH] fixed benchmarks of relayers pallet (#1700)

---
 bridges/bin/millau/runtime/src/lib.rs        | 23 ++++++++++++++++++--
 bridges/modules/relayers/src/benchmarking.rs | 14 +++++++++++-
 bridges/modules/relayers/src/lib.rs          |  3 ++-
 bridges/modules/relayers/src/weights.rs      |  6 ++---
 4 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/bridges/bin/millau/runtime/src/lib.rs b/bridges/bin/millau/runtime/src/lib.rs
index 237c2aaa4c1..3c2a21d59d2 100644
--- a/bridges/bin/millau/runtime/src/lib.rs
+++ b/bridges/bin/millau/runtime/src/lib.rs
@@ -969,13 +969,14 @@ impl_runtime_apis! {
 
 			use pallet_bridge_messages::benchmarking::Pallet as MessagesBench;
 			use pallet_bridge_parachains::benchmarking::Pallet as ParachainsBench;
+			use pallet_bridge_relayers::benchmarking::Pallet as RelayersBench;
 
 			let mut list = Vec::<BenchmarkList>::new();
 
 			list_benchmark!(list, extra, pallet_bridge_messages, MessagesBench::<Runtime, WithRialtoMessagesInstance>);
 			list_benchmark!(list, extra, pallet_bridge_grandpa, BridgeRialtoGrandpa);
 			list_benchmark!(list, extra, pallet_bridge_parachains, ParachainsBench::<Runtime, WithRialtoMessagesInstance>);
-			list_benchmark!(list, extra, pallet_bridge_relayers, BridgeRelayers);
+			list_benchmark!(list, extra, pallet_bridge_relayers, RelayersBench::<Runtime>);
 
 			let storage_info = AllPalletsWithSystem::storage_info();
 
@@ -1014,6 +1015,10 @@ impl_runtime_apis! {
 				Pallet as ParachainsBench,
 				Config as ParachainsConfig,
 			};
+			use pallet_bridge_relayers::benchmarking::{
+				Pallet as RelayersBench,
+				Config as RelayersConfig,
+			};
 			use rialto_messages::WithRialtoMessageBridge;
 
 			impl MessagesConfig<WithRialtoMessagesInstance> for Runtime {
@@ -1068,6 +1073,20 @@ impl_runtime_apis! {
 				}
 			}
 
+			impl RelayersConfig for Runtime {
+				fn prepare_environment(
+					lane: bp_messages::LaneId,
+					reward: Balance,
+				) {
+					use frame_support::traits::fungible::Mutate;
+					let lane_rewards_account = bp_relayers::PayLaneRewardFromAccount::<
+						Balances,
+						AccountId
+					>::lane_rewards_account(lane);
+					Balances::mint_into(&lane_rewards_account, reward).unwrap();
+				}
+			}
+
 			add_benchmark!(
 				params,
 				batches,
@@ -1081,7 +1100,7 @@ impl_runtime_apis! {
 				pallet_bridge_parachains,
 				ParachainsBench::<Runtime, WithRialtoParachainsInstance>
 			);
-			add_benchmark!(params, batches, pallet_bridge_relayers, BridgeRelayers);
+			add_benchmark!(params, batches, pallet_bridge_relayers, RelayersBench::<Runtime>);
 
 			Ok(batches)
 		}
diff --git a/bridges/modules/relayers/src/benchmarking.rs b/bridges/modules/relayers/src/benchmarking.rs
index b79c0fb3ff0..e79dda14acb 100644
--- a/bridges/modules/relayers/src/benchmarking.rs
+++ b/bridges/modules/relayers/src/benchmarking.rs
@@ -26,12 +26,24 @@ use frame_system::RawOrigin;
 /// Reward amount that is (hopefully) is larger than existential deposit across all chains.
 const REWARD_AMOUNT: u32 = u32::MAX;
 
+/// Pallet we're benchmarking here.
+pub struct Pallet<T: Config>(crate::Pallet<T>);
+
+/// Trait that must be implemented by runtime.
+pub trait Config: crate::Config {
+	/// Prepare environment for paying given reward for serving given lane.
+	fn prepare_environment(lane: LaneId, reward: Self::Reward);
+}
+
 benchmarks! {
 	// Benchmark `claim_rewards` call.
 	claim_rewards {
 		let lane = [0, 0, 0, 0];
 		let relayer: T::AccountId = whitelisted_caller();
-		RelayerRewards::<T>::insert(&relayer, lane, T::Reward::from(REWARD_AMOUNT));
+		let reward = T::Reward::from(REWARD_AMOUNT);
+
+		T::prepare_environment(lane, reward);
+		RelayerRewards::<T>::insert(&relayer, lane, reward);
 	}: _(RawOrigin::Signed(relayer), lane)
 	verify {
 		// we can't check anything here, because `PaymentProcedure` is responsible for
diff --git a/bridges/modules/relayers/src/lib.rs b/bridges/modules/relayers/src/lib.rs
index 9ae211e9b91..0c6454f714a 100644
--- a/bridges/modules/relayers/src/lib.rs
+++ b/bridges/modules/relayers/src/lib.rs
@@ -30,7 +30,8 @@ use weights::WeightInfo;
 pub use pallet::*;
 pub use payment_adapter::MessageDeliveryAndDispatchPaymentAdapter;
 
-mod benchmarking;
+pub mod benchmarking;
+
 mod mock;
 mod payment_adapter;
 
diff --git a/bridges/modules/relayers/src/weights.rs b/bridges/modules/relayers/src/weights.rs
index 7bcd8711a9e..26a1cfab1e4 100644
--- a/bridges/modules/relayers/src/weights.rs
+++ b/bridges/modules/relayers/src/weights.rs
@@ -17,7 +17,7 @@
 //! Autogenerated weights for `pallet_bridge_relayers`
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-11-17, STEPS: 50, REPEAT: 20
+//! DATE: 2022-12-05, STEPS: 50, REPEAT: 20
 //! LOW RANGE: [], HIGH RANGE: []
 //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled
 //! CHAIN: Some("dev"), DB CACHE: 1024
@@ -59,7 +59,7 @@ pub trait WeightInfo {
 pub struct BridgeWeight<T>(PhantomData<T>);
 impl<T: frame_system::Config> WeightInfo for BridgeWeight<T> {
 	fn claim_rewards() -> Weight {
-		Weight::from_ref_time(59_334_000 as u64)
+		Weight::from_ref_time(64_065_000 as u64)
 			.saturating_add(T::DbWeight::get().reads(2 as u64))
 			.saturating_add(T::DbWeight::get().writes(2 as u64))
 	}
@@ -68,7 +68,7 @@ impl<T: frame_system::Config> WeightInfo for BridgeWeight<T> {
 // For backwards compatibility and tests
 impl WeightInfo for () {
 	fn claim_rewards() -> Weight {
-		Weight::from_ref_time(59_334_000 as u64)
+		Weight::from_ref_time(64_065_000 as u64)
 			.saturating_add(RocksDbWeight::get().reads(2 as u64))
 			.saturating_add(RocksDbWeight::get().writes(2 as u64))
 	}
-- 
GitLab