I'm working on UMP message development recently, but I'm confused about the order of execution of multiple ump messages within 1 block, For example the following transactions


This block has 3 ump messages. According to the ump (UpwardMessagesReceived) event, we can get 2 messages with para id = 2023 and 1 message with 2085.

The actual execution order is

2023(0x6c072fec7e1c937e6beb64d8287cdd9cb57db806db018e9c752951f65846ffdb) 2085(0x47621c0c081513b75fade4a748e92bf83d32ee79f5200877b08ac1e8d8781777) 2023(0x440a65f382df28a3394e6af5ad1dd9d506ebc67fa9a727e35aee4dd8c8d2c99f)

1 Answer 1


Messages over UMP, DMP, and later XCMP are asynchronous, so there is no guarantee that a message that was sent first will be executed first. However, messages within a channel are executed in the order they were sent.

So, in your example, the two messages from 2023 will be executed in the order they were sent relative to each other (0x6c, then 0x44), but there is no information there about whether 2023 or 2085 sent its message first.

  • Is it possible to request storage state to get ump messages in the queue?
    – hahaming
    Sep 27, 2022 at 6:27
  • You have "RelayDispatchQueues" storage element in the ump pallet in Polkadot relay chain to query the messages waiting to be handled by the relay-chain originating from a certain parachain: github.com/paritytech/polkadot/blob/master/runtime/parachains/…
    – Iker
    Sep 27, 2022 at 18:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.