Skip to content

XCM Status

MK edited this page Aug 23, 2022 · 1 revision

XCM Status

A simple xcm msg usually go through the following phases:

  1. xcm initiated by extrinsic [status:unknown]
  2. xcm sent by origination chain [status: sent]
  3. xcm relayed by relaychain [status: relayed]
  4. xcm received by destination chain [status: delivered]
  5. xcm executed at destination [status: success/failure] .

XCM Status - Unknown

The default status of a XCM. Sometimes the XCM status can't be determined because we are either missing the traces/events at Origination and Destination. The "unknown" case will get picked up by backfilling process and eventually turned into either sucess/failure

XCM Status - Delivered

The XCM is delivered and received by Destination Chain, pending for execution

XCM Status - Success

The XCM completed without any error or warning

XCM Execution Failure (incomplete/fail/error and etc)

The XCM encountered potential error during execution. A list of possible xcm execution failures at step 5 can be found on Polkadot's Official Doc here:

  • Overflow = 0: An arithmetic overflow happened.
  • Unimplemented = 1: The instruction is intentionally unsupported.
  • UntrustedReserveLocation = 2: Origin Register does not contain a value value for a reserve transfer notification.
  • UntrustedTeleportLocation = 3: Origin Register does not contain a value value for a teleport notification.
  • MultiLocationFull = 4: MultiLocation value too large to descend further.
  • MultiLocationNotInvertible = 5: MultiLocation value ascend more parents than known ancestors of local location.
  • BadOrigin = 6: The Origin Register does not contain a valid value for instruction.
  • InvalidLocation = 7: The location parameter is not a valid value for the instruction.
  • AssetNotFound = 8: The given asset is not handled.
  • FailedToTransactAsset = 9: An asset transaction (like withdraw or deposit) failed (typically due to type conversions).
  • NotWithdrawable = 10: An asset cannot be withdrawn, potentially due to lack of ownership, availability or rights.
  • LocationCannotHold = 11: An asset cannot be deposited under the ownership of a particular location.
  • ExceedsMaxMessageSize = 12: Attempt to send a message greater than the maximum supported by the transport protocol.
  • DestinationUnsupported = 13: The given message cannot be translated into a format supported by the destination.
  • Transport = 14: Destination is routable, but there is some issue with the transport mechanism.
  • Unroutable = 15: Destination is known to be unroutable.
  • UnknownClaim = 16: Used by ClaimAsset when the given claim could not be recognized/found.
  • FailedToDecode = 17: Used by Transact when the functor cannot be decoded.
  • TooMuchWeightRequired = 18: Used by Transact to indicate that the given weight limit could be breached by the functor.
  • NotHoldingFees = 19: Used by BuyExecution when the Holding Register does not contain payable fees.
  • TooExpensive = 20: Used by BuyExecution when the fees declared to purchase weight are insufficient.
  • Trap(u64) = 21: Used by the Trap instruction to force an error intentionally. Its code is included.
  • ExpectationFalse = 22: Used by ExpectAsset, ExpectError and ExpectOrigin when the expectation was not true.