mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 14:01:02 +00:00
cargo +nightly fmt (#3540)
* cargo +nightly fmt * add cargo-fmt check to ci * update ci * fmt * fmt * skip macro * ignore bridges
This commit is contained in:
@@ -18,23 +18,23 @@
|
||||
|
||||
#![cfg_attr(not(feature = "std"), no_std)]
|
||||
|
||||
use sp_std::{prelude::*, marker::PhantomData, convert::TryInto, boxed::Box, vec};
|
||||
use codec::{Encode, Decode};
|
||||
use codec::{Decode, Encode};
|
||||
use frame_support::traits::{Contains, EnsureOrigin, Filter, Get, OriginTrait};
|
||||
use sp_runtime::{traits::BadOrigin, RuntimeDebug};
|
||||
use sp_std::{boxed::Box, convert::TryInto, marker::PhantomData, prelude::*, vec};
|
||||
use xcm::v0::prelude::*;
|
||||
use xcm_executor::traits::ConvertOrigin;
|
||||
use sp_runtime::{RuntimeDebug, traits::BadOrigin};
|
||||
use frame_support::traits::{EnsureOrigin, OriginTrait, Filter, Get, Contains};
|
||||
|
||||
pub use pallet::*;
|
||||
use frame_support::PalletId;
|
||||
pub use pallet::*;
|
||||
|
||||
#[frame_support::pallet]
|
||||
pub mod pallet {
|
||||
use super::*;
|
||||
use frame_support::pallet_prelude::*;
|
||||
use frame_system::pallet_prelude::*;
|
||||
use xcm_executor::traits::WeightBounds;
|
||||
use sp_runtime::traits::AccountIdConversion;
|
||||
use xcm_executor::traits::WeightBounds;
|
||||
|
||||
#[pallet::pallet]
|
||||
#[pallet::generate_store(pub(super) trait Store)]
|
||||
@@ -48,7 +48,7 @@ pub mod pallet {
|
||||
|
||||
/// Required origin for sending XCM messages. If successful, the it resolves to `MultiLocation`
|
||||
/// which exists as an interior location within this chain's XCM context.
|
||||
type SendXcmOrigin: EnsureOrigin<Self::Origin, Success=MultiLocation>;
|
||||
type SendXcmOrigin: EnsureOrigin<Self::Origin, Success = MultiLocation>;
|
||||
|
||||
/// The type used to actually dispatch an XCM to its destination.
|
||||
type XcmRouter: SendXcm;
|
||||
@@ -56,7 +56,7 @@ pub mod pallet {
|
||||
/// Required origin for executing XCM messages, including the teleport functionality. If successful,
|
||||
/// then it resolves to `MultiLocation` which exists as an interior location within this chain's XCM
|
||||
/// context.
|
||||
type ExecuteXcmOrigin: EnsureOrigin<Self::Origin, Success=MultiLocation>;
|
||||
type ExecuteXcmOrigin: EnsureOrigin<Self::Origin, Success = MultiLocation>;
|
||||
|
||||
/// Our XCM filter which messages to be executed using `XcmExecutor` must pass.
|
||||
type XcmExecuteFilter: Contains<(MultiLocation, Xcm<Self::Call>)>;
|
||||
@@ -99,11 +99,12 @@ pub mod pallet {
|
||||
#[pallet::weight(100_000_000)]
|
||||
pub fn send(origin: OriginFor<T>, dest: MultiLocation, message: Xcm<()>) -> DispatchResult {
|
||||
let origin_location = T::SendXcmOrigin::ensure_origin(origin)?;
|
||||
Self::send_xcm(origin_location.clone(), dest.clone(), message.clone())
|
||||
.map_err(|e| match e {
|
||||
Self::send_xcm(origin_location.clone(), dest.clone(), message.clone()).map_err(
|
||||
|e| match e {
|
||||
XcmError::CannotReachDestination(..) => Error::<T>::Unreachable,
|
||||
_ => Error::<T>::SendFailure,
|
||||
})?;
|
||||
},
|
||||
)?;
|
||||
Self::deposit_event(Event::Sent(origin_location, dest, message));
|
||||
Ok(())
|
||||
}
|
||||
@@ -143,27 +144,26 @@ pub mod pallet {
|
||||
let (origin_location, assets) = value;
|
||||
let mut message = Xcm::WithdrawAsset {
|
||||
assets,
|
||||
effects: vec![
|
||||
InitiateTeleport {
|
||||
assets: vec![ All ],
|
||||
dest,
|
||||
effects: vec![
|
||||
BuyExecution {
|
||||
fees: All,
|
||||
// Zero weight for additional XCM (since there are none to execute)
|
||||
weight: 0,
|
||||
debt: dest_weight,
|
||||
halt_on_error: false,
|
||||
xcm: vec![],
|
||||
},
|
||||
DepositAsset { assets: vec![ All ], dest: beneficiary },
|
||||
],
|
||||
},
|
||||
],
|
||||
effects: vec![InitiateTeleport {
|
||||
assets: vec![All],
|
||||
dest,
|
||||
effects: vec![
|
||||
BuyExecution {
|
||||
fees: All,
|
||||
// Zero weight for additional XCM (since there are none to execute)
|
||||
weight: 0,
|
||||
debt: dest_weight,
|
||||
halt_on_error: false,
|
||||
xcm: vec![],
|
||||
},
|
||||
DepositAsset { assets: vec![All], dest: beneficiary },
|
||||
],
|
||||
}],
|
||||
};
|
||||
let weight = T::Weigher::weight(&mut message)
|
||||
.map_err(|()| Error::<T>::UnweighableMessage)?;
|
||||
let outcome = T::XcmExecutor::execute_xcm_in_credit(origin_location, message, weight, weight);
|
||||
let weight =
|
||||
T::Weigher::weight(&mut message).map_err(|()| Error::<T>::UnweighableMessage)?;
|
||||
let outcome =
|
||||
T::XcmExecutor::execute_xcm_in_credit(origin_location, message, weight, weight);
|
||||
Self::deposit_event(Event::Attempted(outcome));
|
||||
Ok(())
|
||||
}
|
||||
@@ -211,12 +211,13 @@ pub mod pallet {
|
||||
halt_on_error: false,
|
||||
xcm: vec![],
|
||||
},
|
||||
DepositAsset { assets: vec![ All ], dest: beneficiary },
|
||||
DepositAsset { assets: vec![All], dest: beneficiary },
|
||||
],
|
||||
};
|
||||
let weight = T::Weigher::weight(&mut message)
|
||||
.map_err(|()| Error::<T>::UnweighableMessage)?;
|
||||
let outcome = T::XcmExecutor::execute_xcm_in_credit(origin_location, message, weight, weight);
|
||||
let weight =
|
||||
T::Weigher::weight(&mut message).map_err(|()| Error::<T>::UnweighableMessage)?;
|
||||
let outcome =
|
||||
T::XcmExecutor::execute_xcm_in_credit(origin_location, message, weight, weight);
|
||||
Self::deposit_event(Event::Attempted(outcome));
|
||||
Ok(())
|
||||
}
|
||||
@@ -233,9 +234,11 @@ pub mod pallet {
|
||||
/// NOTE: A successful return to this does *not* imply that the `msg` was executed successfully
|
||||
/// to completion; only that *some* of it was executed.
|
||||
#[pallet::weight(max_weight.saturating_add(100_000_000u64))]
|
||||
pub fn execute(origin: OriginFor<T>, message: Box<Xcm<T::Call>>, max_weight: Weight)
|
||||
-> DispatchResult
|
||||
{
|
||||
pub fn execute(
|
||||
origin: OriginFor<T>,
|
||||
message: Box<Xcm<T::Call>>,
|
||||
max_weight: Weight,
|
||||
) -> DispatchResult {
|
||||
let origin_location = T::ExecuteXcmOrigin::ensure_origin(origin)?;
|
||||
let value = (origin_location, *message);
|
||||
ensure!(T::XcmExecuteFilter::contains(&value), Error::<T>::Filtered);
|
||||
@@ -249,7 +252,11 @@ pub mod pallet {
|
||||
impl<T: Config> Pallet<T> {
|
||||
/// Relay an XCM `message` from a given `interior` location in this context to a given `dest`
|
||||
/// location. A null `dest` is not handled.
|
||||
pub fn send_xcm(interior: MultiLocation, dest: MultiLocation, message: Xcm<()>) -> Result<(), XcmError> {
|
||||
pub fn send_xcm(
|
||||
interior: MultiLocation,
|
||||
dest: MultiLocation,
|
||||
message: Xcm<()>,
|
||||
) -> Result<(), XcmError> {
|
||||
let message = match interior {
|
||||
MultiLocation::Null => message,
|
||||
who => Xcm::<()>::RelayedFrom { who, message: Box::new(message) },
|
||||
@@ -282,7 +289,8 @@ pub mod pallet {
|
||||
/// Ensure that the origin `o` represents a sibling parachain.
|
||||
/// Returns `Ok` with the parachain ID of the sibling or an `Err` otherwise.
|
||||
pub fn ensure_xcm<OuterOrigin>(o: OuterOrigin) -> Result<MultiLocation, BadOrigin>
|
||||
where OuterOrigin: Into<Result<Origin, OuterOrigin>>
|
||||
where
|
||||
OuterOrigin: Into<Result<Origin, OuterOrigin>>,
|
||||
{
|
||||
match o.into() {
|
||||
Ok(Origin::Xcm(location)) => Ok(location),
|
||||
@@ -295,7 +303,9 @@ pub fn ensure_xcm<OuterOrigin>(o: OuterOrigin) -> Result<MultiLocation, BadOrigi
|
||||
///
|
||||
/// May reasonably be used with `EnsureXcm`.
|
||||
pub struct IsMajorityOfBody<Prefix, Body>(PhantomData<(Prefix, Body)>);
|
||||
impl<Prefix: Get<MultiLocation>, Body: Get<BodyId>> Filter<MultiLocation> for IsMajorityOfBody<Prefix, Body> {
|
||||
impl<Prefix: Get<MultiLocation>, Body: Get<BodyId>> Filter<MultiLocation>
|
||||
for IsMajorityOfBody<Prefix, Body>
|
||||
{
|
||||
fn filter(l: &MultiLocation) -> bool {
|
||||
let maybe_suffix = l.match_and_split(&Prefix::get());
|
||||
matches!(maybe_suffix, Some(Plurality { id, part }) if id == &Body::get() && part.is_majority())
|
||||
@@ -306,19 +316,21 @@ impl<Prefix: Get<MultiLocation>, Body: Get<BodyId>> Filter<MultiLocation> for Is
|
||||
/// `Origin::Xcm` item.
|
||||
pub struct EnsureXcm<F>(PhantomData<F>);
|
||||
impl<O: OriginTrait + From<Origin>, F: Filter<MultiLocation>> EnsureOrigin<O> for EnsureXcm<F>
|
||||
where O::PalletsOrigin: From<Origin> + TryInto<Origin, Error=O::PalletsOrigin>
|
||||
where
|
||||
O::PalletsOrigin: From<Origin> + TryInto<Origin, Error = O::PalletsOrigin>,
|
||||
{
|
||||
type Success = MultiLocation;
|
||||
|
||||
fn try_origin(outer: O) -> Result<Self::Success, O> {
|
||||
outer.try_with_caller(|caller| caller.try_into()
|
||||
.and_then(|Origin::Xcm(location)|
|
||||
outer.try_with_caller(|caller| {
|
||||
caller.try_into().and_then(|Origin::Xcm(location)| {
|
||||
if F::filter(&location) {
|
||||
Ok(location)
|
||||
} else {
|
||||
Err(Origin::Xcm(location).into())
|
||||
}
|
||||
))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(feature = "runtime-benchmarks")]
|
||||
@@ -330,9 +342,7 @@ impl<O: OriginTrait + From<Origin>, F: Filter<MultiLocation>> EnsureOrigin<O> fo
|
||||
/// A simple passthrough where we reuse the `MultiLocation`-typed XCM origin as the inner value of
|
||||
/// this crate's `Origin::Xcm` value.
|
||||
pub struct XcmPassthrough<Origin>(PhantomData<Origin>);
|
||||
impl<
|
||||
Origin: From<crate::Origin>,
|
||||
> ConvertOrigin<Origin> for XcmPassthrough<Origin> {
|
||||
impl<Origin: From<crate::Origin>> ConvertOrigin<Origin> for XcmPassthrough<Origin> {
|
||||
fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result<Origin, MultiLocation> {
|
||||
match (kind, origin) {
|
||||
(OriginKind::Xcm, l) => Ok(crate::Origin::Xcm(l).into()),
|
||||
|
||||
Reference in New Issue
Block a user