mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 22:11:02 +00:00
Support dedicated lanes for pallets (#962)
* pass call origin to the message verifier * is_outbound_lane_enabled -> is_message_accepted * trait SenderOrigin * only accept messages from token swap pallet to token swap lane * tests for edge cases of pay_delivery_and_dispatch_fee * fixed origin verification * fmt * fix benchmarks compilation * fix TODO with None account and non-zero message fee (already covered by tests) * revert cargo fmt changes temporarily
This commit is contained in:
committed by
Bastian Köcher
parent
7b7b8baa60
commit
ed2a3082ef
@@ -456,10 +456,9 @@ impl pallet_bridge_messages::Config<WithRialtoMessagesInstance> for Runtime {
|
||||
type MessageDeliveryAndDispatchPayment =
|
||||
pallet_bridge_messages::instant_payments::InstantCurrencyPayments<
|
||||
Runtime,
|
||||
(),
|
||||
WithRialtoMessagesInstance,
|
||||
pallet_balances::Pallet<Runtime>,
|
||||
GetDeliveryConfirmationTransactionFee,
|
||||
RootAccountForPayments,
|
||||
>;
|
||||
type OnMessageAccepted = ();
|
||||
type OnDeliveryConfirmed =
|
||||
@@ -525,7 +524,7 @@ construct_runtime!(
|
||||
BridgeRialtoGrandpa: pallet_bridge_grandpa::{Pallet, Call, Storage},
|
||||
BridgeDispatch: pallet_bridge_dispatch::{Pallet, Event<T>},
|
||||
BridgeRialtoMessages: pallet_bridge_messages::{Pallet, Call, Storage, Event<T>, Config<T>},
|
||||
BridgeRialtoTokenSwap: pallet_bridge_token_swap::{Pallet, Call, Storage, Event<T>},
|
||||
BridgeRialtoTokenSwap: pallet_bridge_token_swap::{Pallet, Call, Storage, Event<T>, Origin<T>},
|
||||
|
||||
// Westend bridge modules.
|
||||
BridgeWestendGrandpa: pallet_bridge_grandpa::<Instance1>::{Pallet, Call, Config<T>, Storage},
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
use crate::Runtime;
|
||||
|
||||
use bp_messages::{
|
||||
source_chain::TargetHeaderChain,
|
||||
source_chain::{SenderOrigin, TargetHeaderChain},
|
||||
target_chain::{ProvedMessages, SourceHeaderChain},
|
||||
InboundLaneData, LaneId, Message, MessageNonce, Parameter as MessagesParameter,
|
||||
};
|
||||
@@ -116,12 +116,23 @@ impl messages::ChainWithMessages for Millau {
|
||||
}
|
||||
|
||||
impl messages::ThisChainWithMessages for Millau {
|
||||
type Origin = crate::Origin;
|
||||
type Call = crate::Call;
|
||||
|
||||
fn is_outbound_lane_enabled(lane: &LaneId) -> bool {
|
||||
*lane == [0, 0, 0, 0] ||
|
||||
*lane == [0, 0, 0, 1] ||
|
||||
*lane == crate::TokenSwapMessagesLane::get()
|
||||
fn is_message_accepted(send_origin: &Self::Origin, lane: &LaneId) -> bool {
|
||||
// lanes 0x00000000 && 0x00000001 are accepting any paid messages, while
|
||||
// `TokenSwapMessageLane` only accepts messages from token swap pallet
|
||||
let token_swap_dedicated_lane = crate::TokenSwapMessagesLane::get();
|
||||
match *lane {
|
||||
[0, 0, 0, 0] | [0, 0, 0, 1] => send_origin.linked_account().is_some(),
|
||||
_ if *lane == token_swap_dedicated_lane => matches!(
|
||||
send_origin.caller,
|
||||
crate::OriginCaller::BridgeRialtoTokenSwap(
|
||||
pallet_bridge_token_swap::RawOrigin::TokenSwap { .. }
|
||||
)
|
||||
),
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
fn maximal_pending_messages_at_outbound_lane() -> MessageNonce {
|
||||
@@ -277,6 +288,25 @@ impl SourceHeaderChain<bp_rialto::Balance> for Rialto {
|
||||
}
|
||||
}
|
||||
|
||||
impl SenderOrigin<crate::AccountId> for crate::Origin {
|
||||
fn linked_account(&self) -> Option<crate::AccountId> {
|
||||
match self.caller {
|
||||
crate::OriginCaller::system(frame_system::RawOrigin::Signed(ref submitter)) =>
|
||||
Some(submitter.clone()),
|
||||
crate::OriginCaller::system(frame_system::RawOrigin::Root) |
|
||||
crate::OriginCaller::system(frame_system::RawOrigin::None) =>
|
||||
crate::RootAccountForPayments::get(),
|
||||
crate::OriginCaller::BridgeRialtoTokenSwap(
|
||||
pallet_bridge_token_swap::RawOrigin::TokenSwap {
|
||||
ref swap_account_at_this_chain,
|
||||
..
|
||||
},
|
||||
) => Some(swap_account_at_this_chain.clone()),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Millau -> Rialto message lane pallet parameters.
|
||||
#[derive(RuntimeDebug, Clone, Encode, Decode, PartialEq, Eq, TypeInfo)]
|
||||
pub enum MillauToRialtoMessagesParameter {
|
||||
|
||||
Reference in New Issue
Block a user