From de0f10f420e83e166e23bfc8856507032bc63b6e Mon Sep 17 00:00:00 2001 From: Branislav Kontur Date: Wed, 26 Apr 2023 21:36:48 +0200 Subject: [PATCH] Removed relayer_account: &AccountId from MessageDispatch (#2080) * SourceBridgeHubChain/TargetBridgeHubChain replaced with RelayerAccountChain * Fix * Removed `relayer_account: &AccountId` from `MessageDispatch` --- .../bin/millau/runtime/src/rialto_messages.rs | 2 - .../runtime/src/rialto_parachain_messages.rs | 2 - bridges/bin/millau/runtime/src/xcm_config.rs | 6 +- .../bin/rialto-parachain/runtime/src/lib.rs | 3 +- .../runtime/src/millau_messages.rs | 2 - .../bin/rialto/runtime/src/millau_messages.rs | 2 - bridges/bin/rialto/runtime/src/xcm_config.rs | 3 +- .../src/messages_xcm_extension.rs | 22 ++------ bridges/modules/grandpa/src/lib.rs | 6 +- bridges/modules/messages/src/inbound_lane.rs | 56 +++++++------------ bridges/modules/messages/src/lib.rs | 14 +---- bridges/modules/messages/src/mock.rs | 3 +- .../primitives/messages/src/target_chain.rs | 9 +-- 13 files changed, 39 insertions(+), 91 deletions(-) diff --git a/bridges/bin/millau/runtime/src/rialto_messages.rs b/bridges/bin/millau/runtime/src/rialto_messages.rs index 84535283d4847..573e3f5e68d0d 100644 --- a/bridges/bin/millau/runtime/src/rialto_messages.rs +++ b/bridges/bin/millau/runtime/src/rialto_messages.rs @@ -64,8 +64,6 @@ pub type ToRialtoMessagesDeliveryProof = /// Call-dispatch based message dispatch for Rialto -> Millau messages. pub type FromRialtoMessageDispatch = bridge_runtime_common::messages_xcm_extension::XcmBlobMessageDispatch< - bp_millau::Millau, - bp_rialto::Rialto, crate::xcm_config::OnMillauBlobDispatcher, (), >; diff --git a/bridges/bin/millau/runtime/src/rialto_parachain_messages.rs b/bridges/bin/millau/runtime/src/rialto_parachain_messages.rs index bef8a281188e8..041d3256f428a 100644 --- a/bridges/bin/millau/runtime/src/rialto_parachain_messages.rs +++ b/bridges/bin/millau/runtime/src/rialto_parachain_messages.rs @@ -59,8 +59,6 @@ pub type FromRialtoParachainMessagePayload = messages::target::FromBridgedChainM /// Call-dispatch based message dispatch for RialtoParachain -> Millau messages. pub type FromRialtoParachainMessageDispatch = bridge_runtime_common::messages_xcm_extension::XcmBlobMessageDispatch< - bp_millau::Millau, - bp_rialto::Rialto, crate::xcm_config::OnMillauBlobDispatcher, (), >; diff --git a/bridges/bin/millau/runtime/src/xcm_config.rs b/bridges/bin/millau/runtime/src/xcm_config.rs index 4aaec83771b04..cabb70f40cc9f 100644 --- a/bridges/bin/millau/runtime/src/xcm_config.rs +++ b/bridges/bin/millau/runtime/src/xcm_config.rs @@ -349,8 +349,7 @@ mod tests { // we care only about handing message to the XCM dispatcher, so we don't care about its // actual dispatch - let dispatch_result = - FromRialtoMessageDispatch::dispatch(&AccountId::from([0u8; 32]), incoming_message); + let dispatch_result = FromRialtoMessageDispatch::dispatch(incoming_message); assert!(matches!( dispatch_result.dispatch_level_result, XcmBlobMessageDispatchResult::NotDispatched(_), @@ -363,8 +362,7 @@ mod tests { // we care only about handing message to the XCM dispatcher, so we don't care about its // actual dispatch - let dispatch_result = - FromRialtoMessageDispatch::dispatch(&AccountId::from([0u8; 32]), incoming_message); + let dispatch_result = FromRialtoMessageDispatch::dispatch(incoming_message); assert!(matches!( dispatch_result.dispatch_level_result, XcmBlobMessageDispatchResult::NotDispatched(_), diff --git a/bridges/bin/rialto-parachain/runtime/src/lib.rs b/bridges/bin/rialto-parachain/runtime/src/lib.rs index cd5c45ec4ba9a..de8ca493520e8 100644 --- a/bridges/bin/rialto-parachain/runtime/src/lib.rs +++ b/bridges/bin/rialto-parachain/runtime/src/lib.rs @@ -926,8 +926,7 @@ mod tests { // we care only about handing message to the XCM dispatcher, so we don't care about its // actual dispatch - let dispatch_result = - FromMillauMessageDispatch::dispatch(&AccountId::from([0u8; 32]), incoming_message); + let dispatch_result = FromMillauMessageDispatch::dispatch(incoming_message); assert!(matches!( dispatch_result.dispatch_level_result, XcmBlobMessageDispatchResult::NotDispatched(_), diff --git a/bridges/bin/rialto-parachain/runtime/src/millau_messages.rs b/bridges/bin/rialto-parachain/runtime/src/millau_messages.rs index 5d4a92b50916f..9c00e6bad348a 100644 --- a/bridges/bin/rialto-parachain/runtime/src/millau_messages.rs +++ b/bridges/bin/rialto-parachain/runtime/src/millau_messages.rs @@ -60,8 +60,6 @@ pub type FromMillauMessagePayload = messages::target::FromBridgedChainMessagePay /// Call-dispatch based message dispatch for Millau -> RialtoParachain messages. pub type FromMillauMessageDispatch = bridge_runtime_common::messages_xcm_extension::XcmBlobMessageDispatch< - bp_rialto_parachain::RialtoParachain, - bp_millau::Millau, crate::OnRialtoParachainBlobDispatcher, (), >; diff --git a/bridges/bin/rialto/runtime/src/millau_messages.rs b/bridges/bin/rialto/runtime/src/millau_messages.rs index ab4b7dd521dab..7c960639f2fa6 100644 --- a/bridges/bin/rialto/runtime/src/millau_messages.rs +++ b/bridges/bin/rialto/runtime/src/millau_messages.rs @@ -57,8 +57,6 @@ pub type FromMillauMessagePayload = messages::target::FromBridgedChainMessagePay /// Call-dispatch based message dispatch for Millau -> Rialto messages. pub type FromMillauMessageDispatch = bridge_runtime_common::messages_xcm_extension::XcmBlobMessageDispatch< - bp_rialto::Rialto, - bp_millau::Millau, crate::xcm_config::OnRialtoBlobDispatcher, (), >; diff --git a/bridges/bin/rialto/runtime/src/xcm_config.rs b/bridges/bin/rialto/runtime/src/xcm_config.rs index 9f6488b4c4d31..52c5af635b374 100644 --- a/bridges/bin/rialto/runtime/src/xcm_config.rs +++ b/bridges/bin/rialto/runtime/src/xcm_config.rs @@ -266,8 +266,7 @@ mod tests { // we care only about handing message to the XCM dispatcher, so we don't care about its // actual dispatch - let dispatch_result = - FromMillauMessageDispatch::dispatch(&AccountId::from([0u8; 32]), incoming_message); + let dispatch_result = FromMillauMessageDispatch::dispatch(incoming_message); assert!(matches!( dispatch_result.dispatch_level_result, XcmBlobMessageDispatchResult::NotDispatched(_), diff --git a/bridges/bin/runtime-common/src/messages_xcm_extension.rs b/bridges/bin/runtime-common/src/messages_xcm_extension.rs index 4ccdd7a4b4df5..96fdf1d501826 100644 --- a/bridges/bin/runtime-common/src/messages_xcm_extension.rs +++ b/bridges/bin/runtime-common/src/messages_xcm_extension.rs @@ -26,7 +26,7 @@ use bp_messages::{ target_chain::{DispatchMessage, MessageDispatch}, LaneId, }; -use bp_runtime::{messages::MessageDispatchResult, AccountIdOf, Chain}; +use bp_runtime::messages::MessageDispatchResult; use codec::{Decode, Encode}; use frame_support::{dispatch::Weight, CloneNoBound, EqNoBound, PartialEqNoBound}; use pallet_bridge_messages::WeightInfoExt as MessagesPalletWeights; @@ -46,23 +46,12 @@ pub enum XcmBlobMessageDispatchResult { } /// [`XcmBlobMessageDispatch`] is responsible for dispatching received messages -pub struct XcmBlobMessageDispatch -{ - _marker: sp_std::marker::PhantomData<( - SourceBridgeHubChain, - TargetBridgeHubChain, - DispatchBlob, - Weights, - )>, +pub struct XcmBlobMessageDispatch { + _marker: sp_std::marker::PhantomData<(DispatchBlob, Weights)>, } -impl< - SourceBridgeHubChain: Chain, - TargetBridgeHubChain: Chain, - BlobDispatcher: DispatchBlob, - Weights: MessagesPalletWeights, - > MessageDispatch> - for XcmBlobMessageDispatch +impl MessageDispatch + for XcmBlobMessageDispatch { type DispatchPayload = XcmAsPlainPayload; type DispatchLevelResult = XcmBlobMessageDispatchResult; @@ -78,7 +67,6 @@ impl< } fn dispatch( - _relayer_account: &AccountIdOf, message: DispatchMessage, ) -> MessageDispatchResult { let payload = match message.data.payload { diff --git a/bridges/modules/grandpa/src/lib.rs b/bridges/modules/grandpa/src/lib.rs index 9d38c9723d7ac..329e4c2113677 100644 --- a/bridges/modules/grandpa/src/lib.rs +++ b/bridges/modules/grandpa/src/lib.rs @@ -834,6 +834,7 @@ mod tests { run_test(|| { assert_eq!(BestFinalized::::get(), None,); assert_eq!(Pallet::::best_finalized(), None); + assert_eq!(PalletOperatingMode::::try_get(), Err(())); let init_data = init_with_origin(RuntimeOrigin::root()).unwrap(); @@ -843,7 +844,10 @@ mod tests { CurrentAuthoritySet::::get().authorities, init_data.authority_list ); - assert_eq!(PalletOperatingMode::::get(), BasicOperatingMode::Normal); + assert_eq!( + PalletOperatingMode::::try_get(), + Ok(BasicOperatingMode::Normal) + ); }) } diff --git a/bridges/modules/messages/src/inbound_lane.rs b/bridges/modules/messages/src/inbound_lane.rs index fa6480d962fb4..5ec4444dbdfbe 100644 --- a/bridges/modules/messages/src/inbound_lane.rs +++ b/bridges/modules/messages/src/inbound_lane.rs @@ -164,10 +164,9 @@ impl InboundLane { } /// Receive new message. - pub fn receive_message, AccountId>( + pub fn receive_message( &mut self, relayer_at_bridged_chain: &S::Relayer, - relayer_at_this_chain: &AccountId, nonce: MessageNonce, message_data: DispatchMessageData, ) -> ReceivalResult { @@ -189,13 +188,10 @@ impl InboundLane { } // then, dispatch message - let dispatch_result = Dispatch::dispatch( - relayer_at_this_chain, - DispatchMessage { - key: MessageKey { lane_id: self.storage.id(), nonce }, - data: message_data, - }, - ); + let dispatch_result = Dispatch::dispatch(DispatchMessage { + key: MessageKey { lane_id: self.storage.id(), nonce }, + data: message_data, + }); // now let's update inbound lane storage match data.relayers.back_mut() { @@ -234,8 +230,7 @@ mod tests { nonce: MessageNonce, ) { assert_eq!( - lane.receive_message::( - &TEST_RELAYER_A, + lane.receive_message::( &TEST_RELAYER_A, nonce, inbound_message_data(REGULAR_PAYLOAD) @@ -362,8 +357,7 @@ mod tests { run_test(|| { let mut lane = inbound_lane::(TEST_LANE_ID); assert_eq!( - lane.receive_message::( - &TEST_RELAYER_A, + lane.receive_message::( &TEST_RELAYER_A, 10, inbound_message_data(REGULAR_PAYLOAD) @@ -382,8 +376,7 @@ mod tests { ::MaxUnrewardedRelayerEntriesAtInboundLane::get(); for current_nonce in 1..max_nonce + 1 { assert_eq!( - lane.receive_message::( - &(TEST_RELAYER_A + current_nonce), + lane.receive_message::( &(TEST_RELAYER_A + current_nonce), current_nonce, inbound_message_data(REGULAR_PAYLOAD) @@ -393,8 +386,7 @@ mod tests { } // Fails to dispatch new message from different than latest relayer. assert_eq!( - lane.receive_message::( - &(TEST_RELAYER_A + max_nonce + 1), + lane.receive_message::( &(TEST_RELAYER_A + max_nonce + 1), max_nonce + 1, inbound_message_data(REGULAR_PAYLOAD) @@ -403,8 +395,7 @@ mod tests { ); // Fails to dispatch new messages from latest relayer. Prevents griefing attacks. assert_eq!( - lane.receive_message::( - &(TEST_RELAYER_A + max_nonce), + lane.receive_message::( &(TEST_RELAYER_A + max_nonce), max_nonce + 1, inbound_message_data(REGULAR_PAYLOAD) @@ -421,8 +412,7 @@ mod tests { let max_nonce = ::MaxUnconfirmedMessagesAtInboundLane::get(); for current_nonce in 1..=max_nonce { assert_eq!( - lane.receive_message::( - &TEST_RELAYER_A, + lane.receive_message::( &TEST_RELAYER_A, current_nonce, inbound_message_data(REGULAR_PAYLOAD) @@ -432,8 +422,7 @@ mod tests { } // Fails to dispatch new message from different than latest relayer. assert_eq!( - lane.receive_message::( - &TEST_RELAYER_B, + lane.receive_message::( &TEST_RELAYER_B, max_nonce + 1, inbound_message_data(REGULAR_PAYLOAD) @@ -442,8 +431,7 @@ mod tests { ); // Fails to dispatch new messages from latest relayer. assert_eq!( - lane.receive_message::( - &TEST_RELAYER_A, + lane.receive_message::( &TEST_RELAYER_A, max_nonce + 1, inbound_message_data(REGULAR_PAYLOAD) @@ -458,8 +446,7 @@ mod tests { run_test(|| { let mut lane = inbound_lane::(TEST_LANE_ID); assert_eq!( - lane.receive_message::( - &TEST_RELAYER_A, + lane.receive_message::( &TEST_RELAYER_A, 1, inbound_message_data(REGULAR_PAYLOAD) @@ -467,8 +454,7 @@ mod tests { ReceivalResult::Dispatched(dispatch_result(0)) ); assert_eq!( - lane.receive_message::( - &TEST_RELAYER_B, + lane.receive_message::( &TEST_RELAYER_B, 2, inbound_message_data(REGULAR_PAYLOAD) @@ -476,8 +462,7 @@ mod tests { ReceivalResult::Dispatched(dispatch_result(0)) ); assert_eq!( - lane.receive_message::( - &TEST_RELAYER_A, + lane.receive_message::( &TEST_RELAYER_A, 3, inbound_message_data(REGULAR_PAYLOAD) @@ -500,8 +485,7 @@ mod tests { run_test(|| { let mut lane = inbound_lane::(TEST_LANE_ID); assert_eq!( - lane.receive_message::( - &TEST_RELAYER_A, + lane.receive_message::( &TEST_RELAYER_A, 1, inbound_message_data(REGULAR_PAYLOAD) @@ -509,8 +493,7 @@ mod tests { ReceivalResult::Dispatched(dispatch_result(0)) ); assert_eq!( - lane.receive_message::( - &TEST_RELAYER_B, + lane.receive_message::( &TEST_RELAYER_B, 1, inbound_message_data(REGULAR_PAYLOAD) @@ -536,8 +519,7 @@ mod tests { let mut payload = REGULAR_PAYLOAD; *payload.dispatch_result.unspent_weight.ref_time_mut() = 1; assert_eq!( - lane.receive_message::( - &TEST_RELAYER_A, + lane.receive_message::( &TEST_RELAYER_A, 1, inbound_message_data(payload) diff --git a/bridges/modules/messages/src/lib.rs b/bridges/modules/messages/src/lib.rs index 6985b9018e701..8f4911b8d0327 100644 --- a/bridges/modules/messages/src/lib.rs +++ b/bridges/modules/messages/src/lib.rs @@ -162,10 +162,7 @@ pub mod pallet { /// Source header chain, as it is represented on target chain. type SourceHeaderChain: SourceHeaderChain; /// Message dispatch. - type MessageDispatch: MessageDispatch< - Self::AccountId, - DispatchPayload = Self::InboundPayload, - >; + type MessageDispatch: MessageDispatch; } /// Shortcut to messages proof type for Config. @@ -361,9 +358,8 @@ pub mod pallet { fail!(Error::::InsufficientDispatchWeight); } - let receival_result = lane.receive_message::( + let receival_result = lane.receive_message::( &relayer_id_at_bridged_chain, - &relayer_id_at_this_chain, message.key.nonce, message.data, ); @@ -545,11 +541,7 @@ pub mod pallet { MessageAccepted { lane_id: LaneId, nonce: MessageNonce }, /// Messages have been received from the bridged chain. MessagesReceived( - Vec< - ReceivedMessages< - >::DispatchLevelResult, - >, - >, + Vec::DispatchLevelResult>>, ), /// Messages in the inclusive range have been delivered to the bridged chain. MessagesDelivered { lane_id: LaneId, messages: DeliveredMessages }, diff --git a/bridges/modules/messages/src/mock.rs b/bridges/modules/messages/src/mock.rs index 270222a1fd6ed..3d78ab562d21c 100644 --- a/bridges/modules/messages/src/mock.rs +++ b/bridges/modules/messages/src/mock.rs @@ -416,7 +416,7 @@ impl SourceHeaderChain for TestSourceHeaderChain { #[derive(Debug)] pub struct TestMessageDispatch; -impl MessageDispatch for TestMessageDispatch { +impl MessageDispatch for TestMessageDispatch { type DispatchPayload = TestPayload; type DispatchLevelResult = TestDispatchLevelResult; @@ -428,7 +428,6 @@ impl MessageDispatch for TestMessageDispatch { } fn dispatch( - _relayer_account: &AccountId, message: DispatchMessage, ) -> MessageDispatchResult { match message.data.payload.as_ref() { diff --git a/bridges/primitives/messages/src/target_chain.rs b/bridges/primitives/messages/src/target_chain.rs index 8496b90214c40..3c2e8cf0cb074 100644 --- a/bridges/primitives/messages/src/target_chain.rs +++ b/bridges/primitives/messages/src/target_chain.rs @@ -83,7 +83,7 @@ pub trait SourceHeaderChain { } /// Called when inbound message is received. -pub trait MessageDispatch { +pub trait MessageDispatch { /// Decoded message payload type. Valid message may contain invalid payload. In this case /// message is delivered, but dispatch fails. Therefore, two separate types of payload /// (opaque `MessagePayload` used in delivery and this `DispatchPayload` used in dispatch). @@ -103,11 +103,7 @@ pub trait MessageDispatch { /// /// It is up to the implementers of this trait to determine whether the message /// is invalid (i.e. improperly encoded, has too large weight, ...) or not. - /// - /// If your configuration allows paying dispatch fee at the target chain, then - /// it must be paid inside this method to the `relayer_account`. fn dispatch( - relayer_account: &AccountId, message: DispatchMessage, ) -> MessageDispatchResult; } @@ -186,7 +182,7 @@ impl SourceHeaderChain } } -impl MessageDispatch +impl MessageDispatch for ForbidInboundMessages { type DispatchPayload = DispatchPayload; @@ -197,7 +193,6 @@ impl MessageDispatch, ) -> MessageDispatchResult { MessageDispatchResult { unspent_weight: Weight::zero(), dispatch_level_result: () }