//! `Xcm` types, the `Xcm` type now simply wraps a `Vec` containing `Instruction`s. However, most
//! - During conversion from `Order` to `Instruction`, we do not handle `BuyExecution`s that have
//! nested XCMs, i.e. if the `instructions` field in the `BuyExecution` enum struct variant is not
//! empty, then the conversion will fail. To address this, rewrite the XCM using `Instruction`s in
//! - During conversion from `Xcm` to `Instruction`, we do not handle `RelayedFrom` messages at all.
/// local runtime framework. For Cumulus/Frame chains this is the `Parachain` or `Relay` origin
/// if coming from a chain, though there may be others if the `MultiLocation` XCM origin has a
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]
/// The unambiguous legislative body (for Polkadot, this could be considered the opinion of a
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug, TypeInfo, MaxEncodedLen)]
/// Consensus systems that may send and receive messages include blockchains and smart contracts.
/// This is the inner XCM format and is version-sensitive. Messages are typically passed using the
/// Withdraw asset(s) (`assets`) from the ownership of `origin` and place them into the Holding
/// Asset(s) (`assets`) have been received into the ownership of this system on the `origin`
/// Asset(s) (`assets`) have been destroyed on the `origin` system and equivalent assets should
/// Withdraw asset(s) (`assets`) from the ownership of `origin` and place equivalent assets
/// Withdraw asset(s) (`assets`) from the ownership of `origin` and place equivalent assets
/// Apply the encoded transaction `call`, whose dispatch-origin should be `origin` as expressed
/// A message to notify about a new incoming HRMP channel. This message is meant to be sent by
/// A message to notify about that a previously sent open channel request has been accepted by
/// This may be used by the XCM author to ensure that later instructions cannot command the
/// authority of the origin (e.g. if they are being relayed from an untrusted source, as often
/// Immediately report the contents of the Error Register to the given destination via XCM.
/// Remove the asset(s) (`assets`) from the Holding Register and place equivalent assets under
/// Remove the asset(s) (`assets`) from the Holding Register and place equivalent assets under
/// Remove the asset(s) (`give`) from the Holding Register and replace them with alternative
/// Remove the asset(s) (`assets`) from holding and send a `WithdrawAsset` XCM message to a
InitiateReserveWithdraw { assets: MultiAssetFilter, reserve: MultiLocation, xcm: Xcm<()> },
/// Remove the asset(s) (`assets`) from holding and send a `ReceiveTeleportedAsset` XCM message
/// Send a `Balances` XCM message with the `assets` value equal to the holding contents, or a
/// Set the Error Handler Register. This is code that should be called in the case of an error