pub enum Xcm<Call> {
WithdrawAsset {
assets: Vec<MultiAsset>,
effects: Vec<Order<Call>>,
},
ReserveAssetDeposit {
assets: Vec<MultiAsset>,
effects: Vec<Order<Call>>,
},
TeleportAsset {
assets: Vec<MultiAsset>,
effects: Vec<Order<Call>>,
},
QueryResponse {
query_id: u64,
response: Response,
},
TransferAsset {
assets: Vec<MultiAsset>,
dest: MultiLocation,
},
TransferReserveAsset {
assets: Vec<MultiAsset>,
dest: MultiLocation,
effects: Vec<Order<()>>,
},
Transact {
origin_type: OriginKind,
require_weight_at_most: u64,
call: DoubleEncoded<Call>,
},
HrmpNewChannelOpenRequest {
sender: u32,
max_message_size: u32,
max_capacity: u32,
},
HrmpChannelAccepted {
recipient: u32,
},
HrmpChannelClosing {
initiator: u32,
sender: u32,
recipient: u32,
},
RelayedFrom {
who: MultiLocation,
message: Box<Xcm<Call>>,
},
}
Expand description
Cross-Consensus Message: A message from one consensus system to another.
Consensus systems that may send and receive messages include blockchains and smart contracts.
All messages are delivered from a known origin, expressed as a MultiLocation
.
This is the inner XCM format and is version-sensitive. Messages are typically passed using the outer
XCM format, known as VersionedXcm
.
Variants§
WithdrawAsset
Withdraw asset(s) (assets
) from the ownership of origin
and place them into holding
. Execute the
orders (effects
).
assets
: The asset(s) to be withdrawn into holding.effects
: The order(s) to execute on the holding account.
Kind: Instruction.
Errors:
ReserveAssetDeposit
Asset(s) (assets
) have been received into the ownership of this system on the origin
system.
Some orders are given (effects
) which should be executed once the corresponding derivative assets have
been placed into holding
.
assets
: The asset(s) that are minted into holding.effects
: The order(s) to execute on the holding account.
Safety: origin
must be trusted to have received and be storing assets
such that they may later be
withdrawn should this system send a corresponding message.
Kind: Trusted Indication.
Errors:
TeleportAsset
Asset(s) (assets
) have been destroyed on the origin
system and equivalent assets should be
created on this system.
Some orders are given (effects
) which should be executed once the corresponding derivative assets have
been placed into holding
.
assets
: The asset(s) that are minted into holding.effects
: The order(s) to execute on the holding account.
Safety: origin
must be trusted to have irrevocably destroyed the assets
prior as a consequence of
sending this message.
Kind: Trusted Indication.
Errors:
QueryResponse
Indication of the contents of the holding account corresponding to the QueryHolding
order of query_id
.
query_id
: The identifier of the query that resulted in this message being sent.assets
: The message content.
Safety: No concerns.
Kind: Information.
Errors:
TransferAsset
Withdraw asset(s) (assets
) from the ownership of origin
and place equivalent assets under the
ownership of dest
within this consensus system.
assets
: The asset(s) to be withdrawn.dest
: The new owner for the assets.
Safety: No concerns.
Kind: Instruction.
Errors:
TransferReserveAsset
Withdraw asset(s) (assets
) from the ownership of origin
and place equivalent assets under the
ownership of dest
within this consensus system.
Send an onward XCM message to dest
of ReserveAssetDeposit
with the given effects
.
assets
: The asset(s) to be withdrawn.dest
: The new owner for the assets.effects
: The orders that should be contained in theReserveAssetDeposit
which is sent onwards todest
.
Safety: No concerns.
Kind: Instruction.
Errors:
Transact
Apply the encoded transaction call
, whose dispatch-origin should be origin
as expressed by the kind
of origin origin_type
.
origin_type
: The means of expressing the message origin as a dispatch origin.max_weight
: The weight ofcall
; this should be at least the chain’s calculated weight and will be used in the weight determination arithmetic.call
: The encoded transaction to be applied.
Safety: No concerns.
Kind: Instruction.
Errors:
HrmpNewChannelOpenRequest
A message to notify about a new incoming HRMP channel. This message is meant to be sent by the relay-chain to a para.
sender
: The sender in the to-be opened channel. Also, the initiator of the channel opening.max_message_size
: The maximum size of a message proposed by the sender.max_capacity
: The maximum number of messages that can be queued in the channel.
Safety: The message should originate directly from the relay-chain.
Kind: System Notification
HrmpChannelAccepted
A message to notify about that a previously sent open channel request has been accepted by the recipient. That means that the channel will be opened during the next relay-chain session change. This message is meant to be sent by the relay-chain to a para.
Safety: The message should originate directly from the relay-chain.
Kind: System Notification
Errors:
HrmpChannelClosing
A message to notify that the other party in an open channel decided to close it. In particular,
initiator
is going to close the channel opened from sender
to the recipient
. The close
will be enacted at the next relay-chain session change. This message is meant to be sent by
the relay-chain to a para.
Safety: The message should originate directly from the relay-chain.
Kind: System Notification
Errors:
RelayedFrom
A message to indicate that the embedded XCM is actually arriving on behalf of some consensus location within the origin.
Safety: who
must be an interior location of the context. This basically means that no Parent
junctions are allowed in it. This should be verified at the time of XCM execution.
Kind: Instruction
Errors:
Implementations§
Trait Implementations§
source§impl<Call> Decode for Xcm<Call>
impl<Call> Decode for Xcm<Call>
source§impl<Call> Encode for Xcm<Call>
impl<Call> Encode for Xcm<Call>
source§fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
source§fn size_hint(&self) -> usize
fn size_hint(&self) -> usize
source§fn using_encoded<R, F>(&self, f: F) -> Rwhere
F: FnOnce(&[u8]) -> R,
fn using_encoded<R, F>(&self, f: F) -> Rwhere
F: FnOnce(&[u8]) -> R,
source§fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
source§impl<Call> From<Xcm<Call>> for VersionedXcm<Call>
impl<Call> From<Xcm<Call>> for VersionedXcm<Call>
source§impl<Call> TryFrom<VersionedXcm<Call>> for Xcm<Call>
impl<Call> TryFrom<VersionedXcm<Call>> for Xcm<Call>
impl<Call> EncodeLike<Xcm<Call>> for Xcm<Call>
impl<Call> Eq for Xcm<Call>
Auto Trait Implementations§
impl<Call> RefUnwindSafe for Xcm<Call>where
Call: RefUnwindSafe,
impl<Call> Send for Xcm<Call>where
Call: Send,
impl<Call> Sync for Xcm<Call>where
Call: Sync,
impl<Call> Unpin for Xcm<Call>where
Call: Unpin,
impl<Call> UnwindSafe for Xcm<Call>where
Call: UnwindSafe,
Blanket Implementations§
source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
source§impl<T> DecodeLimit for Twhere
T: Decode,
impl<T> DecodeLimit for Twhere
T: Decode,
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
. Read moresource§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read moresource§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read moresource§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read moresource§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
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>
source§impl<T, Outer> IsWrappedBy<Outer> for Twhere
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
impl<T, Outer> IsWrappedBy<Outer> for Twhere
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§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,
self
and passes that borrow into the pipe function. Read moresource§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,
self
and passes that borrow into the pipe function. Read moresource§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,
source§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,
source§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,
self
, then passes self.as_ref()
into the pipe function.source§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,
source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T
. Read moresource§impl<T> Tap for T
impl<T> Tap for T
source§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,
Borrow<B>
of a value. Read moresource§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,
BorrowMut<B>
of a value. Read moresource§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,
AsRef<R>
view of a value. Read moresource§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,
AsMut<R>
view of a value. Read moresource§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,
Deref::Target
of a value. Read moresource§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,
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds. Read moresource§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,
.tap_borrow()
only in debug builds, and is erased in release
builds. Read moresource§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,
.tap_borrow_mut()
only in debug builds, and is erased in release
builds. Read moresource§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,
.tap_ref()
only in debug builds, and is erased in release
builds. Read moresource§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,
.tap_ref_mut()
only in debug builds, and is erased in release
builds. Read moresource§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from
.source§impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.