Struct xcm_builder::CurrencyAdapter
source · pub struct CurrencyAdapter<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount>(_);
Expand description
Simple adapter to use a currency as asset transactor. This type can be used as type AssetTransactor
in xcm::Config
.
Example
use parity_scale_codec::Decode;
use frame_support::{parameter_types, PalletId};
use sp_runtime::traits::{AccountIdConversion, TrailingZeroInput};
use xcm::latest::prelude::*;
use xcm_builder::{ParentIsPreset, CurrencyAdapter, IsConcrete};
/// Our chain's account id.
type AccountId = sp_runtime::AccountId32;
/// Our relay chain's location.
parameter_types! {
pub RelayChain: MultiLocation = Parent.into();
pub CheckingAccount: AccountId = PalletId(*b"checking").into_account_truncating();
}
/// Some items that implement `ConvertLocation<AccountId>`. Can be more, but for now we just assume we accept
/// messages from the parent (relay chain).
pub type LocationConverter = (ParentIsPreset<AccountId>);
/// Just a dummy implementation of `Currency`. Normally this would be `Balances`.
pub type CurrencyImpl = ();
/// Final currency adapter. This can be used in `xcm::Config` to specify how asset related transactions happen.
pub type AssetTransactor = CurrencyAdapter<
// Use this `Currency` impl instance:
CurrencyImpl,
// The matcher: use the currency when the asset is a concrete asset in our relay chain.
IsConcrete<RelayChain>,
// The local converter: default account of the parent relay chain.
LocationConverter,
// Our chain's account ID type.
AccountId,
// The checking account. Can be any deterministic inaccessible account.
CheckingAccount,
>;
Trait Implementations§
source§impl<Currency: Currency<AccountId>, Matcher: MatchesFungible<Currency::Balance>, AccountIdConverter: ConvertLocation<AccountId>, AccountId: Clone, CheckedAccount: Get<Option<(AccountId, MintLocation)>>> TransactAsset for CurrencyAdapter<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount>
impl<Currency: Currency<AccountId>, Matcher: MatchesFungible<Currency::Balance>, AccountIdConverter: ConvertLocation<AccountId>, AccountId: Clone, CheckedAccount: Get<Option<(AccountId, MintLocation)>>> TransactAsset for CurrencyAdapter<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount>
source§fn can_check_in(
_origin: &MultiLocation,
what: &MultiAsset,
_context: &XcmContext
) -> Result
fn can_check_in( _origin: &MultiLocation, what: &MultiAsset, _context: &XcmContext ) -> Result
Ensure that
check_in
will do as expected. Read moresource§fn check_in(_origin: &MultiLocation, what: &MultiAsset, _context: &XcmContext)
fn check_in(_origin: &MultiLocation, what: &MultiAsset, _context: &XcmContext)
An asset has been teleported in from the given origin. This should do whatever housekeeping
is needed. Read more
source§fn can_check_out(
_dest: &MultiLocation,
what: &MultiAsset,
_context: &XcmContext
) -> Result
fn can_check_out( _dest: &MultiLocation, what: &MultiAsset, _context: &XcmContext ) -> Result
Ensure that
check_out
will do as expected. Read moresource§fn check_out(_dest: &MultiLocation, what: &MultiAsset, _context: &XcmContext)
fn check_out(_dest: &MultiLocation, what: &MultiAsset, _context: &XcmContext)
An asset has been teleported out to the given destination. This should do whatever
housekeeping is needed. Read more
source§fn deposit_asset(
what: &MultiAsset,
who: &MultiLocation,
_context: &XcmContext
) -> Result
fn deposit_asset( what: &MultiAsset, who: &MultiLocation, _context: &XcmContext ) -> Result
source§fn withdraw_asset(
what: &MultiAsset,
who: &MultiLocation,
_maybe_context: Option<&XcmContext>
) -> Result<Assets, XcmError>
fn withdraw_asset( what: &MultiAsset, who: &MultiLocation, _maybe_context: Option<&XcmContext> ) -> Result<Assets, XcmError>
Withdraw the given asset from the consensus system. Return the actual asset(s) withdrawn,
which should always be equal to
_what
. Read moresource§fn internal_transfer_asset(
asset: &MultiAsset,
from: &MultiLocation,
to: &MultiLocation,
_context: &XcmContext
) -> Result<Assets, XcmError>
fn internal_transfer_asset( asset: &MultiAsset, from: &MultiLocation, to: &MultiLocation, _context: &XcmContext ) -> Result<Assets, XcmError>
§fn transfer_asset(
asset: &MultiAsset,
from: &MultiLocation,
to: &MultiLocation,
context: &XcmContext
) -> Result<Assets, Error>
fn transfer_asset( asset: &MultiAsset, from: &MultiLocation, to: &MultiLocation, context: &XcmContext ) -> Result<Assets, Error>
Auto Trait Implementations§
impl<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount> RefUnwindSafe for CurrencyAdapter<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount>where AccountId: RefUnwindSafe, AccountIdConverter: RefUnwindSafe, CheckedAccount: RefUnwindSafe, Currency: RefUnwindSafe, Matcher: RefUnwindSafe,
impl<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount> Send for CurrencyAdapter<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount>where AccountId: Send, AccountIdConverter: Send, CheckedAccount: Send, Currency: Send, Matcher: Send,
impl<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount> Sync for CurrencyAdapter<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount>where AccountId: Sync, AccountIdConverter: Sync, CheckedAccount: Sync, Currency: Sync, Matcher: Sync,
impl<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount> Unpin for CurrencyAdapter<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount>where AccountId: Unpin, AccountIdConverter: Unpin, CheckedAccount: Unpin, Currency: Unpin, Matcher: Unpin,
impl<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount> UnwindSafe for CurrencyAdapter<Currency, Matcher, AccountIdConverter, AccountId, CheckedAccount>where AccountId: UnwindSafe, AccountIdConverter: UnwindSafe, CheckedAccount: UnwindSafe, Currency: UnwindSafe, Matcher: UnwindSafe,
Blanket Implementations§
§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
§fn checked_from<T>(t: T) -> Option<Self>where
Self: TryFrom<T>,
fn checked_from<T>(t: T) -> Option<Self>where Self: TryFrom<T>,
§fn checked_into<T>(self) -> Option<T>where
Self: TryInto<T>,
fn checked_into<T>(self) -> Option<T>where Self: TryInto<T>,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where Self: Binary,
Causes
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where Self: Display,
Causes
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where Self: LowerExp,
Causes
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where Self: LowerHex,
Causes
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where Self: Octal,
Causes
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where Self: Pointer,
Causes
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where Self: UpperExp,
Causes
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where Self: UpperHex,
Causes
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where &'a Self: for<'a> IntoIterator,
Formats each item in a sequence. Read more
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> IsType<T> for T
impl<T> IsType<T> for T
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere R: 'a,
Borrows
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere R: 'a,
Mutably borrows
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere Self: Borrow<B>, B: 'a + ?Sized, R: 'a,
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> Rwhere Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere Self: AsRef<U>, U: 'a + ?Sized, R: 'a,
Borrows
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere Self: AsMut<U>, U: 'a + ?Sized, R: 'a,
Mutably borrows
self
, then passes self.as_mut()
into the pipe
function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere Self: UniqueSaturatedFrom<T>,
§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere Self: UniqueSaturatedInto<T>,
Consume self to return an equivalent value of
T
. Read more§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
Immutable access to the
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
Mutable access to the
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
Immutable access to the
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
Mutable access to the
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere Self: Deref<Target = T>, T: ?Sized,
Immutable access to the
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere Self: DerefMut<Target = T> + Deref, T: ?Sized,
Mutable access to the
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
Calls
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
Calls
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
Calls
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
Calls
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§impl<T> TryConv for T
impl<T> TryConv for T
§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere T: UncheckedFrom<S>,
§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
The counterpart to
unchecked_from
.§impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for Swhere T: Bounded, S: TryInto<T>,
§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
Consume self to return an equivalent value of
T
.