diff --git a/bin/millau/runtime/src/lib.rs b/bin/millau/runtime/src/lib.rs index 237c2aaa4c1..3c2a21d59d2 100644 --- a/bin/millau/runtime/src/lib.rs +++ b/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::::new(); list_benchmark!(list, extra, pallet_bridge_messages, MessagesBench::); list_benchmark!(list, extra, pallet_bridge_grandpa, BridgeRialtoGrandpa); list_benchmark!(list, extra, pallet_bridge_parachains, ParachainsBench::); - list_benchmark!(list, extra, pallet_bridge_relayers, BridgeRelayers); + list_benchmark!(list, extra, pallet_bridge_relayers, RelayersBench::); 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 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:: ); - add_benchmark!(params, batches, pallet_bridge_relayers, BridgeRelayers); + add_benchmark!(params, batches, pallet_bridge_relayers, RelayersBench::); Ok(batches) } diff --git a/modules/relayers/src/benchmarking.rs b/modules/relayers/src/benchmarking.rs index b79c0fb3ff0..e79dda14acb 100644 --- a/modules/relayers/src/benchmarking.rs +++ b/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(crate::Pallet); + +/// 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::::insert(&relayer, lane, T::Reward::from(REWARD_AMOUNT)); + let reward = T::Reward::from(REWARD_AMOUNT); + + T::prepare_environment(lane, reward); + RelayerRewards::::insert(&relayer, lane, reward); }: _(RawOrigin::Signed(relayer), lane) verify { // we can't check anything here, because `PaymentProcedure` is responsible for diff --git a/modules/relayers/src/lib.rs b/modules/relayers/src/lib.rs index 9ae211e9b91..0c6454f714a 100644 --- a/modules/relayers/src/lib.rs +++ b/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/modules/relayers/src/weights.rs b/modules/relayers/src/weights.rs index 7bcd8711a9e..26a1cfab1e4 100644 --- a/modules/relayers/src/weights.rs +++ b/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(PhantomData); impl WeightInfo for BridgeWeight { 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 WeightInfo for BridgeWeight { // 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)) }