|
19 | 19 | use crate::Runtime; |
20 | 20 |
|
21 | 21 | use bp_messages::{ |
22 | | - source_chain::TargetHeaderChain, |
| 22 | + source_chain::{SenderOrigin, TargetHeaderChain}, |
23 | 23 | target_chain::{ProvedMessages, SourceHeaderChain}, |
24 | 24 | InboundLaneData, LaneId, Message, MessageNonce, Parameter as MessagesParameter, |
25 | 25 | }; |
@@ -116,12 +116,23 @@ impl messages::ChainWithMessages for Millau { |
116 | 116 | } |
117 | 117 |
|
118 | 118 | impl messages::ThisChainWithMessages for Millau { |
| 119 | + type Origin = crate::Origin; |
119 | 120 | type Call = crate::Call; |
120 | 121 |
|
121 | | - fn is_outbound_lane_enabled(lane: &LaneId) -> bool { |
122 | | - *lane == [0, 0, 0, 0] || |
123 | | - *lane == [0, 0, 0, 1] || |
124 | | - *lane == crate::TokenSwapMessagesLane::get() |
| 122 | + fn is_message_accepted(send_origin: &Self::Origin, lane: &LaneId) -> bool { |
| 123 | + // lanes 0x00000000 && 0x00000001 are accepting any paid messages, while |
| 124 | + // `TokenSwapMessageLane` only accepts messages from token swap pallet |
| 125 | + let token_swap_dedicated_lane = crate::TokenSwapMessagesLane::get(); |
| 126 | + match *lane { |
| 127 | + [0, 0, 0, 0] | [0, 0, 0, 1] => send_origin.linked_account().is_some(), |
| 128 | + _ if *lane == token_swap_dedicated_lane => matches!( |
| 129 | + send_origin.caller, |
| 130 | + crate::OriginCaller::BridgeRialtoTokenSwap( |
| 131 | + pallet_bridge_token_swap::RawOrigin::TokenSwap { .. } |
| 132 | + ) |
| 133 | + ), |
| 134 | + _ => false, |
| 135 | + } |
125 | 136 | } |
126 | 137 |
|
127 | 138 | fn maximal_pending_messages_at_outbound_lane() -> MessageNonce { |
@@ -277,6 +288,25 @@ impl SourceHeaderChain<bp_rialto::Balance> for Rialto { |
277 | 288 | } |
278 | 289 | } |
279 | 290 |
|
| 291 | +impl SenderOrigin<crate::AccountId> for crate::Origin { |
| 292 | + fn linked_account(&self) -> Option<crate::AccountId> { |
| 293 | + match self.caller { |
| 294 | + crate::OriginCaller::system(frame_system::RawOrigin::Signed(ref submitter)) => |
| 295 | + Some(submitter.clone()), |
| 296 | + crate::OriginCaller::system(frame_system::RawOrigin::Root) | |
| 297 | + crate::OriginCaller::system(frame_system::RawOrigin::None) => |
| 298 | + crate::RootAccountForPayments::get(), |
| 299 | + crate::OriginCaller::BridgeRialtoTokenSwap( |
| 300 | + pallet_bridge_token_swap::RawOrigin::TokenSwap { |
| 301 | + ref swap_account_at_this_chain, |
| 302 | + .. |
| 303 | + }, |
| 304 | + ) => Some(swap_account_at_this_chain.clone()), |
| 305 | + _ => None, |
| 306 | + } |
| 307 | + } |
| 308 | +} |
| 309 | + |
280 | 310 | /// Millau -> Rialto message lane pallet parameters. |
281 | 311 | #[derive(RuntimeDebug, Clone, Encode, Decode, PartialEq, Eq, TypeInfo)] |
282 | 312 | pub enum MillauToRialtoMessagesParameter { |
|
0 commit comments