git.delta.rocks / unique-network / refs/commits / 1c910af804ae

difftreelog

build upgrade to polkadot v0.9.39

Yaroslav Bolyukin2023-03-10parent: #c91aad4.patch.diff
in: master

48 files changed

added.maintain/external-weight-template.hbsdiffbeforeafterboth
--- /dev/null
+++ b/.maintain/external-weight-template.hbs
@@ -0,0 +1,70 @@
+// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs
+
+//! Autogenerated weights for {{pallet}}
+//!
+//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}}
+//! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: {{cmd.repeat}}, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}`
+//! WORST CASE MAP SIZE: `{{cmd.worst_case_map_values}}`
+//! EXECUTION: {{cmd.execution}}, WASM-EXECUTION: {{cmd.wasm_execution}}, CHAIN: {{cmd.chain}}, DB CACHE: {{cmd.db_cache}}
+
+// Executed Command:
+{{#each args as |arg|}}
+// {{arg}}
+{{/each}}
+
+#![cfg_attr(rustfmt, rustfmt_skip)]
+#![allow(unused_parens)]
+#![allow(unused_imports)]
+#![allow(missing_docs)]
+#![allow(clippy::unnecessary_cast)]
+
+use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
+use sp_std::marker::PhantomData;
+
+/// Weights for {{pallet}} using the Substrate node and recommended hardware.
+pub struct SubstrateWeight<T>(PhantomData<T>);
+{{#if (eq pallet "frame_system")}}
+impl<T: crate::Config> {{pallet}}::WeightInfo for SubstrateWeight<T> {
+{{else}}
+impl<T: frame_system::Config> {{pallet}}::WeightInfo for SubstrateWeight<T> {
+{{/if}}
+	{{#each benchmarks as |benchmark|}}
+	{{#each benchmark.comments as |comment|}}
+	/// {{comment}}
+	{{/each}}
+	{{#each benchmark.component_ranges as |range|}}
+	/// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`.
+	{{/each}}
+	fn {{benchmark.name~}}
+	(
+		{{~#each benchmark.components as |c| ~}}
+		{{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}}
+	) -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}`
+		//  Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}`
+		// Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds.
+		Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}})
+			{{#each benchmark.component_weight as |cw|}}
+			// Standard Error: {{underscore cw.error}}
+			.saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into()))
+			{{/each}}
+			{{#if (ne benchmark.base_reads "0")}}
+			.saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64))
+			{{/if}}
+			{{#each benchmark.component_reads as |cr|}}
+			.saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into())))
+			{{/each}}
+			{{#if (ne benchmark.base_writes "0")}}
+			.saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64))
+			{{/if}}
+			{{#each benchmark.component_writes as |cw|}}
+			.saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into())))
+			{{/each}}
+			{{#each benchmark.component_calculated_proof_size as |cp|}}
+			.saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into()))
+			{{/each}}
+	}
+	{{/each}}
+}
+
modified.maintain/frame-weight-template.hbsdiffbeforeafterboth
--- a/.maintain/frame-weight-template.hbs
+++ b/.maintain/frame-weight-template.hbs
@@ -4,6 +4,7 @@
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}}
 //! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: {{cmd.repeat}}, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}`
+//! WORST CASE MAP SIZE: `{{cmd.worst_case_map_values}}`
 //! EXECUTION: {{cmd.execution}}, WASM-EXECUTION: {{cmd.wasm_execution}}, CHAIN: {{cmd.chain}}, DB CACHE: {{cmd.db_cache}}
 
 // Executed Command:
@@ -40,29 +41,39 @@
 {{/if}}
 	{{#each benchmarks as |benchmark|}}
 	{{#each benchmark.comments as |comment|}}
-	// {{comment}}
+	/// {{comment}}
 	{{/each}}
+	{{#each benchmark.component_ranges as |range|}}
+	/// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`.
+	{{/each}}
 	fn {{benchmark.name~}}
 	(
 		{{~#each benchmark.components as |c| ~}}
 		{{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}}
 	) -> Weight {
-		Weight::from_ref_time({{underscore benchmark.base_weight}} as u64)
+		// Proof Size summary in bytes:
+		//  Measured:  `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}`
+		//  Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}`
+		// Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds.
+		Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}})
 			{{#each benchmark.component_weight as |cw|}}
 			// Standard Error: {{underscore cw.error}}
-			.saturating_add(Weight::from_ref_time({{underscore cw.slope}} as u64).saturating_mul({{cw.name}} as u64))
+			.saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into()))
 			{{/each}}
 			{{#if (ne benchmark.base_reads "0")}}
-			.saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}} as u64))
+			.saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}}_u64))
 			{{/if}}
 			{{#each benchmark.component_reads as |cr|}}
-			.saturating_add(T::DbWeight::get().reads(({{cr.slope}} as u64).saturating_mul({{cr.name}} as u64)))
+			.saturating_add(T::DbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into())))
 			{{/each}}
 			{{#if (ne benchmark.base_writes "0")}}
-			.saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}} as u64))
+			.saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}}_u64))
 			{{/if}}
 			{{#each benchmark.component_writes as |cw|}}
-			.saturating_add(T::DbWeight::get().writes(({{cw.slope}} as u64).saturating_mul({{cw.name}} as u64)))
+			.saturating_add(T::DbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into())))
+			{{/each}}
+			{{#each benchmark.component_calculated_proof_size as |cp|}}
+			.saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into()))
 			{{/each}}
 	}
 	{{/each}}
@@ -72,30 +83,41 @@
 impl WeightInfo for () {
 	{{#each benchmarks as |benchmark|}}
 	{{#each benchmark.comments as |comment|}}
-	// {{comment}}
+	/// {{comment}}
 	{{/each}}
+	{{#each benchmark.component_ranges as |range|}}
+	/// The range of component `{{range.name}}` is `[{{range.min}}, {{range.max}}]`.
+	{{/each}}
 	fn {{benchmark.name~}}
 	(
 		{{~#each benchmark.components as |c| ~}}
 		{{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}}
 	) -> Weight {
-		Weight::from_ref_time({{underscore benchmark.base_weight}} as u64)
+		// Proof Size summary in bytes:
+		//  Measured:  `{{benchmark.base_recorded_proof_size}}{{#each benchmark.component_recorded_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}`
+		//  Estimated: `{{benchmark.base_calculated_proof_size}}{{#each benchmark.component_calculated_proof_size as |cp|}} + {{cp.name}} * ({{cp.slope}} ±{{underscore cp.error}}){{/each}}`
+		// Minimum execution time: {{underscore benchmark.min_execution_time}}_000 picoseconds.
+		Weight::from_parts({{underscore benchmark.base_weight}}, {{benchmark.base_calculated_proof_size}})
 			{{#each benchmark.component_weight as |cw|}}
 			// Standard Error: {{underscore cw.error}}
-			.saturating_add(Weight::from_ref_time({{underscore cw.slope}} as u64).saturating_mul({{cw.name}} as u64))
+			.saturating_add(Weight::from_parts({{underscore cw.slope}}, 0).saturating_mul({{cw.name}}.into()))
 			{{/each}}
 			{{#if (ne benchmark.base_reads "0")}}
-			.saturating_add(RocksDbWeight::get().reads({{benchmark.base_reads}} as u64))
+			.saturating_add(RocksDbWeight::get().reads({{benchmark.base_reads}}_u64))
 			{{/if}}
 			{{#each benchmark.component_reads as |cr|}}
-			.saturating_add(RocksDbWeight::get().reads(({{cr.slope}} as u64).saturating_mul({{cr.name}} as u64)))
+			.saturating_add(RocksDbWeight::get().reads(({{cr.slope}}_u64).saturating_mul({{cr.name}}.into())))
 			{{/each}}
 			{{#if (ne benchmark.base_writes "0")}}
-			.saturating_add(RocksDbWeight::get().writes({{benchmark.base_writes}} as u64))
+			.saturating_add(RocksDbWeight::get().writes({{benchmark.base_writes}}_u64))
 			{{/if}}
 			{{#each benchmark.component_writes as |cw|}}
-			.saturating_add(RocksDbWeight::get().writes(({{cw.slope}} as u64).saturating_mul({{cw.name}} as u64)))
+			.saturating_add(RocksDbWeight::get().writes(({{cw.slope}}_u64).saturating_mul({{cw.name}}.into())))
+			{{/each}}
+			{{#each benchmark.component_calculated_proof_size as |cp|}}
+			.saturating_add(Weight::from_parts(0, {{cp.slope}}).saturating_mul({{cp.name}}.into()))
 			{{/each}}
 	}
 	{{/each}}
 }
+
modifiedCargo.lockdiffbeforeafterboth
before · Cargo.lock
1074 packageslockfile v3
after · Cargo.lock
1078 packageslockfile v3
modifiedCargo.tomldiffbeforeafterboth
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -11,7 +11,7 @@
 	'runtime/tests',
 	'runtime/unique',
 ]
-package.version = "0.9.37"
+package.version = "0.9.39"
 resolver = "2"
 
 [profile.release]
@@ -29,7 +29,7 @@
 app-promotion-rpc = { path = "primitives/app_promotion_rpc", default-features = false }
 evm-coder = { git = "https://github.com/uniquenetwork/evm-coder", tag = "v0.3.1", default-features = false }
 pallet-app-promotion = { path = "pallets/app-promotion", default-features = false }
-pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" }
+pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.39" }
 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" }
@@ -56,7 +56,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-v0.9.37" }
+up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.39" }
 
 # Unique: Runtimes
 opal-runtime = { path = "runtime/opal" }
@@ -64,124 +64,123 @@
 unique-runtime = { path = "runtime/unique" }
 
 # Frontier (Unique patches over the Parity version)
-fc-consensus = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fc-db = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fc-mapping-sync = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+fc-consensus = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+fc-db = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+fc-mapping-sync = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
 
 # Parity
 codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.2.2" }
-cumulus-client-cli = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-client-consensus-aura = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-client-consensus-common = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-client-network = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-client-service = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-dmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-xcm = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-primitives-core = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-primitives-parachain-inherent = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-primitives-timestamp = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-primitives-utility = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-relay-chain-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-frame-executive = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-preimage = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-randomness-collective-flip = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-sudo = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-timestamp = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-transaction-payment = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-transaction-payment-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-treasury = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-parachain-info = { default-features = false, git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" }
-polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" }
-polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" }
-sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-consensus-manual-seal = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+cumulus-client-cli = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-client-consensus-aura = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-client-consensus-common = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-client-network = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-client-service = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-pallet-aura-ext = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-pallet-dmp-queue = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-pallet-parachain-system = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-pallet-xcm = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-pallet-xcmp-queue = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-primitives-core = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-primitives-parachain-inherent = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-primitives-timestamp = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-primitives-utility = { default-features = false , git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-relay-chain-inprocess-interface = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-relay-chain-interface = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+cumulus-relay-chain-minimal-node = { git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+frame-executive = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+frame-system-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-preimage = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-sudo = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-timestamp = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-transaction-payment = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-transaction-payment-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-treasury = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39", default-features = false }
+parachain-info = { default-features = false, git = "https://github.com/uniquenetwork/cumulus", branch = "polkadot-v0.9.39" }
+polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39" }
+polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39", default-features = false }
+polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39" }
+polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39" }
+sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-consensus-manual-seal = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
 scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-block-builder = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-consensus-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-inherents = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-offchain = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-staking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-transaction-pool = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-trie = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-version = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
+sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-block-builder = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-consensus-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-inherents = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-offchain = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-staking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-transaction-pool = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-trie = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-version = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39", default-features = false }
+xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39", default-features = false }
+xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.39", default-features = false }
 
 # Parity: Build utils
-substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
 
 # Parity: Benchmarking
-frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+frame-system-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
 
 # Parity: Try Runtime
-frame-try-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-try-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
 
 # ORML
-orml-tokens = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false }
-orml-traits = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false }
-orml-vesting = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false }
-orml-xtokens = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false }
+orml-tokens = { default-features = false , git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" }
+orml-traits = { default-features = false , git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" }
+orml-vesting = { default-features = false , git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" }
+orml-xtokens = { default-features = false , git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v0.9.39" }
 
 # Other
 derivative = { version = "2.2.0", features = ["use_core"] }
modifiedMakefilediffbeforeafterboth
--- a/Makefile
+++ b/Makefile
@@ -82,8 +82,8 @@
 	cargo run --release --features runtime-benchmarks,$(RUNTIME) -- \
 	benchmark pallet --pallet pallet-$(if $(PALLET),$(PALLET),$(error Must set PALLET)) \
 	--wasm-execution compiled --extrinsic '*' \
-	--template .maintain/frame-weight-template.hbs --steps=50 --repeat=80 --heap-pages=4096 \
-	--output=./pallets/$(if $(PALLET_DIR),$(PALLET_DIR),$(PALLET))/src/weights.rs
+	$(if $(TEMPLATE),$(TEMPLATE),--template=.maintain/frame-weight-template.hbs) --steps=50 --repeat=80 --heap-pages=4096 \
+	--output=$(if $(OUTPUT),$(OUTPUT),./pallets/$(if $(PALLET_DIR),$(PALLET_DIR),$(PALLET))/src/weights.rs)
 
 .PHONY: bench-evm-migration
 bench-evm-migration:
@@ -135,15 +135,19 @@
 
 .PHONY: bench-app-promotion
 bench-app-promotion:
-	make _bench PALLET=app-promotion PALLET_DIR=app-promotion
+	make _bench PALLET=app-promotion
 
 .PHONY: bench-maintenance
 bench-maintenance:
 	make _bench PALLET=maintenance
 
+.PHONY: bench-xcm
+bench-xcm:
+	make _bench PALLET=xcm OUTPUT=./runtime/common/weights/xcm.rs TEMPLATE="--template=.maintain/external-weight-template.hbs"
+
 .PHONY: bench
 # Disabled: bench-scheduler, bench-collator-selection, bench-identity
-bench: bench-common bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-configuration bench-foreign-assets bench-maintenance
+bench: bench-common bench-evm-migration bench-unique bench-structure bench-fungible bench-refungible bench-nonfungible bench-configuration bench-foreign-assets bench-maintenance bench-xcm
 
 .PHONY: check
 check:
modifiedREADME.mddiffbeforeafterboth
--- a/README.md
+++ b/README.md
@@ -90,7 +90,7 @@
 ```
 git clone https://github.com/paritytech/polkadot.git
 cd polkadot
-git checkout release-v0.9.37
+git checkout release-v0.9.39
 cargo build --release
 ```
 
modifiedclient/rpc/src/lib.rsdiffbeforeafterboth
--- a/client/rpc/src/lib.rs
+++ b/client/rpc/src/lib.rs
@@ -28,7 +28,7 @@
 	RpcCollection, CollectionId, CollectionStats, CollectionLimits, TokenId, Property,
 	PropertyKeyPermission, TokenData, TokenChild,
 };
-use sp_api::{BlockId, BlockT, ProvideRuntimeApi, ApiExt};
+use sp_api::{BlockT, ProvideRuntimeApi, ApiExt};
 use sp_blockchain::HeaderBackend;
 use up_rpc::UniqueApi as UniqueRuntimeApi;
 use app_promotion_rpc::AppPromotionApi as AppPromotionRuntimeApi;
@@ -342,9 +342,9 @@
 			at: Option<<Block as BlockT>::Hash>,
 		) -> Result<$result> {
 			let api = self.client.runtime_api();
-			let at = BlockId::hash(at.unwrap_or_else(|| self.client.info().best_hash));
+			let at = at.unwrap_or_else(|| self.client.info().best_hash);
 			let _api_version = if let Ok(Some(api_version)) =
-				api.api_version::<$runtime_api_macro!()>(&at)
+				api.api_version::<$runtime_api_macro!()>(at)
 			{
 				api_version
 			} else {
@@ -353,9 +353,9 @@
 			};
 
 			let result = $(if _api_version < $ver {
-				api.$changed_method_name(&at, $($changed_name),*).map(|r| r.map($fixer))
+				api.$changed_method_name(at, $($changed_name),*).map(|r| r.map($fixer))
 			} else)*
-			{ api.$method_name(&at, $($((|$map_arg: $ty| $map))? ($name)),*) };
+			{ api.$method_name(at, $($((|$map_arg: $ty| $map))? ($name)),*) };
 
 			Ok(result
 				.map_err(|e| anyhow!("unable to query: {e}"))?
modifiednode/cli/src/chain_spec.rsdiffbeforeafterboth
--- a/node/cli/src/chain_spec.rs
+++ b/node/cli/src/chain_spec.rs
@@ -202,6 +202,9 @@
 				accounts: BTreeMap::new(),
 			},
 			ethereum: EthereumConfig {},
+			foreign_assets: Default::default(),
+			polkadot_xcm: Default::default(),
+			transaction_payment: Default::default(),
 		}
 	}};
 }
@@ -252,6 +255,9 @@
 				accounts: BTreeMap::new(),
 			},
 			ethereum: EthereumConfig {},
+			foreign_assets: Default::default(),
+			polkadot_xcm: Default::default(),
+			transaction_payment: Default::default(),
 		}
 	}};
 }
modifiednode/cli/src/service.rsdiffbeforeafterboth
--- a/node/cli/src/service.rs
+++ b/node/cli/src/service.rs
@@ -469,7 +469,7 @@
 			block_announce_validator_builder: Some(Box::new(|_| {
 				Box::new(block_announce_validator)
 			})),
-			warp_sync: None,
+			warp_sync_params: None,
 		})?;
 
 	let rpc_client = client.clone();
@@ -495,6 +495,7 @@
 			Duration::new(6, 0),
 			client.clone(),
 			backend.clone(),
+			overrides_handle::<_, _, Runtime>(client.clone()),
 			frontier_backend.clone(),
 			3,
 			0,
@@ -587,6 +588,10 @@
 
 	let relay_chain_slot_duration = Duration::from_secs(6);
 
+	let overseer_handle = relay_chain_interface
+		.overseer_handle()
+		.map_err(|e| sc_service::Error::Application(Box::new(e)))?;
+
 	if validator {
 		let parachain_consensus = build_consensus(
 			client.clone(),
@@ -615,6 +620,7 @@
 			collator_key: collator_key.expect("Command line arguments do not allow this. qed"),
 			relay_chain_interface,
 			relay_chain_slot_duration,
+			recovery_handle: Box::new(overseer_handle),
 		};
 
 		start_collator(params).await?;
@@ -627,6 +633,7 @@
 			import_queue: import_queue_service,
 			relay_chain_interface,
 			relay_chain_slot_duration,
+			recovery_handle: Box::new(overseer_handle),
 		};
 
 		start_full_node(params)?;
@@ -900,7 +907,7 @@
 			spawn_handle: task_manager.spawn_handle(),
 			import_queue,
 			block_announce_validator_builder: None,
-			warp_sync: None,
+			warp_sync_params: None,
 		})?;
 
 	if config.offchain_worker.enabled {
@@ -1016,6 +1023,7 @@
 			Duration::new(6, 0),
 			client.clone(),
 			backend.clone(),
+			overrides_handle::<_, _, Runtime>(client.clone()),
 			frontier_backend.clone(),
 			3,
 			0,
modifiednode/rpc/src/lib.rsdiffbeforeafterboth
--- a/node/rpc/src/lib.rs
+++ b/node/rpc/src/lib.rs
@@ -115,18 +115,15 @@
 	let mut overrides_map = BTreeMap::new();
 	overrides_map.insert(
 		EthereumStorageSchema::V1,
-		Box::new(SchemaV1Override::new(client.clone()))
-			as Box<dyn StorageOverride<_> + Send + Sync>,
+		Box::new(SchemaV1Override::new(client.clone())) as Box<dyn StorageOverride<_> + 'static>,
 	);
 	overrides_map.insert(
 		EthereumStorageSchema::V2,
-		Box::new(SchemaV2Override::new(client.clone()))
-			as Box<dyn StorageOverride<_> + Send + Sync>,
+		Box::new(SchemaV2Override::new(client.clone())) as Box<dyn StorageOverride<_> + 'static>,
 	);
 	overrides_map.insert(
 		EthereumStorageSchema::V3,
-		Box::new(SchemaV3Override::new(client.clone()))
-			as Box<dyn StorageOverride<_> + Send + Sync>,
+		Box::new(SchemaV3Override::new(client.clone())) as Box<dyn StorageOverride<_> + 'static>,
 	);
 
 	Arc::new(OverrideHandle {
modifiedpallets/app-promotion/Cargo.tomldiffbeforeafterboth
--- a/pallets/app-promotion/Cargo.toml
+++ b/pallets/app-promotion/Cargo.toml
@@ -69,4 +69,4 @@
 ################################################################################
 # Other
 
-log = { version = "0.4.16", default-features = false }
\ No newline at end of file
+log = { version = "0.4.16", default-features = false }
modifiedpallets/collator-selection/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/collator-selection/src/benchmarking.rs
+++ b/pallets/collator-selection/src/benchmarking.rs
@@ -119,8 +119,11 @@
 		.collect::<Vec<_>>();
 
 	for who in candidates {
-		<CollatorSelection<T>>::add_invulnerable(T::UpdateOrigin::successful_origin(), who)
-			.unwrap();
+		<CollatorSelection<T>>::add_invulnerable(
+			T::UpdateOrigin::try_successful_origin().unwrap(),
+			who,
+		)
+		.unwrap();
 	}
 }
 
@@ -178,7 +181,7 @@
 			Vec::new()
 		).unwrap();
 
-		let root_origin = T::UpdateOrigin::successful_origin();
+		let root_origin = T::UpdateOrigin::try_successful_origin().unwrap();
 	}: {
 		assert_ok!(
 			<CollatorSelection<T>>::add_invulnerable(root_origin, new_invulnerable.clone())
@@ -193,7 +196,7 @@
 		register_validators::<T>(b);
 		register_invulnerables::<T>(b);
 
-		let root_origin = T::UpdateOrigin::successful_origin();
+		let root_origin = T::UpdateOrigin::try_successful_origin().unwrap();
 		let leaving = <Invulnerables<T>>::get().last().unwrap().clone();
 		whitelist!(leaving);
 	}: {
@@ -304,7 +307,7 @@
 
 		let leaving = <Candidates<T>>::get().last().unwrap().clone();
 		whitelist!(leaving);
-		let origin = T::UpdateOrigin::successful_origin();
+		let origin = T::UpdateOrigin::try_successful_origin().unwrap();
 	}: {
 		assert_ok!(
 			<CollatorSelection<T>>::force_release_license(origin, leaving.clone())
modifiedpallets/collator-selection/src/lib.rsdiffbeforeafterboth
--- a/pallets/collator-selection/src/lib.rs
+++ b/pallets/collator-selection/src/lib.rs
@@ -609,10 +609,6 @@
 				DispatchClass::Mandatory,
 			);
 		}
-
-		fn note_uncle(_author: T::AccountId, _age: T::BlockNumber) {
-			//TODO can we ignore this?
-		}
 	}
 
 	/// Play the role of the session manager.
modifiedpallets/collator-selection/src/mock.rsdiffbeforeafterboth
--- a/pallets/collator-selection/src/mock.rs
+++ b/pallets/collator-selection/src/mock.rs
@@ -62,7 +62,7 @@
 		Aura: pallet_aura::{Pallet, Storage, Config<T>},
 		Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>},
 		CollatorSelection: collator_selection::{Pallet, Call, Storage, Event<T>},
-		Authorship: pallet_authorship::{Pallet, Call, Storage, Inherent},
+		Authorship: pallet_authorship::{Pallet, Storage},
 		Configuration: pallet_configuration::{Pallet, Call, Storage, Event<T>},
 	}
 );
@@ -128,8 +128,6 @@
 
 impl pallet_authorship::Config for Test {
 	type FindAuthor = Author4;
-	type UncleGenerations = ();
-	type FilterUncle = ();
 	type EventHandler = CollatorSelection;
 }
 
modifiedpallets/common/src/lib.rsdiffbeforeafterboth
--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -76,9 +76,10 @@
 	CollectionMode, NFT_SPONSOR_TRANSFER_TIMEOUT, FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,
 	REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, MAX_SPONSOR_TIMEOUT, CUSTOM_DATA_LIMIT, CollectionLimits,
 	CreateCollectionData, SponsorshipState, CreateItemExData, SponsoringRateLimit, budget::Budget,
-	PhantomType, Property, Properties, PropertiesPermissionMap, PropertyKey, PropertyValue,
-	PropertyPermission, PropertiesError, TokenOwnerError, PropertyKeyPermission, TokenData,
-	TrySetProperty, PropertyScope, CollectionPermissions,
+	PhantomType, Property, CollectionProperties as CollectionPropertiesT, TokenProperties,
+	PropertiesPermissionMap, PropertyKey, PropertyValue, PropertyPermission, PropertiesError,
+	TokenOwnerError, PropertyKeyPermission, TokenData, TrySetProperty, PropertyScope,
+	CollectionPermissions,
 };
 use up_pov_estimate_rpc::PovInfo;
 
@@ -800,9 +801,8 @@
 	pub type CollectionProperties<T> = StorageMap<
 		Hasher = Blake2_128Concat,
 		Key = CollectionId,
-		Value = Properties,
+		Value = CollectionPropertiesT,
 		QueryKind = ValueQuery,
-		OnEmpty = up_data_structs::CollectionProperties,
 	>;
 
 	/// Storage of token property permissions of a collection.
@@ -1082,7 +1082,7 @@
 			flags,
 		};
 
-		let mut collection_properties = up_data_structs::CollectionProperties::get();
+		let mut collection_properties = CollectionPropertiesT::new();
 		collection_properties
 			.try_set_from_iter(data.properties.into_iter())
 			.map_err(<Error<T>>::from)?;
@@ -1246,9 +1246,9 @@
 		token_id: TokenId,
 		properties_updates: impl Iterator<Item = (PropertyKey, Option<PropertyValue>)>,
 		is_token_create: bool,
-		mut stored_properties: Properties,
+		mut stored_properties: TokenProperties,
 		is_token_owner: impl Fn() -> Result<bool, DispatchError>,
-		set_token_properties: impl FnOnce(Properties),
+		set_token_properties: impl FnOnce(TokenProperties),
 		log: evm_coder::ethereum::Log,
 	) -> DispatchResult {
 		let is_collection_admin = collection.is_owner_or_admin(sender);
modifiedpallets/configuration/src/lib.rsdiffbeforeafterboth
--- a/pallets/configuration/src/lib.rs
+++ b/pallets/configuration/src/lib.rs
@@ -116,7 +116,7 @@
 
 	#[pallet::storage]
 	pub type XcmAllowedLocationsOverride<T: Config> = StorageValue<
-		Value = BoundedVec<xcm::v2::MultiLocation, T::MaxXcmAllowedLocations>,
+		Value = BoundedVec<xcm::v3::MultiLocation, T::MaxXcmAllowedLocations>,
 		QueryKind = OptionQuery,
 	>;
 
modifiedpallets/foreign-assets/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/foreign-assets/src/benchmarking.rs
+++ b/pallets/foreign-assets/src/benchmarking.rs
@@ -22,15 +22,14 @@
 use crate::AssetMetadata;
 use xcm::opaque::latest::Junction::Parachain;
 use xcm::VersionedMultiLocation;
-use frame_support::{
-	traits::{Currency},
-};
+use xcm::v3::Junctions::X1;
+use frame_support::traits::Currency;
 use sp_std::boxed::Box;
 
 benchmarks! {
 	register_foreign_asset {
 		let owner: T::AccountId = account("user", 0, 1);
-		let location: VersionedMultiLocation = VersionedMultiLocation::from(Parachain(1000).into());
+		let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(1000)));
 		let metadata: AssetMetadata<<<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance> = AssetMetadata{
 			name: "name".into(),
 			symbol: "symbol".into(),
@@ -46,7 +45,7 @@
 
 	update_foreign_asset {
 		let owner: T::AccountId = account("user", 0, 1);
-		let location: VersionedMultiLocation = VersionedMultiLocation::from(Parachain(2000).into());
+		let location: VersionedMultiLocation = VersionedMultiLocation::from(X1(Parachain(2000)));
 		let metadata: AssetMetadata<<<T as Config>::Currency as Currency<<T as frame_system::Config>::AccountId>>::Balance> = AssetMetadata{
 			name: "name".into(),
 			symbol: "symbol".into(),
modifiedpallets/foreign-assets/src/lib.rsdiffbeforeafterboth
--- a/pallets/foreign-assets/src/lib.rs
+++ b/pallets/foreign-assets/src/lib.rs
@@ -250,7 +250,7 @@
 	#[pallet::storage]
 	#[pallet::getter(fn foreign_asset_locations)]
 	pub type ForeignAssetLocations<T: Config> =
-		StorageMap<_, Twox64Concat, ForeignAssetId, xcm::v2::MultiLocation, OptionQuery>;
+		StorageMap<_, Twox64Concat, ForeignAssetId, xcm::v3::MultiLocation, OptionQuery>;
 
 	/// The storages for CurrencyIds.
 	///
@@ -258,7 +258,7 @@
 	#[pallet::storage]
 	#[pallet::getter(fn location_to_currency_ids)]
 	pub type LocationToCurrencyIds<T: Config> =
-		StorageMap<_, Twox64Concat, xcm::v2::MultiLocation, ForeignAssetId, OptionQuery>;
+		StorageMap<_, Twox64Concat, xcm::v3::MultiLocation, ForeignAssetId, OptionQuery>;
 
 	/// The storages for AssetMetadatas.
 	///
@@ -279,6 +279,60 @@
 	#[pallet::without_storage_info]
 	pub struct Pallet<T>(_);
 
+	pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1);
+	#[pallet::hooks]
+	impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
+		fn on_runtime_upgrade() -> Weight {
+			let mut weight = Weight::default();
+			// 0-1 -- xcmv2 => xcmv3
+			if StorageVersion::get::<Pallet<T>>() <= 0 {
+				pub trait V0ToV1 {
+					type Pallet: 'static + PalletInfoAccess;
+				}
+				#[frame_support::storage_alias]
+				type LocationToCurrencyIds<T: Config> =
+					StorageMap<Pallet<T>, Twox64Concat, xcm::v2::MultiLocation, ForeignAssetId>;
+				<ForeignAssetLocations<T>>::translate_values::<xcm::v2::MultiLocation, _>(|loc| {
+					weight += T::DbWeight::get().reads_writes(1, 1);
+					Some(
+						xcm::v3::MultiLocation::try_from(loc)
+							.expect("failed to migrate multilocation from XCMv2 to XCMv3"),
+					)
+				});
+
+				let old_values: Vec<(xcm::v2::MultiLocation, _)> =
+					<LocationToCurrencyIds<T>>::drain().collect();
+				weight += T::DbWeight::get()
+					.reads_writes(old_values.len() as u64, old_values.len() as u64);
+				for (loc, asset_id) in old_values {
+					let loc = xcm::v3::MultiLocation::try_from(loc)
+						.expect("failed to migrate multilocation from XCMv2 to XCMv3");
+					<crate::LocationToCurrencyIds<T>>::insert(loc, asset_id);
+				}
+			}
+			STORAGE_VERSION.put::<Pallet<T>>();
+			weight += T::DbWeight::get().writes(1);
+			weight
+		}
+	}
+
+	#[pallet::genesis_config]
+	pub struct GenesisConfig;
+
+	#[cfg(feature = "std")]
+	impl Default for GenesisConfig {
+		fn default() -> Self {
+			Self
+		}
+	}
+
+	#[pallet::genesis_build]
+	impl<T: Config> GenesisBuild<T> for GenesisConfig {
+		fn build(&self) {
+			STORAGE_VERSION.put::<Pallet<T>>();
+		}
+	}
+
 	#[pallet::call]
 	impl<T: Config> Pallet<T> {
 		#[pallet::call_index(0)]
@@ -474,7 +528,7 @@
 	> WeightTrader for FreeForAll<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>
 {
 	fn new() -> Self {
-		Self(0, Zero::zero(), PhantomData)
+		Self(Weight::default(), Zero::zero(), PhantomData)
 	}
 
 	fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result<Assets, XcmError> {
modifiedpallets/identity/Cargo.tomldiffbeforeafterboth
--- a/pallets/identity/Cargo.toml
+++ b/pallets/identity/Cargo.toml
@@ -35,6 +35,7 @@
 	"frame-benchmarking/runtime-benchmarks",
 	"frame-support/runtime-benchmarks",
 	"frame-system/runtime-benchmarks",
+	"sp-runtime/runtime-benchmarks",
 ]
 std = [
 	"codec/std",
modifiedpallets/identity/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/identity/src/benchmarking.rs
+++ b/pallets/identity/src/benchmarking.rs
@@ -59,7 +59,7 @@
 		let registrar: T::AccountId = account("registrar", i, SEED);
 		let registrar_lookup = T::Lookup::unlookup(registrar.clone());
 		let _ = T::Currency::make_free_balance_be(&registrar, BalanceOf::<T>::max_value());
-		let registrar_origin = T::RegistrarOrigin::successful_origin();
+		let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();
 		Identity::<T>::add_registrar(registrar_origin, registrar_lookup)?;
 		Identity::<T>::set_fee(RawOrigin::Signed(registrar.clone()).into(), i, 10u32.into())?;
 		let fields = IdentityFields(
@@ -142,7 +142,7 @@
 	add_registrar {
 		let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::<T>(r)?;
 		ensure!(Registrars::<T>::get().len() as u32 == r, "Registrars not set up correctly.");
-		let origin = T::RegistrarOrigin::successful_origin();
+		let origin = T::RegistrarOrigin::try_successful_origin().unwrap();
 		let account = T::Lookup::unlookup(account("registrar", r + 1, SEED));
 	}: _<T::RuntimeOrigin>(origin, account)
 	verify {
@@ -301,7 +301,7 @@
 
 		let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::<T>(r)?;
 
-		let registrar_origin = T::RegistrarOrigin::successful_origin();
+		let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();
 		Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;
 		let registrars = Registrars::<T>::get();
 		ensure!(registrars[r as usize].as_ref().unwrap().fee == 0u32.into(), "Fee already set.");
@@ -318,7 +318,7 @@
 
 		let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::<T>(r)?;
 
-		let registrar_origin = T::RegistrarOrigin::successful_origin();
+		let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();
 		Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;
 		let registrars = Registrars::<T>::get();
 		ensure!(registrars[r as usize].as_ref().unwrap().account == caller, "id not set.");
@@ -336,7 +336,7 @@
 
 		let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::<T>(r)?;
 
-		let registrar_origin = T::RegistrarOrigin::successful_origin();
+		let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();
 		Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;
 		let fields = IdentityFields(
 			IdentityField::Display | IdentityField::Legal | IdentityField::Web | IdentityField::Riot
@@ -368,7 +368,7 @@
 		let info_hash = T::Hashing::hash_of(&info);
 		Identity::<T>::set_identity(user_origin.clone(), Box::new(info))?;
 
-		let registrar_origin = T::RegistrarOrigin::successful_origin();
+		let registrar_origin = T::RegistrarOrigin::try_successful_origin().unwrap();
 		Identity::<T>::add_registrar(registrar_origin, caller_lookup)?;
 		Identity::<T>::request_judgement(user_origin, r, 10u32.into())?;
 	}: _(RawOrigin::Signed(caller), r, user_lookup, Judgement::Reasonable, info_hash)
@@ -406,7 +406,7 @@
 			)?;
 		}
 		ensure!(IdentityOf::<T>::contains_key(&target), "Identity not set");
-		let origin = T::ForceOrigin::successful_origin();
+		let origin = T::ForceOrigin::try_successful_origin().unwrap();
 	}: _<T::RuntimeOrigin>(origin, target_lookup)
 	verify {
 		ensure!(!IdentityOf::<T>::contains_key(&target), "Identity not removed");
@@ -424,14 +424,14 @@
 				info: create_identity_info::<T>(x),
 			},
 		)).collect::<Vec<_>>();
-		let origin = T::ForceOrigin::successful_origin();
+		let origin = T::ForceOrigin::try_successful_origin().unwrap();
 	}: _<T::RuntimeOrigin>(origin, identities)
 
 	force_remove_identities {
 		let x in 0 .. T::MaxAdditionalFields::get();
 		let n in 0..600;
 		use frame_benchmarking::account;
-		let origin = T::ForceOrigin::successful_origin();
+		let origin = T::ForceOrigin::try_successful_origin().unwrap();
 		let identities = (0..n).map(|i| (
 			account("caller", i, SEED),
 			Registration::<BalanceOf<T>, T::MaxRegistrars, T::MaxAdditionalFields> {
@@ -460,7 +460,7 @@
 				),
 			)
 		}).collect::<Vec<_>>();
-		let origin = T::ForceOrigin::successful_origin();
+		let origin = T::ForceOrigin::try_successful_origin().unwrap();
 	}: _<T::RuntimeOrigin>(origin, identities)
 
 	add_sub {
modifiedpallets/nonfungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -102,8 +102,8 @@
 use up_data_structs::{
 	AccessMode, CollectionId, CollectionFlags, CustomDataLimit, TokenId, CreateCollectionData,
 	CreateNftExData, mapping::TokenAddressMapping, budget::Budget, Property, PropertyKey,
-	PropertyValue, PropertyKeyPermission, Properties, PropertyScope, TrySetProperty, TokenChild,
-	AuxPropertyValue, PropertiesPermissionMap,
+	PropertyValue, PropertyKeyPermission, PropertyScope, TrySetProperty, TokenChild,
+	AuxPropertyValue, PropertiesPermissionMap, TokenProperties as TokenPropertiesT,
 };
 use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm};
 use pallet_common::{
@@ -201,9 +201,8 @@
 	#[pallet::getter(fn token_properties)]
 	pub type TokenProperties<T: Config> = StorageNMap<
 		Key = (Key<Twox64Concat, CollectionId>, Key<Twox64Concat, TokenId>),
-		Value = Properties,
+		Value = TokenPropertiesT,
 		QueryKind = ValueQuery,
-		OnEmpty = up_data_structs::TokenProperties,
 	>;
 
 	/// Custom data of a token that is serialized to bytes,
deletedpallets/nonfungible/src/weights.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/weights.rs
+++ /dev/null
@@ -1,410 +0,0 @@
-// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs
-
-//! Autogenerated weights for pallet_nonfungible
-//!
-//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2023-02-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
-//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
-
-// Executed Command:
-// target/release/unique-collator
-// benchmark
-// pallet
-// --pallet
-// pallet-nonfungible
-// --wasm-execution
-// compiled
-// --extrinsic
-// *
-// --template
-// .maintain/frame-weight-template.hbs
-// --steps=50
-// --repeat=80
-// --heap-pages=4096
-// --output=./pallets/nonfungible/src/weights.rs
-
-#![cfg_attr(rustfmt, rustfmt_skip)]
-#![allow(unused_parens)]
-#![allow(unused_imports)]
-#![allow(missing_docs)]
-#![allow(clippy::unnecessary_cast)]
-
-use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
-use sp_std::marker::PhantomData;
-
-/// Weight functions needed for pallet_nonfungible.
-pub trait WeightInfo {
-	fn create_item() -> Weight;
-	fn create_multiple_items(b: u32, ) -> Weight;
-	fn create_multiple_items_ex(b: u32, ) -> Weight;
-	fn burn_item() -> Weight;
-	fn burn_recursively_self_raw() -> Weight;
-	fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight;
-	fn transfer() -> Weight;
-	fn approve() -> Weight;
-	fn approve_from() -> Weight;
-	fn transfer_from() -> Weight;
-	fn burn_from() -> Weight;
-	fn set_token_property_permissions(b: u32, ) -> Weight;
-	fn set_token_properties(b: u32, ) -> Weight;
-	fn delete_token_properties(b: u32, ) -> Weight;
-	fn token_owner() -> Weight;
-	fn set_allowance_for_all() -> Weight;
-	fn allowance_for_all() -> Weight;
-	fn repair_item() -> Weight;
-}
-
-/// Weights for pallet_nonfungible using the Substrate node and recommended hardware.
-pub struct SubstrateWeight<T>(PhantomData<T>);
-impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
-	// Storage: Nonfungible TokensMinted (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:1 w:1)
-	// Storage: Nonfungible TokenProperties (r:1 w:1)
-	// Storage: Common CollectionPropertyPermissions (r:1 w:0)
-	// Storage: Nonfungible TokenData (r:0 w:1)
-	// Storage: Nonfungible Owned (r:0 w:1)
-	fn create_item() -> Weight {
-		Weight::from_ref_time(35_333_000 as u64)
-			.saturating_add(T::DbWeight::get().reads(4 as u64))
-			.saturating_add(T::DbWeight::get().writes(5 as u64))
-	}
-	// Storage: Nonfungible TokensMinted (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:1 w:1)
-	// Storage: Nonfungible TokenProperties (r:4 w:4)
-	// Storage: Common CollectionPropertyPermissions (r:1 w:0)
-	// Storage: Nonfungible TokenData (r:0 w:4)
-	// Storage: Nonfungible Owned (r:0 w:4)
-	fn create_multiple_items(b: u32, ) -> Weight {
-		Weight::from_ref_time(19_091_371 as u64)
-			// Standard Error: 3_221
-			.saturating_add(Weight::from_ref_time(7_304_849 as u64).saturating_mul(b as u64))
-			.saturating_add(T::DbWeight::get().reads(3 as u64))
-			.saturating_add(T::DbWeight::get().reads((1 as u64).saturating_mul(b as u64)))
-			.saturating_add(T::DbWeight::get().writes(2 as u64))
-			.saturating_add(T::DbWeight::get().writes((3 as u64).saturating_mul(b as u64)))
-	}
-	// Storage: Nonfungible TokensMinted (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:4 w:4)
-	// Storage: Nonfungible TokenProperties (r:4 w:4)
-	// Storage: Common CollectionPropertyPermissions (r:1 w:0)
-	// Storage: Nonfungible TokenData (r:0 w:4)
-	// Storage: Nonfungible Owned (r:0 w:4)
-	fn create_multiple_items_ex(b: u32, ) -> Weight {
-		Weight::from_ref_time(12_655_339 as u64)
-			// Standard Error: 3_655
-			.saturating_add(Weight::from_ref_time(9_051_919 as u64).saturating_mul(b as u64))
-			.saturating_add(T::DbWeight::get().reads(2 as u64))
-			.saturating_add(T::DbWeight::get().reads((2 as u64).saturating_mul(b as u64)))
-			.saturating_add(T::DbWeight::get().writes(1 as u64))
-			.saturating_add(T::DbWeight::get().writes((4 as u64).saturating_mul(b as u64)))
-	}
-	// Storage: Nonfungible TokenData (r:1 w:1)
-	// Storage: Nonfungible TokenChildren (r:1 w:0)
-	// Storage: Nonfungible TokensBurnt (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:1 w:1)
-	// Storage: Nonfungible Allowance (r:1 w:0)
-	// Storage: Nonfungible Owned (r:0 w:1)
-	// Storage: Nonfungible TokenProperties (r:0 w:1)
-	fn burn_item() -> Weight {
-		Weight::from_ref_time(34_068_000 as u64)
-			.saturating_add(T::DbWeight::get().reads(5 as u64))
-			.saturating_add(T::DbWeight::get().writes(5 as u64))
-	}
-	// Storage: Nonfungible TokenChildren (r:1 w:0)
-	// Storage: Nonfungible TokenData (r:1 w:1)
-	// Storage: Nonfungible TokensBurnt (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:1 w:1)
-	// Storage: Nonfungible Allowance (r:1 w:0)
-	// Storage: Nonfungible Owned (r:0 w:1)
-	// Storage: Nonfungible TokenProperties (r:0 w:1)
-	fn burn_recursively_self_raw() -> Weight {
-		Weight::from_ref_time(44_840_000 as u64)
-			.saturating_add(T::DbWeight::get().reads(5 as u64))
-			.saturating_add(T::DbWeight::get().writes(5 as u64))
-	}
-	// Storage: Nonfungible TokenChildren (r:1 w:0)
-	// Storage: Nonfungible TokenData (r:1 w:1)
-	// Storage: Nonfungible TokensBurnt (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:1 w:1)
-	// Storage: Nonfungible Allowance (r:1 w:0)
-	// Storage: Nonfungible Owned (r:0 w:1)
-	// Storage: Nonfungible TokenProperties (r:0 w:1)
-	// Storage: Common CollectionById (r:1 w:0)
-	fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight {
-		Weight::from_ref_time(44_567_000 as u64)
-			// Standard Error: 1_014_743
-			.saturating_add(Weight::from_ref_time(209_619_240 as u64).saturating_mul(b as u64))
-			.saturating_add(T::DbWeight::get().reads(7 as u64))
-			.saturating_add(T::DbWeight::get().reads((4 as u64).saturating_mul(b as u64)))
-			.saturating_add(T::DbWeight::get().writes(6 as u64))
-			.saturating_add(T::DbWeight::get().writes((4 as u64).saturating_mul(b as u64)))
-	}
-	// Storage: Nonfungible TokenData (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:2 w:2)
-	// Storage: Nonfungible Allowance (r:1 w:0)
-	// Storage: Nonfungible Owned (r:0 w:2)
-	fn transfer() -> Weight {
-		Weight::from_ref_time(29_508_000 as u64)
-			.saturating_add(T::DbWeight::get().reads(4 as u64))
-			.saturating_add(T::DbWeight::get().writes(5 as u64))
-	}
-	// Storage: Nonfungible TokenData (r:1 w:0)
-	// Storage: Nonfungible Allowance (r:1 w:1)
-	fn approve() -> Weight {
-		Weight::from_ref_time(22_168_000 as u64)
-			.saturating_add(T::DbWeight::get().reads(2 as u64))
-			.saturating_add(T::DbWeight::get().writes(1 as u64))
-	}
-	// Storage: Nonfungible TokenData (r:1 w:0)
-	// Storage: Nonfungible Allowance (r:1 w:1)
-	fn approve_from() -> Weight {
-		Weight::from_ref_time(22_063_000 as u64)
-			.saturating_add(T::DbWeight::get().reads(2 as u64))
-			.saturating_add(T::DbWeight::get().writes(1 as u64))
-	}
-	// Storage: Nonfungible Allowance (r:1 w:1)
-	// Storage: Nonfungible TokenData (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:2 w:2)
-	// Storage: Nonfungible Owned (r:0 w:2)
-	fn transfer_from() -> Weight {
-		Weight::from_ref_time(36_386_000 as u64)
-			.saturating_add(T::DbWeight::get().reads(4 as u64))
-			.saturating_add(T::DbWeight::get().writes(6 as u64))
-	}
-	// Storage: Nonfungible Allowance (r:1 w:1)
-	// Storage: Nonfungible TokenData (r:1 w:1)
-	// Storage: Nonfungible TokenChildren (r:1 w:0)
-	// Storage: Nonfungible TokensBurnt (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:1 w:1)
-	// Storage: Nonfungible Owned (r:0 w:1)
-	// Storage: Nonfungible TokenProperties (r:0 w:1)
-	fn burn_from() -> Weight {
-		Weight::from_ref_time(42_499_000 as u64)
-			.saturating_add(T::DbWeight::get().reads(5 as u64))
-			.saturating_add(T::DbWeight::get().writes(6 as u64))
-	}
-	// Storage: Common CollectionPropertyPermissions (r:1 w:1)
-	fn set_token_property_permissions(b: u32, ) -> Weight {
-		Weight::from_ref_time(5_317_000 as u64)
-			// Standard Error: 42_045
-			.saturating_add(Weight::from_ref_time(12_179_871 as u64).saturating_mul(b as u64))
-			.saturating_add(T::DbWeight::get().reads(1 as u64))
-			.saturating_add(T::DbWeight::get().writes(1 as u64))
-	}
-	// Storage: Nonfungible TokenProperties (r:1 w:1)
-	// Storage: Common CollectionPropertyPermissions (r:1 w:0)
-	fn set_token_properties(b: u32, ) -> Weight {
-		Weight::from_ref_time(15_428_000 as u64)
-			// Standard Error: 58_002
-			.saturating_add(Weight::from_ref_time(7_195_842 as u64).saturating_mul(b as u64))
-			.saturating_add(T::DbWeight::get().reads(2 as u64))
-			.saturating_add(T::DbWeight::get().writes(1 as u64))
-	}
-	// Storage: Nonfungible TokenProperties (r:1 w:1)
-	// Storage: Common CollectionPropertyPermissions (r:1 w:0)
-	fn delete_token_properties(b: u32, ) -> Weight {
-		Weight::from_ref_time(15_498_000 as u64)
-			// Standard Error: 68_276
-			.saturating_add(Weight::from_ref_time(22_441_281 as u64).saturating_mul(b as u64))
-			.saturating_add(T::DbWeight::get().reads(2 as u64))
-			.saturating_add(T::DbWeight::get().writes(1 as u64))
-	}
-	// Storage: Nonfungible TokenData (r:1 w:0)
-	fn token_owner() -> Weight {
-		Weight::from_ref_time(7_006_000 as u64)
-			.saturating_add(T::DbWeight::get().reads(1 as u64))
-	}
-	// Storage: Nonfungible CollectionAllowance (r:0 w:1)
-	fn set_allowance_for_all() -> Weight {
-		Weight::from_ref_time(16_761_000 as u64)
-			.saturating_add(T::DbWeight::get().writes(1 as u64))
-	}
-	// Storage: Nonfungible CollectionAllowance (r:1 w:0)
-	fn allowance_for_all() -> Weight {
-		Weight::from_ref_time(5_577_000 as u64)
-			.saturating_add(T::DbWeight::get().reads(1 as u64))
-	}
-	// Storage: Nonfungible TokenProperties (r:1 w:1)
-	fn repair_item() -> Weight {
-		Weight::from_ref_time(7_670_000 as u64)
-			.saturating_add(T::DbWeight::get().reads(1 as u64))
-			.saturating_add(T::DbWeight::get().writes(1 as u64))
-	}
-}
-
-// For backwards compatibility and tests
-impl WeightInfo for () {
-	// Storage: Nonfungible TokensMinted (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:1 w:1)
-	// Storage: Nonfungible TokenProperties (r:1 w:1)
-	// Storage: Common CollectionPropertyPermissions (r:1 w:0)
-	// Storage: Nonfungible TokenData (r:0 w:1)
-	// Storage: Nonfungible Owned (r:0 w:1)
-	fn create_item() -> Weight {
-		Weight::from_ref_time(35_333_000 as u64)
-			.saturating_add(RocksDbWeight::get().reads(4 as u64))
-			.saturating_add(RocksDbWeight::get().writes(5 as u64))
-	}
-	// Storage: Nonfungible TokensMinted (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:1 w:1)
-	// Storage: Nonfungible TokenProperties (r:4 w:4)
-	// Storage: Common CollectionPropertyPermissions (r:1 w:0)
-	// Storage: Nonfungible TokenData (r:0 w:4)
-	// Storage: Nonfungible Owned (r:0 w:4)
-	fn create_multiple_items(b: u32, ) -> Weight {
-		Weight::from_ref_time(19_091_371 as u64)
-			// Standard Error: 3_221
-			.saturating_add(Weight::from_ref_time(7_304_849 as u64).saturating_mul(b as u64))
-			.saturating_add(RocksDbWeight::get().reads(3 as u64))
-			.saturating_add(RocksDbWeight::get().reads((1 as u64).saturating_mul(b as u64)))
-			.saturating_add(RocksDbWeight::get().writes(2 as u64))
-			.saturating_add(RocksDbWeight::get().writes((3 as u64).saturating_mul(b as u64)))
-	}
-	// Storage: Nonfungible TokensMinted (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:4 w:4)
-	// Storage: Nonfungible TokenProperties (r:4 w:4)
-	// Storage: Common CollectionPropertyPermissions (r:1 w:0)
-	// Storage: Nonfungible TokenData (r:0 w:4)
-	// Storage: Nonfungible Owned (r:0 w:4)
-	fn create_multiple_items_ex(b: u32, ) -> Weight {
-		Weight::from_ref_time(12_655_339 as u64)
-			// Standard Error: 3_655
-			.saturating_add(Weight::from_ref_time(9_051_919 as u64).saturating_mul(b as u64))
-			.saturating_add(RocksDbWeight::get().reads(2 as u64))
-			.saturating_add(RocksDbWeight::get().reads((2 as u64).saturating_mul(b as u64)))
-			.saturating_add(RocksDbWeight::get().writes(1 as u64))
-			.saturating_add(RocksDbWeight::get().writes((4 as u64).saturating_mul(b as u64)))
-	}
-	// Storage: Nonfungible TokenData (r:1 w:1)
-	// Storage: Nonfungible TokenChildren (r:1 w:0)
-	// Storage: Nonfungible TokensBurnt (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:1 w:1)
-	// Storage: Nonfungible Allowance (r:1 w:0)
-	// Storage: Nonfungible Owned (r:0 w:1)
-	// Storage: Nonfungible TokenProperties (r:0 w:1)
-	fn burn_item() -> Weight {
-		Weight::from_ref_time(34_068_000 as u64)
-			.saturating_add(RocksDbWeight::get().reads(5 as u64))
-			.saturating_add(RocksDbWeight::get().writes(5 as u64))
-	}
-	// Storage: Nonfungible TokenChildren (r:1 w:0)
-	// Storage: Nonfungible TokenData (r:1 w:1)
-	// Storage: Nonfungible TokensBurnt (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:1 w:1)
-	// Storage: Nonfungible Allowance (r:1 w:0)
-	// Storage: Nonfungible Owned (r:0 w:1)
-	// Storage: Nonfungible TokenProperties (r:0 w:1)
-	fn burn_recursively_self_raw() -> Weight {
-		Weight::from_ref_time(44_840_000 as u64)
-			.saturating_add(RocksDbWeight::get().reads(5 as u64))
-			.saturating_add(RocksDbWeight::get().writes(5 as u64))
-	}
-	// Storage: Nonfungible TokenChildren (r:1 w:0)
-	// Storage: Nonfungible TokenData (r:1 w:1)
-	// Storage: Nonfungible TokensBurnt (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:1 w:1)
-	// Storage: Nonfungible Allowance (r:1 w:0)
-	// Storage: Nonfungible Owned (r:0 w:1)
-	// Storage: Nonfungible TokenProperties (r:0 w:1)
-	// Storage: Common CollectionById (r:1 w:0)
-	fn burn_recursively_breadth_plus_self_plus_self_per_each_raw(b: u32, ) -> Weight {
-		Weight::from_ref_time(44_567_000 as u64)
-			// Standard Error: 1_014_743
-			.saturating_add(Weight::from_ref_time(209_619_240 as u64).saturating_mul(b as u64))
-			.saturating_add(RocksDbWeight::get().reads(7 as u64))
-			.saturating_add(RocksDbWeight::get().reads((4 as u64).saturating_mul(b as u64)))
-			.saturating_add(RocksDbWeight::get().writes(6 as u64))
-			.saturating_add(RocksDbWeight::get().writes((4 as u64).saturating_mul(b as u64)))
-	}
-	// Storage: Nonfungible TokenData (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:2 w:2)
-	// Storage: Nonfungible Allowance (r:1 w:0)
-	// Storage: Nonfungible Owned (r:0 w:2)
-	fn transfer() -> Weight {
-		Weight::from_ref_time(29_508_000 as u64)
-			.saturating_add(RocksDbWeight::get().reads(4 as u64))
-			.saturating_add(RocksDbWeight::get().writes(5 as u64))
-	}
-	// Storage: Nonfungible TokenData (r:1 w:0)
-	// Storage: Nonfungible Allowance (r:1 w:1)
-	fn approve() -> Weight {
-		Weight::from_ref_time(22_168_000 as u64)
-			.saturating_add(RocksDbWeight::get().reads(2 as u64))
-			.saturating_add(RocksDbWeight::get().writes(1 as u64))
-	}
-	// Storage: Nonfungible TokenData (r:1 w:0)
-	// Storage: Nonfungible Allowance (r:1 w:1)
-	fn approve_from() -> Weight {
-		Weight::from_ref_time(22_063_000 as u64)
-			.saturating_add(RocksDbWeight::get().reads(2 as u64))
-			.saturating_add(RocksDbWeight::get().writes(1 as u64))
-	}
-	// Storage: Nonfungible Allowance (r:1 w:1)
-	// Storage: Nonfungible TokenData (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:2 w:2)
-	// Storage: Nonfungible Owned (r:0 w:2)
-	fn transfer_from() -> Weight {
-		Weight::from_ref_time(36_386_000 as u64)
-			.saturating_add(RocksDbWeight::get().reads(4 as u64))
-			.saturating_add(RocksDbWeight::get().writes(6 as u64))
-	}
-	// Storage: Nonfungible Allowance (r:1 w:1)
-	// Storage: Nonfungible TokenData (r:1 w:1)
-	// Storage: Nonfungible TokenChildren (r:1 w:0)
-	// Storage: Nonfungible TokensBurnt (r:1 w:1)
-	// Storage: Nonfungible AccountBalance (r:1 w:1)
-	// Storage: Nonfungible Owned (r:0 w:1)
-	// Storage: Nonfungible TokenProperties (r:0 w:1)
-	fn burn_from() -> Weight {
-		Weight::from_ref_time(42_499_000 as u64)
-			.saturating_add(RocksDbWeight::get().reads(5 as u64))
-			.saturating_add(RocksDbWeight::get().writes(6 as u64))
-	}
-	// Storage: Common CollectionPropertyPermissions (r:1 w:1)
-	fn set_token_property_permissions(b: u32, ) -> Weight {
-		Weight::from_ref_time(5_317_000 as u64)
-			// Standard Error: 42_045
-			.saturating_add(Weight::from_ref_time(12_179_871 as u64).saturating_mul(b as u64))
-			.saturating_add(RocksDbWeight::get().reads(1 as u64))
-			.saturating_add(RocksDbWeight::get().writes(1 as u64))
-	}
-	// Storage: Nonfungible TokenProperties (r:1 w:1)
-	// Storage: Common CollectionPropertyPermissions (r:1 w:0)
-	fn set_token_properties(b: u32, ) -> Weight {
-		Weight::from_ref_time(15_428_000 as u64)
-			// Standard Error: 58_002
-			.saturating_add(Weight::from_ref_time(7_195_842 as u64).saturating_mul(b as u64))
-			.saturating_add(RocksDbWeight::get().reads(2 as u64))
-			.saturating_add(RocksDbWeight::get().writes(1 as u64))
-	}
-	// Storage: Nonfungible TokenProperties (r:1 w:1)
-	// Storage: Common CollectionPropertyPermissions (r:1 w:0)
-	fn delete_token_properties(b: u32, ) -> Weight {
-		Weight::from_ref_time(15_498_000 as u64)
-			// Standard Error: 68_276
-			.saturating_add(Weight::from_ref_time(22_441_281 as u64).saturating_mul(b as u64))
-			.saturating_add(RocksDbWeight::get().reads(2 as u64))
-			.saturating_add(RocksDbWeight::get().writes(1 as u64))
-	}
-	// Storage: Nonfungible TokenData (r:1 w:0)
-	fn token_owner() -> Weight {
-		Weight::from_ref_time(7_006_000 as u64)
-			.saturating_add(RocksDbWeight::get().reads(1 as u64))
-	}
-	// Storage: Nonfungible CollectionAllowance (r:0 w:1)
-	fn set_allowance_for_all() -> Weight {
-		Weight::from_ref_time(16_761_000 as u64)
-			.saturating_add(RocksDbWeight::get().writes(1 as u64))
-	}
-	// Storage: Nonfungible CollectionAllowance (r:1 w:0)
-	fn allowance_for_all() -> Weight {
-		Weight::from_ref_time(5_577_000 as u64)
-			.saturating_add(RocksDbWeight::get().reads(1 as u64))
-	}
-	// Storage: Nonfungible TokenProperties (r:1 w:1)
-	fn repair_item() -> Weight {
-		Weight::from_ref_time(7_670_000 as u64)
-			.saturating_add(RocksDbWeight::get().reads(1 as u64))
-			.saturating_add(RocksDbWeight::get().writes(1 as u64))
-	}
-}
modifiedpallets/refungible/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/refungible/src/benchmarking.rs
+++ b/pallets/refungible/src/benchmarking.rs
@@ -297,7 +297,7 @@
 			sender: cross_from_sub(owner); owner: cross_sub;
 		};
 		let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?;
-	}: {<Pallet<T>>::token_owner(collection.id, item)}
+	}: {<Pallet<T>>::token_owner(collection.id, item).unwrap()}
 
 	set_allowance_for_all {
 		bench_init!{
modifiedpallets/refungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/refungible/src/lib.rs
+++ b/pallets/refungible/src/lib.rs
@@ -108,6 +108,7 @@
 	mapping::TokenAddressMapping, MAX_REFUNGIBLE_PIECES, Property, PropertyKey,
 	PropertyKeyPermission, PropertyScope, PropertyValue, TokenId, TrySetProperty,
 	PropertiesPermissionMap, CreateRefungibleExMultipleOwners, TokenOwnerError,
+	TokenProperties as TokenPropertiesT,
 };
 
 pub use pallet::*;
@@ -175,9 +176,8 @@
 	#[pallet::getter(fn token_properties)]
 	pub type TokenProperties<T: Config> = StorageNMap<
 		Key = (Key<Twox64Concat, CollectionId>, Key<Twox64Concat, TokenId>),
-		Value = up_data_structs::Properties,
+		Value = TokenPropertiesT,
 		QueryKind = ValueQuery,
-		OnEmpty = up_data_structs::TokenProperties,
 	>;
 
 	/// Total amount of pieces for token
modifiedpallets/scheduler-v2/Cargo.tomldiffbeforeafterboth
--- a/pallets/scheduler-v2/Cargo.toml
+++ b/pallets/scheduler-v2/Cargo.toml
@@ -25,7 +25,7 @@
 
 [dev-dependencies]
 pallet-preimage = { workspace = true }
-substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
 
 [features]
 default = ["std"]
modifiedprimitives/common/src/constants.rsdiffbeforeafterboth
--- a/primitives/common/src/constants.rs
+++ b/primitives/common/src/constants.rs
@@ -19,7 +19,7 @@
 	parameter_types,
 	weights::{Weight, constants::WEIGHT_REF_TIME_PER_SECOND},
 };
-use cumulus_primitives_core::relay_chain::v2::MAX_POV_SIZE;
+use cumulus_primitives_core::relay_chain::MAX_POV_SIZE;
 use crate::types::{BlockNumber, Balance};
 
 pub const MILLISECS_PER_BLOCK: u64 = 12000;
modifiedprimitives/data-structs/src/lib.rsdiffbeforeafterboth
--- a/primitives/data-structs/src/lib.rs
+++ b/primitives/data-structs/src/lib.rs
@@ -24,10 +24,7 @@
 	convert::{TryFrom, TryInto},
 	fmt,
 };
-use frame_support::{
-	storage::{bounded_btree_map::BoundedBTreeMap, bounded_btree_set::BoundedBTreeSet},
-	traits::Get,
-};
+use frame_support::storage::{bounded_btree_map::BoundedBTreeMap, bounded_btree_set::BoundedBTreeSet};
 
 #[cfg(feature = "serde")]
 use serde::{Serialize, Deserialize};
@@ -1200,6 +1197,12 @@
 		self.0.contains_key(key)
 	}
 
+	fn metadata_encoded_len() -> usize {
+		// Max length of key length + max length of value length for max properties
+		// + max length of table size length
+		(4 * 4) * (MAX_PROPERTIES_PER_ITEM as usize) + 4
+	}
+
 	/// Check if map contains key with key validation.
 	fn check_property_key(key: &PropertyKey) -> Result<(), PropertiesError> {
 		if key.is_empty() {
@@ -1259,20 +1262,34 @@
 pub type PropertiesPermissionMap = PropertiesMap<PropertyPermission>;
 
 /// Wrapper for properties map with consumed space control.
-#[derive(Encode, Decode, TypeInfo, Clone, PartialEq, MaxEncodedLen)]
-pub struct Properties {
+#[derive(Encode, Decode, TypeInfo, Clone, PartialEq)]
+pub struct Properties<const S: u32> {
 	map: PropertiesMap<PropertyValue>,
 	consumed_space: u32,
 	space_limit: u32,
 }
 
-impl Properties {
+impl<const S: u32> MaxEncodedLen for Properties<S> {
+	fn max_encoded_len() -> usize {
+		<PropertiesMap<PropertyValue>>::metadata_encoded_len()
+			+ (u32::max_encoded_len() * 2)
+			+ S as usize
+	}
+}
+
+impl<const S: u32> Default for Properties<S> {
+	fn default() -> Self {
+		Self::new()
+	}
+}
+
+impl<const S: u32> Properties<S> {
 	/// Create new properies container.
-	pub fn new(space_limit: u32) -> Self {
+	pub fn new() -> Self {
 		Self {
 			map: PropertiesMap::new(),
 			consumed_space: 0,
-			space_limit,
+			space_limit: u32::MAX,
 		}
 	}
 
@@ -1300,7 +1317,7 @@
 	}
 }
 
-impl IntoIterator for Properties {
+impl<const S: u32> IntoIterator for Properties<S> {
 	type Item = (PropertyKey, PropertyValue);
 	type IntoIter = <PropertiesMap<PropertyValue> as IntoIterator>::IntoIter;
 
@@ -1309,7 +1326,7 @@
 	}
 }
 
-impl TrySetProperty for Properties {
+impl<const S: u32> TrySetProperty for Properties<S> {
 	type Value = PropertyValue;
 
 	fn try_scoped_set(
@@ -1320,7 +1337,7 @@
 	) -> Result<Option<Self::Value>, PropertiesError> {
 		let value_len = value.len();
 
-		if self.consumed_space as usize + value_len > self.space_limit as usize
+		if self.consumed_space as usize + value_len > self.space_limit.min(S) as usize
 			&& !cfg!(feature = "runtime-benchmarks")
 		{
 			return Err(PropertiesError::NoSpaceForProperty);
@@ -1341,20 +1358,5 @@
 	}
 }
 
-/// Utility struct for using in `StorageMap`.
-pub struct CollectionProperties;
-
-impl Get<Properties> for CollectionProperties {
-	fn get() -> Properties {
-		Properties::new(MAX_COLLECTION_PROPERTIES_SIZE)
-	}
-}
-
-/// Utility struct for using in `StorageMap`.
-pub struct TokenProperties;
-
-impl Get<Properties> for TokenProperties {
-	fn get() -> Properties {
-		Properties::new(MAX_TOKEN_PROPERTIES_SIZE)
-	}
-}
+pub type CollectionProperties = Properties<MAX_COLLECTION_PROPERTIES_SIZE>;
+pub type TokenProperties = Properties<MAX_TOKEN_PROPERTIES_SIZE>;
modifiedruntime/common/config/ethereum.rsdiffbeforeafterboth
--- a/runtime/common/config/ethereum.rs
+++ b/runtime/common/config/ethereum.rs
@@ -15,6 +15,7 @@
 	Runtime, Aura, Balances, RuntimeEvent, ChainId,
 };
 use pallet_evm::{EnsureAddressTruncated, HashedAddressMapping};
+use pallet_ethereum::PostLogContent;
 use up_common::constants::*;
 
 pub type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;
@@ -88,9 +89,14 @@
 	type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;
 }
 
+parameter_types! {
+	pub const PostBlockAndTxnHashes: PostLogContent = PostLogContent::BlockAndTxnHashes;
+}
+
 impl pallet_ethereum::Config for Runtime {
 	type RuntimeEvent = RuntimeEvent;
 	type StateRoot = pallet_ethereum::IntermediateStateRoot<Self>;
+	type PostLogContent = PostBlockAndTxnHashes;
 }
 
 parameter_types! {
modifiedruntime/common/config/orml.rsdiffbeforeafterboth
--- a/runtime/common/config/orml.rs
+++ b/runtime/common/config/orml.rs
@@ -21,8 +21,7 @@
 use frame_system::EnsureSigned;
 use orml_traits::{location::AbsoluteReserveProvider, parameter_type_with_key};
 use sp_runtime::traits::Convert;
-use xcm::latest::{Weight, Junction::*, Junctions::*, MultiLocation, NetworkId};
-use xcm_builder::LocationInverter;
+use xcm::latest::{Weight, Junction::*, Junctions::*, MultiLocation};
 use xcm_executor::XcmExecutor;
 use sp_std::{vec, vec::Vec};
 use pallet_foreign_assets::{CurrencyId, NativeCurrency};
@@ -30,7 +29,7 @@
 	Runtime, RuntimeEvent, RelayChainBlockNumberProvider,
 	runtime_common::config::{
 		xcm::{
-			SelfLocation, Weigher, XcmConfig, Ancestry,
+			SelfLocation, Weigher, XcmConfig, UniversalLocation,
 			xcm_assets::{CurrencyIdConvert},
 		},
 		pallets::TreasuryAccountId,
@@ -50,7 +49,7 @@
 	pub const MinVestedTransfer: Balance = 10 * UNIQUE;
 	pub const MaxVestingSchedules: u32 = 28;
 
-	pub const BaseXcmWeight: Weight = 100_000_000; // TODO: recheck this
+	pub const BaseXcmWeight: Weight = Weight::from_parts(100_000_000, 1000); // ? TODO: recheck this
 	pub const MaxAssetsForTransfer: usize = 2;
 }
 
@@ -87,7 +86,7 @@
 impl Convert<AccountId, MultiLocation> for AccountIdToMultiLocation {
 	fn convert(account: AccountId) -> MultiLocation {
 		X1(AccountId32 {
-			network: NetworkId::Any,
+			network: None,
 			id: account.into(),
 		})
 		.into()
@@ -142,9 +141,9 @@
 	type XcmExecutor = XcmExecutor<XcmConfig<Self>>;
 	type Weigher = Weigher;
 	type BaseXcmWeight = BaseXcmWeight;
-	type LocationInverter = LocationInverter<Ancestry>;
 	type MaxAssetsForTransfer = MaxAssetsForTransfer;
 	type MinXcmFee = ParachainMinFee;
 	type MultiLocationsFilter = Everything;
 	type ReserveProvider = AbsoluteReserveProvider;
+	type UniversalLocation = UniversalLocation;
 }
modifiedruntime/common/config/pallets/collator_selection.rsdiffbeforeafterboth
--- a/runtime/common/config/pallets/collator_selection.rs
+++ b/runtime/common/config/pallets/collator_selection.rs
@@ -48,8 +48,6 @@
 
 impl pallet_authorship::Config for Runtime {
 	type FindAuthor = pallet_session::FindAccountFromAuthorIndex<Self, Aura>;
-	type UncleGenerations = UncleGenerations;
-	type FilterUncle = ();
 	type EventHandler = CollatorSelection;
 }
 
modifiedruntime/common/config/substrate.rsdiffbeforeafterboth
--- a/runtime/common/config/substrate.rs
+++ b/runtime/common/config/substrate.rs
@@ -115,8 +115,6 @@
 	type MaxConsumers = ConstU32<16>;
 }
 
-impl pallet_randomness_collective_flip::Config for Runtime {}
-
 parameter_types! {
 	pub const MinimumPeriod: u64 = SLOT_DURATION / 2;
 }
modifiedruntime/common/config/xcm/foreignassets.rsdiffbeforeafterboth
--- a/runtime/common/config/xcm/foreignassets.rs
+++ b/runtime/common/config/xcm/foreignassets.rs
@@ -15,13 +15,13 @@
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 use frame_support::{
-	traits::{Contains, Get, fungibles},
+	traits::{Contains, Get, fungibles, ContainsPair},
 	parameter_types,
 };
 use sp_runtime::traits::Convert;
 use xcm::latest::{MultiAsset, Junction::*, MultiLocation, Junctions::*};
-use xcm_builder::{FungiblesAdapter, ConvertedConcreteAssetId};
-use xcm_executor::traits::{Convert as ConvertXcm, JustTry, FilterAssetLocation};
+use xcm_builder::{FungiblesAdapter, NonLocalMint, ConvertedConcreteId};
+use xcm_executor::traits::{Convert as ConvertXcm, JustTry};
 use pallet_foreign_assets::{
 	AssetIds, AssetIdMapping, XcmForeignAssetIdMapping, NativeCurrency, FreeForAll, TryAsForeign,
 	ForeignAssetId, CurrencyId,
@@ -126,13 +126,13 @@
 	// Use this fungibles implementation:
 	ForeignAssets,
 	// Use this currency when it is a fungible asset matching the given location or name:
-	ConvertedConcreteAssetId<AssetIds, Balance, AsInnerId<AssetIds, JustTry>, JustTry>,
+	ConvertedConcreteId<AssetIds, Balance, AsInnerId<AssetIds, JustTry>, JustTry>,
 	// Convert an XCM MultiLocation into a local account id:
 	LocationToAccountId,
 	// Our chain's account ID type (we can't get away without mentioning it explicitly):
 	AccountId,
 	// No teleports are allowed
-	NoTeleports<AccountId, ForeignAssets>,
+	NonLocalMint<NoTeleports<AccountId, ForeignAssets>>,
 	// The account to use for tracking teleports.
 	CheckingAccount,
 >;
@@ -141,8 +141,10 @@
 pub type AssetTransactors = FungiblesTransactor;
 
 pub struct AllAsset;
-impl FilterAssetLocation for AllAsset {
-	fn filter_asset_location(_asset: &MultiAsset, _origin: &MultiLocation) -> bool {
+impl ContainsPair<MultiAsset, MultiLocation> for AllAsset {
+	fn contains(_asset: &MultiAsset, _origin: &MultiLocation) -> bool {
+		// ? Shouldn't we query foreign-asset pallet here, because of the new non-local mint
+		// location logic?
 		true
 	}
 }
modifiedruntime/common/config/xcm/mod.rsdiffbeforeafterboth
--- a/runtime/common/config/xcm/mod.rs
+++ b/runtime/common/config/xcm/mod.rs
@@ -15,23 +15,24 @@
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 use frame_support::{
-	traits::{Everything, Get},
+	traits::{Everything, Nothing, Get, ConstU32},
 	parameter_types,
 };
 use frame_system::EnsureRoot;
 use pallet_xcm::XcmPassthrough;
 use polkadot_parachain::primitives::Sibling;
 use xcm::latest::{prelude::*, Weight, MultiLocation};
+use xcm::v3::Instruction;
 use xcm_builder::{
-	AccountId32Aliases, EnsureXcmOrigin, FixedWeightBounds, LocationInverter, ParentAsSuperuser,
-	RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia,
-	SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, ParentIsPreset,
+	AccountId32Aliases, EnsureXcmOrigin, FixedWeightBounds, ParentAsSuperuser, RelayChainAsNative,
+	SiblingParachainAsNative, SiblingParachainConvertsVia, SignedAccountId32AsNative,
+	SignedToAccountId32, SovereignSignedViaLocation, ParentIsPreset,
 };
 use xcm_executor::{Config, XcmExecutor, traits::ShouldExecute};
 use sp_std::{marker::PhantomData, vec::Vec};
 use crate::{
 	Runtime, RuntimeCall, RuntimeEvent, RuntimeOrigin, ParachainInfo, ParachainSystem, PolkadotXcm,
-	XcmpQueue, xcm_barrier::Barrier, RelayNetwork,
+	XcmpQueue, xcm_barrier::Barrier, RelayNetwork, AllPalletsWithSystem, Balances,
 };
 
 use up_common::types::AccountId;
@@ -54,10 +55,11 @@
 	pub const RelayLocation: MultiLocation = MultiLocation::parent();
 	pub RelayOrigin: RuntimeOrigin = cumulus_pallet_xcm::Origin::Relay.into();
 	pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();
+	pub UniversalLocation: InteriorMultiLocation = Parachain(ParachainInfo::get().into()).into();
 	pub SelfLocation: MultiLocation = MultiLocation::new(1, X1(Parachain(ParachainInfo::get().into())));
 
 	// One XCM operation is 1_000_000 weight - almost certainly a conservative estimate.
-	pub UnitWeightCost: Weight = 1_000_000;
+	pub UnitWeightCost: Weight = Weight::from_parts(1_000_000, 1000); // ?
 	pub const MaxInstructions: u32 = 100;
 }
 
@@ -80,7 +82,7 @@
 /// queues.
 pub type XcmRouter = (
 	// Two routers - use UMP to communicate with the relay chain:
-	cumulus_primitives_utility::ParentAsUmp<ParachainSystem, ()>,
+	cumulus_primitives_utility::ParentAsUmp<ParachainSystem, (), ()>,
 	// ..and XCMP to communicate with the sibling chains.
 	XcmpQueue,
 );
@@ -110,12 +112,12 @@
 );
 
 pub trait TryPass {
-	fn try_pass<Call>(origin: &MultiLocation, message: &mut Xcm<Call>) -> Result<(), ()>;
+	fn try_pass<Call>(origin: &MultiLocation, message: &mut [Instruction<Call>]) -> Result<(), ()>;
 }
 
 #[impl_trait_for_tuples::impl_for_tuples(30)]
 impl TryPass for Tuple {
-	fn try_pass<Call>(origin: &MultiLocation, message: &mut Xcm<Call>) -> Result<(), ()> {
+	fn try_pass<Call>(origin: &MultiLocation, message: &mut [Instruction<Call>]) -> Result<(), ()> {
 		for_tuples!( #(
 			Tuple::try_pass(origin, message)?;
 		)* );
@@ -126,9 +128,11 @@
 
 pub struct DenyTransact;
 impl TryPass for DenyTransact {
-	fn try_pass<Call>(_origin: &MultiLocation, message: &mut Xcm<Call>) -> Result<(), ()> {
+	fn try_pass<Call>(
+		_origin: &MultiLocation,
+		message: &mut [Instruction<Call>],
+	) -> Result<(), ()> {
 		let transact_inst = message
-			.0
 			.iter()
 			.find(|inst| matches![inst, Instruction::Transact { .. }]);
 
@@ -159,7 +163,7 @@
 {
 	fn should_execute<Call>(
 		origin: &MultiLocation,
-		message: &mut Xcm<Call>,
+		message: &mut [Instruction<Call>],
 		max_weight: Weight,
 		weight_credit: &mut Weight,
 	) -> Result<(), ()> {
@@ -171,22 +175,19 @@
 // Allow xcm exchange only with locations in list
 pub struct DenyExchangeWithUnknownLocation<T>(PhantomData<T>);
 impl<T: Get<Vec<MultiLocation>>> TryPass for DenyExchangeWithUnknownLocation<T> {
-	fn try_pass<Call>(origin: &MultiLocation, message: &mut Xcm<Call>) -> Result<(), ()> {
+	fn try_pass<Call>(origin: &MultiLocation, message: &mut [Instruction<Call>]) -> Result<(), ()> {
 		let allowed_locations = T::get();
 
 		// Check if deposit or transfer belongs to allowed parachains
 		let mut allowed = allowed_locations.contains(origin);
 
-		message.0.iter().for_each(|inst| match inst {
-			DepositReserveAsset { dest: dst, .. } => {
-				allowed |= allowed_locations.contains(dst);
-			}
-			TransferReserveAsset { dest: dst, .. } => {
-				allowed |= allowed_locations.contains(dst);
+		message.iter().for_each(|inst| match inst {
+			DepositReserveAsset { dest: dst, .. }
+			| TransferReserveAsset { dest: dst, .. }
+			| InitiateReserveWithdraw { reserve: dst, .. } => {
+				allowed |= allowed_locations.contains(&dst);
 			}
-			InitiateReserveWithdraw { reserve: dst, .. } => {
-				allowed |= allowed_locations.contains(dst);
-			}
+			// ? There are more instructions worth checking
 			_ => {}
 		});
 
@@ -217,17 +218,31 @@
 	type OriginConverter = XcmOriginToTransactDispatchOrigin;
 	type IsReserve = IsReserve;
 	type IsTeleporter = (); // Teleportation is disabled
-	type LocationInverter = LocationInverter<Ancestry>;
+	type UniversalLocation = UniversalLocation;
 	type Barrier = Barrier;
 	type Weigher = Weigher;
 	type Trader = Trader<T>;
 	type ResponseHandler = PolkadotXcm;
 	type SubscriptionService = PolkadotXcm;
+	type PalletInstancesInfo = AllPalletsWithSystem;
+	type MaxAssetsIntoHolding = ConstU32<64>;
 
 	type AssetTrap = PolkadotXcm;
 	type AssetClaims = PolkadotXcm;
+	type AssetLocker = ();
+	type AssetExchanger = ();
+	type FeeManager = ();
+	type MessageExporter = ();
+	type UniversalAliases = Nothing; // ?
+	type CallDispatcher = RuntimeCall;
+	type SafeCallFilter = Nothing; // ? Only non-recursive calls may go here, but do we need this?
 }
 
+#[cfg(feature = "runtime-benchmarks")]
+parameter_types! {
+	pub ReachableDest: Option<MultiLocation> = Some(Parent.into());
+}
+
 impl pallet_xcm::Config for Runtime {
 	type RuntimeEvent = RuntimeEvent;
 	type SendXcmOrigin = EnsureXcmOrigin<RuntimeOrigin, LocalOriginToLocation>;
@@ -238,11 +253,19 @@
 	type XcmTeleportFilter = Everything;
 	type XcmReserveTransferFilter = Everything;
 	type Weigher = FixedWeightBounds<UnitWeightCost, RuntimeCall, MaxInstructions>;
-	type LocationInverter = LocationInverter<Ancestry>;
 	type RuntimeOrigin = RuntimeOrigin;
 	type RuntimeCall = RuntimeCall;
 	const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100;
 	type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion;
+	type UniversalLocation = UniversalLocation;
+	type Currency = Balances;
+	type CurrencyMatcher = (); // ?
+	type TrustedLockers = ();
+	type SovereignAccountOf = ();
+	type MaxLockers = ConstU32<8>;
+	type WeightInfo = crate::weights::xcm::SubstrateWeight<Runtime>;
+	#[cfg(feature = "runtime-benchmarks")]
+	type ReachableDest = ReachableDest;
 }
 
 impl cumulus_pallet_xcm::Config for Runtime {
@@ -259,6 +282,7 @@
 	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;
 	type ControllerOrigin = EnsureRoot<AccountId>;
 	type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin;
+	type PriceForSiblingDelivery = ();
 }
 
 impl cumulus_pallet_dmp_queue::Config for Runtime {
modifiedruntime/common/construct_runtime.rsdiffbeforeafterboth
--- a/runtime/common/construct_runtime.rs
+++ b/runtime/common/construct_runtime.rs
@@ -16,99 +16,99 @@
 
 #[macro_export]
 macro_rules! construct_runtime {
-    () => {
-            frame_support::construct_runtime! {
+	() => {
+		frame_support::construct_runtime! {
 
-            pub enum Runtime where
-                Block = Block,
-                NodeBlock = opaque::Block,
-                UncheckedExtrinsic = UncheckedExtrinsic
-            {
-                System: frame_system = 0,
+			pub enum Runtime where
+				Block = Block,
+				NodeBlock = opaque::Block,
+				UncheckedExtrinsic = UncheckedExtrinsic
+			{
+				System: frame_system = 0,
 
-                ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Config, Storage, Inherent, Event<T>, ValidateUnsigned} = 20,
-                ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21,
+				ParachainSystem: cumulus_pallet_parachain_system = 20,
+				ParachainInfo: parachain_info = 21,
 
-                #[cfg(feature = "collator-selection")]
-                Authorship: pallet_authorship::{Pallet, Call, Storage} = 22,
+				#[cfg(feature = "collator-selection")]
+				Authorship: pallet_authorship = 22,
 
-                #[cfg(feature = "collator-selection")]
-                CollatorSelection: pallet_collator_selection::{Pallet, Call, Storage, Event<T>, Config<T>} = 23,
+				#[cfg(feature = "collator-selection")]
+				CollatorSelection: pallet_collator_selection = 23,
 
-                #[cfg(feature = "collator-selection")]
-                Session: pallet_session::{Pallet, Call, Storage, Event, Config<T>} = 24,
+				#[cfg(feature = "collator-selection")]
+				Session: pallet_session = 24,
 
-                Aura: pallet_aura::{Pallet, Storage, Config<T>} = 25,
-                AuraExt: cumulus_pallet_aura_ext::{Pallet, Storage, Config} = 26,
+				Aura: pallet_aura = 25,
+				AuraExt: cumulus_pallet_aura_ext = 26,
 
-                Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 30,
-                RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Storage} = 31,
-                Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 32,
-                TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event<T>} = 33,
-                Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>} = 34,
-                Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>} = 35,
-                Vesting: orml_vesting::{Pallet, Storage, Call, Event<T>, Config<T>} = 37,
+				Balances: pallet_balances = 30,
+				// RandomnessCollectiveFlip = 31
+				Timestamp: pallet_timestamp = 32,
+				TransactionPayment: pallet_transaction_payment = 33,
+				Treasury: pallet_treasury = 34,
+				Sudo: pallet_sudo = 35,
+				Vesting: orml_vesting = 37,
 
-                XTokens: orml_xtokens = 38,
-                Tokens: orml_tokens = 39,
-                // Contracts: pallet_contracts::{Pallet, Call, Storage, Event<T>} = 38,
+				XTokens: orml_xtokens = 38,
+				Tokens: orml_tokens = 39,
+				// Contracts: pallet_contracts::{Pallet, Call, Storage, Event<T>} = 38,
 
-                #[cfg(feature = "collator-selection")]
-                Identity: pallet_identity::{Pallet, Call, Storage, Event<T>} = 40,
+				#[cfg(feature = "collator-selection")]
+				Identity: pallet_identity = 40,
 
-                #[cfg(feature = "preimage")]
-                Preimage: pallet_preimage::{Pallet, Call, Storage, Event<T>} = 41,
+				#[cfg(feature = "preimage")]
+				Preimage: pallet_preimage = 41,
 
-                // XCM helpers.
-                XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,
-                PolkadotXcm: pallet_xcm::{Pallet, Call, Storage, Event<T>, Origin} = 51,
-                CumulusXcm: cumulus_pallet_xcm::{Pallet, Call, Event<T>, Origin} = 52,
-                DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event<T>} = 53,
+				// XCM helpers.
+				XcmpQueue: cumulus_pallet_xcmp_queue = 50,
+				PolkadotXcm: pallet_xcm = 51,
+				CumulusXcm: cumulus_pallet_xcm = 52,
+				DmpQueue: cumulus_pallet_dmp_queue = 53,
 
-                // Unique Pallets
-                Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,
-                Unique: pallet_unique::{Pallet, Call, Storage} = 61,
+				// Unique Pallets
+				Inflation: pallet_inflation = 60,
+				Unique: pallet_unique::{Pallet, Call, Storage} = 61,
 
-                // #[cfg(feature = "scheduler")]
-                // Scheduler: pallet_unique_scheduler_v2::{Pallet, Call, Storage, Event<T>} = 62,
+				// #[cfg(feature = "scheduler")]
+				// Scheduler: pallet_unique_scheduler_v2 = 62,
 
-                Configuration: pallet_configuration::{Pallet, Call, Storage, Event<T>} = 63,
+				Configuration: pallet_configuration = 63,
 
-                Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,
-                // ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,
-                Common: pallet_common::{Pallet, Storage, Event<T>} = 66,
-                Fungible: pallet_fungible::{Pallet, Storage} = 67,
+				Charging: pallet_charge_transaction::{Pallet, Call, Storage} = 64,
+				// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,
+				Common: pallet_common = 66,
+				Fungible: pallet_fungible = 67,
 
-                #[cfg(feature = "refungible")]
-                Refungible: pallet_refungible::{Pallet, Storage} = 68,
+				#[cfg(feature = "refungible")]
+				Refungible: pallet_refungible = 68,
 
-                Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69,
-                Structure: pallet_structure::{Pallet, Call, Storage, Event<T>} = 70,
+				Nonfungible: pallet_nonfungible = 69,
+				Structure: pallet_structure = 70,
 
-                // RmrkCore: pallet_proxy_rmrk_core::{Pallet, Call, Storage, Event<T>} = 71,
+				// RmrkCore: pallet_proxy_rmrk_core = 71,
 
-                // RmrkEquip: pallet_proxy_rmrk_equip::{Pallet, Call, Storage, Event<T>} = 72,
+				// RmrkEquip: pallet_proxy_rmrk_equip = 72,
 
-                #[cfg(feature = "app-promotion")]
-                AppPromotion: pallet_app_promotion::{Pallet, Call, Storage, Event<T>} = 73,
+				#[cfg(feature = "app-promotion")]
+				AppPromotion: pallet_app_promotion = 73,
 
-                #[cfg(feature = "foreign-assets")]
-                ForeignAssets: pallet_foreign_assets::{Pallet, Call, Storage, Event<T>} = 80,
+				#[cfg(feature = "foreign-assets")]
+				ForeignAssets: pallet_foreign_assets = 80,
 
-                // Frontier
-                EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,
-                Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, Origin} = 101,
+				// Frontier
+				EVM: pallet_evm = 100,
+				Ethereum: pallet_ethereum = 101,
 
-                EvmCoderSubstrate: pallet_evm_coder_substrate::{Pallet, Storage} = 150,
-                EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage, Event<T>} = 151,
-                EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152,
-                EvmMigration: pallet_evm_migration::{Pallet, Call, Storage, Event<T>} = 153,
+				EvmCoderSubstrate: pallet_evm_coder_substrate = 150,
+				EvmContractHelpers: pallet_evm_contract_helpers = 151,
+				EvmTransactionPayment: pallet_evm_transaction_payment = 152,
+				EvmMigration: pallet_evm_migration = 153,
 
-                Maintenance: pallet_maintenance::{Pallet, Call, Storage, Event<T>} = 154,
+				Maintenance: pallet_maintenance = 154,
 
-                #[cfg(feature = "pallet-test-utils")]
-                TestUtils: pallet_test_utils = 255,
-            }
-        }
-    }
+				#[cfg(feature = "pallet-test-utils")]
+				TestUtils: pallet_test_utils = 255,
+			}
+		}
+	};
 }
modifiedruntime/common/maintenance.rsdiffbeforeafterboth
--- a/runtime/common/maintenance.rs
+++ b/runtime/common/maintenance.rs
@@ -82,7 +82,6 @@
 
 				#[cfg(feature = "collator-selection")]
 				RuntimeCall::CollatorSelection(_)
-				| RuntimeCall::Authorship(_)
 				| RuntimeCall::Session(_)
 				| RuntimeCall::Identity(_) => Err(TransactionValidityError::Invalid(InvalidTransaction::Call)),
 
modifiedruntime/common/runtime_apis.rsdiffbeforeafterboth
--- a/runtime/common/runtime_apis.rs
+++ b/runtime/common/runtime_apis.rs
@@ -42,6 +42,7 @@
             transaction_validity::{TransactionSource, TransactionValidity},
             ApplyExtrinsicResult, DispatchError,
         };
+        use frame_support::pallet_prelude::Weight;
         use fp_rpc::TransactionStatus;
         use pallet_transaction_payment::{
             FeeDetails, RuntimeDispatchInfo,
@@ -486,6 +487,12 @@
                 fn query_fee_details(uxt: <Block as BlockT>::Extrinsic, len: u32) -> FeeDetails<Balance> {
                     TransactionPayment::query_fee_details(uxt, len)
                 }
+                fn query_weight_to_fee(weight: Weight) -> Balance {
+                    TransactionPayment::weight_to_fee(weight)
+                }
+                fn query_length_to_fee(length: u32) -> Balance {
+                    TransactionPayment::length_to_fee(length)
+                }
             }
 
             /*
@@ -539,6 +546,7 @@
                     use frame_support::traits::StorageInfoTrait;
 
                     let mut list = Vec::<BenchmarkList>::new();
+                    list_benchmark!(list, extra, pallet_xcm, PolkadotXcm);
 
                     list_benchmark!(list, extra, pallet_evm_migration, EvmMigration);
                     list_benchmark!(list, extra, pallet_common, Common);
@@ -604,6 +612,7 @@
 
                     let mut batches = Vec::<BenchmarkBatch>::new();
                     let params = (&config, &allowlist);
+                    add_benchmark!(params, batches, pallet_xcm, PolkadotXcm);
 
                     add_benchmark!(params, batches, pallet_evm_migration, EvmMigration);
                     add_benchmark!(params, batches, pallet_common, Common);
@@ -667,7 +676,7 @@
 
             #[cfg(feature = "try-runtime")]
             impl frame_try_runtime::TryRuntime<Block> for Runtime {
-                fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (frame_support::pallet_prelude::Weight, frame_support::pallet_prelude::Weight) {
+                fn on_runtime_upgrade(checks: frame_try_runtime::UpgradeCheckSelect) -> (Weight, Weight) {
                     log::info!("try-runtime::on_runtime_upgrade unique-chain.");
                     let weight = Executive::try_runtime_upgrade(checks).unwrap();
                     (weight, crate::config::substrate::RuntimeBlockWeights::get().max_block)
@@ -678,7 +687,7 @@
                     state_root_check: bool,
                     signature_check: bool,
                     select: frame_try_runtime::TryStateSelect
-                ) -> frame_support::pallet_prelude::Weight {
+                ) -> Weight {
                     log::info!(
                         target: "node-runtime",
                         "try-runtime: executing block {:?} / root checks: {:?} / try-state-select: {:?}",
modifiedruntime/common/tests/xcm.rsdiffbeforeafterboth
--- a/runtime/common/tests/xcm.rs
+++ b/runtime/common/tests/xcm.rs
@@ -19,6 +19,7 @@
 use logtest::Logger;
 use crate::RuntimeCall;
 use super::new_test_ext;
+use frame_support::pallet_prelude::Weight;
 
 fn catch_xcm_barrier_log(logger: &mut Logger, expected_msg: &str) -> Result<(), String> {
 	for record in logger {
@@ -45,16 +46,16 @@
 	// so it is irrelevant what we are passing to the `transact` cmd.
 	let fake_encoded_call = vec![0u8];
 
-	let transact_inst = Transact {
-		origin_type: OriginKind::Superuser,
-		require_weight_at_most: 0,
+	let transact_inst: Instruction<RuntimeCall> = Transact {
+		origin_kind: OriginKind::Superuser,
+		require_weight_at_most: Weight::default(),
 		call: fake_encoded_call.into(),
 	};
 
-	let mut xcm_program = Xcm::<RuntimeCall>(vec![transact_inst]);
+	let mut xcm_program = vec![transact_inst];
 
-	let max_weight = 100_000;
-	let mut weight_credit = 100_000_000;
+	let max_weight = Weight::from_parts(100_000, 100_000);
+	let mut weight_credit = Weight::from_parts(100_000_000, 100_000_000);
 
 	let result = B::should_execute(&location, &mut xcm_program, max_weight, &mut weight_credit);
 
@@ -69,11 +70,11 @@
 fn xcm_execute<B: ShouldExecute>(
 	self_para_id: u32,
 	location: &MultiLocation,
-	xcm: &mut Xcm<RuntimeCall>,
+	xcm: &mut [Instruction<RuntimeCall>],
 ) -> Result<(), ()> {
 	new_test_ext(self_para_id).execute_with(|| {
-		let max_weight = 100_000;
-		let mut weight_credit = 100_000_000;
+		let max_weight = Weight::from_parts(100_000, 100_000);
+		let mut weight_credit = Weight::from_parts(100_000_000, 100_000_000);
 
 		B::should_execute(&location, xcm, max_weight, &mut weight_credit)
 	})
@@ -102,7 +103,6 @@
 	let assets = make_multiassets(location);
 	let inst = DepositReserveAsset {
 		assets: assets.into(),
-		max_assets: 42,
 		dest: location.clone(),
 		xcm: Xcm(vec![]),
 	};
@@ -114,7 +114,7 @@
 	logger: &mut Logger,
 	self_para_id: u32,
 	location: &MultiLocation,
-	xcm: &mut Xcm<RuntimeCall>,
+	xcm: &mut [Instruction<RuntimeCall>],
 ) -> Result<(), String> {
 	let result = xcm_execute::<B>(self_para_id, location, xcm);
 
@@ -148,14 +148,14 @@
 		logger,
 		self_para_id,
 		&unknown_location,
-		&mut transfer_reserve_asset,
+		&mut transfer_reserve_asset.0,
 	)?;
 
 	expect_transfer_location_denied::<B>(
 		logger,
 		self_para_id,
 		&unknown_location,
-		&mut deposit_reserve_asset,
+		&mut deposit_reserve_asset.0,
 	)?;
 
 	Ok(())
modifiedruntime/common/weights.rsdiffbeforeafterboth
--- a/runtime/common/weights.rs
+++ b/runtime/common/weights.rs
@@ -27,6 +27,8 @@
 };
 use up_data_structs::{CreateItemExData, CreateItemData};
 
+pub mod xcm;
+
 macro_rules! max_weight_of {
 	($method:ident ( $($args:tt)* )) => {{
 		let max_weight = <FungibleWeights<T>>::$method($($args)*)
addedruntime/common/weights/xcm.rsdiffbeforeafterboth
--- /dev/null
+++ b/runtime/common/weights/xcm.rs
@@ -0,0 +1,218 @@
+// Template adopted from https://github.com/paritytech/substrate/blob/master/.maintain/frame-weight-template.hbs
+
+//! Autogenerated weights for pallet_xcm
+//!
+//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
+//! DATE: 2023-03-10, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! WORST CASE MAP SIZE: `1000000`
+//! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
+
+// Executed Command:
+// target/release/unique-collator
+// benchmark
+// pallet
+// --pallet
+// pallet-xcm
+// --wasm-execution
+// compiled
+// --extrinsic
+// *
+// --template=.maintain/external-weight-template.hbs
+// --steps=50
+// --repeat=80
+// --heap-pages=4096
+// --output=./runtime/common/weights/xcm.rs
+
+#![cfg_attr(rustfmt, rustfmt_skip)]
+#![allow(unused_parens)]
+#![allow(unused_imports)]
+#![allow(missing_docs)]
+#![allow(clippy::unnecessary_cast)]
+
+use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}};
+use sp_std::marker::PhantomData;
+
+/// Weights for pallet_xcm using the Substrate node and recommended hardware.
+pub struct SubstrateWeight<T>(PhantomData<T>);
+impl<T: frame_system::Config> pallet_xcm::WeightInfo for SubstrateWeight<T> {
+	/// Storage: ParachainSystem HostConfiguration (r:1 w:0)
+	/// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1)
+	/// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured)
+	fn send() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `142`
+		//  Estimated: `1274`
+		// Minimum execution time: 11_382_000 picoseconds.
+		Weight::from_parts(11_812_000, 1274)
+			.saturating_add(T::DbWeight::get().reads(2_u64))
+			.saturating_add(T::DbWeight::get().writes(1_u64))
+	}
+	/// Storage: ParachainInfo ParachainId (r:1 w:0)
+	/// Proof: ParachainInfo ParachainId (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
+	fn teleport_assets() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `136`
+		//  Estimated: `499`
+		// Minimum execution time: 13_195_000 picoseconds.
+		Weight::from_parts(13_685_000, 499)
+			.saturating_add(T::DbWeight::get().reads(1_u64))
+	}
+	/// Storage: ParachainInfo ParachainId (r:1 w:0)
+	/// Proof: ParachainInfo ParachainId (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
+	fn reserve_transfer_assets() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `136`
+		//  Estimated: `499`
+		// Minimum execution time: 12_784_000 picoseconds.
+		Weight::from_parts(13_155_000, 499)
+			.saturating_add(T::DbWeight::get().reads(1_u64))
+	}
+	fn execute() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 4_569_000 picoseconds.
+		Weight::from_parts(4_819_000, 0)
+	}
+	/// Storage: PolkadotXcm SupportedVersion (r:0 w:1)
+	/// Proof Skipped: PolkadotXcm SupportedVersion (max_values: None, max_size: None, mode: Measured)
+	fn force_xcm_version() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 4_919_000 picoseconds.
+		Weight::from_parts(5_250_000, 0)
+			.saturating_add(T::DbWeight::get().writes(1_u64))
+	}
+	/// Storage: PolkadotXcm SafeXcmVersion (r:0 w:1)
+	/// Proof Skipped: PolkadotXcm SafeXcmVersion (max_values: Some(1), max_size: None, mode: Measured)
+	fn force_default_xcm_version() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 1_593_000 picoseconds.
+		Weight::from_parts(1_723_000, 0)
+			.saturating_add(T::DbWeight::get().writes(1_u64))
+	}
+	/// Storage: PolkadotXcm VersionNotifiers (r:1 w:1)
+	/// Proof Skipped: PolkadotXcm VersionNotifiers (max_values: None, max_size: None, mode: Measured)
+	/// Storage: PolkadotXcm QueryCounter (r:1 w:1)
+	/// Proof Skipped: PolkadotXcm QueryCounter (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: ParachainSystem HostConfiguration (r:1 w:0)
+	/// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1)
+	/// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: PolkadotXcm Queries (r:0 w:1)
+	/// Proof Skipped: PolkadotXcm Queries (max_values: None, max_size: None, mode: Measured)
+	fn force_subscribe_version_notify() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `184`
+		//  Estimated: `4880`
+		// Minimum execution time: 16_832_000 picoseconds.
+		Weight::from_parts(17_984_000, 4880)
+			.saturating_add(T::DbWeight::get().reads(4_u64))
+			.saturating_add(T::DbWeight::get().writes(4_u64))
+	}
+	/// Storage: PolkadotXcm VersionNotifiers (r:1 w:1)
+	/// Proof Skipped: PolkadotXcm VersionNotifiers (max_values: None, max_size: None, mode: Measured)
+	/// Storage: ParachainSystem HostConfiguration (r:1 w:0)
+	/// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1)
+	/// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: PolkadotXcm Queries (r:0 w:1)
+	/// Proof Skipped: PolkadotXcm Queries (max_values: None, max_size: None, mode: Measured)
+	fn force_unsubscribe_version_notify() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `341`
+		//  Estimated: `4829`
+		// Minimum execution time: 19_256_000 picoseconds.
+		Weight::from_parts(20_228_000, 4829)
+			.saturating_add(T::DbWeight::get().reads(3_u64))
+			.saturating_add(T::DbWeight::get().writes(3_u64))
+	}
+	/// Storage: PolkadotXcm SupportedVersion (r:4 w:2)
+	/// Proof Skipped: PolkadotXcm SupportedVersion (max_values: None, max_size: None, mode: Measured)
+	fn migrate_supported_version() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `108`
+		//  Estimated: `10008`
+		// Minimum execution time: 14_437_000 picoseconds.
+		Weight::from_parts(15_750_000, 10008)
+			.saturating_add(T::DbWeight::get().reads(4_u64))
+			.saturating_add(T::DbWeight::get().writes(2_u64))
+	}
+	/// Storage: PolkadotXcm VersionNotifiers (r:4 w:2)
+	/// Proof Skipped: PolkadotXcm VersionNotifiers (max_values: None, max_size: None, mode: Measured)
+	fn migrate_version_notifiers() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `112`
+		//  Estimated: `10012`
+		// Minimum execution time: 14_617_000 picoseconds.
+		Weight::from_parts(16_000_000, 10012)
+			.saturating_add(T::DbWeight::get().reads(4_u64))
+			.saturating_add(T::DbWeight::get().writes(2_u64))
+	}
+	/// Storage: PolkadotXcm VersionNotifyTargets (r:5 w:0)
+	/// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured)
+	fn already_notified_target() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `119`
+		//  Estimated: `12494`
+		// Minimum execution time: 18_395_000 picoseconds.
+		Weight::from_parts(19_858_000, 12494)
+			.saturating_add(T::DbWeight::get().reads(5_u64))
+	}
+	/// Storage: PolkadotXcm VersionNotifyTargets (r:2 w:1)
+	/// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured)
+	/// Storage: ParachainSystem HostConfiguration (r:1 w:0)
+	/// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1)
+	/// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured)
+	fn notify_current_targets() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `255`
+		//  Estimated: `6705`
+		// Minimum execution time: 17_443_000 picoseconds.
+		Weight::from_parts(18_435_000, 6705)
+			.saturating_add(T::DbWeight::get().reads(4_u64))
+			.saturating_add(T::DbWeight::get().writes(2_u64))
+	}
+	/// Storage: PolkadotXcm VersionNotifyTargets (r:3 w:0)
+	/// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured)
+	fn notify_target_migration_fail() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `149`
+		//  Estimated: `7574`
+		// Minimum execution time: 7_714_000 picoseconds.
+		Weight::from_parts(8_526_000, 7574)
+			.saturating_add(T::DbWeight::get().reads(3_u64))
+	}
+	/// Storage: PolkadotXcm VersionNotifyTargets (r:4 w:2)
+	/// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured)
+	fn migrate_version_notify_targets() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `119`
+		//  Estimated: `10019`
+		// Minimum execution time: 15_008_000 picoseconds.
+		Weight::from_parts(16_271_000, 10019)
+			.saturating_add(T::DbWeight::get().reads(4_u64))
+			.saturating_add(T::DbWeight::get().writes(2_u64))
+	}
+	/// Storage: PolkadotXcm VersionNotifyTargets (r:4 w:2)
+	/// Proof Skipped: PolkadotXcm VersionNotifyTargets (max_values: None, max_size: None, mode: Measured)
+	/// Storage: ParachainSystem HostConfiguration (r:1 w:0)
+	/// Proof Skipped: ParachainSystem HostConfiguration (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: ParachainSystem PendingUpwardMessages (r:1 w:1)
+	/// Proof Skipped: ParachainSystem PendingUpwardMessages (max_values: Some(1), max_size: None, mode: Measured)
+	fn migrate_and_notify_old_targets() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `261`
+		//  Estimated: `11673`
+		// Minimum execution time: 23_554_000 picoseconds.
+		Weight::from_parts(25_158_000, 11673)
+			.saturating_add(T::DbWeight::get().reads(6_u64))
+			.saturating_add(T::DbWeight::get().writes(3_u64))
+	}
+}
+
modifiedruntime/opal/Cargo.tomldiffbeforeafterboth
--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -95,7 +95,6 @@
 	'pallet-identity/std',
 	'pallet-inflation/std',
 	'pallet-nonfungible/std',
-	'pallet-randomness-collective-flip/std',
 	'pallet-refungible/std',
 	'pallet-structure/std',
 	'pallet-sudo/std',
@@ -174,7 +173,6 @@
 	'pallet-inflation/try-runtime',
 	'pallet-maintenance/try-runtime',
 	'pallet-nonfungible/try-runtime',
-	'pallet-randomness-collective-flip/try-runtime',
 	'pallet-refungible/try-runtime',
 	'pallet-structure/try-runtime',
 	'pallet-sudo/try-runtime',
@@ -223,7 +221,6 @@
 pallet-authorship = { workspace = true }
 pallet-balances = { workspace = true }
 pallet-preimage = { workspace = true }
-pallet-randomness-collective-flip = { workspace = true }
 pallet-session = { workspace = true }
 pallet-sudo = { workspace = true }
 pallet-timestamp = { workspace = true }
modifiedruntime/opal/src/lib.rsdiffbeforeafterboth
--- a/runtime/opal/src/lib.rs
+++ b/runtime/opal/src/lib.rs
@@ -54,7 +54,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 937053,
+	spec_version: 939053,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 3,
modifiedruntime/opal/src/xcm_barrier.rsdiffbeforeafterboth
--- a/runtime/opal/src/xcm_barrier.rs
+++ b/runtime/opal/src/xcm_barrier.rs
@@ -15,7 +15,8 @@
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 use frame_support::traits::Everything;
-use xcm::latest::{Xcm, Weight, MultiLocation};
+use xcm::latest::{Weight, MultiLocation};
+use xcm::v3::Instruction;
 use xcm_builder::{AllowTopLevelPaidExecutionFrom, TakeWeightCredit};
 use xcm_executor::traits::ShouldExecute;
 
@@ -30,7 +31,7 @@
 impl ShouldExecute for AllowAllDebug {
 	fn should_execute<Call>(
 		_origin: &MultiLocation,
-		_message: &mut Xcm<Call>,
+		_message: &mut [Instruction<Call>],
 		_max_weight: Weight,
 		_weight_credit: &mut Weight,
 	) -> Result<(), ()> {
modifiedruntime/quartz/Cargo.tomldiffbeforeafterboth
--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -95,7 +95,6 @@
 	'pallet-fungible/std',
 	'pallet-inflation/std',
 	'pallet-nonfungible/std',
-	'pallet-randomness-collective-flip/std',
 	'pallet-refungible/std',
 	'pallet-structure/std',
 	'pallet-sudo/std',
@@ -169,7 +168,6 @@
 	'pallet-inflation/try-runtime',
 	'pallet-maintenance/try-runtime',
 	'pallet-nonfungible/try-runtime',
-	'pallet-randomness-collective-flip/try-runtime',
 	'pallet-refungible/try-runtime',
 	'pallet-structure/try-runtime',
 	'pallet-sudo/try-runtime',
@@ -215,7 +213,6 @@
 pallet-authorship = { workspace = true }
 pallet-balances = { workspace = true }
 pallet-preimage = { workspace = true }
-pallet-randomness-collective-flip = { workspace = true }
 pallet-session = { workspace = true }
 pallet-sudo = { workspace = true }
 pallet-timestamp = { workspace = true }
modifiedruntime/quartz/src/lib.rsdiffbeforeafterboth
--- a/runtime/quartz/src/lib.rs
+++ b/runtime/quartz/src/lib.rs
@@ -57,7 +57,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 937053,
+	spec_version: 939053,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 3,
modifiedruntime/tests/Cargo.tomldiffbeforeafterboth
--- a/runtime/tests/Cargo.toml
+++ b/runtime/tests/Cargo.toml
@@ -11,22 +11,22 @@
 [dependencies]
 up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
 
-sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
 
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
 
-frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
 
-pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
+pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.39" }
 
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.39" }
 
 pallet-common.path = "../../pallets/common"
 pallet-fungible.path = "../../pallets/fungible"
@@ -41,4 +41,6 @@
 scale-info = "*"
 
 evm-coder = { workspace = true }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" }
+up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.39" }
+xcm = { workspace = true }
+pallet-configuration = { workspace = true }
modifiedruntime/tests/src/lib.rsdiffbeforeafterboth
--- a/runtime/tests/src/lib.rs
+++ b/runtime/tests/src/lib.rs
@@ -27,11 +27,12 @@
 	traits::{BlakeTwo256, IdentityLookup},
 	testing::Header,
 };
-use pallet_transaction_payment::{CurrencyAdapter};
+use pallet_transaction_payment::CurrencyAdapter;
 use frame_system as system;
 use pallet_evm::{
 	AddressMapping, account::CrossAccountId, EnsureAddressNever, SubstrateBlockHashMapping,
 };
+use pallet_ethereum::PostLogContent;
 use fp_evm_mapping::EvmBackwardsAddressMapping;
 use parity_scale_codec::{Encode, Decode, MaxEncodedLen};
 use scale_info::TypeInfo;
@@ -204,11 +205,13 @@
 parameter_types! {
 	pub BlockGasLimit: U256 = 0u32.into();
 	pub WeightPerGas: Weight = Weight::from_ref_time(20);
+	pub const PostBlockAndTxnHashes: PostLogContent = PostLogContent::BlockAndTxnHashes;
 }
 
 impl pallet_ethereum::Config for Test {
 	type RuntimeEvent = RuntimeEvent;
 	type StateRoot = pallet_ethereum::IntermediateStateRoot<Self>;
+	type PostLogContent = PostBlockAndTxnHashes;
 }
 
 impl pallet_evm::Config for Test {
modifiedruntime/unique/Cargo.tomldiffbeforeafterboth
--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -93,7 +93,6 @@
 	'pallet-fungible/std',
 	'pallet-inflation/std',
 	'pallet-nonfungible/std',
-	'pallet-randomness-collective-flip/std',
 	'pallet-refungible/std',
 	'pallet-structure/std',
 	'pallet-sudo/std',
@@ -167,7 +166,6 @@
 	'pallet-inflation/try-runtime',
 	'pallet-maintenance/try-runtime',
 	'pallet-nonfungible/try-runtime',
-	'pallet-randomness-collective-flip/try-runtime',
 	'pallet-refungible/try-runtime',
 	'pallet-structure/try-runtime',
 	'pallet-sudo/try-runtime',
@@ -214,7 +212,6 @@
 pallet-authorship = { workspace = true }
 pallet-balances = { workspace = true }
 pallet-preimage = { workspace = true }
-pallet-randomness-collective-flip = { workspace = true }
 pallet-session = { workspace = true }
 pallet-sudo = { workspace = true }
 pallet-timestamp = { workspace = true }
modifiedruntime/unique/src/lib.rsdiffbeforeafterboth
--- a/runtime/unique/src/lib.rs
+++ b/runtime/unique/src/lib.rs
@@ -54,7 +54,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 937053,
+	spec_version: 939053,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 3,