Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Message Queue as DMP and XCMP dispatch queue #1246

Merged
merged 159 commits into from
Nov 2, 2023
Merged

Conversation

ggwpez
Copy link
Member

@ggwpez ggwpez commented Aug 29, 2023

(imported from paritytech/cumulus#2157)

Changes

This MR refactores the XCMP, Parachains System and DMP pallets to use the MessageQueue for delayed execution of incoming messages. The DMP pallet is entirely replaced by the MQ and thereby removed. This allows for PoV-bounded execution and resolves a number of issues that stem from the current work-around.

All System Parachains adopt this change.
The most important changes are in primitives/core/src/lib.rs, parachains/common/src/process_xcm_message.rs, pallets/parachain-system/src/lib.rs, pallets/xcmp-queue/src/lib.rs and the runtime configs.

DMP Queue Pallet

The pallet got removed and its logic refactored into parachain-system. Overweight message management can be done directly through the MQ pallet.

The undeployment of the pallet commences through the on_idle hook step-by step and moves all the remaining messages into the DmpSink.

impl cumulus_pallet_dmp_queue::Config for Runtime {
	type DmpSink = MessageQueue;
	...

The pallet can be removed after the lazy migration is done and event Completed is emitted.

XCMP Queue pallet

Removed all dispatch queue functionality. Incoming XCMP messages are now either: Immediately handled if they are Signals, enqueued into the MQ pallet otherwise.

New config items for the XCMP queue pallet:

/// The actual queue implementation that retains the messages for later processing.
type XcmpQueue: EnqueueMessage<ParaId>;

/// How a XCM over HRMP from a sibling parachain should be processed.
type XcmpProcessor: ProcessMessage<Origin = ParaId>;

/// The maximal number of suspended XCMP channels at the same time.
#[pallet::constant]
type MaxInboundSuspended: Get<u32>;

How to configure those:

// Use the MessageQueue pallet to store messages for later processing. The `TransformOrigin` is needed since
// the MQ pallet itself operators on `AggregateMessageOrigin` but we want to enqueue `ParaId`s.
type XcmpQueue = TransformOrigin<MessageQueue, AggregateMessageOrigin, ParaId, ParaIdToSibling>;

// Process XCMP messages from siblings. This is type-safe to only accept `ParaId`s. They will be dispatched
// with origin `Junction::Sibling(…)`.
type XcmpProcessor = ProcessFromSibling<
	ProcessXcmMessage<
		AggregateMessageOrigin,
		xcm_executor::XcmExecutor<xcm_config::XcmConfig>,
		RuntimeCall,
	>,
>;

// Not really important what to choose here. Just something larger than the maximal number of channels.
type MaxInboundSuspended = sp_core::ConstU32<1_000>;

The InboundXcmpStatus storage item was replaced by InboundXcmpSuspended since it now only tracks inbound queue suspension and no message indices anymore.

Now only sends the most recent channel Signals, as all prio ones are out-dated anyway.

Parachain System pallet

For DMP messages instead of forwarding them to the DMP pallet, it now pushes them to the configured DmpQueue. The message processing which was triggered in set_validation_data is now being done by the MQ pallet on_initialize.

XCMP messages are still handed off to the XcmpMessageHandler (XCMP-Queue pallet) - no change here.

New config items for the parachain system pallet:

/// Queues inbound downward messages for delayed processing. 
///
/// Analogous to the `XcmpQueue` of the XCMP queue pallet.
type DmpQueue: EnqueueMessage<AggregateMessageOrigin>;

How to configure:

/// Use the MQ pallet to store DMP messages for delayed processing.
type DmpQueue = MessageQueue;

Message Flow

The flow of messages on the parachain side. Messages come in from the left via the Validation Data and finally end up at the Xcm Executor on the right.

Untitled (1)

Further changes

  • Bumped the default suspension, drop and resume thresholds in QueueConfigData::default().
  • XcmpQueue::{suspend_xcm_execution, resume_xcm_execution} errors when they would be a noop.
  • Properly validate the QueueConfigData before setting it.
  • Marked weight files as auto-generated so they wont auto-expand in the MR files view.
  • Move the hypothetical asserts to frame_support under the name experimental_hypothetically

Questions:

  • What about the ugly #[cfg(feature = \"runtime-benchmarks\")] in the runtimes? Not sure how to best fix. Just having them like this makes tests fail that rely on the real message processor when the feature is enabled.
  • Need a good weight for MessageQueueServiceWeight. The scheduler already takes 80% so I put it to 10% but that is quite low.

TODO:

Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Signed-off-by: Oliver Tale-Yazdi <[email protected]>
@xlc
Copy link
Contributor

xlc commented Jan 29, 2024

There is no UndeployDmpQueue. So I guess the PR description is outdated? @ggwpez

@ggwpez
Copy link
Member Author

ggwpez commented Jan 30, 2024

There is no UndeployDmpQueue. So I guess the PR description is outdated?

Yes updated it. The migrations are now running automatic in on_idle and it can be removed afterwards.

claravanstaden pushed a commit to Snowfork/runtimes that referenced this pull request Feb 5, 2024
bgallois pushed a commit to duniter/duniter-polkadot-sdk that referenced this pull request Mar 25, 2024
(imported from paritytech/cumulus#2157)

## Changes

This MR refactores the XCMP, Parachains System and DMP pallets to use
the [MessageQueue](paritytech/substrate#12485)
for delayed execution of incoming messages. The DMP pallet is entirely
replaced by the MQ and thereby removed. This allows for PoV-bounded
execution and resolves a number of issues that stem from the current
work-around.

All System Parachains adopt this change.  
The most important changes are in `primitives/core/src/lib.rs`,
`parachains/common/src/process_xcm_message.rs`,
`pallets/parachain-system/src/lib.rs`, `pallets/xcmp-queue/src/lib.rs`
and the runtime configs.

### DMP Queue Pallet

The pallet got removed and its logic refactored into parachain-system.
Overweight message management can be done directly through the MQ
pallet.

Final undeployment migrations are provided by
`cumulus_pallet_dmp_queue::UndeployDmpQueue` and `DeleteDmpQueue` that
can be configured with an aux config trait like:

```rust
parameter_types! {
	pub const DmpQueuePalletName: &'static str = \"DmpQueue\" < CHANGE ME;
	pub const RelayOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent;
}

impl cumulus_pallet_dmp_queue::MigrationConfig for Runtime {
	type PalletName = DmpQueuePalletName;
	type DmpHandler = frame_support::traits::EnqueueWithOrigin<MessageQueue, RelayOrigin>;
	type DbWeight = <Runtime as frame_system::Config>::DbWeight;
}

// And adding them to your Migrations tuple:
pub type Migrations = (
	...
	cumulus_pallet_dmp_queue::UndeployDmpQueue<Runtime>,
	cumulus_pallet_dmp_queue::DeleteDmpQueue<Runtime>,
);
```

### XCMP Queue pallet

Removed all dispatch queue functionality. Incoming XCMP messages are now
either: Immediately handled if they are Signals, enqueued into the MQ
pallet otherwise.

New config items for the XCMP queue pallet:
```rust
/// The actual queue implementation that retains the messages for later processing.
type XcmpQueue: EnqueueMessage<ParaId>;

/// How a XCM over HRMP from a sibling parachain should be processed.
type XcmpProcessor: ProcessMessage<Origin = ParaId>;

/// The maximal number of suspended XCMP channels at the same time.
#[pallet::constant]
type MaxInboundSuspended: Get<u32>;
```

How to configure those:

```rust
// Use the MessageQueue pallet to store messages for later processing. The `TransformOrigin` is needed since
// the MQ pallet itself operators on `AggregateMessageOrigin` but we want to enqueue `ParaId`s.
type XcmpQueue = TransformOrigin<MessageQueue, AggregateMessageOrigin, ParaId, ParaIdToSibling>;

// Process XCMP messages from siblings. This is type-safe to only accept `ParaId`s. They will be dispatched
// with origin `Junction::Sibling(…)`.
type XcmpProcessor = ProcessFromSibling<
	ProcessXcmMessage<
		AggregateMessageOrigin,
		xcm_executor::XcmExecutor<xcm_config::XcmConfig>,
		RuntimeCall,
	>,
>;

// Not really important what to choose here. Just something larger than the maximal number of channels.
type MaxInboundSuspended = sp_core::ConstU32<1_000>;
```

The `InboundXcmpStatus` storage item was replaced by
`InboundXcmpSuspended` since it now only tracks inbound queue suspension
and no message indices anymore.

Now only sends the most recent channel `Signals`, as all prio ones are
out-dated anyway.

### Parachain System pallet

For `DMP` messages instead of forwarding them to the `DMP` pallet, it
now pushes them to the configured `DmpQueue`. The message processing
which was triggered in `set_validation_data` is now being done by the MQ
pallet `on_initialize`.

XCMP messages are still handed off to the `XcmpMessageHandler`
(XCMP-Queue pallet) - no change here.

New config items for the parachain system pallet:
```rust
/// Queues inbound downward messages for delayed processing. 
///
/// Analogous to the `XcmpQueue` of the XCMP queue pallet.
type DmpQueue: EnqueueMessage<AggregateMessageOrigin>;
``` 

How to configure:
```rust
/// Use the MQ pallet to store DMP messages for delayed processing.
type DmpQueue = MessageQueue;
``` 

## Message Flow

The flow of messages on the parachain side. Messages come in from the
left via the `Validation Data` and finally end up at the `Xcm Executor`
on the right.

![Untitled
(1)](https://github.com/paritytech/cumulus/assets/10380170/6cf8b377-88c9-4aed-96df-baace266e04d)

## Further changes

- Bumped the default suspension, drop and resume thresholds in
`QueueConfigData::default()`.
- `XcmpQueue::{suspend_xcm_execution, resume_xcm_execution}` errors when
they would be a noop.
- Properly validate the `QueueConfigData` before setting it.
- Marked weight files as auto-generated so they wont auto-expand in the
MR files view.
- Move the `hypothetical` asserts to `frame_support` under the name
`experimental_hypothetically`

Questions:
- [ ] What about the ugly `#[cfg(feature = \"runtime-benchmarks\")]` in
the runtimes? Not sure how to best fix. Just having them like this makes
tests fail that rely on the real message processor when the feature is
enabled.
- [ ] Need a good weight for `MessageQueueServiceWeight`. The scheduler
already takes 80% so I put it to 10% but that is quite low.

TODO:
- [x] Remove c&p code after
paritytech/polkadot#6271
- [x] Use `HandleMessage` once it is public in Substrate
- [x] fix `runtime-benchmarks` feature
paritytech/polkadot#6966
- [x] Benchmarks
- [x] Tests
- [ ] Migrate `InboundXcmpStatus` to `InboundXcmpSuspended`
- [x] Possibly cleanup Migrations (DMP+XCMP)
- [x] optional: create `TransformProcessMessageOrigin` in Substrate and
replace `ProcessFromSibling`
- [ ] Rerun weights on ref HW

---------

Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Co-authored-by: Liam Aharon <[email protected]>
Co-authored-by: joe petrowski <[email protected]>
Co-authored-by: Kian Paimani <[email protected]>
Co-authored-by: command-bot <>
github-merge-queue bot pushed a commit that referenced this pull request May 16, 2024
`cumulus-pallet-dmp-queue` is not needed anymore since
#1246.

The only logic that remains in the pallet is a lazy migration in the
[`on_idle`](https://github.com/paritytech/polkadot-sdk/blob/8d62c13b2541920c37fb9d9ca733fcce91e96573/cumulus/pallets/dmp-queue/src/lib.rs#L158)
hook.

---------

Signed-off-by: Oliver Tale-Yazdi <[email protected]>
hitchhooker pushed a commit to ibp-network/polkadot-sdk that referenced this pull request Jun 5, 2024
`cumulus-pallet-dmp-queue` is not needed anymore since
paritytech#1246.

The only logic that remains in the pallet is a lazy migration in the
[`on_idle`](https://github.com/paritytech/polkadot-sdk/blob/8d62c13b2541920c37fb9d9ca733fcce91e96573/cumulus/pallets/dmp-queue/src/lib.rs#L158)
hook.

---------

Signed-off-by: Oliver Tale-Yazdi <[email protected]>
AurevoirXavier added a commit to darwinia-network/darwinia that referenced this pull request Jun 25, 2024
AurevoirXavier added a commit to darwinia-network/darwinia that referenced this pull request Jun 28, 2024
* Setup deps

* Remove Koi from account migration test

* paritytech/polkadot-sdk#1495

* Bump

* paritytech/polkadot-sdk#1524

* !! paritytech/polkadot-sdk#1363

* paritytech/polkadot-sdk#1492

* paritytech/polkadot-sdk#1911

* paritytech/polkadot-sdk#1900

Signed-off-by: Xavier Lau <[email protected]>

* paritytech/polkadot-sdk#1661

* paritytech/polkadot-sdk#2144

* paritytech/polkadot-sdk#2048

* paritytech/polkadot-sdk#1672

* paritytech/polkadot-sdk#2303

* paritytech/polkadot-sdk#1256

* Remove identity and vesting

* Fixes

* paritytech/polkadot-sdk#2657

* paritytech/polkadot-sdk#1313

* paritytech/polkadot-sdk#2331

* paritytech/polkadot-sdk#2409 part.1

* paritytech/polkadot-sdk#2767

* paritytech/polkadot-sdk#2521

Signed-off-by: Xavier Lau <[email protected]>

* paritytech/polkadot-sdk#1222

* paritytech/polkadot-sdk#1234 part.1

* Satisfy compiler

* XCM V4 part.1

* paritytech/polkadot-sdk#1246

* Remove pallet-democracy part.1

* paritytech/polkadot-sdk#2142

* paritytech/polkadot-sdk#2428

* paritytech/polkadot-sdk#3228

* XCM V4 part.2

* Bump

* Build all runtimes

* Build node

* Remove pallet-democracy

Signed-off-by: Xavier Lau <[email protected]>

* Format

* Fix pallet tests

* Fix precompile tests

* Format

* Fixes

* Async, remove council, common pallet config

* Fix `ethtx-forward` test case (#1519)

* Fix ethtx-forward tests

* Format

* Fix following the review

* Fixes

* Fixes

* Use default impl

* Benchmark helper

* Bench part.1

* Bench part.2

* Bench part.3

* Fix all tests

* Typo

* Feat

* Fix EVM tracing build

* Reuse upstream `proof_size_base_cost()` (#1521)

* Format issue

* Fixes

* Fix CI

---------

Signed-off-by: Xavier Lau <[email protected]>
Co-authored-by: Bear Wang <[email protected]>
ntn-x2 pushed a commit to KILTprotocol/kilt-node that referenced this pull request Jul 26, 2024
## fixes
[KILTprotocol/ticket#3439](KILTprotocol/ticket#3439)


### notable Changes

- rust version 1.7.4 (Toolchain and gitlab runner are updated) 
- the preimage_pallet is no longer using deposits, instead it uses
[consideration](paritytech/polkadot-sdk#1361),
which is an abstration over the balance. The exact footprint of an
storage entry is used to calculate the cost storing entries. Might be
interesting for our current deposit model.
- The pallet-xcm introduced a new benchmarking logic 

### Pallets

- Removed cumulus_pallet_dmp_queue (Replaced by pallet_message_queue).
There is a lazy migration provided, which is running automatically. Once
the the [Complete
event](paritytech/polkadot-sdk#1246) is emitted,
we can delete the pallet.
- Treasur introduced a new [spending
support](paritytech/polkadot-sdk#1333), which is
currently disabled. Might be interesting at some point, if other
currencies are available.
- `transfer` extrinsic in `pallet_balances` is removed. Will be a
breaking change for Sporran. For other new introduced extrinsics, please
have a lookin the diffs below.
- Tips: A max tip amount has to be specified, which is currently set to
1_000_000 KILT


### Emulated Tests

I am quite unhappy with the current state of the emulated tests. I would
like to refactor those tests as described in this
[issue](KILTprotocol/ticket#3241 (comment)).
For this PR, I only fixed problems arised by updating the dependencies.

Since the polkadot-runtime is no longer part of the Polkadot-SDK, the
relay chain for Spiritnet has been changed to Rococo. The purpose of
these tests is to ensure that the expectations of the xcm-configuration
match the implementation. The specific relay chain used should not
matter.

### XCM 

- XCM version 4 is out which is also the LTS for XCM. 
- In version 4 a new instruction `Transfer` is introduced, which needed
to be denied by the Barrier
- renaming of paramters: The `Multi` is removed: MultiLocation ->
Location, MultiAsset -> Asset, ...


### Try-runtime

In version 1.7.0 additional try-runtime tests are introduced, where it
is tried to decode the whole storage of the chain. This error should
only occur for chains which are still running on an ancient SDK version
and will be fixed automatically in the next runtime upgrade.

### Weights

Since a lot of new extrinsics are introduced, I updated all weights.

### Todos

- [x] execute Benchmarking 

## Metadata Diff to Develop Branch

<details>
<summary>Peregrine Diff</summary>

```
!!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!!
[≠] pallet 0: System -> 8 change(s)
  - calls changes:
    [+] CallDesc { index: 9, name: "authorize_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } }
    [+] CallDesc { index: 10, name: "authorize_upgrade_without_checks", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } }
    [+] CallDesc { index: 11, name: "apply_authorized_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code", ty: "Vec<u8>" }] } }

  - events changes:
    [+] EventDesc { index: 6, name: "UpgradeAuthorized", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }, ArgDesc { name: "check_version", ty: "bool" }] } }

  - errors changes:
    [+] ErrorDesc { index: 6, name: "NothingAuthorized" }
    [+] ErrorDesc { index: 7, name: "Unauthorized" }

  - constants changes:
    [≠] Version: [ 48, 109, 97, 115, 104, 110, 101, 116, 45, 110, 111, 100, 101, 48, 109, 97, 115, 104, 110, 101, 116, 45, 110, 111, 100, 101, 4, 0, 0, 0, 136, 44, ... ]
        [Value([Changed(38, U8Change(60, 68)), Changed(159, U8Change(234, 215)), Changed(160, U8Change(147, 189)), Changed(161, U8Change(227, 216)), Changed(162, U8Change(241, 162)), Changed(163, U8Change(111, 114)), Changed(164, U8Change(61, 202)), Changed(165, U8Change(105, 13)), Changed(166, U8Change(98, 101)), Changed(167, U8Change(2, 1)), Changed(171, U8Change(38, 234)), Changed(172, U8Change(96, 147)), Changed(173, U8Change(149, 227)), Changed(174, U8Change(85, 241)), Changed(175, U8Change(192, 111)), Changed(176, U8Change(101, 61)), Changed(177, U8Change(102, 105)), Changed(178, U8Change(3, 98)), Changed(183, U8Change(164, 38)), Changed(184, U8Change(123, 96)), Changed(185, U8Change(125, 149)), Changed(186, U8Change(84, 85)), Changed(187, U8Change(73, 192)), Changed(188, U8Change(148, 101)), Changed(189, U8Change(201, 102)), Changed(190, U8Change(155, 3)), Changed(191, U8Change(1, 2)), Changed(195, U8Change(69, 164)), Changed(196, U8Change(191, 123)), Changed(197, U8Change(186, 125)), Changed(198, U8Change(81, 84)), Changed(199, U8Change(163, 73)), Changed(200, U8Change(16, 148)), Changed(201, U8Change(178, 201)), Changed(202, U8Change(35, 155)), Changed(207, U8Change(195, 69)), Changed(208, U8Change(179, 191)), Changed(209, U8Change(232, 186)), Changed(210, U8Change(211, 81)), Changed(211, U8Change(50, 163)), Changed(212, U8Change(115, 16)), Changed(213, U8Change(153, 178)), Changed(214, U8Change(13, 35)), Changed(219, U8Change(8, 195)), Changed(220, U8Change(0, 179)), Changed(221, U8Change(0, 232)), Changed(222, U8Change(0, 211)), Changed(223, U8Change(0, 50)), Added(224, 115), Added(225, 153), Added(226, 13), Added(227, 1), Added(228, 0), Added(229, 0), Added(230, 0), Added(231, 251), Added(232, 197), Added(233, 119), Added(234, 185), Added(235, 215), Added(236, 71), Added(237, 239), Added(238, 214), Added(239, 1), Added(240, 0), Added(241, 0), Added(242, 0), Added(243, 8), Added(244, 0), Added(245, 0), Added(246, 0), Added(247, 0)])]

  - storages changes:
    [+] StorageDesc { name: "AuthorizedUpgrade", modifier: "Optional", default_value: [0] }

[≠] pallet 6: Balances -> 7 change(s)
  - calls changes:
    [+] CallDesc { index: 9, name: "force_adjust_total_issuance", signature: SignatureDesc { args: [ArgDesc { name: "direction", ty: "AdjustmentDirection" }, ArgDesc { name: "delta", ty: "T::Balance" }] } }
    [-] "set_balance_deprecated"
    [-] "transfer"

  - events changes:
    [+] EventDesc { index: 21, name: "TotalIssuanceForced", signature: SignatureDesc { args: [ArgDesc { name: "old", ty: "T::Balance" }, ArgDesc { name: "new", ty: "T::Balance" }] } }

  - errors changes:
    [+] ErrorDesc { index: 10, name: "IssuanceDeactivated" }
    [+] ErrorDesc { index: 11, name: "DeltaZero" }

  - constants changes:
    [-] "MaxHolds"

[≠] pallet 8: Sudo -> 4 change(s)
  - calls changes:
    [+] CallDesc { index: 4, name: "remove_key", signature: SignatureDesc { args: [] } }

  - events changes:
    [≠]  1: KeyChanged ( old_sudoer: Option<T::AccountId>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Name(StringChange("old_sudoer", "old"))]), Added(1, ArgDesc { name: "new", ty: "T::AccountId" })] })]
    [≠]  2: SudoAsDone ( sudo_result: DispatchResult, )  )
        [Name(StringChange("SudoAsDone", "KeyRemoved")), Signature(SignatureChange { args: [Removed(0, ArgDesc { name: "sudo_result", ty: "DispatchResult" })] })]
    [+] EventDesc { index: 3, name: "SudoAsDone", signature: SignatureDesc { args: [ArgDesc { name: "sudo_result", ty: "DispatchResult" }] } }

[≠] pallet 24: AuraExt -> 1 change(s)
  - storages changes:
    [+] StorageDesc { name: "SlotInfo", modifier: "Optional", default_value: [0] }

[≠] pallet 30: Democracy -> 9 change(s)
  - calls changes:
    [≠]  7: fast_track ( proposal_hash: H256, voting_period: BlockNumberFor<T>, delay: BlockNumberFor<T>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠]  8: veto_external ( proposal_hash: H256, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 16: blacklist ( proposal_hash: H256, maybe_ref_index: Option<ReferendumIndex>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 18: set_metadata ( owner: MetadataOwner, maybe_hash: Option<PreimageHash>, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("Option<PreimageHash>", "Option<T::Hash>"))])] })]

  - events changes:
    [≠]  9: Vetoed ( who: T::AccountId, proposal_hash: H256, until: BlockNumberFor<T>, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 10: Blacklisted ( proposal_hash: H256, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 14: MetadataSet ( owner: MetadataOwner, hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]
    [≠] 15: MetadataCleared ( owner: MetadataOwner, hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]
    [≠] 16: MetadataTransferred ( prev_owner: MetadataOwner, owner: MetadataOwner, hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(2, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]

[≠] pallet 31: Council -> 1 change(s)
  - errors changes:
    [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" }

[≠] pallet 32: TechnicalCommittee -> 1 change(s)
  - errors changes:
    [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" }

[≠] pallet 35: Treasury -> 20 change(s)
  - calls changes:
    [≠]  3: spend ( amount: BalanceOf<T, I>, beneficiary: AccountIdLookupOf<T>, )  )
        [Name(StringChange("spend", "spend_local"))]
    [+] CallDesc { index: 5, name: "spend", signature: SignatureDesc { args: [ArgDesc { name: "asset_kind", ty: "Box<T::AssetKind>" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "Box<BeneficiaryLookupOf<T, I>>" }, ArgDesc { name: "valid_from", ty: "Option<BlockNumberFor<T>>" }] } }
    [+] CallDesc { index: 6, name: "payout", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }
    [+] CallDesc { index: 7, name: "check_status", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }
    [+] CallDesc { index: 8, name: "void_spend", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }

  - events changes:
    [+] EventDesc { index: 9, name: "AssetSpendApproved", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "asset_kind", ty: "T::AssetKind" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "T::Beneficiary" }, ArgDesc { name: "valid_from", ty: "BlockNumberFor<T>" }, ArgDesc { name: "expire_at", ty: "BlockNumberFor<T>" }] } }
    [+] EventDesc { index: 10, name: "AssetSpendVoided", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }
    [+] EventDesc { index: 11, name: "Paid", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } }
    [+] EventDesc { index: 12, name: "PaymentFailed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } }
    [+] EventDesc { index: 13, name: "SpendProcessed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }

  - errors changes:
    [+] ErrorDesc { index: 5, name: "FailedToConvertBalance" }
    [+] ErrorDesc { index: 6, name: "SpendExpired" }
    [+] ErrorDesc { index: 7, name: "EarlyPayout" }
    [+] ErrorDesc { index: 8, name: "AlreadyAttempted" }
    [+] ErrorDesc { index: 9, name: "PayoutError" }
    [+] ErrorDesc { index: 10, name: "NotAttempted" }
    [+] ErrorDesc { index: 11, name: "Inconclusive" }

  - constants changes:
    [+] ConstantDesc { name: "PayoutPeriod", value: [192, 75, 3, 0, 0, 0, 0, 0] }

  - storages changes:
    [+] StorageDesc { name: "SpendCount", modifier: "Default", default_value: [0, 0, 0, 0] }
    [+] StorageDesc { name: "Spends", modifier: "Optional", default_value: [0] }

[≠] pallet 41: Vesting -> 1 change(s)
  - calls changes:
    [+] CallDesc { index: 5, name: "force_remove_vesting_schedule", signature: SignatureDesc { args: [ArgDesc { name: "target", ty: "<T::Lookup as StaticLookup>::Source" }, ArgDesc { name: "schedule_index", ty: "u32" }] } }

[≠] pallet 44: Preimage -> 4 change(s)
  - calls changes:
    [+] CallDesc { index: 4, name: "ensure_updated", signature: SignatureDesc { args: [ArgDesc { name: "hashes", ty: "Vec<T::Hash>" }] } }

  - errors changes:
    [+] ErrorDesc { index: 6, name: "TooMany" }
    [+] ErrorDesc { index: 7, name: "TooFew" }

  - storages changes:
    [+] StorageDesc { name: "RequestStatusFor", modifier: "Optional", default_value: [0] }

[≠] pallet 46: Tips -> 5 change(s)
  - errors changes:
    [≠]  3: NotFinder       
        [Name(StringChange("NotFinder", "MaxTipAmountExceeded"))]
    [≠]  4: StillOpen       
        [Name(StringChange("StillOpen", "NotFinder"))]
    [≠]  5: Premature       
        [Name(StringChange("Premature", "StillOpen"))]
    [+] ErrorDesc { index: 6, name: "Premature" }

  - constants changes:
    [+] ConstantDesc { name: "MaxTipAmount", value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }

[≠] pallet 80: ParachainSystem -> 9 change(s)
  - events changes:
    [≠]  3: UpgradeAuthorized ( code_hash: T::Hash, )  )
        [Name(StringChange("UpgradeAuthorized", "DownwardMessagesReceived")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("code_hash", "count")), Ty(StringChange("T::Hash", "u32"))])] })]
    [≠]  4: DownwardMessagesReceived ( count: u32, )  )
        [Name(StringChange("DownwardMessagesReceived", "DownwardMessagesProcessed")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("count", "weight_used")), Ty(StringChange("u32", "Weight"))]), Added(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })]
    [≠]  5: DownwardMessagesProcessed ( weight_used: Weight, dmq_head: relay_chain::Hash, )  )
        [Name(StringChange("DownwardMessagesProcessed", "UpwardMessageSent")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("weight_used", "message_hash")), Ty(StringChange("Weight", "Option<XcmHash>"))]), Removed(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })]
    [-] "UpwardMessageSent"

  - storages changes:
    [+] StorageDesc { name: "AggregatedUnincludedSegment", modifier: "Optional", default_value: [0] }
    [+] StorageDesc { name: "UnincludedSegment", modifier: "Default", default_value: [0] }
    [+] StorageDesc { name: "UpgradeGoAhead", modifier: "Default", default_value: [0] }
    [+] StorageDesc { name: "UpwardDeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] }
    [-] "AuthorizedUpgrade"

[≠] pallet 82: XcmpQueue -> 25 change(s)
  - calls changes:
    [-] "service_overweight"
    [-] "update_threshold_weight"
    [-] "update_weight_restrict_decay"
    [-] "update_xcmp_max_individual_weight"

  - events changes:
    [≠]  0: Success ( message_hash: XcmHash, message_id: XcmHash, weight: Weight, )  )
        [Name(StringChange("Success", "XcmpMessageSent")), Signature(SignatureChange { args: [Removed(1, ArgDesc { name: "message_id", ty: "XcmHash" }), Removed(2, ArgDesc { name: "weight", ty: "Weight" })] })]
    [-] "Fail"
    [-] "BadVersion"
    [-] "BadFormat"
    [-] "XcmpMessageSent"
    [-] "OverweightEnqueued"
    [-] "OverweightServiced"

  - errors changes:
    [≠]  0: FailedToSend    
        [Name(StringChange("FailedToSend", "BadQueueConfig"))]
    [≠]  1: BadXcmOrigin    
        [Name(StringChange("BadXcmOrigin", "AlreadySuspended"))]
    [≠]  2: BadXcm          
        [Name(StringChange("BadXcm", "AlreadyResumed"))]
    [-] "BadOverweightIndex"
    [-] "WeightOverLimit"

  - constants changes:
    [+] ConstantDesc { name: "MaxInboundSuspended", value: [0, 0, 0, 0] }

  - storages changes:
    [+] StorageDesc { name: "DeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] }
    [+] StorageDesc { name: "InboundXcmpSuspended", modifier: "Default", default_value: [0] }
    [≠] Default  QueueConfig: [2, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 130, 26, 6, 0, 0, 8, 0, 7, 0, 200, 23, 168, 4, 2, 0, 4, 0]
        [DefaultValue([Changed(0, U8Change(2, 32)), Changed(4, U8Change(5, 48)), Changed(8, U8Change(1, 8)), Removed(12, 130), Removed(13, 26), Removed(14, 6), Removed(15, 0), Removed(16, 0), Removed(17, 8), Removed(18, 0), Removed(19, 7), Removed(20, 0), Removed(21, 200), Removed(22, 23), Removed(23, 168), Removed(24, 4), Removed(25, 2), Removed(26, 0), Removed(27, 4), Removed(28, 0)])]
    [-] "CounterForOverweight"
    [-] "InboundXcmpMessages"
    [-] "InboundXcmpStatus"
    [-] "Overweight"
    [-] "OverweightCount"

[≠] pallet 83: PolkadotXcm -> 35 change(s)
  - calls changes:
    [≠]  0: send ( dest: Box<VersionedMultiLocation>, message: Box<VersionedXcm<()>>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })]
    [≠]  1: teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [≠]  2: reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [≠]  3: execute ( message: Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>, max_weight: Weight, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>", "Box<VersionedXcm<<T as Config>::RuntimeCall>>"))])] })]
    [≠]  4: force_xcm_version ( location: Box<MultiLocation>, version: XcmVersion, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<MultiLocation>", "Box<Location>"))])] })]
    [≠]  6: force_subscribe_version_notify ( location: Box<VersionedMultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })]
    [≠]  7: force_unsubscribe_version_notify ( location: Box<VersionedMultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })]
    [≠]  8: limited_reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [≠]  9: limited_teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [+] CallDesc { index: 11, name: "transfer_assets", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "fee_asset_item", ty: "u32" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } }
    [+] CallDesc { index: 12, name: "claim_assets", signature: SignatureDesc { args: [ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }] } }
    [+] CallDesc { index: 13, name: "transfer_assets_using_type_and_then", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "assets_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "remote_fees_id", ty: "Box<VersionedAssetId>" }, ArgDesc { name: "fees_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "custom_xcm_on_dest", ty: "Box<VersionedXcm<()>>" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } }

  - events changes:
    [≠]  1: Sent ( origin: MultiLocation, destination: MultiLocation, message: Xcm<()>, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠]  2: UnexpectedResponse ( origin: MultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠]  8: InvalidResponder ( origin: MultiLocation, query_id: QueryId, expected_location: Option<MultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })]
    [≠]  9: InvalidResponderVersion ( origin: MultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 11: AssetsTrapped ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })]
    [≠] 12: VersionChangeNotified ( destination: MultiLocation, result: XcmVersion, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 13: SupportedVersionChanged ( location: MultiLocation, version: XcmVersion, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 14: NotifyTargetSendFail ( location: MultiLocation, query_id: QueryId, error: XcmError, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 15: NotifyTargetMigrationFail ( location: VersionedMultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("VersionedMultiLocation", "VersionedLocation"))])] })]
    [≠] 16: InvalidQuerierVersion ( origin: MultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 17: InvalidQuerier ( origin: MultiLocation, query_id: QueryId, expected_querier: MultiLocation, maybe_actual_querier: Option<MultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiLocation", "Location"))]), Changed(3, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })]
    [≠] 18: VersionNotifyStarted ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 19: VersionNotifyRequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 20: VersionNotifyUnrequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 21: FeesPaid ( paying: MultiLocation, fees: MultiAssets, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 22: AssetsClaimed ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })]
    [+] EventDesc { index: 23, name: "VersionMigrationFinished", signature: SignatureDesc { args: [ArgDesc { name: "version", ty: "XcmVersion" }] } }

  - errors changes:
    [≠] 13: InvalidAsset    
        [Name(StringChange("InvalidAsset", "CannotCheckOutTeleport"))]
    [+] ErrorDesc { index: 20, name: "InvalidAssetNotConcrete" }
    [+] ErrorDesc { index: 21, name: "InvalidAssetUnknownReserve" }
    [+] ErrorDesc { index: 22, name: "InvalidAssetUnsupportedReserve" }
    [+] ErrorDesc { index: 23, name: "TooManyReserves" }
    [+] ErrorDesc { index: 24, name: "LocalExecutionIncomplete" }

[+] id: 86 - new pallet: MessageQueue
[-] pallet 9: Configuration
[-] pallet 85: DmpQueue
SUMMARY:
- Compatible.......................: false
- Require transaction_version bump.: true

!!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!!
```

</details>

<details>
<summary>Spiritnet Diff</summary>

```
!!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!!
[≠] pallet 0: System -> 8 change(s)
  - calls changes:
    [+] CallDesc { index: 9, name: "authorize_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } }
    [+] CallDesc { index: 10, name: "authorize_upgrade_without_checks", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } }
    [+] CallDesc { index: 11, name: "apply_authorized_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code", ty: "Vec<u8>" }] } }

  - events changes:
    [+] EventDesc { index: 6, name: "UpgradeAuthorized", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }, ArgDesc { name: "check_version", ty: "bool" }] } }

  - errors changes:
    [+] ErrorDesc { index: 6, name: "NothingAuthorized" }
    [+] ErrorDesc { index: 7, name: "Unauthorized" }

  - constants changes:
    [≠] Version: [ 56, 107, 105, 108, 116, 45, 115, 112, 105, 114, 105, 116, 110, 101, 116, 56, 107, 105, 108, 116, 45, 115, 112, 105, 114, 105, 116, 110, 101, 116, 1, 0, ... ]
        [Value([Changed(42, U8Change(60, 68)), Changed(163, U8Change(234, 215)), Changed(164, U8Change(147, 189)), Changed(165, U8Change(227, 216)), Changed(166, U8Change(241, 162)), Changed(167, U8Change(111, 114)), Changed(168, U8Change(61, 202)), Changed(169, U8Change(105, 13)), Changed(170, U8Change(98, 101)), Changed(171, U8Change(2, 1)), Changed(175, U8Change(38, 234)), Changed(176, U8Change(96, 147)), Changed(177, U8Change(149, 227)), Changed(178, U8Change(85, 241)), Changed(179, U8Change(192, 111)), Changed(180, U8Change(101, 61)), Changed(181, U8Change(102, 105)), Changed(182, U8Change(3, 98)), Changed(187, U8Change(164, 38)), Changed(188, U8Change(123, 96)), Changed(189, U8Change(125, 149)), Changed(190, U8Change(84, 85)), Changed(191, U8Change(73, 192)), Changed(192, U8Change(148, 101)), Changed(193, U8Change(201, 102)), Changed(194, U8Change(155, 3)), Changed(195, U8Change(1, 2)), Changed(199, U8Change(69, 164)), Changed(200, U8Change(191, 123)), Changed(201, U8Change(186, 125)), Changed(202, U8Change(81, 84)), Changed(203, U8Change(163, 73)), Changed(204, U8Change(16, 148)), Changed(205, U8Change(178, 201)), Changed(206, U8Change(35, 155)), Changed(211, U8Change(195, 69)), Changed(212, U8Change(179, 191)), Changed(213, U8Change(232, 186)), Changed(214, U8Change(211, 81)), Changed(215, U8Change(50, 163)), Changed(216, U8Change(115, 16)), Changed(217, U8Change(153, 178)), Changed(218, U8Change(13, 35)), Changed(223, U8Change(8, 195)), Changed(224, U8Change(0, 179)), Changed(225, U8Change(0, 232)), Changed(226, U8Change(0, 211)), Changed(227, U8Change(0, 50)), Added(228, 115), Added(229, 153), Added(230, 13), Added(231, 1), Added(232, 0), Added(233, 0), Added(234, 0), Added(235, 251), Added(236, 197), Added(237, 119), Added(238, 185), Added(239, 215), Added(240, 71), Added(241, 239), Added(242, 214), Added(243, 1), Added(244, 0), Added(245, 0), Added(246, 0), Added(247, 8), Added(248, 0), Added(249, 0), Added(250, 0), Added(251, 0)])]

  - storages changes:
    [+] StorageDesc { name: "AuthorizedUpgrade", modifier: "Optional", default_value: [0] }

[≠] pallet 6: Balances -> 7 change(s)
  - calls changes:
    [+] CallDesc { index: 9, name: "force_adjust_total_issuance", signature: SignatureDesc { args: [ArgDesc { name: "direction", ty: "AdjustmentDirection" }, ArgDesc { name: "delta", ty: "T::Balance" }] } }
    [-] "set_balance_deprecated"
    [-] "transfer"

  - events changes:
    [+] EventDesc { index: 21, name: "TotalIssuanceForced", signature: SignatureDesc { args: [ArgDesc { name: "old", ty: "T::Balance" }, ArgDesc { name: "new", ty: "T::Balance" }] } }

  - errors changes:
    [+] ErrorDesc { index: 10, name: "IssuanceDeactivated" }
    [+] ErrorDesc { index: 11, name: "DeltaZero" }

  - constants changes:
    [-] "MaxHolds"

[≠] pallet 24: AuraExt -> 1 change(s)
  - storages changes:
    [+] StorageDesc { name: "SlotInfo", modifier: "Optional", default_value: [0] }

[≠] pallet 30: Democracy -> 9 change(s)
  - calls changes:
    [≠]  7: fast_track ( proposal_hash: H256, voting_period: BlockNumberFor<T>, delay: BlockNumberFor<T>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠]  8: veto_external ( proposal_hash: H256, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 16: blacklist ( proposal_hash: H256, maybe_ref_index: Option<ReferendumIndex>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 18: set_metadata ( owner: MetadataOwner, maybe_hash: Option<PreimageHash>, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("Option<PreimageHash>", "Option<T::Hash>"))])] })]

  - events changes:
    [≠]  9: Vetoed ( who: T::AccountId, proposal_hash: H256, until: BlockNumberFor<T>, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 10: Blacklisted ( proposal_hash: H256, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 14: MetadataSet ( owner: MetadataOwner, hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]
    [≠] 15: MetadataCleared ( owner: MetadataOwner, hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]
    [≠] 16: MetadataTransferred ( prev_owner: MetadataOwner, owner: MetadataOwner, hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(2, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]

[≠] pallet 31: Council -> 1 change(s)
  - errors changes:
    [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" }

[≠] pallet 32: TechnicalCommittee -> 1 change(s)
  - errors changes:
    [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" }

[≠] pallet 35: Treasury -> 20 change(s)
  - calls changes:
    [≠]  3: spend ( amount: BalanceOf<T, I>, beneficiary: AccountIdLookupOf<T>, )  )
        [Name(StringChange("spend", "spend_local"))]
    [+] CallDesc { index: 5, name: "spend", signature: SignatureDesc { args: [ArgDesc { name: "asset_kind", ty: "Box<T::AssetKind>" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "Box<BeneficiaryLookupOf<T, I>>" }, ArgDesc { name: "valid_from", ty: "Option<BlockNumberFor<T>>" }] } }
    [+] CallDesc { index: 6, name: "payout", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }
    [+] CallDesc { index: 7, name: "check_status", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }
    [+] CallDesc { index: 8, name: "void_spend", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }

  - events changes:
    [+] EventDesc { index: 9, name: "AssetSpendApproved", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "asset_kind", ty: "T::AssetKind" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "T::Beneficiary" }, ArgDesc { name: "valid_from", ty: "BlockNumberFor<T>" }, ArgDesc { name: "expire_at", ty: "BlockNumberFor<T>" }] } }
    [+] EventDesc { index: 10, name: "AssetSpendVoided", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }
    [+] EventDesc { index: 11, name: "Paid", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } }
    [+] EventDesc { index: 12, name: "PaymentFailed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } }
    [+] EventDesc { index: 13, name: "SpendProcessed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }

  - errors changes:
    [+] ErrorDesc { index: 5, name: "FailedToConvertBalance" }
    [+] ErrorDesc { index: 6, name: "SpendExpired" }
    [+] ErrorDesc { index: 7, name: "EarlyPayout" }
    [+] ErrorDesc { index: 8, name: "AlreadyAttempted" }
    [+] ErrorDesc { index: 9, name: "PayoutError" }
    [+] ErrorDesc { index: 10, name: "NotAttempted" }
    [+] ErrorDesc { index: 11, name: "Inconclusive" }

  - constants changes:
    [+] ConstantDesc { name: "PayoutPeriod", value: [192, 75, 3, 0, 0, 0, 0, 0] }

  - storages changes:
    [+] StorageDesc { name: "SpendCount", modifier: "Default", default_value: [0, 0, 0, 0] }
    [+] StorageDesc { name: "Spends", modifier: "Optional", default_value: [0] }

[≠] pallet 41: Vesting -> 1 change(s)
  - calls changes:
    [+] CallDesc { index: 5, name: "force_remove_vesting_schedule", signature: SignatureDesc { args: [ArgDesc { name: "target", ty: "<T::Lookup as StaticLookup>::Source" }, ArgDesc { name: "schedule_index", ty: "u32" }] } }

[≠] pallet 44: Preimage -> 4 change(s)
  - calls changes:
    [+] CallDesc { index: 4, name: "ensure_updated", signature: SignatureDesc { args: [ArgDesc { name: "hashes", ty: "Vec<T::Hash>" }] } }

  - errors changes:
    [+] ErrorDesc { index: 6, name: "TooMany" }
    [+] ErrorDesc { index: 7, name: "TooFew" }

  - storages changes:
    [+] StorageDesc { name: "RequestStatusFor", modifier: "Optional", default_value: [0] }

[≠] pallet 46: Tips -> 5 change(s)
  - errors changes:
    [≠]  3: NotFinder       
        [Name(StringChange("NotFinder", "MaxTipAmountExceeded"))]
    [≠]  4: StillOpen       
        [Name(StringChange("StillOpen", "NotFinder"))]
    [≠]  5: Premature       
        [Name(StringChange("Premature", "StillOpen"))]
    [+] ErrorDesc { index: 6, name: "Premature" }

  - constants changes:
    [+] ConstantDesc { name: "MaxTipAmount", value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }

[≠] pallet 80: ParachainSystem -> 9 change(s)
  - events changes:
    [≠]  3: UpgradeAuthorized ( code_hash: T::Hash, )  )
        [Name(StringChange("UpgradeAuthorized", "DownwardMessagesReceived")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("code_hash", "count")), Ty(StringChange("T::Hash", "u32"))])] })]
    [≠]  4: DownwardMessagesReceived ( count: u32, )  )
        [Name(StringChange("DownwardMessagesReceived", "DownwardMessagesProcessed")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("count", "weight_used")), Ty(StringChange("u32", "Weight"))]), Added(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })]
    [≠]  5: DownwardMessagesProcessed ( weight_used: Weight, dmq_head: relay_chain::Hash, )  )
        [Name(StringChange("DownwardMessagesProcessed", "UpwardMessageSent")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("weight_used", "message_hash")), Ty(StringChange("Weight", "Option<XcmHash>"))]), Removed(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })]
    [-] "UpwardMessageSent"

  - storages changes:
    [+] StorageDesc { name: "AggregatedUnincludedSegment", modifier: "Optional", default_value: [0] }
    [+] StorageDesc { name: "UnincludedSegment", modifier: "Default", default_value: [0] }
    [+] StorageDesc { name: "UpgradeGoAhead", modifier: "Default", default_value: [0] }
    [+] StorageDesc { name: "UpwardDeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] }
    [-] "AuthorizedUpgrade"

[≠] pallet 82: XcmpQueue -> 25 change(s)
  - calls changes:
    [-] "service_overweight"
    [-] "update_threshold_weight"
    [-] "update_weight_restrict_decay"
    [-] "update_xcmp_max_individual_weight"

  - events changes:
    [≠]  0: Success ( message_hash: XcmHash, message_id: XcmHash, weight: Weight, )  )
        [Name(StringChange("Success", "XcmpMessageSent")), Signature(SignatureChange { args: [Removed(1, ArgDesc { name: "message_id", ty: "XcmHash" }), Removed(2, ArgDesc { name: "weight", ty: "Weight" })] })]
    [-] "Fail"
    [-] "BadVersion"
    [-] "BadFormat"
    [-] "XcmpMessageSent"
    [-] "OverweightEnqueued"
    [-] "OverweightServiced"

  - errors changes:
    [≠]  0: FailedToSend    
        [Name(StringChange("FailedToSend", "BadQueueConfig"))]
    [≠]  1: BadXcmOrigin    
        [Name(StringChange("BadXcmOrigin", "AlreadySuspended"))]
    [≠]  2: BadXcm          
        [Name(StringChange("BadXcm", "AlreadyResumed"))]
    [-] "BadOverweightIndex"
    [-] "WeightOverLimit"

  - constants changes:
    [+] ConstantDesc { name: "MaxInboundSuspended", value: [0, 0, 0, 0] }

  - storages changes:
    [+] StorageDesc { name: "DeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] }
    [+] StorageDesc { name: "InboundXcmpSuspended", modifier: "Default", default_value: [0] }
    [≠] Default  QueueConfig: [2, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 130, 26, 6, 0, 0, 8, 0, 7, 0, 200, 23, 168, 4, 2, 0, 4, 0]
        [DefaultValue([Changed(0, U8Change(2, 32)), Changed(4, U8Change(5, 48)), Changed(8, U8Change(1, 8)), Removed(12, 130), Removed(13, 26), Removed(14, 6), Removed(15, 0), Removed(16, 0), Removed(17, 8), Removed(18, 0), Removed(19, 7), Removed(20, 0), Removed(21, 200), Removed(22, 23), Removed(23, 168), Removed(24, 4), Removed(25, 2), Removed(26, 0), Removed(27, 4), Removed(28, 0)])]
    [-] "CounterForOverweight"
    [-] "InboundXcmpMessages"
    [-] "InboundXcmpStatus"
    [-] "Overweight"
    [-] "OverweightCount"

[≠] pallet 83: PolkadotXcm -> 35 change(s)
  - calls changes:
    [≠]  0: send ( dest: Box<VersionedMultiLocation>, message: Box<VersionedXcm<()>>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })]
    [≠]  1: teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [≠]  2: reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [≠]  3: execute ( message: Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>, max_weight: Weight, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>", "Box<VersionedXcm<<T as Config>::RuntimeCall>>"))])] })]
    [≠]  4: force_xcm_version ( location: Box<MultiLocation>, version: XcmVersion, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<MultiLocation>", "Box<Location>"))])] })]
    [≠]  6: force_subscribe_version_notify ( location: Box<VersionedMultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })]
    [≠]  7: force_unsubscribe_version_notify ( location: Box<VersionedMultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })]
    [≠]  8: limited_reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [≠]  9: limited_teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [+] CallDesc { index: 11, name: "transfer_assets", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "fee_asset_item", ty: "u32" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } }
    [+] CallDesc { index: 12, name: "claim_assets", signature: SignatureDesc { args: [ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }] } }
    [+] CallDesc { index: 13, name: "transfer_assets_using_type_and_then", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "assets_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "remote_fees_id", ty: "Box<VersionedAssetId>" }, ArgDesc { name: "fees_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "custom_xcm_on_dest", ty: "Box<VersionedXcm<()>>" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } }

  - events changes:
    [≠]  1: Sent ( origin: MultiLocation, destination: MultiLocation, message: Xcm<()>, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠]  2: UnexpectedResponse ( origin: MultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠]  8: InvalidResponder ( origin: MultiLocation, query_id: QueryId, expected_location: Option<MultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })]
    [≠]  9: InvalidResponderVersion ( origin: MultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 11: AssetsTrapped ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })]
    [≠] 12: VersionChangeNotified ( destination: MultiLocation, result: XcmVersion, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 13: SupportedVersionChanged ( location: MultiLocation, version: XcmVersion, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 14: NotifyTargetSendFail ( location: MultiLocation, query_id: QueryId, error: XcmError, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 15: NotifyTargetMigrationFail ( location: VersionedMultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("VersionedMultiLocation", "VersionedLocation"))])] })]
    [≠] 16: InvalidQuerierVersion ( origin: MultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 17: InvalidQuerier ( origin: MultiLocation, query_id: QueryId, expected_querier: MultiLocation, maybe_actual_querier: Option<MultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiLocation", "Location"))]), Changed(3, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })]
    [≠] 18: VersionNotifyStarted ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 19: VersionNotifyRequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 20: VersionNotifyUnrequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 21: FeesPaid ( paying: MultiLocation, fees: MultiAssets, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 22: AssetsClaimed ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })]
    [+] EventDesc { index: 23, name: "VersionMigrationFinished", signature: SignatureDesc { args: [ArgDesc { name: "version", ty: "XcmVersion" }] } }

  - errors changes:
    [≠] 13: InvalidAsset    
        [Name(StringChange("InvalidAsset", "CannotCheckOutTeleport"))]
    [+] ErrorDesc { index: 20, name: "InvalidAssetNotConcrete" }
    [+] ErrorDesc { index: 21, name: "InvalidAssetUnknownReserve" }
    [+] ErrorDesc { index: 22, name: "InvalidAssetUnsupportedReserve" }
    [+] ErrorDesc { index: 23, name: "TooManyReserves" }
    [+] ErrorDesc { index: 24, name: "LocalExecutionIncomplete" }

[+] id: 86 - new pallet: MessageQueue
[-] pallet 85: DmpQueue
SUMMARY:
- Compatible.......................: false
- Require transaction_version bump.: true

!!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!!
```

</details>
## Checklist:

- [ ] I have verified that the code works
- [ ] No panics! (checked arithmetic ops, no indexing `array[3]` use
`get(3)`, ...)
- [ ] I have verified that the code is easy to understand
  - [ ] If not, I have left a well-balanced amount of inline comments
- [ ] I have [left the code in a better
state](https://deviq.com/principles/boy-scout-rule)
- [ ] I have documented the changes (where applicable)
* Either PR or Ticket to update [the
Docs](https://github.com/KILTprotocol/docs)
    * Link the PR/Ticket here
TarekkMA pushed a commit to moonbeam-foundation/polkadot-sdk that referenced this pull request Aug 2, 2024
`cumulus-pallet-dmp-queue` is not needed anymore since
paritytech#1246.

The only logic that remains in the pallet is a lazy migration in the
[`on_idle`](https://github.com/paritytech/polkadot-sdk/blob/8d62c13b2541920c37fb9d9ca733fcce91e96573/cumulus/pallets/dmp-queue/src/lib.rs#L158)
hook.

---------

Signed-off-by: Oliver Tale-Yazdi <[email protected]>
Ad96el added a commit to KILTprotocol/kilt-node that referenced this pull request Aug 20, 2024
## fixes
[KILTprotocol/ticket#3439](KILTprotocol/ticket#3439)


### notable Changes

- rust version 1.7.4 (Toolchain and gitlab runner are updated) 
- the preimage_pallet is no longer using deposits, instead it uses
[consideration](paritytech/polkadot-sdk#1361),
which is an abstration over the balance. The exact footprint of an
storage entry is used to calculate the cost storing entries. Might be
interesting for our current deposit model.
- The pallet-xcm introduced a new benchmarking logic 

### Pallets

- Removed cumulus_pallet_dmp_queue (Replaced by pallet_message_queue).
There is a lazy migration provided, which is running automatically. Once
the the [Complete
event](paritytech/polkadot-sdk#1246) is emitted,
we can delete the pallet.
- Treasur introduced a new [spending
support](paritytech/polkadot-sdk#1333), which is
currently disabled. Might be interesting at some point, if other
currencies are available.
- `transfer` extrinsic in `pallet_balances` is removed. Will be a
breaking change for Sporran. For other new introduced extrinsics, please
have a lookin the diffs below.
- Tips: A max tip amount has to be specified, which is currently set to
1_000_000 KILT


### Emulated Tests

I am quite unhappy with the current state of the emulated tests. I would
like to refactor those tests as described in this
[issue](KILTprotocol/ticket#3241 (comment)).
For this PR, I only fixed problems arised by updating the dependencies.

Since the polkadot-runtime is no longer part of the Polkadot-SDK, the
relay chain for Spiritnet has been changed to Rococo. The purpose of
these tests is to ensure that the expectations of the xcm-configuration
match the implementation. The specific relay chain used should not
matter.

### XCM 

- XCM version 4 is out which is also the LTS for XCM. 
- In version 4 a new instruction `Transfer` is introduced, which needed
to be denied by the Barrier
- renaming of paramters: The `Multi` is removed: MultiLocation ->
Location, MultiAsset -> Asset, ...


### Try-runtime

In version 1.7.0 additional try-runtime tests are introduced, where it
is tried to decode the whole storage of the chain. This error should
only occur for chains which are still running on an ancient SDK version
and will be fixed automatically in the next runtime upgrade.

### Weights

Since a lot of new extrinsics are introduced, I updated all weights.

### Todos

- [x] execute Benchmarking 

## Metadata Diff to Develop Branch

<details>
<summary>Peregrine Diff</summary>

```
!!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!!
[≠] pallet 0: System -> 8 change(s)
  - calls changes:
    [+] CallDesc { index: 9, name: "authorize_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } }
    [+] CallDesc { index: 10, name: "authorize_upgrade_without_checks", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } }
    [+] CallDesc { index: 11, name: "apply_authorized_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code", ty: "Vec<u8>" }] } }

  - events changes:
    [+] EventDesc { index: 6, name: "UpgradeAuthorized", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }, ArgDesc { name: "check_version", ty: "bool" }] } }

  - errors changes:
    [+] ErrorDesc { index: 6, name: "NothingAuthorized" }
    [+] ErrorDesc { index: 7, name: "Unauthorized" }

  - constants changes:
    [≠] Version: [ 48, 109, 97, 115, 104, 110, 101, 116, 45, 110, 111, 100, 101, 48, 109, 97, 115, 104, 110, 101, 116, 45, 110, 111, 100, 101, 4, 0, 0, 0, 136, 44, ... ]
        [Value([Changed(38, U8Change(60, 68)), Changed(159, U8Change(234, 215)), Changed(160, U8Change(147, 189)), Changed(161, U8Change(227, 216)), Changed(162, U8Change(241, 162)), Changed(163, U8Change(111, 114)), Changed(164, U8Change(61, 202)), Changed(165, U8Change(105, 13)), Changed(166, U8Change(98, 101)), Changed(167, U8Change(2, 1)), Changed(171, U8Change(38, 234)), Changed(172, U8Change(96, 147)), Changed(173, U8Change(149, 227)), Changed(174, U8Change(85, 241)), Changed(175, U8Change(192, 111)), Changed(176, U8Change(101, 61)), Changed(177, U8Change(102, 105)), Changed(178, U8Change(3, 98)), Changed(183, U8Change(164, 38)), Changed(184, U8Change(123, 96)), Changed(185, U8Change(125, 149)), Changed(186, U8Change(84, 85)), Changed(187, U8Change(73, 192)), Changed(188, U8Change(148, 101)), Changed(189, U8Change(201, 102)), Changed(190, U8Change(155, 3)), Changed(191, U8Change(1, 2)), Changed(195, U8Change(69, 164)), Changed(196, U8Change(191, 123)), Changed(197, U8Change(186, 125)), Changed(198, U8Change(81, 84)), Changed(199, U8Change(163, 73)), Changed(200, U8Change(16, 148)), Changed(201, U8Change(178, 201)), Changed(202, U8Change(35, 155)), Changed(207, U8Change(195, 69)), Changed(208, U8Change(179, 191)), Changed(209, U8Change(232, 186)), Changed(210, U8Change(211, 81)), Changed(211, U8Change(50, 163)), Changed(212, U8Change(115, 16)), Changed(213, U8Change(153, 178)), Changed(214, U8Change(13, 35)), Changed(219, U8Change(8, 195)), Changed(220, U8Change(0, 179)), Changed(221, U8Change(0, 232)), Changed(222, U8Change(0, 211)), Changed(223, U8Change(0, 50)), Added(224, 115), Added(225, 153), Added(226, 13), Added(227, 1), Added(228, 0), Added(229, 0), Added(230, 0), Added(231, 251), Added(232, 197), Added(233, 119), Added(234, 185), Added(235, 215), Added(236, 71), Added(237, 239), Added(238, 214), Added(239, 1), Added(240, 0), Added(241, 0), Added(242, 0), Added(243, 8), Added(244, 0), Added(245, 0), Added(246, 0), Added(247, 0)])]

  - storages changes:
    [+] StorageDesc { name: "AuthorizedUpgrade", modifier: "Optional", default_value: [0] }

[≠] pallet 6: Balances -> 7 change(s)
  - calls changes:
    [+] CallDesc { index: 9, name: "force_adjust_total_issuance", signature: SignatureDesc { args: [ArgDesc { name: "direction", ty: "AdjustmentDirection" }, ArgDesc { name: "delta", ty: "T::Balance" }] } }
    [-] "set_balance_deprecated"
    [-] "transfer"

  - events changes:
    [+] EventDesc { index: 21, name: "TotalIssuanceForced", signature: SignatureDesc { args: [ArgDesc { name: "old", ty: "T::Balance" }, ArgDesc { name: "new", ty: "T::Balance" }] } }

  - errors changes:
    [+] ErrorDesc { index: 10, name: "IssuanceDeactivated" }
    [+] ErrorDesc { index: 11, name: "DeltaZero" }

  - constants changes:
    [-] "MaxHolds"

[≠] pallet 8: Sudo -> 4 change(s)
  - calls changes:
    [+] CallDesc { index: 4, name: "remove_key", signature: SignatureDesc { args: [] } }

  - events changes:
    [≠]  1: KeyChanged ( old_sudoer: Option<T::AccountId>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Name(StringChange("old_sudoer", "old"))]), Added(1, ArgDesc { name: "new", ty: "T::AccountId" })] })]
    [≠]  2: SudoAsDone ( sudo_result: DispatchResult, )  )
        [Name(StringChange("SudoAsDone", "KeyRemoved")), Signature(SignatureChange { args: [Removed(0, ArgDesc { name: "sudo_result", ty: "DispatchResult" })] })]
    [+] EventDesc { index: 3, name: "SudoAsDone", signature: SignatureDesc { args: [ArgDesc { name: "sudo_result", ty: "DispatchResult" }] } }

[≠] pallet 24: AuraExt -> 1 change(s)
  - storages changes:
    [+] StorageDesc { name: "SlotInfo", modifier: "Optional", default_value: [0] }

[≠] pallet 30: Democracy -> 9 change(s)
  - calls changes:
    [≠]  7: fast_track ( proposal_hash: H256, voting_period: BlockNumberFor<T>, delay: BlockNumberFor<T>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠]  8: veto_external ( proposal_hash: H256, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 16: blacklist ( proposal_hash: H256, maybe_ref_index: Option<ReferendumIndex>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 18: set_metadata ( owner: MetadataOwner, maybe_hash: Option<PreimageHash>, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("Option<PreimageHash>", "Option<T::Hash>"))])] })]

  - events changes:
    [≠]  9: Vetoed ( who: T::AccountId, proposal_hash: H256, until: BlockNumberFor<T>, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 10: Blacklisted ( proposal_hash: H256, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 14: MetadataSet ( owner: MetadataOwner, hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]
    [≠] 15: MetadataCleared ( owner: MetadataOwner, hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]
    [≠] 16: MetadataTransferred ( prev_owner: MetadataOwner, owner: MetadataOwner, hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(2, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]

[≠] pallet 31: Council -> 1 change(s)
  - errors changes:
    [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" }

[≠] pallet 32: TechnicalCommittee -> 1 change(s)
  - errors changes:
    [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" }

[≠] pallet 35: Treasury -> 20 change(s)
  - calls changes:
    [≠]  3: spend ( amount: BalanceOf<T, I>, beneficiary: AccountIdLookupOf<T>, )  )
        [Name(StringChange("spend", "spend_local"))]
    [+] CallDesc { index: 5, name: "spend", signature: SignatureDesc { args: [ArgDesc { name: "asset_kind", ty: "Box<T::AssetKind>" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "Box<BeneficiaryLookupOf<T, I>>" }, ArgDesc { name: "valid_from", ty: "Option<BlockNumberFor<T>>" }] } }
    [+] CallDesc { index: 6, name: "payout", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }
    [+] CallDesc { index: 7, name: "check_status", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }
    [+] CallDesc { index: 8, name: "void_spend", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }

  - events changes:
    [+] EventDesc { index: 9, name: "AssetSpendApproved", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "asset_kind", ty: "T::AssetKind" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "T::Beneficiary" }, ArgDesc { name: "valid_from", ty: "BlockNumberFor<T>" }, ArgDesc { name: "expire_at", ty: "BlockNumberFor<T>" }] } }
    [+] EventDesc { index: 10, name: "AssetSpendVoided", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }
    [+] EventDesc { index: 11, name: "Paid", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } }
    [+] EventDesc { index: 12, name: "PaymentFailed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } }
    [+] EventDesc { index: 13, name: "SpendProcessed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }

  - errors changes:
    [+] ErrorDesc { index: 5, name: "FailedToConvertBalance" }
    [+] ErrorDesc { index: 6, name: "SpendExpired" }
    [+] ErrorDesc { index: 7, name: "EarlyPayout" }
    [+] ErrorDesc { index: 8, name: "AlreadyAttempted" }
    [+] ErrorDesc { index: 9, name: "PayoutError" }
    [+] ErrorDesc { index: 10, name: "NotAttempted" }
    [+] ErrorDesc { index: 11, name: "Inconclusive" }

  - constants changes:
    [+] ConstantDesc { name: "PayoutPeriod", value: [192, 75, 3, 0, 0, 0, 0, 0] }

  - storages changes:
    [+] StorageDesc { name: "SpendCount", modifier: "Default", default_value: [0, 0, 0, 0] }
    [+] StorageDesc { name: "Spends", modifier: "Optional", default_value: [0] }

[≠] pallet 41: Vesting -> 1 change(s)
  - calls changes:
    [+] CallDesc { index: 5, name: "force_remove_vesting_schedule", signature: SignatureDesc { args: [ArgDesc { name: "target", ty: "<T::Lookup as StaticLookup>::Source" }, ArgDesc { name: "schedule_index", ty: "u32" }] } }

[≠] pallet 44: Preimage -> 4 change(s)
  - calls changes:
    [+] CallDesc { index: 4, name: "ensure_updated", signature: SignatureDesc { args: [ArgDesc { name: "hashes", ty: "Vec<T::Hash>" }] } }

  - errors changes:
    [+] ErrorDesc { index: 6, name: "TooMany" }
    [+] ErrorDesc { index: 7, name: "TooFew" }

  - storages changes:
    [+] StorageDesc { name: "RequestStatusFor", modifier: "Optional", default_value: [0] }

[≠] pallet 46: Tips -> 5 change(s)
  - errors changes:
    [≠]  3: NotFinder       
        [Name(StringChange("NotFinder", "MaxTipAmountExceeded"))]
    [≠]  4: StillOpen       
        [Name(StringChange("StillOpen", "NotFinder"))]
    [≠]  5: Premature       
        [Name(StringChange("Premature", "StillOpen"))]
    [+] ErrorDesc { index: 6, name: "Premature" }

  - constants changes:
    [+] ConstantDesc { name: "MaxTipAmount", value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }

[≠] pallet 80: ParachainSystem -> 9 change(s)
  - events changes:
    [≠]  3: UpgradeAuthorized ( code_hash: T::Hash, )  )
        [Name(StringChange("UpgradeAuthorized", "DownwardMessagesReceived")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("code_hash", "count")), Ty(StringChange("T::Hash", "u32"))])] })]
    [≠]  4: DownwardMessagesReceived ( count: u32, )  )
        [Name(StringChange("DownwardMessagesReceived", "DownwardMessagesProcessed")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("count", "weight_used")), Ty(StringChange("u32", "Weight"))]), Added(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })]
    [≠]  5: DownwardMessagesProcessed ( weight_used: Weight, dmq_head: relay_chain::Hash, )  )
        [Name(StringChange("DownwardMessagesProcessed", "UpwardMessageSent")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("weight_used", "message_hash")), Ty(StringChange("Weight", "Option<XcmHash>"))]), Removed(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })]
    [-] "UpwardMessageSent"

  - storages changes:
    [+] StorageDesc { name: "AggregatedUnincludedSegment", modifier: "Optional", default_value: [0] }
    [+] StorageDesc { name: "UnincludedSegment", modifier: "Default", default_value: [0] }
    [+] StorageDesc { name: "UpgradeGoAhead", modifier: "Default", default_value: [0] }
    [+] StorageDesc { name: "UpwardDeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] }
    [-] "AuthorizedUpgrade"

[≠] pallet 82: XcmpQueue -> 25 change(s)
  - calls changes:
    [-] "service_overweight"
    [-] "update_threshold_weight"
    [-] "update_weight_restrict_decay"
    [-] "update_xcmp_max_individual_weight"

  - events changes:
    [≠]  0: Success ( message_hash: XcmHash, message_id: XcmHash, weight: Weight, )  )
        [Name(StringChange("Success", "XcmpMessageSent")), Signature(SignatureChange { args: [Removed(1, ArgDesc { name: "message_id", ty: "XcmHash" }), Removed(2, ArgDesc { name: "weight", ty: "Weight" })] })]
    [-] "Fail"
    [-] "BadVersion"
    [-] "BadFormat"
    [-] "XcmpMessageSent"
    [-] "OverweightEnqueued"
    [-] "OverweightServiced"

  - errors changes:
    [≠]  0: FailedToSend    
        [Name(StringChange("FailedToSend", "BadQueueConfig"))]
    [≠]  1: BadXcmOrigin    
        [Name(StringChange("BadXcmOrigin", "AlreadySuspended"))]
    [≠]  2: BadXcm          
        [Name(StringChange("BadXcm", "AlreadyResumed"))]
    [-] "BadOverweightIndex"
    [-] "WeightOverLimit"

  - constants changes:
    [+] ConstantDesc { name: "MaxInboundSuspended", value: [0, 0, 0, 0] }

  - storages changes:
    [+] StorageDesc { name: "DeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] }
    [+] StorageDesc { name: "InboundXcmpSuspended", modifier: "Default", default_value: [0] }
    [≠] Default  QueueConfig: [2, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 130, 26, 6, 0, 0, 8, 0, 7, 0, 200, 23, 168, 4, 2, 0, 4, 0]
        [DefaultValue([Changed(0, U8Change(2, 32)), Changed(4, U8Change(5, 48)), Changed(8, U8Change(1, 8)), Removed(12, 130), Removed(13, 26), Removed(14, 6), Removed(15, 0), Removed(16, 0), Removed(17, 8), Removed(18, 0), Removed(19, 7), Removed(20, 0), Removed(21, 200), Removed(22, 23), Removed(23, 168), Removed(24, 4), Removed(25, 2), Removed(26, 0), Removed(27, 4), Removed(28, 0)])]
    [-] "CounterForOverweight"
    [-] "InboundXcmpMessages"
    [-] "InboundXcmpStatus"
    [-] "Overweight"
    [-] "OverweightCount"

[≠] pallet 83: PolkadotXcm -> 35 change(s)
  - calls changes:
    [≠]  0: send ( dest: Box<VersionedMultiLocation>, message: Box<VersionedXcm<()>>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })]
    [≠]  1: teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [≠]  2: reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [≠]  3: execute ( message: Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>, max_weight: Weight, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>", "Box<VersionedXcm<<T as Config>::RuntimeCall>>"))])] })]
    [≠]  4: force_xcm_version ( location: Box<MultiLocation>, version: XcmVersion, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<MultiLocation>", "Box<Location>"))])] })]
    [≠]  6: force_subscribe_version_notify ( location: Box<VersionedMultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })]
    [≠]  7: force_unsubscribe_version_notify ( location: Box<VersionedMultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })]
    [≠]  8: limited_reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [≠]  9: limited_teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [+] CallDesc { index: 11, name: "transfer_assets", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "fee_asset_item", ty: "u32" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } }
    [+] CallDesc { index: 12, name: "claim_assets", signature: SignatureDesc { args: [ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }] } }
    [+] CallDesc { index: 13, name: "transfer_assets_using_type_and_then", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "assets_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "remote_fees_id", ty: "Box<VersionedAssetId>" }, ArgDesc { name: "fees_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "custom_xcm_on_dest", ty: "Box<VersionedXcm<()>>" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } }

  - events changes:
    [≠]  1: Sent ( origin: MultiLocation, destination: MultiLocation, message: Xcm<()>, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠]  2: UnexpectedResponse ( origin: MultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠]  8: InvalidResponder ( origin: MultiLocation, query_id: QueryId, expected_location: Option<MultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })]
    [≠]  9: InvalidResponderVersion ( origin: MultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 11: AssetsTrapped ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })]
    [≠] 12: VersionChangeNotified ( destination: MultiLocation, result: XcmVersion, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 13: SupportedVersionChanged ( location: MultiLocation, version: XcmVersion, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 14: NotifyTargetSendFail ( location: MultiLocation, query_id: QueryId, error: XcmError, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 15: NotifyTargetMigrationFail ( location: VersionedMultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("VersionedMultiLocation", "VersionedLocation"))])] })]
    [≠] 16: InvalidQuerierVersion ( origin: MultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 17: InvalidQuerier ( origin: MultiLocation, query_id: QueryId, expected_querier: MultiLocation, maybe_actual_querier: Option<MultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiLocation", "Location"))]), Changed(3, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })]
    [≠] 18: VersionNotifyStarted ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 19: VersionNotifyRequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 20: VersionNotifyUnrequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 21: FeesPaid ( paying: MultiLocation, fees: MultiAssets, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 22: AssetsClaimed ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })]
    [+] EventDesc { index: 23, name: "VersionMigrationFinished", signature: SignatureDesc { args: [ArgDesc { name: "version", ty: "XcmVersion" }] } }

  - errors changes:
    [≠] 13: InvalidAsset    
        [Name(StringChange("InvalidAsset", "CannotCheckOutTeleport"))]
    [+] ErrorDesc { index: 20, name: "InvalidAssetNotConcrete" }
    [+] ErrorDesc { index: 21, name: "InvalidAssetUnknownReserve" }
    [+] ErrorDesc { index: 22, name: "InvalidAssetUnsupportedReserve" }
    [+] ErrorDesc { index: 23, name: "TooManyReserves" }
    [+] ErrorDesc { index: 24, name: "LocalExecutionIncomplete" }

[+] id: 86 - new pallet: MessageQueue
[-] pallet 9: Configuration
[-] pallet 85: DmpQueue
SUMMARY:
- Compatible.......................: false
- Require transaction_version bump.: true

!!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!!
```

</details>

<details>
<summary>Spiritnet Diff</summary>

```
!!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!!
[≠] pallet 0: System -> 8 change(s)
  - calls changes:
    [+] CallDesc { index: 9, name: "authorize_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } }
    [+] CallDesc { index: 10, name: "authorize_upgrade_without_checks", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }] } }
    [+] CallDesc { index: 11, name: "apply_authorized_upgrade", signature: SignatureDesc { args: [ArgDesc { name: "code", ty: "Vec<u8>" }] } }

  - events changes:
    [+] EventDesc { index: 6, name: "UpgradeAuthorized", signature: SignatureDesc { args: [ArgDesc { name: "code_hash", ty: "T::Hash" }, ArgDesc { name: "check_version", ty: "bool" }] } }

  - errors changes:
    [+] ErrorDesc { index: 6, name: "NothingAuthorized" }
    [+] ErrorDesc { index: 7, name: "Unauthorized" }

  - constants changes:
    [≠] Version: [ 56, 107, 105, 108, 116, 45, 115, 112, 105, 114, 105, 116, 110, 101, 116, 56, 107, 105, 108, 116, 45, 115, 112, 105, 114, 105, 116, 110, 101, 116, 1, 0, ... ]
        [Value([Changed(42, U8Change(60, 68)), Changed(163, U8Change(234, 215)), Changed(164, U8Change(147, 189)), Changed(165, U8Change(227, 216)), Changed(166, U8Change(241, 162)), Changed(167, U8Change(111, 114)), Changed(168, U8Change(61, 202)), Changed(169, U8Change(105, 13)), Changed(170, U8Change(98, 101)), Changed(171, U8Change(2, 1)), Changed(175, U8Change(38, 234)), Changed(176, U8Change(96, 147)), Changed(177, U8Change(149, 227)), Changed(178, U8Change(85, 241)), Changed(179, U8Change(192, 111)), Changed(180, U8Change(101, 61)), Changed(181, U8Change(102, 105)), Changed(182, U8Change(3, 98)), Changed(187, U8Change(164, 38)), Changed(188, U8Change(123, 96)), Changed(189, U8Change(125, 149)), Changed(190, U8Change(84, 85)), Changed(191, U8Change(73, 192)), Changed(192, U8Change(148, 101)), Changed(193, U8Change(201, 102)), Changed(194, U8Change(155, 3)), Changed(195, U8Change(1, 2)), Changed(199, U8Change(69, 164)), Changed(200, U8Change(191, 123)), Changed(201, U8Change(186, 125)), Changed(202, U8Change(81, 84)), Changed(203, U8Change(163, 73)), Changed(204, U8Change(16, 148)), Changed(205, U8Change(178, 201)), Changed(206, U8Change(35, 155)), Changed(211, U8Change(195, 69)), Changed(212, U8Change(179, 191)), Changed(213, U8Change(232, 186)), Changed(214, U8Change(211, 81)), Changed(215, U8Change(50, 163)), Changed(216, U8Change(115, 16)), Changed(217, U8Change(153, 178)), Changed(218, U8Change(13, 35)), Changed(223, U8Change(8, 195)), Changed(224, U8Change(0, 179)), Changed(225, U8Change(0, 232)), Changed(226, U8Change(0, 211)), Changed(227, U8Change(0, 50)), Added(228, 115), Added(229, 153), Added(230, 13), Added(231, 1), Added(232, 0), Added(233, 0), Added(234, 0), Added(235, 251), Added(236, 197), Added(237, 119), Added(238, 185), Added(239, 215), Added(240, 71), Added(241, 239), Added(242, 214), Added(243, 1), Added(244, 0), Added(245, 0), Added(246, 0), Added(247, 8), Added(248, 0), Added(249, 0), Added(250, 0), Added(251, 0)])]

  - storages changes:
    [+] StorageDesc { name: "AuthorizedUpgrade", modifier: "Optional", default_value: [0] }

[≠] pallet 6: Balances -> 7 change(s)
  - calls changes:
    [+] CallDesc { index: 9, name: "force_adjust_total_issuance", signature: SignatureDesc { args: [ArgDesc { name: "direction", ty: "AdjustmentDirection" }, ArgDesc { name: "delta", ty: "T::Balance" }] } }
    [-] "set_balance_deprecated"
    [-] "transfer"

  - events changes:
    [+] EventDesc { index: 21, name: "TotalIssuanceForced", signature: SignatureDesc { args: [ArgDesc { name: "old", ty: "T::Balance" }, ArgDesc { name: "new", ty: "T::Balance" }] } }

  - errors changes:
    [+] ErrorDesc { index: 10, name: "IssuanceDeactivated" }
    [+] ErrorDesc { index: 11, name: "DeltaZero" }

  - constants changes:
    [-] "MaxHolds"

[≠] pallet 24: AuraExt -> 1 change(s)
  - storages changes:
    [+] StorageDesc { name: "SlotInfo", modifier: "Optional", default_value: [0] }

[≠] pallet 30: Democracy -> 9 change(s)
  - calls changes:
    [≠]  7: fast_track ( proposal_hash: H256, voting_period: BlockNumberFor<T>, delay: BlockNumberFor<T>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠]  8: veto_external ( proposal_hash: H256, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 16: blacklist ( proposal_hash: H256, maybe_ref_index: Option<ReferendumIndex>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 18: set_metadata ( owner: MetadataOwner, maybe_hash: Option<PreimageHash>, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("Option<PreimageHash>", "Option<T::Hash>"))])] })]

  - events changes:
    [≠]  9: Vetoed ( who: T::AccountId, proposal_hash: H256, until: BlockNumberFor<T>, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 10: Blacklisted ( proposal_hash: H256, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("H256", "T::Hash"))])] })]
    [≠] 14: MetadataSet ( owner: MetadataOwner, hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]
    [≠] 15: MetadataCleared ( owner: MetadataOwner, hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]
    [≠] 16: MetadataTransferred ( prev_owner: MetadataOwner, owner: MetadataOwner, hash: PreimageHash, )  )
        [Signature(SignatureChange { args: [Changed(2, [Ty(StringChange("PreimageHash", "T::Hash"))])] })]

[≠] pallet 31: Council -> 1 change(s)
  - errors changes:
    [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" }

[≠] pallet 32: TechnicalCommittee -> 1 change(s)
  - errors changes:
    [+] ErrorDesc { index: 10, name: "PrimeAccountNotMember" }

[≠] pallet 35: Treasury -> 20 change(s)
  - calls changes:
    [≠]  3: spend ( amount: BalanceOf<T, I>, beneficiary: AccountIdLookupOf<T>, )  )
        [Name(StringChange("spend", "spend_local"))]
    [+] CallDesc { index: 5, name: "spend", signature: SignatureDesc { args: [ArgDesc { name: "asset_kind", ty: "Box<T::AssetKind>" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "Box<BeneficiaryLookupOf<T, I>>" }, ArgDesc { name: "valid_from", ty: "Option<BlockNumberFor<T>>" }] } }
    [+] CallDesc { index: 6, name: "payout", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }
    [+] CallDesc { index: 7, name: "check_status", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }
    [+] CallDesc { index: 8, name: "void_spend", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }

  - events changes:
    [+] EventDesc { index: 9, name: "AssetSpendApproved", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "asset_kind", ty: "T::AssetKind" }, ArgDesc { name: "amount", ty: "AssetBalanceOf<T, I>" }, ArgDesc { name: "beneficiary", ty: "T::Beneficiary" }, ArgDesc { name: "valid_from", ty: "BlockNumberFor<T>" }, ArgDesc { name: "expire_at", ty: "BlockNumberFor<T>" }] } }
    [+] EventDesc { index: 10, name: "AssetSpendVoided", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }
    [+] EventDesc { index: 11, name: "Paid", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } }
    [+] EventDesc { index: 12, name: "PaymentFailed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }, ArgDesc { name: "payment_id", ty: "<T::Paymaster as Pay>::Id" }] } }
    [+] EventDesc { index: 13, name: "SpendProcessed", signature: SignatureDesc { args: [ArgDesc { name: "index", ty: "SpendIndex" }] } }

  - errors changes:
    [+] ErrorDesc { index: 5, name: "FailedToConvertBalance" }
    [+] ErrorDesc { index: 6, name: "SpendExpired" }
    [+] ErrorDesc { index: 7, name: "EarlyPayout" }
    [+] ErrorDesc { index: 8, name: "AlreadyAttempted" }
    [+] ErrorDesc { index: 9, name: "PayoutError" }
    [+] ErrorDesc { index: 10, name: "NotAttempted" }
    [+] ErrorDesc { index: 11, name: "Inconclusive" }

  - constants changes:
    [+] ConstantDesc { name: "PayoutPeriod", value: [192, 75, 3, 0, 0, 0, 0, 0] }

  - storages changes:
    [+] StorageDesc { name: "SpendCount", modifier: "Default", default_value: [0, 0, 0, 0] }
    [+] StorageDesc { name: "Spends", modifier: "Optional", default_value: [0] }

[≠] pallet 41: Vesting -> 1 change(s)
  - calls changes:
    [+] CallDesc { index: 5, name: "force_remove_vesting_schedule", signature: SignatureDesc { args: [ArgDesc { name: "target", ty: "<T::Lookup as StaticLookup>::Source" }, ArgDesc { name: "schedule_index", ty: "u32" }] } }

[≠] pallet 44: Preimage -> 4 change(s)
  - calls changes:
    [+] CallDesc { index: 4, name: "ensure_updated", signature: SignatureDesc { args: [ArgDesc { name: "hashes", ty: "Vec<T::Hash>" }] } }

  - errors changes:
    [+] ErrorDesc { index: 6, name: "TooMany" }
    [+] ErrorDesc { index: 7, name: "TooFew" }

  - storages changes:
    [+] StorageDesc { name: "RequestStatusFor", modifier: "Optional", default_value: [0] }

[≠] pallet 46: Tips -> 5 change(s)
  - errors changes:
    [≠]  3: NotFinder       
        [Name(StringChange("NotFinder", "MaxTipAmountExceeded"))]
    [≠]  4: StillOpen       
        [Name(StringChange("StillOpen", "NotFinder"))]
    [≠]  5: Premature       
        [Name(StringChange("Premature", "StillOpen"))]
    [+] ErrorDesc { index: 6, name: "Premature" }

  - constants changes:
    [+] ConstantDesc { name: "MaxTipAmount", value: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] }

[≠] pallet 80: ParachainSystem -> 9 change(s)
  - events changes:
    [≠]  3: UpgradeAuthorized ( code_hash: T::Hash, )  )
        [Name(StringChange("UpgradeAuthorized", "DownwardMessagesReceived")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("code_hash", "count")), Ty(StringChange("T::Hash", "u32"))])] })]
    [≠]  4: DownwardMessagesReceived ( count: u32, )  )
        [Name(StringChange("DownwardMessagesReceived", "DownwardMessagesProcessed")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("count", "weight_used")), Ty(StringChange("u32", "Weight"))]), Added(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })]
    [≠]  5: DownwardMessagesProcessed ( weight_used: Weight, dmq_head: relay_chain::Hash, )  )
        [Name(StringChange("DownwardMessagesProcessed", "UpwardMessageSent")), Signature(SignatureChange { args: [Changed(0, [Name(StringChange("weight_used", "message_hash")), Ty(StringChange("Weight", "Option<XcmHash>"))]), Removed(1, ArgDesc { name: "dmq_head", ty: "relay_chain::Hash" })] })]
    [-] "UpwardMessageSent"

  - storages changes:
    [+] StorageDesc { name: "AggregatedUnincludedSegment", modifier: "Optional", default_value: [0] }
    [+] StorageDesc { name: "UnincludedSegment", modifier: "Default", default_value: [0] }
    [+] StorageDesc { name: "UpgradeGoAhead", modifier: "Default", default_value: [0] }
    [+] StorageDesc { name: "UpwardDeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] }
    [-] "AuthorizedUpgrade"

[≠] pallet 82: XcmpQueue -> 25 change(s)
  - calls changes:
    [-] "service_overweight"
    [-] "update_threshold_weight"
    [-] "update_weight_restrict_decay"
    [-] "update_xcmp_max_individual_weight"

  - events changes:
    [≠]  0: Success ( message_hash: XcmHash, message_id: XcmHash, weight: Weight, )  )
        [Name(StringChange("Success", "XcmpMessageSent")), Signature(SignatureChange { args: [Removed(1, ArgDesc { name: "message_id", ty: "XcmHash" }), Removed(2, ArgDesc { name: "weight", ty: "Weight" })] })]
    [-] "Fail"
    [-] "BadVersion"
    [-] "BadFormat"
    [-] "XcmpMessageSent"
    [-] "OverweightEnqueued"
    [-] "OverweightServiced"

  - errors changes:
    [≠]  0: FailedToSend    
        [Name(StringChange("FailedToSend", "BadQueueConfig"))]
    [≠]  1: BadXcmOrigin    
        [Name(StringChange("BadXcmOrigin", "AlreadySuspended"))]
    [≠]  2: BadXcm          
        [Name(StringChange("BadXcm", "AlreadyResumed"))]
    [-] "BadOverweightIndex"
    [-] "WeightOverLimit"

  - constants changes:
    [+] ConstantDesc { name: "MaxInboundSuspended", value: [0, 0, 0, 0] }

  - storages changes:
    [+] StorageDesc { name: "DeliveryFeeFactor", modifier: "Default", default_value: [0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0] }
    [+] StorageDesc { name: "InboundXcmpSuspended", modifier: "Default", default_value: [0] }
    [≠] Default  QueueConfig: [2, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0, 130, 26, 6, 0, 0, 8, 0, 7, 0, 200, 23, 168, 4, 2, 0, 4, 0]
        [DefaultValue([Changed(0, U8Change(2, 32)), Changed(4, U8Change(5, 48)), Changed(8, U8Change(1, 8)), Removed(12, 130), Removed(13, 26), Removed(14, 6), Removed(15, 0), Removed(16, 0), Removed(17, 8), Removed(18, 0), Removed(19, 7), Removed(20, 0), Removed(21, 200), Removed(22, 23), Removed(23, 168), Removed(24, 4), Removed(25, 2), Removed(26, 0), Removed(27, 4), Removed(28, 0)])]
    [-] "CounterForOverweight"
    [-] "InboundXcmpMessages"
    [-] "InboundXcmpStatus"
    [-] "Overweight"
    [-] "OverweightCount"

[≠] pallet 83: PolkadotXcm -> 35 change(s)
  - calls changes:
    [≠]  0: send ( dest: Box<VersionedMultiLocation>, message: Box<VersionedXcm<()>>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })]
    [≠]  1: teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [≠]  2: reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [≠]  3: execute ( message: Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>, max_weight: Weight, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedXcm<<T as SysConfig>::RuntimeCall>>", "Box<VersionedXcm<<T as Config>::RuntimeCall>>"))])] })]
    [≠]  4: force_xcm_version ( location: Box<MultiLocation>, version: XcmVersion, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<MultiLocation>", "Box<Location>"))])] })]
    [≠]  6: force_subscribe_version_notify ( location: Box<VersionedMultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })]
    [≠]  7: force_unsubscribe_version_notify ( location: Box<VersionedMultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))])] })]
    [≠]  8: limited_reserve_transfer_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [≠]  9: limited_teleport_assets ( dest: Box<VersionedMultiLocation>, beneficiary: Box<VersionedMultiLocation>, assets: Box<VersionedMultiAssets>, fee_asset_item: u32, weight_limit: WeightLimit, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(1, [Ty(StringChange("Box<VersionedMultiLocation>", "Box<VersionedLocation>"))]), Changed(2, [Ty(StringChange("Box<VersionedMultiAssets>", "Box<VersionedAssets>"))])] })]
    [+] CallDesc { index: 11, name: "transfer_assets", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "fee_asset_item", ty: "u32" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } }
    [+] CallDesc { index: 12, name: "claim_assets", signature: SignatureDesc { args: [ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "beneficiary", ty: "Box<VersionedLocation>" }] } }
    [+] CallDesc { index: 13, name: "transfer_assets_using_type_and_then", signature: SignatureDesc { args: [ArgDesc { name: "dest", ty: "Box<VersionedLocation>" }, ArgDesc { name: "assets", ty: "Box<VersionedAssets>" }, ArgDesc { name: "assets_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "remote_fees_id", ty: "Box<VersionedAssetId>" }, ArgDesc { name: "fees_transfer_type", ty: "Box<TransferType>" }, ArgDesc { name: "custom_xcm_on_dest", ty: "Box<VersionedXcm<()>>" }, ArgDesc { name: "weight_limit", ty: "WeightLimit" }] } }

  - events changes:
    [≠]  1: Sent ( origin: MultiLocation, destination: MultiLocation, message: Xcm<()>, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠]  2: UnexpectedResponse ( origin: MultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠]  8: InvalidResponder ( origin: MultiLocation, query_id: QueryId, expected_location: Option<MultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })]
    [≠]  9: InvalidResponderVersion ( origin: MultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 11: AssetsTrapped ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })]
    [≠] 12: VersionChangeNotified ( destination: MultiLocation, result: XcmVersion, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 13: SupportedVersionChanged ( location: MultiLocation, version: XcmVersion, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 14: NotifyTargetSendFail ( location: MultiLocation, query_id: QueryId, error: XcmError, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 15: NotifyTargetMigrationFail ( location: VersionedMultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("VersionedMultiLocation", "VersionedLocation"))])] })]
    [≠] 16: InvalidQuerierVersion ( origin: MultiLocation, query_id: QueryId, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))])] })]
    [≠] 17: InvalidQuerier ( origin: MultiLocation, query_id: QueryId, expected_querier: MultiLocation, maybe_actual_querier: Option<MultiLocation>, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("MultiLocation", "Location"))]), Changed(3, [Ty(StringChange("Option<MultiLocation>", "Option<Location>"))])] })]
    [≠] 18: VersionNotifyStarted ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 19: VersionNotifyRequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 20: VersionNotifyUnrequested ( destination: MultiLocation, cost: MultiAssets, message_id: XcmHash, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 21: FeesPaid ( paying: MultiLocation, fees: MultiAssets, )  )
        [Signature(SignatureChange { args: [Changed(0, [Ty(StringChange("MultiLocation", "Location"))]), Changed(1, [Ty(StringChange("MultiAssets", "Assets"))])] })]
    [≠] 22: AssetsClaimed ( hash: H256, origin: MultiLocation, assets: VersionedMultiAssets, )  )
        [Signature(SignatureChange { args: [Changed(1, [Ty(StringChange("MultiLocation", "Location"))]), Changed(2, [Ty(StringChange("VersionedMultiAssets", "VersionedAssets"))])] })]
    [+] EventDesc { index: 23, name: "VersionMigrationFinished", signature: SignatureDesc { args: [ArgDesc { name: "version", ty: "XcmVersion" }] } }

  - errors changes:
    [≠] 13: InvalidAsset    
        [Name(StringChange("InvalidAsset", "CannotCheckOutTeleport"))]
    [+] ErrorDesc { index: 20, name: "InvalidAssetNotConcrete" }
    [+] ErrorDesc { index: 21, name: "InvalidAssetUnknownReserve" }
    [+] ErrorDesc { index: 22, name: "InvalidAssetUnsupportedReserve" }
    [+] ErrorDesc { index: 23, name: "TooManyReserves" }
    [+] ErrorDesc { index: 24, name: "LocalExecutionIncomplete" }

[+] id: 86 - new pallet: MessageQueue
[-] pallet 85: DmpQueue
SUMMARY:
- Compatible.......................: false
- Require transaction_version bump.: true

!!! THE SUBWASM REDUCED DIFFER IS EXPERIMENTAL, DOUBLE CHECK THE RESULTS !!!
```

</details>
## Checklist:

- [ ] I have verified that the code works
- [ ] No panics! (checked arithmetic ops, no indexing `array[3]` use
`get(3)`, ...)
- [ ] I have verified that the code is easy to understand
  - [ ] If not, I have left a well-balanced amount of inline comments
- [ ] I have [left the code in a better
state](https://deviq.com/principles/boy-scout-rule)
- [ ] I have documented the changes (where applicable)
* Either PR or Ticket to update [the
Docs](https://github.com/KILTprotocol/docs)
    * Link the PR/Ticket here
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
T1-FRAME This PR/Issue is related to core FRAME, the framework. T2-pallets This PR/Issue is related to a particular pallet. T6-XCM This PR/Issue is related to XCM. T8-polkadot This PR/Issue is related to/affects the Polkadot network.
Projects
Status: Done
Status: Audited
Development

Successfully merging this pull request may close these issues.