mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 22:11:02 +00:00
Migrate dispatch pallet to frame v2 (#1089)
* pallet-bridge-dispatch -> frame v2 * fix metadata
This commit is contained in:
committed by
Bastian Köcher
parent
b1db3df199
commit
239790fc72
@@ -69,7 +69,7 @@ pub type FromRialtoMessageDispatch = messages::target::FromBridgedChainMessageDi
|
||||
WithRialtoMessageBridge,
|
||||
crate::Runtime,
|
||||
pallet_balances::Pallet<Runtime>,
|
||||
pallet_bridge_dispatch::DefaultInstance,
|
||||
(),
|
||||
>;
|
||||
|
||||
/// Millau <-> Rialto message bridge.
|
||||
|
||||
@@ -63,7 +63,7 @@ pub type FromMillauMessageDispatch = messages::target::FromBridgedChainMessageDi
|
||||
WithMillauMessageBridge,
|
||||
crate::Runtime,
|
||||
pallet_balances::Pallet<Runtime>,
|
||||
pallet_bridge_dispatch::DefaultInstance,
|
||||
(),
|
||||
>;
|
||||
|
||||
/// Messages proof for Millau -> Rialto messages.
|
||||
|
||||
@@ -492,15 +492,12 @@ pub mod target {
|
||||
for FromBridgedChainMessageDispatch<B, ThisRuntime, ThisCurrency, ThisDispatchInstance>
|
||||
where
|
||||
BalanceOf<ThisChain<B>>: Saturating + FixedPointOperand,
|
||||
ThisDispatchInstance: frame_support::traits::Instance,
|
||||
ThisDispatchInstance: 'static,
|
||||
ThisRuntime: pallet_bridge_dispatch::Config<ThisDispatchInstance, MessageId = (LaneId, MessageNonce)>
|
||||
+ pallet_transaction_payment::Config,
|
||||
<ThisRuntime as pallet_transaction_payment::Config>::OnChargeTransaction:
|
||||
pallet_transaction_payment::OnChargeTransaction<ThisRuntime, Balance = BalanceOf<ThisChain<B>>>,
|
||||
ThisCurrency: Currency<AccountIdOf<ThisChain<B>>, Balance = BalanceOf<ThisChain<B>>>,
|
||||
<ThisRuntime as pallet_bridge_dispatch::Config<ThisDispatchInstance>>::Event: From<
|
||||
pallet_bridge_dispatch::RawEvent<(LaneId, MessageNonce), AccountIdOf<ThisChain<B>>, ThisDispatchInstance>,
|
||||
>,
|
||||
pallet_bridge_dispatch::Pallet<ThisRuntime, ThisDispatchInstance>: bp_message_dispatch::MessageDispatch<
|
||||
AccountIdOf<ThisChain<B>>,
|
||||
(LaneId, MessageNonce),
|
||||
|
||||
@@ -26,31 +26,35 @@
|
||||
// Generated by `decl_event!`
|
||||
#![allow(clippy::unused_unit)]
|
||||
|
||||
use bp_message_dispatch::{CallOrigin, MessageDispatch, MessagePayload, SpecVersion, Weight};
|
||||
use bp_message_dispatch::{CallOrigin, MessageDispatch, MessagePayload, SpecVersion};
|
||||
use bp_runtime::{
|
||||
derive_account_id,
|
||||
messages::{DispatchFeePayment, MessageDispatchResult},
|
||||
ChainId, SourceAccount,
|
||||
};
|
||||
use codec::{Decode, Encode};
|
||||
use codec::Encode;
|
||||
use frame_support::{
|
||||
decl_event, decl_module, decl_storage,
|
||||
dispatch::{Dispatchable, Parameter},
|
||||
dispatch::Dispatchable,
|
||||
ensure,
|
||||
traits::{Filter, Get},
|
||||
weights::{extract_actual_weight, GetDispatchInfo},
|
||||
};
|
||||
use frame_system::RawOrigin;
|
||||
use sp_runtime::{
|
||||
traits::{BadOrigin, Convert, IdentifyAccount, MaybeDisplay, MaybeSerializeDeserialize, Member, Verify},
|
||||
DispatchResult,
|
||||
};
|
||||
use sp_std::{fmt::Debug, marker::PhantomData, prelude::*};
|
||||
use sp_runtime::traits::{BadOrigin, Convert, IdentifyAccount, MaybeDisplay, Verify};
|
||||
use sp_std::{fmt::Debug, prelude::*};
|
||||
|
||||
/// The module configuration trait.
|
||||
pub trait Config<I = DefaultInstance>: frame_system::Config {
|
||||
pub use pallet::*;
|
||||
|
||||
#[frame_support::pallet]
|
||||
pub mod pallet {
|
||||
use super::*;
|
||||
use frame_support::pallet_prelude::*;
|
||||
use frame_system::pallet_prelude::*;
|
||||
|
||||
#[pallet::config]
|
||||
pub trait Config<I: 'static = ()>: frame_system::Config {
|
||||
/// The overarching event type.
|
||||
type Event: From<Event<Self, I>> + Into<<Self as frame_system::Config>::Event>;
|
||||
type Event: From<Event<Self, I>> + IsType<<Self as frame_system::Config>::Event>;
|
||||
/// Id of the message. Whenever message is passed to the dispatch module, it emits
|
||||
/// event with this id + dispatch result. Could be e.g. (LaneId, MessageNonce) if
|
||||
/// it comes from the messages module.
|
||||
@@ -87,55 +91,59 @@ pub trait Config<I = DefaultInstance>: frame_system::Config {
|
||||
type AccountIdConverter: sp_runtime::traits::Convert<sp_core::hash::H256, Self::AccountId>;
|
||||
}
|
||||
|
||||
decl_storage! {
|
||||
trait Store for Pallet<T: Config<I>, I: Instance = DefaultInstance> as Dispatch {}
|
||||
}
|
||||
type MessageIdOf<T, I> = <T as Config<I>>::MessageId;
|
||||
|
||||
decl_event!(
|
||||
pub enum Event<T, I = DefaultInstance> where
|
||||
<T as Config<I>>::MessageId,
|
||||
AccountId = <T as frame_system::Config>::AccountId,
|
||||
{
|
||||
#[pallet::pallet]
|
||||
#[pallet::generate_store(pub(super) trait Store)]
|
||||
pub struct Pallet<T, I = ()>(PhantomData<(T, I)>);
|
||||
|
||||
#[pallet::hooks]
|
||||
impl<T: Config<I>, I: 'static> Hooks<BlockNumberFor<T>> for Pallet<T, I> {}
|
||||
|
||||
#[pallet::call]
|
||||
impl<T: Config<I>, I: 'static> Pallet<T, I> {}
|
||||
|
||||
#[pallet::event]
|
||||
#[pallet::generate_deposit(pub(super) fn deposit_event)]
|
||||
#[pallet::metadata(<T as frame_system::Config>::AccountId = "AccountId", MessageIdOf<T, I> = "MessageId")]
|
||||
pub enum Event<T: Config<I>, I: 'static = ()> {
|
||||
/// Message has been rejected before reaching dispatch.
|
||||
MessageRejected(ChainId, MessageId),
|
||||
MessageRejected(ChainId, MessageIdOf<T, I>),
|
||||
/// Message has been rejected by dispatcher because of spec version mismatch.
|
||||
/// Last two arguments are: expected and passed spec version.
|
||||
MessageVersionSpecMismatch(ChainId, MessageId, SpecVersion, SpecVersion),
|
||||
MessageVersionSpecMismatch(ChainId, MessageIdOf<T, I>, SpecVersion, SpecVersion),
|
||||
/// Message has been rejected by dispatcher because of weight mismatch.
|
||||
/// Last two arguments are: expected and passed call weight.
|
||||
MessageWeightMismatch(ChainId, MessageId, Weight, Weight),
|
||||
MessageWeightMismatch(ChainId, MessageIdOf<T, I>, Weight, Weight),
|
||||
/// Message signature mismatch.
|
||||
MessageSignatureMismatch(ChainId, MessageId),
|
||||
MessageSignatureMismatch(ChainId, MessageIdOf<T, I>),
|
||||
/// We have failed to decode Call from the message.
|
||||
MessageCallDecodeFailed(ChainId, MessageId),
|
||||
MessageCallDecodeFailed(ChainId, MessageIdOf<T, I>),
|
||||
/// The call from the message has been rejected by the call filter.
|
||||
MessageCallRejected(ChainId, MessageId),
|
||||
MessageCallRejected(ChainId, MessageIdOf<T, I>),
|
||||
/// The origin account has failed to pay fee for dispatching the message.
|
||||
MessageDispatchPaymentFailed(ChainId, MessageId, AccountId, Weight),
|
||||
MessageDispatchPaymentFailed(
|
||||
ChainId,
|
||||
MessageIdOf<T, I>,
|
||||
<T as frame_system::Config>::AccountId,
|
||||
Weight,
|
||||
),
|
||||
/// Message has been dispatched with given result.
|
||||
MessageDispatched(ChainId, MessageId, DispatchResult),
|
||||
MessageDispatched(ChainId, MessageIdOf<T, I>, DispatchResult),
|
||||
/// Phantom member, never used. Needed to handle multiple pallet instances.
|
||||
_Dummy(PhantomData<I>),
|
||||
}
|
||||
);
|
||||
|
||||
decl_module! {
|
||||
/// Call Dispatch FRAME Pallet.
|
||||
pub struct Module<T: Config<I>, I: Instance = DefaultInstance> for enum Call where origin: T::Origin {
|
||||
/// Deposit one of this module's events by using the default implementation.
|
||||
fn deposit_event() = default;
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Config<I>, I: Instance> MessageDispatch<T::AccountId, T::MessageId> for Pallet<T, I> {
|
||||
impl<T: Config<I>, I: 'static> MessageDispatch<T::AccountId, T::MessageId> for Pallet<T, I> {
|
||||
type Message =
|
||||
MessagePayload<T::SourceChainAccountId, T::TargetChainAccountPublic, T::TargetChainSignature, T::EncodedCall>;
|
||||
|
||||
fn dispatch_weight(message: &Self::Message) -> Weight {
|
||||
fn dispatch_weight(message: &Self::Message) -> bp_message_dispatch::Weight {
|
||||
message.weight
|
||||
}
|
||||
|
||||
fn dispatch<P: FnOnce(&T::AccountId, Weight) -> Result<(), ()>>(
|
||||
fn dispatch<P: FnOnce(&T::AccountId, bp_message_dispatch::Weight) -> Result<(), ()>>(
|
||||
source_chain: ChainId,
|
||||
target_chain: ChainId,
|
||||
id: T::MessageId,
|
||||
@@ -152,7 +160,7 @@ impl<T: Config<I>, I: Instance> MessageDispatch<T::AccountId, T::MessageId> for
|
||||
source_chain,
|
||||
id,
|
||||
);
|
||||
Self::deposit_event(RawEvent::MessageRejected(source_chain, id));
|
||||
Self::deposit_event(Event::MessageRejected(source_chain, id));
|
||||
return MessageDispatchResult {
|
||||
dispatch_result: false,
|
||||
unspent_weight: 0,
|
||||
@@ -177,7 +185,7 @@ impl<T: Config<I>, I: Instance> MessageDispatch<T::AccountId, T::MessageId> for
|
||||
expected_version,
|
||||
message.spec_version,
|
||||
);
|
||||
Self::deposit_event(RawEvent::MessageVersionSpecMismatch(
|
||||
Self::deposit_event(Event::MessageVersionSpecMismatch(
|
||||
source_chain,
|
||||
id,
|
||||
expected_version,
|
||||
@@ -196,7 +204,7 @@ impl<T: Config<I>, I: Instance> MessageDispatch<T::AccountId, T::MessageId> for
|
||||
source_chain,
|
||||
id,
|
||||
);
|
||||
Self::deposit_event(RawEvent::MessageCallDecodeFailed(source_chain, id));
|
||||
Self::deposit_event(Event::MessageCallDecodeFailed(source_chain, id));
|
||||
return dispatch_result;
|
||||
}
|
||||
};
|
||||
@@ -228,7 +236,7 @@ impl<T: Config<I>, I: Instance> MessageDispatch<T::AccountId, T::MessageId> for
|
||||
target_account,
|
||||
target_signature,
|
||||
);
|
||||
Self::deposit_event(RawEvent::MessageSignatureMismatch(source_chain, id));
|
||||
Self::deposit_event(Event::MessageSignatureMismatch(source_chain, id));
|
||||
return dispatch_result;
|
||||
}
|
||||
|
||||
@@ -252,7 +260,7 @@ impl<T: Config<I>, I: Instance> MessageDispatch<T::AccountId, T::MessageId> for
|
||||
id,
|
||||
call,
|
||||
);
|
||||
Self::deposit_event(RawEvent::MessageCallRejected(source_chain, id));
|
||||
Self::deposit_event(Event::MessageCallRejected(source_chain, id));
|
||||
return dispatch_result;
|
||||
}
|
||||
|
||||
@@ -270,7 +278,7 @@ impl<T: Config<I>, I: Instance> MessageDispatch<T::AccountId, T::MessageId> for
|
||||
expected_weight,
|
||||
message.weight,
|
||||
);
|
||||
Self::deposit_event(RawEvent::MessageWeightMismatch(
|
||||
Self::deposit_event(Event::MessageWeightMismatch(
|
||||
source_chain,
|
||||
id,
|
||||
expected_weight,
|
||||
@@ -289,7 +297,7 @@ impl<T: Config<I>, I: Instance> MessageDispatch<T::AccountId, T::MessageId> for
|
||||
id,
|
||||
message.weight,
|
||||
);
|
||||
Self::deposit_event(RawEvent::MessageDispatchPaymentFailed(
|
||||
Self::deposit_event(Event::MessageDispatchPaymentFailed(
|
||||
source_chain,
|
||||
id,
|
||||
origin_account,
|
||||
@@ -319,7 +327,7 @@ impl<T: Config<I>, I: Instance> MessageDispatch<T::AccountId, T::MessageId> for
|
||||
result,
|
||||
);
|
||||
|
||||
Self::deposit_event(RawEvent::MessageDispatched(
|
||||
Self::deposit_event(Event::MessageDispatched(
|
||||
source_chain,
|
||||
id,
|
||||
result.map(drop).map_err(|e| e.error),
|
||||
@@ -397,6 +405,7 @@ mod tests {
|
||||
#![allow(clippy::from_over_into)]
|
||||
|
||||
use super::*;
|
||||
use codec::Decode;
|
||||
use frame_support::{parameter_types, weights::Weight};
|
||||
use frame_system::{EventRecord, Phase};
|
||||
use sp_core::H256;
|
||||
|
||||
Reference in New Issue
Block a user