git.delta.rocks / unique-network / refs/commits / 470ffd5ce9b5

difftreelog

Merge pull request #1060 from UniqueNetwork/feature/update-polkadot-1.9

Yaroslav Bolyukin2024-05-28parents: #c748379 #769ffcf.patch.diff
in: master
Update polkadot to v1.9.0

35 files changed

added.baedeker/xcm-opal-async-backing.jsonnetdiffbeforeafterboth
--- /dev/null
+++ b/.baedeker/xcm-opal-async-backing.jsonnet
@@ -0,0 +1,68 @@
+local
+m = import 'baedeker-library/mixin/spec.libsonnet',
+;
+
+function(relay_spec)
+
+local relay = {
+	name: 'relay',
+	bin: 'bin/polkadot',
+	validatorIdAssignment: 'staking',
+	spec: {Genesis:{
+		chain: relay_spec,
+		modify:: bdk.mixer([
+			m.genericRelay($),
+			{
+				genesis+: {
+					runtimeGenesis+: {
+						runtime+: {
+							configuration+: {
+								config+: {
+									async_backing_params+: {
+										allowed_ancestry_len: 3,
+										max_candidate_depth: 4,
+									},
+									scheduling_lookahead:5,
+									max_validators_per_core:1,
+									minimum_backing_votes:1,
+									needed_approvals:1,
+									on_demand_cores:5,
+								},
+							},
+						},
+					},
+				},
+			},
+		]),
+	}},
+	nodes: {
+		[name]: {
+			bin: $.bin,
+			wantedKeys: 'relay',
+		},
+		for name in ['alice', 'bob', 'charlie', 'dave', 'eve']
+	},
+};
+
+local opal = {
+	name: 'opal',
+	bin: 'bin/unique',
+	paraId: 1001,
+	spec: {Genesis:{
+		modify:: m.genericPara($),
+	}},
+	nodes: {
+		[name]: {
+			bin: $.bin,
+			wantedKeys: 'para',
+		},
+		for name in ['alice', 'bob', 'charlie', 'dave', 'eve']
+	},
+};
+
+relay + {
+	parachains: {
+		[para.name]: para,
+		for para in [opal]
+	},
+}
modifiedCargo.lockdiffbeforeafterboth
before · Cargo.lock
1211 packageslockfile v3
modifiedCargo.tomldiffbeforeafterboth
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -31,10 +31,10 @@
 [workspace.dependencies]
 # Unique
 app-promotion-rpc = { path = "primitives/app_promotion_rpc", default-features = false }
-evm-coder = { version = "0.4.2", default-features = false, features = ['bondrewd'] }
+evm-coder = { version = "0.4.3", default-features = false, features = ['bondrewd'] }
 pallet-app-promotion = { path = "pallets/app-promotion", default-features = false }
 pallet-balances-adapter = { default-features = false, path = "pallets/balances-adapter" }
-pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v1.3.0" }
+pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v1.9.0" }
 pallet-collator-selection = { default-features = false, path = "pallets/collator-selection" }
 pallet-common = { default-features = false, path = "pallets/common" }
 pallet-configuration = { default-features = false, path = "pallets/configuration" }
@@ -61,7 +61,7 @@
 up-data-structs = { path = "primitives/data-structs", default-features = false }
 up-pov-estimate-rpc = { path = "primitives/pov-estimate-rpc", default-features = false }
 up-rpc = { path = "primitives/rpc", default-features = false }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v1.3.0" }
+up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v1.9.0" }
 
 # Unique: Runtimes
 opal-runtime = { path = "runtime/opal" }
@@ -69,149 +69,154 @@
 unique-runtime = { path = "runtime/unique" }
 
 # Frontier (Unique patches over the Parity version)
-fc-api = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
-fc-consensus = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
-fc-db = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
-fc-mapping-sync = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
-fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
-fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+fc-api = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
+fc-consensus = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
+fc-db = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
+fc-mapping-sync = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
+fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
+fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
+fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
+fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
 fp-self-contained = { default-features = false, features = [
 	"serde",
-], git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
-fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
-pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
-pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+], git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
+fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
+pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
+pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.9.0" }
 
 # Parity
 codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.6.5" }
-cumulus-client-cli = "0.4.0"
-cumulus-client-collator = "0.4.0"
-cumulus-client-consensus-aura = "0.4.0"
-cumulus-client-consensus-common = "0.4.0"
-cumulus-client-consensus-proposer = "0.4.0"
-cumulus-client-network = "0.4.0"
-cumulus-client-service = "0.4.0"
-cumulus-pallet-aura-ext = { default-features = false, version = "0.4.0" }
-cumulus-pallet-dmp-queue = { default-features = false, version = "0.4.0" }
-cumulus-pallet-parachain-system = { default-features = false, version = "0.4.0" }
-cumulus-pallet-xcm = { default-features = false, version = "0.4.0" }
-cumulus-pallet-xcmp-queue = { default-features = false, version = "0.4.0" }
-cumulus-primitives-aura = { default-features = false, version = "0.4.0" }
-cumulus-primitives-core = { default-features = false, version = "0.4.0" }
-cumulus-primitives-parachain-inherent = { default-features = false, version = "0.4.0" }
-cumulus-primitives-timestamp = { default-features = false, version = "0.4.0" }
-cumulus-primitives-utility = { default-features = false, version = "0.4.0" }
-cumulus-relay-chain-inprocess-interface = "0.4.0"
-cumulus-relay-chain-interface = "0.4.0"
-cumulus-relay-chain-minimal-node = "0.4.0"
-frame-executive = { default-features = false, version = "25.0.0" }
-frame-support = { default-features = false, version = "25.0.0" }
-frame-system = { default-features = false, version = "25.0.0" }
-frame-system-rpc-runtime-api = { default-features = false, version = "23.0.0" }
-pallet-aura = { default-features = false, version = "24.0.0" }
-pallet-authorship = { default-features = false, version = "25.0.0" }
-pallet-balances = { default-features = false, version = "25.0.0" }
-pallet-collective = { default-features = false, version = "25.0.0" }
-pallet-democracy = { default-features = false, version = "25.0.0" }
-pallet-membership = { default-features = false, version = "25.0.0" }
-pallet-preimage = { default-features = false, version = "25.0.0" }
-pallet-ranked-collective = { default-features = false, version = "25.0.0" }
-pallet-referenda = { default-features = false, version = "25.0.0" }
-pallet-scheduler = { default-features = false, version = "26.0.0" }
-pallet-session = { default-features = false, version = "25.0.0" }
-pallet-state-trie-migration = { default-features = false, version = "26.0.0" }
-pallet-sudo = { default-features = false, version = "25.0.0" }
-pallet-timestamp = { default-features = false, version = "24.0.0" }
-pallet-transaction-payment = { default-features = false, version = "25.0.0" }
-pallet-transaction-payment-rpc = "27.0.0"
-pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = "25.0.0" }
-pallet-treasury = { default-features = false, version = "24.0.0" }
-pallet-utility = { default-features = false, version = "25.0.0" }
-pallet-xcm = { default-features = false, version = "4.0.0" }
+cumulus-client-cli = "0.10.0"
+cumulus-client-collator = "0.10.0"
+cumulus-client-consensus-aura = "0.10.0"
+cumulus-client-consensus-common = "0.10.0"
+cumulus-client-consensus-proposer = "0.10.0"
+cumulus-client-network = "0.10.0"
+cumulus-client-service = "0.10.0"
+cumulus-client-parachain-inherent = "0.4.0"
+cumulus-pallet-aura-ext = { default-features = false, version = "0.10.0" }
+cumulus-pallet-dmp-queue = { default-features = false, version = "0.10.0" }
+cumulus-pallet-parachain-system = { default-features = false, version = "0.10.0" }
+cumulus-pallet-xcm = { default-features = false, version = "0.10.0" }
+cumulus-pallet-xcmp-queue = { default-features = false, version = "0.10.0" }
+cumulus-primitives-aura = { default-features = false, version = "0.10.0" }
+cumulus-primitives-core = { default-features = false, version = "0.10.0" }
+cumulus-primitives-parachain-inherent = { default-features = false, version = "0.10.0" }
+cumulus-primitives-timestamp = { default-features = false, version = "0.10.0" }
+cumulus-primitives-utility = { default-features = false, version = "0.10.0" }
+cumulus-relay-chain-inprocess-interface = "0.10.0"
+cumulus-relay-chain-interface = "0.10.0"
+cumulus-relay-chain-minimal-node = "0.10.0"
+parachains-common = { default-features = false, version = "10.0.0"}
+frame-executive = { default-features = false, version = "31.0.0" }
+frame-support = { default-features = false, version = "31.0.0" }
+frame-system = { default-features = false, version = "31.0.0" }
+frame-system-rpc-runtime-api = { default-features = false, version = "29.0.0" }
+pallet-aura = { default-features = false, version = "30.0.0" }
+pallet-authorship = { default-features = false, version = "31.0.0" }
+pallet-balances = { default-features = false, version = "31.0.0" }
+pallet-collective = { default-features = false, version = "31.0.0" }
+pallet-democracy = { default-features = false, version = "31.0.0" }
+pallet-membership = { default-features = false, version = "31.0.0" }
+pallet-preimage = { default-features = false, version = "31.0.0" }
+pallet-ranked-collective = { default-features = false, version = "31.0.0" }
+pallet-referenda = { default-features = false, version = "31.0.0" }
+pallet-scheduler = { default-features = false, version = "32.0.0" }
+pallet-session = { default-features = false, version = "31.0.0" }
+pallet-state-trie-migration = { default-features = false, version = "32.0.0" }
+pallet-sudo = { default-features = false, version = "31.0.0" }
+pallet-timestamp = { default-features = false, version = "30.0.0" }
+pallet-transaction-payment = { default-features = false, version = "31.0.0" }
+pallet-transaction-payment-rpc = "33.0.0"
+pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = "31.0.0" }
+pallet-treasury = { default-features = false, version = "30.0.0" }
+pallet-utility = { default-features = false, version = "31.0.0" }
+pallet-xcm = { default-features = false, version = "10.0.1" }
+pallet-message-queue = { default-features = false, version = "34.0.0" }
 parity-scale-codec = { version = "3.6.5", features = ["derive"], default-features = false }
-polkadot-cli = "4.0.0"
-polkadot-parachain-primitives = { default-features = false, version = "3.0.0" }
-polkadot-primitives = "4.0.0"
-polkadot-runtime-common = { default-features = false, version = "4.0.0" }
-polkadot-service = "4.0.0"
-sc-basic-authorship = "0.31.0"
-sc-chain-spec = "24.0.0"
-sc-cli = "0.33.0"
-sc-client-api = "25.0.0"
-sc-consensus = "0.30.0"
-sc-consensus-manual-seal = "0.32.0"
-sc-executor = "0.29.0"
-sc-network = "0.31.0"
-sc-network-sync = "0.30.0"
-sc-rpc = "26.0.0"
-sc-rpc-api = "0.30.0"
-sc-service = "0.32.0"
-sc-sysinfo = "24.0.0"
-sc-telemetry = "12.0.0"
-sc-tracing = "25.0.0"
-sc-transaction-pool = "25.0.0"
+polkadot-cli = "10.0.0"
+polkadot-parachain-primitives = { default-features = false, version = "9.0.0" }
+polkadot-primitives = "10.0.0"
+polkadot-runtime-common = { default-features = false, version = "10.0.0" }
+polkadot-service = "10.0.0"
+sc-basic-authorship = "0.37.0"
+sc-chain-spec = "30.0.0"
+sc-cli = "0.39.0"
+sc-client-api = "31.0.0"
+sc-consensus = "0.36.0"
+sc-consensus-manual-seal = "0.38.0"
+sc-executor = "0.35.0"
+sc-network = "0.37.0"
+sc-network-sync = "0.36.0"
+sc-rpc = "32.0.0"
+sc-rpc-api = "0.36.0"
+sc-service = "0.38.0"
+sc-sysinfo = "30.0.0"
+sc-telemetry = "17.0.0"
+sc-tracing = "31.0.0"
+sc-transaction-pool = "31.0.0"
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
-sp-api = { default-features = false, version = "23.0.0" }
-sp-arithmetic = { default-features = false, version = "20.0.0" }
-sp-block-builder = { default-features = false, version = "23.0.0" }
-sp-blockchain = "25.0.0"
-sp-consensus-aura = { default-features = false, version = "0.29.0" }
-sp-core = { default-features = false, version = "25.0.0" }
-sp-externalities = "0.23.0"
-sp-inherents = { default-features = false, version = "23.0.0" }
-sp-io = { default-features = false, version = "27.0.0" }
-sp-keystore = "0.31.0"
-sp-offchain = { default-features = false, version = "23.0.0" }
-sp-runtime = { default-features = false, version = "28.0.0" }
-sp-session = { default-features = false, version = "24.0.0" }
-sp-staking = { default-features = false, version = "23.0.0" }
-sp-state-machine = "0.32.0"
-sp-std = { default-features = false, version = "12.0.0" }
-sp-storage = { default-features = false, version = "17.0.0" }
-sp-timestamp = "23.0.0"
-sp-tracing = "14.0.0"
-sp-transaction-pool = { default-features = false, version = "23.0.0" }
-sp-trie = { default-features = false, version = "26.0.0" }
-sp-version = { default-features = false, version = "26.0.0" }
-sp-weights = { default-features = false, version = "24.0.0" }
-staging-parachain-info = { default-features = false, version = "0.4.0" }
-staging-xcm = { default-features = false, version = "4.0.0" }
-staging-xcm-builder = { default-features = false, version = "4.0.0" }
-staging-xcm-executor = { default-features = false, version = "4.0.0" }
-substrate-frame-rpc-system = "25.0.0"
-substrate-prometheus-endpoint = "0.16.0"
+sp-api = { default-features = false, version = "29.0.0" }
+sp-arithmetic = { default-features = false, version = "25.0.0" }
+sp-block-builder = { default-features = false, version = "29.0.0" }
+sp-blockchain = "31.0.0"
+sp-consensus-aura = { default-features = false, version = "0.35.0" }
+sp-core = { default-features = false, version = "31.0.0" }
+sp-externalities = "0.27.0"
+sp-inherents = { default-features = false, version = "29.0.0" }
+sp-io = { default-features = false, version = "33.0.0" }
+sp-keystore = "0.37.0"
+sp-offchain = { default-features = false, version = "29.0.0" }
+sp-runtime = { default-features = false, version = "34.0.0" }
+sp-session = { default-features = false, version = "30.0.0" }
+sp-staking = { default-features = false, version = "29.0.0" }
+sp-state-machine = "0.38.0"
+sp-std = { default-features = false, version = "14.0.0" }
+sp-storage = { default-features = false, version = "20.0.0" }
+sp-timestamp = "29.0.0"
+sp-tracing = "16.0.0"
+sp-transaction-pool = { default-features = false, version = "29.0.0" }
+sp-trie = { default-features = false, version = "32.0.0" }
+sp-version = { default-features = false, version = "32.0.0" }
+sp-weights = { default-features = false, version = "30.0.0" }
+sp-genesis-builder = { default-features = false, version = "0.10.0" }
+staging-parachain-info = { default-features = false, version = "0.10.0" }
+staging-xcm = { default-features = false, version = "10.0.0" }
+staging-xcm-builder = { default-features = false, version = "10.0.0" }
+staging-xcm-executor = { default-features = false, version = "10.0.0" }
+substrate-frame-rpc-system = "31.0.0"
+substrate-prometheus-endpoint = "0.17.0"
 
 # Parity: Build utils
-substrate-build-script-utils = "9.0.0"
-substrate-wasm-builder = "14.0.0"
+substrate-build-script-utils = "11.0.0"
+substrate-wasm-builder = "20.0.0"
 
 # Parity: Benchmarking
-frame-benchmarking = { default-features = false, version = "25.0.0" }
-frame-benchmarking-cli = "29.0.0"
-frame-system-benchmarking = { default-features = false, version = "25.0.0" }
+frame-benchmarking = { default-features = false, version = "31.0.0" }
+frame-benchmarking-cli = "35.0.0"
+frame-system-benchmarking = { default-features = false, version = "31.0.0" }
 
 # Parity: Try Runtime
-frame-try-runtime = { default-features = false, version = "0.31.0" }
-try-runtime-cli = "0.35.0"
+frame-try-runtime = { default-features = false, version = "0.37.0" }
+try-runtime-cli = "0.41.0"
 
 # ORML
-orml-traits = { default-features = false, git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v1.3.0" }
-orml-vesting = { default-features = false, git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v1.3.0" }
-orml-xcm-support = { default-features = false, git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v1.3.0" }
-orml-xtokens = { default-features = false, git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v1.3.0" }
+orml-traits = { version = "0.9.1", default-features = false }
+orml-vesting = { version = "0.9.1", default-features = false }
+orml-xcm-support = { version = "0.9.1", default-features = false }
+orml-xtokens = { version = "0.9.1", default-features = false }
 
 # Other
 derivative = { version = "2.2.0", features = ["use_core"] }
-ethereum = { version = "0.14.0", default-features = false }
-evm-core = { git = "https://github.com/rust-blockchain/evm", rev = "b7b82c7e1fc57b7449d6dfa6826600de37cc1e65", default-features = false }
+ethereum = { version = "0.15.0", default-features = false, features = ["with-codec"] }
+evm-core = { version = "0.41.0", default-features = false }
 hex-literal = "0.4.1"
 impl-trait-for-tuples = "0.2.2"
-jsonrpsee = { version = "0.16.3", features = ["macros", "server"] }
+jsonrpsee = { version = "0.22.5", features = ["macros", "server"] }
 log = { version = "0.4.20", default-features = false }
 num_enum = { version = "0.7.0", default-features = false }
 serde = { default-features = false, features = ['derive'], version = "1.0.188" }
+serde_json = "1"
 smallvec = "1.11.1"
modifiedclient/rpc/Cargo.tomldiffbeforeafterboth
--- a/client/rpc/Cargo.toml
+++ b/client/rpc/Cargo.toml
@@ -5,8 +5,7 @@
 version = "0.1.4"
 
 [dependencies]
-anyhow = "1.0.75"
-jsonrpsee = { version = "0.16.3", features = ["macros", "server"] }
+jsonrpsee = { workspace = true }
 parity-scale-codec = { workspace = true }
 trie-db = { version = "0.27.1", default-features = false }
 zstd = { version = "0.12.4", default-features = false }
modifiedclient/rpc/src/lib.rsdiffbeforeafterboth
--- a/client/rpc/src/lib.rs
+++ b/client/rpc/src/lib.rs
@@ -17,14 +17,13 @@
 // Original License
 use std::sync::Arc;
 
-use anyhow::anyhow;
 use app_promotion_rpc::AppPromotionApi as AppPromotionRuntimeApi;
 pub use app_promotion_unique_rpc::AppPromotionApiServer;
-use jsonrpsee::{core::RpcResult as Result, proc_macros::rpc};
+use jsonrpsee::{core::RpcResult as Result, proc_macros::rpc, types::ErrorCode};
 use parity_scale_codec::Decode;
-use sp_api::{ApiExt, BlockT, ProvideRuntimeApi};
+use sp_api::{ApiExt, ProvideRuntimeApi};
 use sp_blockchain::HeaderBackend;
-use sp_runtime::traits::{AtLeast32BitUnsigned, Member};
+use sp_runtime::traits::{AtLeast32BitUnsigned, Block as BlockT, Member};
 use up_data_structs::{
 	CollectionId, CollectionLimits, CollectionStats, Property, PropertyKeyPermission,
 	RpcCollection, TokenChild, TokenData, TokenId,
@@ -345,7 +344,7 @@
 				api_version
 			} else {
 				// unreachable for our runtime
-				return Err(anyhow!("api is not available").into())
+				return Err(ErrorCode::MethodNotFound.into())
 			};
 
 			let result = $(if _api_version < $ver {
@@ -354,8 +353,8 @@
 			{ api.$method_name(at, $($($map)? ($name)),*) };
 
 			Ok(result
-				.map_err(|e| anyhow!("unable to query: {e}"))?
-				.map_err(|e| anyhow!("runtime error: {e:?}"))$(.map($mapper))??)
+				.map_err(|_| ErrorCode::InternalError /* TODO proper error */)?
+				.map_err(|_| ErrorCode::InvalidParams)$(.map($mapper))??)
 		}
 	};
 }
@@ -513,7 +512,7 @@
 	{
 		api_version
 	} else {
-		return Err(anyhow!("api is not available").into());
+		return Err(ErrorCode::MethodNotFound.into());
 	};
 	let result = if api_version >= 3 {
 		api.token_data(at, collection, token_id, string_keys_to_bytes_keys(keys))
@@ -537,8 +536,8 @@
 			})
 	};
 	Ok(result
-		.map_err(|e| anyhow!("unable to query: {e}"))?
-		.map_err(|e| anyhow!("runtime error: {e:?}"))?)
+		.map_err(|_| ErrorCode::InternalError /* TODO proper error */)?
+		.map_err(|_| ErrorCode::InvalidParams)?)
 }
 
 fn string_keys_to_bytes_keys(keys: Option<Vec<String>>) -> Option<Vec<Vec<u8>>> {
modifiedjs-packages/tests/pallet-presence.test.tsdiffbeforeafterboth
--- a/js-packages/tests/pallet-presence.test.ts
+++ b/js-packages/tests/pallet-presence.test.ts
@@ -49,6 +49,7 @@
   'configuration',
   'xtokens',
   'maintenance',
+  'messagequeue',
 ];
 
 // Pallets that depend on consensus and governance configuration
modifiednode/cli/Cargo.tomldiffbeforeafterboth
--- a/node/cli/Cargo.toml
+++ b/node/cli/Cargo.toml
@@ -42,6 +42,7 @@
 cumulus-relay-chain-inprocess-interface = { workspace = true }
 cumulus-relay-chain-interface = { workspace = true }
 cumulus-relay-chain-minimal-node = { workspace = true }
+cumulus-client-parachain-inherent = { workspace = true }
 frame-benchmarking = { workspace = true }
 frame-benchmarking-cli = { workspace = true }
 opal-runtime = { workspace = true, optional = true }
@@ -66,6 +67,7 @@
 sc-transaction-pool = { workspace = true }
 serde = { workspace = true }
 sp-api = { workspace = true }
+sp-state-machine = { workspace = true }
 sp-block-builder = { workspace = true }
 sp-blockchain = { workspace = true }
 sp-consensus-aura = { workspace = true }
modifiednode/cli/src/chain_spec.rsdiffbeforeafterboth
--- a/node/cli/src/chain_spec.rs
+++ b/node/cli/src/chain_spec.rs
@@ -14,8 +14,7 @@
 // You should have received a copy of the GNU General Public License
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
-use std::collections::BTreeMap;
-
+use default_runtime::WASM_BINARY;
 #[cfg(all(not(feature = "unique-runtime"), not(feature = "quartz-runtime")))]
 pub use opal_runtime as default_runtime;
 #[cfg(all(not(feature = "unique-runtime"), feature = "quartz-runtime"))]
@@ -23,7 +22,7 @@
 use sc_chain_spec::{ChainSpecExtension, ChainSpecGroup};
 use sc_service::ChainType;
 use serde::{Deserialize, Serialize};
-use serde_json::map::Map;
+use serde_json::{json, map::Map};
 use sp_core::{sr25519, Pair, Public};
 use sp_runtime::traits::{IdentifyAccount, Verify};
 #[cfg(feature = "unique-runtime")]
@@ -140,194 +139,103 @@
 {
 	AccountPublic::from(get_from_seed::<TPublic>(seed)).into_account()
 }
-
-#[cfg(not(feature = "unique-runtime"))]
-macro_rules! testnet_genesis {
-	(
-		$runtime:path,
-		$root_key:expr,
-		$initial_invulnerables:expr,
-		$endowed_accounts:expr,
-		$id:expr
-	) => {{
-		use $runtime::*;
-
-		RuntimeGenesisConfig {
-			system: SystemConfig {
-				code: WASM_BINARY
-					.expect("WASM binary was not build, please build it!")
-					.to_vec(),
-				..Default::default()
-			},
-			balances: BalancesConfig {
-				balances: $endowed_accounts
-					.iter()
-					.cloned()
-					// 1e13 UNQ
-					.map(|k| (k, 1 << 100))
-					.collect(),
-			},
-			sudo: SudoConfig {
-				key: Some($root_key),
-			},
 
-			vesting: VestingConfig { vesting: vec![] },
-			parachain_info: ParachainInfoConfig {
-				parachain_id: $id.into(),
-				..Default::default()
-			},
-			collator_selection: CollatorSelectionConfig {
-				invulnerables: $initial_invulnerables
-					.iter()
-					.cloned()
-					.map(|(acc, _)| acc)
-					.collect(),
-			},
-			session: SessionConfig {
-				keys: $initial_invulnerables
-					.into_iter()
-					.map(|(acc, aura)| {
-						(
-							acc.clone(),          // account id
-							acc,                  // validator id
-							SessionKeys { aura }, // session keys
-						)
-					})
-					.collect(),
-			},
-			evm: EVMConfig {
-				accounts: BTreeMap::new(),
-				..Default::default()
-			},
-			..Default::default()
+pub fn test_config(chain_id: &str, relay_chain: &str) -> DefaultChainSpec {
+	DefaultChainSpec::builder(
+		WASM_BINARY.expect("WASM binary was not build, please build it!"),
+		Extensions {
+			relay_chain: relay_chain.into(),
+			para_id: PARA_ID,
+		},
+	)
+	.with_id(&format!(
+		"{}_{}",
+		default_runtime::VERSION.spec_name,
+		chain_id
+	))
+	.with_name(&format!(
+		"{}{}",
+		default_runtime::VERSION.spec_name.to_uppercase(),
+		if cfg!(feature = "unique-runtime") {
+			""
+		} else {
+			" by UNIQUE"
 		}
-	}};
+	))
+	.with_properties(chain_properties())
+	.with_chain_type(ChainType::Development)
+	.with_genesis_config_patch(genesis_patch())
+	.build()
 }
 
-#[cfg(feature = "unique-runtime")]
-macro_rules! testnet_genesis {
-	(
-		$runtime:path,
-		$root_key:expr,
-		$initial_invulnerables:expr,
-		$endowed_accounts:expr,
-		$id:expr
-	) => {{
-		use $runtime::*;
+fn genesis_patch() -> serde_json::Value {
+	use default_runtime::*;
 
-		RuntimeGenesisConfig {
-			system: SystemConfig {
-				code: WASM_BINARY
-					.expect("WASM binary was not build, please build it!")
-					.to_vec(),
-				..Default::default()
-			},
-			balances: BalancesConfig {
-				balances: $endowed_accounts
-					.iter()
-					.cloned()
-					// 1e13 UNQ
-					.map(|k| (k, 1 << 100))
-					.collect(),
-			},
-			sudo: SudoConfig {
-				key: Some($root_key),
-			},
-			vesting: VestingConfig { vesting: vec![] },
-			parachain_info: ParachainInfoConfig {
-				parachain_id: $id.into(),
-				..Default::default()
-			},
-			aura: AuraConfig {
-				authorities: $initial_invulnerables
-					.into_iter()
-					.map(|(_, aura)| aura)
-					.collect(),
-			},
-			evm: EVMConfig {
-				accounts: BTreeMap::new(),
-				..Default::default()
-			},
-			..Default::default()
-		}
-	}};
-}
+	let invulnerables = ["Alice", "Bob"];
+
+	#[allow(unused_mut)]
+	let mut patch = json!({
+		"parachainInfo": {
+			"parachainId": PARA_ID,
+		},
+
+		"aura": {
+			"authorities": invulnerables.into_iter()
+				.map(get_from_seed::<AuraId>)
+				.collect::<Vec<_>>(),
+		},
 
-pub fn development_config() -> DefaultChainSpec {
-	let mut properties = Map::new();
-	properties.insert("tokenSymbol".into(), default_runtime::TOKEN_SYMBOL.into());
-	properties.insert("tokenDecimals".into(), default_runtime::DECIMALS.into());
-	properties.insert(
-		"ss58Format".into(),
-		default_runtime::SS58Prefix::get().into(),
-	);
+		"session": {
+			"keys": invulnerables.into_iter()
+				.map(|name| {
+					let account = get_account_id_from_seed::<sr25519::Public>(name);
+					let aura = get_from_seed::<AuraId>(name);
 
-	DefaultChainSpec::from_genesis(
-		// Name
-		format!(
-			"{}{}",
-			default_runtime::VERSION.spec_name.to_uppercase(),
-			if cfg!(feature = "unique-runtime") {
-				""
-			} else {
-				" by UNIQUE"
-			}
-		)
-		.as_str(),
-		// ID
-		format!("{}_dev", default_runtime::VERSION.spec_name).as_str(),
-		ChainType::Local,
-		move || {
-			testnet_genesis!(
-				default_runtime,
-				// Sudo account
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				[
 					(
-						get_account_id_from_seed::<sr25519::Public>("Alice"),
-						get_from_seed::<AuraId>("Alice"),
-					),
-					(
-						get_account_id_from_seed::<sr25519::Public>("Bob"),
-						get_from_seed::<AuraId>("Bob"),
-					),
-				],
-				// Pre-funded accounts
-				vec![
-					get_account_id_from_seed::<sr25519::Public>("Alice"),
-					get_account_id_from_seed::<sr25519::Public>("Bob"),
-					get_account_id_from_seed::<sr25519::Public>("Charlie"),
-					get_account_id_from_seed::<sr25519::Public>("Dave"),
-					get_account_id_from_seed::<sr25519::Public>("Eve"),
-					get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-					get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-					get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-					get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-					get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-					get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-					get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
-				],
-				PARA_ID
-			)
+						/*   account id: */ account.clone(),
+						/* validator id: */ account,
+						/* session keys: */ SessionKeys { aura },
+					)
+				})
+				.collect::<Vec<_>>()
 		},
-		// Bootnodes
-		vec![],
-		// Telemetry
-		None,
-		// Protocol ID
-		None,
-		None,
-		// Properties
-		Some(properties),
-		// Extensions
-		Extensions {
-			relay_chain: "rococo-dev".into(),
-			para_id: PARA_ID,
+
+		"sudo": {
+			"key": get_account_id_from_seed::<sr25519::Public>("Alice"),
 		},
-	)
+
+		"balances": {
+			"balances": &[
+				get_account_id_from_seed::<sr25519::Public>("Alice"),
+				get_account_id_from_seed::<sr25519::Public>("Bob"),
+				get_account_id_from_seed::<sr25519::Public>("Charlie"),
+				get_account_id_from_seed::<sr25519::Public>("Dave"),
+				get_account_id_from_seed::<sr25519::Public>("Eve"),
+				get_account_id_from_seed::<sr25519::Public>("Ferdie"),
+				get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
+				get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
+			].into_iter()
+			.map(|k| (k, /* ~1.2e+12 UNQ */ 1u128 << 100))
+			.collect::<Vec<_>>(),
+		},
+	});
+
+	#[cfg(feature = "unique-runtime")]
+	{
+		patch
+			.as_object_mut()
+			.expect("the genesis patch is always an object; qed")
+			.remove("session");
+	}
+
+	patch
 }
 
-pub fn local_testnet_config() -> DefaultChainSpec {
+fn chain_properties() -> sc_chain_spec::Properties {
 	let mut properties = Map::new();
 	properties.insert("tokenSymbol".into(), default_runtime::TOKEN_SYMBOL.into());
 	properties.insert("tokenDecimals".into(), default_runtime::DECIMALS.into());
@@ -336,67 +244,5 @@
 		default_runtime::SS58Prefix::get().into(),
 	);
 
-	DefaultChainSpec::from_genesis(
-		// Name
-		format!(
-			"{}{}",
-			default_runtime::VERSION.impl_name.to_uppercase(),
-			if cfg!(feature = "unique-runtime") {
-				""
-			} else {
-				" by UNIQUE"
-			}
-		)
-		.as_str(),
-		// ID
-		format!("{}_local", default_runtime::VERSION.spec_name).as_str(),
-		ChainType::Local,
-		move || {
-			testnet_genesis!(
-				default_runtime,
-				// Sudo account
-				get_account_id_from_seed::<sr25519::Public>("Alice"),
-				[
-					(
-						get_account_id_from_seed::<sr25519::Public>("Alice"),
-						get_from_seed::<AuraId>("Alice"),
-					),
-					(
-						get_account_id_from_seed::<sr25519::Public>("Bob"),
-						get_from_seed::<AuraId>("Bob"),
-					),
-				],
-				// Pre-funded accounts
-				vec![
-					get_account_id_from_seed::<sr25519::Public>("Alice"),
-					get_account_id_from_seed::<sr25519::Public>("Bob"),
-					get_account_id_from_seed::<sr25519::Public>("Charlie"),
-					get_account_id_from_seed::<sr25519::Public>("Dave"),
-					get_account_id_from_seed::<sr25519::Public>("Eve"),
-					get_account_id_from_seed::<sr25519::Public>("Ferdie"),
-					get_account_id_from_seed::<sr25519::Public>("Alice//stash"),
-					get_account_id_from_seed::<sr25519::Public>("Bob//stash"),
-					get_account_id_from_seed::<sr25519::Public>("Charlie//stash"),
-					get_account_id_from_seed::<sr25519::Public>("Dave//stash"),
-					get_account_id_from_seed::<sr25519::Public>("Eve//stash"),
-					get_account_id_from_seed::<sr25519::Public>("Ferdie//stash"),
-				],
-				PARA_ID
-			)
-		},
-		// Bootnodes
-		vec![],
-		// Telemetry
-		None,
-		// Protocol ID
-		None,
-		None,
-		// Properties
-		Some(properties),
-		// Extensions
-		Extensions {
-			relay_chain: "westend-local".into(),
-			para_id: PARA_ID,
-		},
-	)
+	properties
 }
modifiednode/cli/src/cli.rsdiffbeforeafterboth
--- a/node/cli/src/cli.rs
+++ b/node/cli/src/cli.rs
@@ -24,7 +24,7 @@
 #[derive(Debug, Parser)]
 pub enum Subcommand {
 	/// Export the genesis state of the parachain.
-	ExportGenesisState(cumulus_client_cli::ExportGenesisStateCommand),
+	ExportGenesisState(cumulus_client_cli::ExportGenesisHeadCommand),
 
 	/// Export the genesis wasm of the parachain.
 	ExportGenesisWasm(cumulus_client_cli::ExportGenesisWasmCommand),
modifiednode/cli/src/command.rsdiffbeforeafterboth
--- a/node/cli/src/command.rs
+++ b/node/cli/src/command.rs
@@ -63,8 +63,8 @@
 
 fn load_spec(id: &str) -> std::result::Result<Box<dyn sc_service::ChainSpec>, String> {
 	Ok(match id {
-		"dev" => Box::new(chain_spec::development_config()),
-		"" | "local" => Box::new(chain_spec::local_testnet_config()),
+		"dev" => Box::new(chain_spec::test_config("dev", "rococo-dev")),
+		"" | "local" => Box::new(chain_spec::test_config("local", "westend-local")),
 		path => {
 			let path = std::path::PathBuf::from(path);
 			#[allow(clippy::redundant_clone)]
@@ -337,10 +337,7 @@
 			Ok(cmd.run(components.client, components.backend, None))
 		}),
 		Some(Subcommand::ExportGenesisState(cmd)) => {
-			construct_sync_run!(|components, cli, cmd, _config| {
-				let spec = cli.load_spec(&cmd.shared_params.chain.clone().unwrap_or_default())?;
-				cmd.run(&*spec, &*components.client)
-			})
+			construct_sync_run!(|components, cli, cmd, _config| cmd.run(components.client))
 		}
 		Some(Subcommand::ExportGenesisWasm(cmd)) => {
 			construct_sync_run!(|_components, cli, cmd, _config| {
@@ -352,13 +349,17 @@
 		Some(Subcommand::Benchmark(cmd)) => {
 			use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE};
 			use polkadot_cli::Block;
-			use sp_io::SubstrateHostFunctions;
 
+			use crate::service::ParachainHostFunctions;
+
+			type Header = <Block as sp_runtime::traits::Block>::Header;
+			type Hasher = <Header as sp_runtime::traits::Header>::Hashing;
+
 			let runner = cli.create_runner(cmd)?;
 			// Switch on the concrete benchmark sub-command-
 			match cmd {
 				BenchmarkCmd::Pallet(cmd) => {
-					runner.sync_run(|config| cmd.run::<Block, SubstrateHostFunctions>(config))
+					runner.sync_run(|config| cmd.run::<Hasher, ParachainHostFunctions>(config))
 				}
 				BenchmarkCmd::Block(cmd) => runner.sync_run(|config| {
 					let partials = new_partial::<
@@ -402,7 +403,7 @@
 			use std::{future::Future, pin::Pin};
 
 			use polkadot_cli::Block;
-			use sc_executor::{sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch};
+			use sc_executor::NativeExecutionDispatch;
 			use try_runtime_cli::block_building_info::timestamp_with_aura_info;
 
 			let runner = cli.create_runner(cmd)?;
@@ -422,21 +423,27 @@
 				Ok((
 					match config.chain_spec.runtime_id() {
 						#[cfg(feature = "unique-runtime")]
-						RuntimeId::Unique => Box::pin(cmd.run::<Block, ExtendedHostFunctions<
-							sp_io::SubstrateHostFunctions,
-							<UniqueRuntimeExecutor as NativeExecutionDispatch>::ExtendHostFunctions,
-						>, _>(info_provider)),
+						RuntimeId::Unique => Box::pin(
+							cmd
+								.run::<Block, <UniqueRuntimeExecutor as NativeExecutionDispatch>::ExtendHostFunctions, _>(
+								info_provider,
+							),
+						),
 
 						#[cfg(feature = "quartz-runtime")]
-						RuntimeId::Quartz => Box::pin(cmd.run::<Block, ExtendedHostFunctions<
-							sp_io::SubstrateHostFunctions,
-							<QuartzRuntimeExecutor as NativeExecutionDispatch>::ExtendHostFunctions,
-						>, _>(info_provider)),
+						RuntimeId::Quartz => Box::pin(
+							cmd
+								.run::<Block, <QuartzRuntimeExecutor as NativeExecutionDispatch>::ExtendHostFunctions, _>(
+								info_provider,
+							),
+						),
 
-						RuntimeId::Opal => Box::pin(cmd.run::<Block, ExtendedHostFunctions<
-							sp_io::SubstrateHostFunctions,
-							<OpalRuntimeExecutor as NativeExecutionDispatch>::ExtendHostFunctions,
-						>, _>(info_provider)),
+						RuntimeId::Opal => Box::pin(
+							cmd
+								.run::<Block, <OpalRuntimeExecutor as NativeExecutionDispatch>::ExtendHostFunctions, _>(
+								info_provider,
+							),
+						),
 						runtime_id => return Err(no_runtime_err!(runtime_id).into()),
 					},
 					task_manager,
modifiednode/cli/src/rpc.rsdiffbeforeafterboth
--- a/node/cli/src/rpc.rs
+++ b/node/cli/src/rpc.rs
@@ -35,7 +35,6 @@
 use sp_api::ProvideRuntimeApi;
 use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata};
 use sp_inherents::CreateInherentDataProviders;
-use sp_runtime::traits::BlakeTwo256;
 use up_common::types::opaque::*;
 
 use crate::service::RuntimeApiDep;
@@ -80,10 +79,7 @@
 	R: RuntimeInstance + Send + Sync + 'static,
 	<R as RuntimeInstance>::CrossAccountId: serde::Serialize,
 	C: sp_api::CallApiAt<
-		generic::Block<
-			generic::Header<u32, BlakeTwo256>,
-			sp_runtime::OpaqueExtrinsic,
-		>,
+		generic::Block<generic::Header<u32, BlakeTwo256>, sp_runtime::OpaqueExtrinsic>,
 	>,
 	for<'de> <R as RuntimeInstance>::CrossAccountId: serde::Deserialize<'de>,
 {
modifiednode/cli/src/service.rsdiffbeforeafterboth
--- a/node/cli/src/service.rs
+++ b/node/cli/src/service.rs
@@ -66,16 +66,21 @@
 use sc_service::{Configuration, PartialComponents, TaskManager};
 use sc_telemetry::{Telemetry, TelemetryHandle, TelemetryWorker, TelemetryWorkerHandle};
 use serde::{Deserialize, Serialize};
-use sp_api::{ProvideRuntimeApi, StateBackend};
+use sp_api::ProvideRuntimeApi;
 use sp_block_builder::BlockBuilder;
 use sp_blockchain::{Error as BlockChainError, HeaderBackend, HeaderMetadata};
 use sp_consensus_aura::sr25519::AuthorityPair as AuraAuthorityPair;
 use sp_keystore::KeystorePtr;
-use sp_runtime::traits::BlakeTwo256;
+use sp_state_machine::Backend as StateBackend;
 use substrate_prometheus_endpoint::Registry;
 use tokio::time::Interval;
 use up_common::types::{opaque::*, Nonce};
 
+pub type ParachainHostFunctions = (
+	sp_io::SubstrateHostFunctions,
+	cumulus_client_service::storage_proof_size::HostFunctions,
+);
+
 use crate::{
 	chain_spec::RuntimeIdentification,
 	rpc::{create_eth, create_full, EthDeps, FullDeps},
@@ -99,7 +104,7 @@
 	type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions;
 	/// Otherwise we only use the default Substrate host functions.
 	#[cfg(not(feature = "runtime-benchmarks"))]
-	type ExtendHostFunctions = ();
+	type ExtendHostFunctions = ParachainHostFunctions;
 
 	fn dispatch(method: &str, data: &[u8]) -> Option<Vec<u8>> {
 		unique_runtime::api::dispatch(method, data)
@@ -117,7 +122,7 @@
 	type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions;
 	/// Otherwise we only use the default Substrate host functions.
 	#[cfg(not(feature = "runtime-benchmarks"))]
-	type ExtendHostFunctions = ();
+	type ExtendHostFunctions = ParachainHostFunctions;
 
 	fn dispatch(method: &str, data: &[u8]) -> Option<Vec<u8>> {
 		quartz_runtime::api::dispatch(method, data)
@@ -134,7 +139,7 @@
 	type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions;
 	/// Otherwise we only use the default Substrate host functions.
 	#[cfg(not(feature = "runtime-benchmarks"))]
-	type ExtendHostFunctions = ();
+	type ExtendHostFunctions = ParachainHostFunctions;
 
 	fn dispatch(method: &str, data: &[u8]) -> Option<Vec<u8>> {
 		opal_runtime::api::dispatch(method, data)
@@ -249,7 +254,7 @@
 	sc_service::Error,
 >
 where
-	sc_client_api::StateBackendFor<FullBackend, Block>: sp_api::StateBackend<BlakeTwo256>,
+	sc_client_api::StateBackendFor<FullBackend, Block>: StateBackend<BlakeTwo256>,
 	RuntimeApi: sp_api::ConstructRuntimeApi<Block, FullClient<RuntimeApi, ExecutorDispatch>>
 		+ Send
 		+ Sync
@@ -356,7 +361,7 @@
 	hwbench: Option<sc_sysinfo::HwBench>,
 ) -> sc_service::error::Result<(TaskManager, Arc<FullClient<RuntimeApi, ExecutorDispatch>>)>
 where
-	sc_client_api::StateBackendFor<FullBackend, Block>: sp_api::StateBackend<BlakeTwo256>,
+	sc_client_api::StateBackendFor<FullBackend, Block>: StateBackend<BlakeTwo256>,
 	Runtime: RuntimeInstance + Send + Sync + 'static,
 	<Runtime as RuntimeInstance>::CrossAccountId: Serialize,
 	for<'de> <Runtime as RuntimeInstance>::CrossAccountId: Deserialize<'de>,
@@ -760,6 +765,7 @@
 		relay_client: relay_chain_interface,
 		sync_oracle,
 		keystore,
+		#[cfg(not(feature = "lookahead"))]
 		slot_duration,
 		proposer,
 		collator_service,
@@ -781,6 +787,8 @@
 		relay_chain_slot_duration,
 		#[cfg(not(feature = "lookahead"))]
 		collation_request_receiver: None,
+		#[cfg(feature = "lookahead")]
+		reinitialize: false,
 	};
 
 	task_manager.spawn_essential_handle().spawn(
@@ -975,12 +983,12 @@
 					async move {
 						let time = sp_timestamp::InherentDataProvider::from_system_time();
 
-						let mocked_parachain = cumulus_primitives_parachain_inherent::MockValidationDataInherentDataProvider {
+						let mocked_parachain = cumulus_client_parachain_inherent::MockValidationDataInherentDataProvider {
 							current_para_block,
 							relay_offset: 1000,
 							relay_blocks_per_para_block: 2,
 							para_blocks_per_relay_epoch: 0,
-							xcm_config: cumulus_primitives_parachain_inherent::MockXcmConfig::new(
+							xcm_config: cumulus_client_parachain_inherent::MockXcmConfig::new(
 								&*client_for_xcm,
 								block,
 								Default::default(),
@@ -989,6 +997,7 @@
 							relay_randomness_config: (),
 							raw_downward_messages: vec![],
 							raw_horizontal_messages: vec![],
+							additional_key_values: None,
 						};
 
 						let slot =
modifiedpallets/collator-selection/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/collator-selection/src/benchmarking.rs
+++ b/pallets/collator-selection/src/benchmarking.rs
@@ -33,7 +33,8 @@
 //! Benchmarking setup for pallet-collator-selection
 
 use frame_benchmarking::v2::{
-	account, benchmarks, impl_benchmark_test_suite, whitelisted_caller, BenchmarkError,
+	account, benchmarks, impl_benchmark_test_suite, impl_test_function, whitelisted_caller,
+	BenchmarkError,
 };
 use frame_support::{
 	assert_ok,
modifiedpallets/foreign-assets/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/foreign-assets/src/benchmarking.rs
+++ b/pallets/foreign-assets/src/benchmarking.rs
@@ -32,8 +32,7 @@
 
 	#[benchmark]
 	fn force_register_foreign_asset() -> Result<(), BenchmarkError> {
-		let location =
-			MultiLocation::from(X3(Parachain(1000), PalletInstance(42), GeneralIndex(1)));
+		let asset_id: AssetId = (Parachain(1000), PalletInstance(42), GeneralIndex(1)).into();
 		let name = create_u16_data::<MAX_COLLECTION_NAME_LENGTH>();
 		let token_prefix = create_data::<MAX_TOKEN_PREFIX_LENGTH>();
 		let mode = ForeignCollectionMode::NFT;
@@ -41,7 +40,7 @@
 		#[extrinsic_call]
 		_(
 			RawOrigin::Root,
-			Box::new(location.into()),
+			Box::new(asset_id.into()),
 			name,
 			token_prefix,
 			mode,
modifiedpallets/foreign-assets/src/lib.rsdiffbeforeafterboth
--- a/pallets/foreign-assets/src/lib.rs
+++ b/pallets/foreign-assets/src/lib.rs
@@ -32,14 +32,10 @@
 };
 use sp_runtime::traits::AccountIdConversion;
 use sp_std::{boxed::Box, vec, vec::Vec};
-use staging_xcm::{
-	opaque::latest::{prelude::XcmError, Weight},
-	v3::{prelude::*, MultiAsset, XcmContext},
-	VersionedAssetId,
-};
+use staging_xcm::{v4::prelude::*, VersionedAssetId};
 use staging_xcm_executor::{
 	traits::{ConvertLocation, Error as XcmExecutorError, TransactAsset, WeightTrader},
-	Assets,
+	AssetsInHolding,
 };
 use up_data_structs::{
 	budget::ZeroBudget, CollectionId, CollectionMode, CollectionName, CollectionTokenPrefix,
@@ -78,9 +74,9 @@
 		type PalletId: Get<PalletId>;
 
 		/// Self-location of this parachain.
-		type SelfLocation: Get<MultiLocation>;
+		type SelfLocation: Get<Location>;
 
-		/// The converter from a MultiLocation to a CrossAccountId.
+		/// The converter from a Location to a CrossAccountId.
 		type LocationToAccountId: ConvertLocation<Self::CrossAccountId>;
 
 		/// Weight information for the extrinsics in this module.
@@ -110,13 +106,13 @@
 	#[pallet::storage]
 	#[pallet::getter(fn foreign_asset_to_collection)]
 	pub type ForeignAssetToCollection<T: Config> =
-		StorageMap<_, Twox64Concat, staging_xcm::v3::AssetId, CollectionId, OptionQuery>;
+		StorageMap<_, Twox64Concat, staging_xcm::v4::AssetId, CollectionId, OptionQuery>;
 
 	/// The corresponding foreign assets of collections.
 	#[pallet::storage]
 	#[pallet::getter(fn collection_to_foreign_asset)]
 	pub type CollectionToForeignAsset<T: Config> =
-		StorageMap<_, Twox64Concat, CollectionId, staging_xcm::v3::AssetId, OptionQuery>;
+		StorageMap<_, Twox64Concat, CollectionId, staging_xcm::v4::AssetId, OptionQuery>;
 
 	/// The correponding NFT token id of reserve NFTs
 	#[pallet::storage]
@@ -125,7 +121,8 @@
 		Hasher1 = Twox64Concat,
 		Key1 = CollectionId,
 		Hasher2 = Blake2_128Concat,
-		Key2 = staging_xcm::v3::AssetInstance,
+		// Key2 = staging_xcm::v3::AssetInstance,
+		Key2 = staging_xcm::v4::AssetInstance,
 		Value = TokenId,
 		QueryKind = OptionQuery,
 	>;
@@ -138,7 +135,8 @@
 		Key1 = CollectionId,
 		Hasher2 = Blake2_128Concat,
 		Key2 = TokenId,
-		Value = staging_xcm::v3::AssetInstance,
+		// Value = staging_xcm::v3::AssetInstance,
+		Value = staging_xcm::v4::AssetInstance,
 		QueryKind = OptionQuery,
 	>;
 
@@ -165,7 +163,7 @@
 				.map_err(|()| Error::<T>::BadForeignAssetId)?;
 
 			ensure!(
-				!<ForeignAssetToCollection<T>>::contains_key(asset_id),
+				!<ForeignAssetToCollection<T>>::contains_key(&asset_id),
 				<Error<T>>::ForeignAssetAlreadyRegistered,
 			);
 
@@ -189,7 +187,7 @@
 				},
 			)?;
 
-			<ForeignAssetToCollection<T>>::insert(asset_id, collection_id);
+			<ForeignAssetToCollection<T>>::insert(&asset_id, collection_id);
 			<CollectionToForeignAsset<T>>::insert(collection_id, asset_id);
 
 			Self::deposit_event(Event::<T>::ForeignAssetRegistered {
@@ -221,11 +219,9 @@
 	/// If the multilocation doesn't match the patterns listed above,
 	/// or the `<Collection ID>` points to a foreign collection,
 	/// `None` is returned, identifying that the given multilocation doesn't correspond to a local collection.
-	fn local_asset_id_to_collection(asset_id: &AssetId) -> Option<CollectionLocality> {
-		let AssetId::Concrete(asset_location) = asset_id else {
-			return None;
-		};
-
+	fn local_asset_id_to_collection(
+		AssetId(asset_location): &AssetId,
+	) -> Option<CollectionLocality> {
 		let self_location = T::SelfLocation::get();
 
 		if *asset_location == Here.into() || *asset_location == self_location {
@@ -386,32 +382,25 @@
 	}
 }
 
+// #[derive()]
+// pub enum Migration {
+
+// }
+
 impl<T: Config> TransactAsset for Pallet<T> {
-	fn can_check_in(
-		_origin: &MultiLocation,
-		_what: &MultiAsset,
-		_context: &XcmContext,
-	) -> XcmResult {
+	fn can_check_in(_origin: &Location, _what: &Asset, _context: &XcmContext) -> XcmResult {
 		Err(XcmError::Unimplemented)
 	}
 
-	fn check_in(_origin: &MultiLocation, _what: &MultiAsset, _context: &XcmContext) {}
+	fn check_in(_origin: &Location, _what: &Asset, _context: &XcmContext) {}
 
-	fn can_check_out(
-		_dest: &MultiLocation,
-		_what: &MultiAsset,
-		_context: &XcmContext,
-	) -> XcmResult {
+	fn can_check_out(_dest: &Location, _what: &Asset, _context: &XcmContext) -> XcmResult {
 		Err(XcmError::Unimplemented)
 	}
 
-	fn check_out(_dest: &MultiLocation, _what: &MultiAsset, _context: &XcmContext) {}
+	fn check_out(_dest: &Location, _what: &Asset, _context: &XcmContext) {}
 
-	fn deposit_asset(
-		what: &MultiAsset,
-		to: &MultiLocation,
-		_context: Option<&XcmContext>,
-	) -> XcmResult {
+	fn deposit_asset(what: &Asset, to: &Location, _context: Option<&XcmContext>) -> XcmResult {
 		let to = T::LocationToAccountId::convert_location(to)
 			.ok_or(XcmExecutorError::AccountIdConversionFailed)?;
 
@@ -440,10 +429,10 @@
 	}
 
 	fn withdraw_asset(
-		what: &MultiAsset,
-		from: &MultiLocation,
+		what: &Asset,
+		from: &Location,
 		_maybe_context: Option<&XcmContext>,
-	) -> Result<staging_xcm_executor::Assets, XcmError> {
+	) -> Result<AssetsInHolding, XcmError> {
 		let from = T::LocationToAccountId::convert_location(from)
 			.ok_or(XcmExecutorError::AccountIdConversionFailed)?;
 
@@ -468,11 +457,11 @@
 	}
 
 	fn internal_transfer_asset(
-		what: &MultiAsset,
-		from: &MultiLocation,
-		to: &MultiLocation,
+		what: &Asset,
+		from: &Location,
+		to: &Location,
 		_context: &XcmContext,
-	) -> Result<staging_xcm_executor::Assets, XcmError> {
+	) -> Result<AssetsInHolding, XcmError> {
 		let from = T::LocationToAccountId::convert_location(from)
 			.ok_or(XcmExecutorError::AccountIdConversionFailed)?;
 
@@ -534,18 +523,15 @@
 }
 
 pub struct CurrencyIdConvert<T: Config>(PhantomData<T>);
-impl<T: Config> sp_runtime::traits::Convert<CollectionId, Option<MultiLocation>>
+impl<T: Config> sp_runtime::traits::Convert<CollectionId, Option<Location>>
 	for CurrencyIdConvert<T>
 {
-	fn convert(collection_id: CollectionId) -> Option<MultiLocation> {
+	fn convert(collection_id: CollectionId) -> Option<Location> {
 		if collection_id == NATIVE_FUNGIBLE_COLLECTION_ID {
 			Some(T::SelfLocation::get())
 		} else {
 			<Pallet<T>>::collection_to_foreign_asset(collection_id)
-				.and_then(|asset_id| match asset_id {
-					AssetId::Concrete(location) => Some(location),
-					_ => None,
-				})
+				.map(|AssetId(location)| location)
 				.or_else(|| {
 					T::SelfLocation::get()
 						.pushed_with_interior(GeneralIndex(collection_id.0.into()))
@@ -580,9 +566,9 @@
 	fn buy_weight(
 		&mut self,
 		weight: Weight,
-		payment: Assets,
+		payment: AssetsInHolding,
 		_xcm: &XcmContext,
-	) -> Result<Assets, XcmError> {
+	) -> Result<AssetsInHolding, XcmError> {
 		log::trace!(target: "fassets::weight", "buy_weight weight: {:?}, payment: {:?}", weight, payment);
 		Ok(payment)
 	}
modifiedpallets/nonfungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -718,7 +718,7 @@
 		.map_err(|_| Error::Revert("no permissions for collection".into()))?;
 	let a = token_property_permissions
 		.get(key)
-		.map(Clone::clone)
+		.cloned()
 		.ok_or_else(|| {
 			let key = String::from_utf8(key.clone().into_inner()).unwrap_or_default();
 			Error::Revert(alloc::format!("no permission for key {key}"))
modifiedpallets/refungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/refungible/src/erc.rs
+++ b/pallets/refungible/src/erc.rs
@@ -761,7 +761,7 @@
 		.map_err(|_| Error::Revert("no permissions for collection".into()))?;
 	let a = token_property_permissions
 		.get(key)
-		.map(Clone::clone)
+		.cloned()
 		.ok_or_else(|| {
 			let key = String::from_utf8(key.clone().into_inner()).unwrap_or_default();
 			Error::Revert(alloc::format!("no permission for key {key}"))
modifiedruntime/common/config/ethereum.rsdiffbeforeafterboth
--- a/runtime/common/config/ethereum.rs
+++ b/runtime/common/config/ethereum.rs
@@ -92,6 +92,7 @@
 	type OnChargeTransaction =
 		pallet_evm_transaction_payment::WrappedEVMCurrencyAdapter<Balances, DealWithFees>;
 	type FindAuthor = EthereumFindAuthor<Aura>;
+	type SuicideQuickClearLimit = ConstU32<0>;
 	type Timestamp = crate::Timestamp;
 	type WeightInfo = pallet_evm::weights::SubstrateWeight<Self>;
 	type GasLimitPovSizeRatio = ProofSizePerGas;
modifiedruntime/common/config/governance/fellowship.rsdiffbeforeafterboth
--- a/runtime/common/config/governance/fellowship.rs
+++ b/runtime/common/config/governance/fellowship.rs
@@ -1,5 +1,6 @@
 use pallet_gov_origins::Origin as GovOrigins;
 use pallet_ranked_collective::{Config as RankedConfig, Rank, TallyOf};
+use sp_runtime::traits::ReplaceWithDefault;
 
 use super::*;
 use crate::{
@@ -63,17 +64,18 @@
 impl RankedConfig for Runtime {
 	type WeightInfo = pallet_ranked_collective::weights::SubstrateWeight<Self>;
 	type RuntimeEvent = RuntimeEvent;
-	// Promotion is by any of:
-	// - Council member.
-	// - Technical committee member.
+	type AddOrigin = FellowshipAddOrigin<Self::AccountId>;
+	type RemoveOrigin = FellowshipPromoteDemoteOrigin<Self::AccountId>;
+	type ExchangeOrigin = FellowshipPromoteDemoteOrigin<Self::AccountId>;
+	type MemberSwappedHandler = ();
 	type PromoteOrigin = FellowshipPromoteDemoteOrigin<Self::AccountId>;
-	// Demotion is by any of:
-	// - Council member.
-	// - Technical committee member.
 	type DemoteOrigin = FellowshipPromoteDemoteOrigin<Self::AccountId>;
 	type Polls = FellowshipReferenda;
 	type MinRankOfClass = ClassToRankMapper<Self, ()>;
 	type VoteWeight = pallet_ranked_collective::Geometric;
+
+	#[cfg(feature = "runtime-benchmarks")]
+	type BenchmarkSetup = ();
 }
 
 pub struct EnsureFellowshipProposition;
@@ -96,6 +98,14 @@
 	}
 }
 
+pub type FellowshipAddOrigin<AccountId> = EitherOf<
+	EnsureRoot<AccountId>,
+	EitherOf<
+		MapSuccess<TechnicalCommitteeMember, ReplaceWithDefault<()>>,
+		MapSuccess<CouncilMember, ReplaceWithDefault<()>>,
+	>,
+>;
+
 pub type FellowshipPromoteDemoteOrigin<AccountId> = EitherOf<
 	MapSuccess<EnsureRoot<AccountId>, Replace<ConstU16<65535>>>,
 	MapSuccess<MoreThanHalfCouncil, Replace<ConstU16<9>>>,
modifiedruntime/common/config/orml.rsdiffbeforeafterboth
--- a/runtime/common/config/orml.rs
+++ b/runtime/common/config/orml.rs
@@ -19,7 +19,7 @@
 use orml_traits::{location::AbsoluteReserveProvider, parameter_type_with_key};
 use pallet_foreign_assets::CurrencyIdConvert;
 use sp_runtime::traits::Convert;
-use staging_xcm::latest::{Junction::*, Junctions::*, MultiLocation, Weight};
+use staging_xcm::latest::prelude::*;
 use staging_xcm_executor::XcmExecutor;
 use up_common::{
 	constants::*,
@@ -44,18 +44,18 @@
 }
 
 parameter_type_with_key! {
-	pub ParachainMinFee: |_location: MultiLocation| -> Option<u128> {
+	pub ParachainMinFee: |_location: Location| -> Option<u128> {
 		Some(100_000_000_000)
 	};
 }
 
-pub struct AccountIdToMultiLocation;
-impl Convert<AccountId, MultiLocation> for AccountIdToMultiLocation {
-	fn convert(account: AccountId) -> MultiLocation {
-		X1(AccountId32 {
+pub struct AccountIdToLocation;
+impl Convert<AccountId, Location> for AccountIdToLocation {
+	fn convert(account: AccountId) -> Location {
+		AccountId32 {
 			network: None,
 			id: account.into(),
-		})
+		}
 		.into()
 	}
 }
@@ -75,14 +75,16 @@
 	type Balance = Balance;
 	type CurrencyId = CollectionId;
 	type CurrencyIdConvert = CurrencyIdConvert<Self>;
-	type AccountIdToMultiLocation = AccountIdToMultiLocation;
+	type AccountIdToLocation = AccountIdToLocation;
 	type SelfLocation = SelfLocation;
 	type XcmExecutor = XcmExecutor<XcmExecutorConfig<Self>>;
 	type Weigher = Weigher;
 	type BaseXcmWeight = BaseXcmWeight;
 	type MaxAssetsForTransfer = MaxAssetsForTransfer;
 	type MinXcmFee = ParachainMinFee;
-	type MultiLocationsFilter = Everything;
+	type LocationsFilter = Everything;
 	type ReserveProvider = AbsoluteReserveProvider;
 	type UniversalLocation = UniversalLocation;
+	type RateLimiter = ();
+	type RateLimiterId = ();
 }
modifiedruntime/common/config/pallets/foreign_asset.rsdiffbeforeafterboth
--- a/runtime/common/config/pallets/foreign_asset.rs
+++ b/runtime/common/config/pallets/foreign_asset.rs
@@ -24,7 +24,7 @@
 impl staging_xcm_executor::traits::ConvertLocation<ConfigCrossAccountId>
 	for LocationToCrossAccountId
 {
-	fn convert_location(location: &MultiLocation) -> Option<ConfigCrossAccountId> {
+	fn convert_location(location: &Location) -> Option<ConfigCrossAccountId> {
 		LocationToAccountId::convert_location(location)
 			.map(ConfigCrossAccountId::from_sub)
 			.or_else(|| {
modifiedruntime/common/config/parachain.rsdiffbeforeafterboth
--- a/runtime/common/config/parachain.rs
+++ b/runtime/common/config/parachain.rs
@@ -14,12 +14,14 @@
 // You should have received a copy of the GNU General Public License
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
-use frame_support::{parameter_types, weights::Weight};
+use cumulus_primitives_core::AggregateMessageOrigin;
+use frame_support::{parameter_types, traits::EnqueueWithOrigin, weights::Weight};
 use up_common::constants::*;
 
-use crate::{DmpQueue, Runtime, RuntimeEvent, XcmpQueue};
+use crate::{MessageQueue, Runtime, RuntimeEvent, XcmpQueue};
 
 parameter_types! {
+	pub const RelayMsgOrigin: AggregateMessageOrigin = AggregateMessageOrigin::Parent;
 	pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4);
 	pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4);
 }
@@ -28,13 +30,9 @@
 	type RuntimeEvent = RuntimeEvent;
 	type SelfParaId = staging_parachain_info::Pallet<Self>;
 	type OnSystemEvent = ();
-	// type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<
-	// 	MaxDownwardMessageWeight,
-	// 	XcmExecutor<XcmConfig>,
-	// 	Call,
-	// >;
+	type WeightInfo = cumulus_pallet_parachain_system::weights::SubstrateWeight<Self>;
 	type OutboundXcmpMessageSource = XcmpQueue;
-	type DmpMessageHandler = DmpQueue;
+	type DmpQueue = EnqueueWithOrigin<MessageQueue, RelayMsgOrigin>;
 	type ReservedDmpWeight = ReservedDmpWeight;
 	type ReservedXcmpWeight = ReservedXcmpWeight;
 	type XcmpMessageHandler = XcmpQueue;
modifiedruntime/common/config/substrate.rsdiffbeforeafterboth
--- a/runtime/common/config/substrate.rs
+++ b/runtime/common/config/substrate.rs
@@ -117,6 +117,14 @@
 	/// Version of the runtime.
 	type Version = Version;
 	type MaxConsumers = ConstU32<16>;
+
+	type RuntimeTask = ();
+
+	type SingleBlockMigrations = ();
+	type MultiBlockMigrator = ();
+	type PreInherents = ();
+	type PostInherents = ();
+	type PostTransactions = ();
 }
 
 parameter_types! {
@@ -136,6 +144,7 @@
 	// Only root can perform this migration
 	type SignedFilter = EnsureSignedBy<TrieMigrationSigned, AccountId>;
 	type MaxKeyLen = MigrationMaxKeyLen;
+	type RuntimeHoldReason = RuntimeHoldReason;
 }
 
 impl pallet_timestamp::Config for Runtime {
@@ -176,7 +185,6 @@
 	type RuntimeHoldReason = RuntimeHoldReason;
 	type RuntimeFreezeReason = RuntimeFreezeReason;
 	type FreezeIdentifier = [u8; 16];
-	type MaxHolds = MaxHolds;
 	type MaxFreezes = MaxFreezes;
 }
 
modifiedruntime/common/config/xcm.rsdiffbeforeafterboth
--- a/runtime/common/config/xcm.rs
+++ b/runtime/common/config/xcm.rs
@@ -14,57 +14,58 @@
 // You should have received a copy of the GNU General Public License
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
-use cumulus_primitives_core::ParaId;
+use cumulus_primitives_core::{AggregateMessageOrigin, ParaId};
 use frame_support::{
 	parameter_types,
-	traits::{ConstU32, Everything, Get, Nothing, ProcessMessageError},
+	traits::{
+		ConstU32, EnqueueWithOrigin, Everything, Get, Nothing, ProcessMessageError, TransformOrigin,
+	},
 };
 use frame_system::EnsureRoot;
 use orml_traits::location::AbsoluteReserveProvider;
 use orml_xcm_support::MultiNativeAsset;
 use pallet_foreign_assets::FreeForAll;
 use pallet_xcm::XcmPassthrough;
+use parachains_common::message_queue::{NarrowOriginToSibling, ParaIdToSibling};
 use polkadot_parachain_primitives::primitives::Sibling;
 use polkadot_runtime_common::xcm_sender::NoPriceForMessageDelivery;
 use sp_std::marker::PhantomData;
-use staging_xcm::{
-	latest::{prelude::*, MultiLocation, Weight},
-	v3::Instruction,
-};
+use staging_xcm::latest::prelude::*;
 use staging_xcm_builder::{
-	AccountId32Aliases, EnsureXcmOrigin, FixedWeightBounds, ParentIsPreset, RelayChainAsNative,
-	SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative,
-	SignedToAccountId32, SovereignSignedViaLocation,
+	AccountId32Aliases, EnsureXcmOrigin, FixedWeightBounds, FrameTransactionalProcessor,
+	ParentIsPreset, RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia,
+	SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation,
 };
 use staging_xcm_executor::{
 	traits::{Properties, ShouldExecute},
 	XcmExecutor,
 };
-use up_common::types::AccountId;
+use up_common::{constants::MAXIMUM_BLOCK_WEIGHT, types::AccountId};
 
 #[cfg(feature = "governance")]
 use crate::runtime_common::config::governance;
 use crate::{
-	xcm_barrier::Barrier, AllPalletsWithSystem, Balances, ForeignAssets, ParachainInfo,
-	ParachainSystem, PolkadotXcm, RelayNetwork, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin,
-	XcmpQueue,
+	runtime_common::config::parachain::RelayMsgOrigin, xcm_barrier::Barrier, AllPalletsWithSystem,
+	Balances, ForeignAssets, MessageQueue, ParachainInfo, ParachainSystem, PolkadotXcm,
+	RelayNetwork, Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, XcmpQueue,
 };
 
 parameter_types! {
-	pub const RelayLocation: MultiLocation = MultiLocation::parent();
+	pub const RelayLocation: Location = Location::parent();
 	pub RelayOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into();
-	pub UniversalLocation: InteriorMultiLocation = (
+	pub UniversalLocation: InteriorLocation = (
 		GlobalConsensus(crate::RelayNetwork::get()),
 		Parachain(ParachainInfo::get().into()),
 	).into();
-	pub SelfLocation: MultiLocation = MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into())));
+	pub SelfLocation: Location = Location::new(1, Parachain(ParachainInfo::get().into()));
 
 	// One XCM operation is 1_000_000 weight - almost certainly a conservative estimate.
 	pub UnitWeightCost: Weight = Weight::from_parts(1_000_000, 1000); // ?
 	pub const MaxInstructions: u32 = 100;
+	pub const MessageQueueServiceWeight: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_div(4); // TODO
 }
 
-/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used
+/// Type for specifying how a `Location` can be converted into an `AccountId`. This is used
 /// when determining ownership of accounts for asset transacting and when attempting to use XCM
 /// `Transact` in order to determine the dispatch Origin.
 pub type LocationToAccountId = (
@@ -111,7 +112,7 @@
 
 pub trait TryPass {
 	fn try_pass<Call>(
-		origin: &MultiLocation,
+		origin: &Location,
 		message: &mut [Instruction<Call>],
 	) -> Result<(), ProcessMessageError>;
 }
@@ -119,7 +120,7 @@
 #[impl_trait_for_tuples::impl_for_tuples(30)]
 impl TryPass for Tuple {
 	fn try_pass<Call>(
-		origin: &MultiLocation,
+		origin: &Location,
 		message: &mut [Instruction<Call>],
 	) -> Result<(), ProcessMessageError> {
 		for_tuples!( #(
@@ -143,7 +144,7 @@
 	Allow: ShouldExecute,
 {
 	fn should_execute<Call>(
-		origin: &MultiLocation,
+		origin: &Location,
 		message: &mut [Instruction<Call>],
 		max_weight: Weight,
 		properties: &mut Properties,
@@ -190,11 +191,7 @@
 	type CallDispatcher = RuntimeCall;
 	type SafeCallFilter = Nothing;
 	type Aliasers = Nothing;
-}
-
-#[cfg(feature = "runtime-benchmarks")]
-parameter_types! {
-	pub ReachableDest: Option<MultiLocation> = Some(Parent.into());
+	type TransactionalProcessor = FrameTransactionalProcessor;
 }
 
 impl pallet_xcm::Config for Runtime {
@@ -221,21 +218,58 @@
 	type AdminOrigin = EnsureRoot<AccountId>;
 	type MaxRemoteLockConsumers = ConstU32<0>;
 	type RemoteLockConsumerIdentifier = ();
-	#[cfg(feature = "runtime-benchmarks")]
-	type ReachableDest = ReachableDest;
 }
 
+#[cfg(feature = "runtime-benchmarks")]
+impl pallet_xcm::benchmarking::Config for Runtime {
+	type DeliveryHelper = ();
+
+	fn reachable_dest() -> Option<Location> {
+		Some(Parent.into())
+	}
+
+	fn get_asset() -> Asset {
+		(Location::here(), 1_000_000_000_000_000_000u128).into()
+	}
+}
+
 impl cumulus_pallet_xcm::Config for Runtime {
 	type RuntimeEvent = RuntimeEvent;
 	type XcmExecutor = XcmExecutor<XcmExecutorConfig<Self>>;
 }
+
+impl pallet_message_queue::Config for Runtime {
+	type RuntimeEvent = RuntimeEvent;
+	type WeightInfo = pallet_message_queue::weights::SubstrateWeight<Self>;
+
+	#[cfg(not(feature = "runtime-benchmarks"))]
+	type MessageProcessor = staging_xcm_builder::ProcessXcmMessage<
+		AggregateMessageOrigin,
+		XcmExecutor<XcmExecutorConfig<Self>>,
+		RuntimeCall,
+	>;
+
+	#[cfg(feature = "runtime-benchmarks")]
+	type MessageProcessor =
+		pallet_message_queue::mock_helpers::NoopMessageProcessor<AggregateMessageOrigin>;
+
+	type Size = u32;
+	// The XCMP queue pallet is only ever able to handle the `Sibling(ParaId)` origin:
+	type QueueChangeHandler = NarrowOriginToSibling<XcmpQueue>;
+	type QueuePausedQuery = NarrowOriginToSibling<XcmpQueue>;
+	type HeapSize = ConstU32<{ 64 * 1024 }>;
+	type MaxStale = ConstU32<8>;
+	type ServiceWeight = MessageQueueServiceWeight;
+}
+
 impl cumulus_pallet_xcmp_queue::Config for Runtime {
-	type WeightInfo = ();
+	type WeightInfo = cumulus_pallet_xcmp_queue::weights::SubstrateWeight<Self>;
 	type RuntimeEvent = RuntimeEvent;
-	type XcmExecutor = XcmExecutor<XcmExecutorConfig<Self>>;
+	type XcmpQueue = TransformOrigin<MessageQueue, AggregateMessageOrigin, ParaId, ParaIdToSibling>;
+	type MaxInboundSuspended = ConstU32<1000>;
+
 	type ChannelInfo = ParachainSystem;
 	type VersionWrapper = PolkadotXcm;
-	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;
 
 	#[cfg(feature = "governance")]
 	type ControllerOrigin = governance::RootOrTechnicalCommitteeMember;
@@ -249,6 +283,6 @@
 
 impl cumulus_pallet_dmp_queue::Config for Runtime {
 	type RuntimeEvent = RuntimeEvent;
-	type XcmExecutor = XcmExecutor<XcmExecutorConfig<Self>>;
-	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;
+	type WeightInfo = cumulus_pallet_dmp_queue::weights::SubstrateWeight<Self>;
+	type DmpSink = EnqueueWithOrigin<MessageQueue, RelayMsgOrigin>;
 }
modifiedruntime/common/construct_runtime.rsdiffbeforeafterboth
--- a/runtime/common/construct_runtime.rs
+++ b/runtime/common/construct_runtime.rs
@@ -88,6 +88,7 @@
 				PolkadotXcm: pallet_xcm = 51,
 				CumulusXcm: cumulus_pallet_xcm = 52,
 				DmpQueue: cumulus_pallet_dmp_queue = 53,
+				MessageQueue: pallet_message_queue = 54,
 
 				// Unique Pallets
 				Inflation: pallet_inflation = 60,
modifiedruntime/common/runtime_apis.rsdiffbeforeafterboth
--- a/runtime/common/runtime_apis.rs
+++ b/runtime/common/runtime_apis.rs
@@ -40,9 +40,10 @@
 			Permill,
 			traits::{Block as BlockT},
 			transaction_validity::{TransactionSource, TransactionValidity},
-			ApplyExtrinsicResult, DispatchError,
+			ApplyExtrinsicResult, DispatchError, ExtrinsicInclusionMode,
 		};
 		use frame_support::{
+			genesis_builder_helper::{build_config, create_default_config},
 			pallet_prelude::Weight,
 			traits::OnFinalize,
 		};
@@ -243,7 +244,7 @@
 					Executive::execute_block(block)
 				}
 
-				fn initialize_block(header: &<Block as BlockT>::Header) {
+				fn initialize_block(header: &<Block as BlockT>::Header) -> ExtrinsicInclusionMode {
 					Executive::initialize_block(header)
 				}
 			}
@@ -442,7 +443,7 @@
 					)
 				}
 
-				fn extrinsic_filter(xts: Vec<<Block as sp_api::BlockT>::Extrinsic>) -> Vec<pallet_ethereum::Transaction> {
+				fn extrinsic_filter(xts: Vec<<Block as BlockT>::Extrinsic>) -> Vec<pallet_ethereum::Transaction> {
 					xts.into_iter().filter_map(|xt| match xt.0.function {
 						RuntimeCall::Ethereum(pallet_ethereum::Call::transact { transaction }) => Some(transaction),
 						_ => None
@@ -535,9 +536,10 @@
 				) {
 					use frame_benchmarking::{list_benchmark, Benchmarking, BenchmarkList};
 					use frame_support::traits::StorageInfoTrait;
+					use pallet_xcm::benchmarking::Pallet as PalletXcmBenchmarks;
 
 					let mut list = Vec::<BenchmarkList>::new();
-					list_benchmark!(list, extra, pallet_xcm, PolkadotXcm);
+					list_benchmark!(list, extra, pallet_xcm, PalletXcmBenchmarks::<Runtime>);
 
 					list_benchmark!(list, extra, pallet_evm_migration, EvmMigration);
 					list_benchmark!(list, extra, pallet_common, Common);
@@ -578,6 +580,7 @@
 				) -> Result<Vec<frame_benchmarking::BenchmarkBatch>, sp_runtime::RuntimeString> {
 					use frame_benchmarking::{Benchmarking, BenchmarkBatch, add_benchmark};
 					use sp_storage::TrackedStorageKey;
+					use pallet_xcm::benchmarking::Pallet as PalletXcmBenchmarks;
 
 					let allowlist: Vec<TrackedStorageKey> = vec![
 						// Total Issuance
@@ -601,8 +604,9 @@
 
 					let mut batches = Vec::<BenchmarkBatch>::new();
 					let params = (&config, &allowlist);
-					add_benchmark!(params, batches, pallet_xcm, PolkadotXcm);
 
+					add_benchmark!(params, batches, pallet_xcm, PalletXcmBenchmarks::<Runtime>);
+
 					add_benchmark!(params, batches, pallet_evm_migration, EvmMigration);
 					add_benchmark!(params, batches, pallet_common, Common);
 					add_benchmark!(params, batches, pallet_unique, Unique);
@@ -707,6 +711,16 @@
 					)
 				}
 			}
+
+			impl sp_genesis_builder::GenesisBuilder<Block> for Runtime {
+				fn create_default_config() -> Vec<u8> {
+					create_default_config::<RuntimeGenesisConfig>()
+				}
+
+				fn build_config(config: Vec<u8>) -> sp_genesis_builder::Result {
+					build_config::<RuntimeGenesisConfig>(config)
+				}
+			}
 		}
 	}
 }
modifiedruntime/common/sponsoring.rsdiffbeforeafterboth
--- a/runtime/common/sponsoring.rs
+++ b/runtime/common/sponsoring.rs
@@ -341,12 +341,11 @@
 		};
 
 		if let Some(last_tx_block) = last_tx_block {
-			return Some(
+			return Some(u64::from(
 				last_tx_block
 					.saturating_add(limit.into())
-					.saturating_sub(block_number)
-					.into(),
-			);
+					.saturating_sub(block_number),
+			));
 		}
 
 		let token_exists = match collection.mode {
modifiedruntime/common/weights/xcm.rsdiffbeforeafterboth
--- a/runtime/common/weights/xcm.rs
+++ b/runtime/common/weights/xcm.rs
@@ -2,8 +2,8 @@
 
 //! Autogenerated weights for pallet_xcm
 //!
-//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 29.0.0
-//! DATE: 2023-11-29, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 35.0.1
+//! DATE: 2024-05-27, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! WORST CASE MAP SIZE: `1000000`
 //! EXECUTION: , WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
@@ -49,37 +49,44 @@
 		// Proof Size summary in bytes:
 		//  Measured:  `278`
 		//  Estimated: `3743`
-		// Minimum execution time: 22_693_000 picoseconds.
-		Weight::from_parts(23_155_000, 3743)
+		// Minimum execution time: 18_977_000 picoseconds.
+		Weight::from_parts(19_535_000, 3743)
 			.saturating_add(T::DbWeight::get().reads(5_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 	}
-	/// Storage: `ParachainInfo::ParachainId` (r:1 w:0)
-	/// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	/// Storage: `Benchmark::Override` (r:0 w:0)
+	/// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn teleport_assets() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `169`
-		//  Estimated: `1489`
-		// Minimum execution time: 21_165_000 picoseconds.
-		Weight::from_parts(21_568_000, 1489)
-			.saturating_add(T::DbWeight::get().reads(1_u64))
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 18_446_744_073_709_551_000 picoseconds.
+		Weight::from_parts(18_446_744_073_709_551_000, 0)
 	}
-	/// Storage: `ParachainInfo::ParachainId` (r:1 w:0)
-	/// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	/// Storage: `Benchmark::Override` (r:0 w:0)
+	/// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn reserve_transfer_assets() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `169`
-		//  Estimated: `1489`
-		// Minimum execution time: 20_929_000 picoseconds.
-		Weight::from_parts(21_295_000, 1489)
-			.saturating_add(T::DbWeight::get().reads(1_u64))
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 18_446_744_073_709_551_000 picoseconds.
+		Weight::from_parts(18_446_744_073_709_551_000, 0)
+	}
+	/// Storage: `Benchmark::Override` (r:0 w:0)
+	/// Proof: `Benchmark::Override` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	fn transfer_assets() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 18_446_744_073_709_551_000 picoseconds.
+		Weight::from_parts(18_446_744_073_709_551_000, 0)
 	}
 	fn execute() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 7_580_000 picoseconds.
-		Weight::from_parts(7_829_000, 0)
+		// Minimum execution time: 6_781_000 picoseconds.
+		Weight::from_parts(7_006_000, 0)
 	}
 	/// Storage: `PolkadotXcm::SupportedVersion` (r:0 w:1)
 	/// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`)
@@ -87,8 +94,8 @@
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 7_503_000 picoseconds.
-		Weight::from_parts(7_703_000, 0)
+		// Minimum execution time: 6_489_000 picoseconds.
+		Weight::from_parts(6_849_000, 0)
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
 	/// Storage: `PolkadotXcm::SafeXcmVersion` (r:0 w:1)
@@ -97,8 +104,8 @@
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 2_505_000 picoseconds.
-		Weight::from_parts(2_619_000, 0)
+		// Minimum execution time: 2_216_000 picoseconds.
+		Weight::from_parts(2_347_000, 0)
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
 	/// Storage: `PolkadotXcm::VersionNotifiers` (r:1 w:1)
@@ -121,8 +128,8 @@
 		// Proof Size summary in bytes:
 		//  Measured:  `278`
 		//  Estimated: `3743`
-		// Minimum execution time: 26_213_000 picoseconds.
-		Weight::from_parts(26_652_000, 3743)
+		// Minimum execution time: 24_128_000 picoseconds.
+		Weight::from_parts(24_629_000, 3743)
 			.saturating_add(T::DbWeight::get().reads(7_u64))
 			.saturating_add(T::DbWeight::get().writes(5_u64))
 	}
@@ -144,8 +151,8 @@
 		// Proof Size summary in bytes:
 		//  Measured:  `461`
 		//  Estimated: `3926`
-		// Minimum execution time: 27_648_000 picoseconds.
-		Weight::from_parts(28_084_000, 3926)
+		// Minimum execution time: 25_408_000 picoseconds.
+		Weight::from_parts(25_912_000, 3926)
 			.saturating_add(T::DbWeight::get().reads(6_u64))
 			.saturating_add(T::DbWeight::get().writes(4_u64))
 	}
@@ -155,41 +162,41 @@
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
-		// Minimum execution time: 2_529_000 picoseconds.
-		Weight::from_parts(2_650_000, 0)
+		// Minimum execution time: 2_270_000 picoseconds.
+		Weight::from_parts(2_379_000, 0)
 			.saturating_add(T::DbWeight::get().writes(1_u64))
 	}
-	/// Storage: `PolkadotXcm::SupportedVersion` (r:4 w:2)
+	/// Storage: `PolkadotXcm::SupportedVersion` (r:5 w:2)
 	/// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn migrate_supported_version() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `196`
-		//  Estimated: `11086`
-		// Minimum execution time: 15_973_000 picoseconds.
-		Weight::from_parts(16_358_000, 11086)
-			.saturating_add(T::DbWeight::get().reads(4_u64))
+		//  Measured:  `192`
+		//  Estimated: `13557`
+		// Minimum execution time: 17_924_000 picoseconds.
+		Weight::from_parts(18_191_000, 13557)
+			.saturating_add(T::DbWeight::get().reads(5_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 	}
-	/// Storage: `PolkadotXcm::VersionNotifiers` (r:4 w:2)
+	/// Storage: `PolkadotXcm::VersionNotifiers` (r:5 w:2)
 	/// Proof: `PolkadotXcm::VersionNotifiers` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn migrate_version_notifiers() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `200`
-		//  Estimated: `11090`
-		// Minimum execution time: 16_027_000 picoseconds.
-		Weight::from_parts(16_585_000, 11090)
-			.saturating_add(T::DbWeight::get().reads(4_u64))
+		//  Measured:  `196`
+		//  Estimated: `13561`
+		// Minimum execution time: 17_998_000 picoseconds.
+		Weight::from_parts(18_412_000, 13561)
+			.saturating_add(T::DbWeight::get().reads(5_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 	}
-	/// Storage: `PolkadotXcm::VersionNotifyTargets` (r:5 w:0)
+	/// Storage: `PolkadotXcm::VersionNotifyTargets` (r:6 w:0)
 	/// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn already_notified_target() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `207`
-		//  Estimated: `13572`
-		// Minimum execution time: 16_817_000 picoseconds.
-		Weight::from_parts(17_137_000, 13572)
-			.saturating_add(T::DbWeight::get().reads(5_u64))
+		//  Estimated: `16047`
+		// Minimum execution time: 19_437_000 picoseconds.
+		Weight::from_parts(19_891_000, 16047)
+			.saturating_add(T::DbWeight::get().reads(6_u64))
 	}
 	/// Storage: `PolkadotXcm::VersionNotifyTargets` (r:2 w:1)
 	/// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`)
@@ -207,33 +214,33 @@
 		// Proof Size summary in bytes:
 		//  Measured:  `345`
 		//  Estimated: `6285`
-		// Minimum execution time: 24_551_000 picoseconds.
-		Weight::from_parts(24_975_000, 6285)
+		// Minimum execution time: 24_038_000 picoseconds.
+		Weight::from_parts(24_400_000, 6285)
 			.saturating_add(T::DbWeight::get().reads(7_u64))
 			.saturating_add(T::DbWeight::get().writes(3_u64))
 	}
-	/// Storage: `PolkadotXcm::VersionNotifyTargets` (r:3 w:0)
+	/// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:0)
 	/// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn notify_target_migration_fail() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `239`
-		//  Estimated: `8654`
-		// Minimum execution time: 8_412_000 picoseconds.
-		Weight::from_parts(8_710_000, 8654)
-			.saturating_add(T::DbWeight::get().reads(3_u64))
+		//  Estimated: `11129`
+		// Minimum execution time: 10_817_000 picoseconds.
+		Weight::from_parts(11_066_000, 11129)
+			.saturating_add(T::DbWeight::get().reads(4_u64))
 	}
-	/// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2)
+	/// Storage: `PolkadotXcm::VersionNotifyTargets` (r:5 w:2)
 	/// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn migrate_version_notify_targets() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `207`
-		//  Estimated: `11097`
-		// Minimum execution time: 16_427_000 picoseconds.
-		Weight::from_parts(16_774_000, 11097)
-			.saturating_add(T::DbWeight::get().reads(4_u64))
+		//  Measured:  `203`
+		//  Estimated: `13568`
+		// Minimum execution time: 18_143_000 picoseconds.
+		Weight::from_parts(18_592_000, 13568)
+			.saturating_add(T::DbWeight::get().reads(5_u64))
 			.saturating_add(T::DbWeight::get().writes(2_u64))
 	}
-	/// Storage: `PolkadotXcm::VersionNotifyTargets` (r:4 w:2)
+	/// Storage: `PolkadotXcm::VersionNotifyTargets` (r:5 w:2)
 	/// Proof: `PolkadotXcm::VersionNotifyTargets` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// Storage: `PolkadotXcm::SupportedVersion` (r:1 w:0)
 	/// Proof: `PolkadotXcm::SupportedVersion` (`max_values`: None, `max_size`: None, mode: `Measured`)
@@ -247,12 +254,51 @@
 	/// Proof: `ParachainSystem::PendingUpwardMessages` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	fn migrate_and_notify_old_targets() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `349`
-		//  Estimated: `11239`
-		// Minimum execution time: 30_394_000 picoseconds.
-		Weight::from_parts(30_868_000, 11239)
-			.saturating_add(T::DbWeight::get().reads(9_u64))
+		//  Measured:  `345`
+		//  Estimated: `13710`
+		// Minimum execution time: 31_871_000 picoseconds.
+		Weight::from_parts(32_364_000, 13710)
+			.saturating_add(T::DbWeight::get().reads(10_u64))
 			.saturating_add(T::DbWeight::get().writes(4_u64))
 	}
+	/// Storage: `PolkadotXcm::QueryCounter` (r:1 w:1)
+	/// Proof: `PolkadotXcm::QueryCounter` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `PolkadotXcm::Queries` (r:0 w:1)
+	/// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	fn new_query() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `136`
+		//  Estimated: `1621`
+		// Minimum execution time: 4_750_000 picoseconds.
+		Weight::from_parts(5_014_000, 1621)
+			.saturating_add(T::DbWeight::get().reads(1_u64))
+			.saturating_add(T::DbWeight::get().writes(2_u64))
+	}
+	/// Storage: `PolkadotXcm::Queries` (r:1 w:1)
+	/// Proof: `PolkadotXcm::Queries` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	fn take_response() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `7773`
+		//  Estimated: `11238`
+		// Minimum execution time: 25_672_000 picoseconds.
+		Weight::from_parts(25_937_000, 11238)
+			.saturating_add(T::DbWeight::get().reads(1_u64))
+			.saturating_add(T::DbWeight::get().writes(1_u64))
+	}
+	/// Storage: `PolkadotXcm::AssetTraps` (r:1 w:1)
+	/// Proof: `PolkadotXcm::AssetTraps` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `ForeignAssets::ForeignAssetToCollection` (r:1 w:0)
+	/// Proof: `ForeignAssets::ForeignAssetToCollection` (`max_values`: None, `max_size`: Some(614), added: 3089, mode: `MaxEncodedLen`)
+	/// Storage: `ParachainInfo::ParachainId` (r:1 w:0)
+	/// Proof: `ParachainInfo::ParachainId` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	fn claim_assets() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `366`
+		//  Estimated: `4079`
+		// Minimum execution time: 44_409_000 picoseconds.
+		Weight::from_parts(45_102_000, 4079)
+			.saturating_add(T::DbWeight::get().reads(3_u64))
+			.saturating_add(T::DbWeight::get().writes(1_u64))
+	}
 }
 
modifiedruntime/opal/Cargo.tomldiffbeforeafterboth
--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -31,6 +31,7 @@
 runtime-benchmarks = [
 	"pallet-preimage/runtime-benchmarks",
 	'cumulus-pallet-parachain-system/runtime-benchmarks',
+	'parachains-common/runtime-benchmarks',
 	'frame-benchmarking',
 	'frame-support/runtime-benchmarks',
 	'frame-system-benchmarking',
@@ -61,6 +62,7 @@
 	'pallet-unique/runtime-benchmarks',
 	'pallet-utility/runtime-benchmarks',
 	'pallet-xcm/runtime-benchmarks',
+	'pallet-message-queue/runtime-benchmarks',
 	'polkadot-runtime-common/runtime-benchmarks',
 	'sp-runtime/runtime-benchmarks',
 	'staging-xcm-builder/runtime-benchmarks',
@@ -73,6 +75,7 @@
 	'cumulus-primitives-aura/std',
 	'cumulus-primitives-core/std',
 	'cumulus-primitives-utility/std',
+	'parachains-common/std',
 	'frame-executive/std',
 	'frame-support/std',
 	'frame-system-rpc-runtime-api/std',
@@ -127,6 +130,8 @@
 	'pallet-treasury/std',
 	'pallet-unique/std',
 	'pallet-utility/std',
+	'pallet-xcm/std',
+	'pallet-message-queue/std',
 	'polkadot-runtime-common/std',
 	'serde',
 	'sp-api/std',
@@ -141,6 +146,7 @@
 	'sp-storage/std',
 	'sp-transaction-pool/std',
 	'sp-version/std',
+	'sp-genesis-builder/std',
 	'staging-parachain-info/std',
 	'staging-xcm-builder/std',
 	'staging-xcm-executor/std',
@@ -220,6 +226,7 @@
 	'pallet-unique/try-runtime',
 	'pallet-utility/try-runtime',
 	'pallet-xcm/try-runtime',
+	'pallet-message-queue/try-runtime',
 	'polkadot-runtime-common/try-runtime',
 	'staging-parachain-info/try-runtime',
 ]
@@ -248,6 +255,7 @@
 cumulus-primitives-core = { workspace = true }
 cumulus-primitives-timestamp = { workspace = true }
 cumulus-primitives-utility = { workspace = true }
+parachains-common = { workspace = true }
 frame-executive = { workspace = true }
 frame-support = { workspace = true }
 frame-system = { workspace = true }
@@ -269,6 +277,7 @@
 pallet-treasury = { workspace = true }
 pallet-utility = { workspace = true }
 pallet-xcm = { workspace = true }
+pallet-message-queue = { workspace = true }
 parity-scale-codec = { workspace = true }
 polkadot-parachain-primitives = { workspace = true }
 polkadot-runtime-common = { workspace = true }
@@ -287,6 +296,7 @@
 sp-storage = { workspace = true }
 sp-transaction-pool = { workspace = true }
 sp-version = { workspace = true }
+sp-genesis-builder = { workspace = true }
 staging-parachain-info = { workspace = true }
 staging-xcm = { workspace = true }
 staging-xcm-builder = { workspace = true }
modifiedruntime/opal/src/xcm_barrier.rsdiffbeforeafterboth
--- a/runtime/opal/src/xcm_barrier.rs
+++ b/runtime/opal/src/xcm_barrier.rs
@@ -15,15 +15,15 @@
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 use frame_support::{match_types, traits::Everything};
-use staging_xcm::latest::{Junctions::*, MultiLocation};
+use staging_xcm::latest::{Junctions::*, Location};
 use staging_xcm_builder::{
 	AllowExplicitUnpaidExecutionFrom, AllowTopLevelPaidExecutionFrom, TakeWeightCredit,
 	TrailingSetTopicAsId,
 };
 
 match_types! {
-	pub type ParentOnly: impl Contains<MultiLocation> = {
-		MultiLocation { parents: 1, interior: Here }
+	pub type ParentOnly: impl Contains<Location> = {
+		Location { parents: 1, interior: Here }
 	};
 }
 
modifiedruntime/quartz/Cargo.tomldiffbeforeafterboth
--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -24,6 +24,7 @@
 runtime-benchmarks = [
 	"pallet-preimage/runtime-benchmarks",
 	'cumulus-pallet-parachain-system/runtime-benchmarks',
+	'parachains-common/runtime-benchmarks',
 	'frame-benchmarking',
 	'frame-support/runtime-benchmarks',
 	'frame-system-benchmarking',
@@ -58,6 +59,7 @@
 	'pallet-unique/runtime-benchmarks',
 	'pallet-utility/runtime-benchmarks',
 	'pallet-xcm/runtime-benchmarks',
+	'pallet-message-queue/runtime-benchmarks',
 	'polkadot-runtime-common/runtime-benchmarks',
 	'sp-runtime/runtime-benchmarks',
 	'staging-xcm-builder/runtime-benchmarks',
@@ -69,6 +71,7 @@
 	'cumulus-pallet-xcmp-queue/std',
 	'cumulus-primitives-core/std',
 	'cumulus-primitives-utility/std',
+	'parachains-common/std',
 	'frame-executive/std',
 	'frame-support/std',
 	'frame-system-rpc-runtime-api/std',
@@ -127,6 +130,8 @@
 	'pallet-treasury/std',
 	'pallet-unique/std',
 	'pallet-utility/std',
+	'pallet-xcm/std',
+	'pallet-message-queue/std',
 	'polkadot-runtime-common/std',
 	'serde',
 	'sp-api/std',
@@ -140,6 +145,7 @@
 	'sp-std/std',
 	'sp-transaction-pool/std',
 	'sp-version/std',
+	'sp-genesis-builder/std',
 	'staging-parachain-info/std',
 	'staging-xcm-builder/std',
 	'staging-xcm-executor/std',
@@ -210,6 +216,7 @@
 	'pallet-unique/try-runtime',
 	'pallet-utility/try-runtime',
 	'pallet-xcm/try-runtime',
+	'pallet-message-queue/try-runtime',
 	'polkadot-runtime-common/try-runtime',
 	'staging-parachain-info/try-runtime',
 ]
@@ -236,6 +243,7 @@
 cumulus-primitives-core = { workspace = true }
 cumulus-primitives-timestamp = { workspace = true }
 cumulus-primitives-utility = { workspace = true }
+parachains-common = { workspace = true }
 frame-executive = { workspace = true }
 frame-support = { workspace = true }
 frame-system = { workspace = true }
@@ -257,6 +265,7 @@
 pallet-treasury = { workspace = true }
 pallet-utility = { workspace = true }
 pallet-xcm = { workspace = true }
+pallet-message-queue = { workspace = true }
 parity-scale-codec = { workspace = true }
 polkadot-parachain-primitives = { workspace = true }
 polkadot-runtime-common = { workspace = true }
@@ -275,6 +284,7 @@
 sp-storage = { workspace = true }
 sp-transaction-pool = { workspace = true }
 sp-version = { workspace = true }
+sp-genesis-builder = { workspace = true }
 staging-parachain-info = { workspace = true }
 staging-xcm = { workspace = true }
 staging-xcm-builder = { workspace = true }
modifiedruntime/quartz/src/xcm_barrier.rsdiffbeforeafterboth
--- a/runtime/quartz/src/xcm_barrier.rs
+++ b/runtime/quartz/src/xcm_barrier.rs
@@ -15,7 +15,7 @@
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 use frame_support::{match_types, traits::Everything};
-use staging_xcm::latest::{Junctions::*, MultiLocation};
+use staging_xcm::latest::{Junctions::*, Location};
 use staging_xcm_builder::{
 	AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses, AllowSubscriptionsFrom,
 	AllowTopLevelPaidExecutionFrom, TakeWeightCredit, TrailingSetTopicAsId,
@@ -24,13 +24,13 @@
 use crate::PolkadotXcm;
 
 match_types! {
-	pub type ParentOnly: impl Contains<MultiLocation> = {
-		MultiLocation { parents: 1, interior: Here }
+	pub type ParentOnly: impl Contains<Location> = {
+		Location { parents: 1, interior: Here }
 	};
 
-	pub type ParentOrSiblings: impl Contains<MultiLocation> = {
-		MultiLocation { parents: 1, interior: Here } |
-		MultiLocation { parents: 1, interior: X1(_) }
+	pub type ParentOrSiblings: impl Contains<Location> = {
+		Location { parents: 1, interior: Here } |
+		Location { parents: 1, interior: X1(_) }
 	};
 }
 
modifiedruntime/tests/src/lib.rsdiffbeforeafterboth
--- a/runtime/tests/src/lib.rs
+++ b/runtime/tests/src/lib.rs
@@ -98,6 +98,14 @@
 	type SS58Prefix = SS58Prefix;
 	type OnSetCode = ();
 	type MaxConsumers = ConstU32<16>;
+
+	type RuntimeTask = ();
+
+	type SingleBlockMigrations = ();
+	type MultiBlockMigrator = ();
+	type PreInherents = ();
+	type PostInherents = ();
+	type PostTransactions = ();
 }
 
 parameter_types! {
@@ -117,7 +125,6 @@
 	type ReserveIdentifier = [u8; 8];
 	type MaxFreezes = MaxLocks;
 	type FreezeIdentifier = [u8; 8];
-	type MaxHolds = MaxLocks;
 	type RuntimeHoldReason = RuntimeHoldReason;
 	type RuntimeFreezeReason = RuntimeFreezeReason;
 }
@@ -237,6 +244,7 @@
 	type BlockHashMapping = SubstrateBlockHashMapping<Self>;
 	type Timestamp = Timestamp;
 	type GasLimitPovSizeRatio = ConstU64<0>;
+	type SuicideQuickClearLimit = ConstU32<0>;
 }
 impl pallet_evm_coder_substrate::Config for Test {}
 
modifiedruntime/unique/Cargo.tomldiffbeforeafterboth
--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -21,6 +21,8 @@
 pov-estimate = []
 runtime-benchmarks = [
 	"pallet-preimage/runtime-benchmarks",
+	'cumulus-pallet-parachain-system/runtime-benchmarks',
+	'parachains-common/runtime-benchmarks',
 	'frame-benchmarking',
 	'frame-support/runtime-benchmarks',
 	'frame-system-benchmarking',
@@ -55,6 +57,7 @@
 	'pallet-unique/runtime-benchmarks',
 	'pallet-utility/runtime-benchmarks',
 	'pallet-xcm/runtime-benchmarks',
+	'pallet-message-queue/runtime-benchmarks',
 	'polkadot-runtime-common/runtime-benchmarks',
 	'sp-runtime/runtime-benchmarks',
 	'staging-xcm-builder/runtime-benchmarks',
@@ -67,6 +70,7 @@
 	'cumulus-pallet-xcmp-queue/std',
 	'cumulus-primitives-core/std',
 	'cumulus-primitives-utility/std',
+	'parachains-common/std',
 	'frame-executive/std',
 	'frame-support/std',
 	'frame-system-rpc-runtime-api/std',
@@ -125,6 +129,8 @@
 	'pallet-treasury/std',
 	'pallet-unique/std',
 	'pallet-utility/std',
+	'pallet-xcm/std',
+	'pallet-message-queue/std',
 	'polkadot-runtime-common/std',
 	'sp-api/std',
 	'sp-block-builder/std',
@@ -137,6 +143,7 @@
 	'sp-std/std',
 	'sp-transaction-pool/std',
 	'sp-version/std',
+	'sp-genesis-builder/std',
 	'staging-parachain-info/std',
 	'staging-xcm-builder/std',
 	'staging-xcm-executor/std',
@@ -212,6 +219,7 @@
 	'pallet-unique/try-runtime',
 	'pallet-utility/try-runtime',
 	'pallet-xcm/try-runtime',
+	'pallet-message-queue/try-runtime',
 	'polkadot-runtime-common/try-runtime',
 	'staging-parachain-info/try-runtime',
 ]
@@ -239,6 +247,7 @@
 cumulus-primitives-core = { workspace = true }
 cumulus-primitives-timestamp = { workspace = true }
 cumulus-primitives-utility = { workspace = true }
+parachains-common = { workspace = true }
 frame-executive = { workspace = true }
 frame-support = { workspace = true }
 frame-system = { workspace = true }
@@ -260,6 +269,7 @@
 pallet-treasury = { workspace = true }
 pallet-utility = { workspace = true }
 pallet-xcm = { workspace = true }
+pallet-message-queue = { workspace = true }
 parity-scale-codec = { workspace = true }
 polkadot-parachain-primitives = { workspace = true }
 polkadot-runtime-common = { workspace = true }
@@ -278,6 +288,7 @@
 sp-storage = { workspace = true }
 sp-transaction-pool = { workspace = true }
 sp-version = { workspace = true }
+sp-genesis-builder = { workspace = true }
 staging-parachain-info = { workspace = true }
 staging-xcm = { workspace = true }
 staging-xcm-builder = { workspace = true }
modifiedruntime/unique/src/xcm_barrier.rsdiffbeforeafterboth
--- a/runtime/unique/src/xcm_barrier.rs
+++ b/runtime/unique/src/xcm_barrier.rs
@@ -15,7 +15,7 @@
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 use frame_support::{match_types, traits::Everything};
-use staging_xcm::latest::{Junctions::*, MultiLocation};
+use staging_xcm::latest::{Junctions::*, Location};
 use staging_xcm_builder::{
 	AllowExplicitUnpaidExecutionFrom, AllowKnownQueryResponses, AllowSubscriptionsFrom,
 	AllowTopLevelPaidExecutionFrom, TakeWeightCredit, TrailingSetTopicAsId,
@@ -24,13 +24,13 @@
 use crate::PolkadotXcm;
 
 match_types! {
-	pub type ParentOnly: impl Contains<MultiLocation> = {
-		MultiLocation { parents: 1, interior: Here }
+	pub type ParentOnly: impl Contains<Location> = {
+		Location { parents: 1, interior: Here }
 	};
 
-	pub type ParentOrSiblings: impl Contains<MultiLocation> = {
-		MultiLocation { parents: 1, interior: Here } |
-		MultiLocation { parents: 1, interior: X1(_) }
+	pub type ParentOrSiblings: impl Contains<Location> = {
+		Location { parents: 1, interior: Here } |
+		Location { parents: 1, interior: X1(_) }
 	};
 }