From f16c3a75c76d814d1bd0dd1b0266bb7d7290fe49 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Wed, 18 Jan 2023 11:52:54 +0300 Subject: [PATCH] Default impl for some methods in messages benchmarking pallet config (#1777) * default impl for some methods in messages benchmarking pallet config * typo --- bridges/bin/millau/runtime/src/lib.rs | 19 +--------- bridges/modules/messages/src/benchmarking.rs | 39 ++++++++++++++++---- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/bridges/bin/millau/runtime/src/lib.rs b/bridges/bin/millau/runtime/src/lib.rs index dbff7f5940c64..6c401b9a94bde 100644 --- a/bridges/bin/millau/runtime/src/lib.rs +++ b/bridges/bin/millau/runtime/src/lib.rs @@ -1001,21 +1001,6 @@ impl_runtime_apis! { use rialto_messages::WithRialtoMessageBridge; impl MessagesConfig for Runtime { - fn bridged_relayer_id() -> Self::InboundRelayer { - [0u8; 32].into() - } - - fn is_relayer_rewarded(relayer: &Self::AccountId) -> bool { - pallet_bridge_relayers::Pallet::::relayer_reward(relayer, &Self::bench_lane_id()).is_some() - } - - fn endow_account(account: &Self::AccountId) { - pallet_balances::Pallet::::make_free_balance_be( - account, - Balance::MAX / 100, - ); - } - fn prepare_message_proof( params: MessageProofParams, ) -> (rialto_messages::FromRialtoMessagesProof, Weight) { @@ -1032,8 +1017,8 @@ impl_runtime_apis! { ) } - fn is_message_dispatched(_nonce: bp_messages::MessageNonce) -> bool { - true + fn is_relayer_rewarded(relayer: &Self::AccountId) -> bool { + pallet_bridge_relayers::Pallet::::relayer_reward(relayer, &Self::bench_lane_id()).is_some() } } diff --git a/bridges/modules/messages/src/benchmarking.rs b/bridges/modules/messages/src/benchmarking.rs index 62dd1d60caf66..a89cb3a8ef038 100644 --- a/bridges/modules/messages/src/benchmarking.rs +++ b/bridges/modules/messages/src/benchmarking.rs @@ -27,9 +27,11 @@ use bp_messages::{ UnrewardedRelayersState, }; use bp_runtime::StorageProofSize; +use codec::Decode; use frame_benchmarking::{account, benchmarks_instance_pallet}; use frame_support::weights::Weight; use frame_system::RawOrigin; +use sp_runtime::traits::TrailingZeroInput; use sp_std::{ops::RangeInclusive, prelude::*}; const SEED: u32 = 0; @@ -64,15 +66,26 @@ pub struct MessageDeliveryProofParams { /// Trait that must be implemented by runtime. pub trait Config: crate::Config { /// Lane id to use in benchmarks. + /// + /// By default, lane 00000000 is used. fn bench_lane_id() -> LaneId { - Default::default() + LaneId([0, 0, 0, 0]) } + /// Return id of relayer account at the bridged chain. - fn bridged_relayer_id() -> Self::InboundRelayer; - /// Returns true if given relayer has been rewarded for some of its actions. - fn is_relayer_rewarded(relayer: &Self::AccountId) -> bool; - /// Create given account and give it enough balance for test purposes. - fn endow_account(account: &Self::AccountId); + /// + /// By default, zero account is returned. + fn bridged_relayer_id() -> Self::InboundRelayer { + Self::InboundRelayer::decode(&mut TrailingZeroInput::zeroes()).unwrap() + } + + /// Create given account and give it enough balance for test purposes. Used to create + /// relayer account at the target chain. Is strictly necessary when your rewards scheme + /// assumes that the relayer account must exist. + /// + /// Does nothing by default. + fn endow_account(_account: &Self::AccountId) {} + /// Prepare messages proof to receive by the module. fn prepare_message_proof( params: MessageProofParams, @@ -81,8 +94,20 @@ pub trait Config: crate::Config { fn prepare_message_delivery_proof( params: MessageDeliveryProofParams, ) -> >::MessagesDeliveryProof; + /// Returns true if message has been dispatched (either successfully or not). - fn is_message_dispatched(nonce: MessageNonce) -> bool; + /// + /// We assume that messages have near-zero dispatch weight, so most of times it + /// is hard to determine whether messages has been dispatched or not. For example, + /// XCM message can be a call that leaves entry in `frame_system::Events` vector, + /// but not all XCM messages do that and we don't want to include weight of this + /// action to the base weight of message delivery. Hence, the default `true` return + /// value. + fn is_message_dispatched(_nonce: MessageNonce) -> bool { + true + } + /// Returns true if given relayer has been rewarded for some of its actions. + fn is_relayer_rewarded(relayer: &Self::AccountId) -> bool; } benchmarks_instance_pallet! {