git.delta.rocks / unique-network / refs/commits / 6616dda5f558

difftreelog

build update runtime and node

Daniel Shiposha2024-05-22parent: #af2ec6b.patch.diff
in: master

30 files changed

modifiedCargo.lockdiffbeforeafterboth
before · Cargo.lock
1265 packageslockfile v3
modifiedCargo.tomldiffbeforeafterboth
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -95,6 +95,7 @@
 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" }
@@ -108,6 +109,7 @@
 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" }
@@ -132,6 +134,7 @@
 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 = "10.0.0"
 polkadot-parachain-primitives = { default-features = false, version = "9.0.0" }
@@ -199,10 +202,10 @@
 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"] }
@@ -210,7 +213,7 @@
 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" }
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>>> {
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
@@ -16,6 +16,7 @@
 
 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"))]
@@ -153,12 +154,7 @@
 		use $runtime::*;
 
 		RuntimeGenesisConfig {
-			system: SystemConfig {
-				code: WASM_BINARY
-					.expect("WASM binary was not build, please build it!")
-					.to_vec(),
-				..Default::default()
-			},
+			system: Default::default(),
 			balances: BalancesConfig {
 				balances: $endowed_accounts
 					.iter()
@@ -216,12 +212,7 @@
 		use $runtime::*;
 
 		RuntimeGenesisConfig {
-			system: SystemConfig {
-				code: WASM_BINARY
-					.expect("WASM binary was not build, please build it!")
-					.to_vec(),
-				..Default::default()
-			},
+			system: Default::default(),
 			balances: BalancesConfig {
 				balances: $endowed_accounts
 					.iter()
@@ -324,6 +315,7 @@
 			relay_chain: "rococo-dev".into(),
 			para_id: PARA_ID,
 		},
+		WASM_BINARY.expect("WASM binary was not build, please build it!"),
 	)
 }
 
@@ -398,5 +390,6 @@
 			relay_chain: "westend-local".into(),
 			para_id: PARA_ID,
 		},
+		WASM_BINARY.expect("WASM binary was not build, please build it!"),
 	)
 }
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
@@ -49,7 +49,9 @@
 use crate::{
 	chain_spec::{self, RuntimeIdentification, ServiceId, ServiceIdentification},
 	cli::{Cli, RelayChainCli, Subcommand},
-	service::{new_partial, start_dev_node, start_node, OpalRuntimeExecutor},
+	service::{
+		new_partial, start_dev_node, start_node, OpalRuntimeExecutor, ParachainHostFunctions,
+	},
 };
 
 macro_rules! no_runtime_err {
@@ -337,10 +339,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 +351,12 @@
 		Some(Subcommand::Benchmark(cmd)) => {
 			use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE};
 			use polkadot_cli::Block;
-			use sp_io::SubstrateHostFunctions;
 
 			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::<Block, ParachainHostFunctions>(config))
 				}
 				BenchmarkCmd::Block(cmd) => runner.sync_run(|config| {
 					let partials = new_partial::<
@@ -422,21 +420,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>,
@@ -975,12 +980,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 +994,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
@@ -33,7 +33,7 @@
 	#[benchmark]
 	fn force_register_foreign_asset() -> Result<(), BenchmarkError> {
 		let location =
-			MultiLocation::from(X3(Parachain(1000), PalletInstance(42), GeneralIndex(1)));
+			Location::from((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;
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)
 	}
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,13 +64,11 @@
 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, ()>;
@@ -96,6 +95,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,12 @@
 	type CallDispatcher = RuntimeCall;
 	type SafeCallFilter = Nothing;
 	type Aliasers = Nothing;
+	type TransactionalProcessor = FrameTransactionalProcessor;
 }
 
 #[cfg(feature = "runtime-benchmarks")]
 parameter_types! {
-	pub ReachableDest: Option<MultiLocation> = Some(Parent.into());
+	pub ReachableDest: Option<Location> = Some(Parent.into());
 }
 
 impl pallet_xcm::Config for Runtime {
@@ -229,13 +231,39 @@
 	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 +277,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,7 +40,7 @@
 			Permill,
 			traits::{Block as BlockT},
 			transaction_validity::{TransactionSource, TransactionValidity},
-			ApplyExtrinsicResult, DispatchError,
+			ApplyExtrinsicResult, DispatchError, ExtrinsicInclusionMode,
 		};
 		use frame_support::{
 			pallet_prelude::Weight,
@@ -243,7 +243,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 +442,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
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
@@ -254,5 +254,25 @@
 			.saturating_add(T::DbWeight::get().reads(9_u64))
 			.saturating_add(T::DbWeight::get().writes(4_u64))
 	}
+
+	fn transfer_assets() -> Weight {
+        // TODO!
+		Self::send()
+    }
+
+	fn new_query() -> Weight {
+        // TODO!
+		Self::send()
+    }
+
+	fn take_response() -> Weight {
+        // TODO!
+		Self::send()
+    }
+
+	fn claim_assets() -> Weight {
+        // TODO!
+		Self::send()
+    }
 }
 
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',
@@ -220,6 +225,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 +254,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 +276,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 }
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',
@@ -210,6 +215,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 +242,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 +264,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 }
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/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',
@@ -212,6 +218,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 +246,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 +268,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 }
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(_) }
 	};
 }