Join our community of builders on

Telegram!Telegram
Previous Versionsv2.0.2Runtimes

XCM Executor

Outdated Version

You're viewing an older version (v2.0.2) The latest documentation is available for the current version. Click here to visit latest version.

Branch/Release: release-polkadot-v1.10.0

Purpose

XcmExecutor is responsible for executing XCM messages locally.

XcmExecutor is usually the assignment for pallet_xcm::Config::XcmExecutor and is thereby used to execute XCM in that pallet.

XcmExecutor is not a pallet, but rather it is a struct type parameterized by a Config trait. The inner config is the trait Config which parameterizes the outer config struct XcmExecutor<Config>. Both the inner and outer configs are configured in the runtime.

Inner Config

The inner trait Config used to parameterize XcmExecutor has the following associated types.

  • Handlers:
    • XcmSender -- How to send an onward XCM message. Type must implement the trait SendXcm.
    • AssetTransactor -- How to withdraw and deposit an asset. Type must implement the trait TransactAsset.
    • Trader -- The means of purchasing weight credit for XCM execution. Type must implement the trait WeightTrader.
    • ResponseHandler -- What to do when a response of a query is found. Type must implement the trait OnResponse.
    • AssetTrap -- The general asset trap handler for when assets are left in the Holding Register at the end of execution. Type must implement the trait DropAssets.
    • AssetLocker -- Handler for asset locking. Type must implement the trait AssetLock.
    • AssetExchanger -- Handler for exchanging assets. Type must implement the trait AssetExchange.
    • AssetClaims -- The handler for when there is an instruction to claim assets. Type must implement the trait ClaimAssets.
    • SubscriptionService -- The handler for version subscription requests. Type must implement the trait VersionChangeNotifier.
    • FeeManager -- Configure the fees. Type must implement the trait FeeManager.
    • MessageExporter -- The method of exporting a message. Type must implement the trait ExportXcm.
    • CallDispatcher -- The call dispatcher used by XCM. Type must implement the trait CallDispatcher<Self::RuntimeCall>.
    • HrmpNewChannelOpenRequestHandler -- Allows optional logic execution for the HrmpNewChannelOpenRequest XCM notification.
    • HrmpChannelAcceptedHandler -- Allows optional logic execution for the HrmpChannelAccepted XCM notification.
    • HrmpChannelClosingHandler -- Allows optional logic execution for the HrmpChannelClosing XCM notification.
  • Filters:
    • IsReserve -- Combinations of (Asset, Location) pairs which we trust as reserves. Type must implement the trait ContainsPair<MultiAsset, MultiLocation>.
    • IsTeleporter -- Combinations of (Asset, Location) pairs which we trust as teleporters. Type must implement the trait ContainsPair<MultiAsset, MultiLocation>.
    • Aliasers -- A list of (Origin, Target) pairs allowing a given Origin to be substituted with its corresponding Target pair. Type must implement the trait ContainsPair<MultiLocation, MultiLocation>.
    • Barrier -- Whether or not to execute the XCM at all. Type must implement ShouldExecute.
    • UniversalAliases -- The origin locations and specific universal junctions to which they are allowed to elevate themselves. Type must implement the trait Contains<(MultiLocation, Junction)>.
    • SafeCallFilter -- The safe call filter for Transact. Use this type to explicitly whitelist calls that cannot undergo recursion. Type must implement the trait Contains<Self::RuntimeCall>.
  • Converters:
    • OriginConverter -- How to get a call origin from a OriginKind value. Type must implement the trait ConvertOrigin<<Self::RuntimeCall as Dispatchable>::RuntimeOrigin>.
  • Accessors:
    • Weigher -- The means of determining an XCM message’s weight. Type must implement the trait WeightBounds<Self::RuntimeCall>.
    • PalletInstancesInfo -- Information on all pallets. Type must implement the trait PalletsInfoAccess.
  • Constants:
    • UniversalLocation -- This chain’s Universal Location. Type must implement the trait Get<InteriorMultiLocation>.
    • MaxAssetsIntoHolding -- The maximum number of assets we target to have in the Holding Register at any one time. Type must implement the trait Get<u32>.
  • Common configs:
    • RuntimeCall

Outer Config

The outer struct XcmExecutor<Config> configures the following fields:

  • holding -- Assets allowed in the holding register. Type must be Assets.
  • holding_limit -- The maximum number of assets in the holding register. Type must be usize.
  • context -- Type must be XcmContext.
  • trader -- Type must be Config::Trader which must implement the trait WeightTrader.
  • error -- The most recent error result and instruction index into the fragment in which it occurred, if any. Type must be Option<(u32, XcmError)>.
  • total_surplus -- Type must be Weight.
  • total_refunded -- Type must be Weight.
  • error_handler: Xcm<Config::RuntimeCall>,
  • error_handler_weight -- Type must be Weight.
  • appendix -- Type must be Xcm<Config::RuntimeCall>.
  • appendix_weight -- Type must be Weight.
  • transact_status -- Type must be MaybeErrorCode.
  • fees_mode -- Type must be FeesMode.