git.delta.rocks / unique-network / refs/commits / 6f83e5367365

difftreelog

Merge pull request #406 from UniqueNetwork/feature/repartition-rft

ut-akuznetsov2022-06-28parents: #51cfcc1 #9ca985e.patch.diff
in: master

27 files changed

modified.gitignorediffbeforeafterboth
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,7 @@
 
 /.idea/
 /.cargo/
+/.vscode/
 
 tests/.vscode
 cumulus-parachain/
modifiedpallets/common/src/lib.rsdiffbeforeafterboth
--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -1258,6 +1258,10 @@
 	}
 }
 
+pub trait RefungibleExtensionsWeightInfo {
+	fn repartition() -> Weight;
+}
+
 pub trait CommonCollectionOperations<T: Config> {
 	fn create_item(
 		&self,
@@ -1384,6 +1388,19 @@
 		spender: T::CrossAccountId,
 		token: TokenId,
 	) -> u128;
+	fn refungible_extensions(&self) -> Option<&dyn RefungibleExtensions<T>>;
+}
+
+pub trait RefungibleExtensions<T>
+where
+	T: Config,
+{
+	fn repartition(
+		&self,
+		owner: &T::CrossAccountId,
+		token: TokenId,
+		amount: u128,
+	) -> DispatchResultWithPostInfo;
 }
 
 // Flexible enough for implementing CommonCollectionOperations
modifiedpallets/fungible/src/common.rsdiffbeforeafterboth
--- a/pallets/fungible/src/common.rs
+++ b/pallets/fungible/src/common.rs
@@ -18,7 +18,7 @@
 
 use frame_support::{dispatch::DispatchResultWithPostInfo, ensure, fail, weights::Weight, traits::Get};
 use up_data_structs::{TokenId, CollectionId, CreateItemExData, budget::Budget, CreateItemData};
-use pallet_common::{CommonCollectionOperations, CommonWeightInfo, with_weight};
+use pallet_common::{CommonCollectionOperations, CommonWeightInfo, RefungibleExtensions, with_weight};
 use pallet_structure::Error as StructureError;
 use sp_runtime::ArithmeticError;
 use sp_std::{vec::Vec, vec};
@@ -399,4 +399,8 @@
 		}
 		<Allowance<T>>::get((self.id, sender, spender))
 	}
+
+	fn refungible_extensions(&self) -> Option<&dyn RefungibleExtensions<T>> {
+		None
+	}
 }
modifiedpallets/nonfungible/src/common.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/common.rs
+++ b/pallets/nonfungible/src/common.rs
@@ -22,7 +22,8 @@
 	PropertyKeyPermission, PropertyValue,
 };
 use pallet_common::{
-	CommonCollectionOperations, CommonWeightInfo, with_weight, weights::WeightInfo as _,
+	CommonCollectionOperations, CommonWeightInfo, RefungibleExtensions, with_weight,
+	weights::WeightInfo as _,
 };
 use sp_runtime::DispatchError;
 use sp_std::vec::Vec;
@@ -467,4 +468,8 @@
 			0
 		}
 	}
+
+	fn refungible_extensions(&self) -> Option<&dyn RefungibleExtensions<T>> {
+		None
+	}
 }
modifiedpallets/refungible/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/refungible/src/benchmarking.rs
+++ b/pallets/refungible/src/benchmarking.rs
@@ -203,4 +203,12 @@
 		let item = create_max_item(&collection, &owner, [(sender.clone(), 200)])?;
 		<Pallet<T>>::set_allowance(&collection, &sender, &burner, item, 200)?;
 	}: {<Pallet<T>>::burn_from(&collection, &burner, &sender, item, 200, &Unlimited)?}
+
+	repartition_item {
+		bench_init!{
+			owner: sub; collection: collection(owner);
+			sender: cross_from_sub(owner); owner: cross_sub;
+		};
+		let item = create_max_item(&collection, &sender, [(owner.clone(), 100)])?;
+	}: {<Pallet<T>>::repartition(&collection, &owner, item, 200)?}
 }
modifiedpallets/refungible/src/common.rsdiffbeforeafterboth
--- a/pallets/refungible/src/common.rs
+++ b/pallets/refungible/src/common.rs
@@ -22,9 +22,9 @@
 	CollectionId, TokenId, CreateItemExData, CreateRefungibleExData, budget::Budget, Property,
 	PropertyKey, PropertyValue, PropertyKeyPermission, CreateItemData,
 };
-use pallet_common::{CommonCollectionOperations, CommonWeightInfo, with_weight};
+use pallet_common::{CommonCollectionOperations, CommonWeightInfo, RefungibleExtensions, with_weight};
 use pallet_structure::Error as StructureError;
-use sp_runtime::DispatchError;
+use sp_runtime::{DispatchError};
 use sp_std::{vec::Vec, vec};
 
 use crate::{
@@ -405,4 +405,22 @@
 	) -> u128 {
 		<Allowance<T>>::get((self.id, token, sender, spender))
 	}
+
+	fn refungible_extensions(&self) -> Option<&dyn RefungibleExtensions<T>> {
+		Some(self)
+	}
+}
+
+impl<T: Config> RefungibleExtensions<T> for RefungibleHandle<T> {
+	fn repartition(
+		&self,
+		owner: &T::CrossAccountId,
+		token: TokenId,
+		amount: u128,
+	) -> DispatchResultWithPostInfo {
+		with_weight(
+			<Pallet<T>>::repartition(self, owner, token, amount),
+			<SelfWeightOf<T>>::repartition_item(),
+		)
+	}
 }
modifiedpallets/refungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/refungible/src/lib.rs
+++ b/pallets/refungible/src/lib.rs
@@ -64,6 +64,8 @@
 		NotRefungibleDataUsedToMintFungibleCollectionToken,
 		/// Maximum refungibility exceeded
 		WrongRefungiblePieces,
+		/// Refungible token can't be repartitioned by user who isn't owns all pieces
+		RepartitionWhileNotOwningAllPieces,
 		/// Refungible token can't nest other tokens
 		RefungibleDisallowsNesting,
 		/// Setting item properties is not allowed
@@ -684,4 +686,28 @@
 	) -> DispatchResult {
 		Self::create_multiple_items(collection, sender, vec![data], nesting_budget)
 	}
+
+	pub fn repartition(
+		collection: &RefungibleHandle<T>,
+		owner: &T::CrossAccountId,
+		token: TokenId,
+		amount: u128,
+	) -> DispatchResult {
+		ensure!(
+			amount <= MAX_REFUNGIBLE_PIECES,
+			<Error<T>>::WrongRefungiblePieces
+		);
+		ensure!(amount > 0, <CommonError<T>>::TokenValueTooLow);
+		// Ensure user owns all pieces
+		let total_supply = <TotalSupply<T>>::get((collection.id, token));
+		let balance = <Balance<T>>::get((collection.id, token, owner));
+		ensure!(
+			total_supply == balance,
+			<Error<T>>::RepartitionWhileNotOwningAllPieces
+		);
+
+		<Balance<T>>::insert((collection.id, token, owner), amount);
+		<TotalSupply<T>>::insert((collection.id, token), amount);
+		Ok(())
+	}
 }
modifiedpallets/refungible/src/weights.rsdiffbeforeafterboth
--- a/pallets/refungible/src/weights.rs
+++ b/pallets/refungible/src/weights.rs
@@ -3,7 +3,7 @@
 //! Autogenerated weights for pallet_refungible
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-27, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
@@ -49,6 +49,7 @@
 	fn transfer_from_removing() -> Weight;
 	fn transfer_from_creating_removing() -> Weight;
 	fn burn_from() -> Weight;
+	fn repartition_item() -> Weight;
 }
 
 /// Weights for pallet_refungible using the Substrate node and recommended hardware.
@@ -61,7 +62,7 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn create_item() -> Weight {
-		(21_321_000 as Weight)
+		(17_553_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
@@ -72,9 +73,9 @@
 	// Storage: Refungible TokenData (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items(b: u32, ) -> Weight {
-		(16_313_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((5_464_000 as Weight).saturating_mul(b as Weight))
+		(10_654_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((5_114_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
@@ -86,9 +87,9 @@
 	// Storage: Refungible TokenData (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items_ex_multiple_items(b: u32, ) -> Weight {
-		(15_631_000 as Weight)
-			// Standard Error: 5_000
-			.saturating_add((8_141_000 as Weight).saturating_mul(b as Weight))
+		(3_587_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((7_931_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
@@ -101,9 +102,9 @@
 	// Storage: Refungible Balance (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items_ex_multiple_owners(b: u32, ) -> Weight {
-		(11_191_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((6_321_000 as Weight).saturating_mul(b as Weight))
+		(1_980_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((6_305_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
@@ -114,7 +115,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_item_partial() -> Weight {
-		(24_421_000 as Weight)
+		(21_010_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
@@ -125,13 +126,13 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_item_fully() -> Weight {
-		(32_900_000 as Weight)
+		(28_413_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Refungible Balance (r:2 w:2)
 	fn transfer_normal() -> Weight {
-		(20_215_000 as Weight)
+		(17_513_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(2 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -139,7 +140,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_creating() -> Weight {
-		(24_809_000 as Weight)
+		(20_469_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
@@ -147,7 +148,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_removing() -> Weight {
-		(26_704_000 as Weight)
+		(22_472_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(4 as Weight))
 	}
@@ -155,21 +156,21 @@
 	// Storage: Refungible AccountBalance (r:2 w:2)
 	// Storage: Refungible Owned (r:0 w:2)
 	fn transfer_creating_removing() -> Weight {
-		(28_728_000 as Weight)
+		(24_866_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Refungible Balance (r:1 w:0)
 	// Storage: Refungible Allowance (r:0 w:1)
 	fn approve() -> Weight {
-		(16_107_000 as Weight)
+		(13_475_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Refungible Allowance (r:1 w:1)
 	// Storage: Refungible Balance (r:2 w:2)
 	fn transfer_from_normal() -> Weight {
-		(28_765_000 as Weight)
+		(24_707_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
@@ -178,7 +179,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_from_creating() -> Weight {
-		(32_788_000 as Weight)
+		(27_812_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
@@ -187,7 +188,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_from_removing() -> Weight {
-		(34_523_000 as Weight)
+		(29_966_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
@@ -196,7 +197,7 @@
 	// Storage: Refungible AccountBalance (r:2 w:2)
 	// Storage: Refungible Owned (r:0 w:2)
 	fn transfer_from_creating_removing() -> Weight {
-		(36_749_000 as Weight)
+		(31_660_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(7 as Weight))
 	}
@@ -208,10 +209,17 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_from() -> Weight {
-		(42_259_000 as Weight)
+		(36_248_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(7 as Weight))
 	}
+	// Storage: Refungible TotalSupply (r:1 w:1)
+	// Storage: Refungible Balance (r:1 w:1)
+	fn repartition_item() -> Weight {
+		(8_226_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(2 as Weight))
+			.saturating_add(T::DbWeight::get().writes(2 as Weight))
+	}
 }
 
 // For backwards compatibility and tests
@@ -223,7 +231,7 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn create_item() -> Weight {
-		(21_321_000 as Weight)
+		(17_553_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
@@ -234,9 +242,9 @@
 	// Storage: Refungible TokenData (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items(b: u32, ) -> Weight {
-		(16_313_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((5_464_000 as Weight).saturating_mul(b as Weight))
+		(10_654_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((5_114_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes((4 as Weight).saturating_mul(b as Weight)))
@@ -248,9 +256,9 @@
 	// Storage: Refungible TokenData (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items_ex_multiple_items(b: u32, ) -> Weight {
-		(15_631_000 as Weight)
-			// Standard Error: 5_000
-			.saturating_add((8_141_000 as Weight).saturating_mul(b as Weight))
+		(3_587_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((7_931_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
@@ -263,9 +271,9 @@
 	// Storage: Refungible Balance (r:0 w:4)
 	// Storage: Refungible Owned (r:0 w:4)
 	fn create_multiple_items_ex_multiple_owners(b: u32, ) -> Weight {
-		(11_191_000 as Weight)
-			// Standard Error: 4_000
-			.saturating_add((6_321_000 as Weight).saturating_mul(b as Weight))
+		(1_980_000 as Weight)
+			// Standard Error: 2_000
+			.saturating_add((6_305_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
@@ -276,7 +284,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_item_partial() -> Weight {
-		(24_421_000 as Weight)
+		(21_010_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
@@ -287,13 +295,13 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_item_fully() -> Weight {
-		(32_900_000 as Weight)
+		(28_413_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Refungible Balance (r:2 w:2)
 	fn transfer_normal() -> Weight {
-		(20_215_000 as Weight)
+		(17_513_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
@@ -301,7 +309,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_creating() -> Weight {
-		(24_809_000 as Weight)
+		(20_469_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
@@ -309,7 +317,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_removing() -> Weight {
-		(26_704_000 as Weight)
+		(22_472_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(4 as Weight))
 	}
@@ -317,21 +325,21 @@
 	// Storage: Refungible AccountBalance (r:2 w:2)
 	// Storage: Refungible Owned (r:0 w:2)
 	fn transfer_creating_removing() -> Weight {
-		(28_728_000 as Weight)
+		(24_866_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Refungible Balance (r:1 w:0)
 	// Storage: Refungible Allowance (r:0 w:1)
 	fn approve() -> Weight {
-		(16_107_000 as Weight)
+		(13_475_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Refungible Allowance (r:1 w:1)
 	// Storage: Refungible Balance (r:2 w:2)
 	fn transfer_from_normal() -> Weight {
-		(28_765_000 as Weight)
+		(24_707_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
@@ -340,7 +348,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_from_creating() -> Weight {
-		(32_788_000 as Weight)
+		(27_812_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
@@ -349,7 +357,7 @@
 	// Storage: Refungible AccountBalance (r:1 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn transfer_from_removing() -> Weight {
-		(34_523_000 as Weight)
+		(29_966_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
@@ -358,7 +366,7 @@
 	// Storage: Refungible AccountBalance (r:2 w:2)
 	// Storage: Refungible Owned (r:0 w:2)
 	fn transfer_from_creating_removing() -> Weight {
-		(36_749_000 as Weight)
+		(31_660_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(7 as Weight))
 	}
@@ -370,8 +378,15 @@
 	// Storage: Refungible TokenData (r:0 w:1)
 	// Storage: Refungible Owned (r:0 w:1)
 	fn burn_from() -> Weight {
-		(42_259_000 as Weight)
+		(36_248_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(7 as Weight))
 	}
+	// Storage: Refungible TotalSupply (r:1 w:1)
+	// Storage: Refungible Balance (r:1 w:1)
+	fn repartition_item() -> Weight {
+		(8_226_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(2 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
+	}
 }
modifiedpallets/unique/src/lib.rsdiffbeforeafterboth
--- a/pallets/unique/src/lib.rs
+++ b/pallets/unique/src/lib.rs
@@ -27,7 +27,7 @@
 use frame_support::{
 	decl_module, decl_storage, decl_error, decl_event,
 	dispatch::DispatchResult,
-	ensure,
+	ensure, fail,
 	weights::{Weight},
 	transactional,
 	pallet_prelude::{DispatchResultWithPostInfo, ConstU32},
@@ -45,7 +45,7 @@
 use pallet_evm::account::CrossAccountId;
 use pallet_common::{
 	CollectionHandle, Pallet as PalletCommon, CommonWeightInfo, dispatch::dispatch_tx,
-	dispatch::CollectionDispatch,
+	dispatch::CollectionDispatch, RefungibleExtensionsWeightInfo,
 };
 pub mod eth;
 
@@ -65,6 +65,8 @@
 		ConfirmUnsetSponsorFail,
 		/// Length of items properties must be greater than 0.
 		EmptyArgument,
+		/// Repertition is only supported by refungible collection
+		RepartitionCalledOnNonRefungibleCollection,
 	}
 }
 
@@ -74,6 +76,7 @@
 	/// Weight information for extrinsics in this pallet.
 	type WeightInfo: WeightInfo;
 	type CommonWeightInfo: CommonWeightInfo<Self::CrossAccountId>;
+	type RefungibleExtensionsWeightInfo: RefungibleExtensionsWeightInfo;
 }
 
 decl_event! {
@@ -898,5 +901,23 @@
 
 			target_collection.save()
 		}
+
+		#[weight = T::RefungibleExtensionsWeightInfo::repartition()]
+		#[transactional]
+		pub fn repartition(
+			origin,
+			collection_id: CollectionId,
+			token: TokenId,
+			amount: u128,
+		) -> DispatchResultWithPostInfo {
+			let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
+			dispatch_tx::<T, _>(collection_id, |d| {
+				if let Some(refungible_extensions) = d.refungible_extensions() {
+					refungible_extensions.repartition(&sender, token, amount)
+				} else {
+					fail!(<Error<T>>::RepartitionCalledOnNonRefungibleCollection)
+				}
+			})
+		}
 	}
 }
modifiedpallets/unique/src/weights.rsdiffbeforeafterboth
--- a/pallets/unique/src/weights.rs
+++ b/pallets/unique/src/weights.rs
@@ -3,7 +3,7 @@
 //! Autogenerated weights for pallet_unique
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-06-15, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-06-28, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
@@ -57,7 +57,7 @@
 	// Storage: Common CollectionProperties (r:0 w:1)
 	// Storage: Common CollectionById (r:0 w:1)
 	fn create_collection() -> Weight {
-		(39_427_000 as Weight)
+		(53_511_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
@@ -69,27 +69,27 @@
 	// Storage: Common AdminAmount (r:0 w:1)
 	// Storage: Common CollectionProperties (r:0 w:1)
 	fn destroy_collection() -> Weight {
-		(48_339_000 as Weight)
+		(69_481_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
 	fn add_to_allow_list() -> Weight {
-		(17_379_000 as Weight)
+		(22_892_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
 	fn remove_from_allow_list() -> Weight {
-		(17_490_000 as Weight)
+		(22_973_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn change_collection_owner() -> Weight {
-		(17_701_000 as Weight)
+		(22_392_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -97,7 +97,7 @@
 	// Storage: Common IsAdmin (r:1 w:1)
 	// Storage: Common AdminAmount (r:1 w:1)
 	fn add_collection_admin() -> Weight {
-		(23_301_000 as Weight)
+		(30_298_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -105,37 +105,37 @@
 	// Storage: Common IsAdmin (r:1 w:1)
 	// Storage: Common AdminAmount (r:1 w:1)
 	fn remove_collection_admin() -> Weight {
-		(24_859_000 as Weight)
+		(32_842_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_collection_sponsor() -> Weight {
-		(17_795_000 as Weight)
+		(22_613_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn confirm_sponsorship() -> Weight {
-		(17_297_000 as Weight)
+		(22_462_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn remove_collection_sponsor() -> Weight {
-		(17_079_000 as Weight)
+		(21_730_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_transfers_enabled_flag() -> Weight {
-		(9_734_000 as Weight)
+		(10_941_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_collection_limits() -> Weight {
-		(17_998_000 as Weight)
+		(22_363_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -150,7 +150,7 @@
 	// Storage: Common CollectionProperties (r:0 w:1)
 	// Storage: Common CollectionById (r:0 w:1)
 	fn create_collection() -> Weight {
-		(39_427_000 as Weight)
+		(53_511_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
@@ -162,27 +162,27 @@
 	// Storage: Common AdminAmount (r:0 w:1)
 	// Storage: Common CollectionProperties (r:0 w:1)
 	fn destroy_collection() -> Weight {
-		(48_339_000 as Weight)
+		(69_481_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
 	fn add_to_allow_list() -> Weight {
-		(17_379_000 as Weight)
+		(22_892_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Common Allowlist (r:0 w:1)
 	fn remove_from_allow_list() -> Weight {
-		(17_490_000 as Weight)
+		(22_973_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn change_collection_owner() -> Weight {
-		(17_701_000 as Weight)
+		(22_392_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -190,7 +190,7 @@
 	// Storage: Common IsAdmin (r:1 w:1)
 	// Storage: Common AdminAmount (r:1 w:1)
 	fn add_collection_admin() -> Weight {
-		(23_301_000 as Weight)
+		(30_298_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
@@ -198,37 +198,37 @@
 	// Storage: Common IsAdmin (r:1 w:1)
 	// Storage: Common AdminAmount (r:1 w:1)
 	fn remove_collection_admin() -> Weight {
-		(24_859_000 as Weight)
+		(32_842_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_collection_sponsor() -> Weight {
-		(17_795_000 as Weight)
+		(22_613_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn confirm_sponsorship() -> Weight {
-		(17_297_000 as Weight)
+		(22_462_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn remove_collection_sponsor() -> Weight {
-		(17_079_000 as Weight)
+		(21_730_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_transfers_enabled_flag() -> Weight {
-		(9_734_000 as Weight)
+		(10_941_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	// Storage: Common CollectionById (r:1 w:1)
 	fn set_collection_limits() -> Weight {
-		(17_998_000 as Weight)
+		(22_363_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
modifiedruntime/common/src/weights.rsdiffbeforeafterboth
--- a/runtime/common/src/weights.rs
+++ b/runtime/common/src/weights.rs
@@ -16,11 +16,13 @@
 
 use core::marker::PhantomData;
 use frame_support::{weights::Weight};
-use pallet_common::{CommonWeightInfo, dispatch::dispatch_weight};
+use pallet_common::{CommonWeightInfo, dispatch::dispatch_weight, RefungibleExtensionsWeightInfo};
 
 use pallet_fungible::{Config as FungibleConfig, common::CommonWeights as FungibleWeights};
 use pallet_nonfungible::{Config as NonfungibleConfig, common::CommonWeights as NonfungibleWeights};
-use pallet_refungible::{Config as RefungibleConfig, common::CommonWeights as RefungibleWeights};
+use pallet_refungible::{
+	Config as RefungibleConfig, weights::WeightInfo, common::CommonWeights as RefungibleWeights,
+};
 use up_data_structs::{CreateItemExData, CreateItemData};
 
 macro_rules! max_weight_of {
@@ -98,3 +100,12 @@
 		max_weight_of!(burn_recursively_breadth_raw(amount))
 	}
 }
+
+impl<T> RefungibleExtensionsWeightInfo for CommonWeights<T>
+where
+	T: FungibleConfig + NonfungibleConfig + RefungibleConfig,
+{
+	fn repartition() -> Weight {
+		dispatch_weight::<T>() + <<T as RefungibleConfig>::WeightInfo>::repartition_item()
+	}
+}
modifiedruntime/opal/src/lib.rsdiffbeforeafterboth
before · runtime/opal/src/lib.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617//! The Substrate Node Template runtime. This can be compiled with `#[no_std]`, ready for Wasm.1819#![cfg_attr(not(feature = "std"), no_std)]20// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256.21#![recursion_limit = "1024"]22#![allow(clippy::from_over_into, clippy::identity_op)]23#![allow(clippy::fn_to_numeric_cast_with_truncation)]24// Make the WASM binary available.25#[cfg(feature = "std")]26include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));2728use sp_api::impl_runtime_apis;29use sp_core::{crypto::KeyTypeId, OpaqueMetadata, H256, U256, H160};30use sp_runtime::DispatchError;31use fp_self_contained::*;32// #[cfg(any(feature = "std", test))]33// pub use sp_runtime::BuildStorage;3435use sp_runtime::{36	Permill, Perbill, Percent, create_runtime_str, generic, impl_opaque_keys,37	traits::{AccountIdLookup, BlakeTwo256, Block as BlockT, AccountIdConversion, Zero, Member},38	transaction_validity::{TransactionSource, TransactionValidity},39	ApplyExtrinsicResult, RuntimeAppPublic,40};4142use sp_std::prelude::*;4344#[cfg(feature = "std")]45use sp_version::NativeVersion;46use sp_version::RuntimeVersion;47pub use pallet_transaction_payment::{48	Multiplier, TargetedFeeAdjustment, FeeDetails, RuntimeDispatchInfo,49};50// A few exports that help ease life for downstream crates.51pub use pallet_balances::Call as BalancesCall;52pub use pallet_evm::{53	EnsureAddressTruncated, HashedAddressMapping, Runner, account::CrossAccountId as _,54	OnMethodCall, Account as EVMAccount, FeeCalculator, GasWeightMapping,55};56pub use frame_support::{57	construct_runtime, match_types,58	dispatch::DispatchResult,59	PalletId, parameter_types, StorageValue, ConsensusEngineId,60	traits::{61		tokens::currency::Currency as CurrencyT, OnUnbalanced as OnUnbalancedT, Everything,62		Currency, ExistenceRequirement, Get, IsInVec, KeyOwnerProofSystem, LockIdentifier,63		OnUnbalanced, Randomness, FindAuthor, ConstU32, Imbalance, PrivilegeCmp,64	},65	weights::{66		constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},67		DispatchClass, DispatchInfo, GetDispatchInfo, IdentityFee, Pays, PostDispatchInfo, Weight,68		WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients, ConstantMultiplier,69		WeightToFee,70	},71};72use pallet_unique_scheduler::DispatchCall;73use up_data_structs::{74	CollectionId, TokenId, TokenData, Property, PropertyKeyPermission, CollectionLimits,75	CollectionStats, RpcCollection,76	mapping::{EvmTokenAddressMapping, CrossTokenAddressMapping},77	TokenChild, RmrkCollectionInfo, RmrkInstanceInfo, RmrkResourceInfo, RmrkPropertyInfo,78	RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkCollectionId, RmrkNftId,79	RmrkNftChild, RmrkPropertyKey, RmrkResourceId, RmrkBaseId,80};8182// use pallet_contracts::weights::WeightInfo;83// #[cfg(any(feature = "std", test))]84use frame_system::{85	self as frame_system, EnsureRoot, EnsureSigned,86	limits::{BlockWeights, BlockLength},87};88use sp_arithmetic::{89	traits::{BaseArithmetic, Unsigned},90};91use smallvec::smallvec;92// use scale_info::TypeInfo;93use codec::{Encode, Decode};94use fp_rpc::TransactionStatus;95use sp_runtime::{96	traits::{97		Applyable, BlockNumberProvider, Dispatchable, PostDispatchInfoOf, DispatchInfoOf,98		Saturating, CheckedConversion,99	},100	generic::Era,101	transaction_validity::TransactionValidityError,102	DispatchErrorWithPostInfo, SaturatedConversion,103};104105// pub use pallet_timestamp::Call as TimestampCall;106pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;107108// Polkadot imports109use pallet_xcm::XcmPassthrough;110use polkadot_parachain::primitives::Sibling;111use xcm::v1::{BodyId, Junction::*, MultiLocation, NetworkId, Junctions::*};112use xcm_builder::{113	AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter,114	EnsureXcmOrigin, FixedWeightBounds, LocationInverter, NativeAsset, ParentAsSuperuser,115	RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia,116	SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit,117	ParentIsPreset,118};119use xcm_executor::{Config, XcmExecutor, Assets};120use sp_std::{cmp::Ordering, marker::PhantomData};121122use xcm::latest::{123	//	Xcm,124	AssetId::{Concrete},125	Fungibility::Fungible as XcmFungible,126	MultiAsset,127	Error as XcmError,128};129use xcm_executor::traits::{MatchesFungible, WeightTrader};130//use xcm_executor::traits::MatchesFungible;131132use unique_runtime_common::{133	impl_common_runtime_apis,134	types::*,135	constants::*,136	dispatch::{CollectionDispatchT, CollectionDispatch},137	sponsoring::UniqueSponsorshipHandler,138	eth_sponsoring::UniqueEthSponsorshipHandler,139	weights::CommonWeights,140};141142pub const RUNTIME_NAME: &str = "opal";143pub const TOKEN_SYMBOL: &str = "OPL";144145type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;146147impl RuntimeInstance for Runtime {148	type CrossAccountId = self::CrossAccountId;149	type TransactionConverter = self::TransactionConverter;150151	fn get_transaction_converter() -> TransactionConverter {152		TransactionConverter153	}154}155156/// The type for looking up accounts. We don't expect more than 4 billion of them, but you157/// never know...158pub type AccountIndex = u32;159160/// Balance of an account.161pub type Balance = u128;162163/// Index of a transaction in the chain.164pub type Index = u32;165166/// A hash of some data used by the chain.167pub type Hash = sp_core::H256;168169/// Digest item type.170pub type DigestItem = generic::DigestItem;171172/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know173/// the specifics of the runtime. They can then be made to be agnostic over specific formats174/// of data like extrinsics, allowing for them to continue syncing the network through upgrades175/// to even the core data structures.176pub mod opaque {177	use sp_std::prelude::*;178	use sp_runtime::impl_opaque_keys;179	use super::Aura;180181	pub use unique_runtime_common::types::*;182183	impl_opaque_keys! {184		pub struct SessionKeys {185			pub aura: Aura,186		}187	}188}189190/// This runtime version.191pub const VERSION: RuntimeVersion = RuntimeVersion {192	spec_name: create_runtime_str!(RUNTIME_NAME),193	impl_name: create_runtime_str!(RUNTIME_NAME),194	authoring_version: 1,195	spec_version: 924000,196	impl_version: 0,197	apis: RUNTIME_API_VERSIONS,198	transaction_version: 1,199	state_version: 0,200};201202#[derive(codec::Encode, codec::Decode)]203pub enum XCMPMessage<XAccountId, XBalance> {204	/// Transfer tokens to the given account from the Parachain account.205	TransferToken(XAccountId, XBalance),206}207208/// The version information used to identify this runtime when compiled natively.209#[cfg(feature = "std")]210pub fn native_version() -> NativeVersion {211	NativeVersion {212		runtime_version: VERSION,213		can_author_with: Default::default(),214	}215}216217type NegativeImbalance = <Balances as Currency<AccountId>>::NegativeImbalance;218219pub struct DealWithFees;220impl OnUnbalanced<NegativeImbalance> for DealWithFees {221	fn on_unbalanceds<B>(mut fees_then_tips: impl Iterator<Item = NegativeImbalance>) {222		if let Some(fees) = fees_then_tips.next() {223			// for fees, 100% to treasury224			let mut split = fees.ration(100, 0);225			if let Some(tips) = fees_then_tips.next() {226				// for tips, if any, 100% to treasury227				tips.ration_merge_into(100, 0, &mut split);228			}229			Treasury::on_unbalanced(split.0);230			// Author::on_unbalanced(split.1);231		}232	}233}234235parameter_types! {236	pub const BlockHashCount: BlockNumber = 2400;237	pub RuntimeBlockLength: BlockLength =238		BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO);239	pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);240	pub const MaximumBlockLength: u32 = 5 * 1024 * 1024;241	pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder()242		.base_block(BlockExecutionWeight::get())243		.for_class(DispatchClass::all(), |weights| {244			weights.base_extrinsic = ExtrinsicBaseWeight::get();245		})246		.for_class(DispatchClass::Normal, |weights| {247			weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT);248		})249		.for_class(DispatchClass::Operational, |weights| {250			weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT);251			// Operational transactions have some extra reserved space, so that they252			// are included even if block reached `MAXIMUM_BLOCK_WEIGHT`.253			weights.reserved = Some(254				MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT255			);256		})257		.avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)258		.build_or_panic();259	pub const Version: RuntimeVersion = VERSION;260	pub const SS58Prefix: u8 = 42;261}262263parameter_types! {264	pub const ChainId: u64 = 8882;265}266267pub struct FixedFee;268impl FeeCalculator for FixedFee {269	fn min_gas_price() -> (U256, u64) {270		(MIN_GAS_PRICE.into(), 0)271	}272}273274// Assuming slowest ethereum opcode is SSTORE, with gas price of 20000 as our worst case275// (contract, which only writes a lot of data),276// approximating on top of our real store write weight277parameter_types! {278	pub const WritesPerSecond: u64 = WEIGHT_PER_SECOND / <Runtime as frame_system::Config>::DbWeight::get().write;279	pub const GasPerSecond: u64 = WritesPerSecond::get() * 20000;280	pub const WeightPerGas: u64 = WEIGHT_PER_SECOND / GasPerSecond::get();281}282283/// Limiting EVM execution to 50% of block for substrate users and management tasks284/// EVM transaction consumes more weight than substrate's, so we can't rely on them being285/// scheduled fairly286const EVM_DISPATCH_RATIO: Perbill = Perbill::from_percent(50);287parameter_types! {288	pub BlockGasLimit: U256 = U256::from(NORMAL_DISPATCH_RATIO * EVM_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT / WeightPerGas::get());289}290291pub enum FixedGasWeightMapping {}292impl GasWeightMapping for FixedGasWeightMapping {293	fn gas_to_weight(gas: u64) -> Weight {294		gas.saturating_mul(WeightPerGas::get())295	}296	fn weight_to_gas(weight: Weight) -> u64 {297		weight / WeightPerGas::get()298	}299}300301impl pallet_evm::account::Config for Runtime {302	type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Self>;303	type EvmAddressMapping = pallet_evm::HashedAddressMapping<Self::Hashing>;304	type EvmBackwardsAddressMapping = fp_evm_mapping::MapBackwardsAddressTruncated;305}306307impl pallet_evm::Config for Runtime {308	type BlockGasLimit = BlockGasLimit;309	type FeeCalculator = FixedFee;310	type GasWeightMapping = FixedGasWeightMapping;311	type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping<Self>;312	type CallOrigin = EnsureAddressTruncated<Self>;313	type WithdrawOrigin = EnsureAddressTruncated<Self>;314	type AddressMapping = HashedAddressMapping<Self::Hashing>;315	type PrecompilesType = ();316	type PrecompilesValue = ();317	type Currency = Balances;318	type Event = Event;319	type OnMethodCall = (320		pallet_evm_migration::OnMethodCall<Self>,321		pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,322		CollectionDispatchT<Self>,323		pallet_unique::eth::CollectionHelpersOnMethodCall<Self>,324	);325	type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate<Self>;326	type ChainId = ChainId;327	type Runner = pallet_evm::runner::stack::Runner<Self>;328	type OnChargeTransaction = pallet_evm::EVMCurrencyAdapter<Balances, DealWithFees>;329	type TransactionValidityHack = pallet_evm_transaction_payment::TransactionValidityHack<Self>;330	type FindAuthor = EthereumFindAuthor<Aura>;331}332333impl pallet_evm_migration::Config for Runtime {334	type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;335}336337pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);338impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {339	fn find_author<'a, I>(digests: I) -> Option<H160>340	where341		I: 'a + IntoIterator<Item = (ConsensusEngineId, &'a [u8])>,342	{343		if let Some(author_index) = F::find_author(digests) {344			let authority_id = Aura::authorities()[author_index as usize].clone();345			return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24]));346		}347		None348	}349}350351impl pallet_ethereum::Config for Runtime {352	type Event = Event;353	type StateRoot = pallet_ethereum::IntermediateStateRoot<Self>;354}355356impl pallet_randomness_collective_flip::Config for Runtime {}357358impl frame_system::Config for Runtime {359	/// The data to be stored in an account.360	type AccountData = pallet_balances::AccountData<Balance>;361	/// The identifier used to distinguish between accounts.362	type AccountId = AccountId;363	/// The basic call filter to use in dispatchable.364	type BaseCallFilter = Everything;365	/// Maximum number of block number to block hash mappings to keep (oldest pruned first).366	type BlockHashCount = BlockHashCount;367	/// The maximum length of a block (in bytes).368	type BlockLength = RuntimeBlockLength;369	/// The index type for blocks.370	type BlockNumber = BlockNumber;371	/// The weight of the overhead invoked on the block import process, independent of the extrinsics included in that block.372	type BlockWeights = RuntimeBlockWeights;373	/// The aggregated dispatch type that is available for extrinsics.374	type Call = Call;375	/// The weight of database operations that the runtime can invoke.376	type DbWeight = RocksDbWeight;377	/// The ubiquitous event type.378	type Event = Event;379	/// The type for hashing blocks and tries.380	type Hash = Hash;381	/// The hashing algorithm used.382	type Hashing = BlakeTwo256;383	/// The header type.384	type Header = generic::Header<BlockNumber, BlakeTwo256>;385	/// The index type for storing how many extrinsics an account has signed.386	type Index = Index;387	/// The lookup mechanism to get account ID from whatever is passed in dispatchers.388	type Lookup = AccountIdLookup<AccountId, ()>;389	/// What to do if an account is fully reaped from the system.390	type OnKilledAccount = ();391	/// What to do if a new account is created.392	type OnNewAccount = ();393	type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode<Self>;394	/// The ubiquitous origin type.395	type Origin = Origin;396	/// This type is being generated by `construct_runtime!`.397	type PalletInfo = PalletInfo;398	/// This is used as an identifier of the chain. 42 is the generic substrate prefix.399	type SS58Prefix = SS58Prefix;400	/// Weight information for the extrinsics of this pallet.401	type SystemWeightInfo = frame_system::weights::SubstrateWeight<Self>;402	/// Version of the runtime.403	type Version = Version;404	type MaxConsumers = ConstU32<16>;405}406407parameter_types! {408	pub const MinimumPeriod: u64 = SLOT_DURATION / 2;409}410411impl pallet_timestamp::Config for Runtime {412	/// A timestamp: milliseconds since the unix epoch.413	type Moment = u64;414	type OnTimestampSet = ();415	type MinimumPeriod = MinimumPeriod;416	type WeightInfo = ();417}418419parameter_types! {420	// pub const ExistentialDeposit: u128 = 500;421	pub const ExistentialDeposit: u128 = 0;422	pub const MaxLocks: u32 = 50;423	pub const MaxReserves: u32 = 50;424}425426impl pallet_balances::Config for Runtime {427	type MaxLocks = MaxLocks;428	type MaxReserves = MaxReserves;429	type ReserveIdentifier = [u8; 16];430	/// The type for recording an account's balance.431	type Balance = Balance;432	/// The ubiquitous event type.433	type Event = Event;434	type DustRemoval = Treasury;435	type ExistentialDeposit = ExistentialDeposit;436	type AccountStore = System;437	type WeightInfo = pallet_balances::weights::SubstrateWeight<Self>;438}439440pub const fn deposit(items: u32, bytes: u32) -> Balance {441	items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE442}443444/*445parameter_types! {446	pub TombstoneDeposit: Balance = deposit(447		1,448		sp_std::mem::size_of::<pallet_contracts::Pallet<Runtime>> as u32,449	);450	pub DepositPerContract: Balance = TombstoneDeposit::get();451	pub const DepositPerStorageByte: Balance = deposit(0, 1);452	pub const DepositPerStorageItem: Balance = deposit(1, 0);453	pub RentFraction: Perbill = Perbill::from_rational(1u32, 30 * DAYS);454	pub const SurchargeReward: Balance = 150 * MILLIUNIQUE;455	pub const SignedClaimHandicap: u32 = 2;456	pub const MaxDepth: u32 = 32;457	pub const MaxValueSize: u32 = 16 * 1024;458	pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb459	// The lazy deletion runs inside on_initialize.460	pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO *461		RuntimeBlockWeights::get().max_block;462	// The weight needed for decoding the queue should be less or equal than a fifth463	// of the overall weight dedicated to the lazy deletion.464	pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get() / (465			<Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(1) -466			<Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(0)467		)) / 5) as u32;468	pub Schedule: pallet_contracts::Schedule<Runtime> = Default::default();469}470471impl pallet_contracts::Config for Runtime {472	type Time = Timestamp;473	type Randomness = RandomnessCollectiveFlip;474	type Currency = Balances;475	type Event = Event;476	type RentPayment = ();477	type SignedClaimHandicap = SignedClaimHandicap;478	type TombstoneDeposit = TombstoneDeposit;479	type DepositPerContract = DepositPerContract;480	type DepositPerStorageByte = DepositPerStorageByte;481	type DepositPerStorageItem = DepositPerStorageItem;482	type RentFraction = RentFraction;483	type SurchargeReward = SurchargeReward;484	type WeightPrice = pallet_transaction_payment::Pallet<Self>;485	type WeightInfo = pallet_contracts::weights::SubstrateWeight<Self>;486	type ChainExtension = NFTExtension;487	type DeletionQueueDepth = DeletionQueueDepth;488	type DeletionWeightLimit = DeletionWeightLimit;489	type Schedule = Schedule;490	type CallStack = [pallet_contracts::Frame<Self>; 31];491}492*/493494parameter_types! {495	/// This value increases the priority of `Operational` transactions by adding496	/// a "virtual tip" that's equal to the `OperationalFeeMultiplier * final_fee`.497	pub const OperationalFeeMultiplier: u8 = 5;498}499500/// Linear implementor of `WeightToFeePolynomial`501pub struct LinearFee<T>(sp_std::marker::PhantomData<T>);502503impl<T> WeightToFeePolynomial for LinearFee<T>504where505	T: BaseArithmetic + From<u32> + Copy + Unsigned,506{507	type Balance = T;508509	fn polynomial() -> WeightToFeeCoefficients<Self::Balance> {510		smallvec!(WeightToFeeCoefficient {511			coeff_integer: WEIGHT_TO_FEE_COEFF.into(),512			coeff_frac: Perbill::zero(),513			negative: false,514			degree: 1,515		})516	}517}518519impl pallet_transaction_payment::Config for Runtime {520	type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter<Balances, DealWithFees>;521	type LengthToFee = ConstantMultiplier<Balance, TransactionByteFee>;522	type OperationalFeeMultiplier = OperationalFeeMultiplier;523	type WeightToFee = LinearFee<Balance>;524	type FeeMultiplierUpdate = ();525}526527parameter_types! {528	pub const ProposalBond: Permill = Permill::from_percent(5);529	pub const ProposalBondMinimum: Balance = 1 * UNIQUE;530	pub const ProposalBondMaximum: Balance = 1000 * UNIQUE;531	pub const SpendPeriod: BlockNumber = 5 * MINUTES;532	pub const Burn: Permill = Permill::from_percent(0);533	pub const TipCountdown: BlockNumber = 1 * DAYS;534	pub const TipFindersFee: Percent = Percent::from_percent(20);535	pub const TipReportDepositBase: Balance = 1 * UNIQUE;536	pub const DataDepositPerByte: Balance = 1 * CENTIUNIQUE;537	pub const BountyDepositBase: Balance = 1 * UNIQUE;538	pub const BountyDepositPayoutDelay: BlockNumber = 1 * DAYS;539	pub const TreasuryModuleId: PalletId = PalletId(*b"py/trsry");540	pub const BountyUpdatePeriod: BlockNumber = 14 * DAYS;541	pub const MaximumReasonLength: u32 = 16384;542	pub const BountyCuratorDeposit: Permill = Permill::from_percent(50);543	pub const BountyValueMinimum: Balance = 5 * UNIQUE;544	pub const MaxApprovals: u32 = 100;545}546547impl pallet_treasury::Config for Runtime {548	type PalletId = TreasuryModuleId;549	type Currency = Balances;550	type ApproveOrigin = EnsureRoot<AccountId>;551	type RejectOrigin = EnsureRoot<AccountId>;552	type Event = Event;553	type OnSlash = ();554	type ProposalBond = ProposalBond;555	type ProposalBondMinimum = ProposalBondMinimum;556	type ProposalBondMaximum = ProposalBondMaximum;557	type SpendPeriod = SpendPeriod;558	type Burn = Burn;559	type BurnDestination = ();560	type SpendFunds = ();561	type WeightInfo = pallet_treasury::weights::SubstrateWeight<Self>;562	type MaxApprovals = MaxApprovals;563}564565impl pallet_sudo::Config for Runtime {566	type Event = Event;567	type Call = Call;568}569570pub struct RelayChainBlockNumberProvider<T>(sp_std::marker::PhantomData<T>);571572impl<T: cumulus_pallet_parachain_system::Config> BlockNumberProvider573	for RelayChainBlockNumberProvider<T>574{575	type BlockNumber = BlockNumber;576577	fn current_block_number() -> Self::BlockNumber {578		cumulus_pallet_parachain_system::Pallet::<T>::validation_data()579			.map(|d| d.relay_parent_number)580			.unwrap_or_default()581	}582}583584parameter_types! {585	pub const MinVestedTransfer: Balance = 10 * UNIQUE;586	pub const MaxVestingSchedules: u32 = 28;587}588589impl orml_vesting::Config for Runtime {590	type Event = Event;591	type Currency = pallet_balances::Pallet<Runtime>;592	type MinVestedTransfer = MinVestedTransfer;593	type VestedTransferOrigin = EnsureSigned<AccountId>;594	type WeightInfo = ();595	type MaxVestingSchedules = MaxVestingSchedules;596	type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;597}598599parameter_types! {600	pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;601	pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;602}603604impl cumulus_pallet_parachain_system::Config for Runtime {605	type Event = Event;606	type SelfParaId = parachain_info::Pallet<Self>;607	type OnSystemEvent = ();608	// type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<609	// 	MaxDownwardMessageWeight,610	// 	XcmExecutor<XcmConfig>,611	// 	Call,612	// >;613	type OutboundXcmpMessageSource = XcmpQueue;614	type DmpMessageHandler = DmpQueue;615	type ReservedDmpWeight = ReservedDmpWeight;616	type ReservedXcmpWeight = ReservedXcmpWeight;617	type XcmpMessageHandler = XcmpQueue;618}619620impl parachain_info::Config for Runtime {}621622impl cumulus_pallet_aura_ext::Config for Runtime {}623624parameter_types! {625	pub const RelayLocation: MultiLocation = MultiLocation::parent();626	pub const RelayNetwork: NetworkId = NetworkId::Polkadot;627	pub RelayOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into();628	pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();629}630631/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used632/// when determining ownership of accounts for asset transacting and when attempting to use XCM633/// `Transact` in order to determine the dispatch Origin.634pub type LocationToAccountId = (635	// The parent (Relay-chain) origin converts to the default `AccountId`.636	ParentIsPreset<AccountId>,637	// Sibling parachain origins convert to AccountId via the `ParaId::into`.638	SiblingParachainConvertsVia<Sibling, AccountId>,639	// Straight up local `AccountId32` origins just alias directly to `AccountId`.640	AccountId32Aliases<RelayNetwork, AccountId>,641);642643pub struct OnlySelfCurrency;644impl<B: TryFrom<u128>> MatchesFungible<B> for OnlySelfCurrency {645	fn matches_fungible(a: &MultiAsset) -> Option<B> {646		match (&a.id, &a.fun) {647			(Concrete(_), XcmFungible(ref amount)) => CheckedConversion::checked_from(*amount),648			_ => None,649		}650	}651}652653/// Means for transacting assets on this chain.654pub type LocalAssetTransactor = CurrencyAdapter<655	// Use this currency:656	Balances,657	// Use this currency when it is a fungible asset matching the given location or name:658	OnlySelfCurrency,659	// Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID:660	LocationToAccountId,661	// Our chain's account ID type (we can't get away without mentioning it explicitly):662	AccountId,663	// We don't track any teleports.664	(),665>;666667/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance,668/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can669/// biases the kind of local `Origin` it will become.670pub type XcmOriginToTransactDispatchOrigin = (671	// Sovereign account converter; this attempts to derive an `AccountId` from the origin location672	// using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for673	// foreign chains who want to have a local sovereign account on this chain which they control.674	SovereignSignedViaLocation<LocationToAccountId, Origin>,675	// Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when676	// recognised.677	RelayChainAsNative<RelayOrigin, Origin>,678	// Native converter for sibling Parachains; will convert to a `SiblingPara` origin when679	// recognised.680	SiblingParachainAsNative<cumulus_pallet_xcm::Origin, Origin>,681	// Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a682	// transaction from the Root origin.683	ParentAsSuperuser<Origin>,684	// Native signed account converter; this just converts an `AccountId32` origin into a normal685	// `Origin::Signed` origin of the same 32-byte value.686	SignedAccountId32AsNative<RelayNetwork, Origin>,687	// Xcm origins can be represented natively under the Xcm pallet's Xcm origin.688	XcmPassthrough<Origin>,689);690691parameter_types! {692	// One XCM operation is 1_000_000 weight - almost certainly a conservative estimate.693	pub UnitWeightCost: Weight = 1_000_000;694	// 1200 UNIQUEs buy 1 second of weight.695	pub const WeightPrice: (MultiLocation, u128) = (MultiLocation::parent(), 1_200 * UNIQUE);696	pub const MaxInstructions: u32 = 100;697	pub const MaxAuthorities: u32 = 100_000;698}699700match_types! {701	pub type ParentOrParentsUnitPlurality: impl Contains<MultiLocation> = {702		MultiLocation { parents: 1, interior: Here } |703		MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Unit, .. }) }704	};705}706707pub type Barrier = (708	TakeWeightCredit,709	AllowTopLevelPaidExecutionFrom<Everything>,710	AllowUnpaidExecutionFrom<ParentOrParentsUnitPlurality>,711	// ^^^ Parent & its unit plurality gets free execution712);713714pub struct UsingOnlySelfCurrencyComponents<715	WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,716	AssetId: Get<MultiLocation>,717	AccountId,718	Currency: CurrencyT<AccountId>,719	OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,720>(721	Weight,722	Currency::Balance,723	PhantomData<(WeightToFee, AssetId, AccountId, Currency, OnUnbalanced)>,724);725impl<726		WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,727		AssetId: Get<MultiLocation>,728		AccountId,729		Currency: CurrencyT<AccountId>,730		OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,731	> WeightTrader732	for UsingOnlySelfCurrencyComponents<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>733{734	fn new() -> Self {735		Self(0, Zero::zero(), PhantomData)736	}737738	fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result<Assets, XcmError> {739		let amount = WeightToFee::weight_to_fee(&weight);740		let u128_amount: u128 = amount.try_into().map_err(|_| XcmError::Overflow)?;741742		// location to this parachain through relay chain743		let option1: xcm::v1::AssetId = Concrete(MultiLocation {744			parents: 1,745			interior: X1(Parachain(ParachainInfo::parachain_id().into())),746		});747		// direct location748		let option2: xcm::v1::AssetId = Concrete(MultiLocation {749			parents: 0,750			interior: Here,751		});752753		let required = if payment.fungible.contains_key(&option1) {754			(option1, u128_amount).into()755		} else if payment.fungible.contains_key(&option2) {756			(option2, u128_amount).into()757		} else {758			(Concrete(MultiLocation::default()), u128_amount).into()759		};760761		let unused = payment762			.checked_sub(required)763			.map_err(|_| XcmError::TooExpensive)?;764		self.0 = self.0.saturating_add(weight);765		self.1 = self.1.saturating_add(amount);766		Ok(unused)767	}768769	fn refund_weight(&mut self, weight: Weight) -> Option<MultiAsset> {770		let weight = weight.min(self.0);771		let amount = WeightToFee::weight_to_fee(&weight);772		self.0 -= weight;773		self.1 = self.1.saturating_sub(amount);774		let amount: u128 = amount.saturated_into();775		if amount > 0 {776			Some((AssetId::get(), amount).into())777		} else {778			None779		}780	}781}782impl<783		WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,784		AssetId: Get<MultiLocation>,785		AccountId,786		Currency: CurrencyT<AccountId>,787		OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,788	> Drop789	for UsingOnlySelfCurrencyComponents<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>790{791	fn drop(&mut self) {792		OnUnbalanced::on_unbalanced(Currency::issue(self.1));793	}794}795796pub struct XcmConfig;797impl Config for XcmConfig {798	type Call = Call;799	type XcmSender = XcmRouter;800	// How to withdraw and deposit an asset.801	type AssetTransactor = LocalAssetTransactor;802	type OriginConverter = XcmOriginToTransactDispatchOrigin;803	type IsReserve = NativeAsset;804	type IsTeleporter = (); // Teleportation is disabled805	type LocationInverter = LocationInverter<Ancestry>;806	type Barrier = Barrier;807	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;808	type Trader =809		UsingOnlySelfCurrencyComponents<LinearFee<Balance>, RelayLocation, AccountId, Balances, ()>;810	type ResponseHandler = (); // Don't handle responses for now.811	type SubscriptionService = PolkadotXcm;812813	type AssetTrap = PolkadotXcm;814	type AssetClaims = PolkadotXcm;815}816817// parameter_types! {818// 	pub const MaxDownwardMessageWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 10;819// }820821/// No local origins on this chain are allowed to dispatch XCM sends/executions.822pub type LocalOriginToLocation = (SignedToAccountId32<Origin, AccountId, RelayNetwork>,);823824/// The means for routing XCM messages which are not for local execution into the right message825/// queues.826pub type XcmRouter = (827	// Two routers - use UMP to communicate with the relay chain:828	cumulus_primitives_utility::ParentAsUmp<ParachainSystem, ()>,829	// ..and XCMP to communicate with the sibling chains.830	XcmpQueue,831);832833impl pallet_evm_coder_substrate::Config for Runtime {}834835impl pallet_xcm::Config for Runtime {836	type Event = Event;837	type SendXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;838	type XcmRouter = XcmRouter;839	type ExecuteXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;840	type XcmExecuteFilter = Everything;841	type XcmExecutor = XcmExecutor<XcmConfig>;842	type XcmTeleportFilter = Everything;843	type XcmReserveTransferFilter = Everything;844	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;845	type LocationInverter = LocationInverter<Ancestry>;846	type Origin = Origin;847	type Call = Call;848	const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100;849	type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion;850}851852impl cumulus_pallet_xcm::Config for Runtime {853	type Event = Event;854	type XcmExecutor = XcmExecutor<XcmConfig>;855}856857impl cumulus_pallet_xcmp_queue::Config for Runtime {858	type WeightInfo = ();859	type Event = Event;860	type XcmExecutor = XcmExecutor<XcmConfig>;861	type ChannelInfo = ParachainSystem;862	type VersionWrapper = ();863	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;864	type ControllerOrigin = EnsureRoot<AccountId>;865	type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin;866}867868impl cumulus_pallet_dmp_queue::Config for Runtime {869	type Event = Event;870	type XcmExecutor = XcmExecutor<XcmConfig>;871	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;872}873874impl pallet_aura::Config for Runtime {875	type AuthorityId = AuraId;876	type DisabledValidators = ();877	type MaxAuthorities = MaxAuthorities;878}879880parameter_types! {881	pub TreasuryAccountId: AccountId = TreasuryModuleId::get().into_account_truncating();882	pub const CollectionCreationPrice: Balance = 2 * UNIQUE;883}884885impl pallet_common::Config for Runtime {886	type WeightInfo = pallet_common::weights::SubstrateWeight<Self>;887	type Event = Event;888	type Currency = Balances;889	type CollectionCreationPrice = CollectionCreationPrice;890	type TreasuryAccountId = TreasuryAccountId;891	type CollectionDispatch = CollectionDispatchT<Self>;892893	type EvmTokenAddressMapping = EvmTokenAddressMapping;894	type CrossTokenAddressMapping = CrossTokenAddressMapping<Self::AccountId>;895	type ContractAddress = EvmCollectionHelpersAddress;896}897898impl pallet_structure::Config for Runtime {899	type Event = Event;900	type Call = Call;901	type WeightInfo = pallet_structure::weights::SubstrateWeight<Self>;902}903904impl pallet_fungible::Config for Runtime {905	type WeightInfo = pallet_fungible::weights::SubstrateWeight<Self>;906}907impl pallet_refungible::Config for Runtime {908	type WeightInfo = pallet_refungible::weights::SubstrateWeight<Self>;909}910impl pallet_nonfungible::Config for Runtime {911	type WeightInfo = pallet_nonfungible::weights::SubstrateWeight<Self>;912}913914impl pallet_proxy_rmrk_core::Config for Runtime {915	type WeightInfo = pallet_proxy_rmrk_core::weights::SubstrateWeight<Self>;916	type Event = Event;917}918919impl pallet_proxy_rmrk_equip::Config for Runtime {920	type WeightInfo = pallet_proxy_rmrk_equip::weights::SubstrateWeight<Self>;921	type Event = Event;922}923924impl pallet_unique::Config for Runtime {925	type Event = Event;926	type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;927	type CommonWeightInfo = CommonWeights<Self>;928}929930parameter_types! {931	pub const InflationBlockInterval: BlockNumber = 100; // every time per how many blocks inflation is applied932}933934/// Used for the pallet inflation935impl pallet_inflation::Config for Runtime {936	type Currency = Balances;937	type TreasuryAccountId = TreasuryAccountId;938	type InflationBlockInterval = InflationBlockInterval;939	type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;940}941942parameter_types! {943	pub MaximumSchedulerWeight: Weight = Perbill::from_percent(50) *944		RuntimeBlockWeights::get().max_block;945	pub const MaxScheduledPerBlock: u32 = 50;946}947948type ChargeTransactionPayment = pallet_charge_transaction::ChargeTransactionPayment<Runtime>;949use frame_support::traits::NamedReservableCurrency;950951fn get_signed_extras(from: <Runtime as frame_system::Config>::AccountId) -> SignedExtraScheduler {952	(953		frame_system::CheckSpecVersion::<Runtime>::new(),954		frame_system::CheckGenesis::<Runtime>::new(),955		frame_system::CheckEra::<Runtime>::from(Era::Immortal),956		frame_system::CheckNonce::<Runtime>::from(frame_system::Pallet::<Runtime>::account_nonce(957			from,958		)),959		frame_system::CheckWeight::<Runtime>::new(),960		// sponsoring transaction logic961		// pallet_charge_transaction::ChargeTransactionPayment::<Runtime>::new(0),962	)963}964965pub struct SchedulerPaymentExecutor;966impl<T: frame_system::Config + pallet_unique_scheduler::Config, SelfContainedSignedInfo>967	DispatchCall<T, SelfContainedSignedInfo> for SchedulerPaymentExecutor968where969	<T as frame_system::Config>::Call: Member970		+ Dispatchable<Origin = Origin, Info = DispatchInfo>971		+ SelfContainedCall<SignedInfo = SelfContainedSignedInfo>972		+ GetDispatchInfo973		+ From<frame_system::Call<Runtime>>,974	SelfContainedSignedInfo: Send + Sync + 'static,975	Call: From<<T as frame_system::Config>::Call>976		+ From<<T as pallet_unique_scheduler::Config>::Call>977		+ SelfContainedCall<SignedInfo = SelfContainedSignedInfo>,978	sp_runtime::AccountId32: From<<T as frame_system::Config>::AccountId>,979{980	fn dispatch_call(981		signer: <T as frame_system::Config>::AccountId,982		call: <T as pallet_unique_scheduler::Config>::Call,983	) -> Result<984		Result<PostDispatchInfo, DispatchErrorWithPostInfo<PostDispatchInfo>>,985		TransactionValidityError,986	> {987		let dispatch_info = call.get_dispatch_info();988		let extrinsic = fp_self_contained::CheckedExtrinsic::<989			AccountId,990			Call,991			SignedExtraScheduler,992			SelfContainedSignedInfo,993		> {994			signed:995				CheckedSignature::<AccountId, SignedExtraScheduler, SelfContainedSignedInfo>::Signed(996					signer.clone().into(),997					get_signed_extras(signer.into()),998				),999			function: call.into(),1000		};10011002		extrinsic.apply::<Runtime>(&dispatch_info, 0)1003	}10041005	fn reserve_balance(1006		id: [u8; 16],1007		sponsor: <T as frame_system::Config>::AccountId,1008		call: <T as pallet_unique_scheduler::Config>::Call,1009		count: u32,1010	) -> Result<(), DispatchError> {1011		let dispatch_info = call.get_dispatch_info();1012		let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0)1013			.saturating_mul(count.into());10141015		<Balances as NamedReservableCurrency<AccountId>>::reserve_named(1016			&id,1017			&(sponsor.into()),1018			weight,1019		)1020	}10211022	fn pay_for_call(1023		id: [u8; 16],1024		sponsor: <T as frame_system::Config>::AccountId,1025		call: <T as pallet_unique_scheduler::Config>::Call,1026	) -> Result<u128, DispatchError> {1027		let dispatch_info = call.get_dispatch_info();1028		let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0);1029		Ok(1030			<Balances as NamedReservableCurrency<AccountId>>::unreserve_named(1031				&id,1032				&(sponsor.into()),1033				weight,1034			),1035		)1036	}10371038	fn cancel_reserve(1039		id: [u8; 16],1040		sponsor: <T as frame_system::Config>::AccountId,1041	) -> Result<u128, DispatchError> {1042		Ok(1043			<Balances as NamedReservableCurrency<AccountId>>::unreserve_named(1044				&id,1045				&(sponsor.into()),1046				u128::MAX,1047			),1048		)1049	}1050}10511052parameter_types! {1053	pub const NoPreimagePostponement: Option<u32> = Some(10);1054	pub const Preimage: Option<u32> = Some(10);1055}10561057/// Used the compare the privilege of an origin inside the scheduler.1058pub struct OriginPrivilegeCmp;10591060impl PrivilegeCmp<OriginCaller> for OriginPrivilegeCmp {1061	fn cmp_privilege(_left: &OriginCaller, _right: &OriginCaller) -> Option<Ordering> {1062		Some(Ordering::Equal)1063	}1064}10651066impl pallet_unique_scheduler::Config for Runtime {1067	type Event = Event;1068	type Origin = Origin;1069	type Currency = Balances;1070	type PalletsOrigin = OriginCaller;1071	type Call = Call;1072	type MaximumWeight = MaximumSchedulerWeight;1073	type ScheduleOrigin = EnsureSigned<AccountId>;1074	type MaxScheduledPerBlock = MaxScheduledPerBlock;1075	type WeightInfo = ();1076	type CallExecutor = SchedulerPaymentExecutor;1077	type OriginPrivilegeCmp = OriginPrivilegeCmp;1078	type PreimageProvider = ();1079	type NoPreimagePostponement = NoPreimagePostponement;1080}10811082type EvmSponsorshipHandler = (1083	UniqueEthSponsorshipHandler<Runtime>,1084	pallet_evm_contract_helpers::HelpersContractSponsoring<Runtime>,1085);10861087type SponsorshipHandler = (1088	UniqueSponsorshipHandler<Runtime>,1089	//pallet_contract_helpers::ContractSponsorshipHandler<Runtime>,1090	pallet_evm_transaction_payment::BridgeSponsorshipHandler<Runtime>,1091);10921093impl pallet_evm_transaction_payment::Config for Runtime {1094	type EvmSponsorshipHandler = EvmSponsorshipHandler;1095	type Currency = Balances;1096}10971098impl pallet_charge_transaction::Config for Runtime {1099	type SponsorshipHandler = SponsorshipHandler;1100}11011102// impl pallet_contract_helpers::Config for Runtime {1103//	 type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;1104// }11051106parameter_types! {1107	// 0x842899ECF380553E8a4de75bF534cdf6fBF640491108	pub const HelpersContractAddress: H160 = H160([1109		0x84, 0x28, 0x99, 0xec, 0xf3, 0x80, 0x55, 0x3e, 0x8a, 0x4d, 0xe7, 0x5b, 0xf5, 0x34, 0xcd, 0xf6, 0xfb, 0xf6, 0x40, 0x49,1110	]);11111112	// 0x6c4e9fe1ae37a41e93cee429e8e1881abdcbb54f1113	pub const EvmCollectionHelpersAddress: H160 = H160([1114		0x6c, 0x4e, 0x9f, 0xe1, 0xae, 0x37, 0xa4, 0x1e, 0x93, 0xce, 0xe4, 0x29, 0xe8, 0xe1, 0x88, 0x1a, 0xbd, 0xcb, 0xb5, 0x4f,1115	]);1116}11171118impl pallet_evm_contract_helpers::Config for Runtime {1119	type ContractAddress = HelpersContractAddress;1120	type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;1121}11221123construct_runtime!(1124	pub enum Runtime where1125		Block = Block,1126		NodeBlock = opaque::Block,1127		UncheckedExtrinsic = UncheckedExtrinsic1128	{1129		ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Config, Storage, Inherent, Event<T>, ValidateUnsigned} = 20,1130		ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21,11311132		Aura: pallet_aura::{Pallet, Config<T>} = 22,1133		AuraExt: cumulus_pallet_aura_ext::{Pallet, Config} = 23,11341135		Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 30,1136		RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Storage} = 31,1137		Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 32,1138		TransactionPayment: pallet_transaction_payment::{Pallet, Storage} = 33,1139		Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>} = 34,1140		Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>} = 35,1141		System: frame_system::{Pallet, Call, Storage, Config, Event<T>} = 36,1142		Vesting: orml_vesting::{Pallet, Storage, Call, Event<T>, Config<T>} = 37,1143		// Vesting: pallet_vesting::{Pallet, Call, Config<T>, Storage, Event<T>} = 37,1144		// Contracts: pallet_contracts::{Pallet, Call, Storage, Event<T>} = 38,11451146		// XCM helpers.1147		XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,1148		PolkadotXcm: pallet_xcm::{Pallet, Call, Event<T>, Origin} = 51,1149		CumulusXcm: cumulus_pallet_xcm::{Pallet, Call, Event<T>, Origin} = 52,1150		DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event<T>} = 53,11511152		// Unique Pallets1153		Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,1154		Unique: pallet_unique::{Pallet, Call, Storage, Event<T>} = 61,1155		Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event<T>} = 62,1156		// free = 631157		Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,1158		// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,1159		Common: pallet_common::{Pallet, Storage, Event<T>} = 66,1160		Fungible: pallet_fungible::{Pallet, Storage} = 67,1161		Refungible: pallet_refungible::{Pallet, Storage} = 68,1162		Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69,1163		Structure: pallet_structure::{Pallet, Call, Storage, Event<T>} = 70,1164		RmrkCore: pallet_proxy_rmrk_core::{Pallet, Call, Storage, Event<T>} = 71,1165		RmrkEquip: pallet_proxy_rmrk_equip::{Pallet, Call, Storage, Event<T>} = 72,11661167		// Frontier1168		EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,1169		Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, Origin} = 101,11701171		EvmCoderSubstrate: pallet_evm_coder_substrate::{Pallet, Storage} = 150,1172		EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage} = 151,1173		EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152,1174		EvmMigration: pallet_evm_migration::{Pallet, Call, Storage} = 153,1175	}1176);11771178pub struct TransactionConverter;11791180impl fp_rpc::ConvertTransaction<UncheckedExtrinsic> for TransactionConverter {1181	fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> UncheckedExtrinsic {1182		UncheckedExtrinsic::new_unsigned(1183			pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),1184		)1185	}1186}11871188impl fp_rpc::ConvertTransaction<opaque::UncheckedExtrinsic> for TransactionConverter {1189	fn convert_transaction(1190		&self,1191		transaction: pallet_ethereum::Transaction,1192	) -> opaque::UncheckedExtrinsic {1193		let extrinsic = UncheckedExtrinsic::new_unsigned(1194			pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),1195		);1196		let encoded = extrinsic.encode();1197		opaque::UncheckedExtrinsic::decode(&mut &encoded[..])1198			.expect("Encoded extrinsic is always valid")1199	}1200}12011202/// The address format for describing accounts.1203pub type Address = sp_runtime::MultiAddress<AccountId, ()>;1204/// Block header type as expected by this runtime.1205pub type Header = generic::Header<BlockNumber, BlakeTwo256>;1206/// Block type as expected by this runtime.1207pub type Block = generic::Block<Header, UncheckedExtrinsic>;1208/// A Block signed with a Justification1209pub type SignedBlock = generic::SignedBlock<Block>;1210/// BlockId type as expected by this runtime.1211pub type BlockId = generic::BlockId<Block>;1212/// The SignedExtension to the basic transaction logic.1213pub type SignedExtra = (1214	frame_system::CheckSpecVersion<Runtime>,1215	// system::CheckTxVersion<Runtime>,1216	frame_system::CheckGenesis<Runtime>,1217	frame_system::CheckEra<Runtime>,1218	frame_system::CheckNonce<Runtime>,1219	frame_system::CheckWeight<Runtime>,1220	ChargeTransactionPayment,1221	//pallet_contract_helpers::ContractHelpersExtension<Runtime>,1222	pallet_ethereum::FakeTransactionFinalizer<Runtime>,1223);1224pub type SignedExtraScheduler = (1225	frame_system::CheckSpecVersion<Runtime>,1226	frame_system::CheckGenesis<Runtime>,1227	frame_system::CheckEra<Runtime>,1228	frame_system::CheckNonce<Runtime>,1229	frame_system::CheckWeight<Runtime>,1230);1231/// Unchecked extrinsic type as expected by this runtime.1232pub type UncheckedExtrinsic =1233	fp_self_contained::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>;1234/// Extrinsic type that has already been checked.1235pub type CheckedExtrinsic = fp_self_contained::CheckedExtrinsic<AccountId, Call, SignedExtra, H160>;1236/// Executive: handles dispatch to the various modules.1237pub type Executive = frame_executive::Executive<1238	Runtime,1239	Block,1240	frame_system::ChainContext<Runtime>,1241	Runtime,1242	AllPalletsReversedWithSystemFirst,1243>;12441245impl_opaque_keys! {1246	pub struct SessionKeys {1247		pub aura: Aura,1248	}1249}12501251impl fp_self_contained::SelfContainedCall for Call {1252	type SignedInfo = H160;12531254	fn is_self_contained(&self) -> bool {1255		match self {1256			Call::Ethereum(call) => call.is_self_contained(),1257			_ => false,1258		}1259	}12601261	fn check_self_contained(&self) -> Option<Result<Self::SignedInfo, TransactionValidityError>> {1262		match self {1263			Call::Ethereum(call) => call.check_self_contained(),1264			_ => None,1265		}1266	}12671268	fn validate_self_contained(1269		&self,1270		info: &Self::SignedInfo,1271		dispatch_info: &DispatchInfoOf<Call>,1272		len: usize,1273	) -> Option<TransactionValidity> {1274		match self {1275			Call::Ethereum(call) => call.validate_self_contained(info, dispatch_info, len),1276			_ => None,1277		}1278	}12791280	fn pre_dispatch_self_contained(1281		&self,1282		info: &Self::SignedInfo,1283	) -> Option<Result<(), TransactionValidityError>> {1284		match self {1285			Call::Ethereum(call) => call.pre_dispatch_self_contained(info),1286			_ => None,1287		}1288	}12891290	fn apply_self_contained(1291		self,1292		info: Self::SignedInfo,1293	) -> Option<sp_runtime::DispatchResultWithInfo<PostDispatchInfoOf<Self>>> {1294		match self {1295			call @ Call::Ethereum(pallet_ethereum::Call::transact { .. }) => Some(call.dispatch(1296				Origin::from(pallet_ethereum::RawOrigin::EthereumTransaction(info)),1297			)),1298			_ => None,1299		}1300	}1301}13021303macro_rules! dispatch_unique_runtime {1304	($collection:ident.$method:ident($($name:ident),*)) => {{1305		let collection = <Runtime as pallet_common::Config>::CollectionDispatch::dispatch(<pallet_common::CollectionHandle<Runtime>>::try_get($collection)?);1306		let dispatch = collection.as_dyn();13071308		Ok::<_, DispatchError>(dispatch.$method($($name),*))1309	}};1310}13111312impl_common_runtime_apis! {1313	#![custom_apis]13141315	impl rmrk_rpc::RmrkApi<1316		Block,1317		AccountId,1318		RmrkCollectionInfo<AccountId>,1319		RmrkInstanceInfo<AccountId>,1320		RmrkResourceInfo,1321		RmrkPropertyInfo,1322		RmrkBaseInfo<AccountId>,1323		RmrkPartType,1324		RmrkTheme1325	> for Runtime {1326		fn last_collection_idx() -> Result<RmrkCollectionId, DispatchError> {1327			pallet_proxy_rmrk_core::rpc::last_collection_idx::<Runtime>()1328		}13291330		fn collection_by_id(collection_id: RmrkCollectionId) -> Result<Option<RmrkCollectionInfo<AccountId>>, DispatchError> {1331			pallet_proxy_rmrk_core::rpc::collection_by_id::<Runtime>(collection_id)1332		}13331334		fn nft_by_id(collection_id: RmrkCollectionId, nft_by_id: RmrkNftId) -> Result<Option<RmrkInstanceInfo<AccountId>>, DispatchError> {1335			pallet_proxy_rmrk_core::rpc::nft_by_id::<Runtime>(collection_id, nft_by_id)1336		}13371338		fn account_tokens(account_id: AccountId, collection_id: RmrkCollectionId) -> Result<Vec<RmrkNftId>, DispatchError> {1339			pallet_proxy_rmrk_core::rpc::account_tokens::<Runtime>(account_id, collection_id)1340		}13411342		fn nft_children(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkNftChild>, DispatchError> {1343			pallet_proxy_rmrk_core::rpc::nft_children::<Runtime>(collection_id, nft_id)1344		}13451346		fn collection_properties(collection_id: RmrkCollectionId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {1347			pallet_proxy_rmrk_core::rpc::collection_properties::<Runtime>(collection_id, filter_keys)1348		}13491350		fn nft_properties(collection_id: RmrkCollectionId, nft_id: RmrkNftId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {1351			pallet_proxy_rmrk_core::rpc::nft_properties::<Runtime>(collection_id, nft_id, filter_keys)1352		}13531354		fn nft_resources(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkResourceInfo>, DispatchError> {1355			pallet_proxy_rmrk_core::rpc::nft_resources::<Runtime>(collection_id, nft_id)1356		}13571358		fn nft_resource_priority(collection_id: RmrkCollectionId, nft_id: RmrkNftId, resource_id: RmrkResourceId) -> Result<Option<u32>, DispatchError> {1359			pallet_proxy_rmrk_core::rpc::nft_resource_priority::<Runtime>(collection_id, nft_id, resource_id)1360		}13611362		fn base(base_id: RmrkBaseId) -> Result<Option<RmrkBaseInfo<AccountId>>, DispatchError> {1363			pallet_proxy_rmrk_equip::rpc::base::<Runtime>(base_id)1364		}13651366		fn base_parts(base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {1367			pallet_proxy_rmrk_equip::rpc::base_parts::<Runtime>(base_id)1368		}13691370		fn theme_names(base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {1371			pallet_proxy_rmrk_equip::rpc::theme_names::<Runtime>(base_id)1372		}13731374		fn theme(base_id: RmrkBaseId, theme_name: RmrkThemeName, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Option<RmrkTheme>, DispatchError> {1375			pallet_proxy_rmrk_equip::rpc::theme::<Runtime>(base_id, theme_name, filter_keys)1376		}1377	}1378}13791380struct CheckInherents;13811382impl cumulus_pallet_parachain_system::CheckInherents<Block> for CheckInherents {1383	fn check_inherents(1384		block: &Block,1385		relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof,1386	) -> sp_inherents::CheckInherentsResult {1387		let relay_chain_slot = relay_state_proof1388			.read_slot()1389			.expect("Could not read the relay chain slot from the proof");13901391		let inherent_data =1392			cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration(1393				relay_chain_slot,1394				sp_std::time::Duration::from_secs(6),1395			)1396			.create_inherent_data()1397			.expect("Could not create the timestamp inherent data");13981399		inherent_data.check_extrinsics(block)1400	}1401}14021403cumulus_pallet_parachain_system::register_validate_block!(1404	Runtime = Runtime,1405	BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,1406	CheckInherents = CheckInherents,1407);
after · runtime/opal/src/lib.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617//! The Substrate Node Template runtime. This can be compiled with `#[no_std]`, ready for Wasm.1819#![cfg_attr(not(feature = "std"), no_std)]20// `construct_runtime!` does a lot of recursion and requires us to increase the limit to 256.21#![recursion_limit = "1024"]22#![allow(clippy::from_over_into, clippy::identity_op)]23#![allow(clippy::fn_to_numeric_cast_with_truncation)]24// Make the WASM binary available.25#[cfg(feature = "std")]26include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs"));2728use sp_api::impl_runtime_apis;29use sp_core::{crypto::KeyTypeId, OpaqueMetadata, H256, U256, H160};30use sp_runtime::DispatchError;31use fp_self_contained::*;32// #[cfg(any(feature = "std", test))]33// pub use sp_runtime::BuildStorage;3435use sp_runtime::{36	Permill, Perbill, Percent, create_runtime_str, generic, impl_opaque_keys,37	traits::{AccountIdLookup, BlakeTwo256, Block as BlockT, AccountIdConversion, Zero, Member},38	transaction_validity::{TransactionSource, TransactionValidity},39	ApplyExtrinsicResult, RuntimeAppPublic,40};4142use sp_std::prelude::*;4344#[cfg(feature = "std")]45use sp_version::NativeVersion;46use sp_version::RuntimeVersion;47pub use pallet_transaction_payment::{48	Multiplier, TargetedFeeAdjustment, FeeDetails, RuntimeDispatchInfo,49};50// A few exports that help ease life for downstream crates.51pub use pallet_balances::Call as BalancesCall;52pub use pallet_evm::{53	EnsureAddressTruncated, HashedAddressMapping, Runner, account::CrossAccountId as _,54	OnMethodCall, Account as EVMAccount, FeeCalculator, GasWeightMapping,55};56pub use frame_support::{57	construct_runtime, match_types,58	dispatch::DispatchResult,59	PalletId, parameter_types, StorageValue, ConsensusEngineId,60	traits::{61		tokens::currency::Currency as CurrencyT, OnUnbalanced as OnUnbalancedT, Everything,62		Currency, ExistenceRequirement, Get, IsInVec, KeyOwnerProofSystem, LockIdentifier,63		OnUnbalanced, Randomness, FindAuthor, ConstU32, Imbalance, PrivilegeCmp,64	},65	weights::{66		constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND},67		DispatchClass, DispatchInfo, GetDispatchInfo, IdentityFee, Pays, PostDispatchInfo, Weight,68		WeightToFeePolynomial, WeightToFeeCoefficient, WeightToFeeCoefficients, ConstantMultiplier,69		WeightToFee,70	},71};72use pallet_unique_scheduler::DispatchCall;73use up_data_structs::{74	CollectionId, TokenId, TokenData, Property, PropertyKeyPermission, CollectionLimits,75	CollectionStats, RpcCollection,76	mapping::{EvmTokenAddressMapping, CrossTokenAddressMapping},77	TokenChild, RmrkCollectionInfo, RmrkInstanceInfo, RmrkResourceInfo, RmrkPropertyInfo,78	RmrkBaseInfo, RmrkPartType, RmrkTheme, RmrkThemeName, RmrkCollectionId, RmrkNftId,79	RmrkNftChild, RmrkPropertyKey, RmrkResourceId, RmrkBaseId,80};8182// use pallet_contracts::weights::WeightInfo;83// #[cfg(any(feature = "std", test))]84use frame_system::{85	self as frame_system, EnsureRoot, EnsureSigned,86	limits::{BlockWeights, BlockLength},87};88use sp_arithmetic::{89	traits::{BaseArithmetic, Unsigned},90};91use smallvec::smallvec;92// use scale_info::TypeInfo;93use codec::{Encode, Decode};94use fp_rpc::TransactionStatus;95use sp_runtime::{96	traits::{97		Applyable, BlockNumberProvider, Dispatchable, PostDispatchInfoOf, DispatchInfoOf,98		Saturating, CheckedConversion,99	},100	generic::Era,101	transaction_validity::TransactionValidityError,102	DispatchErrorWithPostInfo, SaturatedConversion,103};104105// pub use pallet_timestamp::Call as TimestampCall;106pub use sp_consensus_aura::sr25519::AuthorityId as AuraId;107108// Polkadot imports109use pallet_xcm::XcmPassthrough;110use polkadot_parachain::primitives::Sibling;111use xcm::v1::{BodyId, Junction::*, MultiLocation, NetworkId, Junctions::*};112use xcm_builder::{113	AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, CurrencyAdapter,114	EnsureXcmOrigin, FixedWeightBounds, LocationInverter, NativeAsset, ParentAsSuperuser,115	RelayChainAsNative, SiblingParachainAsNative, SiblingParachainConvertsVia,116	SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit,117	ParentIsPreset,118};119use xcm_executor::{Config, XcmExecutor, Assets};120use sp_std::{cmp::Ordering, marker::PhantomData};121122use xcm::latest::{123	//	Xcm,124	AssetId::{Concrete},125	Fungibility::Fungible as XcmFungible,126	MultiAsset,127	Error as XcmError,128};129use xcm_executor::traits::{MatchesFungible, WeightTrader};130//use xcm_executor::traits::MatchesFungible;131132use unique_runtime_common::{133	impl_common_runtime_apis,134	types::*,135	constants::*,136	dispatch::{CollectionDispatchT, CollectionDispatch},137	sponsoring::UniqueSponsorshipHandler,138	eth_sponsoring::UniqueEthSponsorshipHandler,139	weights::CommonWeights,140};141142pub const RUNTIME_NAME: &str = "opal";143pub const TOKEN_SYMBOL: &str = "OPL";144145type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Runtime>;146147impl RuntimeInstance for Runtime {148	type CrossAccountId = self::CrossAccountId;149	type TransactionConverter = self::TransactionConverter;150151	fn get_transaction_converter() -> TransactionConverter {152		TransactionConverter153	}154}155156/// The type for looking up accounts. We don't expect more than 4 billion of them, but you157/// never know...158pub type AccountIndex = u32;159160/// Balance of an account.161pub type Balance = u128;162163/// Index of a transaction in the chain.164pub type Index = u32;165166/// A hash of some data used by the chain.167pub type Hash = sp_core::H256;168169/// Digest item type.170pub type DigestItem = generic::DigestItem;171172/// Opaque types. These are used by the CLI to instantiate machinery that don't need to know173/// the specifics of the runtime. They can then be made to be agnostic over specific formats174/// of data like extrinsics, allowing for them to continue syncing the network through upgrades175/// to even the core data structures.176pub mod opaque {177	use sp_std::prelude::*;178	use sp_runtime::impl_opaque_keys;179	use super::Aura;180181	pub use unique_runtime_common::types::*;182183	impl_opaque_keys! {184		pub struct SessionKeys {185			pub aura: Aura,186		}187	}188}189190/// This runtime version.191pub const VERSION: RuntimeVersion = RuntimeVersion {192	spec_name: create_runtime_str!(RUNTIME_NAME),193	impl_name: create_runtime_str!(RUNTIME_NAME),194	authoring_version: 1,195	spec_version: 924000,196	impl_version: 0,197	apis: RUNTIME_API_VERSIONS,198	transaction_version: 1,199	state_version: 0,200};201202#[derive(codec::Encode, codec::Decode)]203pub enum XCMPMessage<XAccountId, XBalance> {204	/// Transfer tokens to the given account from the Parachain account.205	TransferToken(XAccountId, XBalance),206}207208/// The version information used to identify this runtime when compiled natively.209#[cfg(feature = "std")]210pub fn native_version() -> NativeVersion {211	NativeVersion {212		runtime_version: VERSION,213		can_author_with: Default::default(),214	}215}216217type NegativeImbalance = <Balances as Currency<AccountId>>::NegativeImbalance;218219pub struct DealWithFees;220impl OnUnbalanced<NegativeImbalance> for DealWithFees {221	fn on_unbalanceds<B>(mut fees_then_tips: impl Iterator<Item = NegativeImbalance>) {222		if let Some(fees) = fees_then_tips.next() {223			// for fees, 100% to treasury224			let mut split = fees.ration(100, 0);225			if let Some(tips) = fees_then_tips.next() {226				// for tips, if any, 100% to treasury227				tips.ration_merge_into(100, 0, &mut split);228			}229			Treasury::on_unbalanced(split.0);230			// Author::on_unbalanced(split.1);231		}232	}233}234235parameter_types! {236	pub const BlockHashCount: BlockNumber = 2400;237	pub RuntimeBlockLength: BlockLength =238		BlockLength::max_with_normal_ratio(5 * 1024 * 1024, NORMAL_DISPATCH_RATIO);239	pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75);240	pub const MaximumBlockLength: u32 = 5 * 1024 * 1024;241	pub RuntimeBlockWeights: BlockWeights = BlockWeights::builder()242		.base_block(BlockExecutionWeight::get())243		.for_class(DispatchClass::all(), |weights| {244			weights.base_extrinsic = ExtrinsicBaseWeight::get();245		})246		.for_class(DispatchClass::Normal, |weights| {247			weights.max_total = Some(NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT);248		})249		.for_class(DispatchClass::Operational, |weights| {250			weights.max_total = Some(MAXIMUM_BLOCK_WEIGHT);251			// Operational transactions have some extra reserved space, so that they252			// are included even if block reached `MAXIMUM_BLOCK_WEIGHT`.253			weights.reserved = Some(254				MAXIMUM_BLOCK_WEIGHT - NORMAL_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT255			);256		})257		.avg_block_initialization(AVERAGE_ON_INITIALIZE_RATIO)258		.build_or_panic();259	pub const Version: RuntimeVersion = VERSION;260	pub const SS58Prefix: u8 = 42;261}262263parameter_types! {264	pub const ChainId: u64 = 8882;265}266267pub struct FixedFee;268impl FeeCalculator for FixedFee {269	fn min_gas_price() -> (U256, u64) {270		(MIN_GAS_PRICE.into(), 0)271	}272}273274// Assuming slowest ethereum opcode is SSTORE, with gas price of 20000 as our worst case275// (contract, which only writes a lot of data),276// approximating on top of our real store write weight277parameter_types! {278	pub const WritesPerSecond: u64 = WEIGHT_PER_SECOND / <Runtime as frame_system::Config>::DbWeight::get().write;279	pub const GasPerSecond: u64 = WritesPerSecond::get() * 20000;280	pub const WeightPerGas: u64 = WEIGHT_PER_SECOND / GasPerSecond::get();281}282283/// Limiting EVM execution to 50% of block for substrate users and management tasks284/// EVM transaction consumes more weight than substrate's, so we can't rely on them being285/// scheduled fairly286const EVM_DISPATCH_RATIO: Perbill = Perbill::from_percent(50);287parameter_types! {288	pub BlockGasLimit: U256 = U256::from(NORMAL_DISPATCH_RATIO * EVM_DISPATCH_RATIO * MAXIMUM_BLOCK_WEIGHT / WeightPerGas::get());289}290291pub enum FixedGasWeightMapping {}292impl GasWeightMapping for FixedGasWeightMapping {293	fn gas_to_weight(gas: u64) -> Weight {294		gas.saturating_mul(WeightPerGas::get())295	}296	fn weight_to_gas(weight: Weight) -> u64 {297		weight / WeightPerGas::get()298	}299}300301impl pallet_evm::account::Config for Runtime {302	type CrossAccountId = pallet_evm::account::BasicCrossAccountId<Self>;303	type EvmAddressMapping = pallet_evm::HashedAddressMapping<Self::Hashing>;304	type EvmBackwardsAddressMapping = fp_evm_mapping::MapBackwardsAddressTruncated;305}306307impl pallet_evm::Config for Runtime {308	type BlockGasLimit = BlockGasLimit;309	type FeeCalculator = FixedFee;310	type GasWeightMapping = FixedGasWeightMapping;311	type BlockHashMapping = pallet_ethereum::EthereumBlockHashMapping<Self>;312	type CallOrigin = EnsureAddressTruncated<Self>;313	type WithdrawOrigin = EnsureAddressTruncated<Self>;314	type AddressMapping = HashedAddressMapping<Self::Hashing>;315	type PrecompilesType = ();316	type PrecompilesValue = ();317	type Currency = Balances;318	type Event = Event;319	type OnMethodCall = (320		pallet_evm_migration::OnMethodCall<Self>,321		pallet_evm_contract_helpers::HelpersOnMethodCall<Self>,322		CollectionDispatchT<Self>,323		pallet_unique::eth::CollectionHelpersOnMethodCall<Self>,324	);325	type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate<Self>;326	type ChainId = ChainId;327	type Runner = pallet_evm::runner::stack::Runner<Self>;328	type OnChargeTransaction = pallet_evm::EVMCurrencyAdapter<Balances, DealWithFees>;329	type TransactionValidityHack = pallet_evm_transaction_payment::TransactionValidityHack<Self>;330	type FindAuthor = EthereumFindAuthor<Aura>;331}332333impl pallet_evm_migration::Config for Runtime {334	type WeightInfo = pallet_evm_migration::weights::SubstrateWeight<Self>;335}336337pub struct EthereumFindAuthor<F>(core::marker::PhantomData<F>);338impl<F: FindAuthor<u32>> FindAuthor<H160> for EthereumFindAuthor<F> {339	fn find_author<'a, I>(digests: I) -> Option<H160>340	where341		I: 'a + IntoIterator<Item = (ConsensusEngineId, &'a [u8])>,342	{343		if let Some(author_index) = F::find_author(digests) {344			let authority_id = Aura::authorities()[author_index as usize].clone();345			return Some(H160::from_slice(&authority_id.to_raw_vec()[4..24]));346		}347		None348	}349}350351impl pallet_ethereum::Config for Runtime {352	type Event = Event;353	type StateRoot = pallet_ethereum::IntermediateStateRoot<Self>;354}355356impl pallet_randomness_collective_flip::Config for Runtime {}357358impl frame_system::Config for Runtime {359	/// The data to be stored in an account.360	type AccountData = pallet_balances::AccountData<Balance>;361	/// The identifier used to distinguish between accounts.362	type AccountId = AccountId;363	/// The basic call filter to use in dispatchable.364	type BaseCallFilter = Everything;365	/// Maximum number of block number to block hash mappings to keep (oldest pruned first).366	type BlockHashCount = BlockHashCount;367	/// The maximum length of a block (in bytes).368	type BlockLength = RuntimeBlockLength;369	/// The index type for blocks.370	type BlockNumber = BlockNumber;371	/// The weight of the overhead invoked on the block import process, independent of the extrinsics included in that block.372	type BlockWeights = RuntimeBlockWeights;373	/// The aggregated dispatch type that is available for extrinsics.374	type Call = Call;375	/// The weight of database operations that the runtime can invoke.376	type DbWeight = RocksDbWeight;377	/// The ubiquitous event type.378	type Event = Event;379	/// The type for hashing blocks and tries.380	type Hash = Hash;381	/// The hashing algorithm used.382	type Hashing = BlakeTwo256;383	/// The header type.384	type Header = generic::Header<BlockNumber, BlakeTwo256>;385	/// The index type for storing how many extrinsics an account has signed.386	type Index = Index;387	/// The lookup mechanism to get account ID from whatever is passed in dispatchers.388	type Lookup = AccountIdLookup<AccountId, ()>;389	/// What to do if an account is fully reaped from the system.390	type OnKilledAccount = ();391	/// What to do if a new account is created.392	type OnNewAccount = ();393	type OnSetCode = cumulus_pallet_parachain_system::ParachainSetCode<Self>;394	/// The ubiquitous origin type.395	type Origin = Origin;396	/// This type is being generated by `construct_runtime!`.397	type PalletInfo = PalletInfo;398	/// This is used as an identifier of the chain. 42 is the generic substrate prefix.399	type SS58Prefix = SS58Prefix;400	/// Weight information for the extrinsics of this pallet.401	type SystemWeightInfo = frame_system::weights::SubstrateWeight<Self>;402	/// Version of the runtime.403	type Version = Version;404	type MaxConsumers = ConstU32<16>;405}406407parameter_types! {408	pub const MinimumPeriod: u64 = SLOT_DURATION / 2;409}410411impl pallet_timestamp::Config for Runtime {412	/// A timestamp: milliseconds since the unix epoch.413	type Moment = u64;414	type OnTimestampSet = ();415	type MinimumPeriod = MinimumPeriod;416	type WeightInfo = ();417}418419parameter_types! {420	// pub const ExistentialDeposit: u128 = 500;421	pub const ExistentialDeposit: u128 = 0;422	pub const MaxLocks: u32 = 50;423	pub const MaxReserves: u32 = 50;424}425426impl pallet_balances::Config for Runtime {427	type MaxLocks = MaxLocks;428	type MaxReserves = MaxReserves;429	type ReserveIdentifier = [u8; 16];430	/// The type for recording an account's balance.431	type Balance = Balance;432	/// The ubiquitous event type.433	type Event = Event;434	type DustRemoval = Treasury;435	type ExistentialDeposit = ExistentialDeposit;436	type AccountStore = System;437	type WeightInfo = pallet_balances::weights::SubstrateWeight<Self>;438}439440pub const fn deposit(items: u32, bytes: u32) -> Balance {441	items as Balance * 15 * CENTIUNIQUE + (bytes as Balance) * 6 * CENTIUNIQUE442}443444/*445parameter_types! {446	pub TombstoneDeposit: Balance = deposit(447		1,448		sp_std::mem::size_of::<pallet_contracts::Pallet<Runtime>> as u32,449	);450	pub DepositPerContract: Balance = TombstoneDeposit::get();451	pub const DepositPerStorageByte: Balance = deposit(0, 1);452	pub const DepositPerStorageItem: Balance = deposit(1, 0);453	pub RentFraction: Perbill = Perbill::from_rational(1u32, 30 * DAYS);454	pub const SurchargeReward: Balance = 150 * MILLIUNIQUE;455	pub const SignedClaimHandicap: u32 = 2;456	pub const MaxDepth: u32 = 32;457	pub const MaxValueSize: u32 = 16 * 1024;458	pub const MaxCodeSize: u32 = 1024 * 1024 * 25; // 25 Mb459	// The lazy deletion runs inside on_initialize.460	pub DeletionWeightLimit: Weight = AVERAGE_ON_INITIALIZE_RATIO *461		RuntimeBlockWeights::get().max_block;462	// The weight needed for decoding the queue should be less or equal than a fifth463	// of the overall weight dedicated to the lazy deletion.464	pub DeletionQueueDepth: u32 = ((DeletionWeightLimit::get() / (465			<Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(1) -466			<Runtime as pallet_contracts::Config>::WeightInfo::on_initialize_per_queue_item(0)467		)) / 5) as u32;468	pub Schedule: pallet_contracts::Schedule<Runtime> = Default::default();469}470471impl pallet_contracts::Config for Runtime {472	type Time = Timestamp;473	type Randomness = RandomnessCollectiveFlip;474	type Currency = Balances;475	type Event = Event;476	type RentPayment = ();477	type SignedClaimHandicap = SignedClaimHandicap;478	type TombstoneDeposit = TombstoneDeposit;479	type DepositPerContract = DepositPerContract;480	type DepositPerStorageByte = DepositPerStorageByte;481	type DepositPerStorageItem = DepositPerStorageItem;482	type RentFraction = RentFraction;483	type SurchargeReward = SurchargeReward;484	type WeightPrice = pallet_transaction_payment::Pallet<Self>;485	type WeightInfo = pallet_contracts::weights::SubstrateWeight<Self>;486	type ChainExtension = NFTExtension;487	type DeletionQueueDepth = DeletionQueueDepth;488	type DeletionWeightLimit = DeletionWeightLimit;489	type Schedule = Schedule;490	type CallStack = [pallet_contracts::Frame<Self>; 31];491}492*/493494parameter_types! {495	/// This value increases the priority of `Operational` transactions by adding496	/// a "virtual tip" that's equal to the `OperationalFeeMultiplier * final_fee`.497	pub const OperationalFeeMultiplier: u8 = 5;498}499500/// Linear implementor of `WeightToFeePolynomial`501pub struct LinearFee<T>(sp_std::marker::PhantomData<T>);502503impl<T> WeightToFeePolynomial for LinearFee<T>504where505	T: BaseArithmetic + From<u32> + Copy + Unsigned,506{507	type Balance = T;508509	fn polynomial() -> WeightToFeeCoefficients<Self::Balance> {510		smallvec!(WeightToFeeCoefficient {511			coeff_integer: WEIGHT_TO_FEE_COEFF.into(),512			coeff_frac: Perbill::zero(),513			negative: false,514			degree: 1,515		})516	}517}518519impl pallet_transaction_payment::Config for Runtime {520	type OnChargeTransaction = pallet_transaction_payment::CurrencyAdapter<Balances, DealWithFees>;521	type LengthToFee = ConstantMultiplier<Balance, TransactionByteFee>;522	type OperationalFeeMultiplier = OperationalFeeMultiplier;523	type WeightToFee = LinearFee<Balance>;524	type FeeMultiplierUpdate = ();525}526527parameter_types! {528	pub const ProposalBond: Permill = Permill::from_percent(5);529	pub const ProposalBondMinimum: Balance = 1 * UNIQUE;530	pub const ProposalBondMaximum: Balance = 1000 * UNIQUE;531	pub const SpendPeriod: BlockNumber = 5 * MINUTES;532	pub const Burn: Permill = Permill::from_percent(0);533	pub const TipCountdown: BlockNumber = 1 * DAYS;534	pub const TipFindersFee: Percent = Percent::from_percent(20);535	pub const TipReportDepositBase: Balance = 1 * UNIQUE;536	pub const DataDepositPerByte: Balance = 1 * CENTIUNIQUE;537	pub const BountyDepositBase: Balance = 1 * UNIQUE;538	pub const BountyDepositPayoutDelay: BlockNumber = 1 * DAYS;539	pub const TreasuryModuleId: PalletId = PalletId(*b"py/trsry");540	pub const BountyUpdatePeriod: BlockNumber = 14 * DAYS;541	pub const MaximumReasonLength: u32 = 16384;542	pub const BountyCuratorDeposit: Permill = Permill::from_percent(50);543	pub const BountyValueMinimum: Balance = 5 * UNIQUE;544	pub const MaxApprovals: u32 = 100;545}546547impl pallet_treasury::Config for Runtime {548	type PalletId = TreasuryModuleId;549	type Currency = Balances;550	type ApproveOrigin = EnsureRoot<AccountId>;551	type RejectOrigin = EnsureRoot<AccountId>;552	type Event = Event;553	type OnSlash = ();554	type ProposalBond = ProposalBond;555	type ProposalBondMinimum = ProposalBondMinimum;556	type ProposalBondMaximum = ProposalBondMaximum;557	type SpendPeriod = SpendPeriod;558	type Burn = Burn;559	type BurnDestination = ();560	type SpendFunds = ();561	type WeightInfo = pallet_treasury::weights::SubstrateWeight<Self>;562	type MaxApprovals = MaxApprovals;563}564565impl pallet_sudo::Config for Runtime {566	type Event = Event;567	type Call = Call;568}569570pub struct RelayChainBlockNumberProvider<T>(sp_std::marker::PhantomData<T>);571572impl<T: cumulus_pallet_parachain_system::Config> BlockNumberProvider573	for RelayChainBlockNumberProvider<T>574{575	type BlockNumber = BlockNumber;576577	fn current_block_number() -> Self::BlockNumber {578		cumulus_pallet_parachain_system::Pallet::<T>::validation_data()579			.map(|d| d.relay_parent_number)580			.unwrap_or_default()581	}582}583584parameter_types! {585	pub const MinVestedTransfer: Balance = 10 * UNIQUE;586	pub const MaxVestingSchedules: u32 = 28;587}588589impl orml_vesting::Config for Runtime {590	type Event = Event;591	type Currency = pallet_balances::Pallet<Runtime>;592	type MinVestedTransfer = MinVestedTransfer;593	type VestedTransferOrigin = EnsureSigned<AccountId>;594	type WeightInfo = ();595	type MaxVestingSchedules = MaxVestingSchedules;596	type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;597}598599parameter_types! {600	pub const ReservedDmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;601	pub const ReservedXcmpWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 4;602}603604impl cumulus_pallet_parachain_system::Config for Runtime {605	type Event = Event;606	type SelfParaId = parachain_info::Pallet<Self>;607	type OnSystemEvent = ();608	// type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<609	// 	MaxDownwardMessageWeight,610	// 	XcmExecutor<XcmConfig>,611	// 	Call,612	// >;613	type OutboundXcmpMessageSource = XcmpQueue;614	type DmpMessageHandler = DmpQueue;615	type ReservedDmpWeight = ReservedDmpWeight;616	type ReservedXcmpWeight = ReservedXcmpWeight;617	type XcmpMessageHandler = XcmpQueue;618}619620impl parachain_info::Config for Runtime {}621622impl cumulus_pallet_aura_ext::Config for Runtime {}623624parameter_types! {625	pub const RelayLocation: MultiLocation = MultiLocation::parent();626	pub const RelayNetwork: NetworkId = NetworkId::Polkadot;627	pub RelayOrigin: Origin = cumulus_pallet_xcm::Origin::Relay.into();628	pub Ancestry: MultiLocation = Parachain(ParachainInfo::parachain_id().into()).into();629}630631/// Type for specifying how a `MultiLocation` can be converted into an `AccountId`. This is used632/// when determining ownership of accounts for asset transacting and when attempting to use XCM633/// `Transact` in order to determine the dispatch Origin.634pub type LocationToAccountId = (635	// The parent (Relay-chain) origin converts to the default `AccountId`.636	ParentIsPreset<AccountId>,637	// Sibling parachain origins convert to AccountId via the `ParaId::into`.638	SiblingParachainConvertsVia<Sibling, AccountId>,639	// Straight up local `AccountId32` origins just alias directly to `AccountId`.640	AccountId32Aliases<RelayNetwork, AccountId>,641);642643pub struct OnlySelfCurrency;644impl<B: TryFrom<u128>> MatchesFungible<B> for OnlySelfCurrency {645	fn matches_fungible(a: &MultiAsset) -> Option<B> {646		match (&a.id, &a.fun) {647			(Concrete(_), XcmFungible(ref amount)) => CheckedConversion::checked_from(*amount),648			_ => None,649		}650	}651}652653/// Means for transacting assets on this chain.654pub type LocalAssetTransactor = CurrencyAdapter<655	// Use this currency:656	Balances,657	// Use this currency when it is a fungible asset matching the given location or name:658	OnlySelfCurrency,659	// Do a simple punn to convert an AccountId32 MultiLocation into a native chain account ID:660	LocationToAccountId,661	// Our chain's account ID type (we can't get away without mentioning it explicitly):662	AccountId,663	// We don't track any teleports.664	(),665>;666667/// This is the type we use to convert an (incoming) XCM origin into a local `Origin` instance,668/// ready for dispatching a transaction with Xcm's `Transact`. There is an `OriginKind` which can669/// biases the kind of local `Origin` it will become.670pub type XcmOriginToTransactDispatchOrigin = (671	// Sovereign account converter; this attempts to derive an `AccountId` from the origin location672	// using `LocationToAccountId` and then turn that into the usual `Signed` origin. Useful for673	// foreign chains who want to have a local sovereign account on this chain which they control.674	SovereignSignedViaLocation<LocationToAccountId, Origin>,675	// Native converter for Relay-chain (Parent) location; will converts to a `Relay` origin when676	// recognised.677	RelayChainAsNative<RelayOrigin, Origin>,678	// Native converter for sibling Parachains; will convert to a `SiblingPara` origin when679	// recognised.680	SiblingParachainAsNative<cumulus_pallet_xcm::Origin, Origin>,681	// Superuser converter for the Relay-chain (Parent) location. This will allow it to issue a682	// transaction from the Root origin.683	ParentAsSuperuser<Origin>,684	// Native signed account converter; this just converts an `AccountId32` origin into a normal685	// `Origin::Signed` origin of the same 32-byte value.686	SignedAccountId32AsNative<RelayNetwork, Origin>,687	// Xcm origins can be represented natively under the Xcm pallet's Xcm origin.688	XcmPassthrough<Origin>,689);690691parameter_types! {692	// One XCM operation is 1_000_000 weight - almost certainly a conservative estimate.693	pub UnitWeightCost: Weight = 1_000_000;694	// 1200 UNIQUEs buy 1 second of weight.695	pub const WeightPrice: (MultiLocation, u128) = (MultiLocation::parent(), 1_200 * UNIQUE);696	pub const MaxInstructions: u32 = 100;697	pub const MaxAuthorities: u32 = 100_000;698}699700match_types! {701	pub type ParentOrParentsUnitPlurality: impl Contains<MultiLocation> = {702		MultiLocation { parents: 1, interior: Here } |703		MultiLocation { parents: 1, interior: X1(Plurality { id: BodyId::Unit, .. }) }704	};705}706707pub type Barrier = (708	TakeWeightCredit,709	AllowTopLevelPaidExecutionFrom<Everything>,710	AllowUnpaidExecutionFrom<ParentOrParentsUnitPlurality>,711	// ^^^ Parent & its unit plurality gets free execution712);713714pub struct UsingOnlySelfCurrencyComponents<715	WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,716	AssetId: Get<MultiLocation>,717	AccountId,718	Currency: CurrencyT<AccountId>,719	OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,720>(721	Weight,722	Currency::Balance,723	PhantomData<(WeightToFee, AssetId, AccountId, Currency, OnUnbalanced)>,724);725impl<726		WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,727		AssetId: Get<MultiLocation>,728		AccountId,729		Currency: CurrencyT<AccountId>,730		OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,731	> WeightTrader732	for UsingOnlySelfCurrencyComponents<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>733{734	fn new() -> Self {735		Self(0, Zero::zero(), PhantomData)736	}737738	fn buy_weight(&mut self, weight: Weight, payment: Assets) -> Result<Assets, XcmError> {739		let amount = WeightToFee::weight_to_fee(&weight);740		let u128_amount: u128 = amount.try_into().map_err(|_| XcmError::Overflow)?;741742		// location to this parachain through relay chain743		let option1: xcm::v1::AssetId = Concrete(MultiLocation {744			parents: 1,745			interior: X1(Parachain(ParachainInfo::parachain_id().into())),746		});747		// direct location748		let option2: xcm::v1::AssetId = Concrete(MultiLocation {749			parents: 0,750			interior: Here,751		});752753		let required = if payment.fungible.contains_key(&option1) {754			(option1, u128_amount).into()755		} else if payment.fungible.contains_key(&option2) {756			(option2, u128_amount).into()757		} else {758			(Concrete(MultiLocation::default()), u128_amount).into()759		};760761		let unused = payment762			.checked_sub(required)763			.map_err(|_| XcmError::TooExpensive)?;764		self.0 = self.0.saturating_add(weight);765		self.1 = self.1.saturating_add(amount);766		Ok(unused)767	}768769	fn refund_weight(&mut self, weight: Weight) -> Option<MultiAsset> {770		let weight = weight.min(self.0);771		let amount = WeightToFee::weight_to_fee(&weight);772		self.0 -= weight;773		self.1 = self.1.saturating_sub(amount);774		let amount: u128 = amount.saturated_into();775		if amount > 0 {776			Some((AssetId::get(), amount).into())777		} else {778			None779		}780	}781}782impl<783		WeightToFee: WeightToFeePolynomial<Balance = Currency::Balance>,784		AssetId: Get<MultiLocation>,785		AccountId,786		Currency: CurrencyT<AccountId>,787		OnUnbalanced: OnUnbalancedT<Currency::NegativeImbalance>,788	> Drop789	for UsingOnlySelfCurrencyComponents<WeightToFee, AssetId, AccountId, Currency, OnUnbalanced>790{791	fn drop(&mut self) {792		OnUnbalanced::on_unbalanced(Currency::issue(self.1));793	}794}795796pub struct XcmConfig;797impl Config for XcmConfig {798	type Call = Call;799	type XcmSender = XcmRouter;800	// How to withdraw and deposit an asset.801	type AssetTransactor = LocalAssetTransactor;802	type OriginConverter = XcmOriginToTransactDispatchOrigin;803	type IsReserve = NativeAsset;804	type IsTeleporter = (); // Teleportation is disabled805	type LocationInverter = LocationInverter<Ancestry>;806	type Barrier = Barrier;807	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;808	type Trader =809		UsingOnlySelfCurrencyComponents<LinearFee<Balance>, RelayLocation, AccountId, Balances, ()>;810	type ResponseHandler = (); // Don't handle responses for now.811	type SubscriptionService = PolkadotXcm;812813	type AssetTrap = PolkadotXcm;814	type AssetClaims = PolkadotXcm;815}816817// parameter_types! {818// 	pub const MaxDownwardMessageWeight: Weight = MAXIMUM_BLOCK_WEIGHT / 10;819// }820821/// No local origins on this chain are allowed to dispatch XCM sends/executions.822pub type LocalOriginToLocation = (SignedToAccountId32<Origin, AccountId, RelayNetwork>,);823824/// The means for routing XCM messages which are not for local execution into the right message825/// queues.826pub type XcmRouter = (827	// Two routers - use UMP to communicate with the relay chain:828	cumulus_primitives_utility::ParentAsUmp<ParachainSystem, ()>,829	// ..and XCMP to communicate with the sibling chains.830	XcmpQueue,831);832833impl pallet_evm_coder_substrate::Config for Runtime {}834835impl pallet_xcm::Config for Runtime {836	type Event = Event;837	type SendXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;838	type XcmRouter = XcmRouter;839	type ExecuteXcmOrigin = EnsureXcmOrigin<Origin, LocalOriginToLocation>;840	type XcmExecuteFilter = Everything;841	type XcmExecutor = XcmExecutor<XcmConfig>;842	type XcmTeleportFilter = Everything;843	type XcmReserveTransferFilter = Everything;844	type Weigher = FixedWeightBounds<UnitWeightCost, Call, MaxInstructions>;845	type LocationInverter = LocationInverter<Ancestry>;846	type Origin = Origin;847	type Call = Call;848	const VERSION_DISCOVERY_QUEUE_SIZE: u32 = 100;849	type AdvertisedXcmVersion = pallet_xcm::CurrentXcmVersion;850}851852impl cumulus_pallet_xcm::Config for Runtime {853	type Event = Event;854	type XcmExecutor = XcmExecutor<XcmConfig>;855}856857impl cumulus_pallet_xcmp_queue::Config for Runtime {858	type WeightInfo = ();859	type Event = Event;860	type XcmExecutor = XcmExecutor<XcmConfig>;861	type ChannelInfo = ParachainSystem;862	type VersionWrapper = ();863	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;864	type ControllerOrigin = EnsureRoot<AccountId>;865	type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin;866}867868impl cumulus_pallet_dmp_queue::Config for Runtime {869	type Event = Event;870	type XcmExecutor = XcmExecutor<XcmConfig>;871	type ExecuteOverweightOrigin = frame_system::EnsureRoot<AccountId>;872}873874impl pallet_aura::Config for Runtime {875	type AuthorityId = AuraId;876	type DisabledValidators = ();877	type MaxAuthorities = MaxAuthorities;878}879880parameter_types! {881	pub TreasuryAccountId: AccountId = TreasuryModuleId::get().into_account_truncating();882	pub const CollectionCreationPrice: Balance = 2 * UNIQUE;883}884885impl pallet_common::Config for Runtime {886	type WeightInfo = pallet_common::weights::SubstrateWeight<Self>;887	type Event = Event;888	type Currency = Balances;889	type CollectionCreationPrice = CollectionCreationPrice;890	type TreasuryAccountId = TreasuryAccountId;891	type CollectionDispatch = CollectionDispatchT<Self>;892893	type EvmTokenAddressMapping = EvmTokenAddressMapping;894	type CrossTokenAddressMapping = CrossTokenAddressMapping<Self::AccountId>;895	type ContractAddress = EvmCollectionHelpersAddress;896}897898impl pallet_structure::Config for Runtime {899	type Event = Event;900	type Call = Call;901	type WeightInfo = pallet_structure::weights::SubstrateWeight<Self>;902}903904impl pallet_fungible::Config for Runtime {905	type WeightInfo = pallet_fungible::weights::SubstrateWeight<Self>;906}907impl pallet_refungible::Config for Runtime {908	type WeightInfo = pallet_refungible::weights::SubstrateWeight<Self>;909}910impl pallet_nonfungible::Config for Runtime {911	type WeightInfo = pallet_nonfungible::weights::SubstrateWeight<Self>;912}913914impl pallet_proxy_rmrk_core::Config for Runtime {915	type WeightInfo = pallet_proxy_rmrk_core::weights::SubstrateWeight<Self>;916	type Event = Event;917}918919impl pallet_proxy_rmrk_equip::Config for Runtime {920	type WeightInfo = pallet_proxy_rmrk_equip::weights::SubstrateWeight<Self>;921	type Event = Event;922}923924impl pallet_unique::Config for Runtime {925	type Event = Event;926	type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;927	type CommonWeightInfo = CommonWeights<Self>;928	type RefungibleExtensionsWeightInfo = CommonWeights<Self>;929}930931parameter_types! {932	pub const InflationBlockInterval: BlockNumber = 100; // every time per how many blocks inflation is applied933}934935/// Used for the pallet inflation936impl pallet_inflation::Config for Runtime {937	type Currency = Balances;938	type TreasuryAccountId = TreasuryAccountId;939	type InflationBlockInterval = InflationBlockInterval;940	type BlockNumberProvider = RelayChainBlockNumberProvider<Runtime>;941}942943parameter_types! {944	pub MaximumSchedulerWeight: Weight = Perbill::from_percent(50) *945		RuntimeBlockWeights::get().max_block;946	pub const MaxScheduledPerBlock: u32 = 50;947}948949type ChargeTransactionPayment = pallet_charge_transaction::ChargeTransactionPayment<Runtime>;950use frame_support::traits::NamedReservableCurrency;951952fn get_signed_extras(from: <Runtime as frame_system::Config>::AccountId) -> SignedExtraScheduler {953	(954		frame_system::CheckSpecVersion::<Runtime>::new(),955		frame_system::CheckGenesis::<Runtime>::new(),956		frame_system::CheckEra::<Runtime>::from(Era::Immortal),957		frame_system::CheckNonce::<Runtime>::from(frame_system::Pallet::<Runtime>::account_nonce(958			from,959		)),960		frame_system::CheckWeight::<Runtime>::new(),961		// sponsoring transaction logic962		// pallet_charge_transaction::ChargeTransactionPayment::<Runtime>::new(0),963	)964}965966pub struct SchedulerPaymentExecutor;967impl<T: frame_system::Config + pallet_unique_scheduler::Config, SelfContainedSignedInfo>968	DispatchCall<T, SelfContainedSignedInfo> for SchedulerPaymentExecutor969where970	<T as frame_system::Config>::Call: Member971		+ Dispatchable<Origin = Origin, Info = DispatchInfo>972		+ SelfContainedCall<SignedInfo = SelfContainedSignedInfo>973		+ GetDispatchInfo974		+ From<frame_system::Call<Runtime>>,975	SelfContainedSignedInfo: Send + Sync + 'static,976	Call: From<<T as frame_system::Config>::Call>977		+ From<<T as pallet_unique_scheduler::Config>::Call>978		+ SelfContainedCall<SignedInfo = SelfContainedSignedInfo>,979	sp_runtime::AccountId32: From<<T as frame_system::Config>::AccountId>,980{981	fn dispatch_call(982		signer: <T as frame_system::Config>::AccountId,983		call: <T as pallet_unique_scheduler::Config>::Call,984	) -> Result<985		Result<PostDispatchInfo, DispatchErrorWithPostInfo<PostDispatchInfo>>,986		TransactionValidityError,987	> {988		let dispatch_info = call.get_dispatch_info();989		let extrinsic = fp_self_contained::CheckedExtrinsic::<990			AccountId,991			Call,992			SignedExtraScheduler,993			SelfContainedSignedInfo,994		> {995			signed:996				CheckedSignature::<AccountId, SignedExtraScheduler, SelfContainedSignedInfo>::Signed(997					signer.clone().into(),998					get_signed_extras(signer.into()),999				),1000			function: call.into(),1001		};10021003		extrinsic.apply::<Runtime>(&dispatch_info, 0)1004	}10051006	fn reserve_balance(1007		id: [u8; 16],1008		sponsor: <T as frame_system::Config>::AccountId,1009		call: <T as pallet_unique_scheduler::Config>::Call,1010		count: u32,1011	) -> Result<(), DispatchError> {1012		let dispatch_info = call.get_dispatch_info();1013		let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0)1014			.saturating_mul(count.into());10151016		<Balances as NamedReservableCurrency<AccountId>>::reserve_named(1017			&id,1018			&(sponsor.into()),1019			weight,1020		)1021	}10221023	fn pay_for_call(1024		id: [u8; 16],1025		sponsor: <T as frame_system::Config>::AccountId,1026		call: <T as pallet_unique_scheduler::Config>::Call,1027	) -> Result<u128, DispatchError> {1028		let dispatch_info = call.get_dispatch_info();1029		let weight: Balance = ChargeTransactionPayment::traditional_fee(0, &dispatch_info, 0);1030		Ok(1031			<Balances as NamedReservableCurrency<AccountId>>::unreserve_named(1032				&id,1033				&(sponsor.into()),1034				weight,1035			),1036		)1037	}10381039	fn cancel_reserve(1040		id: [u8; 16],1041		sponsor: <T as frame_system::Config>::AccountId,1042	) -> Result<u128, DispatchError> {1043		Ok(1044			<Balances as NamedReservableCurrency<AccountId>>::unreserve_named(1045				&id,1046				&(sponsor.into()),1047				u128::MAX,1048			),1049		)1050	}1051}10521053parameter_types! {1054	pub const NoPreimagePostponement: Option<u32> = Some(10);1055	pub const Preimage: Option<u32> = Some(10);1056}10571058/// Used the compare the privilege of an origin inside the scheduler.1059pub struct OriginPrivilegeCmp;10601061impl PrivilegeCmp<OriginCaller> for OriginPrivilegeCmp {1062	fn cmp_privilege(_left: &OriginCaller, _right: &OriginCaller) -> Option<Ordering> {1063		Some(Ordering::Equal)1064	}1065}10661067impl pallet_unique_scheduler::Config for Runtime {1068	type Event = Event;1069	type Origin = Origin;1070	type Currency = Balances;1071	type PalletsOrigin = OriginCaller;1072	type Call = Call;1073	type MaximumWeight = MaximumSchedulerWeight;1074	type ScheduleOrigin = EnsureSigned<AccountId>;1075	type MaxScheduledPerBlock = MaxScheduledPerBlock;1076	type WeightInfo = ();1077	type CallExecutor = SchedulerPaymentExecutor;1078	type OriginPrivilegeCmp = OriginPrivilegeCmp;1079	type PreimageProvider = ();1080	type NoPreimagePostponement = NoPreimagePostponement;1081}10821083type EvmSponsorshipHandler = (1084	UniqueEthSponsorshipHandler<Runtime>,1085	pallet_evm_contract_helpers::HelpersContractSponsoring<Runtime>,1086);10871088type SponsorshipHandler = (1089	UniqueSponsorshipHandler<Runtime>,1090	//pallet_contract_helpers::ContractSponsorshipHandler<Runtime>,1091	pallet_evm_transaction_payment::BridgeSponsorshipHandler<Runtime>,1092);10931094impl pallet_evm_transaction_payment::Config for Runtime {1095	type EvmSponsorshipHandler = EvmSponsorshipHandler;1096	type Currency = Balances;1097}10981099impl pallet_charge_transaction::Config for Runtime {1100	type SponsorshipHandler = SponsorshipHandler;1101}11021103// impl pallet_contract_helpers::Config for Runtime {1104//	 type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;1105// }11061107parameter_types! {1108	// 0x842899ECF380553E8a4de75bF534cdf6fBF640491109	pub const HelpersContractAddress: H160 = H160([1110		0x84, 0x28, 0x99, 0xec, 0xf3, 0x80, 0x55, 0x3e, 0x8a, 0x4d, 0xe7, 0x5b, 0xf5, 0x34, 0xcd, 0xf6, 0xfb, 0xf6, 0x40, 0x49,1111	]);11121113	// 0x6c4e9fe1ae37a41e93cee429e8e1881abdcbb54f1114	pub const EvmCollectionHelpersAddress: H160 = H160([1115		0x6c, 0x4e, 0x9f, 0xe1, 0xae, 0x37, 0xa4, 0x1e, 0x93, 0xce, 0xe4, 0x29, 0xe8, 0xe1, 0x88, 0x1a, 0xbd, 0xcb, 0xb5, 0x4f,1116	]);1117}11181119impl pallet_evm_contract_helpers::Config for Runtime {1120	type ContractAddress = HelpersContractAddress;1121	type DefaultSponsoringRateLimit = DefaultSponsoringRateLimit;1122}11231124construct_runtime!(1125	pub enum Runtime where1126		Block = Block,1127		NodeBlock = opaque::Block,1128		UncheckedExtrinsic = UncheckedExtrinsic1129	{1130		ParachainSystem: cumulus_pallet_parachain_system::{Pallet, Call, Config, Storage, Inherent, Event<T>, ValidateUnsigned} = 20,1131		ParachainInfo: parachain_info::{Pallet, Storage, Config} = 21,11321133		Aura: pallet_aura::{Pallet, Config<T>} = 22,1134		AuraExt: cumulus_pallet_aura_ext::{Pallet, Config} = 23,11351136		Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 30,1137		RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Pallet, Storage} = 31,1138		Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 32,1139		TransactionPayment: pallet_transaction_payment::{Pallet, Storage} = 33,1140		Treasury: pallet_treasury::{Pallet, Call, Storage, Config, Event<T>} = 34,1141		Sudo: pallet_sudo::{Pallet, Call, Storage, Config<T>, Event<T>} = 35,1142		System: frame_system::{Pallet, Call, Storage, Config, Event<T>} = 36,1143		Vesting: orml_vesting::{Pallet, Storage, Call, Event<T>, Config<T>} = 37,1144		// Vesting: pallet_vesting::{Pallet, Call, Config<T>, Storage, Event<T>} = 37,1145		// Contracts: pallet_contracts::{Pallet, Call, Storage, Event<T>} = 38,11461147		// XCM helpers.1148		XcmpQueue: cumulus_pallet_xcmp_queue::{Pallet, Call, Storage, Event<T>} = 50,1149		PolkadotXcm: pallet_xcm::{Pallet, Call, Event<T>, Origin} = 51,1150		CumulusXcm: cumulus_pallet_xcm::{Pallet, Call, Event<T>, Origin} = 52,1151		DmpQueue: cumulus_pallet_dmp_queue::{Pallet, Call, Storage, Event<T>} = 53,11521153		// Unique Pallets1154		Inflation: pallet_inflation::{Pallet, Call, Storage} = 60,1155		Unique: pallet_unique::{Pallet, Call, Storage, Event<T>} = 61,1156		Scheduler: pallet_unique_scheduler::{Pallet, Call, Storage, Event<T>} = 62,1157		// free = 631158		Charging: pallet_charge_transaction::{Pallet, Call, Storage } = 64,1159		// ContractHelpers: pallet_contract_helpers::{Pallet, Call, Storage} = 65,1160		Common: pallet_common::{Pallet, Storage, Event<T>} = 66,1161		Fungible: pallet_fungible::{Pallet, Storage} = 67,1162		Refungible: pallet_refungible::{Pallet, Storage} = 68,1163		Nonfungible: pallet_nonfungible::{Pallet, Storage} = 69,1164		Structure: pallet_structure::{Pallet, Call, Storage, Event<T>} = 70,1165		RmrkCore: pallet_proxy_rmrk_core::{Pallet, Call, Storage, Event<T>} = 71,1166		RmrkEquip: pallet_proxy_rmrk_equip::{Pallet, Call, Storage, Event<T>} = 72,11671168		// Frontier1169		EVM: pallet_evm::{Pallet, Config, Call, Storage, Event<T>} = 100,1170		Ethereum: pallet_ethereum::{Pallet, Config, Call, Storage, Event, Origin} = 101,11711172		EvmCoderSubstrate: pallet_evm_coder_substrate::{Pallet, Storage} = 150,1173		EvmContractHelpers: pallet_evm_contract_helpers::{Pallet, Storage} = 151,1174		EvmTransactionPayment: pallet_evm_transaction_payment::{Pallet} = 152,1175		EvmMigration: pallet_evm_migration::{Pallet, Call, Storage} = 153,1176	}1177);11781179pub struct TransactionConverter;11801181impl fp_rpc::ConvertTransaction<UncheckedExtrinsic> for TransactionConverter {1182	fn convert_transaction(&self, transaction: pallet_ethereum::Transaction) -> UncheckedExtrinsic {1183		UncheckedExtrinsic::new_unsigned(1184			pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),1185		)1186	}1187}11881189impl fp_rpc::ConvertTransaction<opaque::UncheckedExtrinsic> for TransactionConverter {1190	fn convert_transaction(1191		&self,1192		transaction: pallet_ethereum::Transaction,1193	) -> opaque::UncheckedExtrinsic {1194		let extrinsic = UncheckedExtrinsic::new_unsigned(1195			pallet_ethereum::Call::<Runtime>::transact { transaction }.into(),1196		);1197		let encoded = extrinsic.encode();1198		opaque::UncheckedExtrinsic::decode(&mut &encoded[..])1199			.expect("Encoded extrinsic is always valid")1200	}1201}12021203/// The address format for describing accounts.1204pub type Address = sp_runtime::MultiAddress<AccountId, ()>;1205/// Block header type as expected by this runtime.1206pub type Header = generic::Header<BlockNumber, BlakeTwo256>;1207/// Block type as expected by this runtime.1208pub type Block = generic::Block<Header, UncheckedExtrinsic>;1209/// A Block signed with a Justification1210pub type SignedBlock = generic::SignedBlock<Block>;1211/// BlockId type as expected by this runtime.1212pub type BlockId = generic::BlockId<Block>;1213/// The SignedExtension to the basic transaction logic.1214pub type SignedExtra = (1215	frame_system::CheckSpecVersion<Runtime>,1216	// system::CheckTxVersion<Runtime>,1217	frame_system::CheckGenesis<Runtime>,1218	frame_system::CheckEra<Runtime>,1219	frame_system::CheckNonce<Runtime>,1220	frame_system::CheckWeight<Runtime>,1221	ChargeTransactionPayment,1222	//pallet_contract_helpers::ContractHelpersExtension<Runtime>,1223	pallet_ethereum::FakeTransactionFinalizer<Runtime>,1224);1225pub type SignedExtraScheduler = (1226	frame_system::CheckSpecVersion<Runtime>,1227	frame_system::CheckGenesis<Runtime>,1228	frame_system::CheckEra<Runtime>,1229	frame_system::CheckNonce<Runtime>,1230	frame_system::CheckWeight<Runtime>,1231);1232/// Unchecked extrinsic type as expected by this runtime.1233pub type UncheckedExtrinsic =1234	fp_self_contained::UncheckedExtrinsic<Address, Call, Signature, SignedExtra>;1235/// Extrinsic type that has already been checked.1236pub type CheckedExtrinsic = fp_self_contained::CheckedExtrinsic<AccountId, Call, SignedExtra, H160>;1237/// Executive: handles dispatch to the various modules.1238pub type Executive = frame_executive::Executive<1239	Runtime,1240	Block,1241	frame_system::ChainContext<Runtime>,1242	Runtime,1243	AllPalletsReversedWithSystemFirst,1244>;12451246impl_opaque_keys! {1247	pub struct SessionKeys {1248		pub aura: Aura,1249	}1250}12511252impl fp_self_contained::SelfContainedCall for Call {1253	type SignedInfo = H160;12541255	fn is_self_contained(&self) -> bool {1256		match self {1257			Call::Ethereum(call) => call.is_self_contained(),1258			_ => false,1259		}1260	}12611262	fn check_self_contained(&self) -> Option<Result<Self::SignedInfo, TransactionValidityError>> {1263		match self {1264			Call::Ethereum(call) => call.check_self_contained(),1265			_ => None,1266		}1267	}12681269	fn validate_self_contained(1270		&self,1271		info: &Self::SignedInfo,1272		dispatch_info: &DispatchInfoOf<Call>,1273		len: usize,1274	) -> Option<TransactionValidity> {1275		match self {1276			Call::Ethereum(call) => call.validate_self_contained(info, dispatch_info, len),1277			_ => None,1278		}1279	}12801281	fn pre_dispatch_self_contained(1282		&self,1283		info: &Self::SignedInfo,1284	) -> Option<Result<(), TransactionValidityError>> {1285		match self {1286			Call::Ethereum(call) => call.pre_dispatch_self_contained(info),1287			_ => None,1288		}1289	}12901291	fn apply_self_contained(1292		self,1293		info: Self::SignedInfo,1294	) -> Option<sp_runtime::DispatchResultWithInfo<PostDispatchInfoOf<Self>>> {1295		match self {1296			call @ Call::Ethereum(pallet_ethereum::Call::transact { .. }) => Some(call.dispatch(1297				Origin::from(pallet_ethereum::RawOrigin::EthereumTransaction(info)),1298			)),1299			_ => None,1300		}1301	}1302}13031304macro_rules! dispatch_unique_runtime {1305	($collection:ident.$method:ident($($name:ident),*)) => {{1306		let collection = <Runtime as pallet_common::Config>::CollectionDispatch::dispatch(<pallet_common::CollectionHandle<Runtime>>::try_get($collection)?);1307		let dispatch = collection.as_dyn();13081309		Ok::<_, DispatchError>(dispatch.$method($($name),*))1310	}};1311}13121313impl_common_runtime_apis! {1314	#![custom_apis]13151316	impl rmrk_rpc::RmrkApi<1317		Block,1318		AccountId,1319		RmrkCollectionInfo<AccountId>,1320		RmrkInstanceInfo<AccountId>,1321		RmrkResourceInfo,1322		RmrkPropertyInfo,1323		RmrkBaseInfo<AccountId>,1324		RmrkPartType,1325		RmrkTheme1326	> for Runtime {1327		fn last_collection_idx() -> Result<RmrkCollectionId, DispatchError> {1328			pallet_proxy_rmrk_core::rpc::last_collection_idx::<Runtime>()1329		}13301331		fn collection_by_id(collection_id: RmrkCollectionId) -> Result<Option<RmrkCollectionInfo<AccountId>>, DispatchError> {1332			pallet_proxy_rmrk_core::rpc::collection_by_id::<Runtime>(collection_id)1333		}13341335		fn nft_by_id(collection_id: RmrkCollectionId, nft_by_id: RmrkNftId) -> Result<Option<RmrkInstanceInfo<AccountId>>, DispatchError> {1336			pallet_proxy_rmrk_core::rpc::nft_by_id::<Runtime>(collection_id, nft_by_id)1337		}13381339		fn account_tokens(account_id: AccountId, collection_id: RmrkCollectionId) -> Result<Vec<RmrkNftId>, DispatchError> {1340			pallet_proxy_rmrk_core::rpc::account_tokens::<Runtime>(account_id, collection_id)1341		}13421343		fn nft_children(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkNftChild>, DispatchError> {1344			pallet_proxy_rmrk_core::rpc::nft_children::<Runtime>(collection_id, nft_id)1345		}13461347		fn collection_properties(collection_id: RmrkCollectionId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {1348			pallet_proxy_rmrk_core::rpc::collection_properties::<Runtime>(collection_id, filter_keys)1349		}13501351		fn nft_properties(collection_id: RmrkCollectionId, nft_id: RmrkNftId, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Vec<RmrkPropertyInfo>, DispatchError> {1352			pallet_proxy_rmrk_core::rpc::nft_properties::<Runtime>(collection_id, nft_id, filter_keys)1353		}13541355		fn nft_resources(collection_id: RmrkCollectionId, nft_id: RmrkNftId) -> Result<Vec<RmrkResourceInfo>, DispatchError> {1356			pallet_proxy_rmrk_core::rpc::nft_resources::<Runtime>(collection_id, nft_id)1357		}13581359		fn nft_resource_priority(collection_id: RmrkCollectionId, nft_id: RmrkNftId, resource_id: RmrkResourceId) -> Result<Option<u32>, DispatchError> {1360			pallet_proxy_rmrk_core::rpc::nft_resource_priority::<Runtime>(collection_id, nft_id, resource_id)1361		}13621363		fn base(base_id: RmrkBaseId) -> Result<Option<RmrkBaseInfo<AccountId>>, DispatchError> {1364			pallet_proxy_rmrk_equip::rpc::base::<Runtime>(base_id)1365		}13661367		fn base_parts(base_id: RmrkBaseId) -> Result<Vec<RmrkPartType>, DispatchError> {1368			pallet_proxy_rmrk_equip::rpc::base_parts::<Runtime>(base_id)1369		}13701371		fn theme_names(base_id: RmrkBaseId) -> Result<Vec<RmrkThemeName>, DispatchError> {1372			pallet_proxy_rmrk_equip::rpc::theme_names::<Runtime>(base_id)1373		}13741375		fn theme(base_id: RmrkBaseId, theme_name: RmrkThemeName, filter_keys: Option<Vec<RmrkPropertyKey>>) -> Result<Option<RmrkTheme>, DispatchError> {1376			pallet_proxy_rmrk_equip::rpc::theme::<Runtime>(base_id, theme_name, filter_keys)1377		}1378	}1379}13801381struct CheckInherents;13821383impl cumulus_pallet_parachain_system::CheckInherents<Block> for CheckInherents {1384	fn check_inherents(1385		block: &Block,1386		relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof,1387	) -> sp_inherents::CheckInherentsResult {1388		let relay_chain_slot = relay_state_proof1389			.read_slot()1390			.expect("Could not read the relay chain slot from the proof");13911392		let inherent_data =1393			cumulus_primitives_timestamp::InherentDataProvider::from_relay_chain_slot_and_duration(1394				relay_chain_slot,1395				sp_std::time::Duration::from_secs(6),1396			)1397			.create_inherent_data()1398			.expect("Could not create the timestamp inherent data");13991400		inherent_data.check_extrinsics(block)1401	}1402}14031404cumulus_pallet_parachain_system::register_validate_block!(1405	Runtime = Runtime,1406	BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,1407	CheckInherents = CheckInherents,1408);
modifiedruntime/tests/src/lib.rsdiffbeforeafterboth
--- a/runtime/tests/src/lib.rs
+++ b/runtime/tests/src/lib.rs
@@ -255,6 +255,7 @@
 	type Event = ();
 	type WeightInfo = ();
 	type CommonWeightInfo = CommonWeights<Self>;
+	type RefungibleExtensionsWeightInfo = CommonWeights<Self>;
 }
 
 // Build genesis storage according to the mock runtime.
modifiedruntime/tests/src/tests.rsdiffbeforeafterboth
--- a/runtime/tests/src/tests.rs
+++ b/runtime/tests/src/tests.rs
@@ -21,7 +21,7 @@
 	CreateReFungibleData, MAX_DECIMAL_POINTS, COLLECTION_ADMINS_LIMIT, TokenId,
 	MAX_TOKEN_OWNERSHIP, CreateCollectionData, CollectionMode, AccessMode, CollectionPermissions,
 	PropertyKeyPermission, PropertyPermission, Property, CollectionPropertiesVec,
-	CollectionPropertiesPermissionsVec, TokenChild,
+	CollectionPropertiesPermissionsVec,
 };
 use frame_support::{assert_noop, assert_ok, assert_err};
 use sp_std::convert::TryInto;
modifiedtests/package.jsondiffbeforeafterboth
--- a/tests/package.json
+++ b/tests/package.json
@@ -78,6 +78,7 @@
     "testEnableDisableTransfers": "mocha --timeout 9999999 -r ts-node/register ./**/enableDisableTransfer.test.ts",
     "testLimits": "mocha --timeout 9999999 -r ts-node/register ./**/limits.test.ts",
     "testEthCreateCollection": "mocha --timeout 9999999 -r ts-node/register ./**/eth/createCollection.test.ts",
+    "testRFT": "mocha --timeout 9999999 -r ts-node/register ./**/refungible.test.ts",
     "polkadot-types-fetch-metadata": "curl -H 'Content-Type: application/json' -d '{\"id\":\"1\", \"jsonrpc\":\"2.0\", \"method\": \"state_getMetadata\", \"params\":[]}' http://localhost:9933 > src/interfaces/metadata.json",
     "polkadot-types-from-defs": "ts-node ./node_modules/.bin/polkadot-types-from-defs --endpoint src/interfaces/metadata.json --input src/interfaces/ --package .",
     "polkadot-types-from-chain": "ts-node ./node_modules/.bin/polkadot-types-from-chain --endpoint src/interfaces/metadata.json --output src/interfaces/ --package .",
modifiedtests/src/interfaces/augment-api-consts.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-api-consts.ts
+++ b/tests/src/interfaces/augment-api-consts.ts
@@ -2,10 +2,10 @@
 /* eslint-disable */
 
 import type { ApiTypes } from '@polkadot/api-base/types';
-import type { Option, Vec, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';
+import type { Option, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';
 import type { Codec } from '@polkadot/types-codec/types';
 import type { Permill } from '@polkadot/types/interfaces/runtime';
-import type { FrameSupportPalletId, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, SpVersionRuntimeVersion } from '@polkadot/types/lookup';
+import type { FrameSupportPalletId, FrameSupportWeightsRuntimeDbWeight, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, SpVersionRuntimeVersion } from '@polkadot/types/lookup';
 
 declare module '@polkadot/api-base/types/consts' {
   export interface AugmentedConsts<ApiType extends ApiTypes> {
@@ -110,10 +110,6 @@
       [key: string]: Codec;
     };
     transactionPayment: {
-      /**
-       * The polynomial that is applied in order to derive fee from length.
-       **/
-      lengthToFee: Vec<FrameSupportWeightsWeightToFeeCoefficient> & AugmentedConst<ApiType>;
       /**
        * A fee mulitplier for `Operational` extrinsics to compute "virtual tip" to boost their
        * `priority`
@@ -138,10 +134,6 @@
        * transactions.
        **/
       operationalFeeMultiplier: u8 & AugmentedConst<ApiType>;
-      /**
-       * The polynomial that is applied in order to derive fee from weight.
-       **/
-      weightToFee: Vec<FrameSupportWeightsWeightToFeeCoefficient> & AugmentedConst<ApiType>;
       /**
        * Generic const
        **/
modifiedtests/src/interfaces/augment-api-errors.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-api-errors.ts
+++ b/tests/src/interfaces/augment-api-errors.ts
@@ -429,6 +429,10 @@
        **/
       RefungibleDisallowsNesting: AugmentedError<ApiType>;
       /**
+       * Refungible token can't be repartitioned by user who isn't owns all pieces
+       **/
+      RepartitionWhileNotOwningAllPieces: AugmentedError<ApiType>;
+      /**
        * Setting item properties is not allowed
        **/
       SettingPropertiesNotAllowed: AugmentedError<ApiType>;
@@ -444,6 +448,7 @@
     rmrkCore: {
       CannotAcceptNonOwnedNft: AugmentedError<ApiType>;
       CannotRejectNonOwnedNft: AugmentedError<ApiType>;
+      CannotRejectNonPendingNft: AugmentedError<ApiType>;
       CannotSendToDescendentOrSelf: AugmentedError<ApiType>;
       CollectionFullOrLocked: AugmentedError<ApiType>;
       CollectionNotEmpty: AugmentedError<ApiType>;
@@ -452,10 +457,12 @@
       NftTypeEncodeError: AugmentedError<ApiType>;
       NoAvailableCollectionId: AugmentedError<ApiType>;
       NoAvailableNftId: AugmentedError<ApiType>;
+      NoAvailableResourceId: AugmentedError<ApiType>;
       NonTransferable: AugmentedError<ApiType>;
       NoPermission: AugmentedError<ApiType>;
       ResourceDoesntExist: AugmentedError<ApiType>;
       ResourceNotPending: AugmentedError<ApiType>;
+      RmrkPropertyIsNotFound: AugmentedError<ApiType>;
       RmrkPropertyKeyIsTooLong: AugmentedError<ApiType>;
       RmrkPropertyValueIsTooLong: AugmentedError<ApiType>;
       UnableToDecodeRmrkData: AugmentedError<ApiType>;
@@ -469,6 +476,8 @@
       NeedsDefaultThemeFirst: AugmentedError<ApiType>;
       NoAvailableBaseId: AugmentedError<ApiType>;
       NoAvailablePartId: AugmentedError<ApiType>;
+      NoEquippableOnFixedPart: AugmentedError<ApiType>;
+      PartDoesntExist: AugmentedError<ApiType>;
       PermissionError: AugmentedError<ApiType>;
       /**
        * Generic error
@@ -599,6 +608,10 @@
        **/
       EmptyArgument: AugmentedError<ApiType>;
       /**
+       * Repertition is only supported by refungible collection
+       **/
+      RepartitionCalledOnNonRefungibleCollection: AugmentedError<ApiType>;
+      /**
        * Generic error
        **/
       [key: string]: AugmentedError<ApiType>;
modifiedtests/src/interfaces/augment-api-events.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-api-events.ts
+++ b/tests/src/interfaces/augment-api-events.ts
@@ -166,34 +166,28 @@
     dmpQueue: {
       /**
        * Downward message executed with the given outcome.
-       * \[ id, outcome \]
        **/
-      ExecutedDownward: AugmentedEvent<ApiType, [U8aFixed, XcmV2TraitsOutcome]>;
+      ExecutedDownward: AugmentedEvent<ApiType, [messageId: U8aFixed, outcome: XcmV2TraitsOutcome], { messageId: U8aFixed, outcome: XcmV2TraitsOutcome }>;
       /**
        * Downward message is invalid XCM.
-       * \[ id \]
        **/
-      InvalidFormat: AugmentedEvent<ApiType, [U8aFixed]>;
+      InvalidFormat: AugmentedEvent<ApiType, [messageId: U8aFixed], { messageId: U8aFixed }>;
       /**
        * Downward message is overweight and was placed in the overweight queue.
-       * \[ id, index, required \]
        **/
-      OverweightEnqueued: AugmentedEvent<ApiType, [U8aFixed, u64, u64]>;
+      OverweightEnqueued: AugmentedEvent<ApiType, [messageId: U8aFixed, overweightIndex: u64, requiredWeight: u64], { messageId: U8aFixed, overweightIndex: u64, requiredWeight: u64 }>;
       /**
        * Downward message from the overweight queue was executed.
-       * \[ index, used \]
        **/
-      OverweightServiced: AugmentedEvent<ApiType, [u64, u64]>;
+      OverweightServiced: AugmentedEvent<ApiType, [overweightIndex: u64, weightUsed: u64], { overweightIndex: u64, weightUsed: u64 }>;
       /**
        * Downward message is unsupported version of XCM.
-       * \[ id \]
        **/
-      UnsupportedVersion: AugmentedEvent<ApiType, [U8aFixed]>;
+      UnsupportedVersion: AugmentedEvent<ApiType, [messageId: U8aFixed], { messageId: U8aFixed }>;
       /**
        * The weight limit for handling downward messages was reached.
-       * \[ id, remaining, required \]
        **/
-      WeightExhausted: AugmentedEvent<ApiType, [U8aFixed, u64, u64]>;
+      WeightExhausted: AugmentedEvent<ApiType, [messageId: U8aFixed, remainingWeight: u64, requiredWeight: u64], { messageId: U8aFixed, remainingWeight: u64, requiredWeight: u64 }>;
       /**
        * Generic event
        **/
@@ -246,22 +240,20 @@
     parachainSystem: {
       /**
        * Downward messages were processed using the given weight.
-       * \[ weight_used, result_mqc_head \]
        **/
-      DownwardMessagesProcessed: AugmentedEvent<ApiType, [u64, H256]>;
+      DownwardMessagesProcessed: AugmentedEvent<ApiType, [weightUsed: u64, dmqHead: H256], { weightUsed: u64, dmqHead: H256 }>;
       /**
        * Some downward messages have been received and will be processed.
-       * \[ count \]
        **/
-      DownwardMessagesReceived: AugmentedEvent<ApiType, [u32]>;
+      DownwardMessagesReceived: AugmentedEvent<ApiType, [count: u32], { count: u32 }>;
       /**
        * An upgrade has been authorized.
        **/
-      UpgradeAuthorized: AugmentedEvent<ApiType, [H256]>;
+      UpgradeAuthorized: AugmentedEvent<ApiType, [codeHash: H256], { codeHash: H256 }>;
       /**
        * The validation function was applied as of the contained relay chain block number.
        **/
-      ValidationFunctionApplied: AugmentedEvent<ApiType, [u32]>;
+      ValidationFunctionApplied: AugmentedEvent<ApiType, [relayChainBlockNum: u32], { relayChainBlockNum: u32 }>;
       /**
        * The relay-chain aborted the upgrade process.
        **/
@@ -420,6 +412,7 @@
     };
     rmrkEquip: {
       BaseCreated: AugmentedEvent<ApiType, [issuer: AccountId32, baseId: u32], { issuer: AccountId32, baseId: u32 }>;
+      EquippablesUpdated: AugmentedEvent<ApiType, [baseId: u32, slotId: u32], { baseId: u32, slotId: u32 }>;
       /**
        * Generic event
        **/
modifiedtests/src/interfaces/augment-api-query.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-api-query.ts
+++ b/tests/src/interfaces/augment-api-query.ts
@@ -5,7 +5,7 @@
 import type { BTreeMap, Bytes, Option, U256, U8aFixed, Vec, bool, u128, u16, u32, u64 } from '@polkadot/types-codec';
 import type { AnyNumber, ITuple } from '@polkadot/types-codec/types';
 import type { AccountId32, H160, H256 } from '@polkadot/types/interfaces/runtime';
-import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, EthereumBlock, EthereumLog, EthereumReceiptReceiptV3, EthereumTransactionTransactionV2, FpRpcTransactionStatus, FrameSupportWeightsPerDispatchClassU64, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmContractHelpersSponsoringModeT, PalletNonfungibleItemData, PalletRefungibleItemData, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletUniqueSchedulerScheduledV3, PhantomTypeUpDataStructs, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpRuntimeDigest, SpTrieStorageProof, UpDataStructsCollection, UpDataStructsCollectionStats, UpDataStructsProperties, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsPropertyPermission, UpDataStructsTokenChild } from '@polkadot/types/lookup';
+import type { CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueQueueConfigData, EthereumBlock, EthereumLog, EthereumReceiptReceiptV3, EthereumTransactionTransactionV2, FpRpcTransactionStatus, FrameSupportWeightsPerDispatchClassU64, FrameSystemAccountInfo, FrameSystemEventRecord, FrameSystemLastRuntimeUpgradeInfo, FrameSystemPhase, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesReleases, PalletBalancesReserveData, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmContractHelpersSponsoringModeT, PalletNonfungibleItemData, PalletRefungibleItemData, PalletTransactionPaymentReleases, PalletTreasuryProposal, PalletUniqueSchedulerScheduledV3, PhantomTypeUpDataStructs, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, SpRuntimeDigest, SpTrieStorageProof, UpDataStructsCollection, UpDataStructsCollectionStats, UpDataStructsProperties, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsTokenChild } from '@polkadot/types/lookup';
 import type { Observable } from '@polkadot/types/types';
 
 declare module '@polkadot/api-base/types/storage' {
@@ -228,6 +228,7 @@
        * Used to enumerate tokens owned by account
        **/
       owned: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array, arg3: u32 | AnyNumber | Uint8Array) => Observable<bool>, [u32, PalletEvmAccountBasicCrossAccountIdRepr, u32]> & QueryableStorageEntry<ApiType, [u32, PalletEvmAccountBasicCrossAccountIdRepr, u32]>;
+      tokenAuxProperties: AugmentedQuery<ApiType, (arg1: u32 | AnyNumber | Uint8Array, arg2: u32 | AnyNumber | Uint8Array, arg3: UpDataStructsPropertyScope | 'None' | 'Rmrk' | number | Uint8Array, arg4: Bytes | string | Uint8Array) => Observable<Option<Bytes>>, [u32, u32, UpDataStructsPropertyScope, Bytes]> & QueryableStorageEntry<ApiType, [u32, u32, UpDataStructsPropertyScope, Bytes]>;
       /**
        * Used to enumerate token's children
        **/
modifiedtests/src/interfaces/augment-api-tx.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-api-tx.ts
+++ b/tests/src/interfaces/augment-api-tx.ts
@@ -5,7 +5,7 @@
 import type { Bytes, Compact, Option, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';
 import type { AnyNumber, IMethod, ITuple } from '@polkadot/types-codec/types';
 import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime';
-import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumTransactionTransactionV2, FrameSupportScheduleMaybeHashed, OrmlVestingVestingSchedule, PalletEvmAccountBasicCrossAccountIdRepr, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsPartPartType, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
+import type { CumulusPrimitivesParachainInherentParachainInherentData, EthereumTransactionTransactionV2, FrameSupportScheduleMaybeHashed, OrmlVestingVestingSchedule, PalletEvmAccountBasicCrossAccountIdRepr, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsPartEquippableList, RmrkTraitsPartPartType, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCreateCollectionData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, XcmV1MultiLocation, XcmV2WeightLimit, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
 
 declare module '@polkadot/api-base/types/submittable' {
   export interface AugmentedSubmittables<ApiType extends ApiTypes> {
@@ -361,11 +361,11 @@
       /**
        * accept the addition of a new resource to an existing NFT
        **/
-      acceptResource: AugmentedSubmittable<(rmrkCollectionId: u32 | AnyNumber | Uint8Array, rmrkNftId: u32 | AnyNumber | Uint8Array, rmrkResourceId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, u32]>;
+      acceptResource: AugmentedSubmittable<(rmrkCollectionId: u32 | AnyNumber | Uint8Array, rmrkNftId: u32 | AnyNumber | Uint8Array, resourceId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, u32]>;
       /**
        * accept the removal of a resource of an existing NFT
        **/
-      acceptResourceRemoval: AugmentedSubmittable<(rmrkCollectionId: u32 | AnyNumber | Uint8Array, rmrkNftId: u32 | AnyNumber | Uint8Array, rmrkResourceId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, u32]>;
+      acceptResourceRemoval: AugmentedSubmittable<(rmrkCollectionId: u32 | AnyNumber | Uint8Array, rmrkNftId: u32 | AnyNumber | Uint8Array, resourceId: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, u32]>;
       /**
        * Create basic resource
        **/
@@ -415,7 +415,7 @@
        * - `metadata`: Arbitrary data about an nft, e.g. IPFS hash
        * - `transferable`: Ability to transfer this NFT
        **/
-      mintNft: AugmentedSubmittable<(owner: AccountId32 | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, recipient: Option<AccountId32> | null | object | string | Uint8Array, royaltyAmount: Option<Permill> | null | object | string | Uint8Array, metadata: Bytes | string | Uint8Array, transferable: bool | boolean | Uint8Array, resources: Option<Vec<RmrkTraitsResourceResourceTypes>> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId32, u32, Option<AccountId32>, Option<Permill>, Bytes, bool, Option<Vec<RmrkTraitsResourceResourceTypes>>]>;
+      mintNft: AugmentedSubmittable<(owner: Option<AccountId32> | null | object | string | Uint8Array, collectionId: u32 | AnyNumber | Uint8Array, recipient: Option<AccountId32> | null | object | string | Uint8Array, royaltyAmount: Option<Permill> | null | object | string | Uint8Array, metadata: Bytes | string | Uint8Array, transferable: bool | boolean | Uint8Array, resources: Option<Vec<RmrkTraitsResourceResourceTypes>> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Option<AccountId32>, u32, Option<AccountId32>, Option<Permill>, Bytes, bool, Option<Vec<RmrkTraitsResourceResourceTypes>>]>;
       /**
        * Rejects an NFT sent from another account to self or owned NFT
        * 
@@ -465,6 +465,7 @@
        * RmrkPartsLimit
        **/
       createBase: AugmentedSubmittable<(baseType: Bytes | string | Uint8Array, symbol: Bytes | string | Uint8Array, parts: Vec<RmrkTraitsPartPartType> | (RmrkTraitsPartPartType | { FixedPart: any } | { SlotPart: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [Bytes, Bytes, Vec<RmrkTraitsPartPartType>]>;
+      equippable: AugmentedSubmittable<(baseId: u32 | AnyNumber | Uint8Array, slotId: u32 | AnyNumber | Uint8Array, equippables: RmrkTraitsPartEquippableList | { All: any } | { Empty: any } | { Custom: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, RmrkTraitsPartEquippableList]>;
       /**
        * Adds a Theme to a Base.
        * Modeled after [themeadd interaction](https://github.com/rmrk-team/rmrk-spec/blob/master/standards/rmrk2.0.0/interactions/themeadd.md)
@@ -959,6 +960,7 @@
        * * address.
        **/
       removeFromAllowList: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, address: PalletEvmAccountBasicCrossAccountIdRepr | { Substrate: any } | { Ethereum: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, PalletEvmAccountBasicCrossAccountIdRepr]>;
+      repartition: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, token: u32 | AnyNumber | Uint8Array, amount: u128 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, u32, u128]>;
       setCollectionLimits: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newLimit: UpDataStructsCollectionLimits | { accountTokenOwnershipLimit?: any; sponsoredDataSize?: any; sponsoredDataRateLimit?: any; tokenLimit?: any; sponsorTransferTimeout?: any; sponsorApproveTimeout?: any; ownerCanTransfer?: any; ownerCanDestroy?: any; transfersEnabled?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, UpDataStructsCollectionLimits]>;
       setCollectionPermissions: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, newLimit: UpDataStructsCollectionPermissions | { access?: any; mintMode?: any; nesting?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [u32, UpDataStructsCollectionPermissions]>;
       setCollectionProperties: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, properties: Vec<UpDataStructsProperty> | (UpDataStructsProperty | { key?: any; value?: any } | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [u32, Vec<UpDataStructsProperty>]>;
modifiedtests/src/interfaces/augment-types.tsdiffbeforeafterboth
--- a/tests/src/interfaces/augment-types.ts
+++ b/tests/src/interfaces/augment-types.ts
@@ -1,7 +1,7 @@
 // Auto-generated via `yarn polkadot-types-from-defs`, do not edit
 /* eslint-disable */
 
-import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUniqueSchedulerCall, PalletUniqueSchedulerError, PalletUniqueSchedulerEvent, PalletUniqueSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from './default';
+import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUniqueSchedulerCall, PalletUniqueSchedulerError, PalletUniqueSchedulerEvent, PalletUniqueSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from './default';
 import type { Data, StorageKey } from '@polkadot/types';
 import type { BitVec, Bool, Bytes, I128, I16, I256, I32, I64, I8, Json, Null, OptionBool, Raw, Text, Type, U128, U16, U256, U32, U64, U8, USize, bool, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types-codec';
 import type { AssetApproval, AssetApprovalKey, AssetBalance, AssetDestroyWitness, AssetDetails, AssetMetadata, TAssetBalance, TAssetDepositBalance } from '@polkadot/types/interfaces/assets';
@@ -489,7 +489,6 @@
     FrameSupportWeightsPerDispatchClassU64: FrameSupportWeightsPerDispatchClassU64;
     FrameSupportWeightsPerDispatchClassWeightsPerClass: FrameSupportWeightsPerDispatchClassWeightsPerClass;
     FrameSupportWeightsRuntimeDbWeight: FrameSupportWeightsRuntimeDbWeight;
-    FrameSupportWeightsWeightToFeeCoefficient: FrameSupportWeightsWeightToFeeCoefficient;
     FrameSystemAccountInfo: FrameSystemAccountInfo;
     FrameSystemCall: FrameSystemCall;
     FrameSystemError: FrameSystemError;
@@ -1226,6 +1225,7 @@
     UpDataStructsProperty: UpDataStructsProperty;
     UpDataStructsPropertyKeyPermission: UpDataStructsPropertyKeyPermission;
     UpDataStructsPropertyPermission: UpDataStructsPropertyPermission;
+    UpDataStructsPropertyScope: UpDataStructsPropertyScope;
     UpDataStructsRpcCollection: UpDataStructsRpcCollection;
     UpDataStructsSponsoringRateLimit: UpDataStructsSponsoringRateLimit;
     UpDataStructsSponsorshipState: UpDataStructsSponsorshipState;
modifiedtests/src/interfaces/default/types.tsdiffbeforeafterboth
--- a/tests/src/interfaces/default/types.ts
+++ b/tests/src/interfaces/default/types.ts
@@ -31,17 +31,35 @@
 /** @name CumulusPalletDmpQueueEvent */
 export interface CumulusPalletDmpQueueEvent extends Enum {
   readonly isInvalidFormat: boolean;
-  readonly asInvalidFormat: U8aFixed;
+  readonly asInvalidFormat: {
+    readonly messageId: U8aFixed;
+  } & Struct;
   readonly isUnsupportedVersion: boolean;
-  readonly asUnsupportedVersion: U8aFixed;
+  readonly asUnsupportedVersion: {
+    readonly messageId: U8aFixed;
+  } & Struct;
   readonly isExecutedDownward: boolean;
-  readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>;
+  readonly asExecutedDownward: {
+    readonly messageId: U8aFixed;
+    readonly outcome: XcmV2TraitsOutcome;
+  } & Struct;
   readonly isWeightExhausted: boolean;
-  readonly asWeightExhausted: ITuple<[U8aFixed, u64, u64]>;
+  readonly asWeightExhausted: {
+    readonly messageId: U8aFixed;
+    readonly remainingWeight: u64;
+    readonly requiredWeight: u64;
+  } & Struct;
   readonly isOverweightEnqueued: boolean;
-  readonly asOverweightEnqueued: ITuple<[U8aFixed, u64, u64]>;
+  readonly asOverweightEnqueued: {
+    readonly messageId: U8aFixed;
+    readonly overweightIndex: u64;
+    readonly requiredWeight: u64;
+  } & Struct;
   readonly isOverweightServiced: boolean;
-  readonly asOverweightServiced: ITuple<[u64, u64]>;
+  readonly asOverweightServiced: {
+    readonly overweightIndex: u64;
+    readonly weightUsed: u64;
+  } & Struct;
   readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced';
 }
 
@@ -90,14 +108,23 @@
 export interface CumulusPalletParachainSystemEvent extends Enum {
   readonly isValidationFunctionStored: boolean;
   readonly isValidationFunctionApplied: boolean;
-  readonly asValidationFunctionApplied: u32;
+  readonly asValidationFunctionApplied: {
+    readonly relayChainBlockNum: u32;
+  } & Struct;
   readonly isValidationFunctionDiscarded: boolean;
   readonly isUpgradeAuthorized: boolean;
-  readonly asUpgradeAuthorized: H256;
+  readonly asUpgradeAuthorized: {
+    readonly codeHash: H256;
+  } & Struct;
   readonly isDownwardMessagesReceived: boolean;
-  readonly asDownwardMessagesReceived: u32;
+  readonly asDownwardMessagesReceived: {
+    readonly count: u32;
+  } & Struct;
   readonly isDownwardMessagesProcessed: boolean;
-  readonly asDownwardMessagesProcessed: ITuple<[u64, H256]>;
+  readonly asDownwardMessagesProcessed: {
+    readonly weightUsed: u64;
+    readonly dmqHead: H256;
+  } & Struct;
   readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed';
 }
 
@@ -535,14 +562,6 @@
   readonly write: u64;
 }
 
-/** @name FrameSupportWeightsWeightToFeeCoefficient */
-export interface FrameSupportWeightsWeightToFeeCoefficient extends Struct {
-  readonly coeffInteger: u128;
-  readonly coeffFrac: Perbill;
-  readonly negative: bool;
-  readonly degree: u8;
-}
-
 /** @name FrameSystemAccountInfo */
 export interface FrameSystemAccountInfo extends Struct {
   readonly nonce: u32;
@@ -1175,9 +1194,10 @@
 export interface PalletRefungibleError extends Enum {
   readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean;
   readonly isWrongRefungiblePieces: boolean;
+  readonly isRepartitionWhileNotOwningAllPieces: boolean;
   readonly isRefungibleDisallowsNesting: boolean;
   readonly isSettingPropertiesNotAllowed: boolean;
-  readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
+  readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RepartitionWhileNotOwningAllPieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
 }
 
 /** @name PalletRefungibleItemData */
@@ -1208,7 +1228,7 @@
   } & Struct;
   readonly isMintNft: boolean;
   readonly asMintNft: {
-    readonly owner: AccountId32;
+    readonly owner: Option<AccountId32>;
     readonly collectionId: u32;
     readonly recipient: Option<AccountId32>;
     readonly royaltyAmount: Option<Permill>;
@@ -1243,13 +1263,13 @@
   readonly asAcceptResource: {
     readonly rmrkCollectionId: u32;
     readonly rmrkNftId: u32;
-    readonly rmrkResourceId: u32;
+    readonly resourceId: u32;
   } & Struct;
   readonly isAcceptResourceRemoval: boolean;
   readonly asAcceptResourceRemoval: {
     readonly rmrkCollectionId: u32;
     readonly rmrkNftId: u32;
-    readonly rmrkResourceId: u32;
+    readonly resourceId: u32;
   } & Struct;
   readonly isSetProperty: boolean;
   readonly asSetProperty: {
@@ -1297,6 +1317,7 @@
   readonly isNftTypeEncodeError: boolean;
   readonly isRmrkPropertyKeyIsTooLong: boolean;
   readonly isRmrkPropertyValueIsTooLong: boolean;
+  readonly isRmrkPropertyIsNotFound: boolean;
   readonly isUnableToDecodeRmrkData: boolean;
   readonly isCollectionNotEmpty: boolean;
   readonly isNoAvailableCollectionId: boolean;
@@ -1309,8 +1330,10 @@
   readonly isCannotSendToDescendentOrSelf: boolean;
   readonly isCannotAcceptNonOwnedNft: boolean;
   readonly isCannotRejectNonOwnedNft: boolean;
+  readonly isCannotRejectNonPendingNft: boolean;
   readonly isResourceNotPending: boolean;
-  readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'ResourceNotPending';
+  readonly isNoAvailableResourceId: boolean;
+  readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'RmrkPropertyIsNotFound' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'CannotRejectNonPendingNft' | 'ResourceNotPending' | 'NoAvailableResourceId';
 }
 
 /** @name PalletRmrkCoreEvent */
@@ -1416,7 +1439,13 @@
     readonly baseId: u32;
     readonly theme: RmrkTraitsTheme;
   } & Struct;
-  readonly type: 'CreateBase' | 'ThemeAdd';
+  readonly isEquippable: boolean;
+  readonly asEquippable: {
+    readonly baseId: u32;
+    readonly slotId: u32;
+    readonly equippables: RmrkTraitsPartEquippableList;
+  } & Struct;
+  readonly type: 'CreateBase' | 'ThemeAdd' | 'Equippable';
 }
 
 /** @name PalletRmrkEquipError */
@@ -1426,7 +1455,9 @@
   readonly isNoAvailablePartId: boolean;
   readonly isBaseDoesntExist: boolean;
   readonly isNeedsDefaultThemeFirst: boolean;
-  readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst';
+  readonly isPartDoesntExist: boolean;
+  readonly isNoEquippableOnFixedPart: boolean;
+  readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst' | 'PartDoesntExist' | 'NoEquippableOnFixedPart';
 }
 
 /** @name PalletRmrkEquipEvent */
@@ -1436,7 +1467,12 @@
     readonly issuer: AccountId32;
     readonly baseId: u32;
   } & Struct;
-  readonly type: 'BaseCreated';
+  readonly isEquippablesUpdated: boolean;
+  readonly asEquippablesUpdated: {
+    readonly baseId: u32;
+    readonly slotId: u32;
+  } & Struct;
+  readonly type: 'BaseCreated' | 'EquippablesUpdated';
 }
 
 /** @name PalletStructureCall */
@@ -1750,7 +1786,13 @@
     readonly collectionId: u32;
     readonly newLimit: UpDataStructsCollectionPermissions;
   } & Struct;
-  readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions';
+  readonly isRepartition: boolean;
+  readonly asRepartition: {
+    readonly collectionId: u32;
+    readonly token: u32;
+    readonly amount: u128;
+  } & Struct;
+  readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions' | 'Repartition';
 }
 
 /** @name PalletUniqueError */
@@ -1758,7 +1800,8 @@
   readonly isCollectionDecimalPointLimitExceeded: boolean;
   readonly isConfirmUnsetSponsorFail: boolean;
   readonly isEmptyArgument: boolean;
-  readonly type: 'CollectionDecimalPointLimitExceeded' | 'ConfirmUnsetSponsorFail' | 'EmptyArgument';
+  readonly isRepartitionCalledOnNonRefungibleCollection: boolean;
+  readonly type: 'CollectionDecimalPointLimitExceeded' | 'ConfirmUnsetSponsorFail' | 'EmptyArgument' | 'RepartitionCalledOnNonRefungibleCollection';
 }
 
 /** @name PalletUniqueRawEvent */
@@ -2431,7 +2474,6 @@
   readonly tokenOwner: bool;
   readonly collectionAdmin: bool;
   readonly restricted: Option<UpDataStructsOwnerRestrictedSet>;
-  readonly permissive: bool;
 }
 
 /** @name UpDataStructsOwnerRestrictedSet */
@@ -2469,6 +2511,13 @@
   readonly tokenOwner: bool;
 }
 
+/** @name UpDataStructsPropertyScope */
+export interface UpDataStructsPropertyScope extends Enum {
+  readonly isNone: boolean;
+  readonly isRmrk: boolean;
+  readonly type: 'None' | 'Rmrk';
+}
+
 /** @name UpDataStructsRpcCollection */
 export interface UpDataStructsRpcCollection extends Struct {
   readonly owner: AccountId32;
modifiedtests/src/interfaces/lookup.tsdiffbeforeafterboth
--- a/tests/src/interfaces/lookup.ts
+++ b/tests/src/interfaces/lookup.ts
@@ -114,11 +114,20 @@
   CumulusPalletParachainSystemEvent: {
     _enum: {
       ValidationFunctionStored: 'Null',
-      ValidationFunctionApplied: 'u32',
+      ValidationFunctionApplied: {
+        relayChainBlockNum: 'u32',
+      },
       ValidationFunctionDiscarded: 'Null',
-      UpgradeAuthorized: 'H256',
-      DownwardMessagesReceived: 'u32',
-      DownwardMessagesProcessed: '(u64,H256)'
+      UpgradeAuthorized: {
+        codeHash: 'H256',
+      },
+      DownwardMessagesReceived: {
+        count: 'u32',
+      },
+      DownwardMessagesProcessed: {
+        weightUsed: 'u64',
+        dmqHead: 'H256'
+      }
     }
   },
   /**
@@ -276,16 +285,7 @@
     _enum: ['V1Ancient', 'V2']
   },
   /**
-   * Lookup68: frame_support::weights::WeightToFeeCoefficient<Balance>
-   **/
-  FrameSupportWeightsWeightToFeeCoefficient: {
-    coeffInteger: 'u128',
-    coeffFrac: 'Perbill',
-    negative: 'bool',
-    degree: 'u8'
-  },
-  /**
-   * Lookup70: pallet_treasury::Proposal<sp_core::crypto::AccountId32, Balance>
+   * Lookup67: pallet_treasury::Proposal<sp_core::crypto::AccountId32, Balance>
    **/
   PalletTreasuryProposal: {
     proposer: 'AccountId32',
@@ -294,7 +294,7 @@
     bond: 'u128'
   },
   /**
-   * Lookup73: pallet_treasury::pallet::Call<T, I>
+   * Lookup70: pallet_treasury::pallet::Call<T, I>
    **/
   PalletTreasuryCall: {
     _enum: {
@@ -314,7 +314,7 @@
     }
   },
   /**
-   * Lookup75: pallet_treasury::pallet::Event<T, I>
+   * Lookup72: pallet_treasury::pallet::Event<T, I>
    **/
   PalletTreasuryEvent: {
     _enum: {
@@ -345,17 +345,17 @@
     }
   },
   /**
-   * Lookup78: frame_support::PalletId
+   * Lookup75: frame_support::PalletId
    **/
   FrameSupportPalletId: '[u8;8]',
   /**
-   * Lookup79: pallet_treasury::pallet::Error<T, I>
+   * Lookup76: pallet_treasury::pallet::Error<T, I>
    **/
   PalletTreasuryError: {
     _enum: ['InsufficientProposersBalance', 'InvalidIndex', 'TooManyApprovals', 'ProposalNotApproved']
   },
   /**
-   * Lookup80: pallet_sudo::pallet::Call<T>
+   * Lookup77: pallet_sudo::pallet::Call<T>
    **/
   PalletSudoCall: {
     _enum: {
@@ -379,7 +379,7 @@
     }
   },
   /**
-   * Lookup82: frame_system::pallet::Call<T>
+   * Lookup79: frame_system::pallet::Call<T>
    **/
   FrameSystemCall: {
     _enum: {
@@ -417,7 +417,7 @@
     }
   },
   /**
-   * Lookup85: orml_vesting::module::Call<T>
+   * Lookup83: orml_vesting::module::Call<T>
    **/
   OrmlVestingModuleCall: {
     _enum: {
@@ -436,7 +436,7 @@
     }
   },
   /**
-   * Lookup86: orml_vesting::VestingSchedule<BlockNumber, Balance>
+   * Lookup84: orml_vesting::VestingSchedule<BlockNumber, Balance>
    **/
   OrmlVestingVestingSchedule: {
     start: 'u32',
@@ -445,7 +445,7 @@
     perPeriod: 'Compact<u128>'
   },
   /**
-   * Lookup88: cumulus_pallet_xcmp_queue::pallet::Call<T>
+   * Lookup86: cumulus_pallet_xcmp_queue::pallet::Call<T>
    **/
   CumulusPalletXcmpQueueCall: {
     _enum: {
@@ -494,7 +494,7 @@
     }
   },
   /**
-   * Lookup89: pallet_xcm::pallet::Call<T>
+   * Lookup87: pallet_xcm::pallet::Call<T>
    **/
   PalletXcmCall: {
     _enum: {
@@ -548,7 +548,7 @@
     }
   },
   /**
-   * Lookup90: xcm::VersionedMultiLocation
+   * Lookup88: xcm::VersionedMultiLocation
    **/
   XcmVersionedMultiLocation: {
     _enum: {
@@ -557,7 +557,7 @@
     }
   },
   /**
-   * Lookup91: xcm::v0::multi_location::MultiLocation
+   * Lookup89: xcm::v0::multi_location::MultiLocation
    **/
   XcmV0MultiLocation: {
     _enum: {
@@ -573,7 +573,7 @@
     }
   },
   /**
-   * Lookup92: xcm::v0::junction::Junction
+   * Lookup90: xcm::v0::junction::Junction
    **/
   XcmV0Junction: {
     _enum: {
@@ -602,7 +602,7 @@
     }
   },
   /**
-   * Lookup93: xcm::v0::junction::NetworkId
+   * Lookup91: xcm::v0::junction::NetworkId
    **/
   XcmV0JunctionNetworkId: {
     _enum: {
@@ -613,7 +613,7 @@
     }
   },
   /**
-   * Lookup94: xcm::v0::junction::BodyId
+   * Lookup92: xcm::v0::junction::BodyId
    **/
   XcmV0JunctionBodyId: {
     _enum: {
@@ -627,7 +627,7 @@
     }
   },
   /**
-   * Lookup95: xcm::v0::junction::BodyPart
+   * Lookup93: xcm::v0::junction::BodyPart
    **/
   XcmV0JunctionBodyPart: {
     _enum: {
@@ -650,14 +650,14 @@
     }
   },
   /**
-   * Lookup96: xcm::v1::multilocation::MultiLocation
+   * Lookup94: xcm::v1::multilocation::MultiLocation
    **/
   XcmV1MultiLocation: {
     parents: 'u8',
     interior: 'XcmV1MultilocationJunctions'
   },
   /**
-   * Lookup97: xcm::v1::multilocation::Junctions
+   * Lookup95: xcm::v1::multilocation::Junctions
    **/
   XcmV1MultilocationJunctions: {
     _enum: {
@@ -673,7 +673,7 @@
     }
   },
   /**
-   * Lookup98: xcm::v1::junction::Junction
+   * Lookup96: xcm::v1::junction::Junction
    **/
   XcmV1Junction: {
     _enum: {
@@ -701,7 +701,7 @@
     }
   },
   /**
-   * Lookup99: xcm::VersionedXcm<Call>
+   * Lookup97: xcm::VersionedXcm<Call>
    **/
   XcmVersionedXcm: {
     _enum: {
@@ -711,7 +711,7 @@
     }
   },
   /**
-   * Lookup100: xcm::v0::Xcm<Call>
+   * Lookup98: xcm::v0::Xcm<Call>
    **/
   XcmV0Xcm: {
     _enum: {
@@ -765,7 +765,7 @@
     }
   },
   /**
-   * Lookup102: xcm::v0::multi_asset::MultiAsset
+   * Lookup100: xcm::v0::multi_asset::MultiAsset
    **/
   XcmV0MultiAsset: {
     _enum: {
@@ -804,7 +804,7 @@
     }
   },
   /**
-   * Lookup103: xcm::v1::multiasset::AssetInstance
+   * Lookup101: xcm::v1::multiasset::AssetInstance
    **/
   XcmV1MultiassetAssetInstance: {
     _enum: {
@@ -818,7 +818,7 @@
     }
   },
   /**
-   * Lookup106: xcm::v0::order::Order<Call>
+   * Lookup104: xcm::v0::order::Order<Call>
    **/
   XcmV0Order: {
     _enum: {
@@ -861,7 +861,7 @@
     }
   },
   /**
-   * Lookup108: xcm::v0::Response
+   * Lookup106: xcm::v0::Response
    **/
   XcmV0Response: {
     _enum: {
@@ -869,19 +869,19 @@
     }
   },
   /**
-   * Lookup109: xcm::v0::OriginKind
+   * Lookup107: xcm::v0::OriginKind
    **/
   XcmV0OriginKind: {
     _enum: ['Native', 'SovereignAccount', 'Superuser', 'Xcm']
   },
   /**
-   * Lookup110: xcm::double_encoded::DoubleEncoded<T>
+   * Lookup108: xcm::double_encoded::DoubleEncoded<T>
    **/
   XcmDoubleEncoded: {
     encoded: 'Bytes'
   },
   /**
-   * Lookup111: xcm::v1::Xcm<Call>
+   * Lookup109: xcm::v1::Xcm<Call>
    **/
   XcmV1Xcm: {
     _enum: {
@@ -940,18 +940,18 @@
     }
   },
   /**
-   * Lookup112: xcm::v1::multiasset::MultiAssets
+   * Lookup110: xcm::v1::multiasset::MultiAssets
    **/
   XcmV1MultiassetMultiAssets: 'Vec<XcmV1MultiAsset>',
   /**
-   * Lookup114: xcm::v1::multiasset::MultiAsset
+   * Lookup112: xcm::v1::multiasset::MultiAsset
    **/
   XcmV1MultiAsset: {
     id: 'XcmV1MultiassetAssetId',
     fun: 'XcmV1MultiassetFungibility'
   },
   /**
-   * Lookup115: xcm::v1::multiasset::AssetId
+   * Lookup113: xcm::v1::multiasset::AssetId
    **/
   XcmV1MultiassetAssetId: {
     _enum: {
@@ -960,7 +960,7 @@
     }
   },
   /**
-   * Lookup116: xcm::v1::multiasset::Fungibility
+   * Lookup114: xcm::v1::multiasset::Fungibility
    **/
   XcmV1MultiassetFungibility: {
     _enum: {
@@ -969,7 +969,7 @@
     }
   },
   /**
-   * Lookup118: xcm::v1::order::Order<Call>
+   * Lookup116: xcm::v1::order::Order<Call>
    **/
   XcmV1Order: {
     _enum: {
@@ -1014,7 +1014,7 @@
     }
   },
   /**
-   * Lookup119: xcm::v1::multiasset::MultiAssetFilter
+   * Lookup117: xcm::v1::multiasset::MultiAssetFilter
    **/
   XcmV1MultiassetMultiAssetFilter: {
     _enum: {
@@ -1023,7 +1023,7 @@
     }
   },
   /**
-   * Lookup120: xcm::v1::multiasset::WildMultiAsset
+   * Lookup118: xcm::v1::multiasset::WildMultiAsset
    **/
   XcmV1MultiassetWildMultiAsset: {
     _enum: {
@@ -1035,13 +1035,13 @@
     }
   },
   /**
-   * Lookup121: xcm::v1::multiasset::WildFungibility
+   * Lookup119: xcm::v1::multiasset::WildFungibility
    **/
   XcmV1MultiassetWildFungibility: {
     _enum: ['Fungible', 'NonFungible']
   },
   /**
-   * Lookup123: xcm::v1::Response
+   * Lookup121: xcm::v1::Response
    **/
   XcmV1Response: {
     _enum: {
@@ -1050,11 +1050,11 @@
     }
   },
   /**
-   * Lookup124: xcm::v2::Xcm<Call>
+   * Lookup122: xcm::v2::Xcm<Call>
    **/
   XcmV2Xcm: 'Vec<XcmV2Instruction>',
   /**
-   * Lookup126: xcm::v2::Instruction<Call>
+   * Lookup124: xcm::v2::Instruction<Call>
    **/
   XcmV2Instruction: {
     _enum: {
@@ -1152,7 +1152,7 @@
     }
   },
   /**
-   * Lookup127: xcm::v2::Response
+   * Lookup125: xcm::v2::Response
    **/
   XcmV2Response: {
     _enum: {
@@ -1163,7 +1163,7 @@
     }
   },
   /**
-   * Lookup130: xcm::v2::traits::Error
+   * Lookup128: xcm::v2::traits::Error
    **/
   XcmV2TraitsError: {
     _enum: {
@@ -1196,7 +1196,7 @@
     }
   },
   /**
-   * Lookup131: xcm::v2::WeightLimit
+   * Lookup129: xcm::v2::WeightLimit
    **/
   XcmV2WeightLimit: {
     _enum: {
@@ -1205,7 +1205,7 @@
     }
   },
   /**
-   * Lookup132: xcm::VersionedMultiAssets
+   * Lookup130: xcm::VersionedMultiAssets
    **/
   XcmVersionedMultiAssets: {
     _enum: {
@@ -1214,11 +1214,11 @@
     }
   },
   /**
-   * Lookup147: cumulus_pallet_xcm::pallet::Call<T>
+   * Lookup145: cumulus_pallet_xcm::pallet::Call<T>
    **/
   CumulusPalletXcmCall: 'Null',
   /**
-   * Lookup148: cumulus_pallet_dmp_queue::pallet::Call<T>
+   * Lookup146: cumulus_pallet_dmp_queue::pallet::Call<T>
    **/
   CumulusPalletDmpQueueCall: {
     _enum: {
@@ -1229,7 +1229,7 @@
     }
   },
   /**
-   * Lookup149: pallet_inflation::pallet::Call<T>
+   * Lookup147: pallet_inflation::pallet::Call<T>
    **/
   PalletInflationCall: {
     _enum: {
@@ -1239,7 +1239,7 @@
     }
   },
   /**
-   * Lookup150: pallet_unique::Call<T>
+   * Lookup148: pallet_unique::Call<T>
    **/
   PalletUniqueCall: {
     _enum: {
@@ -1361,12 +1361,17 @@
       },
       set_collection_permissions: {
         collectionId: 'u32',
-        newLimit: 'UpDataStructsCollectionPermissions'
+        newLimit: 'UpDataStructsCollectionPermissions',
+      },
+      repartition: {
+        collectionId: 'u32',
+        token: 'u32',
+        amount: 'u128'
       }
     }
   },
   /**
-   * Lookup156: up_data_structs::CollectionMode
+   * Lookup154: up_data_structs::CollectionMode
    **/
   UpDataStructsCollectionMode: {
     _enum: {
@@ -1376,7 +1381,7 @@
     }
   },
   /**
-   * Lookup157: up_data_structs::CreateCollectionData<sp_core::crypto::AccountId32>
+   * Lookup155: up_data_structs::CreateCollectionData<sp_core::crypto::AccountId32>
    **/
   UpDataStructsCreateCollectionData: {
     mode: 'UpDataStructsCollectionMode',
@@ -1391,13 +1396,13 @@
     properties: 'Vec<UpDataStructsProperty>'
   },
   /**
-   * Lookup159: up_data_structs::AccessMode
+   * Lookup157: up_data_structs::AccessMode
    **/
   UpDataStructsAccessMode: {
     _enum: ['Normal', 'AllowList']
   },
   /**
-   * Lookup162: up_data_structs::CollectionLimits
+   * Lookup160: up_data_structs::CollectionLimits
    **/
   UpDataStructsCollectionLimits: {
     accountTokenOwnershipLimit: 'Option<u32>',
@@ -1411,7 +1416,7 @@
     transfersEnabled: 'Option<bool>'
   },
   /**
-   * Lookup164: up_data_structs::SponsoringRateLimit
+   * Lookup162: up_data_structs::SponsoringRateLimit
    **/
   UpDataStructsSponsoringRateLimit: {
     _enum: {
@@ -1420,7 +1425,7 @@
     }
   },
   /**
-   * Lookup167: up_data_structs::CollectionPermissions
+   * Lookup165: up_data_structs::CollectionPermissions
    **/
   UpDataStructsCollectionPermissions: {
     access: 'Option<UpDataStructsAccessMode>',
@@ -1428,27 +1433,26 @@
     nesting: 'Option<UpDataStructsNestingPermissions>'
   },
   /**
-   * Lookup169: up_data_structs::NestingPermissions
+   * Lookup167: up_data_structs::NestingPermissions
    **/
   UpDataStructsNestingPermissions: {
     tokenOwner: 'bool',
     collectionAdmin: 'bool',
-    restricted: 'Option<UpDataStructsOwnerRestrictedSet>',
-    permissive: 'bool'
+    restricted: 'Option<UpDataStructsOwnerRestrictedSet>'
   },
   /**
-   * Lookup171: up_data_structs::OwnerRestrictedSet
+   * Lookup169: up_data_structs::OwnerRestrictedSet
    **/
   UpDataStructsOwnerRestrictedSet: 'BTreeSet<u32>',
   /**
-   * Lookup177: up_data_structs::PropertyKeyPermission
+   * Lookup175: up_data_structs::PropertyKeyPermission
    **/
   UpDataStructsPropertyKeyPermission: {
     key: 'Bytes',
     permission: 'UpDataStructsPropertyPermission'
   },
   /**
-   * Lookup179: up_data_structs::PropertyPermission
+   * Lookup177: up_data_structs::PropertyPermission
    **/
   UpDataStructsPropertyPermission: {
     mutable: 'bool',
@@ -1456,14 +1460,14 @@
     tokenOwner: 'bool'
   },
   /**
-   * Lookup182: up_data_structs::Property
+   * Lookup180: up_data_structs::Property
    **/
   UpDataStructsProperty: {
     key: 'Bytes',
     value: 'Bytes'
   },
   /**
-   * Lookup185: pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>
+   * Lookup183: pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>
    **/
   PalletEvmAccountBasicCrossAccountIdRepr: {
     _enum: {
@@ -1472,7 +1476,7 @@
     }
   },
   /**
-   * Lookup187: up_data_structs::CreateItemData
+   * Lookup185: up_data_structs::CreateItemData
    **/
   UpDataStructsCreateItemData: {
     _enum: {
@@ -1482,26 +1486,26 @@
     }
   },
   /**
-   * Lookup188: up_data_structs::CreateNftData
+   * Lookup186: up_data_structs::CreateNftData
    **/
   UpDataStructsCreateNftData: {
     properties: 'Vec<UpDataStructsProperty>'
   },
   /**
-   * Lookup189: up_data_structs::CreateFungibleData
+   * Lookup187: up_data_structs::CreateFungibleData
    **/
   UpDataStructsCreateFungibleData: {
     value: 'u128'
   },
   /**
-   * Lookup190: up_data_structs::CreateReFungibleData
+   * Lookup188: up_data_structs::CreateReFungibleData
    **/
   UpDataStructsCreateReFungibleData: {
     constData: 'Bytes',
     pieces: 'u128'
   },
   /**
-   * Lookup195: up_data_structs::CreateItemExData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+   * Lookup193: up_data_structs::CreateItemExData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
    **/
   UpDataStructsCreateItemExData: {
     _enum: {
@@ -1512,21 +1516,21 @@
     }
   },
   /**
-   * Lookup197: up_data_structs::CreateNftExData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+   * Lookup195: up_data_structs::CreateNftExData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
    **/
   UpDataStructsCreateNftExData: {
     properties: 'Vec<UpDataStructsProperty>',
     owner: 'PalletEvmAccountBasicCrossAccountIdRepr'
   },
   /**
-   * Lookup204: up_data_structs::CreateRefungibleExData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
+   * Lookup202: up_data_structs::CreateRefungibleExData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
    **/
   UpDataStructsCreateRefungibleExData: {
     constData: 'Bytes',
     users: 'BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>'
   },
   /**
-   * Lookup206: pallet_unique_scheduler::pallet::Call<T>
+   * Lookup204: pallet_unique_scheduler::pallet::Call<T>
    **/
   PalletUniqueSchedulerCall: {
     _enum: {
@@ -1550,7 +1554,7 @@
     }
   },
   /**
-   * Lookup208: frame_support::traits::schedule::MaybeHashed<opal_runtime::Call, primitive_types::H256>
+   * Lookup206: frame_support::traits::schedule::MaybeHashed<opal_runtime::Call, primitive_types::H256>
    **/
   FrameSupportScheduleMaybeHashed: {
     _enum: {
@@ -1559,15 +1563,15 @@
     }
   },
   /**
-   * Lookup209: pallet_template_transaction_payment::Call<T>
+   * Lookup207: pallet_template_transaction_payment::Call<T>
    **/
   PalletTemplateTransactionPaymentCall: 'Null',
   /**
-   * Lookup210: pallet_structure::pallet::Call<T>
+   * Lookup208: pallet_structure::pallet::Call<T>
    **/
   PalletStructureCall: 'Null',
   /**
-   * Lookup211: pallet_rmrk_core::pallet::Call<T>
+   * Lookup209: pallet_rmrk_core::pallet::Call<T>
    **/
   PalletRmrkCoreCall: {
     _enum: {
@@ -1587,7 +1591,7 @@
         collectionId: 'u32',
       },
       mint_nft: {
-        owner: 'AccountId32',
+        owner: 'Option<AccountId32>',
         collectionId: 'u32',
         recipient: 'Option<AccountId32>',
         royaltyAmount: 'Option<Permill>',
@@ -1617,12 +1621,12 @@
       accept_resource: {
         rmrkCollectionId: 'u32',
         rmrkNftId: 'u32',
-        rmrkResourceId: 'u32',
+        resourceId: 'u32',
       },
       accept_resource_removal: {
         rmrkCollectionId: 'u32',
         rmrkNftId: 'u32',
-        rmrkResourceId: 'u32',
+        resourceId: 'u32',
       },
       set_property: {
         rmrkCollectionId: 'Compact<u32>',
@@ -1658,7 +1662,7 @@
     }
   },
   /**
-   * Lookup217: rmrk_traits::resource::ResourceTypes<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup215: rmrk_traits::resource::ResourceTypes<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsResourceResourceTypes: {
     _enum: {
@@ -1668,7 +1672,7 @@
     }
   },
   /**
-   * Lookup219: rmrk_traits::resource::BasicResource<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup217: rmrk_traits::resource::BasicResource<frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsResourceBasicResource: {
     src: 'Option<Bytes>',
@@ -1677,7 +1681,7 @@
     thumb: 'Option<Bytes>'
   },
   /**
-   * Lookup221: rmrk_traits::resource::ComposableResource<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup219: rmrk_traits::resource::ComposableResource<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsResourceComposableResource: {
     parts: 'Vec<u32>',
@@ -1688,7 +1692,7 @@
     thumb: 'Option<Bytes>'
   },
   /**
-   * Lookup222: rmrk_traits::resource::SlotResource<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup220: rmrk_traits::resource::SlotResource<frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsResourceSlotResource: {
     base: 'u32',
@@ -1699,7 +1703,7 @@
     thumb: 'Option<Bytes>'
   },
   /**
-   * Lookup224: rmrk_traits::nft::AccountIdOrCollectionNftTuple<sp_core::crypto::AccountId32>
+   * Lookup222: rmrk_traits::nft::AccountIdOrCollectionNftTuple<sp_core::crypto::AccountId32>
    **/
   RmrkTraitsNftAccountIdOrCollectionNftTuple: {
     _enum: {
@@ -1708,7 +1712,7 @@
     }
   },
   /**
-   * Lookup228: pallet_rmrk_equip::pallet::Call<T>
+   * Lookup226: pallet_rmrk_equip::pallet::Call<T>
    **/
   PalletRmrkEquipCall: {
     _enum: {
@@ -1719,12 +1723,17 @@
       },
       theme_add: {
         baseId: 'u32',
-        theme: 'RmrkTraitsTheme'
+        theme: 'RmrkTraitsTheme',
+      },
+      equippable: {
+        baseId: 'u32',
+        slotId: 'u32',
+        equippables: 'RmrkTraitsPartEquippableList'
       }
     }
   },
   /**
-   * Lookup230: rmrk_traits::part::PartType<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup229: rmrk_traits::part::PartType<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsPartPartType: {
     _enum: {
@@ -1733,7 +1742,7 @@
     }
   },
   /**
-   * Lookup232: rmrk_traits::part::FixedPart<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup231: rmrk_traits::part::FixedPart<frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsPartFixedPart: {
     id: 'u32',
@@ -1741,7 +1750,7 @@
     src: 'Bytes'
   },
   /**
-   * Lookup233: rmrk_traits::part::SlotPart<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup232: rmrk_traits::part::SlotPart<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsPartSlotPart: {
     id: 'u32',
@@ -1750,7 +1759,7 @@
     z: 'u32'
   },
   /**
-   * Lookup234: rmrk_traits::part::EquippableList<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup233: rmrk_traits::part::EquippableList<frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsPartEquippableList: {
     _enum: {
@@ -1760,7 +1769,7 @@
     }
   },
   /**
-   * Lookup236: rmrk_traits::theme::Theme<frame_support::storage::bounded_vec::BoundedVec<T, S>, PropertyList>
+   * Lookup235: rmrk_traits::theme::Theme<frame_support::storage::bounded_vec::BoundedVec<T, S>, frame_support::storage::bounded_vec::BoundedVec<rmrk_traits::theme::ThemeProperty<frame_support::storage::bounded_vec::BoundedVec<T, S>>, S>>
    **/
   RmrkTraitsTheme: {
     name: 'Bytes',
@@ -1768,7 +1777,7 @@
     inherit: 'bool'
   },
   /**
-   * Lookup238: rmrk_traits::theme::ThemeProperty<frame_support::storage::bounded_vec::BoundedVec<T, S>>
+   * Lookup237: rmrk_traits::theme::ThemeProperty<frame_support::storage::bounded_vec::BoundedVec<T, S>>
    **/
   RmrkTraitsThemeThemeProperty: {
     key: 'Bytes',
@@ -2166,12 +2175,30 @@
    **/
   CumulusPalletDmpQueueEvent: {
     _enum: {
-      InvalidFormat: '[u8;32]',
-      UnsupportedVersion: '[u8;32]',
-      ExecutedDownward: '([u8;32],XcmV2TraitsOutcome)',
-      WeightExhausted: '([u8;32],u64,u64)',
-      OverweightEnqueued: '([u8;32],u64,u64)',
-      OverweightServiced: '(u64,u64)'
+      InvalidFormat: {
+        messageId: '[u8;32]',
+      },
+      UnsupportedVersion: {
+        messageId: '[u8;32]',
+      },
+      ExecutedDownward: {
+        messageId: '[u8;32]',
+        outcome: 'XcmV2TraitsOutcome',
+      },
+      WeightExhausted: {
+        messageId: '[u8;32]',
+        remainingWeight: 'u64',
+        requiredWeight: 'u64',
+      },
+      OverweightEnqueued: {
+        messageId: '[u8;32]',
+        overweightIndex: 'u64',
+        requiredWeight: 'u64',
+      },
+      OverweightServiced: {
+        overweightIndex: 'u64',
+        weightUsed: 'u64'
+      }
     }
   },
   /**
@@ -2332,7 +2359,11 @@
     _enum: {
       BaseCreated: {
         issuer: 'AccountId32',
-        baseId: 'u32'
+        baseId: 'u32',
+      },
+      EquippablesUpdated: {
+        baseId: 'u32',
+        slotId: 'u32'
       }
     }
   },
@@ -2597,7 +2628,7 @@
    * Lookup344: pallet_unique::Error<T>
    **/
   PalletUniqueError: {
-    _enum: ['CollectionDecimalPointLimitExceeded', 'ConfirmUnsetSponsorFail', 'EmptyArgument']
+    _enum: ['CollectionDecimalPointLimitExceeded', 'ConfirmUnsetSponsorFail', 'EmptyArgument', 'RepartitionCalledOnNonRefungibleCollection']
   },
   /**
    * Lookup347: pallet_unique_scheduler::ScheduledV3<frame_support::traits::schedule::MaybeHashed<opal_runtime::Call, primitive_types::H256>, BlockNumber, opal_runtime::OriginCaller, sp_core::crypto::AccountId32>
@@ -2926,7 +2957,7 @@
    * Lookup393: pallet_refungible::pallet::Error<T>
    **/
   PalletRefungibleError: {
-    _enum: ['NotRefungibleDataUsedToMintFungibleCollectionToken', 'WrongRefungiblePieces', 'RefungibleDisallowsNesting', 'SettingPropertiesNotAllowed']
+    _enum: ['NotRefungibleDataUsedToMintFungibleCollectionToken', 'WrongRefungiblePieces', 'RepartitionWhileNotOwningAllPieces', 'RefungibleDisallowsNesting', 'SettingPropertiesNotAllowed']
   },
   /**
    * Lookup394: pallet_nonfungible::ItemData<pallet_evm::account::BasicCrossAccountIdRepr<sp_core::crypto::AccountId32>>
@@ -2935,37 +2966,43 @@
     owner: 'PalletEvmAccountBasicCrossAccountIdRepr'
   },
   /**
-   * Lookup396: pallet_nonfungible::pallet::Error<T>
+   * Lookup396: up_data_structs::PropertyScope
+   **/
+  UpDataStructsPropertyScope: {
+    _enum: ['None', 'Rmrk']
+  },
+  /**
+   * Lookup398: pallet_nonfungible::pallet::Error<T>
    **/
   PalletNonfungibleError: {
     _enum: ['NotNonfungibleDataUsedToMintFungibleCollectionToken', 'NonfungibleItemsHaveNoAmount', 'CantBurnNftWithChildren']
   },
   /**
-   * Lookup397: pallet_structure::pallet::Error<T>
+   * Lookup399: pallet_structure::pallet::Error<T>
    **/
   PalletStructureError: {
     _enum: ['OuroborosDetected', 'DepthLimit', 'BreadthLimit', 'TokenNotFound']
   },
   /**
-   * Lookup398: pallet_rmrk_core::pallet::Error<T>
+   * Lookup400: pallet_rmrk_core::pallet::Error<T>
    **/
   PalletRmrkCoreError: {
-    _enum: ['CorruptedCollectionType', 'NftTypeEncodeError', 'RmrkPropertyKeyIsTooLong', 'RmrkPropertyValueIsTooLong', 'UnableToDecodeRmrkData', 'CollectionNotEmpty', 'NoAvailableCollectionId', 'NoAvailableNftId', 'CollectionUnknown', 'NoPermission', 'NonTransferable', 'CollectionFullOrLocked', 'ResourceDoesntExist', 'CannotSendToDescendentOrSelf', 'CannotAcceptNonOwnedNft', 'CannotRejectNonOwnedNft', 'ResourceNotPending']
+    _enum: ['CorruptedCollectionType', 'NftTypeEncodeError', 'RmrkPropertyKeyIsTooLong', 'RmrkPropertyValueIsTooLong', 'RmrkPropertyIsNotFound', 'UnableToDecodeRmrkData', 'CollectionNotEmpty', 'NoAvailableCollectionId', 'NoAvailableNftId', 'CollectionUnknown', 'NoPermission', 'NonTransferable', 'CollectionFullOrLocked', 'ResourceDoesntExist', 'CannotSendToDescendentOrSelf', 'CannotAcceptNonOwnedNft', 'CannotRejectNonOwnedNft', 'CannotRejectNonPendingNft', 'ResourceNotPending', 'NoAvailableResourceId']
   },
   /**
-   * Lookup400: pallet_rmrk_equip::pallet::Error<T>
+   * Lookup402: pallet_rmrk_equip::pallet::Error<T>
    **/
   PalletRmrkEquipError: {
-    _enum: ['PermissionError', 'NoAvailableBaseId', 'NoAvailablePartId', 'BaseDoesntExist', 'NeedsDefaultThemeFirst']
+    _enum: ['PermissionError', 'NoAvailableBaseId', 'NoAvailablePartId', 'BaseDoesntExist', 'NeedsDefaultThemeFirst', 'PartDoesntExist', 'NoEquippableOnFixedPart']
   },
   /**
-   * Lookup403: pallet_evm::pallet::Error<T>
+   * Lookup405: pallet_evm::pallet::Error<T>
    **/
   PalletEvmError: {
     _enum: ['BalanceLow', 'FeeOverflow', 'PaymentOverflow', 'WithdrawFailed', 'GasPriceTooLow', 'InvalidNonce']
   },
   /**
-   * Lookup406: fp_rpc::TransactionStatus
+   * Lookup408: fp_rpc::TransactionStatus
    **/
   FpRpcTransactionStatus: {
     transactionHash: 'H256',
@@ -2977,11 +3014,11 @@
     logsBloom: 'EthbloomBloom'
   },
   /**
-   * Lookup408: ethbloom::Bloom
+   * Lookup410: ethbloom::Bloom
    **/
   EthbloomBloom: '[u8;256]',
   /**
-   * Lookup410: ethereum::receipt::ReceiptV3
+   * Lookup412: ethereum::receipt::ReceiptV3
    **/
   EthereumReceiptReceiptV3: {
     _enum: {
@@ -2991,7 +3028,7 @@
     }
   },
   /**
-   * Lookup411: ethereum::receipt::EIP658ReceiptData
+   * Lookup413: ethereum::receipt::EIP658ReceiptData
    **/
   EthereumReceiptEip658ReceiptData: {
     statusCode: 'u8',
@@ -3000,7 +3037,7 @@
     logs: 'Vec<EthereumLog>'
   },
   /**
-   * Lookup412: ethereum::block::Block<ethereum::transaction::TransactionV2>
+   * Lookup414: ethereum::block::Block<ethereum::transaction::TransactionV2>
    **/
   EthereumBlock: {
     header: 'EthereumHeader',
@@ -3008,7 +3045,7 @@
     ommers: 'Vec<EthereumHeader>'
   },
   /**
-   * Lookup413: ethereum::header::Header
+   * Lookup415: ethereum::header::Header
    **/
   EthereumHeader: {
     parentHash: 'H256',
@@ -3028,41 +3065,41 @@
     nonce: 'EthereumTypesHashH64'
   },
   /**
-   * Lookup414: ethereum_types::hash::H64
+   * Lookup416: ethereum_types::hash::H64
    **/
   EthereumTypesHashH64: '[u8;8]',
   /**
-   * Lookup419: pallet_ethereum::pallet::Error<T>
+   * Lookup421: pallet_ethereum::pallet::Error<T>
    **/
   PalletEthereumError: {
     _enum: ['InvalidSignature', 'PreLogExists']
   },
   /**
-   * Lookup420: pallet_evm_coder_substrate::pallet::Error<T>
+   * Lookup422: pallet_evm_coder_substrate::pallet::Error<T>
    **/
   PalletEvmCoderSubstrateError: {
     _enum: ['OutOfGas', 'OutOfFund']
   },
   /**
-   * Lookup421: pallet_evm_contract_helpers::SponsoringModeT
+   * Lookup423: pallet_evm_contract_helpers::SponsoringModeT
    **/
   PalletEvmContractHelpersSponsoringModeT: {
     _enum: ['Disabled', 'Allowlisted', 'Generous']
   },
   /**
-   * Lookup423: pallet_evm_contract_helpers::pallet::Error<T>
+   * Lookup425: pallet_evm_contract_helpers::pallet::Error<T>
    **/
   PalletEvmContractHelpersError: {
     _enum: ['NoPermission']
   },
   /**
-   * Lookup424: pallet_evm_migration::pallet::Error<T>
+   * Lookup426: pallet_evm_migration::pallet::Error<T>
    **/
   PalletEvmMigrationError: {
     _enum: ['AccountNotEmpty', 'AccountIsNotMigrating']
   },
   /**
-   * Lookup426: sp_runtime::MultiSignature
+   * Lookup428: sp_runtime::MultiSignature
    **/
   SpRuntimeMultiSignature: {
     _enum: {
@@ -3072,43 +3109,43 @@
     }
   },
   /**
-   * Lookup427: sp_core::ed25519::Signature
+   * Lookup429: sp_core::ed25519::Signature
    **/
   SpCoreEd25519Signature: '[u8;64]',
   /**
-   * Lookup429: sp_core::sr25519::Signature
+   * Lookup431: sp_core::sr25519::Signature
    **/
   SpCoreSr25519Signature: '[u8;64]',
   /**
-   * Lookup430: sp_core::ecdsa::Signature
+   * Lookup432: sp_core::ecdsa::Signature
    **/
   SpCoreEcdsaSignature: '[u8;65]',
   /**
-   * Lookup433: frame_system::extensions::check_spec_version::CheckSpecVersion<T>
+   * Lookup435: frame_system::extensions::check_spec_version::CheckSpecVersion<T>
    **/
   FrameSystemExtensionsCheckSpecVersion: 'Null',
   /**
-   * Lookup434: frame_system::extensions::check_genesis::CheckGenesis<T>
+   * Lookup436: frame_system::extensions::check_genesis::CheckGenesis<T>
    **/
   FrameSystemExtensionsCheckGenesis: 'Null',
   /**
-   * Lookup437: frame_system::extensions::check_nonce::CheckNonce<T>
+   * Lookup439: frame_system::extensions::check_nonce::CheckNonce<T>
    **/
   FrameSystemExtensionsCheckNonce: 'Compact<u32>',
   /**
-   * Lookup438: frame_system::extensions::check_weight::CheckWeight<T>
+   * Lookup440: frame_system::extensions::check_weight::CheckWeight<T>
    **/
   FrameSystemExtensionsCheckWeight: 'Null',
   /**
-   * Lookup439: pallet_template_transaction_payment::ChargeTransactionPayment<opal_runtime::Runtime>
+   * Lookup441: pallet_template_transaction_payment::ChargeTransactionPayment<opal_runtime::Runtime>
    **/
   PalletTemplateTransactionPaymentChargeTransactionPayment: 'Compact<u128>',
   /**
-   * Lookup440: opal_runtime::Runtime
+   * Lookup442: opal_runtime::Runtime
    **/
   OpalRuntimeRuntime: 'Null',
   /**
-   * Lookup441: pallet_ethereum::FakeTransactionFinalizer<opal_runtime::Runtime>
+   * Lookup443: pallet_ethereum::FakeTransactionFinalizer<opal_runtime::Runtime>
    **/
   PalletEthereumFakeTransactionFinalizer: 'Null'
 };
modifiedtests/src/interfaces/registry.tsdiffbeforeafterboth
--- a/tests/src/interfaces/registry.ts
+++ b/tests/src/interfaces/registry.ts
@@ -1,7 +1,7 @@
 // Auto-generated via `yarn polkadot-types-from-defs`, do not edit
 /* eslint-disable */
 
-import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSupportWeightsWeightToFeeCoefficient, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUniqueSchedulerCall, PalletUniqueSchedulerError, PalletUniqueSchedulerEvent, PalletUniqueSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
+import type { CumulusPalletDmpQueueCall, CumulusPalletDmpQueueConfigData, CumulusPalletDmpQueueError, CumulusPalletDmpQueueEvent, CumulusPalletDmpQueuePageIndexData, CumulusPalletParachainSystemCall, CumulusPalletParachainSystemError, CumulusPalletParachainSystemEvent, CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot, CumulusPalletXcmCall, CumulusPalletXcmError, CumulusPalletXcmEvent, CumulusPalletXcmOrigin, CumulusPalletXcmpQueueCall, CumulusPalletXcmpQueueError, CumulusPalletXcmpQueueEvent, CumulusPalletXcmpQueueInboundChannelDetails, CumulusPalletXcmpQueueInboundState, CumulusPalletXcmpQueueOutboundChannelDetails, CumulusPalletXcmpQueueOutboundState, CumulusPalletXcmpQueueQueueConfigData, CumulusPrimitivesParachainInherentParachainInherentData, EthbloomBloom, EthereumBlock, EthereumHeader, EthereumLog, EthereumReceiptEip658ReceiptData, EthereumReceiptReceiptV3, EthereumTransactionAccessListItem, EthereumTransactionEip1559Transaction, EthereumTransactionEip2930Transaction, EthereumTransactionLegacyTransaction, EthereumTransactionTransactionAction, EthereumTransactionTransactionSignature, EthereumTransactionTransactionV2, EthereumTypesHashH64, EvmCoreErrorExitError, EvmCoreErrorExitFatal, EvmCoreErrorExitReason, EvmCoreErrorExitRevert, EvmCoreErrorExitSucceed, FpRpcTransactionStatus, FrameSupportDispatchRawOrigin, FrameSupportPalletId, FrameSupportScheduleLookupError, FrameSupportScheduleMaybeHashed, FrameSupportTokensMiscBalanceStatus, FrameSupportWeightsDispatchClass, FrameSupportWeightsDispatchInfo, FrameSupportWeightsPays, FrameSupportWeightsPerDispatchClassU32, FrameSupportWeightsPerDispatchClassU64, FrameSupportWeightsPerDispatchClassWeightsPerClass, FrameSupportWeightsRuntimeDbWeight, FrameSystemAccountInfo, FrameSystemCall, FrameSystemError, FrameSystemEvent, FrameSystemEventRecord, FrameSystemExtensionsCheckGenesis, FrameSystemExtensionsCheckNonce, FrameSystemExtensionsCheckSpecVersion, FrameSystemExtensionsCheckWeight, FrameSystemLastRuntimeUpgradeInfo, FrameSystemLimitsBlockLength, FrameSystemLimitsBlockWeights, FrameSystemLimitsWeightsPerClass, FrameSystemPhase, OpalRuntimeOriginCaller, OpalRuntimeRuntime, OrmlVestingModuleCall, OrmlVestingModuleError, OrmlVestingModuleEvent, OrmlVestingVestingSchedule, PalletBalancesAccountData, PalletBalancesBalanceLock, PalletBalancesCall, PalletBalancesError, PalletBalancesEvent, PalletBalancesReasons, PalletBalancesReleases, PalletBalancesReserveData, PalletCommonError, PalletCommonEvent, PalletEthereumCall, PalletEthereumError, PalletEthereumEvent, PalletEthereumFakeTransactionFinalizer, PalletEthereumRawOrigin, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmCall, PalletEvmCoderSubstrateError, PalletEvmContractHelpersError, PalletEvmContractHelpersSponsoringModeT, PalletEvmError, PalletEvmEvent, PalletEvmMigrationCall, PalletEvmMigrationError, PalletFungibleError, PalletInflationCall, PalletNonfungibleError, PalletNonfungibleItemData, PalletRefungibleError, PalletRefungibleItemData, PalletRmrkCoreCall, PalletRmrkCoreError, PalletRmrkCoreEvent, PalletRmrkEquipCall, PalletRmrkEquipError, PalletRmrkEquipEvent, PalletStructureCall, PalletStructureError, PalletStructureEvent, PalletSudoCall, PalletSudoError, PalletSudoEvent, PalletTemplateTransactionPaymentCall, PalletTemplateTransactionPaymentChargeTransactionPayment, PalletTimestampCall, PalletTransactionPaymentReleases, PalletTreasuryCall, PalletTreasuryError, PalletTreasuryEvent, PalletTreasuryProposal, PalletUniqueCall, PalletUniqueError, PalletUniqueRawEvent, PalletUniqueSchedulerCall, PalletUniqueSchedulerError, PalletUniqueSchedulerEvent, PalletUniqueSchedulerScheduledV3, PalletXcmCall, PalletXcmError, PalletXcmEvent, PalletXcmOrigin, PhantomTypeUpDataStructs, PolkadotCorePrimitivesInboundDownwardMessage, PolkadotCorePrimitivesInboundHrmpMessage, PolkadotCorePrimitivesOutboundHrmpMessage, PolkadotParachainPrimitivesXcmpMessageFormat, PolkadotPrimitivesV2AbridgedHostConfiguration, PolkadotPrimitivesV2AbridgedHrmpChannel, PolkadotPrimitivesV2PersistedValidationData, PolkadotPrimitivesV2UpgradeRestriction, RmrkTraitsBaseBaseInfo, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftAccountIdOrCollectionNftTuple, RmrkTraitsNftNftChild, RmrkTraitsNftNftInfo, RmrkTraitsNftRoyaltyInfo, RmrkTraitsPartEquippableList, RmrkTraitsPartFixedPart, RmrkTraitsPartPartType, RmrkTraitsPartSlotPart, RmrkTraitsPropertyPropertyInfo, RmrkTraitsResourceBasicResource, RmrkTraitsResourceComposableResource, RmrkTraitsResourceResourceInfo, RmrkTraitsResourceResourceTypes, RmrkTraitsResourceSlotResource, RmrkTraitsTheme, RmrkTraitsThemeThemeProperty, SpCoreEcdsaSignature, SpCoreEd25519Signature, SpCoreSr25519Signature, SpCoreVoid, SpRuntimeArithmeticError, SpRuntimeDigest, SpRuntimeDigestDigestItem, SpRuntimeDispatchError, SpRuntimeModuleError, SpRuntimeMultiSignature, SpRuntimeTokenError, SpRuntimeTransactionalError, SpTrieStorageProof, SpVersionRuntimeVersion, UpDataStructsAccessMode, UpDataStructsCollection, UpDataStructsCollectionLimits, UpDataStructsCollectionMode, UpDataStructsCollectionPermissions, UpDataStructsCollectionStats, UpDataStructsCreateCollectionData, UpDataStructsCreateFungibleData, UpDataStructsCreateItemData, UpDataStructsCreateItemExData, UpDataStructsCreateNftData, UpDataStructsCreateNftExData, UpDataStructsCreateReFungibleData, UpDataStructsCreateRefungibleExData, UpDataStructsNestingPermissions, UpDataStructsOwnerRestrictedSet, UpDataStructsProperties, UpDataStructsPropertiesMapBoundedVec, UpDataStructsPropertiesMapPropertyPermission, UpDataStructsProperty, UpDataStructsPropertyKeyPermission, UpDataStructsPropertyPermission, UpDataStructsPropertyScope, UpDataStructsRpcCollection, UpDataStructsSponsoringRateLimit, UpDataStructsSponsorshipState, UpDataStructsTokenChild, UpDataStructsTokenData, XcmDoubleEncoded, XcmV0Junction, XcmV0JunctionBodyId, XcmV0JunctionBodyPart, XcmV0JunctionNetworkId, XcmV0MultiAsset, XcmV0MultiLocation, XcmV0Order, XcmV0OriginKind, XcmV0Response, XcmV0Xcm, XcmV1Junction, XcmV1MultiAsset, XcmV1MultiLocation, XcmV1MultiassetAssetId, XcmV1MultiassetAssetInstance, XcmV1MultiassetFungibility, XcmV1MultiassetMultiAssetFilter, XcmV1MultiassetMultiAssets, XcmV1MultiassetWildFungibility, XcmV1MultiassetWildMultiAsset, XcmV1MultilocationJunctions, XcmV1Order, XcmV1Response, XcmV1Xcm, XcmV2Instruction, XcmV2Response, XcmV2TraitsError, XcmV2TraitsOutcome, XcmV2WeightLimit, XcmV2Xcm, XcmVersionedMultiAssets, XcmVersionedMultiLocation, XcmVersionedXcm } from '@polkadot/types/lookup';
 
 declare module '@polkadot/types/types/registry' {
   export interface InterfaceTypes {
@@ -59,7 +59,6 @@
     FrameSupportWeightsPerDispatchClassU64: FrameSupportWeightsPerDispatchClassU64;
     FrameSupportWeightsPerDispatchClassWeightsPerClass: FrameSupportWeightsPerDispatchClassWeightsPerClass;
     FrameSupportWeightsRuntimeDbWeight: FrameSupportWeightsRuntimeDbWeight;
-    FrameSupportWeightsWeightToFeeCoefficient: FrameSupportWeightsWeightToFeeCoefficient;
     FrameSystemAccountInfo: FrameSystemAccountInfo;
     FrameSystemCall: FrameSystemCall;
     FrameSystemError: FrameSystemError;
@@ -204,6 +203,7 @@
     UpDataStructsProperty: UpDataStructsProperty;
     UpDataStructsPropertyKeyPermission: UpDataStructsPropertyKeyPermission;
     UpDataStructsPropertyPermission: UpDataStructsPropertyPermission;
+    UpDataStructsPropertyScope: UpDataStructsPropertyScope;
     UpDataStructsRpcCollection: UpDataStructsRpcCollection;
     UpDataStructsSponsoringRateLimit: UpDataStructsSponsoringRateLimit;
     UpDataStructsSponsorshipState: UpDataStructsSponsorshipState;
modifiedtests/src/interfaces/types-lookup.tsdiffbeforeafterboth
--- a/tests/src/interfaces/types-lookup.ts
+++ b/tests/src/interfaces/types-lookup.ts
@@ -108,14 +108,23 @@
   export interface CumulusPalletParachainSystemEvent extends Enum {
     readonly isValidationFunctionStored: boolean;
     readonly isValidationFunctionApplied: boolean;
-    readonly asValidationFunctionApplied: u32;
+    readonly asValidationFunctionApplied: {
+      readonly relayChainBlockNum: u32;
+    } & Struct;
     readonly isValidationFunctionDiscarded: boolean;
     readonly isUpgradeAuthorized: boolean;
-    readonly asUpgradeAuthorized: H256;
+    readonly asUpgradeAuthorized: {
+      readonly codeHash: H256;
+    } & Struct;
     readonly isDownwardMessagesReceived: boolean;
-    readonly asDownwardMessagesReceived: u32;
+    readonly asDownwardMessagesReceived: {
+      readonly count: u32;
+    } & Struct;
     readonly isDownwardMessagesProcessed: boolean;
-    readonly asDownwardMessagesProcessed: ITuple<[u64, H256]>;
+    readonly asDownwardMessagesProcessed: {
+      readonly weightUsed: u64;
+      readonly dmqHead: H256;
+    } & Struct;
     readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed';
   }
 
@@ -300,15 +309,7 @@
     readonly type: 'V1Ancient' | 'V2';
   }
 
-  /** @name FrameSupportWeightsWeightToFeeCoefficient (68) */
-  export interface FrameSupportWeightsWeightToFeeCoefficient extends Struct {
-    readonly coeffInteger: u128;
-    readonly coeffFrac: Perbill;
-    readonly negative: bool;
-    readonly degree: u8;
-  }
-
-  /** @name PalletTreasuryProposal (70) */
+  /** @name PalletTreasuryProposal (67) */
   export interface PalletTreasuryProposal extends Struct {
     readonly proposer: AccountId32;
     readonly value: u128;
@@ -316,7 +317,7 @@
     readonly bond: u128;
   }
 
-  /** @name PalletTreasuryCall (73) */
+  /** @name PalletTreasuryCall (70) */
   export interface PalletTreasuryCall extends Enum {
     readonly isProposeSpend: boolean;
     readonly asProposeSpend: {
@@ -338,7 +339,7 @@
     readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'RemoveApproval';
   }
 
-  /** @name PalletTreasuryEvent (75) */
+  /** @name PalletTreasuryEvent (72) */
   export interface PalletTreasuryEvent extends Enum {
     readonly isProposed: boolean;
     readonly asProposed: {
@@ -374,10 +375,10 @@
     readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit';
   }
 
-  /** @name FrameSupportPalletId (78) */
+  /** @name FrameSupportPalletId (75) */
   export interface FrameSupportPalletId extends U8aFixed {}
 
-  /** @name PalletTreasuryError (79) */
+  /** @name PalletTreasuryError (76) */
   export interface PalletTreasuryError extends Enum {
     readonly isInsufficientProposersBalance: boolean;
     readonly isInvalidIndex: boolean;
@@ -386,7 +387,7 @@
     readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'ProposalNotApproved';
   }
 
-  /** @name PalletSudoCall (80) */
+  /** @name PalletSudoCall (77) */
   export interface PalletSudoCall extends Enum {
     readonly isSudo: boolean;
     readonly asSudo: {
@@ -409,7 +410,7 @@
     readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs';
   }
 
-  /** @name FrameSystemCall (82) */
+  /** @name FrameSystemCall (79) */
   export interface FrameSystemCall extends Enum {
     readonly isFillBlock: boolean;
     readonly asFillBlock: {
@@ -451,7 +452,7 @@
     readonly type: 'FillBlock' | 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent';
   }
 
-  /** @name OrmlVestingModuleCall (85) */
+  /** @name OrmlVestingModuleCall (83) */
   export interface OrmlVestingModuleCall extends Enum {
     readonly isClaim: boolean;
     readonly isVestedTransfer: boolean;
@@ -471,7 +472,7 @@
     readonly type: 'Claim' | 'VestedTransfer' | 'UpdateVestingSchedules' | 'ClaimFor';
   }
 
-  /** @name OrmlVestingVestingSchedule (86) */
+  /** @name OrmlVestingVestingSchedule (84) */
   export interface OrmlVestingVestingSchedule extends Struct {
     readonly start: u32;
     readonly period: u32;
@@ -479,7 +480,7 @@
     readonly perPeriod: Compact<u128>;
   }
 
-  /** @name CumulusPalletXcmpQueueCall (88) */
+  /** @name CumulusPalletXcmpQueueCall (86) */
   export interface CumulusPalletXcmpQueueCall extends Enum {
     readonly isServiceOverweight: boolean;
     readonly asServiceOverweight: {
@@ -515,7 +516,7 @@
     readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight';
   }
 
-  /** @name PalletXcmCall (89) */
+  /** @name PalletXcmCall (87) */
   export interface PalletXcmCall extends Enum {
     readonly isSend: boolean;
     readonly asSend: {
@@ -577,7 +578,7 @@
     readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets';
   }
 
-  /** @name XcmVersionedMultiLocation (90) */
+  /** @name XcmVersionedMultiLocation (88) */
   export interface XcmVersionedMultiLocation extends Enum {
     readonly isV0: boolean;
     readonly asV0: XcmV0MultiLocation;
@@ -586,7 +587,7 @@
     readonly type: 'V0' | 'V1';
   }
 
-  /** @name XcmV0MultiLocation (91) */
+  /** @name XcmV0MultiLocation (89) */
   export interface XcmV0MultiLocation extends Enum {
     readonly isNull: boolean;
     readonly isX1: boolean;
@@ -608,7 +609,7 @@
     readonly type: 'Null' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';
   }
 
-  /** @name XcmV0Junction (92) */
+  /** @name XcmV0Junction (90) */
   export interface XcmV0Junction extends Enum {
     readonly isParent: boolean;
     readonly isParachain: boolean;
@@ -643,7 +644,7 @@
     readonly type: 'Parent' | 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';
   }
 
-  /** @name XcmV0JunctionNetworkId (93) */
+  /** @name XcmV0JunctionNetworkId (91) */
   export interface XcmV0JunctionNetworkId extends Enum {
     readonly isAny: boolean;
     readonly isNamed: boolean;
@@ -653,7 +654,7 @@
     readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama';
   }
 
-  /** @name XcmV0JunctionBodyId (94) */
+  /** @name XcmV0JunctionBodyId (92) */
   export interface XcmV0JunctionBodyId extends Enum {
     readonly isUnit: boolean;
     readonly isNamed: boolean;
@@ -667,7 +668,7 @@
     readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial';
   }
 
-  /** @name XcmV0JunctionBodyPart (95) */
+  /** @name XcmV0JunctionBodyPart (93) */
   export interface XcmV0JunctionBodyPart extends Enum {
     readonly isVoice: boolean;
     readonly isMembers: boolean;
@@ -692,13 +693,13 @@
     readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion';
   }
 
-  /** @name XcmV1MultiLocation (96) */
+  /** @name XcmV1MultiLocation (94) */
   export interface XcmV1MultiLocation extends Struct {
     readonly parents: u8;
     readonly interior: XcmV1MultilocationJunctions;
   }
 
-  /** @name XcmV1MultilocationJunctions (97) */
+  /** @name XcmV1MultilocationJunctions (95) */
   export interface XcmV1MultilocationJunctions extends Enum {
     readonly isHere: boolean;
     readonly isX1: boolean;
@@ -720,7 +721,7 @@
     readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';
   }
 
-  /** @name XcmV1Junction (98) */
+  /** @name XcmV1Junction (96) */
   export interface XcmV1Junction extends Enum {
     readonly isParachain: boolean;
     readonly asParachain: Compact<u32>;
@@ -754,7 +755,7 @@
     readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';
   }
 
-  /** @name XcmVersionedXcm (99) */
+  /** @name XcmVersionedXcm (97) */
   export interface XcmVersionedXcm extends Enum {
     readonly isV0: boolean;
     readonly asV0: XcmV0Xcm;
@@ -765,7 +766,7 @@
     readonly type: 'V0' | 'V1' | 'V2';
   }
 
-  /** @name XcmV0Xcm (100) */
+  /** @name XcmV0Xcm (98) */
   export interface XcmV0Xcm extends Enum {
     readonly isWithdrawAsset: boolean;
     readonly asWithdrawAsset: {
@@ -828,7 +829,7 @@
     readonly type: 'WithdrawAsset' | 'ReserveAssetDeposit' | 'TeleportAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom';
   }
 
-  /** @name XcmV0MultiAsset (102) */
+  /** @name XcmV0MultiAsset (100) */
   export interface XcmV0MultiAsset extends Enum {
     readonly isNone: boolean;
     readonly isAll: boolean;
@@ -873,7 +874,7 @@
     readonly type: 'None' | 'All' | 'AllFungible' | 'AllNonFungible' | 'AllAbstractFungible' | 'AllAbstractNonFungible' | 'AllConcreteFungible' | 'AllConcreteNonFungible' | 'AbstractFungible' | 'AbstractNonFungible' | 'ConcreteFungible' | 'ConcreteNonFungible';
   }
 
-  /** @name XcmV1MultiassetAssetInstance (103) */
+  /** @name XcmV1MultiassetAssetInstance (101) */
   export interface XcmV1MultiassetAssetInstance extends Enum {
     readonly isUndefined: boolean;
     readonly isIndex: boolean;
@@ -891,7 +892,7 @@
     readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob';
   }
 
-  /** @name XcmV0Order (106) */
+  /** @name XcmV0Order (104) */
   export interface XcmV0Order extends Enum {
     readonly isNull: boolean;
     readonly isDepositAsset: boolean;
@@ -939,14 +940,14 @@
     readonly type: 'Null' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';
   }
 
-  /** @name XcmV0Response (108) */
+  /** @name XcmV0Response (106) */
   export interface XcmV0Response extends Enum {
     readonly isAssets: boolean;
     readonly asAssets: Vec<XcmV0MultiAsset>;
     readonly type: 'Assets';
   }
 
-  /** @name XcmV0OriginKind (109) */
+  /** @name XcmV0OriginKind (107) */
   export interface XcmV0OriginKind extends Enum {
     readonly isNative: boolean;
     readonly isSovereignAccount: boolean;
@@ -955,12 +956,12 @@
     readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm';
   }
 
-  /** @name XcmDoubleEncoded (110) */
+  /** @name XcmDoubleEncoded (108) */
   export interface XcmDoubleEncoded extends Struct {
     readonly encoded: Bytes;
   }
 
-  /** @name XcmV1Xcm (111) */
+  /** @name XcmV1Xcm (109) */
   export interface XcmV1Xcm extends Enum {
     readonly isWithdrawAsset: boolean;
     readonly asWithdrawAsset: {
@@ -1029,16 +1030,16 @@
     readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom' | 'SubscribeVersion' | 'UnsubscribeVersion';
   }
 
-  /** @name XcmV1MultiassetMultiAssets (112) */
+  /** @name XcmV1MultiassetMultiAssets (110) */
   export interface XcmV1MultiassetMultiAssets extends Vec<XcmV1MultiAsset> {}
 
-  /** @name XcmV1MultiAsset (114) */
+  /** @name XcmV1MultiAsset (112) */
   export interface XcmV1MultiAsset extends Struct {
     readonly id: XcmV1MultiassetAssetId;
     readonly fun: XcmV1MultiassetFungibility;
   }
 
-  /** @name XcmV1MultiassetAssetId (115) */
+  /** @name XcmV1MultiassetAssetId (113) */
   export interface XcmV1MultiassetAssetId extends Enum {
     readonly isConcrete: boolean;
     readonly asConcrete: XcmV1MultiLocation;
@@ -1047,7 +1048,7 @@
     readonly type: 'Concrete' | 'Abstract';
   }
 
-  /** @name XcmV1MultiassetFungibility (116) */
+  /** @name XcmV1MultiassetFungibility (114) */
   export interface XcmV1MultiassetFungibility extends Enum {
     readonly isFungible: boolean;
     readonly asFungible: Compact<u128>;
@@ -1056,7 +1057,7 @@
     readonly type: 'Fungible' | 'NonFungible';
   }
 
-  /** @name XcmV1Order (118) */
+  /** @name XcmV1Order (116) */
   export interface XcmV1Order extends Enum {
     readonly isNoop: boolean;
     readonly isDepositAsset: boolean;
@@ -1106,7 +1107,7 @@
     readonly type: 'Noop' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';
   }
 
-  /** @name XcmV1MultiassetMultiAssetFilter (119) */
+  /** @name XcmV1MultiassetMultiAssetFilter (117) */
   export interface XcmV1MultiassetMultiAssetFilter extends Enum {
     readonly isDefinite: boolean;
     readonly asDefinite: XcmV1MultiassetMultiAssets;
@@ -1115,7 +1116,7 @@
     readonly type: 'Definite' | 'Wild';
   }
 
-  /** @name XcmV1MultiassetWildMultiAsset (120) */
+  /** @name XcmV1MultiassetWildMultiAsset (118) */
   export interface XcmV1MultiassetWildMultiAsset extends Enum {
     readonly isAll: boolean;
     readonly isAllOf: boolean;
@@ -1126,14 +1127,14 @@
     readonly type: 'All' | 'AllOf';
   }
 
-  /** @name XcmV1MultiassetWildFungibility (121) */
+  /** @name XcmV1MultiassetWildFungibility (119) */
   export interface XcmV1MultiassetWildFungibility extends Enum {
     readonly isFungible: boolean;
     readonly isNonFungible: boolean;
     readonly type: 'Fungible' | 'NonFungible';
   }
 
-  /** @name XcmV1Response (123) */
+  /** @name XcmV1Response (121) */
   export interface XcmV1Response extends Enum {
     readonly isAssets: boolean;
     readonly asAssets: XcmV1MultiassetMultiAssets;
@@ -1142,10 +1143,10 @@
     readonly type: 'Assets' | 'Version';
   }
 
-  /** @name XcmV2Xcm (124) */
+  /** @name XcmV2Xcm (122) */
   export interface XcmV2Xcm extends Vec<XcmV2Instruction> {}
 
-  /** @name XcmV2Instruction (126) */
+  /** @name XcmV2Instruction (124) */
   export interface XcmV2Instruction extends Enum {
     readonly isWithdrawAsset: boolean;
     readonly asWithdrawAsset: XcmV1MultiassetMultiAssets;
@@ -1265,7 +1266,7 @@
     readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'ClearOrigin' | 'DescendOrigin' | 'ReportError' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution' | 'RefundSurplus' | 'SetErrorHandler' | 'SetAppendix' | 'ClearError' | 'ClaimAsset' | 'Trap' | 'SubscribeVersion' | 'UnsubscribeVersion';
   }
 
-  /** @name XcmV2Response (127) */
+  /** @name XcmV2Response (125) */
   export interface XcmV2Response extends Enum {
     readonly isNull: boolean;
     readonly isAssets: boolean;
@@ -1277,7 +1278,7 @@
     readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version';
   }
 
-  /** @name XcmV2TraitsError (130) */
+  /** @name XcmV2TraitsError (128) */
   export interface XcmV2TraitsError extends Enum {
     readonly isOverflow: boolean;
     readonly isUnimplemented: boolean;
@@ -1310,7 +1311,7 @@
     readonly type: 'Overflow' | 'Unimplemented' | 'UntrustedReserveLocation' | 'UntrustedTeleportLocation' | 'MultiLocationFull' | 'MultiLocationNotInvertible' | 'BadOrigin' | 'InvalidLocation' | 'AssetNotFound' | 'FailedToTransactAsset' | 'NotWithdrawable' | 'LocationCannotHold' | 'ExceedsMaxMessageSize' | 'DestinationUnsupported' | 'Transport' | 'Unroutable' | 'UnknownClaim' | 'FailedToDecode' | 'MaxWeightInvalid' | 'NotHoldingFees' | 'TooExpensive' | 'Trap' | 'UnhandledXcmVersion' | 'WeightLimitReached' | 'Barrier' | 'WeightNotComputable';
   }
 
-  /** @name XcmV2WeightLimit (131) */
+  /** @name XcmV2WeightLimit (129) */
   export interface XcmV2WeightLimit extends Enum {
     readonly isUnlimited: boolean;
     readonly isLimited: boolean;
@@ -1318,7 +1319,7 @@
     readonly type: 'Unlimited' | 'Limited';
   }
 
-  /** @name XcmVersionedMultiAssets (132) */
+  /** @name XcmVersionedMultiAssets (130) */
   export interface XcmVersionedMultiAssets extends Enum {
     readonly isV0: boolean;
     readonly asV0: Vec<XcmV0MultiAsset>;
@@ -1327,10 +1328,10 @@
     readonly type: 'V0' | 'V1';
   }
 
-  /** @name CumulusPalletXcmCall (147) */
+  /** @name CumulusPalletXcmCall (145) */
   export type CumulusPalletXcmCall = Null;
 
-  /** @name CumulusPalletDmpQueueCall (148) */
+  /** @name CumulusPalletDmpQueueCall (146) */
   export interface CumulusPalletDmpQueueCall extends Enum {
     readonly isServiceOverweight: boolean;
     readonly asServiceOverweight: {
@@ -1340,7 +1341,7 @@
     readonly type: 'ServiceOverweight';
   }
 
-  /** @name PalletInflationCall (149) */
+  /** @name PalletInflationCall (147) */
   export interface PalletInflationCall extends Enum {
     readonly isStartInflation: boolean;
     readonly asStartInflation: {
@@ -1349,7 +1350,7 @@
     readonly type: 'StartInflation';
   }
 
-  /** @name PalletUniqueCall (150) */
+  /** @name PalletUniqueCall (148) */
   export interface PalletUniqueCall extends Enum {
     readonly isCreateCollection: boolean;
     readonly asCreateCollection: {
@@ -1498,10 +1499,16 @@
       readonly collectionId: u32;
       readonly newLimit: UpDataStructsCollectionPermissions;
     } & Struct;
-    readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions';
+    readonly isRepartition: boolean;
+    readonly asRepartition: {
+      readonly collectionId: u32;
+      readonly token: u32;
+      readonly amount: u128;
+    } & Struct;
+    readonly type: 'CreateCollection' | 'CreateCollectionEx' | 'DestroyCollection' | 'AddToAllowList' | 'RemoveFromAllowList' | 'ChangeCollectionOwner' | 'AddCollectionAdmin' | 'RemoveCollectionAdmin' | 'SetCollectionSponsor' | 'ConfirmSponsorship' | 'RemoveCollectionSponsor' | 'CreateItem' | 'CreateMultipleItems' | 'SetCollectionProperties' | 'DeleteCollectionProperties' | 'SetTokenProperties' | 'DeleteTokenProperties' | 'SetTokenPropertyPermissions' | 'CreateMultipleItemsEx' | 'SetTransfersEnabledFlag' | 'BurnItem' | 'BurnFrom' | 'Transfer' | 'Approve' | 'TransferFrom' | 'SetCollectionLimits' | 'SetCollectionPermissions' | 'Repartition';
   }
 
-  /** @name UpDataStructsCollectionMode (156) */
+  /** @name UpDataStructsCollectionMode (154) */
   export interface UpDataStructsCollectionMode extends Enum {
     readonly isNft: boolean;
     readonly isFungible: boolean;
@@ -1510,7 +1517,7 @@
     readonly type: 'Nft' | 'Fungible' | 'ReFungible';
   }
 
-  /** @name UpDataStructsCreateCollectionData (157) */
+  /** @name UpDataStructsCreateCollectionData (155) */
   export interface UpDataStructsCreateCollectionData extends Struct {
     readonly mode: UpDataStructsCollectionMode;
     readonly access: Option<UpDataStructsAccessMode>;
@@ -1524,14 +1531,14 @@
     readonly properties: Vec<UpDataStructsProperty>;
   }
 
-  /** @name UpDataStructsAccessMode (159) */
+  /** @name UpDataStructsAccessMode (157) */
   export interface UpDataStructsAccessMode extends Enum {
     readonly isNormal: boolean;
     readonly isAllowList: boolean;
     readonly type: 'Normal' | 'AllowList';
   }
 
-  /** @name UpDataStructsCollectionLimits (162) */
+  /** @name UpDataStructsCollectionLimits (160) */
   export interface UpDataStructsCollectionLimits extends Struct {
     readonly accountTokenOwnershipLimit: Option<u32>;
     readonly sponsoredDataSize: Option<u32>;
@@ -1544,7 +1551,7 @@
     readonly transfersEnabled: Option<bool>;
   }
 
-  /** @name UpDataStructsSponsoringRateLimit (164) */
+  /** @name UpDataStructsSponsoringRateLimit (162) */
   export interface UpDataStructsSponsoringRateLimit extends Enum {
     readonly isSponsoringDisabled: boolean;
     readonly isBlocks: boolean;
@@ -1552,44 +1559,43 @@
     readonly type: 'SponsoringDisabled' | 'Blocks';
   }
 
-  /** @name UpDataStructsCollectionPermissions (167) */
+  /** @name UpDataStructsCollectionPermissions (165) */
   export interface UpDataStructsCollectionPermissions extends Struct {
     readonly access: Option<UpDataStructsAccessMode>;
     readonly mintMode: Option<bool>;
     readonly nesting: Option<UpDataStructsNestingPermissions>;
   }
 
-  /** @name UpDataStructsNestingPermissions (169) */
+  /** @name UpDataStructsNestingPermissions (167) */
   export interface UpDataStructsNestingPermissions extends Struct {
     readonly tokenOwner: bool;
     readonly collectionAdmin: bool;
     readonly restricted: Option<UpDataStructsOwnerRestrictedSet>;
-    readonly permissive: bool;
   }
 
-  /** @name UpDataStructsOwnerRestrictedSet (171) */
+  /** @name UpDataStructsOwnerRestrictedSet (169) */
   export interface UpDataStructsOwnerRestrictedSet extends BTreeSet<u32> {}
 
-  /** @name UpDataStructsPropertyKeyPermission (177) */
+  /** @name UpDataStructsPropertyKeyPermission (175) */
   export interface UpDataStructsPropertyKeyPermission extends Struct {
     readonly key: Bytes;
     readonly permission: UpDataStructsPropertyPermission;
   }
 
-  /** @name UpDataStructsPropertyPermission (179) */
+  /** @name UpDataStructsPropertyPermission (177) */
   export interface UpDataStructsPropertyPermission extends Struct {
     readonly mutable: bool;
     readonly collectionAdmin: bool;
     readonly tokenOwner: bool;
   }
 
-  /** @name UpDataStructsProperty (182) */
+  /** @name UpDataStructsProperty (180) */
   export interface UpDataStructsProperty extends Struct {
     readonly key: Bytes;
     readonly value: Bytes;
   }
 
-  /** @name PalletEvmAccountBasicCrossAccountIdRepr (185) */
+  /** @name PalletEvmAccountBasicCrossAccountIdRepr (183) */
   export interface PalletEvmAccountBasicCrossAccountIdRepr extends Enum {
     readonly isSubstrate: boolean;
     readonly asSubstrate: AccountId32;
@@ -1598,7 +1604,7 @@
     readonly type: 'Substrate' | 'Ethereum';
   }
 
-  /** @name UpDataStructsCreateItemData (187) */
+  /** @name UpDataStructsCreateItemData (185) */
   export interface UpDataStructsCreateItemData extends Enum {
     readonly isNft: boolean;
     readonly asNft: UpDataStructsCreateNftData;
@@ -1609,23 +1615,23 @@
     readonly type: 'Nft' | 'Fungible' | 'ReFungible';
   }
 
-  /** @name UpDataStructsCreateNftData (188) */
+  /** @name UpDataStructsCreateNftData (186) */
   export interface UpDataStructsCreateNftData extends Struct {
     readonly properties: Vec<UpDataStructsProperty>;
   }
 
-  /** @name UpDataStructsCreateFungibleData (189) */
+  /** @name UpDataStructsCreateFungibleData (187) */
   export interface UpDataStructsCreateFungibleData extends Struct {
     readonly value: u128;
   }
 
-  /** @name UpDataStructsCreateReFungibleData (190) */
+  /** @name UpDataStructsCreateReFungibleData (188) */
   export interface UpDataStructsCreateReFungibleData extends Struct {
     readonly constData: Bytes;
     readonly pieces: u128;
   }
 
-  /** @name UpDataStructsCreateItemExData (195) */
+  /** @name UpDataStructsCreateItemExData (193) */
   export interface UpDataStructsCreateItemExData extends Enum {
     readonly isNft: boolean;
     readonly asNft: Vec<UpDataStructsCreateNftExData>;
@@ -1638,19 +1644,19 @@
     readonly type: 'Nft' | 'Fungible' | 'RefungibleMultipleItems' | 'RefungibleMultipleOwners';
   }
 
-  /** @name UpDataStructsCreateNftExData (197) */
+  /** @name UpDataStructsCreateNftExData (195) */
   export interface UpDataStructsCreateNftExData extends Struct {
     readonly properties: Vec<UpDataStructsProperty>;
     readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;
   }
 
-  /** @name UpDataStructsCreateRefungibleExData (204) */
+  /** @name UpDataStructsCreateRefungibleExData (202) */
   export interface UpDataStructsCreateRefungibleExData extends Struct {
     readonly constData: Bytes;
     readonly users: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;
   }
 
-  /** @name PalletUniqueSchedulerCall (206) */
+  /** @name PalletUniqueSchedulerCall (204) */
   export interface PalletUniqueSchedulerCall extends Enum {
     readonly isScheduleNamed: boolean;
     readonly asScheduleNamed: {
@@ -1675,7 +1681,7 @@
     readonly type: 'ScheduleNamed' | 'CancelNamed' | 'ScheduleNamedAfter';
   }
 
-  /** @name FrameSupportScheduleMaybeHashed (208) */
+  /** @name FrameSupportScheduleMaybeHashed (206) */
   export interface FrameSupportScheduleMaybeHashed extends Enum {
     readonly isValue: boolean;
     readonly asValue: Call;
@@ -1684,13 +1690,13 @@
     readonly type: 'Value' | 'Hash';
   }
 
-  /** @name PalletTemplateTransactionPaymentCall (209) */
+  /** @name PalletTemplateTransactionPaymentCall (207) */
   export type PalletTemplateTransactionPaymentCall = Null;
 
-  /** @name PalletStructureCall (210) */
+  /** @name PalletStructureCall (208) */
   export type PalletStructureCall = Null;
 
-  /** @name PalletRmrkCoreCall (211) */
+  /** @name PalletRmrkCoreCall (209) */
   export interface PalletRmrkCoreCall extends Enum {
     readonly isCreateCollection: boolean;
     readonly asCreateCollection: {
@@ -1713,7 +1719,7 @@
     } & Struct;
     readonly isMintNft: boolean;
     readonly asMintNft: {
-      readonly owner: AccountId32;
+      readonly owner: Option<AccountId32>;
       readonly collectionId: u32;
       readonly recipient: Option<AccountId32>;
       readonly royaltyAmount: Option<Permill>;
@@ -1748,13 +1754,13 @@
     readonly asAcceptResource: {
       readonly rmrkCollectionId: u32;
       readonly rmrkNftId: u32;
-      readonly rmrkResourceId: u32;
+      readonly resourceId: u32;
     } & Struct;
     readonly isAcceptResourceRemoval: boolean;
     readonly asAcceptResourceRemoval: {
       readonly rmrkCollectionId: u32;
       readonly rmrkNftId: u32;
-      readonly rmrkResourceId: u32;
+      readonly resourceId: u32;
     } & Struct;
     readonly isSetProperty: boolean;
     readonly asSetProperty: {
@@ -1796,7 +1802,7 @@
     readonly type: 'CreateCollection' | 'DestroyCollection' | 'ChangeCollectionIssuer' | 'LockCollection' | 'MintNft' | 'BurnNft' | 'Send' | 'AcceptNft' | 'RejectNft' | 'AcceptResource' | 'AcceptResourceRemoval' | 'SetProperty' | 'SetPriority' | 'AddBasicResource' | 'AddComposableResource' | 'AddSlotResource' | 'RemoveResource';
   }
 
-  /** @name RmrkTraitsResourceResourceTypes (217) */
+  /** @name RmrkTraitsResourceResourceTypes (215) */
   export interface RmrkTraitsResourceResourceTypes extends Enum {
     readonly isBasic: boolean;
     readonly asBasic: RmrkTraitsResourceBasicResource;
@@ -1807,7 +1813,7 @@
     readonly type: 'Basic' | 'Composable' | 'Slot';
   }
 
-  /** @name RmrkTraitsResourceBasicResource (219) */
+  /** @name RmrkTraitsResourceBasicResource (217) */
   export interface RmrkTraitsResourceBasicResource extends Struct {
     readonly src: Option<Bytes>;
     readonly metadata: Option<Bytes>;
@@ -1815,7 +1821,7 @@
     readonly thumb: Option<Bytes>;
   }
 
-  /** @name RmrkTraitsResourceComposableResource (221) */
+  /** @name RmrkTraitsResourceComposableResource (219) */
   export interface RmrkTraitsResourceComposableResource extends Struct {
     readonly parts: Vec<u32>;
     readonly base: u32;
@@ -1825,7 +1831,7 @@
     readonly thumb: Option<Bytes>;
   }
 
-  /** @name RmrkTraitsResourceSlotResource (222) */
+  /** @name RmrkTraitsResourceSlotResource (220) */
   export interface RmrkTraitsResourceSlotResource extends Struct {
     readonly base: u32;
     readonly src: Option<Bytes>;
@@ -1835,7 +1841,7 @@
     readonly thumb: Option<Bytes>;
   }
 
-  /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (224) */
+  /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (222) */
   export interface RmrkTraitsNftAccountIdOrCollectionNftTuple extends Enum {
     readonly isAccountId: boolean;
     readonly asAccountId: AccountId32;
@@ -1844,7 +1850,7 @@
     readonly type: 'AccountId' | 'CollectionAndNftTuple';
   }
 
-  /** @name PalletRmrkEquipCall (228) */
+  /** @name PalletRmrkEquipCall (226) */
   export interface PalletRmrkEquipCall extends Enum {
     readonly isCreateBase: boolean;
     readonly asCreateBase: {
@@ -1857,10 +1863,16 @@
       readonly baseId: u32;
       readonly theme: RmrkTraitsTheme;
     } & Struct;
-    readonly type: 'CreateBase' | 'ThemeAdd';
+    readonly isEquippable: boolean;
+    readonly asEquippable: {
+      readonly baseId: u32;
+      readonly slotId: u32;
+      readonly equippables: RmrkTraitsPartEquippableList;
+    } & Struct;
+    readonly type: 'CreateBase' | 'ThemeAdd' | 'Equippable';
   }
 
-  /** @name RmrkTraitsPartPartType (230) */
+  /** @name RmrkTraitsPartPartType (229) */
   export interface RmrkTraitsPartPartType extends Enum {
     readonly isFixedPart: boolean;
     readonly asFixedPart: RmrkTraitsPartFixedPart;
@@ -1869,14 +1881,14 @@
     readonly type: 'FixedPart' | 'SlotPart';
   }
 
-  /** @name RmrkTraitsPartFixedPart (232) */
+  /** @name RmrkTraitsPartFixedPart (231) */
   export interface RmrkTraitsPartFixedPart extends Struct {
     readonly id: u32;
     readonly z: u32;
     readonly src: Bytes;
   }
 
-  /** @name RmrkTraitsPartSlotPart (233) */
+  /** @name RmrkTraitsPartSlotPart (232) */
   export interface RmrkTraitsPartSlotPart extends Struct {
     readonly id: u32;
     readonly equippable: RmrkTraitsPartEquippableList;
@@ -1884,7 +1896,7 @@
     readonly z: u32;
   }
 
-  /** @name RmrkTraitsPartEquippableList (234) */
+  /** @name RmrkTraitsPartEquippableList (233) */
   export interface RmrkTraitsPartEquippableList extends Enum {
     readonly isAll: boolean;
     readonly isEmpty: boolean;
@@ -1893,14 +1905,14 @@
     readonly type: 'All' | 'Empty' | 'Custom';
   }
 
-  /** @name RmrkTraitsTheme (236) */
+  /** @name RmrkTraitsTheme (235) */
   export interface RmrkTraitsTheme extends Struct {
     readonly name: Bytes;
     readonly properties: Vec<RmrkTraitsThemeThemeProperty>;
     readonly inherit: bool;
   }
 
-  /** @name RmrkTraitsThemeThemeProperty (238) */
+  /** @name RmrkTraitsThemeThemeProperty (237) */
   export interface RmrkTraitsThemeThemeProperty extends Struct {
     readonly key: Bytes;
     readonly value: Bytes;
@@ -2323,17 +2335,35 @@
   /** @name CumulusPalletDmpQueueEvent (284) */
   export interface CumulusPalletDmpQueueEvent extends Enum {
     readonly isInvalidFormat: boolean;
-    readonly asInvalidFormat: U8aFixed;
+    readonly asInvalidFormat: {
+      readonly messageId: U8aFixed;
+    } & Struct;
     readonly isUnsupportedVersion: boolean;
-    readonly asUnsupportedVersion: U8aFixed;
+    readonly asUnsupportedVersion: {
+      readonly messageId: U8aFixed;
+    } & Struct;
     readonly isExecutedDownward: boolean;
-    readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>;
+    readonly asExecutedDownward: {
+      readonly messageId: U8aFixed;
+      readonly outcome: XcmV2TraitsOutcome;
+    } & Struct;
     readonly isWeightExhausted: boolean;
-    readonly asWeightExhausted: ITuple<[U8aFixed, u64, u64]>;
+    readonly asWeightExhausted: {
+      readonly messageId: U8aFixed;
+      readonly remainingWeight: u64;
+      readonly requiredWeight: u64;
+    } & Struct;
     readonly isOverweightEnqueued: boolean;
-    readonly asOverweightEnqueued: ITuple<[U8aFixed, u64, u64]>;
+    readonly asOverweightEnqueued: {
+      readonly messageId: U8aFixed;
+      readonly overweightIndex: u64;
+      readonly requiredWeight: u64;
+    } & Struct;
     readonly isOverweightServiced: boolean;
-    readonly asOverweightServiced: ITuple<[u64, u64]>;
+    readonly asOverweightServiced: {
+      readonly overweightIndex: u64;
+      readonly weightUsed: u64;
+    } & Struct;
     readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced';
   }
 
@@ -2527,7 +2557,12 @@
       readonly issuer: AccountId32;
       readonly baseId: u32;
     } & Struct;
-    readonly type: 'BaseCreated';
+    readonly isEquippablesUpdated: boolean;
+    readonly asEquippablesUpdated: {
+      readonly baseId: u32;
+      readonly slotId: u32;
+    } & Struct;
+    readonly type: 'BaseCreated' | 'EquippablesUpdated';
   }
 
   /** @name PalletEvmEvent (293) */
@@ -2814,7 +2849,8 @@
     readonly isCollectionDecimalPointLimitExceeded: boolean;
     readonly isConfirmUnsetSponsorFail: boolean;
     readonly isEmptyArgument: boolean;
-    readonly type: 'CollectionDecimalPointLimitExceeded' | 'ConfirmUnsetSponsorFail' | 'EmptyArgument';
+    readonly isRepartitionCalledOnNonRefungibleCollection: boolean;
+    readonly type: 'CollectionDecimalPointLimitExceeded' | 'ConfirmUnsetSponsorFail' | 'EmptyArgument' | 'RepartitionCalledOnNonRefungibleCollection';
   }
 
   /** @name PalletUniqueSchedulerScheduledV3 (347) */
@@ -3067,9 +3103,10 @@
   export interface PalletRefungibleError extends Enum {
     readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean;
     readonly isWrongRefungiblePieces: boolean;
+    readonly isRepartitionWhileNotOwningAllPieces: boolean;
     readonly isRefungibleDisallowsNesting: boolean;
     readonly isSettingPropertiesNotAllowed: boolean;
-    readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
+    readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RepartitionWhileNotOwningAllPieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';
   }
 
   /** @name PalletNonfungibleItemData (394) */
@@ -3077,7 +3114,14 @@
     readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;
   }
 
-  /** @name PalletNonfungibleError (396) */
+  /** @name UpDataStructsPropertyScope (396) */
+  export interface UpDataStructsPropertyScope extends Enum {
+    readonly isNone: boolean;
+    readonly isRmrk: boolean;
+    readonly type: 'None' | 'Rmrk';
+  }
+
+  /** @name PalletNonfungibleError (398) */
   export interface PalletNonfungibleError extends Enum {
     readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean;
     readonly isNonfungibleItemsHaveNoAmount: boolean;
@@ -3085,7 +3129,7 @@
     readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount' | 'CantBurnNftWithChildren';
   }
 
-  /** @name PalletStructureError (397) */
+  /** @name PalletStructureError (399) */
   export interface PalletStructureError extends Enum {
     readonly isOuroborosDetected: boolean;
     readonly isDepthLimit: boolean;
@@ -3094,12 +3138,13 @@
     readonly type: 'OuroborosDetected' | 'DepthLimit' | 'BreadthLimit' | 'TokenNotFound';
   }
 
-  /** @name PalletRmrkCoreError (398) */
+  /** @name PalletRmrkCoreError (400) */
   export interface PalletRmrkCoreError extends Enum {
     readonly isCorruptedCollectionType: boolean;
     readonly isNftTypeEncodeError: boolean;
     readonly isRmrkPropertyKeyIsTooLong: boolean;
     readonly isRmrkPropertyValueIsTooLong: boolean;
+    readonly isRmrkPropertyIsNotFound: boolean;
     readonly isUnableToDecodeRmrkData: boolean;
     readonly isCollectionNotEmpty: boolean;
     readonly isNoAvailableCollectionId: boolean;
@@ -3112,21 +3157,25 @@
     readonly isCannotSendToDescendentOrSelf: boolean;
     readonly isCannotAcceptNonOwnedNft: boolean;
     readonly isCannotRejectNonOwnedNft: boolean;
+    readonly isCannotRejectNonPendingNft: boolean;
     readonly isResourceNotPending: boolean;
-    readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'ResourceNotPending';
+    readonly isNoAvailableResourceId: boolean;
+    readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'RmrkPropertyIsNotFound' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'CannotRejectNonPendingNft' | 'ResourceNotPending' | 'NoAvailableResourceId';
   }
 
-  /** @name PalletRmrkEquipError (400) */
+  /** @name PalletRmrkEquipError (402) */
   export interface PalletRmrkEquipError extends Enum {
     readonly isPermissionError: boolean;
     readonly isNoAvailableBaseId: boolean;
     readonly isNoAvailablePartId: boolean;
     readonly isBaseDoesntExist: boolean;
     readonly isNeedsDefaultThemeFirst: boolean;
-    readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst';
+    readonly isPartDoesntExist: boolean;
+    readonly isNoEquippableOnFixedPart: boolean;
+    readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst' | 'PartDoesntExist' | 'NoEquippableOnFixedPart';
   }
 
-  /** @name PalletEvmError (403) */
+  /** @name PalletEvmError (405) */
   export interface PalletEvmError extends Enum {
     readonly isBalanceLow: boolean;
     readonly isFeeOverflow: boolean;
@@ -3137,7 +3186,7 @@
     readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce';
   }
 
-  /** @name FpRpcTransactionStatus (406) */
+  /** @name FpRpcTransactionStatus (408) */
   export interface FpRpcTransactionStatus extends Struct {
     readonly transactionHash: H256;
     readonly transactionIndex: u32;
@@ -3148,10 +3197,10 @@
     readonly logsBloom: EthbloomBloom;
   }
 
-  /** @name EthbloomBloom (408) */
+  /** @name EthbloomBloom (410) */
   export interface EthbloomBloom extends U8aFixed {}
 
-  /** @name EthereumReceiptReceiptV3 (410) */
+  /** @name EthereumReceiptReceiptV3 (412) */
   export interface EthereumReceiptReceiptV3 extends Enum {
     readonly isLegacy: boolean;
     readonly asLegacy: EthereumReceiptEip658ReceiptData;
@@ -3162,7 +3211,7 @@
     readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';
   }
 
-  /** @name EthereumReceiptEip658ReceiptData (411) */
+  /** @name EthereumReceiptEip658ReceiptData (413) */
   export interface EthereumReceiptEip658ReceiptData extends Struct {
     readonly statusCode: u8;
     readonly usedGas: U256;
@@ -3170,14 +3219,14 @@
     readonly logs: Vec<EthereumLog>;
   }
 
-  /** @name EthereumBlock (412) */
+  /** @name EthereumBlock (414) */
   export interface EthereumBlock extends Struct {
     readonly header: EthereumHeader;
     readonly transactions: Vec<EthereumTransactionTransactionV2>;
     readonly ommers: Vec<EthereumHeader>;
   }
 
-  /** @name EthereumHeader (413) */
+  /** @name EthereumHeader (415) */
   export interface EthereumHeader extends Struct {
     readonly parentHash: H256;
     readonly ommersHash: H256;
@@ -3196,24 +3245,24 @@
     readonly nonce: EthereumTypesHashH64;
   }
 
-  /** @name EthereumTypesHashH64 (414) */
+  /** @name EthereumTypesHashH64 (416) */
   export interface EthereumTypesHashH64 extends U8aFixed {}
 
-  /** @name PalletEthereumError (419) */
+  /** @name PalletEthereumError (421) */
   export interface PalletEthereumError extends Enum {
     readonly isInvalidSignature: boolean;
     readonly isPreLogExists: boolean;
     readonly type: 'InvalidSignature' | 'PreLogExists';
   }
 
-  /** @name PalletEvmCoderSubstrateError (420) */
+  /** @name PalletEvmCoderSubstrateError (422) */
   export interface PalletEvmCoderSubstrateError extends Enum {
     readonly isOutOfGas: boolean;
     readonly isOutOfFund: boolean;
     readonly type: 'OutOfGas' | 'OutOfFund';
   }
 
-  /** @name PalletEvmContractHelpersSponsoringModeT (421) */
+  /** @name PalletEvmContractHelpersSponsoringModeT (423) */
   export interface PalletEvmContractHelpersSponsoringModeT extends Enum {
     readonly isDisabled: boolean;
     readonly isAllowlisted: boolean;
@@ -3221,20 +3270,20 @@
     readonly type: 'Disabled' | 'Allowlisted' | 'Generous';
   }
 
-  /** @name PalletEvmContractHelpersError (423) */
+  /** @name PalletEvmContractHelpersError (425) */
   export interface PalletEvmContractHelpersError extends Enum {
     readonly isNoPermission: boolean;
     readonly type: 'NoPermission';
   }
 
-  /** @name PalletEvmMigrationError (424) */
+  /** @name PalletEvmMigrationError (426) */
   export interface PalletEvmMigrationError extends Enum {
     readonly isAccountNotEmpty: boolean;
     readonly isAccountIsNotMigrating: boolean;
     readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating';
   }
 
-  /** @name SpRuntimeMultiSignature (426) */
+  /** @name SpRuntimeMultiSignature (428) */
   export interface SpRuntimeMultiSignature extends Enum {
     readonly isEd25519: boolean;
     readonly asEd25519: SpCoreEd25519Signature;
@@ -3245,34 +3294,34 @@
     readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa';
   }
 
-  /** @name SpCoreEd25519Signature (427) */
+  /** @name SpCoreEd25519Signature (429) */
   export interface SpCoreEd25519Signature extends U8aFixed {}
 
-  /** @name SpCoreSr25519Signature (429) */
+  /** @name SpCoreSr25519Signature (431) */
   export interface SpCoreSr25519Signature extends U8aFixed {}
 
-  /** @name SpCoreEcdsaSignature (430) */
+  /** @name SpCoreEcdsaSignature (432) */
   export interface SpCoreEcdsaSignature extends U8aFixed {}
 
-  /** @name FrameSystemExtensionsCheckSpecVersion (433) */
+  /** @name FrameSystemExtensionsCheckSpecVersion (435) */
   export type FrameSystemExtensionsCheckSpecVersion = Null;
 
-  /** @name FrameSystemExtensionsCheckGenesis (434) */
+  /** @name FrameSystemExtensionsCheckGenesis (436) */
   export type FrameSystemExtensionsCheckGenesis = Null;
 
-  /** @name FrameSystemExtensionsCheckNonce (437) */
+  /** @name FrameSystemExtensionsCheckNonce (439) */
   export interface FrameSystemExtensionsCheckNonce extends Compact<u32> {}
 
-  /** @name FrameSystemExtensionsCheckWeight (438) */
+  /** @name FrameSystemExtensionsCheckWeight (440) */
   export type FrameSystemExtensionsCheckWeight = Null;
 
-  /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (439) */
+  /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (441) */
   export interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact<u128> {}
 
-  /** @name OpalRuntimeRuntime (440) */
+  /** @name OpalRuntimeRuntime (442) */
   export type OpalRuntimeRuntime = Null;
 
-  /** @name PalletEthereumFakeTransactionFinalizer (441) */
+  /** @name PalletEthereumFakeTransactionFinalizer (443) */
   export type PalletEthereumFakeTransactionFinalizer = Null;
 
 } // declare module
modifiedtests/src/refungible.test.tsdiffbeforeafterboth
--- a/tests/src/refungible.test.ts
+++ b/tests/src/refungible.test.ts
@@ -29,6 +29,7 @@
   createRefungibleToken,
   transfer,
   burnItem,
+  repartitionRFT,
 } from './util/helpers';
 
 import chai from 'chai';
@@ -162,4 +163,27 @@
       expect(await getAllowance(api, collectionId, alice, bob, tokenId)).to.be.equal(40n);
     });
   });
+
+  it('Repartition', async () => {
+    await usingApi(async api => {
+      const collectionId = (await createCollection(api, alice, {mode: {type: 'ReFungible'}})).collectionId;
+      const tokenId = (await createRefungibleToken(api, alice, collectionId, 100n)).itemId;
+
+      expect(await repartitionRFT(api, collectionId, alice, tokenId, 200n)).to.be.true;
+      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(200n);
+
+      expect(await transfer(api, collectionId, tokenId, alice, bob, 110n)).to.be.true;
+      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(90n);
+      expect(await getBalance(api, collectionId, bob, tokenId)).to.be.equal(110n);
+
+      await expect(repartitionRFT(api, collectionId, alice, tokenId, 80n)).to.eventually.be.rejected;
+
+      expect(await transfer(api, collectionId, tokenId, alice, bob, 90n)).to.be.true;
+      expect(await getBalance(api, collectionId, alice, tokenId)).to.be.equal(0n);
+      expect(await getBalance(api, collectionId, bob, tokenId)).to.be.equal(200n);
+
+      expect(await repartitionRFT(api, collectionId, bob, tokenId, 150n)).to.be.true;
+      await expect(transfer(api, collectionId, tokenId, bob, alice, 160n)).to.eventually.be.rejected;
+    });
+  });
 });
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -1630,3 +1630,17 @@
     return promise;
   });
 }
+
+export async function repartitionRFT(
+  api: ApiPromise,
+  collectionId: number,
+  sender: IKeyringPair,
+  tokenId: number,
+  amount: bigint,
+): Promise<boolean> {
+  const tx = api.tx.unique.repartition(collectionId, tokenId, amount);
+  const events = await submitTransactionAsync(sender, tx);
+  const result = getGenericResult(events);
+
+  return result.success;
+}