git.delta.rocks / unique-network / refs/commits / a458077bed38

difftreelog

Merge pull request #419 from UniqueNetwork/release-v924010

kozyrevdev2022-07-06parents: #518e58f #824b60f.patch.diff
in: master
Release v924010

74 files changed

modified.gitignorediffbeforeafterboth
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,7 @@
 
 /.idea/
 /.cargo/
+/.vscode/
 
 tests/.vscode
 cumulus-parachain/
modifiedREADME.mddiffbeforeafterboth
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@
 1. Install Rust:
 
 ```bash
-sudo apt-get install git curl libssl-dev llvm pkg-config libclang-dev clang make
+sudo apt-get install git curl libssl-dev llvm pkg-config libclang-dev clang make cmake
 curl https://sh.rustup.rs -sSf | sh
 ```
 
@@ -83,7 +83,8 @@
 ### Polkadot launch utility
 
 ```
-git clone https://github.com/paritytech/polkadot-launch
+git clone https://github.com/UniqueNetwork/polkadot-launch.git
+git checkout feature/runtime-upgrade-testing
 ```
 
 ### Build relay
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,
@@ -1307,12 +1311,14 @@
 		sender: T::CrossAccountId,
 		token_id: TokenId,
 		property: Vec<Property>,
+		nesting_budget: &dyn Budget,
 	) -> DispatchResultWithPostInfo;
 	fn delete_token_properties(
 		&self,
 		sender: T::CrossAccountId,
 		token_id: TokenId,
 		property_keys: Vec<PropertyKey>,
+		nesting_budget: &dyn Budget,
 	) -> DispatchResultWithPostInfo;
 	fn set_token_property_permissions(
 		&self,
@@ -1357,7 +1363,7 @@
 		sender: T::CrossAccountId,
 		from: (CollectionId, TokenId),
 		under: TokenId,
-		budget: &dyn Budget,
+		nesting_budget: &dyn Budget,
 	) -> DispatchResult;
 
 	fn nest(&self, under: TokenId, to_nest: (CollectionId, TokenId));
@@ -1384,6 +1390,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};
@@ -298,6 +298,7 @@
 		_sender: T::CrossAccountId,
 		_token_id: TokenId,
 		_property: Vec<Property>,
+		_nesting_budget: &dyn Budget,
 	) -> DispatchResultWithPostInfo {
 		fail!(<Error<T>>::SettingPropertiesNotAllowed)
 	}
@@ -315,6 +316,7 @@
 		_sender: T::CrossAccountId,
 		_token_id: TokenId,
 		_property_keys: Vec<PropertyKey>,
+		_nesting_budget: &dyn Budget,
 	) -> DispatchResultWithPostInfo {
 		fail!(<Error<T>>::SettingPropertiesNotAllowed)
 	}
@@ -324,7 +326,7 @@
 		_sender: <T>::CrossAccountId,
 		_from: (CollectionId, TokenId),
 		_under: TokenId,
-		_budget: &dyn Budget,
+		_nesting_budget: &dyn Budget,
 	) -> sp_runtime::DispatchResult {
 		fail!(<Error<T>>::FungibleDisallowsNesting)
 	}
@@ -399,4 +401,8 @@
 		}
 		<Allowance<T>>::get((self.id, sender, spender))
 	}
+
+	fn refungible_extensions(&self) -> Option<&dyn RefungibleExtensions<T>> {
+		None
+	}
 }
modifiedpallets/nonfungible/src/benchmarking.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/benchmarking.rs
+++ b/pallets/nonfungible/src/benchmarking.rs
@@ -183,7 +183,7 @@
 			value: property_value(),
 		}).collect::<Vec<_>>();
 		let item = create_max_item(&collection, &owner, owner.clone())?;
-	}: {<Pallet<T>>::set_token_properties(&collection, &owner, item, props, false)?}
+	}: {<Pallet<T>>::set_token_properties(&collection, &owner, item, props, false, &Unlimited)?}
 
 	delete_token_properties {
 		let b in 0..MAX_PROPERTIES_PER_ITEM;
@@ -205,7 +205,7 @@
 			value: property_value(),
 		}).collect::<Vec<_>>();
 		let item = create_max_item(&collection, &owner, owner.clone())?;
-		<Pallet<T>>::set_token_properties(&collection, &owner, item, props, false)?;
+		<Pallet<T>>::set_token_properties(&collection, &owner, item, props, false, &Unlimited)?;
 		let to_delete = (0..b).map(|k| property_key(k as usize)).collect::<Vec<_>>();
-	}: {<Pallet<T>>::delete_token_properties(&collection, &owner, item, to_delete)?}
+	}: {<Pallet<T>>::delete_token_properties(&collection, &owner, item, to_delete, &Unlimited)?}
 }
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;
@@ -219,11 +220,19 @@
 		sender: T::CrossAccountId,
 		token_id: TokenId,
 		properties: Vec<Property>,
+		nesting_budget: &dyn Budget,
 	) -> DispatchResultWithPostInfo {
 		let weight = <CommonWeights<T>>::set_token_properties(properties.len() as u32);
 
 		with_weight(
-			<Pallet<T>>::set_token_properties(self, &sender, token_id, properties, false),
+			<Pallet<T>>::set_token_properties(
+				self,
+				&sender,
+				token_id,
+				properties.into_iter(),
+				false,
+				nesting_budget,
+			),
 			weight,
 		)
 	}
@@ -233,11 +242,18 @@
 		sender: T::CrossAccountId,
 		token_id: TokenId,
 		property_keys: Vec<PropertyKey>,
+		nesting_budget: &dyn Budget,
 	) -> DispatchResultWithPostInfo {
 		let weight = <CommonWeights<T>>::delete_token_properties(property_keys.len() as u32);
 
 		with_weight(
-			<Pallet<T>>::delete_token_properties(self, &sender, token_id, property_keys),
+			<Pallet<T>>::delete_token_properties(
+				self,
+				&sender,
+				token_id,
+				property_keys.into_iter(),
+				nesting_budget,
+			),
 			weight,
 		)
 	}
@@ -367,9 +383,9 @@
 		sender: T::CrossAccountId,
 		from: (CollectionId, TokenId),
 		under: TokenId,
-		budget: &dyn Budget,
+		nesting_budget: &dyn Budget,
 	) -> sp_runtime::DispatchResult {
-		<Pallet<T>>::check_nesting(self, sender, from, under, budget)
+		<Pallet<T>>::check_nesting(self, sender, from, under, nesting_budget)
 	}
 
 	fn nest(&self, under: TokenId, to_nest: (CollectionId, TokenId)) {
@@ -467,4 +483,8 @@
 			0
 		}
 	}
+
+	fn refungible_extensions(&self) -> Option<&dyn RefungibleExtensions<T>> {
+		None
+	}
 }
modifiedpallets/nonfungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -82,12 +82,16 @@
 			.map_err(|_| "key too long")?;
 		let value = value.try_into().map_err(|_| "value too long")?;
 
+		let nesting_budget = self
+			.recorder
+			.weight_calls_budget(<StructureWeight<T>>::find_parent());
+
 		<Pallet<T>>::set_token_property(
 			self,
 			&caller,
 			TokenId(token_id),
 			Property { key, value },
-			false,
+			&nesting_budget,
 		)
 		.map_err(dispatch_to_evm::<T>)
 	}
@@ -99,7 +103,11 @@
 			.try_into()
 			.map_err(|_| "key too long")?;
 
-		<Pallet<T>>::delete_token_property(self, &caller, TokenId(token_id), key)
+		let nesting_budget = self
+			.recorder
+			.weight_calls_budget(<StructureWeight<T>>::find_parent());
+
+		<Pallet<T>>::delete_token_property(self, &caller, TokenId(token_id), key, &nesting_budget)
 			.map_err(dispatch_to_evm::<T>)
 	}
 
modifiedpallets/nonfungible/src/lib.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -28,7 +28,8 @@
 use up_data_structs::{
 	AccessMode, CollectionId, CustomDataLimit, TokenId, CreateCollectionData, CreateNftExData,
 	mapping::TokenAddressMapping, budget::Budget, Property, PropertyPermission, PropertyKey,
-	PropertyKeyPermission, Properties, PropertyScope, TrySetProperty, TokenChild, AuxPropertyValue,
+	PropertyValue, PropertyKeyPermission, Properties, PropertyScope, TrySetProperty, TokenChild,
+	AuxPropertyValue,
 };
 use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm};
 use pallet_common::{
@@ -379,11 +380,7 @@
 	) -> DispatchResult {
 		let token_data =
 			<TokenData<T>>::get((collection.id, token)).ok_or(<CommonError<T>>::TokenNotFound)?;
-		ensure!(
-			&token_data.owner == sender
-				|| (collection.limits.owner_can_transfer() && collection.is_owner_or_admin(sender)),
-			<CommonError<T>>::NoPermission
-		);
+		ensure!(&token_data.owner == sender, <CommonError<T>>::NoPermission);
 
 		if collection.permissions.access() == AccessMode::AllowList {
 			collection.check_allowlist(sender)?;
@@ -484,139 +481,169 @@
 		})
 	}
 
-	pub fn set_token_property(
+	#[transactional]
+	fn modify_token_properties(
 		collection: &NonfungibleHandle<T>,
 		sender: &T::CrossAccountId,
 		token_id: TokenId,
-		property: Property,
+		properties: impl Iterator<Item = (PropertyKey, Option<PropertyValue>)>,
 		is_token_create: bool,
+		nesting_budget: &dyn Budget,
 	) -> DispatchResult {
-		Self::check_token_change_permission(
-			collection,
-			sender,
-			token_id,
-			&property.key,
-			is_token_create,
-		)?;
+		let mut collection_admin_status = None;
+		let mut token_owner_result = None;
+
+		let mut is_collection_admin =
+			|| *collection_admin_status.get_or_insert_with(|| collection.is_owner_or_admin(sender));
+
+		let mut is_token_owner = || {
+			*token_owner_result.get_or_insert_with(|| -> Result<bool, DispatchError> {
+				let is_owned = <PalletStructure<T>>::check_indirectly_owned(
+					sender.clone(),
+					collection.id,
+					token_id,
+					None,
+					nesting_budget,
+				)?;
+
+				Ok(is_owned)
+			})
+		};
 
-		<TokenProperties<T>>::try_mutate((collection.id, token_id), |properties| {
-			let property = property.clone();
-			properties.try_set(property.key, property.value)
-		})
-		.map_err(<CommonError<T>>::from)?;
+		for (key, value) in properties {
+			let permission = <PalletCommon<T>>::property_permissions(collection.id)
+				.get(&key)
+				.cloned()
+				.unwrap_or_else(PropertyPermission::none);
 
-		<PalletCommon<T>>::deposit_event(CommonEvent::TokenPropertySet(
-			collection.id,
-			token_id,
-			property.key,
-		));
+			let is_property_exists = TokenProperties::<T>::get((collection.id, token_id))
+				.get(&key)
+				.is_some();
 
+			match permission {
+				PropertyPermission { mutable: false, .. } if is_property_exists => {
+					return Err(<CommonError<T>>::NoPermission.into());
+				}
+
+				PropertyPermission {
+					collection_admin,
+					token_owner,
+					..
+				} => {
+					//TODO: investigate threats during public minting.
+					if is_token_create && (collection_admin || token_owner) && value.is_some() {
+						// Pass
+					} else if collection_admin && is_collection_admin() {
+						// Pass
+					} else if token_owner && is_token_owner()? {
+						// Pass
+					} else {
+						fail!(<CommonError<T>>::NoPermission);
+					}
+				}
+			}
+
+			match value {
+				Some(value) => {
+					<TokenProperties<T>>::try_mutate((collection.id, token_id), |properties| {
+						properties.try_set(key.clone(), value)
+					})
+					.map_err(<CommonError<T>>::from)?;
+
+					<PalletCommon<T>>::deposit_event(CommonEvent::TokenPropertySet(
+						collection.id,
+						token_id,
+						key,
+					));
+				}
+				None => {
+					<TokenProperties<T>>::try_mutate((collection.id, token_id), |properties| {
+						properties.remove(&key)
+					})
+					.map_err(<CommonError<T>>::from)?;
+
+					<PalletCommon<T>>::deposit_event(CommonEvent::TokenPropertyDeleted(
+						collection.id,
+						token_id,
+						key,
+					));
+				}
+			}
+		}
+
 		Ok(())
 	}
 
-	#[transactional]
 	pub fn set_token_properties(
 		collection: &NonfungibleHandle<T>,
 		sender: &T::CrossAccountId,
 		token_id: TokenId,
-		properties: Vec<Property>,
+		properties: impl Iterator<Item = Property>,
 		is_token_create: bool,
+		nesting_budget: &dyn Budget,
 	) -> DispatchResult {
-		for property in properties {
-			Self::set_token_property(collection, sender, token_id, property, is_token_create)?;
-		}
-
-		Ok(())
+		Self::modify_token_properties(
+			collection,
+			sender,
+			token_id,
+			properties.map(|p| (p.key, Some(p.value))),
+			is_token_create,
+			nesting_budget,
+		)
 	}
 
-	pub fn delete_token_property(
+	pub fn set_token_property(
 		collection: &NonfungibleHandle<T>,
 		sender: &T::CrossAccountId,
 		token_id: TokenId,
-		property_key: PropertyKey,
+		property: Property,
+		nesting_budget: &dyn Budget,
 	) -> DispatchResult {
-		Self::check_token_change_permission(collection, sender, token_id, &property_key, false)?;
-
-		<TokenProperties<T>>::try_mutate((collection.id, token_id), |properties| {
-			properties.remove(&property_key)
-		})
-		.map_err(<CommonError<T>>::from)?;
+		let is_token_create = false;
 
-		<PalletCommon<T>>::deposit_event(CommonEvent::TokenPropertyDeleted(
-			collection.id,
+		Self::set_token_properties(
+			collection,
+			sender,
 			token_id,
-			property_key,
-		));
-
-		Ok(())
+			[property].into_iter(),
+			is_token_create,
+			nesting_budget,
+		)
 	}
 
-	fn check_token_change_permission(
+	pub fn delete_token_properties(
 		collection: &NonfungibleHandle<T>,
 		sender: &T::CrossAccountId,
 		token_id: TokenId,
-		property_key: &PropertyKey,
-		is_token_create: bool,
+		property_keys: impl Iterator<Item = PropertyKey>,
+		nesting_budget: &dyn Budget,
 	) -> DispatchResult {
-		let permission = <PalletCommon<T>>::property_permissions(collection.id)
-			.get(property_key)
-			.cloned()
-			.unwrap_or_else(PropertyPermission::none);
+		let is_token_create = false;
 
-		let token_data = <TokenData<T>>::get((collection.id, token_id))
-			.ok_or(<CommonError<T>>::TokenNotFound)?;
-
-		let check_token_owner = || -> DispatchResult {
-			ensure!(&token_data.owner == sender, <CommonError<T>>::NoPermission);
-			Ok(())
-		};
-
-		let is_property_exists = TokenProperties::<T>::get((collection.id, token_id))
-			.get(property_key)
-			.is_some();
-
-		match permission {
-			PropertyPermission { mutable: false, .. } if is_property_exists => {
-				Err(<CommonError<T>>::NoPermission.into())
-			}
-
-			PropertyPermission {
-				collection_admin,
-				token_owner,
-				..
-			} => {
-				//TODO: investigate threats during public minting.
-				if is_token_create && (collection_admin || token_owner) {
-					return Ok(());
-				}
-
-				let mut check_result = Err(<CommonError<T>>::NoPermission.into());
-
-				if collection_admin {
-					check_result = collection.check_is_owner_or_admin(sender);
-				}
-
-				if token_owner {
-					check_result.or_else(|_| check_token_owner())
-				} else {
-					check_result
-				}
-			}
-		}
+		Self::modify_token_properties(
+			collection,
+			sender,
+			token_id,
+			property_keys.into_iter().map(|key| (key, None)),
+			is_token_create,
+			nesting_budget,
+		)
 	}
 
-	#[transactional]
-	pub fn delete_token_properties(
+	pub fn delete_token_property(
 		collection: &NonfungibleHandle<T>,
 		sender: &T::CrossAccountId,
 		token_id: TokenId,
-		property_keys: Vec<PropertyKey>,
+		property_key: PropertyKey,
+		nesting_budget: &dyn Budget,
 	) -> DispatchResult {
-		for key in property_keys {
-			Self::delete_token_property(collection, sender, token_id, key)?;
-		}
-
-		Ok(())
+		Self::delete_token_properties(
+			collection,
+			sender,
+			token_id,
+			[property_key].into_iter(),
+			nesting_budget,
+		)
 	}
 
 	pub fn set_collection_properties(
@@ -665,12 +692,7 @@
 
 		let token_data =
 			<TokenData<T>>::get((collection.id, token)).ok_or(<CommonError<T>>::TokenNotFound)?;
-		// TODO: require sender to be token, owner, require admins to go through transfer_from
-		ensure!(
-			&token_data.owner == from
-				|| (collection.limits.owner_can_transfer() && collection.is_owner_or_admin(from)),
-			<CommonError<T>>::NoPermission
-		);
+		ensure!(&token_data.owner == from, <CommonError<T>>::NoPermission);
 
 		if collection.permissions.access() == AccessMode::AllowList {
 			collection.check_allowlist(from)?;
@@ -827,8 +849,9 @@
 					collection,
 					sender,
 					TokenId(token),
-					data.properties.clone().into_inner(),
+					data.properties.clone().into_iter(),
 					true,
+					nesting_budget,
 				) {
 					return TransactionOutcome::Rollback(Err(e));
 				}
@@ -976,8 +999,12 @@
 			// `from`, `to` checked in [`transfer`]
 			collection.check_allowlist(spender)?;
 		}
+
+		if collection.limits.owner_can_transfer() && collection.is_owner_or_admin(spender) {
+			return Ok(());
+		}
+
 		if let Some(source) = T::CrossTokenAddressMapping::address_to_token(from) {
-			// TODO: should collection owner be allowed to perform this transfer?
 			ensure!(
 				<PalletStructure<T>>::check_indirectly_owned(
 					spender.clone(),
modifiedpallets/proxy-rmrk-core/src/lib.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/src/lib.rs
+++ b/pallets/proxy-rmrk-core/src/lib.rs
@@ -19,7 +19,10 @@
 use frame_support::{pallet_prelude::*, transactional, BoundedVec, dispatch::DispatchResult};
 use frame_system::{pallet_prelude::*, ensure_signed};
 use sp_runtime::{DispatchError, Permill, traits::StaticLookup};
-use sp_std::vec::Vec;
+use sp_std::{
+	vec::Vec,
+	collections::{btree_set::BTreeSet, btree_map::BTreeMap},
+};
 use up_data_structs::{*, mapping::TokenAddressMapping};
 use pallet_common::{
 	Pallet as PalletCommon, Error as CommonError, CollectionHandle, CommonCollectionOperations,
@@ -48,6 +51,12 @@
 
 pub const NESTING_BUDGET: u32 = 5;
 
+type PendingTarget = (CollectionId, TokenId);
+type PendingChild = (RmrkCollectionId, RmrkNftId);
+type PendingChildrenSet = BTreeSet<PendingChild>;
+
+type BasesMap = BTreeMap<RmrkBaseId, u32>;
+
 #[frame_support::pallet]
 pub mod pallet {
 	use super::*;
@@ -383,12 +392,14 @@
 				[
 					Self::rmrk_property(TokenType, &NftType::Regular)?,
 					Self::rmrk_property(Transferable, &transferable)?,
-					Self::rmrk_property(PendingNftAccept, &false)?,
+					Self::rmrk_property(PendingNftAccept, &None::<PendingTarget>)?,
 					Self::rmrk_property(RoyaltyInfo, &royalty_info)?,
 					Self::rmrk_property(Metadata, &metadata)?,
 					Self::rmrk_property(Equipped, &false)?,
 					Self::rmrk_property(ResourcePriorities, &<Vec<u8>>::new())?,
 					Self::rmrk_property(NextResourceId, &(0 as RmrkResourceId))?,
+					Self::rmrk_property(PendingChildren, &PendingChildrenSet::new())?,
+					Self::rmrk_property(AssociatedBases, &BasesMap::new())?,
 				]
 				.into_iter(),
 			)
@@ -483,11 +494,12 @@
 			);
 
 			ensure!(
-				!Self::get_nft_property_decoded(
+				Self::get_nft_property_decoded::<Option<PendingTarget>>(
 					collection_id,
 					nft_id,
 					RmrkProperty::PendingNftAccept
-				)?,
+				)?
+				.is_none(),
 				<Error<T>>::NoPermission
 			);
 
@@ -524,7 +536,15 @@
 							collection.id,
 							nft_id,
 							PropertyScope::Rmrk,
-							Self::rmrk_property(PendingNftAccept, &approval_required)?,
+							Self::rmrk_property::<Option<PendingTarget>>(
+								PendingNftAccept,
+								&Some((target_collection_id, target_nft_id.into())),
+							)?,
+						)?;
+
+						Self::insert_pending_child(
+							(target_collection_id, target_nft_id.into()),
+							(rmrk_collection_id, rmrk_nft_id),
 						)?;
 					} else {
 						target_owner = T::CrossTokenAddressMapping::token_to_address(
@@ -618,13 +638,23 @@
 				}
 			})?;
 
-			<PalletNft<T>>::set_scoped_token_property(
-				collection.id,
+			let pending_target = Self::get_nft_property_decoded::<Option<PendingTarget>>(
+				collection_id,
 				nft_id,
-				PropertyScope::Rmrk,
-				Self::rmrk_property(PendingNftAccept, &false)?,
+				RmrkProperty::PendingNftAccept,
 			)?;
 
+			if let Some(pending_target) = pending_target {
+				Self::remove_pending_child(pending_target, (rmrk_collection_id, rmrk_nft_id))?;
+
+				<PalletNft<T>>::set_scoped_token_property(
+					collection.id,
+					nft_id,
+					PropertyScope::Rmrk,
+					Self::rmrk_property(PendingNftAccept, &None::<PendingTarget>)?,
+				)?;
+			}
+
 			Self::deposit_event(Event::NFTAccepted {
 				sender,
 				recipient: new_owner,
@@ -663,14 +693,18 @@
 				<Error<T>>::NoAvailableNftId
 			);
 
-			ensure!(
-				Self::get_nft_property_decoded(
-					collection_id,
-					nft_id,
-					RmrkProperty::PendingNftAccept
-				)?,
-				<Error<T>>::CannotRejectNonPendingNft
-			);
+			let pending_target = Self::get_nft_property_decoded::<Option<PendingTarget>>(
+				collection_id,
+				nft_id,
+				RmrkProperty::PendingNftAccept,
+			)?;
+
+			match pending_target {
+				Some(pending_target) => {
+					Self::remove_pending_child(pending_target, (rmrk_collection_id, rmrk_nft_id))?
+				}
+				None => return Err(<Error<T>>::CannotRejectNonPendingNft.into()),
+			}
 
 			Self::destroy_nft(
 				cross_sender,
@@ -785,6 +819,12 @@
 				resource_id_key,
 			);
 
+			if let RmrkResourceTypes::Composable(resource) = resource_info.resource {
+				let base_id = resource.base;
+
+				Self::remove_associated_base_id(collection_id, nft_id, base_id)?;
+			}
+
 			Self::deposit_event(Event::<T>::ResourceRemovalAccepted {
 				nft_id: rmrk_nft_id,
 				resource_id,
@@ -938,6 +978,8 @@
 				Self::get_typed_nft_collection(collection_id, misc::CollectionType::Regular)?;
 			collection.check_is_external()?;
 
+			let base_id = resource.base;
+
 			let resource_id = Self::resource_add(
 				sender,
 				collection_id,
@@ -945,6 +987,24 @@
 				RmrkResourceTypes::Composable(resource),
 			)?;
 
+			<PalletNft<T>>::try_mutate_token_aux_property(
+				collection_id,
+				nft_id.into(),
+				PropertyScope::Rmrk,
+				Self::rmrk_property_key(AssociatedBases)?,
+				|value| -> DispatchResult {
+					let mut bases: BasesMap = match value {
+						Some(value) => Self::decode_property(value)?,
+						None => BasesMap::new(),
+					};
+
+					*bases.entry(base_id).or_insert(0) += 1;
+
+					*value = Some(Self::encode_property(&bases)?);
+					Ok(())
+				},
+			)?;
+
 			Self::deposit_event(Event::ResourceAdded {
 				nft_id,
 				resource_id,
@@ -1147,6 +1207,67 @@
 		)
 	}
 
+	fn insert_pending_child(
+		target: (CollectionId, TokenId),
+		child: (RmrkCollectionId, RmrkNftId),
+	) -> DispatchResult {
+		Self::mutate_pending_child(target, |pending_children| {
+			pending_children.insert(child);
+		})
+	}
+
+	fn remove_pending_child(
+		target: (CollectionId, TokenId),
+		child: (RmrkCollectionId, RmrkNftId),
+	) -> DispatchResult {
+		Self::mutate_pending_child(target, |pending_children| {
+			pending_children.remove(&child);
+		})
+	}
+
+	fn mutate_pending_child(
+		(target_collection_id, target_nft_id): (CollectionId, TokenId),
+		f: impl FnOnce(&mut PendingChildrenSet),
+	) -> DispatchResult {
+		<PalletNft<T>>::try_mutate_token_aux_property(
+			target_collection_id,
+			target_nft_id,
+			PropertyScope::Rmrk,
+			Self::rmrk_property_key(PendingChildren)?,
+			|pending_children| -> DispatchResult {
+				let mut map = match pending_children {
+					Some(map) => Self::decode_property(map)?,
+					None => PendingChildrenSet::new(),
+				};
+
+				f(&mut map);
+
+				*pending_children = Some(Self::encode_property(&map)?);
+
+				Ok(())
+			},
+		)
+	}
+
+	fn iterate_pending_children(
+		collection_id: CollectionId,
+		nft_id: TokenId,
+	) -> Result<impl Iterator<Item = PendingChild>, DispatchError> {
+		let property = <PalletNft<T>>::token_aux_property((
+			collection_id,
+			nft_id,
+			PropertyScope::Rmrk,
+			Self::rmrk_property_key(PendingChildren)?,
+		));
+
+		let pending_children = match property {
+			Some(map) => Self::decode_property(&map)?,
+			None => PendingChildrenSet::new(),
+		};
+
+		Ok(pending_children.into_iter())
+	}
+
 	fn acquire_next_resource_id(
 		collection_id: CollectionId,
 		nft_id: TokenId,
@@ -1223,16 +1344,15 @@
 		let resource_id_key = Self::rmrk_property_key(ResourceId(resource_id))?;
 		let scope = PropertyScope::Rmrk;
 
-		ensure!(
-			<PalletNft<T>>::token_aux_property((
-				collection_id,
-				nft_id,
-				scope,
-				resource_id_key.clone()
-			))
-			.is_some(),
-			<Error<T>>::ResourceDoesntExist
-		);
+		let resource = <PalletNft<T>>::token_aux_property((
+			collection_id,
+			nft_id,
+			scope,
+			resource_id_key.clone(),
+		))
+		.ok_or(<Error<T>>::ResourceDoesntExist)?;
+
+		let resource_info: RmrkResourceInfo = Self::decode_property(&resource)?;
 
 		let budget = up_data_structs::budget::Value::new(NESTING_BUDGET);
 		let topmost_owner =
@@ -1246,6 +1366,12 @@
 				PropertyScope::Rmrk,
 				Self::rmrk_property_key(ResourceId(resource_id))?,
 			);
+
+			if let RmrkResourceTypes::Composable(resource) = resource_info.resource {
+				let base_id = resource.base;
+
+				Self::remove_associated_base_id(collection_id, nft_id, base_id)?;
+			}
 		} else {
 			Self::try_mutate_resource_info(collection_id, nft_id, resource_id, |res| {
 				res.pending_removal = true;
@@ -1257,6 +1383,36 @@
 		Ok(())
 	}
 
+	fn remove_associated_base_id(
+		collection_id: CollectionId,
+		nft_id: TokenId,
+		base_id: RmrkBaseId,
+	) -> DispatchResult {
+		<PalletNft<T>>::try_mutate_token_aux_property(
+			collection_id,
+			nft_id,
+			PropertyScope::Rmrk,
+			Self::rmrk_property_key(AssociatedBases)?,
+			|value| -> DispatchResult {
+				let mut bases: BasesMap = match value {
+					Some(value) => Self::decode_property(value)?,
+					None => BasesMap::new(),
+				};
+
+				let remaining = bases.get(&base_id);
+
+				if let Some(remaining) = remaining {
+					if let Some(0) | None = remaining.checked_sub(1) {
+						bases.remove(&base_id);
+					}
+				}
+
+				*value = Some(Self::encode_property(&bases)?);
+				Ok(())
+			},
+		)
+	}
+
 	fn try_mutate_resource_info(
 		collection_id: CollectionId,
 		nft_id: TokenId,
@@ -1526,15 +1682,13 @@
 		Value: Decode + Default,
 		Mapper: Fn(Key, Value) -> R,
 	{
-		let key_prefix = Self::rmrk_property_key(UserProperty(b""))?;
-
 		let properties = match token_id {
 			Some(token_id) => <PalletNft<T>>::token_properties((collection_id, token_id)),
 			None => <PalletCommon<T>>::collection_properties(collection_id),
 		};
 
 		let properties = properties.into_iter().filter_map(move |(key, value)| {
-			let key = key.as_slice().strip_prefix(key_prefix.as_slice())?;
+			let key = strip_key_prefix(&key, USER_PROPERTY_PREFIX)?;
 
 			let key: Key = key.to_vec().try_into().ok()?;
 			let value: Value = value.decode().ok()?;
modifiedpallets/proxy-rmrk-core/src/property.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/src/property.rs
+++ b/pallets/proxy-rmrk-core/src/property.rs
@@ -15,9 +15,11 @@
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
 use super::*;
+use up_data_structs::PropertyScope;
 use core::convert::AsRef;
 
-const RESOURCE_ID_PREFIX: &str = "rsid-";
+pub const RESOURCE_ID_PREFIX: &str = "rsid-";
+pub const USER_PROPERTY_PREFIX: &str = "userprop-";
 
 pub enum RmrkProperty<'r> {
 	Metadata,
@@ -31,6 +33,8 @@
 	NextResourceId,
 	ResourceId(RmrkResourceId),
 	PendingNftAccept,
+	PendingChildren,
+	AssociatedBases,
 	Parts,
 	Base,
 	Src,
@@ -73,6 +77,8 @@
 			Self::NextResourceId => key!("next-resource-id"),
 			Self::ResourceId(id) => key!(RESOURCE_ID_PREFIX, id.to_le_bytes()),
 			Self::PendingNftAccept => key!("pending-nft-accept"),
+			Self::PendingChildren => key!("pending-children"),
+			Self::AssociatedBases => key!("assoc-bases"),
 			Self::Parts => key!("parts"),
 			Self::Base => key!("base"),
 			Self::Src => key!("src"),
@@ -83,7 +89,22 @@
 			Self::ZIndex => key!("z-index"),
 			Self::ThemeName => key!("theme-name"),
 			Self::ThemeInherit => key!("theme-inherit"),
-			Self::UserProperty(name) => key!("userprop-", name),
+			Self::UserProperty(name) => key!(USER_PROPERTY_PREFIX, name),
 		}
 	}
 }
+
+pub fn strip_key_prefix(key: &PropertyKey, prefix: &str) -> Option<PropertyKey> {
+	let key_prefix = PropertyKey::try_from(prefix.as_bytes().to_vec()).ok()?;
+	let key_prefix = PropertyScope::Rmrk.apply(key_prefix).ok()?;
+
+	key.as_slice()
+		.strip_prefix(key_prefix.as_slice())?
+		.to_vec()
+		.try_into()
+		.ok()
+}
+
+pub fn is_valid_key_prefix(key: &PropertyKey, prefix: &str) -> bool {
+	strip_key_prefix(key, prefix).is_some()
+}
modifiedpallets/proxy-rmrk-core/src/rpc.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/src/rpc.rs
+++ b/pallets/proxy-rmrk-core/src/rpc.rs
@@ -132,17 +132,6 @@
 	Ok(
 		pallet_nonfungible::TokenChildren::<T>::iter_prefix((collection_id, nft_id))
 			.filter_map(|((child_collection, child_token), _)| {
-				let is_pending = <Pallet<T>>::get_nft_property_decoded(
-					child_collection,
-					child_token,
-					RmrkProperty::PendingNftAccept,
-				)
-				.ok()?;
-
-				if is_pending {
-					return None;
-				}
-
 				let rmrk_child_collection =
 					<Pallet<T>>::rmrk_collection_id(child_collection).ok()?;
 
@@ -151,6 +140,14 @@
 					nft_id: child_token.0,
 				})
 			})
+			.chain(
+				<Pallet<T>>::iterate_pending_children(collection_id, nft_id)?.map(
+					|(child_collection, child_nft_id)| RmrkNftChild {
+						collection_id: child_collection,
+						nft_id: child_nft_id,
+					},
+				),
+			)
 			.collect(),
 	)
 }
@@ -224,7 +221,11 @@
 		nft_id,
 		PropertyScope::Rmrk,
 	)
-	.filter_map(|(_, value)| {
+	.filter_map(|(key, value)| {
+		if !is_valid_key_prefix(&key, RESOURCE_ID_PREFIX) {
+			return None;
+		}
+
 		let resource_info: RmrkResourceInfo = <Pallet<T>>::decode_property(&value).ok()?;
 
 		Some(resource_info)
modifiedpallets/proxy-rmrk-core/src/weights.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/src/weights.rs
+++ b/pallets/proxy-rmrk-core/src/weights.rs
@@ -3,7 +3,7 @@
 //! Autogenerated weights for pallet_proxy_rmrk_core
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-06-21, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-07-01, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
@@ -64,7 +64,7 @@
 	// Storage: Common CollectionById (r:0 w:1)
 	// Storage: RmrkCore UniqueCollectionId (r:0 w:1)
 	fn create_collection() -> Weight {
-		(49_986_000 as Weight)
+		(49_365_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(8 as Weight))
 	}
@@ -77,7 +77,7 @@
 	// Storage: Nonfungible TokensBurnt (r:0 w:1)
 	// Storage: Common AdminAmount (r:0 w:1)
 	fn destroy_collection() -> Weight {
-		(50_177_000 as Weight)
+		(49_903_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
@@ -85,7 +85,7 @@
 	// Storage: Common CollectionById (r:1 w:1)
 	// Storage: Common CollectionProperties (r:1 w:0)
 	fn change_collection_issuer() -> Weight {
-		(25_949_000 as Weight)
+		(26_134_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(3 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -95,7 +95,7 @@
 	// Storage: Nonfungible TokensMinted (r:1 w:0)
 	// Storage: Nonfungible TokensBurnt (r:1 w:0)
 	fn lock_collection() -> Weight {
-		(27_183_000 as Weight)
+		(28_020_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(5 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -109,9 +109,9 @@
 	// Storage: Nonfungible Owned (r:0 w:1)
 	// Storage: Nonfungible TokenAuxProperties (r:2 w:2)
 	fn mint_nft(b: u32, ) -> Weight {
-		(65_512_000 as Weight)
-			// Standard Error: 12_000
-			.saturating_add((11_525_000 as Weight).saturating_mul(b as Weight))
+		(67_476_000 as Weight)
+			// Standard Error: 19_000
+			.saturating_add((12_373_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(6 as Weight))
 			.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
@@ -129,8 +129,8 @@
 	// Storage: Nonfungible TokenProperties (r:0 w:1)
 	fn burn_nft(b: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 1_472_000
-			.saturating_add((296_221_000 as Weight).saturating_mul(b as Weight))
+			// Standard Error: 1_500_000
+			.saturating_add((300_520_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(9 as Weight))
 			.saturating_add(T::DbWeight::get().reads((4 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
@@ -146,7 +146,7 @@
 	// Storage: Nonfungible TokenChildren (r:0 w:1)
 	// Storage: Nonfungible Owned (r:0 w:2)
 	fn send() -> Weight {
-		(82_778_000 as Weight)
+		(84_023_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(12 as Weight))
 			.saturating_add(T::DbWeight::get().writes(6 as Weight))
 	}
@@ -157,27 +157,29 @@
 	// Storage: Nonfungible AccountBalance (r:2 w:2)
 	// Storage: Nonfungible Allowance (r:1 w:0)
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	// Storage: Nonfungible TokenChildren (r:0 w:1)
 	// Storage: Nonfungible Owned (r:0 w:2)
 	fn accept_nft() -> Weight {
-		(90_190_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(15 as Weight))
-			.saturating_add(T::DbWeight::get().writes(7 as Weight))
+		(98_502_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(16 as Weight))
+			.saturating_add(T::DbWeight::get().writes(8 as Weight))
 	}
 	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
 	// Storage: Common CollectionProperties (r:1 w:0)
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Nonfungible TokenData (r:5 w:5)
 	// Storage: Nonfungible TokenProperties (r:1 w:5)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	// Storage: Nonfungible TokenChildren (r:9 w:4)
 	// Storage: Nonfungible TokensBurnt (r:1 w:1)
 	// Storage: Nonfungible AccountBalance (r:5 w:5)
 	// Storage: Nonfungible Allowance (r:5 w:0)
 	// Storage: Nonfungible Owned (r:0 w:5)
 	fn reject_nft() -> Weight {
-		(262_238_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(29 as Weight))
-			.saturating_add(T::DbWeight::get().writes(25 as Weight))
+		(277_017_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(30 as Weight))
+			.saturating_add(T::DbWeight::get().writes(26 as Weight))
 	}
 	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
 	// Storage: Common CollectionProperties (r:1 w:0)
@@ -185,7 +187,7 @@
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	// Storage: Nonfungible TokenData (r:5 w:0)
 	fn set_property() -> Weight {
-		(55_187_000 as Weight)
+		(55_408_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(9 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -195,7 +197,7 @@
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	// Storage: Nonfungible TokenData (r:5 w:0)
 	fn set_priority() -> Weight {
-		(54_092_000 as Weight)
+		(55_063_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(9 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -206,7 +208,7 @@
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	fn add_basic_resource() -> Weight {
-		(62_551_000 as Weight)
+		(64_656_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(10 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -215,11 +217,11 @@
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Nonfungible TokenData (r:5 w:0)
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
-	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	// Storage: Nonfungible TokenAuxProperties (r:2 w:2)
 	fn add_composable_resource() -> Weight {
-		(61_778_000 as Weight)
-			.saturating_add(T::DbWeight::get().reads(10 as Weight))
-			.saturating_add(T::DbWeight::get().writes(2 as Weight))
+		(67_593_000 as Weight)
+			.saturating_add(T::DbWeight::get().reads(11 as Weight))
+			.saturating_add(T::DbWeight::get().writes(3 as Weight))
 	}
 	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
 	// Storage: Common CollectionProperties (r:1 w:0)
@@ -228,7 +230,7 @@
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	fn add_slot_resource() -> Weight {
-		(62_700_000 as Weight)
+		(63_845_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(10 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
@@ -238,7 +240,7 @@
 	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	// Storage: Nonfungible TokenData (r:5 w:0)
 	fn remove_resource() -> Weight {
-		(52_920_000 as Weight)
+		(53_414_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(9 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -248,7 +250,7 @@
 	// Storage: Nonfungible TokenData (r:5 w:0)
 	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	fn accept_resource() -> Weight {
-		(52_450_000 as Weight)
+		(51_869_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(9 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -258,7 +260,7 @@
 	// Storage: Nonfungible TokenData (r:5 w:0)
 	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	fn accept_resource_removal() -> Weight {
-		(50_901_000 as Weight)
+		(53_168_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(9 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -275,7 +277,7 @@
 	// Storage: Common CollectionById (r:0 w:1)
 	// Storage: RmrkCore UniqueCollectionId (r:0 w:1)
 	fn create_collection() -> Weight {
-		(49_986_000 as Weight)
+		(49_365_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(8 as Weight))
 	}
@@ -288,7 +290,7 @@
 	// Storage: Nonfungible TokensBurnt (r:0 w:1)
 	// Storage: Common AdminAmount (r:0 w:1)
 	fn destroy_collection() -> Weight {
-		(50_177_000 as Weight)
+		(49_903_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
@@ -296,7 +298,7 @@
 	// Storage: Common CollectionById (r:1 w:1)
 	// Storage: Common CollectionProperties (r:1 w:0)
 	fn change_collection_issuer() -> Weight {
-		(25_949_000 as Weight)
+		(26_134_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(3 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -306,7 +308,7 @@
 	// Storage: Nonfungible TokensMinted (r:1 w:0)
 	// Storage: Nonfungible TokensBurnt (r:1 w:0)
 	fn lock_collection() -> Weight {
-		(27_183_000 as Weight)
+		(28_020_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(5 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -320,9 +322,9 @@
 	// Storage: Nonfungible Owned (r:0 w:1)
 	// Storage: Nonfungible TokenAuxProperties (r:2 w:2)
 	fn mint_nft(b: u32, ) -> Weight {
-		(65_512_000 as Weight)
-			// Standard Error: 12_000
-			.saturating_add((11_525_000 as Weight).saturating_mul(b as Weight))
+		(67_476_000 as Weight)
+			// Standard Error: 19_000
+			.saturating_add((12_373_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
@@ -340,8 +342,8 @@
 	// Storage: Nonfungible TokenProperties (r:0 w:1)
 	fn burn_nft(b: u32, ) -> Weight {
 		(0 as Weight)
-			// Standard Error: 1_472_000
-			.saturating_add((296_221_000 as Weight).saturating_mul(b as Weight))
+			// Standard Error: 1_500_000
+			.saturating_add((300_520_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(9 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((4 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
@@ -357,7 +359,7 @@
 	// Storage: Nonfungible TokenChildren (r:0 w:1)
 	// Storage: Nonfungible Owned (r:0 w:2)
 	fn send() -> Weight {
-		(82_778_000 as Weight)
+		(84_023_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(12 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(6 as Weight))
 	}
@@ -368,27 +370,29 @@
 	// Storage: Nonfungible AccountBalance (r:2 w:2)
 	// Storage: Nonfungible Allowance (r:1 w:0)
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	// Storage: Nonfungible TokenChildren (r:0 w:1)
 	// Storage: Nonfungible Owned (r:0 w:2)
 	fn accept_nft() -> Weight {
-		(90_190_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(15 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(7 as Weight))
+		(98_502_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(16 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(8 as Weight))
 	}
 	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
 	// Storage: Common CollectionProperties (r:1 w:0)
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Nonfungible TokenData (r:5 w:5)
 	// Storage: Nonfungible TokenProperties (r:1 w:5)
+	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	// Storage: Nonfungible TokenChildren (r:9 w:4)
 	// Storage: Nonfungible TokensBurnt (r:1 w:1)
 	// Storage: Nonfungible AccountBalance (r:5 w:5)
 	// Storage: Nonfungible Allowance (r:5 w:0)
 	// Storage: Nonfungible Owned (r:0 w:5)
 	fn reject_nft() -> Weight {
-		(262_238_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(29 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(25 as Weight))
+		(277_017_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(30 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(26 as Weight))
 	}
 	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
 	// Storage: Common CollectionProperties (r:1 w:0)
@@ -396,7 +400,7 @@
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	// Storage: Nonfungible TokenData (r:5 w:0)
 	fn set_property() -> Weight {
-		(55_187_000 as Weight)
+		(55_408_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(9 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -406,7 +410,7 @@
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	// Storage: Nonfungible TokenData (r:5 w:0)
 	fn set_priority() -> Weight {
-		(54_092_000 as Weight)
+		(55_063_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(9 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -417,7 +421,7 @@
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	fn add_basic_resource() -> Weight {
-		(62_551_000 as Weight)
+		(64_656_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(10 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
@@ -426,11 +430,11 @@
 	// Storage: Common CollectionById (r:1 w:0)
 	// Storage: Nonfungible TokenData (r:5 w:0)
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
-	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
+	// Storage: Nonfungible TokenAuxProperties (r:2 w:2)
 	fn add_composable_resource() -> Weight {
-		(61_778_000 as Weight)
-			.saturating_add(RocksDbWeight::get().reads(10 as Weight))
-			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
+		(67_593_000 as Weight)
+			.saturating_add(RocksDbWeight::get().reads(11 as Weight))
+			.saturating_add(RocksDbWeight::get().writes(3 as Weight))
 	}
 	// Storage: RmrkCore UniqueCollectionId (r:1 w:0)
 	// Storage: Common CollectionProperties (r:1 w:0)
@@ -439,7 +443,7 @@
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	fn add_slot_resource() -> Weight {
-		(62_700_000 as Weight)
+		(63_845_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(10 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
@@ -449,7 +453,7 @@
 	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	// Storage: Nonfungible TokenData (r:5 w:0)
 	fn remove_resource() -> Weight {
-		(52_920_000 as Weight)
+		(53_414_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(9 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -459,7 +463,7 @@
 	// Storage: Nonfungible TokenData (r:5 w:0)
 	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	fn accept_resource() -> Weight {
-		(52_450_000 as Weight)
+		(51_869_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(9 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
@@ -469,7 +473,7 @@
 	// Storage: Nonfungible TokenData (r:5 w:0)
 	// Storage: Nonfungible TokenAuxProperties (r:1 w:1)
 	fn accept_resource_removal() -> Weight {
-		(50_901_000 as Weight)
+		(53_168_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(9 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
modifiedpallets/proxy-rmrk-equip/src/weights.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-equip/src/weights.rs
+++ b/pallets/proxy-rmrk-equip/src/weights.rs
@@ -3,7 +3,7 @@
 //! Autogenerated weights for pallet_proxy_rmrk_equip
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2022-06-21, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2022-07-01, STEPS: `50`, REPEAT: 80, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: None, WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024
 
 // Executed Command:
@@ -54,9 +54,9 @@
 	// Storage: Nonfungible TokenData (r:0 w:1)
 	// Storage: Nonfungible Owned (r:0 w:1)
 	fn create_base(b: u32, ) -> Weight {
-		(62_832_000 as Weight)
-			// Standard Error: 22_000
-			.saturating_add((20_106_000 as Weight).saturating_mul(b as Weight))
+		(57_871_000 as Weight)
+			// Standard Error: 21_000
+			.saturating_add((19_870_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(6 as Weight))
 			.saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(T::DbWeight::get().writes(8 as Weight))
@@ -71,9 +71,9 @@
 	// Storage: Nonfungible TokenData (r:0 w:1)
 	// Storage: Nonfungible Owned (r:0 w:1)
 	fn theme_add(b: u32, ) -> Weight {
-		(46_793_000 as Weight)
-			// Standard Error: 61_000
-			.saturating_add((3_061_000 as Weight).saturating_mul(b as Weight))
+		(46_121_000 as Weight)
+			// Standard Error: 31_000
+			.saturating_add((2_988_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(T::DbWeight::get().reads(6 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
@@ -82,7 +82,7 @@
 	// Storage: RmrkEquip InernalPartId (r:1 w:0)
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	fn equippable() -> Weight {
-		(32_495_000 as Weight)
+		(32_032_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(4 as Weight))
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
@@ -103,9 +103,9 @@
 	// Storage: Nonfungible TokenData (r:0 w:1)
 	// Storage: Nonfungible Owned (r:0 w:1)
 	fn create_base(b: u32, ) -> Weight {
-		(62_832_000 as Weight)
-			// Standard Error: 22_000
-			.saturating_add((20_106_000 as Weight).saturating_mul(b as Weight))
+		(57_871_000 as Weight)
+			// Standard Error: 21_000
+			.saturating_add((19_870_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
 			.saturating_add(RocksDbWeight::get().reads((2 as Weight).saturating_mul(b as Weight)))
 			.saturating_add(RocksDbWeight::get().writes(8 as Weight))
@@ -120,9 +120,9 @@
 	// Storage: Nonfungible TokenData (r:0 w:1)
 	// Storage: Nonfungible Owned (r:0 w:1)
 	fn theme_add(b: u32, ) -> Weight {
-		(46_793_000 as Weight)
-			// Standard Error: 61_000
-			.saturating_add((3_061_000 as Weight).saturating_mul(b as Weight))
+		(46_121_000 as Weight)
+			// Standard Error: 31_000
+			.saturating_add((2_988_000 as Weight).saturating_mul(b as Weight))
 			.saturating_add(RocksDbWeight::get().reads(6 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
@@ -131,7 +131,7 @@
 	// Storage: RmrkEquip InernalPartId (r:1 w:0)
 	// Storage: Nonfungible TokenProperties (r:1 w:1)
 	fn equippable() -> Weight {
-		(32_495_000 as Weight)
+		(32_032_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(4 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
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::{
@@ -314,6 +314,7 @@
 		_sender: T::CrossAccountId,
 		_token_id: TokenId,
 		_property: Vec<Property>,
+		_nesting_budget: &dyn Budget,
 	) -> DispatchResultWithPostInfo {
 		fail!(<Error<T>>::SettingPropertiesNotAllowed)
 	}
@@ -331,6 +332,7 @@
 		_sender: T::CrossAccountId,
 		_token_id: TokenId,
 		_property_keys: Vec<PropertyKey>,
+		_nesting_budget: &dyn Budget,
 	) -> DispatchResultWithPostInfo {
 		fail!(<Error<T>>::SettingPropertiesNotAllowed)
 	}
@@ -340,7 +342,7 @@
 		_sender: <T>::CrossAccountId,
 		_from: (CollectionId, TokenId),
 		_under: TokenId,
-		_budget: &dyn Budget,
+		_nesting_budget: &dyn Budget,
 	) -> sp_runtime::DispatchResult {
 		fail!(<Error<T>>::RefungibleDisallowsNesting)
 	}
@@ -405,4 +407,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/eth/mod.rsdiffbeforeafterboth
--- a/pallets/unique/src/eth/mod.rs
+++ b/pallets/unique/src/eth/mod.rs
@@ -48,7 +48,7 @@
 impl<T: Config + pallet_nonfungible::Config> EvmCollectionHelpers<T> {
 	#[weight(<SelfWeightOf<T>>::create_collection())]
 	fn create_nonfungible_collection(
-		&self,
+		&mut self,
 		caller: caller,
 		name: string,
 		description: string,
modifiedpallets/unique/src/eth/stubs/CollectionHelpers.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/unique/src/eth/stubs/CollectionHelpers.soldiffbeforeafterboth
--- a/pallets/unique/src/eth/stubs/CollectionHelpers.sol
+++ b/pallets/unique/src/eth/stubs/CollectionHelpers.sol
@@ -36,12 +36,12 @@
 		string memory name,
 		string memory description,
 		string memory tokenPrefix
-	) public view returns (address) {
+	) public returns (address) {
 		require(false, stub_error);
 		name;
 		description;
 		tokenPrefix;
-		dummy;
+		dummy = 0;
 		return 0x0000000000000000000000000000000000000000;
 	}
 
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! {
@@ -651,8 +654,9 @@
 			ensure!(!properties.is_empty(), Error::<T>::EmptyArgument);
 
 			let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
+			let budget = budget::Value::new(NESTING_BUDGET);
 
-			dispatch_tx::<T, _>(collection_id, |d| d.set_token_properties(sender, token_id, properties))
+			dispatch_tx::<T, _>(collection_id, |d| d.set_token_properties(sender, token_id, properties, &budget))
 		}
 
 		#[weight = T::CommonWeightInfo::delete_token_properties(property_keys.len() as u32)]
@@ -666,8 +670,9 @@
 			ensure!(!property_keys.is_empty(), Error::<T>::EmptyArgument);
 
 			let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
+			let budget = budget::Value::new(NESTING_BUDGET);
 
-			dispatch_tx::<T, _>(collection_id, |d| d.delete_token_properties(sender, token_id, property_keys))
+			dispatch_tx::<T, _>(collection_id, |d| d.delete_token_properties(sender, token_id, property_keys, &budget))
 		}
 
 		#[weight = T::CommonWeightInfo::set_token_property_permissions(property_permissions.len() as u32)]
@@ -898,5 +903,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
--- a/runtime/opal/src/lib.rs
+++ b/runtime/opal/src/lib.rs
@@ -192,7 +192,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 924000,
+	spec_version: 924010,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 1,
@@ -925,6 +925,7 @@
 	type Event = Event;
 	type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;
 	type CommonWeightInfo = CommonWeights<Self>;
+	type RefungibleExtensionsWeightInfo = CommonWeights<Self>;
 }
 
 parameter_types! {
modifiedruntime/quartz/src/lib.rsdiffbeforeafterboth
--- a/runtime/quartz/src/lib.rs
+++ b/runtime/quartz/src/lib.rs
@@ -191,7 +191,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 924000,
+	spec_version: 924010,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 1,
@@ -924,6 +924,7 @@
 	type Event = Event;
 	type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;
 	type CommonWeightInfo = CommonWeights<Self>;
+	type RefungibleExtensionsWeightInfo = CommonWeights<Self>;
 }
 
 parameter_types! {
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;
modifiedruntime/unique/src/lib.rsdiffbeforeafterboth
--- a/runtime/unique/src/lib.rs
+++ b/runtime/unique/src/lib.rs
@@ -190,7 +190,7 @@
 	spec_name: create_runtime_str!(RUNTIME_NAME),
 	impl_name: create_runtime_str!(RUNTIME_NAME),
 	authoring_version: 1,
-	spec_version: 924000,
+	spec_version: 924010,
 	impl_version: 0,
 	apis: RUNTIME_API_VERSIONS,
 	transaction_version: 1,
@@ -913,6 +913,7 @@
 	type Event = Event;
 	type WeightInfo = pallet_unique::weights::SubstrateWeight<Self>;
 	type CommonWeightInfo = CommonWeights<Self>;
+	type RefungibleExtensionsWeightInfo = CommonWeights<Self>;
 }
 
 parameter_types! {
modifiedtests/package.jsondiffbeforeafterboth
--- a/tests/package.json
+++ b/tests/package.json
@@ -60,6 +60,7 @@
     "testAddToContractAllowList": "mocha --timeout 9999999 -r ts-node/register ./**/addToContractAllowList.test.ts",
     "testTransfer": "mocha --timeout 9999999 -r ts-node/register ./**/transfer.test.ts",
     "testBurnItem": "mocha --timeout 9999999 -r ts-node/register ./**/burnItem.test.ts",
+    "testAdminTransferAndBurn": "mocha --timeout 9999999 -r ts-node/register ./**/adminTransferAndBurn.test.ts",
     "testSetMintPermission": "mocha --timeout 9999999 -r ts-node/register ./**/setMintPermission.test.ts",
     "testCreditFeesToTreasury": "mocha --timeout 9999999 -r ts-node/register ./**/creditFeesToTreasury.test.ts",
     "testContractSponsoring": "mocha --timeout 9999999 -r ts-node/register ./**/contractSponsoring.test.ts",
@@ -78,6 +79,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 .",
addedtests/src/adminTransferAndBurn.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/adminTransferAndBurn.test.ts
@@ -0,0 +1,72 @@
+// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.
+// This file is part of Unique Network.
+
+// Unique Network is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Unique Network is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
+
+import {IKeyringPair} from '@polkadot/types/types';
+import chai from 'chai';
+import chaiAsPromised from 'chai-as-promised';
+import {default as usingApi} from './substrate/substrate-api';
+import {
+  createCollectionExpectSuccess,
+  createItemExpectSuccess,
+  transferExpectFailure,
+  transferFromExpectSuccess,
+  burnItemExpectFailure,
+  burnFromExpectSuccess,
+  setCollectionLimitsExpectSuccess,
+} from './util/helpers';
+
+chai.use(chaiAsPromised);
+const expect = chai.expect;
+
+describe('Integration Test: ownerCanTransfer allows admins to use only transferFrom/burnFrom:', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+  let charlie: IKeyringPair;
+
+  before(async () => {
+    await usingApi(async (api, privateKeyWrapper) => {
+      alice = privateKeyWrapper('//Alice');
+      bob = privateKeyWrapper('//Bob');
+      charlie = privateKeyWrapper('//Charlie');
+    });
+  });
+
+  it('admin transfers other user\'s token', async () => {
+    await usingApi(async () => {
+      const collectionId = await createCollectionExpectSuccess();
+      await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
+
+      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', {Substrate: bob.address});
+
+      await transferExpectFailure(collectionId, tokenId, alice, charlie);
+
+      await transferFromExpectSuccess(collectionId, tokenId, alice, bob, charlie, 1);
+    });
+  });
+
+  it('admin burns other user\'s token', async () => {
+    await usingApi(async () => {
+      const collectionId = await createCollectionExpectSuccess();
+      await setCollectionLimitsExpectSuccess(alice, collectionId, {ownerCanTransfer: true});
+
+      const tokenId = await createItemExpectSuccess(alice, collectionId, 'NFT', {Substrate: bob.address});
+
+      await burnItemExpectFailure(alice, collectionId, tokenId);
+
+      await burnFromExpectSuccess(alice, bob, collectionId, tokenId);
+    });
+  });
+});
modifiedtests/src/burnItem.test.tsdiffbeforeafterboth
--- a/tests/src/burnItem.test.ts
+++ b/tests/src/burnItem.test.ts
@@ -155,7 +155,7 @@
     await addCollectionAdminExpectSuccess(alice, collectionId, bob.address);
 
     await usingApi(async (api) => {
-      const tx = api.tx.unique.burnItem(collectionId, tokenId, 1);
+      const tx = api.tx.unique.burnFrom(collectionId, {Substrate: alice.address}, tokenId, 1);
       const events = await submitTransactionAsync(bob, tx);
       const result = getGenericResult(events);
 
modifiedtests/src/createMultipleItemsEx.test.tsdiffbeforeafterboth
--- a/tests/src/createMultipleItemsEx.test.ts
+++ b/tests/src/createMultipleItemsEx.test.ts
@@ -16,9 +16,9 @@
 
 import {expect} from 'chai';
 import usingApi, {executeTransaction} from './substrate/substrate-api';
-import {addCollectionAdminExpectSuccess, createCollectionExpectSuccess, createCollectionWithPropsExpectSuccess} from './util/helpers';
+import {addCollectionAdminExpectSuccess, createCollectionExpectSuccess, createCollectionWithPropsExpectSuccess, getBalance, getLastTokenId} from './util/helpers';
 
-describe('createMultipleItemsEx', () => {
+describe('Integration Test: createMultipleItemsEx', () => {
   it('can initialize multiple NFT with different owners', async () => {
     const collection = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
     await usingApi(async (api, privateKeyWrapper) => {
@@ -128,6 +128,77 @@
     });
   });
 
+  it('can initialize fungible with multiple owners', async () => {
+    const collection = await createCollectionExpectSuccess({mode: {type: 'Fungible', decimalPoints: 0}});
+    await usingApi(async (api, privateKeyWrapper) => {
+      const alice = privateKeyWrapper('//Alice');
+      const bob = privateKeyWrapper('//Bob');
+
+      const users = new Map();
+      users.set(JSON.stringify({Substrate: alice.address}), 50);
+      users.set(JSON.stringify({Substrate: bob.address}), 100);
+
+      await executeTransaction(api, alice, api.tx.unique.createMultipleItemsEx(collection, {
+        Fungible: users,
+      }));
+
+      expect(await getBalance(api, collection, alice.address, 0)).to.equal(50n);
+      expect(await getBalance(api, collection, bob.address, 0)).to.equal(100n);
+    });
+  });
+
+  it('can initialize an RFT with multiple owners', async () => {
+    const collection = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
+    await usingApi(async (api, privateKeyWrapper) => {
+      const alice = privateKeyWrapper('//Alice');
+      const bob = privateKeyWrapper('//Bob');
+
+      const users = new Map();
+      users.set(JSON.stringify({Substrate: alice.address}), 1);
+      users.set(JSON.stringify({Substrate: bob.address}), 2);
+
+      await executeTransaction(api, alice, api.tx.unique.createMultipleItemsEx(collection, {
+        RefungibleMultipleOwners: {
+          users: users,
+        },
+      }));
+      
+      const itemsListIndexAfter = await getLastTokenId(api, collection);
+      expect(itemsListIndexAfter).to.be.equal(1);
+
+      expect(await getBalance(api, collection, alice.address, 1)).to.be.equal(1n);
+      expect(await getBalance(api, collection, bob.address, 1)).to.be.equal(2n);
+    });
+  });
+
+  it('can initialize multiple RFTs with the same owner', async () => {
+    const collection = await createCollectionExpectSuccess({mode: {type: 'ReFungible'}});
+    await usingApi(async (api, privateKeyWrapper) => {
+      const alice = privateKeyWrapper('//Alice');
+
+      const item1User = new Map();
+      item1User.set(JSON.stringify({Substrate: alice.address}), 1);
+
+      const item2User = new Map();
+      item2User.set(JSON.stringify({Substrate: alice.address}), 3);
+
+      await executeTransaction(api, alice, api.tx.unique.createMultipleItemsEx(collection, {
+        RefungibleMultipleItems: [
+          {users: item1User},
+          {users: item2User},
+        ],
+      }));
+      
+      const itemsListIndexAfter = await getLastTokenId(api, collection);
+      expect(itemsListIndexAfter).to.be.equal(2);
+
+      expect(await getBalance(api, collection, alice.address, 1)).to.be.equal(1n);
+      expect(await getBalance(api, collection, alice.address, 2)).to.be.equal(3n);
+    });
+  });
+});
+
+describe('Negative test: createMultipleItemsEx', () => {
   it('No editing rights', async () => {
     const collection = await createCollectionWithPropsExpectSuccess({properties: [{key: 'key1', value: 'v'}],
       propPerm:   [{key: 'key1', permission: {mutable: true, collectionAdmin: false, tokenOwner: false}}]});
@@ -321,4 +392,3 @@
     });
   });
 });
-'';
modifiedtests/src/eth/api/CollectionHelpers.soldiffbeforeafterboth
--- a/tests/src/eth/api/CollectionHelpers.sol
+++ b/tests/src/eth/api/CollectionHelpers.sol
@@ -27,7 +27,7 @@
 		string memory name,
 		string memory description,
 		string memory tokenPrefix
-	) external view returns (address);
+	) external returns (address);
 
 	// Selector: isCollectionExist(address) c3de1494
 	function isCollectionExist(address collectionAddress)
modifiedtests/src/eth/collectionHelpersAbi.jsondiffbeforeafterboth
--- a/tests/src/eth/collectionHelpersAbi.json
+++ b/tests/src/eth/collectionHelpersAbi.json
@@ -26,7 +26,7 @@
     ],
     "name": "createNonfungibleCollection",
     "outputs": [{ "internalType": "address", "name": "", "type": "address" }],
-    "stateMutability": "view",
+    "stateMutability": "nonpayable",
     "type": "function"
   },
   {
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
@@ -13,45 +13,45 @@
       /**
        * A balance was set by root.
        **/
-      BalanceSet: AugmentedEvent<ApiType, [who: AccountId32, free: u128, reserved: u128], { who: AccountId32, free: u128, reserved: u128 }>;
+      BalanceSet: AugmentedEvent<ApiType, [AccountId32, u128, u128]>;
       /**
        * Some amount was deposited (e.g. for transaction fees).
        **/
-      Deposit: AugmentedEvent<ApiType, [who: AccountId32, amount: u128], { who: AccountId32, amount: u128 }>;
+      Deposit: AugmentedEvent<ApiType, [AccountId32, u128]>;
       /**
        * An account was removed whose balance was non-zero but below ExistentialDeposit,
        * resulting in an outright loss.
        **/
-      DustLost: AugmentedEvent<ApiType, [account: AccountId32, amount: u128], { account: AccountId32, amount: u128 }>;
+      DustLost: AugmentedEvent<ApiType, [AccountId32, u128]>;
       /**
        * An account was created with some free balance.
        **/
-      Endowed: AugmentedEvent<ApiType, [account: AccountId32, freeBalance: u128], { account: AccountId32, freeBalance: u128 }>;
+      Endowed: AugmentedEvent<ApiType, [AccountId32, u128]>;
       /**
        * Some balance was reserved (moved from free to reserved).
        **/
-      Reserved: AugmentedEvent<ApiType, [who: AccountId32, amount: u128], { who: AccountId32, amount: u128 }>;
+      Reserved: AugmentedEvent<ApiType, [AccountId32, u128]>;
       /**
        * Some balance was moved from the reserve of the first account to the second account.
        * Final argument indicates the destination balance type.
        **/
-      ReserveRepatriated: AugmentedEvent<ApiType, [from: AccountId32, to: AccountId32, amount: u128, destinationStatus: FrameSupportTokensMiscBalanceStatus], { from: AccountId32, to: AccountId32, amount: u128, destinationStatus: FrameSupportTokensMiscBalanceStatus }>;
+      ReserveRepatriated: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128, FrameSupportTokensMiscBalanceStatus]>;
       /**
        * Some amount was removed from the account (e.g. for misbehavior).
        **/
-      Slashed: AugmentedEvent<ApiType, [who: AccountId32, amount: u128], { who: AccountId32, amount: u128 }>;
+      Slashed: AugmentedEvent<ApiType, [AccountId32, u128]>;
       /**
        * Transfer succeeded.
        **/
-      Transfer: AugmentedEvent<ApiType, [from: AccountId32, to: AccountId32, amount: u128], { from: AccountId32, to: AccountId32, amount: u128 }>;
+      Transfer: AugmentedEvent<ApiType, [AccountId32, AccountId32, u128]>;
       /**
        * Some balance was unreserved (moved from reserved to free).
        **/
-      Unreserved: AugmentedEvent<ApiType, [who: AccountId32, amount: u128], { who: AccountId32, amount: u128 }>;
+      Unreserved: AugmentedEvent<ApiType, [AccountId32, u128]>;
       /**
        * Some amount was withdrawn from the account (e.g. for transaction fees).
        **/
-      Withdraw: AugmentedEvent<ApiType, [who: AccountId32, amount: u128], { who: AccountId32, amount: u128 }>;
+      Withdraw: AugmentedEvent<ApiType, [AccountId32, u128]>;
       /**
        * Generic event
        **/
@@ -166,32 +166,26 @@
     dmpQueue: {
       /**
        * Downward message executed with the given outcome.
-       * \[ id, outcome \]
        **/
       ExecutedDownward: AugmentedEvent<ApiType, [U8aFixed, XcmV2TraitsOutcome]>;
       /**
        * Downward message is invalid XCM.
-       * \[ id \]
        **/
       InvalidFormat: AugmentedEvent<ApiType, [U8aFixed]>;
       /**
        * Downward message is overweight and was placed in the overweight queue.
-       * \[ id, index, required \]
        **/
       OverweightEnqueued: AugmentedEvent<ApiType, [U8aFixed, u64, u64]>;
       /**
        * Downward message from the overweight queue was executed.
-       * \[ index, used \]
        **/
       OverweightServiced: AugmentedEvent<ApiType, [u64, u64]>;
       /**
        * Downward message is unsupported version of XCM.
-       * \[ id \]
        **/
       UnsupportedVersion: AugmentedEvent<ApiType, [U8aFixed]>;
       /**
        * The weight limit for handling downward messages was reached.
-       * \[ id, remaining, required \]
        **/
       WeightExhausted: AugmentedEvent<ApiType, [U8aFixed, u64, u64]>;
       /**
@@ -246,12 +240,10 @@
     parachainSystem: {
       /**
        * Downward messages were processed using the given weight.
-       * \[ weight_used, result_mqc_head \]
        **/
       DownwardMessagesProcessed: AugmentedEvent<ApiType, [u64, H256]>;
       /**
        * Some downward messages have been received and will be processed.
-       * \[ count \]
        **/
       DownwardMessagesReceived: AugmentedEvent<ApiType, [u32]>;
       /**
@@ -398,28 +390,29 @@
       [key: string]: AugmentedEvent<ApiType>;
     };
     rmrkCore: {
-      CollectionCreated: AugmentedEvent<ApiType, [issuer: AccountId32, collectionId: u32], { issuer: AccountId32, collectionId: u32 }>;
-      CollectionDestroyed: AugmentedEvent<ApiType, [issuer: AccountId32, collectionId: u32], { issuer: AccountId32, collectionId: u32 }>;
-      CollectionLocked: AugmentedEvent<ApiType, [issuer: AccountId32, collectionId: u32], { issuer: AccountId32, collectionId: u32 }>;
-      IssuerChanged: AugmentedEvent<ApiType, [oldIssuer: AccountId32, newIssuer: AccountId32, collectionId: u32], { oldIssuer: AccountId32, newIssuer: AccountId32, collectionId: u32 }>;
-      NFTAccepted: AugmentedEvent<ApiType, [sender: AccountId32, recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple, collectionId: u32, nftId: u32], { sender: AccountId32, recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple, collectionId: u32, nftId: u32 }>;
-      NFTBurned: AugmentedEvent<ApiType, [owner: AccountId32, nftId: u32], { owner: AccountId32, nftId: u32 }>;
-      NftMinted: AugmentedEvent<ApiType, [owner: AccountId32, collectionId: u32, nftId: u32], { owner: AccountId32, collectionId: u32, nftId: u32 }>;
-      NFTRejected: AugmentedEvent<ApiType, [sender: AccountId32, collectionId: u32, nftId: u32], { sender: AccountId32, collectionId: u32, nftId: u32 }>;
-      NFTSent: AugmentedEvent<ApiType, [sender: AccountId32, recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple, collectionId: u32, nftId: u32, approvalRequired: bool], { sender: AccountId32, recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple, collectionId: u32, nftId: u32, approvalRequired: bool }>;
-      PrioritySet: AugmentedEvent<ApiType, [collectionId: u32, nftId: u32], { collectionId: u32, nftId: u32 }>;
-      PropertySet: AugmentedEvent<ApiType, [collectionId: u32, maybeNftId: Option<u32>, key: Bytes, value: Bytes], { collectionId: u32, maybeNftId: Option<u32>, key: Bytes, value: Bytes }>;
-      ResourceAccepted: AugmentedEvent<ApiType, [nftId: u32, resourceId: u32], { nftId: u32, resourceId: u32 }>;
-      ResourceAdded: AugmentedEvent<ApiType, [nftId: u32, resourceId: u32], { nftId: u32, resourceId: u32 }>;
-      ResourceRemoval: AugmentedEvent<ApiType, [nftId: u32, resourceId: u32], { nftId: u32, resourceId: u32 }>;
-      ResourceRemovalAccepted: AugmentedEvent<ApiType, [nftId: u32, resourceId: u32], { nftId: u32, resourceId: u32 }>;
+      CollectionCreated: AugmentedEvent<ApiType, [AccountId32, u32]>;
+      CollectionDestroyed: AugmentedEvent<ApiType, [AccountId32, u32]>;
+      CollectionLocked: AugmentedEvent<ApiType, [AccountId32, u32]>;
+      IssuerChanged: AugmentedEvent<ApiType, [AccountId32, AccountId32, u32]>;
+      NFTAccepted: AugmentedEvent<ApiType, [AccountId32, RmrkTraitsNftAccountIdOrCollectionNftTuple, u32, u32]>;
+      NFTBurned: AugmentedEvent<ApiType, [AccountId32, u32]>;
+      NftMinted: AugmentedEvent<ApiType, [AccountId32, u32, u32]>;
+      NFTRejected: AugmentedEvent<ApiType, [AccountId32, u32, u32]>;
+      NFTSent: AugmentedEvent<ApiType, [AccountId32, RmrkTraitsNftAccountIdOrCollectionNftTuple, u32, u32, bool]>;
+      PrioritySet: AugmentedEvent<ApiType, [u32, u32]>;
+      PropertySet: AugmentedEvent<ApiType, [u32, Option<u32>, Bytes, Bytes]>;
+      ResourceAccepted: AugmentedEvent<ApiType, [u32, u32]>;
+      ResourceAdded: AugmentedEvent<ApiType, [u32, u32]>;
+      ResourceRemoval: AugmentedEvent<ApiType, [u32, u32]>;
+      ResourceRemovalAccepted: AugmentedEvent<ApiType, [u32, u32]>;
       /**
        * Generic event
        **/
       [key: string]: AugmentedEvent<ApiType>;
     };
     rmrkEquip: {
-      BaseCreated: AugmentedEvent<ApiType, [issuer: AccountId32, baseId: u32], { issuer: AccountId32, baseId: u32 }>;
+      BaseCreated: AugmentedEvent<ApiType, [AccountId32, u32]>;
+      EquippablesUpdated: AugmentedEvent<ApiType, [u32, u32]>;
       /**
        * Generic event
        **/
@@ -429,19 +422,19 @@
       /**
        * The call for the provided hash was not found so the task has been aborted.
        **/
-      CallLookupFailed: AugmentedEvent<ApiType, [task: ITuple<[u32, u32]>, id: Option<U8aFixed>, error: FrameSupportScheduleLookupError], { task: ITuple<[u32, u32]>, id: Option<U8aFixed>, error: FrameSupportScheduleLookupError }>;
+      CallLookupFailed: AugmentedEvent<ApiType, [ITuple<[u32, u32]>, Option<U8aFixed>, FrameSupportScheduleLookupError]>;
       /**
        * Canceled some task.
        **/
-      Canceled: AugmentedEvent<ApiType, [when: u32, index: u32], { when: u32, index: u32 }>;
+      Canceled: AugmentedEvent<ApiType, [u32, u32]>;
       /**
        * Dispatched some task.
        **/
-      Dispatched: AugmentedEvent<ApiType, [task: ITuple<[u32, u32]>, id: Option<U8aFixed>, result: Result<Null, SpRuntimeDispatchError>], { task: ITuple<[u32, u32]>, id: Option<U8aFixed>, result: Result<Null, SpRuntimeDispatchError> }>;
+      Dispatched: AugmentedEvent<ApiType, [ITuple<[u32, u32]>, Option<U8aFixed>, Result<Null, SpRuntimeDispatchError>]>;
       /**
        * Scheduled some task.
        **/
-      Scheduled: AugmentedEvent<ApiType, [when: u32, index: u32], { when: u32, index: u32 }>;
+      Scheduled: AugmentedEvent<ApiType, [u32, u32]>;
       /**
        * Generic event
        **/
@@ -461,15 +454,15 @@
       /**
        * The \[sudoer\] just switched identity; the old key is supplied if one existed.
        **/
-      KeyChanged: AugmentedEvent<ApiType, [oldSudoer: Option<AccountId32>], { oldSudoer: Option<AccountId32> }>;
+      KeyChanged: AugmentedEvent<ApiType, [Option<AccountId32>]>;
       /**
        * A sudo just took place. \[result\]
        **/
-      Sudid: AugmentedEvent<ApiType, [sudoResult: Result<Null, SpRuntimeDispatchError>], { sudoResult: Result<Null, SpRuntimeDispatchError> }>;
+      Sudid: AugmentedEvent<ApiType, [Result<Null, SpRuntimeDispatchError>]>;
       /**
        * A sudo just took place. \[result\]
        **/
-      SudoAsDone: AugmentedEvent<ApiType, [sudoResult: Result<Null, SpRuntimeDispatchError>], { sudoResult: Result<Null, SpRuntimeDispatchError> }>;
+      SudoAsDone: AugmentedEvent<ApiType, [Result<Null, SpRuntimeDispatchError>]>;
       /**
        * Generic event
        **/
@@ -483,23 +476,23 @@
       /**
        * An extrinsic failed.
        **/
-      ExtrinsicFailed: AugmentedEvent<ApiType, [dispatchError: SpRuntimeDispatchError, dispatchInfo: FrameSupportWeightsDispatchInfo], { dispatchError: SpRuntimeDispatchError, dispatchInfo: FrameSupportWeightsDispatchInfo }>;
+      ExtrinsicFailed: AugmentedEvent<ApiType, [SpRuntimeDispatchError, FrameSupportWeightsDispatchInfo]>;
       /**
        * An extrinsic completed successfully.
        **/
-      ExtrinsicSuccess: AugmentedEvent<ApiType, [dispatchInfo: FrameSupportWeightsDispatchInfo], { dispatchInfo: FrameSupportWeightsDispatchInfo }>;
+      ExtrinsicSuccess: AugmentedEvent<ApiType, [FrameSupportWeightsDispatchInfo]>;
       /**
        * An account was reaped.
        **/
-      KilledAccount: AugmentedEvent<ApiType, [account: AccountId32], { account: AccountId32 }>;
+      KilledAccount: AugmentedEvent<ApiType, [AccountId32]>;
       /**
        * A new account was created.
        **/
-      NewAccount: AugmentedEvent<ApiType, [account: AccountId32], { account: AccountId32 }>;
+      NewAccount: AugmentedEvent<ApiType, [AccountId32]>;
       /**
        * On on-chain remark happened.
        **/
-      Remarked: AugmentedEvent<ApiType, [sender: AccountId32, hash_: H256], { sender: AccountId32, hash_: H256 }>;
+      Remarked: AugmentedEvent<ApiType, [AccountId32, H256]>;
       /**
        * Generic event
        **/
@@ -509,31 +502,31 @@
       /**
        * Some funds have been allocated.
        **/
-      Awarded: AugmentedEvent<ApiType, [proposalIndex: u32, award: u128, account: AccountId32], { proposalIndex: u32, award: u128, account: AccountId32 }>;
+      Awarded: AugmentedEvent<ApiType, [u32, u128, AccountId32]>;
       /**
        * Some of our funds have been burnt.
        **/
-      Burnt: AugmentedEvent<ApiType, [burntFunds: u128], { burntFunds: u128 }>;
+      Burnt: AugmentedEvent<ApiType, [u128]>;
       /**
        * Some funds have been deposited.
        **/
-      Deposit: AugmentedEvent<ApiType, [value: u128], { value: u128 }>;
+      Deposit: AugmentedEvent<ApiType, [u128]>;
       /**
        * New proposal.
        **/
-      Proposed: AugmentedEvent<ApiType, [proposalIndex: u32], { proposalIndex: u32 }>;
+      Proposed: AugmentedEvent<ApiType, [u32]>;
       /**
        * A proposal was rejected; funds were slashed.
        **/
-      Rejected: AugmentedEvent<ApiType, [proposalIndex: u32, slashed: u128], { proposalIndex: u32, slashed: u128 }>;
+      Rejected: AugmentedEvent<ApiType, [u32, u128]>;
       /**
        * Spending has finished; this is the amount that rolls over until next spend.
        **/
-      Rollover: AugmentedEvent<ApiType, [rolloverBalance: u128], { rolloverBalance: u128 }>;
+      Rollover: AugmentedEvent<ApiType, [u128]>;
       /**
        * We have ended a spend period and will now allocate funds.
        **/
-      Spending: AugmentedEvent<ApiType, [budgetRemaining: u128], { budgetRemaining: u128 }>;
+      Spending: AugmentedEvent<ApiType, [u128]>;
       /**
        * Generic event
        **/
@@ -636,15 +629,15 @@
       /**
        * Claimed vesting.
        **/
-      Claimed: AugmentedEvent<ApiType, [who: AccountId32, amount: u128], { who: AccountId32, amount: u128 }>;
+      Claimed: AugmentedEvent<ApiType, [AccountId32, u128]>;
       /**
        * Added new vesting schedule.
        **/
-      VestingScheduleAdded: AugmentedEvent<ApiType, [from: AccountId32, to: AccountId32, vestingSchedule: OrmlVestingVestingSchedule], { from: AccountId32, to: AccountId32, vestingSchedule: OrmlVestingVestingSchedule }>;
+      VestingScheduleAdded: AugmentedEvent<ApiType, [AccountId32, AccountId32, OrmlVestingVestingSchedule]>;
       /**
        * Updated vesting schedules.
        **/
-      VestingSchedulesUpdated: AugmentedEvent<ApiType, [who: AccountId32], { who: AccountId32 }>;
+      VestingSchedulesUpdated: AugmentedEvent<ApiType, [AccountId32]>;
       /**
        * 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)
@@ -906,7 +907,7 @@
       deleteCollectionProperties: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, propertyKeys: Vec<Bytes> | (Bytes | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [u32, Vec<Bytes>]>;
       deleteTokenProperties: AugmentedSubmittable<(collectionId: u32 | AnyNumber | Uint8Array, tokenId: u32 | AnyNumber | Uint8Array, propertyKeys: Vec<Bytes> | (Bytes | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [u32, u32, Vec<Bytes>]>;
       /**
-       * **DANGEROUS**: Destroys collection and all NFTs within this collection. Users irrecoverably lose their assets and may lose real money.
+       * Destroys collection if no tokens within this collection
        * 
        * # Permissions
        * 
@@ -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
before · tests/src/interfaces/types-lookup.ts
1// Auto-generated via `yarn polkadot-types-from-defs`, do not edit2/* eslint-disable */34declare module '@polkadot/types/lookup' {5  import type { BTreeMap, BTreeSet, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';6  import type { ITuple } from '@polkadot/types-codec/types';7  import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime';8  import type { Event } from '@polkadot/types/interfaces/system';910  /** @name PolkadotPrimitivesV2PersistedValidationData (2) */11  export interface PolkadotPrimitivesV2PersistedValidationData extends Struct {12    readonly parentHead: Bytes;13    readonly relayParentNumber: u32;14    readonly relayParentStorageRoot: H256;15    readonly maxPovSize: u32;16  }1718  /** @name PolkadotPrimitivesV2UpgradeRestriction (9) */19  export interface PolkadotPrimitivesV2UpgradeRestriction extends Enum {20    readonly isPresent: boolean;21    readonly type: 'Present';22  }2324  /** @name SpTrieStorageProof (10) */25  export interface SpTrieStorageProof extends Struct {26    readonly trieNodes: BTreeSet<Bytes>;27  }2829  /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (13) */30  export interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct {31    readonly dmqMqcHead: H256;32    readonly relayDispatchQueueSize: ITuple<[u32, u32]>;33    readonly ingressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;34    readonly egressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;35  }3637  /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (18) */38  export interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct {39    readonly maxCapacity: u32;40    readonly maxTotalSize: u32;41    readonly maxMessageSize: u32;42    readonly msgCount: u32;43    readonly totalSize: u32;44    readonly mqcHead: Option<H256>;45  }4647  /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (20) */48  export interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct {49    readonly maxCodeSize: u32;50    readonly maxHeadDataSize: u32;51    readonly maxUpwardQueueCount: u32;52    readonly maxUpwardQueueSize: u32;53    readonly maxUpwardMessageSize: u32;54    readonly maxUpwardMessageNumPerCandidate: u32;55    readonly hrmpMaxMessageNumPerCandidate: u32;56    readonly validationUpgradeCooldown: u32;57    readonly validationUpgradeDelay: u32;58  }5960  /** @name PolkadotCorePrimitivesOutboundHrmpMessage (26) */61  export interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct {62    readonly recipient: u32;63    readonly data: Bytes;64  }6566  /** @name CumulusPalletParachainSystemCall (28) */67  export interface CumulusPalletParachainSystemCall extends Enum {68    readonly isSetValidationData: boolean;69    readonly asSetValidationData: {70      readonly data: CumulusPrimitivesParachainInherentParachainInherentData;71    } & Struct;72    readonly isSudoSendUpwardMessage: boolean;73    readonly asSudoSendUpwardMessage: {74      readonly message: Bytes;75    } & Struct;76    readonly isAuthorizeUpgrade: boolean;77    readonly asAuthorizeUpgrade: {78      readonly codeHash: H256;79    } & Struct;80    readonly isEnactAuthorizedUpgrade: boolean;81    readonly asEnactAuthorizedUpgrade: {82      readonly code: Bytes;83    } & Struct;84    readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade';85  }8687  /** @name CumulusPrimitivesParachainInherentParachainInherentData (29) */88  export interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct {89    readonly validationData: PolkadotPrimitivesV2PersistedValidationData;90    readonly relayChainState: SpTrieStorageProof;91    readonly downwardMessages: Vec<PolkadotCorePrimitivesInboundDownwardMessage>;92    readonly horizontalMessages: BTreeMap<u32, Vec<PolkadotCorePrimitivesInboundHrmpMessage>>;93  }9495  /** @name PolkadotCorePrimitivesInboundDownwardMessage (31) */96  export interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct {97    readonly sentAt: u32;98    readonly msg: Bytes;99  }100101  /** @name PolkadotCorePrimitivesInboundHrmpMessage (34) */102  export interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct {103    readonly sentAt: u32;104    readonly data: Bytes;105  }106107  /** @name CumulusPalletParachainSystemEvent (37) */108  export interface CumulusPalletParachainSystemEvent extends Enum {109    readonly isValidationFunctionStored: boolean;110    readonly isValidationFunctionApplied: boolean;111    readonly asValidationFunctionApplied: u32;112    readonly isValidationFunctionDiscarded: boolean;113    readonly isUpgradeAuthorized: boolean;114    readonly asUpgradeAuthorized: H256;115    readonly isDownwardMessagesReceived: boolean;116    readonly asDownwardMessagesReceived: u32;117    readonly isDownwardMessagesProcessed: boolean;118    readonly asDownwardMessagesProcessed: ITuple<[u64, H256]>;119    readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed';120  }121122  /** @name CumulusPalletParachainSystemError (38) */123  export interface CumulusPalletParachainSystemError extends Enum {124    readonly isOverlappingUpgrades: boolean;125    readonly isProhibitedByPolkadot: boolean;126    readonly isTooBig: boolean;127    readonly isValidationDataNotAvailable: boolean;128    readonly isHostConfigurationNotAvailable: boolean;129    readonly isNotScheduled: boolean;130    readonly isNothingAuthorized: boolean;131    readonly isUnauthorized: boolean;132    readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized';133  }134135  /** @name PalletBalancesAccountData (41) */136  export interface PalletBalancesAccountData extends Struct {137    readonly free: u128;138    readonly reserved: u128;139    readonly miscFrozen: u128;140    readonly feeFrozen: u128;141  }142143  /** @name PalletBalancesBalanceLock (43) */144  export interface PalletBalancesBalanceLock extends Struct {145    readonly id: U8aFixed;146    readonly amount: u128;147    readonly reasons: PalletBalancesReasons;148  }149150  /** @name PalletBalancesReasons (45) */151  export interface PalletBalancesReasons extends Enum {152    readonly isFee: boolean;153    readonly isMisc: boolean;154    readonly isAll: boolean;155    readonly type: 'Fee' | 'Misc' | 'All';156  }157158  /** @name PalletBalancesReserveData (48) */159  export interface PalletBalancesReserveData extends Struct {160    readonly id: U8aFixed;161    readonly amount: u128;162  }163164  /** @name PalletBalancesReleases (51) */165  export interface PalletBalancesReleases extends Enum {166    readonly isV100: boolean;167    readonly isV200: boolean;168    readonly type: 'V100' | 'V200';169  }170171  /** @name PalletBalancesCall (52) */172  export interface PalletBalancesCall extends Enum {173    readonly isTransfer: boolean;174    readonly asTransfer: {175      readonly dest: MultiAddress;176      readonly value: Compact<u128>;177    } & Struct;178    readonly isSetBalance: boolean;179    readonly asSetBalance: {180      readonly who: MultiAddress;181      readonly newFree: Compact<u128>;182      readonly newReserved: Compact<u128>;183    } & Struct;184    readonly isForceTransfer: boolean;185    readonly asForceTransfer: {186      readonly source: MultiAddress;187      readonly dest: MultiAddress;188      readonly value: Compact<u128>;189    } & Struct;190    readonly isTransferKeepAlive: boolean;191    readonly asTransferKeepAlive: {192      readonly dest: MultiAddress;193      readonly value: Compact<u128>;194    } & Struct;195    readonly isTransferAll: boolean;196    readonly asTransferAll: {197      readonly dest: MultiAddress;198      readonly keepAlive: bool;199    } & Struct;200    readonly isForceUnreserve: boolean;201    readonly asForceUnreserve: {202      readonly who: MultiAddress;203      readonly amount: u128;204    } & Struct;205    readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve';206  }207208  /** @name PalletBalancesEvent (58) */209  export interface PalletBalancesEvent extends Enum {210    readonly isEndowed: boolean;211    readonly asEndowed: {212      readonly account: AccountId32;213      readonly freeBalance: u128;214    } & Struct;215    readonly isDustLost: boolean;216    readonly asDustLost: {217      readonly account: AccountId32;218      readonly amount: u128;219    } & Struct;220    readonly isTransfer: boolean;221    readonly asTransfer: {222      readonly from: AccountId32;223      readonly to: AccountId32;224      readonly amount: u128;225    } & Struct;226    readonly isBalanceSet: boolean;227    readonly asBalanceSet: {228      readonly who: AccountId32;229      readonly free: u128;230      readonly reserved: u128;231    } & Struct;232    readonly isReserved: boolean;233    readonly asReserved: {234      readonly who: AccountId32;235      readonly amount: u128;236    } & Struct;237    readonly isUnreserved: boolean;238    readonly asUnreserved: {239      readonly who: AccountId32;240      readonly amount: u128;241    } & Struct;242    readonly isReserveRepatriated: boolean;243    readonly asReserveRepatriated: {244      readonly from: AccountId32;245      readonly to: AccountId32;246      readonly amount: u128;247      readonly destinationStatus: FrameSupportTokensMiscBalanceStatus;248    } & Struct;249    readonly isDeposit: boolean;250    readonly asDeposit: {251      readonly who: AccountId32;252      readonly amount: u128;253    } & Struct;254    readonly isWithdraw: boolean;255    readonly asWithdraw: {256      readonly who: AccountId32;257      readonly amount: u128;258    } & Struct;259    readonly isSlashed: boolean;260    readonly asSlashed: {261      readonly who: AccountId32;262      readonly amount: u128;263    } & Struct;264    readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed';265  }266267  /** @name FrameSupportTokensMiscBalanceStatus (59) */268  export interface FrameSupportTokensMiscBalanceStatus extends Enum {269    readonly isFree: boolean;270    readonly isReserved: boolean;271    readonly type: 'Free' | 'Reserved';272  }273274  /** @name PalletBalancesError (60) */275  export interface PalletBalancesError extends Enum {276    readonly isVestingBalance: boolean;277    readonly isLiquidityRestrictions: boolean;278    readonly isInsufficientBalance: boolean;279    readonly isExistentialDeposit: boolean;280    readonly isKeepAlive: boolean;281    readonly isExistingVestingSchedule: boolean;282    readonly isDeadAccount: boolean;283    readonly isTooManyReserves: boolean;284    readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves';285  }286287  /** @name PalletTimestampCall (63) */288  export interface PalletTimestampCall extends Enum {289    readonly isSet: boolean;290    readonly asSet: {291      readonly now: Compact<u64>;292    } & Struct;293    readonly type: 'Set';294  }295296  /** @name PalletTransactionPaymentReleases (66) */297  export interface PalletTransactionPaymentReleases extends Enum {298    readonly isV1Ancient: boolean;299    readonly isV2: boolean;300    readonly type: 'V1Ancient' | 'V2';301  }302303  /** @name FrameSupportWeightsWeightToFeeCoefficient (68) */304  export interface FrameSupportWeightsWeightToFeeCoefficient extends Struct {305    readonly coeffInteger: u128;306    readonly coeffFrac: Perbill;307    readonly negative: bool;308    readonly degree: u8;309  }310311  /** @name PalletTreasuryProposal (70) */312  export interface PalletTreasuryProposal extends Struct {313    readonly proposer: AccountId32;314    readonly value: u128;315    readonly beneficiary: AccountId32;316    readonly bond: u128;317  }318319  /** @name PalletTreasuryCall (73) */320  export interface PalletTreasuryCall extends Enum {321    readonly isProposeSpend: boolean;322    readonly asProposeSpend: {323      readonly value: Compact<u128>;324      readonly beneficiary: MultiAddress;325    } & Struct;326    readonly isRejectProposal: boolean;327    readonly asRejectProposal: {328      readonly proposalId: Compact<u32>;329    } & Struct;330    readonly isApproveProposal: boolean;331    readonly asApproveProposal: {332      readonly proposalId: Compact<u32>;333    } & Struct;334    readonly isRemoveApproval: boolean;335    readonly asRemoveApproval: {336      readonly proposalId: Compact<u32>;337    } & Struct;338    readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'RemoveApproval';339  }340341  /** @name PalletTreasuryEvent (75) */342  export interface PalletTreasuryEvent extends Enum {343    readonly isProposed: boolean;344    readonly asProposed: {345      readonly proposalIndex: u32;346    } & Struct;347    readonly isSpending: boolean;348    readonly asSpending: {349      readonly budgetRemaining: u128;350    } & Struct;351    readonly isAwarded: boolean;352    readonly asAwarded: {353      readonly proposalIndex: u32;354      readonly award: u128;355      readonly account: AccountId32;356    } & Struct;357    readonly isRejected: boolean;358    readonly asRejected: {359      readonly proposalIndex: u32;360      readonly slashed: u128;361    } & Struct;362    readonly isBurnt: boolean;363    readonly asBurnt: {364      readonly burntFunds: u128;365    } & Struct;366    readonly isRollover: boolean;367    readonly asRollover: {368      readonly rolloverBalance: u128;369    } & Struct;370    readonly isDeposit: boolean;371    readonly asDeposit: {372      readonly value: u128;373    } & Struct;374    readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit';375  }376377  /** @name FrameSupportPalletId (78) */378  export interface FrameSupportPalletId extends U8aFixed {}379380  /** @name PalletTreasuryError (79) */381  export interface PalletTreasuryError extends Enum {382    readonly isInsufficientProposersBalance: boolean;383    readonly isInvalidIndex: boolean;384    readonly isTooManyApprovals: boolean;385    readonly isProposalNotApproved: boolean;386    readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'ProposalNotApproved';387  }388389  /** @name PalletSudoCall (80) */390  export interface PalletSudoCall extends Enum {391    readonly isSudo: boolean;392    readonly asSudo: {393      readonly call: Call;394    } & Struct;395    readonly isSudoUncheckedWeight: boolean;396    readonly asSudoUncheckedWeight: {397      readonly call: Call;398      readonly weight: u64;399    } & Struct;400    readonly isSetKey: boolean;401    readonly asSetKey: {402      readonly new_: MultiAddress;403    } & Struct;404    readonly isSudoAs: boolean;405    readonly asSudoAs: {406      readonly who: MultiAddress;407      readonly call: Call;408    } & Struct;409    readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs';410  }411412  /** @name FrameSystemCall (82) */413  export interface FrameSystemCall extends Enum {414    readonly isFillBlock: boolean;415    readonly asFillBlock: {416      readonly ratio: Perbill;417    } & Struct;418    readonly isRemark: boolean;419    readonly asRemark: {420      readonly remark: Bytes;421    } & Struct;422    readonly isSetHeapPages: boolean;423    readonly asSetHeapPages: {424      readonly pages: u64;425    } & Struct;426    readonly isSetCode: boolean;427    readonly asSetCode: {428      readonly code: Bytes;429    } & Struct;430    readonly isSetCodeWithoutChecks: boolean;431    readonly asSetCodeWithoutChecks: {432      readonly code: Bytes;433    } & Struct;434    readonly isSetStorage: boolean;435    readonly asSetStorage: {436      readonly items: Vec<ITuple<[Bytes, Bytes]>>;437    } & Struct;438    readonly isKillStorage: boolean;439    readonly asKillStorage: {440      readonly keys_: Vec<Bytes>;441    } & Struct;442    readonly isKillPrefix: boolean;443    readonly asKillPrefix: {444      readonly prefix: Bytes;445      readonly subkeys: u32;446    } & Struct;447    readonly isRemarkWithEvent: boolean;448    readonly asRemarkWithEvent: {449      readonly remark: Bytes;450    } & Struct;451    readonly type: 'FillBlock' | 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent';452  }453454  /** @name OrmlVestingModuleCall (85) */455  export interface OrmlVestingModuleCall extends Enum {456    readonly isClaim: boolean;457    readonly isVestedTransfer: boolean;458    readonly asVestedTransfer: {459      readonly dest: MultiAddress;460      readonly schedule: OrmlVestingVestingSchedule;461    } & Struct;462    readonly isUpdateVestingSchedules: boolean;463    readonly asUpdateVestingSchedules: {464      readonly who: MultiAddress;465      readonly vestingSchedules: Vec<OrmlVestingVestingSchedule>;466    } & Struct;467    readonly isClaimFor: boolean;468    readonly asClaimFor: {469      readonly dest: MultiAddress;470    } & Struct;471    readonly type: 'Claim' | 'VestedTransfer' | 'UpdateVestingSchedules' | 'ClaimFor';472  }473474  /** @name OrmlVestingVestingSchedule (86) */475  export interface OrmlVestingVestingSchedule extends Struct {476    readonly start: u32;477    readonly period: u32;478    readonly periodCount: u32;479    readonly perPeriod: Compact<u128>;480  }481482  /** @name CumulusPalletXcmpQueueCall (88) */483  export interface CumulusPalletXcmpQueueCall extends Enum {484    readonly isServiceOverweight: boolean;485    readonly asServiceOverweight: {486      readonly index: u64;487      readonly weightLimit: u64;488    } & Struct;489    readonly isSuspendXcmExecution: boolean;490    readonly isResumeXcmExecution: boolean;491    readonly isUpdateSuspendThreshold: boolean;492    readonly asUpdateSuspendThreshold: {493      readonly new_: u32;494    } & Struct;495    readonly isUpdateDropThreshold: boolean;496    readonly asUpdateDropThreshold: {497      readonly new_: u32;498    } & Struct;499    readonly isUpdateResumeThreshold: boolean;500    readonly asUpdateResumeThreshold: {501      readonly new_: u32;502    } & Struct;503    readonly isUpdateThresholdWeight: boolean;504    readonly asUpdateThresholdWeight: {505      readonly new_: u64;506    } & Struct;507    readonly isUpdateWeightRestrictDecay: boolean;508    readonly asUpdateWeightRestrictDecay: {509      readonly new_: u64;510    } & Struct;511    readonly isUpdateXcmpMaxIndividualWeight: boolean;512    readonly asUpdateXcmpMaxIndividualWeight: {513      readonly new_: u64;514    } & Struct;515    readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight';516  }517518  /** @name PalletXcmCall (89) */519  export interface PalletXcmCall extends Enum {520    readonly isSend: boolean;521    readonly asSend: {522      readonly dest: XcmVersionedMultiLocation;523      readonly message: XcmVersionedXcm;524    } & Struct;525    readonly isTeleportAssets: boolean;526    readonly asTeleportAssets: {527      readonly dest: XcmVersionedMultiLocation;528      readonly beneficiary: XcmVersionedMultiLocation;529      readonly assets: XcmVersionedMultiAssets;530      readonly feeAssetItem: u32;531    } & Struct;532    readonly isReserveTransferAssets: boolean;533    readonly asReserveTransferAssets: {534      readonly dest: XcmVersionedMultiLocation;535      readonly beneficiary: XcmVersionedMultiLocation;536      readonly assets: XcmVersionedMultiAssets;537      readonly feeAssetItem: u32;538    } & Struct;539    readonly isExecute: boolean;540    readonly asExecute: {541      readonly message: XcmVersionedXcm;542      readonly maxWeight: u64;543    } & Struct;544    readonly isForceXcmVersion: boolean;545    readonly asForceXcmVersion: {546      readonly location: XcmV1MultiLocation;547      readonly xcmVersion: u32;548    } & Struct;549    readonly isForceDefaultXcmVersion: boolean;550    readonly asForceDefaultXcmVersion: {551      readonly maybeXcmVersion: Option<u32>;552    } & Struct;553    readonly isForceSubscribeVersionNotify: boolean;554    readonly asForceSubscribeVersionNotify: {555      readonly location: XcmVersionedMultiLocation;556    } & Struct;557    readonly isForceUnsubscribeVersionNotify: boolean;558    readonly asForceUnsubscribeVersionNotify: {559      readonly location: XcmVersionedMultiLocation;560    } & Struct;561    readonly isLimitedReserveTransferAssets: boolean;562    readonly asLimitedReserveTransferAssets: {563      readonly dest: XcmVersionedMultiLocation;564      readonly beneficiary: XcmVersionedMultiLocation;565      readonly assets: XcmVersionedMultiAssets;566      readonly feeAssetItem: u32;567      readonly weightLimit: XcmV2WeightLimit;568    } & Struct;569    readonly isLimitedTeleportAssets: boolean;570    readonly asLimitedTeleportAssets: {571      readonly dest: XcmVersionedMultiLocation;572      readonly beneficiary: XcmVersionedMultiLocation;573      readonly assets: XcmVersionedMultiAssets;574      readonly feeAssetItem: u32;575      readonly weightLimit: XcmV2WeightLimit;576    } & Struct;577    readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets';578  }579580  /** @name XcmVersionedMultiLocation (90) */581  export interface XcmVersionedMultiLocation extends Enum {582    readonly isV0: boolean;583    readonly asV0: XcmV0MultiLocation;584    readonly isV1: boolean;585    readonly asV1: XcmV1MultiLocation;586    readonly type: 'V0' | 'V1';587  }588589  /** @name XcmV0MultiLocation (91) */590  export interface XcmV0MultiLocation extends Enum {591    readonly isNull: boolean;592    readonly isX1: boolean;593    readonly asX1: XcmV0Junction;594    readonly isX2: boolean;595    readonly asX2: ITuple<[XcmV0Junction, XcmV0Junction]>;596    readonly isX3: boolean;597    readonly asX3: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction]>;598    readonly isX4: boolean;599    readonly asX4: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;600    readonly isX5: boolean;601    readonly asX5: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;602    readonly isX6: boolean;603    readonly asX6: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;604    readonly isX7: boolean;605    readonly asX7: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;606    readonly isX8: boolean;607    readonly asX8: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;608    readonly type: 'Null' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';609  }610611  /** @name XcmV0Junction (92) */612  export interface XcmV0Junction extends Enum {613    readonly isParent: boolean;614    readonly isParachain: boolean;615    readonly asParachain: Compact<u32>;616    readonly isAccountId32: boolean;617    readonly asAccountId32: {618      readonly network: XcmV0JunctionNetworkId;619      readonly id: U8aFixed;620    } & Struct;621    readonly isAccountIndex64: boolean;622    readonly asAccountIndex64: {623      readonly network: XcmV0JunctionNetworkId;624      readonly index: Compact<u64>;625    } & Struct;626    readonly isAccountKey20: boolean;627    readonly asAccountKey20: {628      readonly network: XcmV0JunctionNetworkId;629      readonly key: U8aFixed;630    } & Struct;631    readonly isPalletInstance: boolean;632    readonly asPalletInstance: u8;633    readonly isGeneralIndex: boolean;634    readonly asGeneralIndex: Compact<u128>;635    readonly isGeneralKey: boolean;636    readonly asGeneralKey: Bytes;637    readonly isOnlyChild: boolean;638    readonly isPlurality: boolean;639    readonly asPlurality: {640      readonly id: XcmV0JunctionBodyId;641      readonly part: XcmV0JunctionBodyPart;642    } & Struct;643    readonly type: 'Parent' | 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';644  }645646  /** @name XcmV0JunctionNetworkId (93) */647  export interface XcmV0JunctionNetworkId extends Enum {648    readonly isAny: boolean;649    readonly isNamed: boolean;650    readonly asNamed: Bytes;651    readonly isPolkadot: boolean;652    readonly isKusama: boolean;653    readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama';654  }655656  /** @name XcmV0JunctionBodyId (94) */657  export interface XcmV0JunctionBodyId extends Enum {658    readonly isUnit: boolean;659    readonly isNamed: boolean;660    readonly asNamed: Bytes;661    readonly isIndex: boolean;662    readonly asIndex: Compact<u32>;663    readonly isExecutive: boolean;664    readonly isTechnical: boolean;665    readonly isLegislative: boolean;666    readonly isJudicial: boolean;667    readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial';668  }669670  /** @name XcmV0JunctionBodyPart (95) */671  export interface XcmV0JunctionBodyPart extends Enum {672    readonly isVoice: boolean;673    readonly isMembers: boolean;674    readonly asMembers: {675      readonly count: Compact<u32>;676    } & Struct;677    readonly isFraction: boolean;678    readonly asFraction: {679      readonly nom: Compact<u32>;680      readonly denom: Compact<u32>;681    } & Struct;682    readonly isAtLeastProportion: boolean;683    readonly asAtLeastProportion: {684      readonly nom: Compact<u32>;685      readonly denom: Compact<u32>;686    } & Struct;687    readonly isMoreThanProportion: boolean;688    readonly asMoreThanProportion: {689      readonly nom: Compact<u32>;690      readonly denom: Compact<u32>;691    } & Struct;692    readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion';693  }694695  /** @name XcmV1MultiLocation (96) */696  export interface XcmV1MultiLocation extends Struct {697    readonly parents: u8;698    readonly interior: XcmV1MultilocationJunctions;699  }700701  /** @name XcmV1MultilocationJunctions (97) */702  export interface XcmV1MultilocationJunctions extends Enum {703    readonly isHere: boolean;704    readonly isX1: boolean;705    readonly asX1: XcmV1Junction;706    readonly isX2: boolean;707    readonly asX2: ITuple<[XcmV1Junction, XcmV1Junction]>;708    readonly isX3: boolean;709    readonly asX3: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction]>;710    readonly isX4: boolean;711    readonly asX4: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;712    readonly isX5: boolean;713    readonly asX5: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;714    readonly isX6: boolean;715    readonly asX6: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;716    readonly isX7: boolean;717    readonly asX7: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;718    readonly isX8: boolean;719    readonly asX8: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;720    readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';721  }722723  /** @name XcmV1Junction (98) */724  export interface XcmV1Junction extends Enum {725    readonly isParachain: boolean;726    readonly asParachain: Compact<u32>;727    readonly isAccountId32: boolean;728    readonly asAccountId32: {729      readonly network: XcmV0JunctionNetworkId;730      readonly id: U8aFixed;731    } & Struct;732    readonly isAccountIndex64: boolean;733    readonly asAccountIndex64: {734      readonly network: XcmV0JunctionNetworkId;735      readonly index: Compact<u64>;736    } & Struct;737    readonly isAccountKey20: boolean;738    readonly asAccountKey20: {739      readonly network: XcmV0JunctionNetworkId;740      readonly key: U8aFixed;741    } & Struct;742    readonly isPalletInstance: boolean;743    readonly asPalletInstance: u8;744    readonly isGeneralIndex: boolean;745    readonly asGeneralIndex: Compact<u128>;746    readonly isGeneralKey: boolean;747    readonly asGeneralKey: Bytes;748    readonly isOnlyChild: boolean;749    readonly isPlurality: boolean;750    readonly asPlurality: {751      readonly id: XcmV0JunctionBodyId;752      readonly part: XcmV0JunctionBodyPart;753    } & Struct;754    readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';755  }756757  /** @name XcmVersionedXcm (99) */758  export interface XcmVersionedXcm extends Enum {759    readonly isV0: boolean;760    readonly asV0: XcmV0Xcm;761    readonly isV1: boolean;762    readonly asV1: XcmV1Xcm;763    readonly isV2: boolean;764    readonly asV2: XcmV2Xcm;765    readonly type: 'V0' | 'V1' | 'V2';766  }767768  /** @name XcmV0Xcm (100) */769  export interface XcmV0Xcm extends Enum {770    readonly isWithdrawAsset: boolean;771    readonly asWithdrawAsset: {772      readonly assets: Vec<XcmV0MultiAsset>;773      readonly effects: Vec<XcmV0Order>;774    } & Struct;775    readonly isReserveAssetDeposit: boolean;776    readonly asReserveAssetDeposit: {777      readonly assets: Vec<XcmV0MultiAsset>;778      readonly effects: Vec<XcmV0Order>;779    } & Struct;780    readonly isTeleportAsset: boolean;781    readonly asTeleportAsset: {782      readonly assets: Vec<XcmV0MultiAsset>;783      readonly effects: Vec<XcmV0Order>;784    } & Struct;785    readonly isQueryResponse: boolean;786    readonly asQueryResponse: {787      readonly queryId: Compact<u64>;788      readonly response: XcmV0Response;789    } & Struct;790    readonly isTransferAsset: boolean;791    readonly asTransferAsset: {792      readonly assets: Vec<XcmV0MultiAsset>;793      readonly dest: XcmV0MultiLocation;794    } & Struct;795    readonly isTransferReserveAsset: boolean;796    readonly asTransferReserveAsset: {797      readonly assets: Vec<XcmV0MultiAsset>;798      readonly dest: XcmV0MultiLocation;799      readonly effects: Vec<XcmV0Order>;800    } & Struct;801    readonly isTransact: boolean;802    readonly asTransact: {803      readonly originType: XcmV0OriginKind;804      readonly requireWeightAtMost: u64;805      readonly call: XcmDoubleEncoded;806    } & Struct;807    readonly isHrmpNewChannelOpenRequest: boolean;808    readonly asHrmpNewChannelOpenRequest: {809      readonly sender: Compact<u32>;810      readonly maxMessageSize: Compact<u32>;811      readonly maxCapacity: Compact<u32>;812    } & Struct;813    readonly isHrmpChannelAccepted: boolean;814    readonly asHrmpChannelAccepted: {815      readonly recipient: Compact<u32>;816    } & Struct;817    readonly isHrmpChannelClosing: boolean;818    readonly asHrmpChannelClosing: {819      readonly initiator: Compact<u32>;820      readonly sender: Compact<u32>;821      readonly recipient: Compact<u32>;822    } & Struct;823    readonly isRelayedFrom: boolean;824    readonly asRelayedFrom: {825      readonly who: XcmV0MultiLocation;826      readonly message: XcmV0Xcm;827    } & Struct;828    readonly type: 'WithdrawAsset' | 'ReserveAssetDeposit' | 'TeleportAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom';829  }830831  /** @name XcmV0MultiAsset (102) */832  export interface XcmV0MultiAsset extends Enum {833    readonly isNone: boolean;834    readonly isAll: boolean;835    readonly isAllFungible: boolean;836    readonly isAllNonFungible: boolean;837    readonly isAllAbstractFungible: boolean;838    readonly asAllAbstractFungible: {839      readonly id: Bytes;840    } & Struct;841    readonly isAllAbstractNonFungible: boolean;842    readonly asAllAbstractNonFungible: {843      readonly class: Bytes;844    } & Struct;845    readonly isAllConcreteFungible: boolean;846    readonly asAllConcreteFungible: {847      readonly id: XcmV0MultiLocation;848    } & Struct;849    readonly isAllConcreteNonFungible: boolean;850    readonly asAllConcreteNonFungible: {851      readonly class: XcmV0MultiLocation;852    } & Struct;853    readonly isAbstractFungible: boolean;854    readonly asAbstractFungible: {855      readonly id: Bytes;856      readonly amount: Compact<u128>;857    } & Struct;858    readonly isAbstractNonFungible: boolean;859    readonly asAbstractNonFungible: {860      readonly class: Bytes;861      readonly instance: XcmV1MultiassetAssetInstance;862    } & Struct;863    readonly isConcreteFungible: boolean;864    readonly asConcreteFungible: {865      readonly id: XcmV0MultiLocation;866      readonly amount: Compact<u128>;867    } & Struct;868    readonly isConcreteNonFungible: boolean;869    readonly asConcreteNonFungible: {870      readonly class: XcmV0MultiLocation;871      readonly instance: XcmV1MultiassetAssetInstance;872    } & Struct;873    readonly type: 'None' | 'All' | 'AllFungible' | 'AllNonFungible' | 'AllAbstractFungible' | 'AllAbstractNonFungible' | 'AllConcreteFungible' | 'AllConcreteNonFungible' | 'AbstractFungible' | 'AbstractNonFungible' | 'ConcreteFungible' | 'ConcreteNonFungible';874  }875876  /** @name XcmV1MultiassetAssetInstance (103) */877  export interface XcmV1MultiassetAssetInstance extends Enum {878    readonly isUndefined: boolean;879    readonly isIndex: boolean;880    readonly asIndex: Compact<u128>;881    readonly isArray4: boolean;882    readonly asArray4: U8aFixed;883    readonly isArray8: boolean;884    readonly asArray8: U8aFixed;885    readonly isArray16: boolean;886    readonly asArray16: U8aFixed;887    readonly isArray32: boolean;888    readonly asArray32: U8aFixed;889    readonly isBlob: boolean;890    readonly asBlob: Bytes;891    readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob';892  }893894  /** @name XcmV0Order (106) */895  export interface XcmV0Order extends Enum {896    readonly isNull: boolean;897    readonly isDepositAsset: boolean;898    readonly asDepositAsset: {899      readonly assets: Vec<XcmV0MultiAsset>;900      readonly dest: XcmV0MultiLocation;901    } & Struct;902    readonly isDepositReserveAsset: boolean;903    readonly asDepositReserveAsset: {904      readonly assets: Vec<XcmV0MultiAsset>;905      readonly dest: XcmV0MultiLocation;906      readonly effects: Vec<XcmV0Order>;907    } & Struct;908    readonly isExchangeAsset: boolean;909    readonly asExchangeAsset: {910      readonly give: Vec<XcmV0MultiAsset>;911      readonly receive: Vec<XcmV0MultiAsset>;912    } & Struct;913    readonly isInitiateReserveWithdraw: boolean;914    readonly asInitiateReserveWithdraw: {915      readonly assets: Vec<XcmV0MultiAsset>;916      readonly reserve: XcmV0MultiLocation;917      readonly effects: Vec<XcmV0Order>;918    } & Struct;919    readonly isInitiateTeleport: boolean;920    readonly asInitiateTeleport: {921      readonly assets: Vec<XcmV0MultiAsset>;922      readonly dest: XcmV0MultiLocation;923      readonly effects: Vec<XcmV0Order>;924    } & Struct;925    readonly isQueryHolding: boolean;926    readonly asQueryHolding: {927      readonly queryId: Compact<u64>;928      readonly dest: XcmV0MultiLocation;929      readonly assets: Vec<XcmV0MultiAsset>;930    } & Struct;931    readonly isBuyExecution: boolean;932    readonly asBuyExecution: {933      readonly fees: XcmV0MultiAsset;934      readonly weight: u64;935      readonly debt: u64;936      readonly haltOnError: bool;937      readonly xcm: Vec<XcmV0Xcm>;938    } & Struct;939    readonly type: 'Null' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';940  }941942  /** @name XcmV0Response (108) */943  export interface XcmV0Response extends Enum {944    readonly isAssets: boolean;945    readonly asAssets: Vec<XcmV0MultiAsset>;946    readonly type: 'Assets';947  }948949  /** @name XcmV0OriginKind (109) */950  export interface XcmV0OriginKind extends Enum {951    readonly isNative: boolean;952    readonly isSovereignAccount: boolean;953    readonly isSuperuser: boolean;954    readonly isXcm: boolean;955    readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm';956  }957958  /** @name XcmDoubleEncoded (110) */959  export interface XcmDoubleEncoded extends Struct {960    readonly encoded: Bytes;961  }962963  /** @name XcmV1Xcm (111) */964  export interface XcmV1Xcm extends Enum {965    readonly isWithdrawAsset: boolean;966    readonly asWithdrawAsset: {967      readonly assets: XcmV1MultiassetMultiAssets;968      readonly effects: Vec<XcmV1Order>;969    } & Struct;970    readonly isReserveAssetDeposited: boolean;971    readonly asReserveAssetDeposited: {972      readonly assets: XcmV1MultiassetMultiAssets;973      readonly effects: Vec<XcmV1Order>;974    } & Struct;975    readonly isReceiveTeleportedAsset: boolean;976    readonly asReceiveTeleportedAsset: {977      readonly assets: XcmV1MultiassetMultiAssets;978      readonly effects: Vec<XcmV1Order>;979    } & Struct;980    readonly isQueryResponse: boolean;981    readonly asQueryResponse: {982      readonly queryId: Compact<u64>;983      readonly response: XcmV1Response;984    } & Struct;985    readonly isTransferAsset: boolean;986    readonly asTransferAsset: {987      readonly assets: XcmV1MultiassetMultiAssets;988      readonly beneficiary: XcmV1MultiLocation;989    } & Struct;990    readonly isTransferReserveAsset: boolean;991    readonly asTransferReserveAsset: {992      readonly assets: XcmV1MultiassetMultiAssets;993      readonly dest: XcmV1MultiLocation;994      readonly effects: Vec<XcmV1Order>;995    } & Struct;996    readonly isTransact: boolean;997    readonly asTransact: {998      readonly originType: XcmV0OriginKind;999      readonly requireWeightAtMost: u64;1000      readonly call: XcmDoubleEncoded;1001    } & Struct;1002    readonly isHrmpNewChannelOpenRequest: boolean;1003    readonly asHrmpNewChannelOpenRequest: {1004      readonly sender: Compact<u32>;1005      readonly maxMessageSize: Compact<u32>;1006      readonly maxCapacity: Compact<u32>;1007    } & Struct;1008    readonly isHrmpChannelAccepted: boolean;1009    readonly asHrmpChannelAccepted: {1010      readonly recipient: Compact<u32>;1011    } & Struct;1012    readonly isHrmpChannelClosing: boolean;1013    readonly asHrmpChannelClosing: {1014      readonly initiator: Compact<u32>;1015      readonly sender: Compact<u32>;1016      readonly recipient: Compact<u32>;1017    } & Struct;1018    readonly isRelayedFrom: boolean;1019    readonly asRelayedFrom: {1020      readonly who: XcmV1MultilocationJunctions;1021      readonly message: XcmV1Xcm;1022    } & Struct;1023    readonly isSubscribeVersion: boolean;1024    readonly asSubscribeVersion: {1025      readonly queryId: Compact<u64>;1026      readonly maxResponseWeight: Compact<u64>;1027    } & Struct;1028    readonly isUnsubscribeVersion: boolean;1029    readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom' | 'SubscribeVersion' | 'UnsubscribeVersion';1030  }10311032  /** @name XcmV1MultiassetMultiAssets (112) */1033  export interface XcmV1MultiassetMultiAssets extends Vec<XcmV1MultiAsset> {}10341035  /** @name XcmV1MultiAsset (114) */1036  export interface XcmV1MultiAsset extends Struct {1037    readonly id: XcmV1MultiassetAssetId;1038    readonly fun: XcmV1MultiassetFungibility;1039  }10401041  /** @name XcmV1MultiassetAssetId (115) */1042  export interface XcmV1MultiassetAssetId extends Enum {1043    readonly isConcrete: boolean;1044    readonly asConcrete: XcmV1MultiLocation;1045    readonly isAbstract: boolean;1046    readonly asAbstract: Bytes;1047    readonly type: 'Concrete' | 'Abstract';1048  }10491050  /** @name XcmV1MultiassetFungibility (116) */1051  export interface XcmV1MultiassetFungibility extends Enum {1052    readonly isFungible: boolean;1053    readonly asFungible: Compact<u128>;1054    readonly isNonFungible: boolean;1055    readonly asNonFungible: XcmV1MultiassetAssetInstance;1056    readonly type: 'Fungible' | 'NonFungible';1057  }10581059  /** @name XcmV1Order (118) */1060  export interface XcmV1Order extends Enum {1061    readonly isNoop: boolean;1062    readonly isDepositAsset: boolean;1063    readonly asDepositAsset: {1064      readonly assets: XcmV1MultiassetMultiAssetFilter;1065      readonly maxAssets: u32;1066      readonly beneficiary: XcmV1MultiLocation;1067    } & Struct;1068    readonly isDepositReserveAsset: boolean;1069    readonly asDepositReserveAsset: {1070      readonly assets: XcmV1MultiassetMultiAssetFilter;1071      readonly maxAssets: u32;1072      readonly dest: XcmV1MultiLocation;1073      readonly effects: Vec<XcmV1Order>;1074    } & Struct;1075    readonly isExchangeAsset: boolean;1076    readonly asExchangeAsset: {1077      readonly give: XcmV1MultiassetMultiAssetFilter;1078      readonly receive: XcmV1MultiassetMultiAssets;1079    } & Struct;1080    readonly isInitiateReserveWithdraw: boolean;1081    readonly asInitiateReserveWithdraw: {1082      readonly assets: XcmV1MultiassetMultiAssetFilter;1083      readonly reserve: XcmV1MultiLocation;1084      readonly effects: Vec<XcmV1Order>;1085    } & Struct;1086    readonly isInitiateTeleport: boolean;1087    readonly asInitiateTeleport: {1088      readonly assets: XcmV1MultiassetMultiAssetFilter;1089      readonly dest: XcmV1MultiLocation;1090      readonly effects: Vec<XcmV1Order>;1091    } & Struct;1092    readonly isQueryHolding: boolean;1093    readonly asQueryHolding: {1094      readonly queryId: Compact<u64>;1095      readonly dest: XcmV1MultiLocation;1096      readonly assets: XcmV1MultiassetMultiAssetFilter;1097    } & Struct;1098    readonly isBuyExecution: boolean;1099    readonly asBuyExecution: {1100      readonly fees: XcmV1MultiAsset;1101      readonly weight: u64;1102      readonly debt: u64;1103      readonly haltOnError: bool;1104      readonly instructions: Vec<XcmV1Xcm>;1105    } & Struct;1106    readonly type: 'Noop' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';1107  }11081109  /** @name XcmV1MultiassetMultiAssetFilter (119) */1110  export interface XcmV1MultiassetMultiAssetFilter extends Enum {1111    readonly isDefinite: boolean;1112    readonly asDefinite: XcmV1MultiassetMultiAssets;1113    readonly isWild: boolean;1114    readonly asWild: XcmV1MultiassetWildMultiAsset;1115    readonly type: 'Definite' | 'Wild';1116  }11171118  /** @name XcmV1MultiassetWildMultiAsset (120) */1119  export interface XcmV1MultiassetWildMultiAsset extends Enum {1120    readonly isAll: boolean;1121    readonly isAllOf: boolean;1122    readonly asAllOf: {1123      readonly id: XcmV1MultiassetAssetId;1124      readonly fun: XcmV1MultiassetWildFungibility;1125    } & Struct;1126    readonly type: 'All' | 'AllOf';1127  }11281129  /** @name XcmV1MultiassetWildFungibility (121) */1130  export interface XcmV1MultiassetWildFungibility extends Enum {1131    readonly isFungible: boolean;1132    readonly isNonFungible: boolean;1133    readonly type: 'Fungible' | 'NonFungible';1134  }11351136  /** @name XcmV1Response (123) */1137  export interface XcmV1Response extends Enum {1138    readonly isAssets: boolean;1139    readonly asAssets: XcmV1MultiassetMultiAssets;1140    readonly isVersion: boolean;1141    readonly asVersion: u32;1142    readonly type: 'Assets' | 'Version';1143  }11441145  /** @name XcmV2Xcm (124) */1146  export interface XcmV2Xcm extends Vec<XcmV2Instruction> {}11471148  /** @name XcmV2Instruction (126) */1149  export interface XcmV2Instruction extends Enum {1150    readonly isWithdrawAsset: boolean;1151    readonly asWithdrawAsset: XcmV1MultiassetMultiAssets;1152    readonly isReserveAssetDeposited: boolean;1153    readonly asReserveAssetDeposited: XcmV1MultiassetMultiAssets;1154    readonly isReceiveTeleportedAsset: boolean;1155    readonly asReceiveTeleportedAsset: XcmV1MultiassetMultiAssets;1156    readonly isQueryResponse: boolean;1157    readonly asQueryResponse: {1158      readonly queryId: Compact<u64>;1159      readonly response: XcmV2Response;1160      readonly maxWeight: Compact<u64>;1161    } & Struct;1162    readonly isTransferAsset: boolean;1163    readonly asTransferAsset: {1164      readonly assets: XcmV1MultiassetMultiAssets;1165      readonly beneficiary: XcmV1MultiLocation;1166    } & Struct;1167    readonly isTransferReserveAsset: boolean;1168    readonly asTransferReserveAsset: {1169      readonly assets: XcmV1MultiassetMultiAssets;1170      readonly dest: XcmV1MultiLocation;1171      readonly xcm: XcmV2Xcm;1172    } & Struct;1173    readonly isTransact: boolean;1174    readonly asTransact: {1175      readonly originType: XcmV0OriginKind;1176      readonly requireWeightAtMost: Compact<u64>;1177      readonly call: XcmDoubleEncoded;1178    } & Struct;1179    readonly isHrmpNewChannelOpenRequest: boolean;1180    readonly asHrmpNewChannelOpenRequest: {1181      readonly sender: Compact<u32>;1182      readonly maxMessageSize: Compact<u32>;1183      readonly maxCapacity: Compact<u32>;1184    } & Struct;1185    readonly isHrmpChannelAccepted: boolean;1186    readonly asHrmpChannelAccepted: {1187      readonly recipient: Compact<u32>;1188    } & Struct;1189    readonly isHrmpChannelClosing: boolean;1190    readonly asHrmpChannelClosing: {1191      readonly initiator: Compact<u32>;1192      readonly sender: Compact<u32>;1193      readonly recipient: Compact<u32>;1194    } & Struct;1195    readonly isClearOrigin: boolean;1196    readonly isDescendOrigin: boolean;1197    readonly asDescendOrigin: XcmV1MultilocationJunctions;1198    readonly isReportError: boolean;1199    readonly asReportError: {1200      readonly queryId: Compact<u64>;1201      readonly dest: XcmV1MultiLocation;1202      readonly maxResponseWeight: Compact<u64>;1203    } & Struct;1204    readonly isDepositAsset: boolean;1205    readonly asDepositAsset: {1206      readonly assets: XcmV1MultiassetMultiAssetFilter;1207      readonly maxAssets: Compact<u32>;1208      readonly beneficiary: XcmV1MultiLocation;1209    } & Struct;1210    readonly isDepositReserveAsset: boolean;1211    readonly asDepositReserveAsset: {1212      readonly assets: XcmV1MultiassetMultiAssetFilter;1213      readonly maxAssets: Compact<u32>;1214      readonly dest: XcmV1MultiLocation;1215      readonly xcm: XcmV2Xcm;1216    } & Struct;1217    readonly isExchangeAsset: boolean;1218    readonly asExchangeAsset: {1219      readonly give: XcmV1MultiassetMultiAssetFilter;1220      readonly receive: XcmV1MultiassetMultiAssets;1221    } & Struct;1222    readonly isInitiateReserveWithdraw: boolean;1223    readonly asInitiateReserveWithdraw: {1224      readonly assets: XcmV1MultiassetMultiAssetFilter;1225      readonly reserve: XcmV1MultiLocation;1226      readonly xcm: XcmV2Xcm;1227    } & Struct;1228    readonly isInitiateTeleport: boolean;1229    readonly asInitiateTeleport: {1230      readonly assets: XcmV1MultiassetMultiAssetFilter;1231      readonly dest: XcmV1MultiLocation;1232      readonly xcm: XcmV2Xcm;1233    } & Struct;1234    readonly isQueryHolding: boolean;1235    readonly asQueryHolding: {1236      readonly queryId: Compact<u64>;1237      readonly dest: XcmV1MultiLocation;1238      readonly assets: XcmV1MultiassetMultiAssetFilter;1239      readonly maxResponseWeight: Compact<u64>;1240    } & Struct;1241    readonly isBuyExecution: boolean;1242    readonly asBuyExecution: {1243      readonly fees: XcmV1MultiAsset;1244      readonly weightLimit: XcmV2WeightLimit;1245    } & Struct;1246    readonly isRefundSurplus: boolean;1247    readonly isSetErrorHandler: boolean;1248    readonly asSetErrorHandler: XcmV2Xcm;1249    readonly isSetAppendix: boolean;1250    readonly asSetAppendix: XcmV2Xcm;1251    readonly isClearError: boolean;1252    readonly isClaimAsset: boolean;1253    readonly asClaimAsset: {1254      readonly assets: XcmV1MultiassetMultiAssets;1255      readonly ticket: XcmV1MultiLocation;1256    } & Struct;1257    readonly isTrap: boolean;1258    readonly asTrap: Compact<u64>;1259    readonly isSubscribeVersion: boolean;1260    readonly asSubscribeVersion: {1261      readonly queryId: Compact<u64>;1262      readonly maxResponseWeight: Compact<u64>;1263    } & Struct;1264    readonly isUnsubscribeVersion: boolean;1265    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';1266  }12671268  /** @name XcmV2Response (127) */1269  export interface XcmV2Response extends Enum {1270    readonly isNull: boolean;1271    readonly isAssets: boolean;1272    readonly asAssets: XcmV1MultiassetMultiAssets;1273    readonly isExecutionResult: boolean;1274    readonly asExecutionResult: Option<ITuple<[u32, XcmV2TraitsError]>>;1275    readonly isVersion: boolean;1276    readonly asVersion: u32;1277    readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version';1278  }12791280  /** @name XcmV2TraitsError (130) */1281  export interface XcmV2TraitsError extends Enum {1282    readonly isOverflow: boolean;1283    readonly isUnimplemented: boolean;1284    readonly isUntrustedReserveLocation: boolean;1285    readonly isUntrustedTeleportLocation: boolean;1286    readonly isMultiLocationFull: boolean;1287    readonly isMultiLocationNotInvertible: boolean;1288    readonly isBadOrigin: boolean;1289    readonly isInvalidLocation: boolean;1290    readonly isAssetNotFound: boolean;1291    readonly isFailedToTransactAsset: boolean;1292    readonly isNotWithdrawable: boolean;1293    readonly isLocationCannotHold: boolean;1294    readonly isExceedsMaxMessageSize: boolean;1295    readonly isDestinationUnsupported: boolean;1296    readonly isTransport: boolean;1297    readonly isUnroutable: boolean;1298    readonly isUnknownClaim: boolean;1299    readonly isFailedToDecode: boolean;1300    readonly isMaxWeightInvalid: boolean;1301    readonly isNotHoldingFees: boolean;1302    readonly isTooExpensive: boolean;1303    readonly isTrap: boolean;1304    readonly asTrap: u64;1305    readonly isUnhandledXcmVersion: boolean;1306    readonly isWeightLimitReached: boolean;1307    readonly asWeightLimitReached: u64;1308    readonly isBarrier: boolean;1309    readonly isWeightNotComputable: boolean;1310    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';1311  }13121313  /** @name XcmV2WeightLimit (131) */1314  export interface XcmV2WeightLimit extends Enum {1315    readonly isUnlimited: boolean;1316    readonly isLimited: boolean;1317    readonly asLimited: Compact<u64>;1318    readonly type: 'Unlimited' | 'Limited';1319  }13201321  /** @name XcmVersionedMultiAssets (132) */1322  export interface XcmVersionedMultiAssets extends Enum {1323    readonly isV0: boolean;1324    readonly asV0: Vec<XcmV0MultiAsset>;1325    readonly isV1: boolean;1326    readonly asV1: XcmV1MultiassetMultiAssets;1327    readonly type: 'V0' | 'V1';1328  }13291330  /** @name CumulusPalletXcmCall (147) */1331  export type CumulusPalletXcmCall = Null;13321333  /** @name CumulusPalletDmpQueueCall (148) */1334  export interface CumulusPalletDmpQueueCall extends Enum {1335    readonly isServiceOverweight: boolean;1336    readonly asServiceOverweight: {1337      readonly index: u64;1338      readonly weightLimit: u64;1339    } & Struct;1340    readonly type: 'ServiceOverweight';1341  }13421343  /** @name PalletInflationCall (149) */1344  export interface PalletInflationCall extends Enum {1345    readonly isStartInflation: boolean;1346    readonly asStartInflation: {1347      readonly inflationStartRelayBlock: u32;1348    } & Struct;1349    readonly type: 'StartInflation';1350  }13511352  /** @name PalletUniqueCall (150) */1353  export interface PalletUniqueCall extends Enum {1354    readonly isCreateCollection: boolean;1355    readonly asCreateCollection: {1356      readonly collectionName: Vec<u16>;1357      readonly collectionDescription: Vec<u16>;1358      readonly tokenPrefix: Bytes;1359      readonly mode: UpDataStructsCollectionMode;1360    } & Struct;1361    readonly isCreateCollectionEx: boolean;1362    readonly asCreateCollectionEx: {1363      readonly data: UpDataStructsCreateCollectionData;1364    } & Struct;1365    readonly isDestroyCollection: boolean;1366    readonly asDestroyCollection: {1367      readonly collectionId: u32;1368    } & Struct;1369    readonly isAddToAllowList: boolean;1370    readonly asAddToAllowList: {1371      readonly collectionId: u32;1372      readonly address: PalletEvmAccountBasicCrossAccountIdRepr;1373    } & Struct;1374    readonly isRemoveFromAllowList: boolean;1375    readonly asRemoveFromAllowList: {1376      readonly collectionId: u32;1377      readonly address: PalletEvmAccountBasicCrossAccountIdRepr;1378    } & Struct;1379    readonly isChangeCollectionOwner: boolean;1380    readonly asChangeCollectionOwner: {1381      readonly collectionId: u32;1382      readonly newOwner: AccountId32;1383    } & Struct;1384    readonly isAddCollectionAdmin: boolean;1385    readonly asAddCollectionAdmin: {1386      readonly collectionId: u32;1387      readonly newAdminId: PalletEvmAccountBasicCrossAccountIdRepr;1388    } & Struct;1389    readonly isRemoveCollectionAdmin: boolean;1390    readonly asRemoveCollectionAdmin: {1391      readonly collectionId: u32;1392      readonly accountId: PalletEvmAccountBasicCrossAccountIdRepr;1393    } & Struct;1394    readonly isSetCollectionSponsor: boolean;1395    readonly asSetCollectionSponsor: {1396      readonly collectionId: u32;1397      readonly newSponsor: AccountId32;1398    } & Struct;1399    readonly isConfirmSponsorship: boolean;1400    readonly asConfirmSponsorship: {1401      readonly collectionId: u32;1402    } & Struct;1403    readonly isRemoveCollectionSponsor: boolean;1404    readonly asRemoveCollectionSponsor: {1405      readonly collectionId: u32;1406    } & Struct;1407    readonly isCreateItem: boolean;1408    readonly asCreateItem: {1409      readonly collectionId: u32;1410      readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1411      readonly data: UpDataStructsCreateItemData;1412    } & Struct;1413    readonly isCreateMultipleItems: boolean;1414    readonly asCreateMultipleItems: {1415      readonly collectionId: u32;1416      readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1417      readonly itemsData: Vec<UpDataStructsCreateItemData>;1418    } & Struct;1419    readonly isSetCollectionProperties: boolean;1420    readonly asSetCollectionProperties: {1421      readonly collectionId: u32;1422      readonly properties: Vec<UpDataStructsProperty>;1423    } & Struct;1424    readonly isDeleteCollectionProperties: boolean;1425    readonly asDeleteCollectionProperties: {1426      readonly collectionId: u32;1427      readonly propertyKeys: Vec<Bytes>;1428    } & Struct;1429    readonly isSetTokenProperties: boolean;1430    readonly asSetTokenProperties: {1431      readonly collectionId: u32;1432      readonly tokenId: u32;1433      readonly properties: Vec<UpDataStructsProperty>;1434    } & Struct;1435    readonly isDeleteTokenProperties: boolean;1436    readonly asDeleteTokenProperties: {1437      readonly collectionId: u32;1438      readonly tokenId: u32;1439      readonly propertyKeys: Vec<Bytes>;1440    } & Struct;1441    readonly isSetTokenPropertyPermissions: boolean;1442    readonly asSetTokenPropertyPermissions: {1443      readonly collectionId: u32;1444      readonly propertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;1445    } & Struct;1446    readonly isCreateMultipleItemsEx: boolean;1447    readonly asCreateMultipleItemsEx: {1448      readonly collectionId: u32;1449      readonly data: UpDataStructsCreateItemExData;1450    } & Struct;1451    readonly isSetTransfersEnabledFlag: boolean;1452    readonly asSetTransfersEnabledFlag: {1453      readonly collectionId: u32;1454      readonly value: bool;1455    } & Struct;1456    readonly isBurnItem: boolean;1457    readonly asBurnItem: {1458      readonly collectionId: u32;1459      readonly itemId: u32;1460      readonly value: u128;1461    } & Struct;1462    readonly isBurnFrom: boolean;1463    readonly asBurnFrom: {1464      readonly collectionId: u32;1465      readonly from: PalletEvmAccountBasicCrossAccountIdRepr;1466      readonly itemId: u32;1467      readonly value: u128;1468    } & Struct;1469    readonly isTransfer: boolean;1470    readonly asTransfer: {1471      readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr;1472      readonly collectionId: u32;1473      readonly itemId: u32;1474      readonly value: u128;1475    } & Struct;1476    readonly isApprove: boolean;1477    readonly asApprove: {1478      readonly spender: PalletEvmAccountBasicCrossAccountIdRepr;1479      readonly collectionId: u32;1480      readonly itemId: u32;1481      readonly amount: u128;1482    } & Struct;1483    readonly isTransferFrom: boolean;1484    readonly asTransferFrom: {1485      readonly from: PalletEvmAccountBasicCrossAccountIdRepr;1486      readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr;1487      readonly collectionId: u32;1488      readonly itemId: u32;1489      readonly value: u128;1490    } & Struct;1491    readonly isSetCollectionLimits: boolean;1492    readonly asSetCollectionLimits: {1493      readonly collectionId: u32;1494      readonly newLimit: UpDataStructsCollectionLimits;1495    } & Struct;1496    readonly isSetCollectionPermissions: boolean;1497    readonly asSetCollectionPermissions: {1498      readonly collectionId: u32;1499      readonly newLimit: UpDataStructsCollectionPermissions;1500    } & Struct;1501    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';1502  }15031504  /** @name UpDataStructsCollectionMode (156) */1505  export interface UpDataStructsCollectionMode extends Enum {1506    readonly isNft: boolean;1507    readonly isFungible: boolean;1508    readonly asFungible: u8;1509    readonly isReFungible: boolean;1510    readonly type: 'Nft' | 'Fungible' | 'ReFungible';1511  }15121513  /** @name UpDataStructsCreateCollectionData (157) */1514  export interface UpDataStructsCreateCollectionData extends Struct {1515    readonly mode: UpDataStructsCollectionMode;1516    readonly access: Option<UpDataStructsAccessMode>;1517    readonly name: Vec<u16>;1518    readonly description: Vec<u16>;1519    readonly tokenPrefix: Bytes;1520    readonly pendingSponsor: Option<AccountId32>;1521    readonly limits: Option<UpDataStructsCollectionLimits>;1522    readonly permissions: Option<UpDataStructsCollectionPermissions>;1523    readonly tokenPropertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;1524    readonly properties: Vec<UpDataStructsProperty>;1525  }15261527  /** @name UpDataStructsAccessMode (159) */1528  export interface UpDataStructsAccessMode extends Enum {1529    readonly isNormal: boolean;1530    readonly isAllowList: boolean;1531    readonly type: 'Normal' | 'AllowList';1532  }15331534  /** @name UpDataStructsCollectionLimits (162) */1535  export interface UpDataStructsCollectionLimits extends Struct {1536    readonly accountTokenOwnershipLimit: Option<u32>;1537    readonly sponsoredDataSize: Option<u32>;1538    readonly sponsoredDataRateLimit: Option<UpDataStructsSponsoringRateLimit>;1539    readonly tokenLimit: Option<u32>;1540    readonly sponsorTransferTimeout: Option<u32>;1541    readonly sponsorApproveTimeout: Option<u32>;1542    readonly ownerCanTransfer: Option<bool>;1543    readonly ownerCanDestroy: Option<bool>;1544    readonly transfersEnabled: Option<bool>;1545  }15461547  /** @name UpDataStructsSponsoringRateLimit (164) */1548  export interface UpDataStructsSponsoringRateLimit extends Enum {1549    readonly isSponsoringDisabled: boolean;1550    readonly isBlocks: boolean;1551    readonly asBlocks: u32;1552    readonly type: 'SponsoringDisabled' | 'Blocks';1553  }15541555  /** @name UpDataStructsCollectionPermissions (167) */1556  export interface UpDataStructsCollectionPermissions extends Struct {1557    readonly access: Option<UpDataStructsAccessMode>;1558    readonly mintMode: Option<bool>;1559    readonly nesting: Option<UpDataStructsNestingPermissions>;1560  }15611562  /** @name UpDataStructsNestingPermissions (169) */1563  export interface UpDataStructsNestingPermissions extends Struct {1564    readonly tokenOwner: bool;1565    readonly collectionAdmin: bool;1566    readonly restricted: Option<UpDataStructsOwnerRestrictedSet>;1567    readonly permissive: bool;1568  }15691570  /** @name UpDataStructsOwnerRestrictedSet (171) */1571  export interface UpDataStructsOwnerRestrictedSet extends BTreeSet<u32> {}15721573  /** @name UpDataStructsPropertyKeyPermission (177) */1574  export interface UpDataStructsPropertyKeyPermission extends Struct {1575    readonly key: Bytes;1576    readonly permission: UpDataStructsPropertyPermission;1577  }15781579  /** @name UpDataStructsPropertyPermission (179) */1580  export interface UpDataStructsPropertyPermission extends Struct {1581    readonly mutable: bool;1582    readonly collectionAdmin: bool;1583    readonly tokenOwner: bool;1584  }15851586  /** @name UpDataStructsProperty (182) */1587  export interface UpDataStructsProperty extends Struct {1588    readonly key: Bytes;1589    readonly value: Bytes;1590  }15911592  /** @name PalletEvmAccountBasicCrossAccountIdRepr (185) */1593  export interface PalletEvmAccountBasicCrossAccountIdRepr extends Enum {1594    readonly isSubstrate: boolean;1595    readonly asSubstrate: AccountId32;1596    readonly isEthereum: boolean;1597    readonly asEthereum: H160;1598    readonly type: 'Substrate' | 'Ethereum';1599  }16001601  /** @name UpDataStructsCreateItemData (187) */1602  export interface UpDataStructsCreateItemData extends Enum {1603    readonly isNft: boolean;1604    readonly asNft: UpDataStructsCreateNftData;1605    readonly isFungible: boolean;1606    readonly asFungible: UpDataStructsCreateFungibleData;1607    readonly isReFungible: boolean;1608    readonly asReFungible: UpDataStructsCreateReFungibleData;1609    readonly type: 'Nft' | 'Fungible' | 'ReFungible';1610  }16111612  /** @name UpDataStructsCreateNftData (188) */1613  export interface UpDataStructsCreateNftData extends Struct {1614    readonly properties: Vec<UpDataStructsProperty>;1615  }16161617  /** @name UpDataStructsCreateFungibleData (189) */1618  export interface UpDataStructsCreateFungibleData extends Struct {1619    readonly value: u128;1620  }16211622  /** @name UpDataStructsCreateReFungibleData (190) */1623  export interface UpDataStructsCreateReFungibleData extends Struct {1624    readonly constData: Bytes;1625    readonly pieces: u128;1626  }16271628  /** @name UpDataStructsCreateItemExData (195) */1629  export interface UpDataStructsCreateItemExData extends Enum {1630    readonly isNft: boolean;1631    readonly asNft: Vec<UpDataStructsCreateNftExData>;1632    readonly isFungible: boolean;1633    readonly asFungible: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;1634    readonly isRefungibleMultipleItems: boolean;1635    readonly asRefungibleMultipleItems: Vec<UpDataStructsCreateRefungibleExData>;1636    readonly isRefungibleMultipleOwners: boolean;1637    readonly asRefungibleMultipleOwners: UpDataStructsCreateRefungibleExData;1638    readonly type: 'Nft' | 'Fungible' | 'RefungibleMultipleItems' | 'RefungibleMultipleOwners';1639  }16401641  /** @name UpDataStructsCreateNftExData (197) */1642  export interface UpDataStructsCreateNftExData extends Struct {1643    readonly properties: Vec<UpDataStructsProperty>;1644    readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1645  }16461647  /** @name UpDataStructsCreateRefungibleExData (204) */1648  export interface UpDataStructsCreateRefungibleExData extends Struct {1649    readonly constData: Bytes;1650    readonly users: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;1651  }16521653  /** @name PalletUniqueSchedulerCall (206) */1654  export interface PalletUniqueSchedulerCall extends Enum {1655    readonly isScheduleNamed: boolean;1656    readonly asScheduleNamed: {1657      readonly id: U8aFixed;1658      readonly when: u32;1659      readonly maybePeriodic: Option<ITuple<[u32, u32]>>;1660      readonly priority: u8;1661      readonly call: FrameSupportScheduleMaybeHashed;1662    } & Struct;1663    readonly isCancelNamed: boolean;1664    readonly asCancelNamed: {1665      readonly id: U8aFixed;1666    } & Struct;1667    readonly isScheduleNamedAfter: boolean;1668    readonly asScheduleNamedAfter: {1669      readonly id: U8aFixed;1670      readonly after: u32;1671      readonly maybePeriodic: Option<ITuple<[u32, u32]>>;1672      readonly priority: u8;1673      readonly call: FrameSupportScheduleMaybeHashed;1674    } & Struct;1675    readonly type: 'ScheduleNamed' | 'CancelNamed' | 'ScheduleNamedAfter';1676  }16771678  /** @name FrameSupportScheduleMaybeHashed (208) */1679  export interface FrameSupportScheduleMaybeHashed extends Enum {1680    readonly isValue: boolean;1681    readonly asValue: Call;1682    readonly isHash: boolean;1683    readonly asHash: H256;1684    readonly type: 'Value' | 'Hash';1685  }16861687  /** @name PalletTemplateTransactionPaymentCall (209) */1688  export type PalletTemplateTransactionPaymentCall = Null;16891690  /** @name PalletStructureCall (210) */1691  export type PalletStructureCall = Null;16921693  /** @name PalletRmrkCoreCall (211) */1694  export interface PalletRmrkCoreCall extends Enum {1695    readonly isCreateCollection: boolean;1696    readonly asCreateCollection: {1697      readonly metadata: Bytes;1698      readonly max: Option<u32>;1699      readonly symbol: Bytes;1700    } & Struct;1701    readonly isDestroyCollection: boolean;1702    readonly asDestroyCollection: {1703      readonly collectionId: u32;1704    } & Struct;1705    readonly isChangeCollectionIssuer: boolean;1706    readonly asChangeCollectionIssuer: {1707      readonly collectionId: u32;1708      readonly newIssuer: MultiAddress;1709    } & Struct;1710    readonly isLockCollection: boolean;1711    readonly asLockCollection: {1712      readonly collectionId: u32;1713    } & Struct;1714    readonly isMintNft: boolean;1715    readonly asMintNft: {1716      readonly owner: AccountId32;1717      readonly collectionId: u32;1718      readonly recipient: Option<AccountId32>;1719      readonly royaltyAmount: Option<Permill>;1720      readonly metadata: Bytes;1721      readonly transferable: bool;1722      readonly resources: Option<Vec<RmrkTraitsResourceResourceTypes>>;1723    } & Struct;1724    readonly isBurnNft: boolean;1725    readonly asBurnNft: {1726      readonly collectionId: u32;1727      readonly nftId: u32;1728      readonly maxBurns: u32;1729    } & Struct;1730    readonly isSend: boolean;1731    readonly asSend: {1732      readonly rmrkCollectionId: u32;1733      readonly rmrkNftId: u32;1734      readonly newOwner: RmrkTraitsNftAccountIdOrCollectionNftTuple;1735    } & Struct;1736    readonly isAcceptNft: boolean;1737    readonly asAcceptNft: {1738      readonly rmrkCollectionId: u32;1739      readonly rmrkNftId: u32;1740      readonly newOwner: RmrkTraitsNftAccountIdOrCollectionNftTuple;1741    } & Struct;1742    readonly isRejectNft: boolean;1743    readonly asRejectNft: {1744      readonly rmrkCollectionId: u32;1745      readonly rmrkNftId: u32;1746    } & Struct;1747    readonly isAcceptResource: boolean;1748    readonly asAcceptResource: {1749      readonly rmrkCollectionId: u32;1750      readonly rmrkNftId: u32;1751      readonly rmrkResourceId: u32;1752    } & Struct;1753    readonly isAcceptResourceRemoval: boolean;1754    readonly asAcceptResourceRemoval: {1755      readonly rmrkCollectionId: u32;1756      readonly rmrkNftId: u32;1757      readonly rmrkResourceId: u32;1758    } & Struct;1759    readonly isSetProperty: boolean;1760    readonly asSetProperty: {1761      readonly rmrkCollectionId: Compact<u32>;1762      readonly maybeNftId: Option<u32>;1763      readonly key: Bytes;1764      readonly value: Bytes;1765    } & Struct;1766    readonly isSetPriority: boolean;1767    readonly asSetPriority: {1768      readonly rmrkCollectionId: u32;1769      readonly rmrkNftId: u32;1770      readonly priorities: Vec<u32>;1771    } & Struct;1772    readonly isAddBasicResource: boolean;1773    readonly asAddBasicResource: {1774      readonly rmrkCollectionId: u32;1775      readonly nftId: u32;1776      readonly resource: RmrkTraitsResourceBasicResource;1777    } & Struct;1778    readonly isAddComposableResource: boolean;1779    readonly asAddComposableResource: {1780      readonly rmrkCollectionId: u32;1781      readonly nftId: u32;1782      readonly resource: RmrkTraitsResourceComposableResource;1783    } & Struct;1784    readonly isAddSlotResource: boolean;1785    readonly asAddSlotResource: {1786      readonly rmrkCollectionId: u32;1787      readonly nftId: u32;1788      readonly resource: RmrkTraitsResourceSlotResource;1789    } & Struct;1790    readonly isRemoveResource: boolean;1791    readonly asRemoveResource: {1792      readonly rmrkCollectionId: u32;1793      readonly nftId: u32;1794      readonly resourceId: u32;1795    } & Struct;1796    readonly type: 'CreateCollection' | 'DestroyCollection' | 'ChangeCollectionIssuer' | 'LockCollection' | 'MintNft' | 'BurnNft' | 'Send' | 'AcceptNft' | 'RejectNft' | 'AcceptResource' | 'AcceptResourceRemoval' | 'SetProperty' | 'SetPriority' | 'AddBasicResource' | 'AddComposableResource' | 'AddSlotResource' | 'RemoveResource';1797  }17981799  /** @name RmrkTraitsResourceResourceTypes (217) */1800  export interface RmrkTraitsResourceResourceTypes extends Enum {1801    readonly isBasic: boolean;1802    readonly asBasic: RmrkTraitsResourceBasicResource;1803    readonly isComposable: boolean;1804    readonly asComposable: RmrkTraitsResourceComposableResource;1805    readonly isSlot: boolean;1806    readonly asSlot: RmrkTraitsResourceSlotResource;1807    readonly type: 'Basic' | 'Composable' | 'Slot';1808  }18091810  /** @name RmrkTraitsResourceBasicResource (219) */1811  export interface RmrkTraitsResourceBasicResource extends Struct {1812    readonly src: Option<Bytes>;1813    readonly metadata: Option<Bytes>;1814    readonly license: Option<Bytes>;1815    readonly thumb: Option<Bytes>;1816  }18171818  /** @name RmrkTraitsResourceComposableResource (221) */1819  export interface RmrkTraitsResourceComposableResource extends Struct {1820    readonly parts: Vec<u32>;1821    readonly base: u32;1822    readonly src: Option<Bytes>;1823    readonly metadata: Option<Bytes>;1824    readonly license: Option<Bytes>;1825    readonly thumb: Option<Bytes>;1826  }18271828  /** @name RmrkTraitsResourceSlotResource (222) */1829  export interface RmrkTraitsResourceSlotResource extends Struct {1830    readonly base: u32;1831    readonly src: Option<Bytes>;1832    readonly metadata: Option<Bytes>;1833    readonly slot: u32;1834    readonly license: Option<Bytes>;1835    readonly thumb: Option<Bytes>;1836  }18371838  /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (224) */1839  export interface RmrkTraitsNftAccountIdOrCollectionNftTuple extends Enum {1840    readonly isAccountId: boolean;1841    readonly asAccountId: AccountId32;1842    readonly isCollectionAndNftTuple: boolean;1843    readonly asCollectionAndNftTuple: ITuple<[u32, u32]>;1844    readonly type: 'AccountId' | 'CollectionAndNftTuple';1845  }18461847  /** @name PalletRmrkEquipCall (228) */1848  export interface PalletRmrkEquipCall extends Enum {1849    readonly isCreateBase: boolean;1850    readonly asCreateBase: {1851      readonly baseType: Bytes;1852      readonly symbol: Bytes;1853      readonly parts: Vec<RmrkTraitsPartPartType>;1854    } & Struct;1855    readonly isThemeAdd: boolean;1856    readonly asThemeAdd: {1857      readonly baseId: u32;1858      readonly theme: RmrkTraitsTheme;1859    } & Struct;1860    readonly type: 'CreateBase' | 'ThemeAdd';1861  }18621863  /** @name RmrkTraitsPartPartType (230) */1864  export interface RmrkTraitsPartPartType extends Enum {1865    readonly isFixedPart: boolean;1866    readonly asFixedPart: RmrkTraitsPartFixedPart;1867    readonly isSlotPart: boolean;1868    readonly asSlotPart: RmrkTraitsPartSlotPart;1869    readonly type: 'FixedPart' | 'SlotPart';1870  }18711872  /** @name RmrkTraitsPartFixedPart (232) */1873  export interface RmrkTraitsPartFixedPart extends Struct {1874    readonly id: u32;1875    readonly z: u32;1876    readonly src: Bytes;1877  }18781879  /** @name RmrkTraitsPartSlotPart (233) */1880  export interface RmrkTraitsPartSlotPart extends Struct {1881    readonly id: u32;1882    readonly equippable: RmrkTraitsPartEquippableList;1883    readonly src: Bytes;1884    readonly z: u32;1885  }18861887  /** @name RmrkTraitsPartEquippableList (234) */1888  export interface RmrkTraitsPartEquippableList extends Enum {1889    readonly isAll: boolean;1890    readonly isEmpty: boolean;1891    readonly isCustom: boolean;1892    readonly asCustom: Vec<u32>;1893    readonly type: 'All' | 'Empty' | 'Custom';1894  }18951896  /** @name RmrkTraitsTheme (236) */1897  export interface RmrkTraitsTheme extends Struct {1898    readonly name: Bytes;1899    readonly properties: Vec<RmrkTraitsThemeThemeProperty>;1900    readonly inherit: bool;1901  }19021903  /** @name RmrkTraitsThemeThemeProperty (238) */1904  export interface RmrkTraitsThemeThemeProperty extends Struct {1905    readonly key: Bytes;1906    readonly value: Bytes;1907  }19081909  /** @name PalletEvmCall (239) */1910  export interface PalletEvmCall extends Enum {1911    readonly isWithdraw: boolean;1912    readonly asWithdraw: {1913      readonly address: H160;1914      readonly value: u128;1915    } & Struct;1916    readonly isCall: boolean;1917    readonly asCall: {1918      readonly source: H160;1919      readonly target: H160;1920      readonly input: Bytes;1921      readonly value: U256;1922      readonly gasLimit: u64;1923      readonly maxFeePerGas: U256;1924      readonly maxPriorityFeePerGas: Option<U256>;1925      readonly nonce: Option<U256>;1926      readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1927    } & Struct;1928    readonly isCreate: boolean;1929    readonly asCreate: {1930      readonly source: H160;1931      readonly init: Bytes;1932      readonly value: U256;1933      readonly gasLimit: u64;1934      readonly maxFeePerGas: U256;1935      readonly maxPriorityFeePerGas: Option<U256>;1936      readonly nonce: Option<U256>;1937      readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1938    } & Struct;1939    readonly isCreate2: boolean;1940    readonly asCreate2: {1941      readonly source: H160;1942      readonly init: Bytes;1943      readonly salt: H256;1944      readonly value: U256;1945      readonly gasLimit: u64;1946      readonly maxFeePerGas: U256;1947      readonly maxPriorityFeePerGas: Option<U256>;1948      readonly nonce: Option<U256>;1949      readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1950    } & Struct;1951    readonly type: 'Withdraw' | 'Call' | 'Create' | 'Create2';1952  }19531954  /** @name PalletEthereumCall (245) */1955  export interface PalletEthereumCall extends Enum {1956    readonly isTransact: boolean;1957    readonly asTransact: {1958      readonly transaction: EthereumTransactionTransactionV2;1959    } & Struct;1960    readonly type: 'Transact';1961  }19621963  /** @name EthereumTransactionTransactionV2 (246) */1964  export interface EthereumTransactionTransactionV2 extends Enum {1965    readonly isLegacy: boolean;1966    readonly asLegacy: EthereumTransactionLegacyTransaction;1967    readonly isEip2930: boolean;1968    readonly asEip2930: EthereumTransactionEip2930Transaction;1969    readonly isEip1559: boolean;1970    readonly asEip1559: EthereumTransactionEip1559Transaction;1971    readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';1972  }19731974  /** @name EthereumTransactionLegacyTransaction (247) */1975  export interface EthereumTransactionLegacyTransaction extends Struct {1976    readonly nonce: U256;1977    readonly gasPrice: U256;1978    readonly gasLimit: U256;1979    readonly action: EthereumTransactionTransactionAction;1980    readonly value: U256;1981    readonly input: Bytes;1982    readonly signature: EthereumTransactionTransactionSignature;1983  }19841985  /** @name EthereumTransactionTransactionAction (248) */1986  export interface EthereumTransactionTransactionAction extends Enum {1987    readonly isCall: boolean;1988    readonly asCall: H160;1989    readonly isCreate: boolean;1990    readonly type: 'Call' | 'Create';1991  }19921993  /** @name EthereumTransactionTransactionSignature (249) */1994  export interface EthereumTransactionTransactionSignature extends Struct {1995    readonly v: u64;1996    readonly r: H256;1997    readonly s: H256;1998  }19992000  /** @name EthereumTransactionEip2930Transaction (251) */2001  export interface EthereumTransactionEip2930Transaction extends Struct {2002    readonly chainId: u64;2003    readonly nonce: U256;2004    readonly gasPrice: U256;2005    readonly gasLimit: U256;2006    readonly action: EthereumTransactionTransactionAction;2007    readonly value: U256;2008    readonly input: Bytes;2009    readonly accessList: Vec<EthereumTransactionAccessListItem>;2010    readonly oddYParity: bool;2011    readonly r: H256;2012    readonly s: H256;2013  }20142015  /** @name EthereumTransactionAccessListItem (253) */2016  export interface EthereumTransactionAccessListItem extends Struct {2017    readonly address: H160;2018    readonly storageKeys: Vec<H256>;2019  }20202021  /** @name EthereumTransactionEip1559Transaction (254) */2022  export interface EthereumTransactionEip1559Transaction extends Struct {2023    readonly chainId: u64;2024    readonly nonce: U256;2025    readonly maxPriorityFeePerGas: U256;2026    readonly maxFeePerGas: U256;2027    readonly gasLimit: U256;2028    readonly action: EthereumTransactionTransactionAction;2029    readonly value: U256;2030    readonly input: Bytes;2031    readonly accessList: Vec<EthereumTransactionAccessListItem>;2032    readonly oddYParity: bool;2033    readonly r: H256;2034    readonly s: H256;2035  }20362037  /** @name PalletEvmMigrationCall (255) */2038  export interface PalletEvmMigrationCall extends Enum {2039    readonly isBegin: boolean;2040    readonly asBegin: {2041      readonly address: H160;2042    } & Struct;2043    readonly isSetData: boolean;2044    readonly asSetData: {2045      readonly address: H160;2046      readonly data: Vec<ITuple<[H256, H256]>>;2047    } & Struct;2048    readonly isFinish: boolean;2049    readonly asFinish: {2050      readonly address: H160;2051      readonly code: Bytes;2052    } & Struct;2053    readonly type: 'Begin' | 'SetData' | 'Finish';2054  }20552056  /** @name PalletSudoEvent (258) */2057  export interface PalletSudoEvent extends Enum {2058    readonly isSudid: boolean;2059    readonly asSudid: {2060      readonly sudoResult: Result<Null, SpRuntimeDispatchError>;2061    } & Struct;2062    readonly isKeyChanged: boolean;2063    readonly asKeyChanged: {2064      readonly oldSudoer: Option<AccountId32>;2065    } & Struct;2066    readonly isSudoAsDone: boolean;2067    readonly asSudoAsDone: {2068      readonly sudoResult: Result<Null, SpRuntimeDispatchError>;2069    } & Struct;2070    readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone';2071  }20722073  /** @name SpRuntimeDispatchError (260) */2074  export interface SpRuntimeDispatchError extends Enum {2075    readonly isOther: boolean;2076    readonly isCannotLookup: boolean;2077    readonly isBadOrigin: boolean;2078    readonly isModule: boolean;2079    readonly asModule: SpRuntimeModuleError;2080    readonly isConsumerRemaining: boolean;2081    readonly isNoProviders: boolean;2082    readonly isTooManyConsumers: boolean;2083    readonly isToken: boolean;2084    readonly asToken: SpRuntimeTokenError;2085    readonly isArithmetic: boolean;2086    readonly asArithmetic: SpRuntimeArithmeticError;2087    readonly isTransactional: boolean;2088    readonly asTransactional: SpRuntimeTransactionalError;2089    readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional';2090  }20912092  /** @name SpRuntimeModuleError (261) */2093  export interface SpRuntimeModuleError extends Struct {2094    readonly index: u8;2095    readonly error: U8aFixed;2096  }20972098  /** @name SpRuntimeTokenError (262) */2099  export interface SpRuntimeTokenError extends Enum {2100    readonly isNoFunds: boolean;2101    readonly isWouldDie: boolean;2102    readonly isBelowMinimum: boolean;2103    readonly isCannotCreate: boolean;2104    readonly isUnknownAsset: boolean;2105    readonly isFrozen: boolean;2106    readonly isUnsupported: boolean;2107    readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported';2108  }21092110  /** @name SpRuntimeArithmeticError (263) */2111  export interface SpRuntimeArithmeticError extends Enum {2112    readonly isUnderflow: boolean;2113    readonly isOverflow: boolean;2114    readonly isDivisionByZero: boolean;2115    readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero';2116  }21172118  /** @name SpRuntimeTransactionalError (264) */2119  export interface SpRuntimeTransactionalError extends Enum {2120    readonly isLimitReached: boolean;2121    readonly isNoLayer: boolean;2122    readonly type: 'LimitReached' | 'NoLayer';2123  }21242125  /** @name PalletSudoError (265) */2126  export interface PalletSudoError extends Enum {2127    readonly isRequireSudo: boolean;2128    readonly type: 'RequireSudo';2129  }21302131  /** @name FrameSystemAccountInfo (266) */2132  export interface FrameSystemAccountInfo extends Struct {2133    readonly nonce: u32;2134    readonly consumers: u32;2135    readonly providers: u32;2136    readonly sufficients: u32;2137    readonly data: PalletBalancesAccountData;2138  }21392140  /** @name FrameSupportWeightsPerDispatchClassU64 (267) */2141  export interface FrameSupportWeightsPerDispatchClassU64 extends Struct {2142    readonly normal: u64;2143    readonly operational: u64;2144    readonly mandatory: u64;2145  }21462147  /** @name SpRuntimeDigest (268) */2148  export interface SpRuntimeDigest extends Struct {2149    readonly logs: Vec<SpRuntimeDigestDigestItem>;2150  }21512152  /** @name SpRuntimeDigestDigestItem (270) */2153  export interface SpRuntimeDigestDigestItem extends Enum {2154    readonly isOther: boolean;2155    readonly asOther: Bytes;2156    readonly isConsensus: boolean;2157    readonly asConsensus: ITuple<[U8aFixed, Bytes]>;2158    readonly isSeal: boolean;2159    readonly asSeal: ITuple<[U8aFixed, Bytes]>;2160    readonly isPreRuntime: boolean;2161    readonly asPreRuntime: ITuple<[U8aFixed, Bytes]>;2162    readonly isRuntimeEnvironmentUpdated: boolean;2163    readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated';2164  }21652166  /** @name FrameSystemEventRecord (272) */2167  export interface FrameSystemEventRecord extends Struct {2168    readonly phase: FrameSystemPhase;2169    readonly event: Event;2170    readonly topics: Vec<H256>;2171  }21722173  /** @name FrameSystemEvent (274) */2174  export interface FrameSystemEvent extends Enum {2175    readonly isExtrinsicSuccess: boolean;2176    readonly asExtrinsicSuccess: {2177      readonly dispatchInfo: FrameSupportWeightsDispatchInfo;2178    } & Struct;2179    readonly isExtrinsicFailed: boolean;2180    readonly asExtrinsicFailed: {2181      readonly dispatchError: SpRuntimeDispatchError;2182      readonly dispatchInfo: FrameSupportWeightsDispatchInfo;2183    } & Struct;2184    readonly isCodeUpdated: boolean;2185    readonly isNewAccount: boolean;2186    readonly asNewAccount: {2187      readonly account: AccountId32;2188    } & Struct;2189    readonly isKilledAccount: boolean;2190    readonly asKilledAccount: {2191      readonly account: AccountId32;2192    } & Struct;2193    readonly isRemarked: boolean;2194    readonly asRemarked: {2195      readonly sender: AccountId32;2196      readonly hash_: H256;2197    } & Struct;2198    readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked';2199  }22002201  /** @name FrameSupportWeightsDispatchInfo (275) */2202  export interface FrameSupportWeightsDispatchInfo extends Struct {2203    readonly weight: u64;2204    readonly class: FrameSupportWeightsDispatchClass;2205    readonly paysFee: FrameSupportWeightsPays;2206  }22072208  /** @name FrameSupportWeightsDispatchClass (276) */2209  export interface FrameSupportWeightsDispatchClass extends Enum {2210    readonly isNormal: boolean;2211    readonly isOperational: boolean;2212    readonly isMandatory: boolean;2213    readonly type: 'Normal' | 'Operational' | 'Mandatory';2214  }22152216  /** @name FrameSupportWeightsPays (277) */2217  export interface FrameSupportWeightsPays extends Enum {2218    readonly isYes: boolean;2219    readonly isNo: boolean;2220    readonly type: 'Yes' | 'No';2221  }22222223  /** @name OrmlVestingModuleEvent (278) */2224  export interface OrmlVestingModuleEvent extends Enum {2225    readonly isVestingScheduleAdded: boolean;2226    readonly asVestingScheduleAdded: {2227      readonly from: AccountId32;2228      readonly to: AccountId32;2229      readonly vestingSchedule: OrmlVestingVestingSchedule;2230    } & Struct;2231    readonly isClaimed: boolean;2232    readonly asClaimed: {2233      readonly who: AccountId32;2234      readonly amount: u128;2235    } & Struct;2236    readonly isVestingSchedulesUpdated: boolean;2237    readonly asVestingSchedulesUpdated: {2238      readonly who: AccountId32;2239    } & Struct;2240    readonly type: 'VestingScheduleAdded' | 'Claimed' | 'VestingSchedulesUpdated';2241  }22422243  /** @name CumulusPalletXcmpQueueEvent (279) */2244  export interface CumulusPalletXcmpQueueEvent extends Enum {2245    readonly isSuccess: boolean;2246    readonly asSuccess: Option<H256>;2247    readonly isFail: boolean;2248    readonly asFail: ITuple<[Option<H256>, XcmV2TraitsError]>;2249    readonly isBadVersion: boolean;2250    readonly asBadVersion: Option<H256>;2251    readonly isBadFormat: boolean;2252    readonly asBadFormat: Option<H256>;2253    readonly isUpwardMessageSent: boolean;2254    readonly asUpwardMessageSent: Option<H256>;2255    readonly isXcmpMessageSent: boolean;2256    readonly asXcmpMessageSent: Option<H256>;2257    readonly isOverweightEnqueued: boolean;2258    readonly asOverweightEnqueued: ITuple<[u32, u32, u64, u64]>;2259    readonly isOverweightServiced: boolean;2260    readonly asOverweightServiced: ITuple<[u64, u64]>;2261    readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced';2262  }22632264  /** @name PalletXcmEvent (280) */2265  export interface PalletXcmEvent extends Enum {2266    readonly isAttempted: boolean;2267    readonly asAttempted: XcmV2TraitsOutcome;2268    readonly isSent: boolean;2269    readonly asSent: ITuple<[XcmV1MultiLocation, XcmV1MultiLocation, XcmV2Xcm]>;2270    readonly isUnexpectedResponse: boolean;2271    readonly asUnexpectedResponse: ITuple<[XcmV1MultiLocation, u64]>;2272    readonly isResponseReady: boolean;2273    readonly asResponseReady: ITuple<[u64, XcmV2Response]>;2274    readonly isNotified: boolean;2275    readonly asNotified: ITuple<[u64, u8, u8]>;2276    readonly isNotifyOverweight: boolean;2277    readonly asNotifyOverweight: ITuple<[u64, u8, u8, u64, u64]>;2278    readonly isNotifyDispatchError: boolean;2279    readonly asNotifyDispatchError: ITuple<[u64, u8, u8]>;2280    readonly isNotifyDecodeFailed: boolean;2281    readonly asNotifyDecodeFailed: ITuple<[u64, u8, u8]>;2282    readonly isInvalidResponder: boolean;2283    readonly asInvalidResponder: ITuple<[XcmV1MultiLocation, u64, Option<XcmV1MultiLocation>]>;2284    readonly isInvalidResponderVersion: boolean;2285    readonly asInvalidResponderVersion: ITuple<[XcmV1MultiLocation, u64]>;2286    readonly isResponseTaken: boolean;2287    readonly asResponseTaken: u64;2288    readonly isAssetsTrapped: boolean;2289    readonly asAssetsTrapped: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>;2290    readonly isVersionChangeNotified: boolean;2291    readonly asVersionChangeNotified: ITuple<[XcmV1MultiLocation, u32]>;2292    readonly isSupportedVersionChanged: boolean;2293    readonly asSupportedVersionChanged: ITuple<[XcmV1MultiLocation, u32]>;2294    readonly isNotifyTargetSendFail: boolean;2295    readonly asNotifyTargetSendFail: ITuple<[XcmV1MultiLocation, u64, XcmV2TraitsError]>;2296    readonly isNotifyTargetMigrationFail: boolean;2297    readonly asNotifyTargetMigrationFail: ITuple<[XcmVersionedMultiLocation, u64]>;2298    readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail';2299  }23002301  /** @name XcmV2TraitsOutcome (281) */2302  export interface XcmV2TraitsOutcome extends Enum {2303    readonly isComplete: boolean;2304    readonly asComplete: u64;2305    readonly isIncomplete: boolean;2306    readonly asIncomplete: ITuple<[u64, XcmV2TraitsError]>;2307    readonly isError: boolean;2308    readonly asError: XcmV2TraitsError;2309    readonly type: 'Complete' | 'Incomplete' | 'Error';2310  }23112312  /** @name CumulusPalletXcmEvent (283) */2313  export interface CumulusPalletXcmEvent extends Enum {2314    readonly isInvalidFormat: boolean;2315    readonly asInvalidFormat: U8aFixed;2316    readonly isUnsupportedVersion: boolean;2317    readonly asUnsupportedVersion: U8aFixed;2318    readonly isExecutedDownward: boolean;2319    readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>;2320    readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward';2321  }23222323  /** @name CumulusPalletDmpQueueEvent (284) */2324  export interface CumulusPalletDmpQueueEvent extends Enum {2325    readonly isInvalidFormat: boolean;2326    readonly asInvalidFormat: U8aFixed;2327    readonly isUnsupportedVersion: boolean;2328    readonly asUnsupportedVersion: U8aFixed;2329    readonly isExecutedDownward: boolean;2330    readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>;2331    readonly isWeightExhausted: boolean;2332    readonly asWeightExhausted: ITuple<[U8aFixed, u64, u64]>;2333    readonly isOverweightEnqueued: boolean;2334    readonly asOverweightEnqueued: ITuple<[U8aFixed, u64, u64]>;2335    readonly isOverweightServiced: boolean;2336    readonly asOverweightServiced: ITuple<[u64, u64]>;2337    readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced';2338  }23392340  /** @name PalletUniqueRawEvent (285) */2341  export interface PalletUniqueRawEvent extends Enum {2342    readonly isCollectionSponsorRemoved: boolean;2343    readonly asCollectionSponsorRemoved: u32;2344    readonly isCollectionAdminAdded: boolean;2345    readonly asCollectionAdminAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2346    readonly isCollectionOwnedChanged: boolean;2347    readonly asCollectionOwnedChanged: ITuple<[u32, AccountId32]>;2348    readonly isCollectionSponsorSet: boolean;2349    readonly asCollectionSponsorSet: ITuple<[u32, AccountId32]>;2350    readonly isSponsorshipConfirmed: boolean;2351    readonly asSponsorshipConfirmed: ITuple<[u32, AccountId32]>;2352    readonly isCollectionAdminRemoved: boolean;2353    readonly asCollectionAdminRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2354    readonly isAllowListAddressRemoved: boolean;2355    readonly asAllowListAddressRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2356    readonly isAllowListAddressAdded: boolean;2357    readonly asAllowListAddressAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2358    readonly isCollectionLimitSet: boolean;2359    readonly asCollectionLimitSet: u32;2360    readonly isCollectionPermissionSet: boolean;2361    readonly asCollectionPermissionSet: u32;2362    readonly type: 'CollectionSponsorRemoved' | 'CollectionAdminAdded' | 'CollectionOwnedChanged' | 'CollectionSponsorSet' | 'SponsorshipConfirmed' | 'CollectionAdminRemoved' | 'AllowListAddressRemoved' | 'AllowListAddressAdded' | 'CollectionLimitSet' | 'CollectionPermissionSet';2363  }23642365  /** @name PalletUniqueSchedulerEvent (286) */2366  export interface PalletUniqueSchedulerEvent extends Enum {2367    readonly isScheduled: boolean;2368    readonly asScheduled: {2369      readonly when: u32;2370      readonly index: u32;2371    } & Struct;2372    readonly isCanceled: boolean;2373    readonly asCanceled: {2374      readonly when: u32;2375      readonly index: u32;2376    } & Struct;2377    readonly isDispatched: boolean;2378    readonly asDispatched: {2379      readonly task: ITuple<[u32, u32]>;2380      readonly id: Option<U8aFixed>;2381      readonly result: Result<Null, SpRuntimeDispatchError>;2382    } & Struct;2383    readonly isCallLookupFailed: boolean;2384    readonly asCallLookupFailed: {2385      readonly task: ITuple<[u32, u32]>;2386      readonly id: Option<U8aFixed>;2387      readonly error: FrameSupportScheduleLookupError;2388    } & Struct;2389    readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallLookupFailed';2390  }23912392  /** @name FrameSupportScheduleLookupError (288) */2393  export interface FrameSupportScheduleLookupError extends Enum {2394    readonly isUnknown: boolean;2395    readonly isBadFormat: boolean;2396    readonly type: 'Unknown' | 'BadFormat';2397  }23982399  /** @name PalletCommonEvent (289) */2400  export interface PalletCommonEvent extends Enum {2401    readonly isCollectionCreated: boolean;2402    readonly asCollectionCreated: ITuple<[u32, u8, AccountId32]>;2403    readonly isCollectionDestroyed: boolean;2404    readonly asCollectionDestroyed: u32;2405    readonly isItemCreated: boolean;2406    readonly asItemCreated: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2407    readonly isItemDestroyed: boolean;2408    readonly asItemDestroyed: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2409    readonly isTransfer: boolean;2410    readonly asTransfer: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2411    readonly isApproved: boolean;2412    readonly asApproved: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2413    readonly isCollectionPropertySet: boolean;2414    readonly asCollectionPropertySet: ITuple<[u32, Bytes]>;2415    readonly isCollectionPropertyDeleted: boolean;2416    readonly asCollectionPropertyDeleted: ITuple<[u32, Bytes]>;2417    readonly isTokenPropertySet: boolean;2418    readonly asTokenPropertySet: ITuple<[u32, u32, Bytes]>;2419    readonly isTokenPropertyDeleted: boolean;2420    readonly asTokenPropertyDeleted: ITuple<[u32, u32, Bytes]>;2421    readonly isPropertyPermissionSet: boolean;2422    readonly asPropertyPermissionSet: ITuple<[u32, Bytes]>;2423    readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved' | 'CollectionPropertySet' | 'CollectionPropertyDeleted' | 'TokenPropertySet' | 'TokenPropertyDeleted' | 'PropertyPermissionSet';2424  }24252426  /** @name PalletStructureEvent (290) */2427  export interface PalletStructureEvent extends Enum {2428    readonly isExecuted: boolean;2429    readonly asExecuted: Result<Null, SpRuntimeDispatchError>;2430    readonly type: 'Executed';2431  }24322433  /** @name PalletRmrkCoreEvent (291) */2434  export interface PalletRmrkCoreEvent extends Enum {2435    readonly isCollectionCreated: boolean;2436    readonly asCollectionCreated: {2437      readonly issuer: AccountId32;2438      readonly collectionId: u32;2439    } & Struct;2440    readonly isCollectionDestroyed: boolean;2441    readonly asCollectionDestroyed: {2442      readonly issuer: AccountId32;2443      readonly collectionId: u32;2444    } & Struct;2445    readonly isIssuerChanged: boolean;2446    readonly asIssuerChanged: {2447      readonly oldIssuer: AccountId32;2448      readonly newIssuer: AccountId32;2449      readonly collectionId: u32;2450    } & Struct;2451    readonly isCollectionLocked: boolean;2452    readonly asCollectionLocked: {2453      readonly issuer: AccountId32;2454      readonly collectionId: u32;2455    } & Struct;2456    readonly isNftMinted: boolean;2457    readonly asNftMinted: {2458      readonly owner: AccountId32;2459      readonly collectionId: u32;2460      readonly nftId: u32;2461    } & Struct;2462    readonly isNftBurned: boolean;2463    readonly asNftBurned: {2464      readonly owner: AccountId32;2465      readonly nftId: u32;2466    } & Struct;2467    readonly isNftSent: boolean;2468    readonly asNftSent: {2469      readonly sender: AccountId32;2470      readonly recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple;2471      readonly collectionId: u32;2472      readonly nftId: u32;2473      readonly approvalRequired: bool;2474    } & Struct;2475    readonly isNftAccepted: boolean;2476    readonly asNftAccepted: {2477      readonly sender: AccountId32;2478      readonly recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple;2479      readonly collectionId: u32;2480      readonly nftId: u32;2481    } & Struct;2482    readonly isNftRejected: boolean;2483    readonly asNftRejected: {2484      readonly sender: AccountId32;2485      readonly collectionId: u32;2486      readonly nftId: u32;2487    } & Struct;2488    readonly isPropertySet: boolean;2489    readonly asPropertySet: {2490      readonly collectionId: u32;2491      readonly maybeNftId: Option<u32>;2492      readonly key: Bytes;2493      readonly value: Bytes;2494    } & Struct;2495    readonly isResourceAdded: boolean;2496    readonly asResourceAdded: {2497      readonly nftId: u32;2498      readonly resourceId: u32;2499    } & Struct;2500    readonly isResourceRemoval: boolean;2501    readonly asResourceRemoval: {2502      readonly nftId: u32;2503      readonly resourceId: u32;2504    } & Struct;2505    readonly isResourceAccepted: boolean;2506    readonly asResourceAccepted: {2507      readonly nftId: u32;2508      readonly resourceId: u32;2509    } & Struct;2510    readonly isResourceRemovalAccepted: boolean;2511    readonly asResourceRemovalAccepted: {2512      readonly nftId: u32;2513      readonly resourceId: u32;2514    } & Struct;2515    readonly isPrioritySet: boolean;2516    readonly asPrioritySet: {2517      readonly collectionId: u32;2518      readonly nftId: u32;2519    } & Struct;2520    readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'IssuerChanged' | 'CollectionLocked' | 'NftMinted' | 'NftBurned' | 'NftSent' | 'NftAccepted' | 'NftRejected' | 'PropertySet' | 'ResourceAdded' | 'ResourceRemoval' | 'ResourceAccepted' | 'ResourceRemovalAccepted' | 'PrioritySet';2521  }25222523  /** @name PalletRmrkEquipEvent (292) */2524  export interface PalletRmrkEquipEvent extends Enum {2525    readonly isBaseCreated: boolean;2526    readonly asBaseCreated: {2527      readonly issuer: AccountId32;2528      readonly baseId: u32;2529    } & Struct;2530    readonly type: 'BaseCreated';2531  }25322533  /** @name PalletEvmEvent (293) */2534  export interface PalletEvmEvent extends Enum {2535    readonly isLog: boolean;2536    readonly asLog: EthereumLog;2537    readonly isCreated: boolean;2538    readonly asCreated: H160;2539    readonly isCreatedFailed: boolean;2540    readonly asCreatedFailed: H160;2541    readonly isExecuted: boolean;2542    readonly asExecuted: H160;2543    readonly isExecutedFailed: boolean;2544    readonly asExecutedFailed: H160;2545    readonly isBalanceDeposit: boolean;2546    readonly asBalanceDeposit: ITuple<[AccountId32, H160, U256]>;2547    readonly isBalanceWithdraw: boolean;2548    readonly asBalanceWithdraw: ITuple<[AccountId32, H160, U256]>;2549    readonly type: 'Log' | 'Created' | 'CreatedFailed' | 'Executed' | 'ExecutedFailed' | 'BalanceDeposit' | 'BalanceWithdraw';2550  }25512552  /** @name EthereumLog (294) */2553  export interface EthereumLog extends Struct {2554    readonly address: H160;2555    readonly topics: Vec<H256>;2556    readonly data: Bytes;2557  }25582559  /** @name PalletEthereumEvent (295) */2560  export interface PalletEthereumEvent extends Enum {2561    readonly isExecuted: boolean;2562    readonly asExecuted: ITuple<[H160, H160, H256, EvmCoreErrorExitReason]>;2563    readonly type: 'Executed';2564  }25652566  /** @name EvmCoreErrorExitReason (296) */2567  export interface EvmCoreErrorExitReason extends Enum {2568    readonly isSucceed: boolean;2569    readonly asSucceed: EvmCoreErrorExitSucceed;2570    readonly isError: boolean;2571    readonly asError: EvmCoreErrorExitError;2572    readonly isRevert: boolean;2573    readonly asRevert: EvmCoreErrorExitRevert;2574    readonly isFatal: boolean;2575    readonly asFatal: EvmCoreErrorExitFatal;2576    readonly type: 'Succeed' | 'Error' | 'Revert' | 'Fatal';2577  }25782579  /** @name EvmCoreErrorExitSucceed (297) */2580  export interface EvmCoreErrorExitSucceed extends Enum {2581    readonly isStopped: boolean;2582    readonly isReturned: boolean;2583    readonly isSuicided: boolean;2584    readonly type: 'Stopped' | 'Returned' | 'Suicided';2585  }25862587  /** @name EvmCoreErrorExitError (298) */2588  export interface EvmCoreErrorExitError extends Enum {2589    readonly isStackUnderflow: boolean;2590    readonly isStackOverflow: boolean;2591    readonly isInvalidJump: boolean;2592    readonly isInvalidRange: boolean;2593    readonly isDesignatedInvalid: boolean;2594    readonly isCallTooDeep: boolean;2595    readonly isCreateCollision: boolean;2596    readonly isCreateContractLimit: boolean;2597    readonly isOutOfOffset: boolean;2598    readonly isOutOfGas: boolean;2599    readonly isOutOfFund: boolean;2600    readonly isPcUnderflow: boolean;2601    readonly isCreateEmpty: boolean;2602    readonly isOther: boolean;2603    readonly asOther: Text;2604    readonly isInvalidCode: boolean;2605    readonly type: 'StackUnderflow' | 'StackOverflow' | 'InvalidJump' | 'InvalidRange' | 'DesignatedInvalid' | 'CallTooDeep' | 'CreateCollision' | 'CreateContractLimit' | 'OutOfOffset' | 'OutOfGas' | 'OutOfFund' | 'PcUnderflow' | 'CreateEmpty' | 'Other' | 'InvalidCode';2606  }26072608  /** @name EvmCoreErrorExitRevert (301) */2609  export interface EvmCoreErrorExitRevert extends Enum {2610    readonly isReverted: boolean;2611    readonly type: 'Reverted';2612  }26132614  /** @name EvmCoreErrorExitFatal (302) */2615  export interface EvmCoreErrorExitFatal extends Enum {2616    readonly isNotSupported: boolean;2617    readonly isUnhandledInterrupt: boolean;2618    readonly isCallErrorAsFatal: boolean;2619    readonly asCallErrorAsFatal: EvmCoreErrorExitError;2620    readonly isOther: boolean;2621    readonly asOther: Text;2622    readonly type: 'NotSupported' | 'UnhandledInterrupt' | 'CallErrorAsFatal' | 'Other';2623  }26242625  /** @name FrameSystemPhase (303) */2626  export interface FrameSystemPhase extends Enum {2627    readonly isApplyExtrinsic: boolean;2628    readonly asApplyExtrinsic: u32;2629    readonly isFinalization: boolean;2630    readonly isInitialization: boolean;2631    readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization';2632  }26332634  /** @name FrameSystemLastRuntimeUpgradeInfo (305) */2635  export interface FrameSystemLastRuntimeUpgradeInfo extends Struct {2636    readonly specVersion: Compact<u32>;2637    readonly specName: Text;2638  }26392640  /** @name FrameSystemLimitsBlockWeights (306) */2641  export interface FrameSystemLimitsBlockWeights extends Struct {2642    readonly baseBlock: u64;2643    readonly maxBlock: u64;2644    readonly perClass: FrameSupportWeightsPerDispatchClassWeightsPerClass;2645  }26462647  /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass (307) */2648  export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct {2649    readonly normal: FrameSystemLimitsWeightsPerClass;2650    readonly operational: FrameSystemLimitsWeightsPerClass;2651    readonly mandatory: FrameSystemLimitsWeightsPerClass;2652  }26532654  /** @name FrameSystemLimitsWeightsPerClass (308) */2655  export interface FrameSystemLimitsWeightsPerClass extends Struct {2656    readonly baseExtrinsic: u64;2657    readonly maxExtrinsic: Option<u64>;2658    readonly maxTotal: Option<u64>;2659    readonly reserved: Option<u64>;2660  }26612662  /** @name FrameSystemLimitsBlockLength (310) */2663  export interface FrameSystemLimitsBlockLength extends Struct {2664    readonly max: FrameSupportWeightsPerDispatchClassU32;2665  }26662667  /** @name FrameSupportWeightsPerDispatchClassU32 (311) */2668  export interface FrameSupportWeightsPerDispatchClassU32 extends Struct {2669    readonly normal: u32;2670    readonly operational: u32;2671    readonly mandatory: u32;2672  }26732674  /** @name FrameSupportWeightsRuntimeDbWeight (312) */2675  export interface FrameSupportWeightsRuntimeDbWeight extends Struct {2676    readonly read: u64;2677    readonly write: u64;2678  }26792680  /** @name SpVersionRuntimeVersion (313) */2681  export interface SpVersionRuntimeVersion extends Struct {2682    readonly specName: Text;2683    readonly implName: Text;2684    readonly authoringVersion: u32;2685    readonly specVersion: u32;2686    readonly implVersion: u32;2687    readonly apis: Vec<ITuple<[U8aFixed, u32]>>;2688    readonly transactionVersion: u32;2689    readonly stateVersion: u8;2690  }26912692  /** @name FrameSystemError (317) */2693  export interface FrameSystemError extends Enum {2694    readonly isInvalidSpecName: boolean;2695    readonly isSpecVersionNeedsToIncrease: boolean;2696    readonly isFailedToExtractRuntimeVersion: boolean;2697    readonly isNonDefaultComposite: boolean;2698    readonly isNonZeroRefCount: boolean;2699    readonly isCallFiltered: boolean;2700    readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered';2701  }27022703  /** @name OrmlVestingModuleError (319) */2704  export interface OrmlVestingModuleError extends Enum {2705    readonly isZeroVestingPeriod: boolean;2706    readonly isZeroVestingPeriodCount: boolean;2707    readonly isInsufficientBalanceToLock: boolean;2708    readonly isTooManyVestingSchedules: boolean;2709    readonly isAmountLow: boolean;2710    readonly isMaxVestingSchedulesExceeded: boolean;2711    readonly type: 'ZeroVestingPeriod' | 'ZeroVestingPeriodCount' | 'InsufficientBalanceToLock' | 'TooManyVestingSchedules' | 'AmountLow' | 'MaxVestingSchedulesExceeded';2712  }27132714  /** @name CumulusPalletXcmpQueueInboundChannelDetails (321) */2715  export interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct {2716    readonly sender: u32;2717    readonly state: CumulusPalletXcmpQueueInboundState;2718    readonly messageMetadata: Vec<ITuple<[u32, PolkadotParachainPrimitivesXcmpMessageFormat]>>;2719  }27202721  /** @name CumulusPalletXcmpQueueInboundState (322) */2722  export interface CumulusPalletXcmpQueueInboundState extends Enum {2723    readonly isOk: boolean;2724    readonly isSuspended: boolean;2725    readonly type: 'Ok' | 'Suspended';2726  }27272728  /** @name PolkadotParachainPrimitivesXcmpMessageFormat (325) */2729  export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum {2730    readonly isConcatenatedVersionedXcm: boolean;2731    readonly isConcatenatedEncodedBlob: boolean;2732    readonly isSignals: boolean;2733    readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals';2734  }27352736  /** @name CumulusPalletXcmpQueueOutboundChannelDetails (328) */2737  export interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct {2738    readonly recipient: u32;2739    readonly state: CumulusPalletXcmpQueueOutboundState;2740    readonly signalsExist: bool;2741    readonly firstIndex: u16;2742    readonly lastIndex: u16;2743  }27442745  /** @name CumulusPalletXcmpQueueOutboundState (329) */2746  export interface CumulusPalletXcmpQueueOutboundState extends Enum {2747    readonly isOk: boolean;2748    readonly isSuspended: boolean;2749    readonly type: 'Ok' | 'Suspended';2750  }27512752  /** @name CumulusPalletXcmpQueueQueueConfigData (331) */2753  export interface CumulusPalletXcmpQueueQueueConfigData extends Struct {2754    readonly suspendThreshold: u32;2755    readonly dropThreshold: u32;2756    readonly resumeThreshold: u32;2757    readonly thresholdWeight: u64;2758    readonly weightRestrictDecay: u64;2759    readonly xcmpMaxIndividualWeight: u64;2760  }27612762  /** @name CumulusPalletXcmpQueueError (333) */2763  export interface CumulusPalletXcmpQueueError extends Enum {2764    readonly isFailedToSend: boolean;2765    readonly isBadXcmOrigin: boolean;2766    readonly isBadXcm: boolean;2767    readonly isBadOverweightIndex: boolean;2768    readonly isWeightOverLimit: boolean;2769    readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit';2770  }27712772  /** @name PalletXcmError (334) */2773  export interface PalletXcmError extends Enum {2774    readonly isUnreachable: boolean;2775    readonly isSendFailure: boolean;2776    readonly isFiltered: boolean;2777    readonly isUnweighableMessage: boolean;2778    readonly isDestinationNotInvertible: boolean;2779    readonly isEmpty: boolean;2780    readonly isCannotReanchor: boolean;2781    readonly isTooManyAssets: boolean;2782    readonly isInvalidOrigin: boolean;2783    readonly isBadVersion: boolean;2784    readonly isBadLocation: boolean;2785    readonly isNoSubscription: boolean;2786    readonly isAlreadySubscribed: boolean;2787    readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed';2788  }27892790  /** @name CumulusPalletXcmError (335) */2791  export type CumulusPalletXcmError = Null;27922793  /** @name CumulusPalletDmpQueueConfigData (336) */2794  export interface CumulusPalletDmpQueueConfigData extends Struct {2795    readonly maxIndividual: u64;2796  }27972798  /** @name CumulusPalletDmpQueuePageIndexData (337) */2799  export interface CumulusPalletDmpQueuePageIndexData extends Struct {2800    readonly beginUsed: u32;2801    readonly endUsed: u32;2802    readonly overweightCount: u64;2803  }28042805  /** @name CumulusPalletDmpQueueError (340) */2806  export interface CumulusPalletDmpQueueError extends Enum {2807    readonly isUnknown: boolean;2808    readonly isOverLimit: boolean;2809    readonly type: 'Unknown' | 'OverLimit';2810  }28112812  /** @name PalletUniqueError (344) */2813  export interface PalletUniqueError extends Enum {2814    readonly isCollectionDecimalPointLimitExceeded: boolean;2815    readonly isConfirmUnsetSponsorFail: boolean;2816    readonly isEmptyArgument: boolean;2817    readonly type: 'CollectionDecimalPointLimitExceeded' | 'ConfirmUnsetSponsorFail' | 'EmptyArgument';2818  }28192820  /** @name PalletUniqueSchedulerScheduledV3 (347) */2821  export interface PalletUniqueSchedulerScheduledV3 extends Struct {2822    readonly maybeId: Option<U8aFixed>;2823    readonly priority: u8;2824    readonly call: FrameSupportScheduleMaybeHashed;2825    readonly maybePeriodic: Option<ITuple<[u32, u32]>>;2826    readonly origin: OpalRuntimeOriginCaller;2827  }28282829  /** @name OpalRuntimeOriginCaller (348) */2830  export interface OpalRuntimeOriginCaller extends Enum {2831    readonly isVoid: boolean;2832    readonly isSystem: boolean;2833    readonly asSystem: FrameSupportDispatchRawOrigin;2834    readonly isPolkadotXcm: boolean;2835    readonly asPolkadotXcm: PalletXcmOrigin;2836    readonly isCumulusXcm: boolean;2837    readonly asCumulusXcm: CumulusPalletXcmOrigin;2838    readonly isEthereum: boolean;2839    readonly asEthereum: PalletEthereumRawOrigin;2840    readonly type: 'Void' | 'System' | 'PolkadotXcm' | 'CumulusXcm' | 'Ethereum';2841  }28422843  /** @name FrameSupportDispatchRawOrigin (349) */2844  export interface FrameSupportDispatchRawOrigin extends Enum {2845    readonly isRoot: boolean;2846    readonly isSigned: boolean;2847    readonly asSigned: AccountId32;2848    readonly isNone: boolean;2849    readonly type: 'Root' | 'Signed' | 'None';2850  }28512852  /** @name PalletXcmOrigin (350) */2853  export interface PalletXcmOrigin extends Enum {2854    readonly isXcm: boolean;2855    readonly asXcm: XcmV1MultiLocation;2856    readonly isResponse: boolean;2857    readonly asResponse: XcmV1MultiLocation;2858    readonly type: 'Xcm' | 'Response';2859  }28602861  /** @name CumulusPalletXcmOrigin (351) */2862  export interface CumulusPalletXcmOrigin extends Enum {2863    readonly isRelay: boolean;2864    readonly isSiblingParachain: boolean;2865    readonly asSiblingParachain: u32;2866    readonly type: 'Relay' | 'SiblingParachain';2867  }28682869  /** @name PalletEthereumRawOrigin (352) */2870  export interface PalletEthereumRawOrigin extends Enum {2871    readonly isEthereumTransaction: boolean;2872    readonly asEthereumTransaction: H160;2873    readonly type: 'EthereumTransaction';2874  }28752876  /** @name SpCoreVoid (353) */2877  export type SpCoreVoid = Null;28782879  /** @name PalletUniqueSchedulerError (354) */2880  export interface PalletUniqueSchedulerError extends Enum {2881    readonly isFailedToSchedule: boolean;2882    readonly isNotFound: boolean;2883    readonly isTargetBlockNumberInPast: boolean;2884    readonly isRescheduleNoChange: boolean;2885    readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange';2886  }28872888  /** @name UpDataStructsCollection (355) */2889  export interface UpDataStructsCollection extends Struct {2890    readonly owner: AccountId32;2891    readonly mode: UpDataStructsCollectionMode;2892    readonly name: Vec<u16>;2893    readonly description: Vec<u16>;2894    readonly tokenPrefix: Bytes;2895    readonly sponsorship: UpDataStructsSponsorshipState;2896    readonly limits: UpDataStructsCollectionLimits;2897    readonly permissions: UpDataStructsCollectionPermissions;2898    readonly externalCollection: bool;2899  }29002901  /** @name UpDataStructsSponsorshipState (356) */2902  export interface UpDataStructsSponsorshipState extends Enum {2903    readonly isDisabled: boolean;2904    readonly isUnconfirmed: boolean;2905    readonly asUnconfirmed: AccountId32;2906    readonly isConfirmed: boolean;2907    readonly asConfirmed: AccountId32;2908    readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed';2909  }29102911  /** @name UpDataStructsProperties (357) */2912  export interface UpDataStructsProperties extends Struct {2913    readonly map: UpDataStructsPropertiesMapBoundedVec;2914    readonly consumedSpace: u32;2915    readonly spaceLimit: u32;2916  }29172918  /** @name UpDataStructsPropertiesMapBoundedVec (358) */2919  export interface UpDataStructsPropertiesMapBoundedVec extends BTreeMap<Bytes, Bytes> {}29202921  /** @name UpDataStructsPropertiesMapPropertyPermission (363) */2922  export interface UpDataStructsPropertiesMapPropertyPermission extends BTreeMap<Bytes, UpDataStructsPropertyPermission> {}29232924  /** @name UpDataStructsCollectionStats (370) */2925  export interface UpDataStructsCollectionStats extends Struct {2926    readonly created: u32;2927    readonly destroyed: u32;2928    readonly alive: u32;2929  }29302931  /** @name UpDataStructsTokenChild (371) */2932  export interface UpDataStructsTokenChild extends Struct {2933    readonly token: u32;2934    readonly collection: u32;2935  }29362937  /** @name PhantomTypeUpDataStructs (372) */2938  export interface PhantomTypeUpDataStructs extends Vec<ITuple<[UpDataStructsTokenData, UpDataStructsRpcCollection, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftNftInfo, RmrkTraitsResourceResourceInfo, RmrkTraitsPropertyPropertyInfo, RmrkTraitsBaseBaseInfo, RmrkTraitsPartPartType, RmrkTraitsTheme, RmrkTraitsNftNftChild]>> {}29392940  /** @name UpDataStructsTokenData (374) */2941  export interface UpDataStructsTokenData extends Struct {2942    readonly properties: Vec<UpDataStructsProperty>;2943    readonly owner: Option<PalletEvmAccountBasicCrossAccountIdRepr>;2944  }29452946  /** @name UpDataStructsRpcCollection (376) */2947  export interface UpDataStructsRpcCollection extends Struct {2948    readonly owner: AccountId32;2949    readonly mode: UpDataStructsCollectionMode;2950    readonly name: Vec<u16>;2951    readonly description: Vec<u16>;2952    readonly tokenPrefix: Bytes;2953    readonly sponsorship: UpDataStructsSponsorshipState;2954    readonly limits: UpDataStructsCollectionLimits;2955    readonly permissions: UpDataStructsCollectionPermissions;2956    readonly tokenPropertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;2957    readonly properties: Vec<UpDataStructsProperty>;2958    readonly readOnly: bool;2959  }29602961  /** @name RmrkTraitsCollectionCollectionInfo (377) */2962  export interface RmrkTraitsCollectionCollectionInfo extends Struct {2963    readonly issuer: AccountId32;2964    readonly metadata: Bytes;2965    readonly max: Option<u32>;2966    readonly symbol: Bytes;2967    readonly nftsCount: u32;2968  }29692970  /** @name RmrkTraitsNftNftInfo (378) */2971  export interface RmrkTraitsNftNftInfo extends Struct {2972    readonly owner: RmrkTraitsNftAccountIdOrCollectionNftTuple;2973    readonly royalty: Option<RmrkTraitsNftRoyaltyInfo>;2974    readonly metadata: Bytes;2975    readonly equipped: bool;2976    readonly pending: bool;2977  }29782979  /** @name RmrkTraitsNftRoyaltyInfo (380) */2980  export interface RmrkTraitsNftRoyaltyInfo extends Struct {2981    readonly recipient: AccountId32;2982    readonly amount: Permill;2983  }29842985  /** @name RmrkTraitsResourceResourceInfo (381) */2986  export interface RmrkTraitsResourceResourceInfo extends Struct {2987    readonly id: u32;2988    readonly resource: RmrkTraitsResourceResourceTypes;2989    readonly pending: bool;2990    readonly pendingRemoval: bool;2991  }29922993  /** @name RmrkTraitsPropertyPropertyInfo (382) */2994  export interface RmrkTraitsPropertyPropertyInfo extends Struct {2995    readonly key: Bytes;2996    readonly value: Bytes;2997  }29982999  /** @name RmrkTraitsBaseBaseInfo (383) */3000  export interface RmrkTraitsBaseBaseInfo extends Struct {3001    readonly issuer: AccountId32;3002    readonly baseType: Bytes;3003    readonly symbol: Bytes;3004  }30053006  /** @name RmrkTraitsNftNftChild (384) */3007  export interface RmrkTraitsNftNftChild extends Struct {3008    readonly collectionId: u32;3009    readonly nftId: u32;3010  }30113012  /** @name PalletCommonError (386) */3013  export interface PalletCommonError extends Enum {3014    readonly isCollectionNotFound: boolean;3015    readonly isMustBeTokenOwner: boolean;3016    readonly isNoPermission: boolean;3017    readonly isCantDestroyNotEmptyCollection: boolean;3018    readonly isPublicMintingNotAllowed: boolean;3019    readonly isAddressNotInAllowlist: boolean;3020    readonly isCollectionNameLimitExceeded: boolean;3021    readonly isCollectionDescriptionLimitExceeded: boolean;3022    readonly isCollectionTokenPrefixLimitExceeded: boolean;3023    readonly isTotalCollectionsLimitExceeded: boolean;3024    readonly isCollectionAdminCountExceeded: boolean;3025    readonly isCollectionLimitBoundsExceeded: boolean;3026    readonly isOwnerPermissionsCantBeReverted: boolean;3027    readonly isTransferNotAllowed: boolean;3028    readonly isAccountTokenLimitExceeded: boolean;3029    readonly isCollectionTokenLimitExceeded: boolean;3030    readonly isMetadataFlagFrozen: boolean;3031    readonly isTokenNotFound: boolean;3032    readonly isTokenValueTooLow: boolean;3033    readonly isApprovedValueTooLow: boolean;3034    readonly isCantApproveMoreThanOwned: boolean;3035    readonly isAddressIsZero: boolean;3036    readonly isUnsupportedOperation: boolean;3037    readonly isNotSufficientFounds: boolean;3038    readonly isUserIsNotAllowedToNest: boolean;3039    readonly isSourceCollectionIsNotAllowedToNest: boolean;3040    readonly isCollectionFieldSizeExceeded: boolean;3041    readonly isNoSpaceForProperty: boolean;3042    readonly isPropertyLimitReached: boolean;3043    readonly isPropertyKeyIsTooLong: boolean;3044    readonly isInvalidCharacterInPropertyKey: boolean;3045    readonly isEmptyPropertyKey: boolean;3046    readonly isCollectionIsExternal: boolean;3047    readonly isCollectionIsInternal: boolean;3048    readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'CantDestroyNotEmptyCollection' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'UserIsNotAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey' | 'CollectionIsExternal' | 'CollectionIsInternal';3049  }30503051  /** @name PalletFungibleError (388) */3052  export interface PalletFungibleError extends Enum {3053    readonly isNotFungibleDataUsedToMintFungibleCollectionToken: boolean;3054    readonly isFungibleItemsHaveNoId: boolean;3055    readonly isFungibleItemsDontHaveData: boolean;3056    readonly isFungibleDisallowsNesting: boolean;3057    readonly isSettingPropertiesNotAllowed: boolean;3058    readonly type: 'NotFungibleDataUsedToMintFungibleCollectionToken' | 'FungibleItemsHaveNoId' | 'FungibleItemsDontHaveData' | 'FungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';3059  }30603061  /** @name PalletRefungibleItemData (389) */3062  export interface PalletRefungibleItemData extends Struct {3063    readonly constData: Bytes;3064  }30653066  /** @name PalletRefungibleError (393) */3067  export interface PalletRefungibleError extends Enum {3068    readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean;3069    readonly isWrongRefungiblePieces: boolean;3070    readonly isRefungibleDisallowsNesting: boolean;3071    readonly isSettingPropertiesNotAllowed: boolean;3072    readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';3073  }30743075  /** @name PalletNonfungibleItemData (394) */3076  export interface PalletNonfungibleItemData extends Struct {3077    readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;3078  }30793080  /** @name PalletNonfungibleError (396) */3081  export interface PalletNonfungibleError extends Enum {3082    readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean;3083    readonly isNonfungibleItemsHaveNoAmount: boolean;3084    readonly isCantBurnNftWithChildren: boolean;3085    readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount' | 'CantBurnNftWithChildren';3086  }30873088  /** @name PalletStructureError (397) */3089  export interface PalletStructureError extends Enum {3090    readonly isOuroborosDetected: boolean;3091    readonly isDepthLimit: boolean;3092    readonly isBreadthLimit: boolean;3093    readonly isTokenNotFound: boolean;3094    readonly type: 'OuroborosDetected' | 'DepthLimit' | 'BreadthLimit' | 'TokenNotFound';3095  }30963097  /** @name PalletRmrkCoreError (398) */3098  export interface PalletRmrkCoreError extends Enum {3099    readonly isCorruptedCollectionType: boolean;3100    readonly isNftTypeEncodeError: boolean;3101    readonly isRmrkPropertyKeyIsTooLong: boolean;3102    readonly isRmrkPropertyValueIsTooLong: boolean;3103    readonly isUnableToDecodeRmrkData: boolean;3104    readonly isCollectionNotEmpty: boolean;3105    readonly isNoAvailableCollectionId: boolean;3106    readonly isNoAvailableNftId: boolean;3107    readonly isCollectionUnknown: boolean;3108    readonly isNoPermission: boolean;3109    readonly isNonTransferable: boolean;3110    readonly isCollectionFullOrLocked: boolean;3111    readonly isResourceDoesntExist: boolean;3112    readonly isCannotSendToDescendentOrSelf: boolean;3113    readonly isCannotAcceptNonOwnedNft: boolean;3114    readonly isCannotRejectNonOwnedNft: boolean;3115    readonly isResourceNotPending: boolean;3116    readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'ResourceNotPending';3117  }31183119  /** @name PalletRmrkEquipError (400) */3120  export interface PalletRmrkEquipError extends Enum {3121    readonly isPermissionError: boolean;3122    readonly isNoAvailableBaseId: boolean;3123    readonly isNoAvailablePartId: boolean;3124    readonly isBaseDoesntExist: boolean;3125    readonly isNeedsDefaultThemeFirst: boolean;3126    readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst';3127  }31283129  /** @name PalletEvmError (403) */3130  export interface PalletEvmError extends Enum {3131    readonly isBalanceLow: boolean;3132    readonly isFeeOverflow: boolean;3133    readonly isPaymentOverflow: boolean;3134    readonly isWithdrawFailed: boolean;3135    readonly isGasPriceTooLow: boolean;3136    readonly isInvalidNonce: boolean;3137    readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce';3138  }31393140  /** @name FpRpcTransactionStatus (406) */3141  export interface FpRpcTransactionStatus extends Struct {3142    readonly transactionHash: H256;3143    readonly transactionIndex: u32;3144    readonly from: H160;3145    readonly to: Option<H160>;3146    readonly contractAddress: Option<H160>;3147    readonly logs: Vec<EthereumLog>;3148    readonly logsBloom: EthbloomBloom;3149  }31503151  /** @name EthbloomBloom (408) */3152  export interface EthbloomBloom extends U8aFixed {}31533154  /** @name EthereumReceiptReceiptV3 (410) */3155  export interface EthereumReceiptReceiptV3 extends Enum {3156    readonly isLegacy: boolean;3157    readonly asLegacy: EthereumReceiptEip658ReceiptData;3158    readonly isEip2930: boolean;3159    readonly asEip2930: EthereumReceiptEip658ReceiptData;3160    readonly isEip1559: boolean;3161    readonly asEip1559: EthereumReceiptEip658ReceiptData;3162    readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';3163  }31643165  /** @name EthereumReceiptEip658ReceiptData (411) */3166  export interface EthereumReceiptEip658ReceiptData extends Struct {3167    readonly statusCode: u8;3168    readonly usedGas: U256;3169    readonly logsBloom: EthbloomBloom;3170    readonly logs: Vec<EthereumLog>;3171  }31723173  /** @name EthereumBlock (412) */3174  export interface EthereumBlock extends Struct {3175    readonly header: EthereumHeader;3176    readonly transactions: Vec<EthereumTransactionTransactionV2>;3177    readonly ommers: Vec<EthereumHeader>;3178  }31793180  /** @name EthereumHeader (413) */3181  export interface EthereumHeader extends Struct {3182    readonly parentHash: H256;3183    readonly ommersHash: H256;3184    readonly beneficiary: H160;3185    readonly stateRoot: H256;3186    readonly transactionsRoot: H256;3187    readonly receiptsRoot: H256;3188    readonly logsBloom: EthbloomBloom;3189    readonly difficulty: U256;3190    readonly number: U256;3191    readonly gasLimit: U256;3192    readonly gasUsed: U256;3193    readonly timestamp: u64;3194    readonly extraData: Bytes;3195    readonly mixHash: H256;3196    readonly nonce: EthereumTypesHashH64;3197  }31983199  /** @name EthereumTypesHashH64 (414) */3200  export interface EthereumTypesHashH64 extends U8aFixed {}32013202  /** @name PalletEthereumError (419) */3203  export interface PalletEthereumError extends Enum {3204    readonly isInvalidSignature: boolean;3205    readonly isPreLogExists: boolean;3206    readonly type: 'InvalidSignature' | 'PreLogExists';3207  }32083209  /** @name PalletEvmCoderSubstrateError (420) */3210  export interface PalletEvmCoderSubstrateError extends Enum {3211    readonly isOutOfGas: boolean;3212    readonly isOutOfFund: boolean;3213    readonly type: 'OutOfGas' | 'OutOfFund';3214  }32153216  /** @name PalletEvmContractHelpersSponsoringModeT (421) */3217  export interface PalletEvmContractHelpersSponsoringModeT extends Enum {3218    readonly isDisabled: boolean;3219    readonly isAllowlisted: boolean;3220    readonly isGenerous: boolean;3221    readonly type: 'Disabled' | 'Allowlisted' | 'Generous';3222  }32233224  /** @name PalletEvmContractHelpersError (423) */3225  export interface PalletEvmContractHelpersError extends Enum {3226    readonly isNoPermission: boolean;3227    readonly type: 'NoPermission';3228  }32293230  /** @name PalletEvmMigrationError (424) */3231  export interface PalletEvmMigrationError extends Enum {3232    readonly isAccountNotEmpty: boolean;3233    readonly isAccountIsNotMigrating: boolean;3234    readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating';3235  }32363237  /** @name SpRuntimeMultiSignature (426) */3238  export interface SpRuntimeMultiSignature extends Enum {3239    readonly isEd25519: boolean;3240    readonly asEd25519: SpCoreEd25519Signature;3241    readonly isSr25519: boolean;3242    readonly asSr25519: SpCoreSr25519Signature;3243    readonly isEcdsa: boolean;3244    readonly asEcdsa: SpCoreEcdsaSignature;3245    readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa';3246  }32473248  /** @name SpCoreEd25519Signature (427) */3249  export interface SpCoreEd25519Signature extends U8aFixed {}32503251  /** @name SpCoreSr25519Signature (429) */3252  export interface SpCoreSr25519Signature extends U8aFixed {}32533254  /** @name SpCoreEcdsaSignature (430) */3255  export interface SpCoreEcdsaSignature extends U8aFixed {}32563257  /** @name FrameSystemExtensionsCheckSpecVersion (433) */3258  export type FrameSystemExtensionsCheckSpecVersion = Null;32593260  /** @name FrameSystemExtensionsCheckGenesis (434) */3261  export type FrameSystemExtensionsCheckGenesis = Null;32623263  /** @name FrameSystemExtensionsCheckNonce (437) */3264  export interface FrameSystemExtensionsCheckNonce extends Compact<u32> {}32653266  /** @name FrameSystemExtensionsCheckWeight (438) */3267  export type FrameSystemExtensionsCheckWeight = Null;32683269  /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (439) */3270  export interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact<u128> {}32713272  /** @name OpalRuntimeRuntime (440) */3273  export type OpalRuntimeRuntime = Null;32743275  /** @name PalletEthereumFakeTransactionFinalizer (441) */3276  export type PalletEthereumFakeTransactionFinalizer = Null;32773278} // declare module
after · tests/src/interfaces/types-lookup.ts
1// Auto-generated via `yarn polkadot-types-from-defs`, do not edit2/* eslint-disable */34declare module '@polkadot/types/lookup' {5  import type { BTreeMap, BTreeSet, Bytes, Compact, Enum, Null, Option, Result, Struct, Text, U256, U8aFixed, Vec, bool, u128, u16, u32, u64, u8 } from '@polkadot/types-codec';6  import type { ITuple } from '@polkadot/types-codec/types';7  import type { AccountId32, Call, H160, H256, MultiAddress, Perbill, Permill } from '@polkadot/types/interfaces/runtime';8  import type { Event } from '@polkadot/types/interfaces/system';910  /** @name PolkadotPrimitivesV2PersistedValidationData (2) */11  export interface PolkadotPrimitivesV2PersistedValidationData extends Struct {12    readonly parentHead: Bytes;13    readonly relayParentNumber: u32;14    readonly relayParentStorageRoot: H256;15    readonly maxPovSize: u32;16  }1718  /** @name PolkadotPrimitivesV2UpgradeRestriction (9) */19  export interface PolkadotPrimitivesV2UpgradeRestriction extends Enum {20    readonly isPresent: boolean;21    readonly type: 'Present';22  }2324  /** @name SpTrieStorageProof (10) */25  export interface SpTrieStorageProof extends Struct {26    readonly trieNodes: BTreeSet<Bytes>;27  }2829  /** @name CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot (13) */30  export interface CumulusPalletParachainSystemRelayStateSnapshotMessagingStateSnapshot extends Struct {31    readonly dmqMqcHead: H256;32    readonly relayDispatchQueueSize: ITuple<[u32, u32]>;33    readonly ingressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;34    readonly egressChannels: Vec<ITuple<[u32, PolkadotPrimitivesV2AbridgedHrmpChannel]>>;35  }3637  /** @name PolkadotPrimitivesV2AbridgedHrmpChannel (18) */38  export interface PolkadotPrimitivesV2AbridgedHrmpChannel extends Struct {39    readonly maxCapacity: u32;40    readonly maxTotalSize: u32;41    readonly maxMessageSize: u32;42    readonly msgCount: u32;43    readonly totalSize: u32;44    readonly mqcHead: Option<H256>;45  }4647  /** @name PolkadotPrimitivesV2AbridgedHostConfiguration (20) */48  export interface PolkadotPrimitivesV2AbridgedHostConfiguration extends Struct {49    readonly maxCodeSize: u32;50    readonly maxHeadDataSize: u32;51    readonly maxUpwardQueueCount: u32;52    readonly maxUpwardQueueSize: u32;53    readonly maxUpwardMessageSize: u32;54    readonly maxUpwardMessageNumPerCandidate: u32;55    readonly hrmpMaxMessageNumPerCandidate: u32;56    readonly validationUpgradeCooldown: u32;57    readonly validationUpgradeDelay: u32;58  }5960  /** @name PolkadotCorePrimitivesOutboundHrmpMessage (26) */61  export interface PolkadotCorePrimitivesOutboundHrmpMessage extends Struct {62    readonly recipient: u32;63    readonly data: Bytes;64  }6566  /** @name CumulusPalletParachainSystemCall (28) */67  export interface CumulusPalletParachainSystemCall extends Enum {68    readonly isSetValidationData: boolean;69    readonly asSetValidationData: {70      readonly data: CumulusPrimitivesParachainInherentParachainInherentData;71    } & Struct;72    readonly isSudoSendUpwardMessage: boolean;73    readonly asSudoSendUpwardMessage: {74      readonly message: Bytes;75    } & Struct;76    readonly isAuthorizeUpgrade: boolean;77    readonly asAuthorizeUpgrade: {78      readonly codeHash: H256;79    } & Struct;80    readonly isEnactAuthorizedUpgrade: boolean;81    readonly asEnactAuthorizedUpgrade: {82      readonly code: Bytes;83    } & Struct;84    readonly type: 'SetValidationData' | 'SudoSendUpwardMessage' | 'AuthorizeUpgrade' | 'EnactAuthorizedUpgrade';85  }8687  /** @name CumulusPrimitivesParachainInherentParachainInherentData (29) */88  export interface CumulusPrimitivesParachainInherentParachainInherentData extends Struct {89    readonly validationData: PolkadotPrimitivesV2PersistedValidationData;90    readonly relayChainState: SpTrieStorageProof;91    readonly downwardMessages: Vec<PolkadotCorePrimitivesInboundDownwardMessage>;92    readonly horizontalMessages: BTreeMap<u32, Vec<PolkadotCorePrimitivesInboundHrmpMessage>>;93  }9495  /** @name PolkadotCorePrimitivesInboundDownwardMessage (31) */96  export interface PolkadotCorePrimitivesInboundDownwardMessage extends Struct {97    readonly sentAt: u32;98    readonly msg: Bytes;99  }100101  /** @name PolkadotCorePrimitivesInboundHrmpMessage (34) */102  export interface PolkadotCorePrimitivesInboundHrmpMessage extends Struct {103    readonly sentAt: u32;104    readonly data: Bytes;105  }106107  /** @name CumulusPalletParachainSystemEvent (37) */108  export interface CumulusPalletParachainSystemEvent extends Enum {109    readonly isValidationFunctionStored: boolean;110    readonly isValidationFunctionApplied: boolean;111    readonly asValidationFunctionApplied: {112      readonly relayChainBlockNum: u32;113    } & Struct;114    readonly isValidationFunctionDiscarded: boolean;115    readonly isUpgradeAuthorized: boolean;116    readonly asUpgradeAuthorized: {117      readonly codeHash: H256;118    } & Struct;119    readonly isDownwardMessagesReceived: boolean;120    readonly asDownwardMessagesReceived: {121      readonly count: u32;122    } & Struct;123    readonly isDownwardMessagesProcessed: boolean;124    readonly asDownwardMessagesProcessed: {125      readonly weightUsed: u64;126      readonly dmqHead: H256;127    } & Struct;128    readonly type: 'ValidationFunctionStored' | 'ValidationFunctionApplied' | 'ValidationFunctionDiscarded' | 'UpgradeAuthorized' | 'DownwardMessagesReceived' | 'DownwardMessagesProcessed';129  }130131  /** @name CumulusPalletParachainSystemError (38) */132  export interface CumulusPalletParachainSystemError extends Enum {133    readonly isOverlappingUpgrades: boolean;134    readonly isProhibitedByPolkadot: boolean;135    readonly isTooBig: boolean;136    readonly isValidationDataNotAvailable: boolean;137    readonly isHostConfigurationNotAvailable: boolean;138    readonly isNotScheduled: boolean;139    readonly isNothingAuthorized: boolean;140    readonly isUnauthorized: boolean;141    readonly type: 'OverlappingUpgrades' | 'ProhibitedByPolkadot' | 'TooBig' | 'ValidationDataNotAvailable' | 'HostConfigurationNotAvailable' | 'NotScheduled' | 'NothingAuthorized' | 'Unauthorized';142  }143144  /** @name PalletBalancesAccountData (41) */145  export interface PalletBalancesAccountData extends Struct {146    readonly free: u128;147    readonly reserved: u128;148    readonly miscFrozen: u128;149    readonly feeFrozen: u128;150  }151152  /** @name PalletBalancesBalanceLock (43) */153  export interface PalletBalancesBalanceLock extends Struct {154    readonly id: U8aFixed;155    readonly amount: u128;156    readonly reasons: PalletBalancesReasons;157  }158159  /** @name PalletBalancesReasons (45) */160  export interface PalletBalancesReasons extends Enum {161    readonly isFee: boolean;162    readonly isMisc: boolean;163    readonly isAll: boolean;164    readonly type: 'Fee' | 'Misc' | 'All';165  }166167  /** @name PalletBalancesReserveData (48) */168  export interface PalletBalancesReserveData extends Struct {169    readonly id: U8aFixed;170    readonly amount: u128;171  }172173  /** @name PalletBalancesReleases (51) */174  export interface PalletBalancesReleases extends Enum {175    readonly isV100: boolean;176    readonly isV200: boolean;177    readonly type: 'V100' | 'V200';178  }179180  /** @name PalletBalancesCall (52) */181  export interface PalletBalancesCall extends Enum {182    readonly isTransfer: boolean;183    readonly asTransfer: {184      readonly dest: MultiAddress;185      readonly value: Compact<u128>;186    } & Struct;187    readonly isSetBalance: boolean;188    readonly asSetBalance: {189      readonly who: MultiAddress;190      readonly newFree: Compact<u128>;191      readonly newReserved: Compact<u128>;192    } & Struct;193    readonly isForceTransfer: boolean;194    readonly asForceTransfer: {195      readonly source: MultiAddress;196      readonly dest: MultiAddress;197      readonly value: Compact<u128>;198    } & Struct;199    readonly isTransferKeepAlive: boolean;200    readonly asTransferKeepAlive: {201      readonly dest: MultiAddress;202      readonly value: Compact<u128>;203    } & Struct;204    readonly isTransferAll: boolean;205    readonly asTransferAll: {206      readonly dest: MultiAddress;207      readonly keepAlive: bool;208    } & Struct;209    readonly isForceUnreserve: boolean;210    readonly asForceUnreserve: {211      readonly who: MultiAddress;212      readonly amount: u128;213    } & Struct;214    readonly type: 'Transfer' | 'SetBalance' | 'ForceTransfer' | 'TransferKeepAlive' | 'TransferAll' | 'ForceUnreserve';215  }216217  /** @name PalletBalancesEvent (58) */218  export interface PalletBalancesEvent extends Enum {219    readonly isEndowed: boolean;220    readonly asEndowed: {221      readonly account: AccountId32;222      readonly freeBalance: u128;223    } & Struct;224    readonly isDustLost: boolean;225    readonly asDustLost: {226      readonly account: AccountId32;227      readonly amount: u128;228    } & Struct;229    readonly isTransfer: boolean;230    readonly asTransfer: {231      readonly from: AccountId32;232      readonly to: AccountId32;233      readonly amount: u128;234    } & Struct;235    readonly isBalanceSet: boolean;236    readonly asBalanceSet: {237      readonly who: AccountId32;238      readonly free: u128;239      readonly reserved: u128;240    } & Struct;241    readonly isReserved: boolean;242    readonly asReserved: {243      readonly who: AccountId32;244      readonly amount: u128;245    } & Struct;246    readonly isUnreserved: boolean;247    readonly asUnreserved: {248      readonly who: AccountId32;249      readonly amount: u128;250    } & Struct;251    readonly isReserveRepatriated: boolean;252    readonly asReserveRepatriated: {253      readonly from: AccountId32;254      readonly to: AccountId32;255      readonly amount: u128;256      readonly destinationStatus: FrameSupportTokensMiscBalanceStatus;257    } & Struct;258    readonly isDeposit: boolean;259    readonly asDeposit: {260      readonly who: AccountId32;261      readonly amount: u128;262    } & Struct;263    readonly isWithdraw: boolean;264    readonly asWithdraw: {265      readonly who: AccountId32;266      readonly amount: u128;267    } & Struct;268    readonly isSlashed: boolean;269    readonly asSlashed: {270      readonly who: AccountId32;271      readonly amount: u128;272    } & Struct;273    readonly type: 'Endowed' | 'DustLost' | 'Transfer' | 'BalanceSet' | 'Reserved' | 'Unreserved' | 'ReserveRepatriated' | 'Deposit' | 'Withdraw' | 'Slashed';274  }275276  /** @name FrameSupportTokensMiscBalanceStatus (59) */277  export interface FrameSupportTokensMiscBalanceStatus extends Enum {278    readonly isFree: boolean;279    readonly isReserved: boolean;280    readonly type: 'Free' | 'Reserved';281  }282283  /** @name PalletBalancesError (60) */284  export interface PalletBalancesError extends Enum {285    readonly isVestingBalance: boolean;286    readonly isLiquidityRestrictions: boolean;287    readonly isInsufficientBalance: boolean;288    readonly isExistentialDeposit: boolean;289    readonly isKeepAlive: boolean;290    readonly isExistingVestingSchedule: boolean;291    readonly isDeadAccount: boolean;292    readonly isTooManyReserves: boolean;293    readonly type: 'VestingBalance' | 'LiquidityRestrictions' | 'InsufficientBalance' | 'ExistentialDeposit' | 'KeepAlive' | 'ExistingVestingSchedule' | 'DeadAccount' | 'TooManyReserves';294  }295296  /** @name PalletTimestampCall (63) */297  export interface PalletTimestampCall extends Enum {298    readonly isSet: boolean;299    readonly asSet: {300      readonly now: Compact<u64>;301    } & Struct;302    readonly type: 'Set';303  }304305  /** @name PalletTransactionPaymentReleases (66) */306  export interface PalletTransactionPaymentReleases extends Enum {307    readonly isV1Ancient: boolean;308    readonly isV2: boolean;309    readonly type: 'V1Ancient' | 'V2';310  }311312  /** @name PalletTreasuryProposal (67) */313  export interface PalletTreasuryProposal extends Struct {314    readonly proposer: AccountId32;315    readonly value: u128;316    readonly beneficiary: AccountId32;317    readonly bond: u128;318  }319320  /** @name PalletTreasuryCall (70) */321  export interface PalletTreasuryCall extends Enum {322    readonly isProposeSpend: boolean;323    readonly asProposeSpend: {324      readonly value: Compact<u128>;325      readonly beneficiary: MultiAddress;326    } & Struct;327    readonly isRejectProposal: boolean;328    readonly asRejectProposal: {329      readonly proposalId: Compact<u32>;330    } & Struct;331    readonly isApproveProposal: boolean;332    readonly asApproveProposal: {333      readonly proposalId: Compact<u32>;334    } & Struct;335    readonly isRemoveApproval: boolean;336    readonly asRemoveApproval: {337      readonly proposalId: Compact<u32>;338    } & Struct;339    readonly type: 'ProposeSpend' | 'RejectProposal' | 'ApproveProposal' | 'RemoveApproval';340  }341342  /** @name PalletTreasuryEvent (72) */343  export interface PalletTreasuryEvent extends Enum {344    readonly isProposed: boolean;345    readonly asProposed: {346      readonly proposalIndex: u32;347    } & Struct;348    readonly isSpending: boolean;349    readonly asSpending: {350      readonly budgetRemaining: u128;351    } & Struct;352    readonly isAwarded: boolean;353    readonly asAwarded: {354      readonly proposalIndex: u32;355      readonly award: u128;356      readonly account: AccountId32;357    } & Struct;358    readonly isRejected: boolean;359    readonly asRejected: {360      readonly proposalIndex: u32;361      readonly slashed: u128;362    } & Struct;363    readonly isBurnt: boolean;364    readonly asBurnt: {365      readonly burntFunds: u128;366    } & Struct;367    readonly isRollover: boolean;368    readonly asRollover: {369      readonly rolloverBalance: u128;370    } & Struct;371    readonly isDeposit: boolean;372    readonly asDeposit: {373      readonly value: u128;374    } & Struct;375    readonly type: 'Proposed' | 'Spending' | 'Awarded' | 'Rejected' | 'Burnt' | 'Rollover' | 'Deposit';376  }377378  /** @name FrameSupportPalletId (75) */379  export interface FrameSupportPalletId extends U8aFixed {}380381  /** @name PalletTreasuryError (76) */382  export interface PalletTreasuryError extends Enum {383    readonly isInsufficientProposersBalance: boolean;384    readonly isInvalidIndex: boolean;385    readonly isTooManyApprovals: boolean;386    readonly isProposalNotApproved: boolean;387    readonly type: 'InsufficientProposersBalance' | 'InvalidIndex' | 'TooManyApprovals' | 'ProposalNotApproved';388  }389390  /** @name PalletSudoCall (77) */391  export interface PalletSudoCall extends Enum {392    readonly isSudo: boolean;393    readonly asSudo: {394      readonly call: Call;395    } & Struct;396    readonly isSudoUncheckedWeight: boolean;397    readonly asSudoUncheckedWeight: {398      readonly call: Call;399      readonly weight: u64;400    } & Struct;401    readonly isSetKey: boolean;402    readonly asSetKey: {403      readonly new_: MultiAddress;404    } & Struct;405    readonly isSudoAs: boolean;406    readonly asSudoAs: {407      readonly who: MultiAddress;408      readonly call: Call;409    } & Struct;410    readonly type: 'Sudo' | 'SudoUncheckedWeight' | 'SetKey' | 'SudoAs';411  }412413  /** @name FrameSystemCall (79) */414  export interface FrameSystemCall extends Enum {415    readonly isFillBlock: boolean;416    readonly asFillBlock: {417      readonly ratio: Perbill;418    } & Struct;419    readonly isRemark: boolean;420    readonly asRemark: {421      readonly remark: Bytes;422    } & Struct;423    readonly isSetHeapPages: boolean;424    readonly asSetHeapPages: {425      readonly pages: u64;426    } & Struct;427    readonly isSetCode: boolean;428    readonly asSetCode: {429      readonly code: Bytes;430    } & Struct;431    readonly isSetCodeWithoutChecks: boolean;432    readonly asSetCodeWithoutChecks: {433      readonly code: Bytes;434    } & Struct;435    readonly isSetStorage: boolean;436    readonly asSetStorage: {437      readonly items: Vec<ITuple<[Bytes, Bytes]>>;438    } & Struct;439    readonly isKillStorage: boolean;440    readonly asKillStorage: {441      readonly keys_: Vec<Bytes>;442    } & Struct;443    readonly isKillPrefix: boolean;444    readonly asKillPrefix: {445      readonly prefix: Bytes;446      readonly subkeys: u32;447    } & Struct;448    readonly isRemarkWithEvent: boolean;449    readonly asRemarkWithEvent: {450      readonly remark: Bytes;451    } & Struct;452    readonly type: 'FillBlock' | 'Remark' | 'SetHeapPages' | 'SetCode' | 'SetCodeWithoutChecks' | 'SetStorage' | 'KillStorage' | 'KillPrefix' | 'RemarkWithEvent';453  }454455  /** @name OrmlVestingModuleCall (83) */456  export interface OrmlVestingModuleCall extends Enum {457    readonly isClaim: boolean;458    readonly isVestedTransfer: boolean;459    readonly asVestedTransfer: {460      readonly dest: MultiAddress;461      readonly schedule: OrmlVestingVestingSchedule;462    } & Struct;463    readonly isUpdateVestingSchedules: boolean;464    readonly asUpdateVestingSchedules: {465      readonly who: MultiAddress;466      readonly vestingSchedules: Vec<OrmlVestingVestingSchedule>;467    } & Struct;468    readonly isClaimFor: boolean;469    readonly asClaimFor: {470      readonly dest: MultiAddress;471    } & Struct;472    readonly type: 'Claim' | 'VestedTransfer' | 'UpdateVestingSchedules' | 'ClaimFor';473  }474475  /** @name OrmlVestingVestingSchedule (84) */476  export interface OrmlVestingVestingSchedule extends Struct {477    readonly start: u32;478    readonly period: u32;479    readonly periodCount: u32;480    readonly perPeriod: Compact<u128>;481  }482483  /** @name CumulusPalletXcmpQueueCall (86) */484  export interface CumulusPalletXcmpQueueCall extends Enum {485    readonly isServiceOverweight: boolean;486    readonly asServiceOverweight: {487      readonly index: u64;488      readonly weightLimit: u64;489    } & Struct;490    readonly isSuspendXcmExecution: boolean;491    readonly isResumeXcmExecution: boolean;492    readonly isUpdateSuspendThreshold: boolean;493    readonly asUpdateSuspendThreshold: {494      readonly new_: u32;495    } & Struct;496    readonly isUpdateDropThreshold: boolean;497    readonly asUpdateDropThreshold: {498      readonly new_: u32;499    } & Struct;500    readonly isUpdateResumeThreshold: boolean;501    readonly asUpdateResumeThreshold: {502      readonly new_: u32;503    } & Struct;504    readonly isUpdateThresholdWeight: boolean;505    readonly asUpdateThresholdWeight: {506      readonly new_: u64;507    } & Struct;508    readonly isUpdateWeightRestrictDecay: boolean;509    readonly asUpdateWeightRestrictDecay: {510      readonly new_: u64;511    } & Struct;512    readonly isUpdateXcmpMaxIndividualWeight: boolean;513    readonly asUpdateXcmpMaxIndividualWeight: {514      readonly new_: u64;515    } & Struct;516    readonly type: 'ServiceOverweight' | 'SuspendXcmExecution' | 'ResumeXcmExecution' | 'UpdateSuspendThreshold' | 'UpdateDropThreshold' | 'UpdateResumeThreshold' | 'UpdateThresholdWeight' | 'UpdateWeightRestrictDecay' | 'UpdateXcmpMaxIndividualWeight';517  }518519  /** @name PalletXcmCall (87) */520  export interface PalletXcmCall extends Enum {521    readonly isSend: boolean;522    readonly asSend: {523      readonly dest: XcmVersionedMultiLocation;524      readonly message: XcmVersionedXcm;525    } & Struct;526    readonly isTeleportAssets: boolean;527    readonly asTeleportAssets: {528      readonly dest: XcmVersionedMultiLocation;529      readonly beneficiary: XcmVersionedMultiLocation;530      readonly assets: XcmVersionedMultiAssets;531      readonly feeAssetItem: u32;532    } & Struct;533    readonly isReserveTransferAssets: boolean;534    readonly asReserveTransferAssets: {535      readonly dest: XcmVersionedMultiLocation;536      readonly beneficiary: XcmVersionedMultiLocation;537      readonly assets: XcmVersionedMultiAssets;538      readonly feeAssetItem: u32;539    } & Struct;540    readonly isExecute: boolean;541    readonly asExecute: {542      readonly message: XcmVersionedXcm;543      readonly maxWeight: u64;544    } & Struct;545    readonly isForceXcmVersion: boolean;546    readonly asForceXcmVersion: {547      readonly location: XcmV1MultiLocation;548      readonly xcmVersion: u32;549    } & Struct;550    readonly isForceDefaultXcmVersion: boolean;551    readonly asForceDefaultXcmVersion: {552      readonly maybeXcmVersion: Option<u32>;553    } & Struct;554    readonly isForceSubscribeVersionNotify: boolean;555    readonly asForceSubscribeVersionNotify: {556      readonly location: XcmVersionedMultiLocation;557    } & Struct;558    readonly isForceUnsubscribeVersionNotify: boolean;559    readonly asForceUnsubscribeVersionNotify: {560      readonly location: XcmVersionedMultiLocation;561    } & Struct;562    readonly isLimitedReserveTransferAssets: boolean;563    readonly asLimitedReserveTransferAssets: {564      readonly dest: XcmVersionedMultiLocation;565      readonly beneficiary: XcmVersionedMultiLocation;566      readonly assets: XcmVersionedMultiAssets;567      readonly feeAssetItem: u32;568      readonly weightLimit: XcmV2WeightLimit;569    } & Struct;570    readonly isLimitedTeleportAssets: boolean;571    readonly asLimitedTeleportAssets: {572      readonly dest: XcmVersionedMultiLocation;573      readonly beneficiary: XcmVersionedMultiLocation;574      readonly assets: XcmVersionedMultiAssets;575      readonly feeAssetItem: u32;576      readonly weightLimit: XcmV2WeightLimit;577    } & Struct;578    readonly type: 'Send' | 'TeleportAssets' | 'ReserveTransferAssets' | 'Execute' | 'ForceXcmVersion' | 'ForceDefaultXcmVersion' | 'ForceSubscribeVersionNotify' | 'ForceUnsubscribeVersionNotify' | 'LimitedReserveTransferAssets' | 'LimitedTeleportAssets';579  }580581  /** @name XcmVersionedMultiLocation (88) */582  export interface XcmVersionedMultiLocation extends Enum {583    readonly isV0: boolean;584    readonly asV0: XcmV0MultiLocation;585    readonly isV1: boolean;586    readonly asV1: XcmV1MultiLocation;587    readonly type: 'V0' | 'V1';588  }589590  /** @name XcmV0MultiLocation (89) */591  export interface XcmV0MultiLocation extends Enum {592    readonly isNull: boolean;593    readonly isX1: boolean;594    readonly asX1: XcmV0Junction;595    readonly isX2: boolean;596    readonly asX2: ITuple<[XcmV0Junction, XcmV0Junction]>;597    readonly isX3: boolean;598    readonly asX3: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction]>;599    readonly isX4: boolean;600    readonly asX4: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;601    readonly isX5: boolean;602    readonly asX5: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;603    readonly isX6: boolean;604    readonly asX6: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;605    readonly isX7: boolean;606    readonly asX7: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;607    readonly isX8: boolean;608    readonly asX8: ITuple<[XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction, XcmV0Junction]>;609    readonly type: 'Null' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';610  }611612  /** @name XcmV0Junction (90) */613  export interface XcmV0Junction extends Enum {614    readonly isParent: boolean;615    readonly isParachain: boolean;616    readonly asParachain: Compact<u32>;617    readonly isAccountId32: boolean;618    readonly asAccountId32: {619      readonly network: XcmV0JunctionNetworkId;620      readonly id: U8aFixed;621    } & Struct;622    readonly isAccountIndex64: boolean;623    readonly asAccountIndex64: {624      readonly network: XcmV0JunctionNetworkId;625      readonly index: Compact<u64>;626    } & Struct;627    readonly isAccountKey20: boolean;628    readonly asAccountKey20: {629      readonly network: XcmV0JunctionNetworkId;630      readonly key: U8aFixed;631    } & Struct;632    readonly isPalletInstance: boolean;633    readonly asPalletInstance: u8;634    readonly isGeneralIndex: boolean;635    readonly asGeneralIndex: Compact<u128>;636    readonly isGeneralKey: boolean;637    readonly asGeneralKey: Bytes;638    readonly isOnlyChild: boolean;639    readonly isPlurality: boolean;640    readonly asPlurality: {641      readonly id: XcmV0JunctionBodyId;642      readonly part: XcmV0JunctionBodyPart;643    } & Struct;644    readonly type: 'Parent' | 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';645  }646647  /** @name XcmV0JunctionNetworkId (91) */648  export interface XcmV0JunctionNetworkId extends Enum {649    readonly isAny: boolean;650    readonly isNamed: boolean;651    readonly asNamed: Bytes;652    readonly isPolkadot: boolean;653    readonly isKusama: boolean;654    readonly type: 'Any' | 'Named' | 'Polkadot' | 'Kusama';655  }656657  /** @name XcmV0JunctionBodyId (92) */658  export interface XcmV0JunctionBodyId extends Enum {659    readonly isUnit: boolean;660    readonly isNamed: boolean;661    readonly asNamed: Bytes;662    readonly isIndex: boolean;663    readonly asIndex: Compact<u32>;664    readonly isExecutive: boolean;665    readonly isTechnical: boolean;666    readonly isLegislative: boolean;667    readonly isJudicial: boolean;668    readonly type: 'Unit' | 'Named' | 'Index' | 'Executive' | 'Technical' | 'Legislative' | 'Judicial';669  }670671  /** @name XcmV0JunctionBodyPart (93) */672  export interface XcmV0JunctionBodyPart extends Enum {673    readonly isVoice: boolean;674    readonly isMembers: boolean;675    readonly asMembers: {676      readonly count: Compact<u32>;677    } & Struct;678    readonly isFraction: boolean;679    readonly asFraction: {680      readonly nom: Compact<u32>;681      readonly denom: Compact<u32>;682    } & Struct;683    readonly isAtLeastProportion: boolean;684    readonly asAtLeastProportion: {685      readonly nom: Compact<u32>;686      readonly denom: Compact<u32>;687    } & Struct;688    readonly isMoreThanProportion: boolean;689    readonly asMoreThanProportion: {690      readonly nom: Compact<u32>;691      readonly denom: Compact<u32>;692    } & Struct;693    readonly type: 'Voice' | 'Members' | 'Fraction' | 'AtLeastProportion' | 'MoreThanProportion';694  }695696  /** @name XcmV1MultiLocation (94) */697  export interface XcmV1MultiLocation extends Struct {698    readonly parents: u8;699    readonly interior: XcmV1MultilocationJunctions;700  }701702  /** @name XcmV1MultilocationJunctions (95) */703  export interface XcmV1MultilocationJunctions extends Enum {704    readonly isHere: boolean;705    readonly isX1: boolean;706    readonly asX1: XcmV1Junction;707    readonly isX2: boolean;708    readonly asX2: ITuple<[XcmV1Junction, XcmV1Junction]>;709    readonly isX3: boolean;710    readonly asX3: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction]>;711    readonly isX4: boolean;712    readonly asX4: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;713    readonly isX5: boolean;714    readonly asX5: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;715    readonly isX6: boolean;716    readonly asX6: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;717    readonly isX7: boolean;718    readonly asX7: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;719    readonly isX8: boolean;720    readonly asX8: ITuple<[XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction, XcmV1Junction]>;721    readonly type: 'Here' | 'X1' | 'X2' | 'X3' | 'X4' | 'X5' | 'X6' | 'X7' | 'X8';722  }723724  /** @name XcmV1Junction (96) */725  export interface XcmV1Junction extends Enum {726    readonly isParachain: boolean;727    readonly asParachain: Compact<u32>;728    readonly isAccountId32: boolean;729    readonly asAccountId32: {730      readonly network: XcmV0JunctionNetworkId;731      readonly id: U8aFixed;732    } & Struct;733    readonly isAccountIndex64: boolean;734    readonly asAccountIndex64: {735      readonly network: XcmV0JunctionNetworkId;736      readonly index: Compact<u64>;737    } & Struct;738    readonly isAccountKey20: boolean;739    readonly asAccountKey20: {740      readonly network: XcmV0JunctionNetworkId;741      readonly key: U8aFixed;742    } & Struct;743    readonly isPalletInstance: boolean;744    readonly asPalletInstance: u8;745    readonly isGeneralIndex: boolean;746    readonly asGeneralIndex: Compact<u128>;747    readonly isGeneralKey: boolean;748    readonly asGeneralKey: Bytes;749    readonly isOnlyChild: boolean;750    readonly isPlurality: boolean;751    readonly asPlurality: {752      readonly id: XcmV0JunctionBodyId;753      readonly part: XcmV0JunctionBodyPart;754    } & Struct;755    readonly type: 'Parachain' | 'AccountId32' | 'AccountIndex64' | 'AccountKey20' | 'PalletInstance' | 'GeneralIndex' | 'GeneralKey' | 'OnlyChild' | 'Plurality';756  }757758  /** @name XcmVersionedXcm (97) */759  export interface XcmVersionedXcm extends Enum {760    readonly isV0: boolean;761    readonly asV0: XcmV0Xcm;762    readonly isV1: boolean;763    readonly asV1: XcmV1Xcm;764    readonly isV2: boolean;765    readonly asV2: XcmV2Xcm;766    readonly type: 'V0' | 'V1' | 'V2';767  }768769  /** @name XcmV0Xcm (98) */770  export interface XcmV0Xcm extends Enum {771    readonly isWithdrawAsset: boolean;772    readonly asWithdrawAsset: {773      readonly assets: Vec<XcmV0MultiAsset>;774      readonly effects: Vec<XcmV0Order>;775    } & Struct;776    readonly isReserveAssetDeposit: boolean;777    readonly asReserveAssetDeposit: {778      readonly assets: Vec<XcmV0MultiAsset>;779      readonly effects: Vec<XcmV0Order>;780    } & Struct;781    readonly isTeleportAsset: boolean;782    readonly asTeleportAsset: {783      readonly assets: Vec<XcmV0MultiAsset>;784      readonly effects: Vec<XcmV0Order>;785    } & Struct;786    readonly isQueryResponse: boolean;787    readonly asQueryResponse: {788      readonly queryId: Compact<u64>;789      readonly response: XcmV0Response;790    } & Struct;791    readonly isTransferAsset: boolean;792    readonly asTransferAsset: {793      readonly assets: Vec<XcmV0MultiAsset>;794      readonly dest: XcmV0MultiLocation;795    } & Struct;796    readonly isTransferReserveAsset: boolean;797    readonly asTransferReserveAsset: {798      readonly assets: Vec<XcmV0MultiAsset>;799      readonly dest: XcmV0MultiLocation;800      readonly effects: Vec<XcmV0Order>;801    } & Struct;802    readonly isTransact: boolean;803    readonly asTransact: {804      readonly originType: XcmV0OriginKind;805      readonly requireWeightAtMost: u64;806      readonly call: XcmDoubleEncoded;807    } & Struct;808    readonly isHrmpNewChannelOpenRequest: boolean;809    readonly asHrmpNewChannelOpenRequest: {810      readonly sender: Compact<u32>;811      readonly maxMessageSize: Compact<u32>;812      readonly maxCapacity: Compact<u32>;813    } & Struct;814    readonly isHrmpChannelAccepted: boolean;815    readonly asHrmpChannelAccepted: {816      readonly recipient: Compact<u32>;817    } & Struct;818    readonly isHrmpChannelClosing: boolean;819    readonly asHrmpChannelClosing: {820      readonly initiator: Compact<u32>;821      readonly sender: Compact<u32>;822      readonly recipient: Compact<u32>;823    } & Struct;824    readonly isRelayedFrom: boolean;825    readonly asRelayedFrom: {826      readonly who: XcmV0MultiLocation;827      readonly message: XcmV0Xcm;828    } & Struct;829    readonly type: 'WithdrawAsset' | 'ReserveAssetDeposit' | 'TeleportAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom';830  }831832  /** @name XcmV0MultiAsset (100) */833  export interface XcmV0MultiAsset extends Enum {834    readonly isNone: boolean;835    readonly isAll: boolean;836    readonly isAllFungible: boolean;837    readonly isAllNonFungible: boolean;838    readonly isAllAbstractFungible: boolean;839    readonly asAllAbstractFungible: {840      readonly id: Bytes;841    } & Struct;842    readonly isAllAbstractNonFungible: boolean;843    readonly asAllAbstractNonFungible: {844      readonly class: Bytes;845    } & Struct;846    readonly isAllConcreteFungible: boolean;847    readonly asAllConcreteFungible: {848      readonly id: XcmV0MultiLocation;849    } & Struct;850    readonly isAllConcreteNonFungible: boolean;851    readonly asAllConcreteNonFungible: {852      readonly class: XcmV0MultiLocation;853    } & Struct;854    readonly isAbstractFungible: boolean;855    readonly asAbstractFungible: {856      readonly id: Bytes;857      readonly amount: Compact<u128>;858    } & Struct;859    readonly isAbstractNonFungible: boolean;860    readonly asAbstractNonFungible: {861      readonly class: Bytes;862      readonly instance: XcmV1MultiassetAssetInstance;863    } & Struct;864    readonly isConcreteFungible: boolean;865    readonly asConcreteFungible: {866      readonly id: XcmV0MultiLocation;867      readonly amount: Compact<u128>;868    } & Struct;869    readonly isConcreteNonFungible: boolean;870    readonly asConcreteNonFungible: {871      readonly class: XcmV0MultiLocation;872      readonly instance: XcmV1MultiassetAssetInstance;873    } & Struct;874    readonly type: 'None' | 'All' | 'AllFungible' | 'AllNonFungible' | 'AllAbstractFungible' | 'AllAbstractNonFungible' | 'AllConcreteFungible' | 'AllConcreteNonFungible' | 'AbstractFungible' | 'AbstractNonFungible' | 'ConcreteFungible' | 'ConcreteNonFungible';875  }876877  /** @name XcmV1MultiassetAssetInstance (101) */878  export interface XcmV1MultiassetAssetInstance extends Enum {879    readonly isUndefined: boolean;880    readonly isIndex: boolean;881    readonly asIndex: Compact<u128>;882    readonly isArray4: boolean;883    readonly asArray4: U8aFixed;884    readonly isArray8: boolean;885    readonly asArray8: U8aFixed;886    readonly isArray16: boolean;887    readonly asArray16: U8aFixed;888    readonly isArray32: boolean;889    readonly asArray32: U8aFixed;890    readonly isBlob: boolean;891    readonly asBlob: Bytes;892    readonly type: 'Undefined' | 'Index' | 'Array4' | 'Array8' | 'Array16' | 'Array32' | 'Blob';893  }894895  /** @name XcmV0Order (104) */896  export interface XcmV0Order extends Enum {897    readonly isNull: boolean;898    readonly isDepositAsset: boolean;899    readonly asDepositAsset: {900      readonly assets: Vec<XcmV0MultiAsset>;901      readonly dest: XcmV0MultiLocation;902    } & Struct;903    readonly isDepositReserveAsset: boolean;904    readonly asDepositReserveAsset: {905      readonly assets: Vec<XcmV0MultiAsset>;906      readonly dest: XcmV0MultiLocation;907      readonly effects: Vec<XcmV0Order>;908    } & Struct;909    readonly isExchangeAsset: boolean;910    readonly asExchangeAsset: {911      readonly give: Vec<XcmV0MultiAsset>;912      readonly receive: Vec<XcmV0MultiAsset>;913    } & Struct;914    readonly isInitiateReserveWithdraw: boolean;915    readonly asInitiateReserveWithdraw: {916      readonly assets: Vec<XcmV0MultiAsset>;917      readonly reserve: XcmV0MultiLocation;918      readonly effects: Vec<XcmV0Order>;919    } & Struct;920    readonly isInitiateTeleport: boolean;921    readonly asInitiateTeleport: {922      readonly assets: Vec<XcmV0MultiAsset>;923      readonly dest: XcmV0MultiLocation;924      readonly effects: Vec<XcmV0Order>;925    } & Struct;926    readonly isQueryHolding: boolean;927    readonly asQueryHolding: {928      readonly queryId: Compact<u64>;929      readonly dest: XcmV0MultiLocation;930      readonly assets: Vec<XcmV0MultiAsset>;931    } & Struct;932    readonly isBuyExecution: boolean;933    readonly asBuyExecution: {934      readonly fees: XcmV0MultiAsset;935      readonly weight: u64;936      readonly debt: u64;937      readonly haltOnError: bool;938      readonly xcm: Vec<XcmV0Xcm>;939    } & Struct;940    readonly type: 'Null' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';941  }942943  /** @name XcmV0Response (106) */944  export interface XcmV0Response extends Enum {945    readonly isAssets: boolean;946    readonly asAssets: Vec<XcmV0MultiAsset>;947    readonly type: 'Assets';948  }949950  /** @name XcmV0OriginKind (107) */951  export interface XcmV0OriginKind extends Enum {952    readonly isNative: boolean;953    readonly isSovereignAccount: boolean;954    readonly isSuperuser: boolean;955    readonly isXcm: boolean;956    readonly type: 'Native' | 'SovereignAccount' | 'Superuser' | 'Xcm';957  }958959  /** @name XcmDoubleEncoded (108) */960  export interface XcmDoubleEncoded extends Struct {961    readonly encoded: Bytes;962  }963964  /** @name XcmV1Xcm (109) */965  export interface XcmV1Xcm extends Enum {966    readonly isWithdrawAsset: boolean;967    readonly asWithdrawAsset: {968      readonly assets: XcmV1MultiassetMultiAssets;969      readonly effects: Vec<XcmV1Order>;970    } & Struct;971    readonly isReserveAssetDeposited: boolean;972    readonly asReserveAssetDeposited: {973      readonly assets: XcmV1MultiassetMultiAssets;974      readonly effects: Vec<XcmV1Order>;975    } & Struct;976    readonly isReceiveTeleportedAsset: boolean;977    readonly asReceiveTeleportedAsset: {978      readonly assets: XcmV1MultiassetMultiAssets;979      readonly effects: Vec<XcmV1Order>;980    } & Struct;981    readonly isQueryResponse: boolean;982    readonly asQueryResponse: {983      readonly queryId: Compact<u64>;984      readonly response: XcmV1Response;985    } & Struct;986    readonly isTransferAsset: boolean;987    readonly asTransferAsset: {988      readonly assets: XcmV1MultiassetMultiAssets;989      readonly beneficiary: XcmV1MultiLocation;990    } & Struct;991    readonly isTransferReserveAsset: boolean;992    readonly asTransferReserveAsset: {993      readonly assets: XcmV1MultiassetMultiAssets;994      readonly dest: XcmV1MultiLocation;995      readonly effects: Vec<XcmV1Order>;996    } & Struct;997    readonly isTransact: boolean;998    readonly asTransact: {999      readonly originType: XcmV0OriginKind;1000      readonly requireWeightAtMost: u64;1001      readonly call: XcmDoubleEncoded;1002    } & Struct;1003    readonly isHrmpNewChannelOpenRequest: boolean;1004    readonly asHrmpNewChannelOpenRequest: {1005      readonly sender: Compact<u32>;1006      readonly maxMessageSize: Compact<u32>;1007      readonly maxCapacity: Compact<u32>;1008    } & Struct;1009    readonly isHrmpChannelAccepted: boolean;1010    readonly asHrmpChannelAccepted: {1011      readonly recipient: Compact<u32>;1012    } & Struct;1013    readonly isHrmpChannelClosing: boolean;1014    readonly asHrmpChannelClosing: {1015      readonly initiator: Compact<u32>;1016      readonly sender: Compact<u32>;1017      readonly recipient: Compact<u32>;1018    } & Struct;1019    readonly isRelayedFrom: boolean;1020    readonly asRelayedFrom: {1021      readonly who: XcmV1MultilocationJunctions;1022      readonly message: XcmV1Xcm;1023    } & Struct;1024    readonly isSubscribeVersion: boolean;1025    readonly asSubscribeVersion: {1026      readonly queryId: Compact<u64>;1027      readonly maxResponseWeight: Compact<u64>;1028    } & Struct;1029    readonly isUnsubscribeVersion: boolean;1030    readonly type: 'WithdrawAsset' | 'ReserveAssetDeposited' | 'ReceiveTeleportedAsset' | 'QueryResponse' | 'TransferAsset' | 'TransferReserveAsset' | 'Transact' | 'HrmpNewChannelOpenRequest' | 'HrmpChannelAccepted' | 'HrmpChannelClosing' | 'RelayedFrom' | 'SubscribeVersion' | 'UnsubscribeVersion';1031  }10321033  /** @name XcmV1MultiassetMultiAssets (110) */1034  export interface XcmV1MultiassetMultiAssets extends Vec<XcmV1MultiAsset> {}10351036  /** @name XcmV1MultiAsset (112) */1037  export interface XcmV1MultiAsset extends Struct {1038    readonly id: XcmV1MultiassetAssetId;1039    readonly fun: XcmV1MultiassetFungibility;1040  }10411042  /** @name XcmV1MultiassetAssetId (113) */1043  export interface XcmV1MultiassetAssetId extends Enum {1044    readonly isConcrete: boolean;1045    readonly asConcrete: XcmV1MultiLocation;1046    readonly isAbstract: boolean;1047    readonly asAbstract: Bytes;1048    readonly type: 'Concrete' | 'Abstract';1049  }10501051  /** @name XcmV1MultiassetFungibility (114) */1052  export interface XcmV1MultiassetFungibility extends Enum {1053    readonly isFungible: boolean;1054    readonly asFungible: Compact<u128>;1055    readonly isNonFungible: boolean;1056    readonly asNonFungible: XcmV1MultiassetAssetInstance;1057    readonly type: 'Fungible' | 'NonFungible';1058  }10591060  /** @name XcmV1Order (116) */1061  export interface XcmV1Order extends Enum {1062    readonly isNoop: boolean;1063    readonly isDepositAsset: boolean;1064    readonly asDepositAsset: {1065      readonly assets: XcmV1MultiassetMultiAssetFilter;1066      readonly maxAssets: u32;1067      readonly beneficiary: XcmV1MultiLocation;1068    } & Struct;1069    readonly isDepositReserveAsset: boolean;1070    readonly asDepositReserveAsset: {1071      readonly assets: XcmV1MultiassetMultiAssetFilter;1072      readonly maxAssets: u32;1073      readonly dest: XcmV1MultiLocation;1074      readonly effects: Vec<XcmV1Order>;1075    } & Struct;1076    readonly isExchangeAsset: boolean;1077    readonly asExchangeAsset: {1078      readonly give: XcmV1MultiassetMultiAssetFilter;1079      readonly receive: XcmV1MultiassetMultiAssets;1080    } & Struct;1081    readonly isInitiateReserveWithdraw: boolean;1082    readonly asInitiateReserveWithdraw: {1083      readonly assets: XcmV1MultiassetMultiAssetFilter;1084      readonly reserve: XcmV1MultiLocation;1085      readonly effects: Vec<XcmV1Order>;1086    } & Struct;1087    readonly isInitiateTeleport: boolean;1088    readonly asInitiateTeleport: {1089      readonly assets: XcmV1MultiassetMultiAssetFilter;1090      readonly dest: XcmV1MultiLocation;1091      readonly effects: Vec<XcmV1Order>;1092    } & Struct;1093    readonly isQueryHolding: boolean;1094    readonly asQueryHolding: {1095      readonly queryId: Compact<u64>;1096      readonly dest: XcmV1MultiLocation;1097      readonly assets: XcmV1MultiassetMultiAssetFilter;1098    } & Struct;1099    readonly isBuyExecution: boolean;1100    readonly asBuyExecution: {1101      readonly fees: XcmV1MultiAsset;1102      readonly weight: u64;1103      readonly debt: u64;1104      readonly haltOnError: bool;1105      readonly instructions: Vec<XcmV1Xcm>;1106    } & Struct;1107    readonly type: 'Noop' | 'DepositAsset' | 'DepositReserveAsset' | 'ExchangeAsset' | 'InitiateReserveWithdraw' | 'InitiateTeleport' | 'QueryHolding' | 'BuyExecution';1108  }11091110  /** @name XcmV1MultiassetMultiAssetFilter (117) */1111  export interface XcmV1MultiassetMultiAssetFilter extends Enum {1112    readonly isDefinite: boolean;1113    readonly asDefinite: XcmV1MultiassetMultiAssets;1114    readonly isWild: boolean;1115    readonly asWild: XcmV1MultiassetWildMultiAsset;1116    readonly type: 'Definite' | 'Wild';1117  }11181119  /** @name XcmV1MultiassetWildMultiAsset (118) */1120  export interface XcmV1MultiassetWildMultiAsset extends Enum {1121    readonly isAll: boolean;1122    readonly isAllOf: boolean;1123    readonly asAllOf: {1124      readonly id: XcmV1MultiassetAssetId;1125      readonly fun: XcmV1MultiassetWildFungibility;1126    } & Struct;1127    readonly type: 'All' | 'AllOf';1128  }11291130  /** @name XcmV1MultiassetWildFungibility (119) */1131  export interface XcmV1MultiassetWildFungibility extends Enum {1132    readonly isFungible: boolean;1133    readonly isNonFungible: boolean;1134    readonly type: 'Fungible' | 'NonFungible';1135  }11361137  /** @name XcmV1Response (121) */1138  export interface XcmV1Response extends Enum {1139    readonly isAssets: boolean;1140    readonly asAssets: XcmV1MultiassetMultiAssets;1141    readonly isVersion: boolean;1142    readonly asVersion: u32;1143    readonly type: 'Assets' | 'Version';1144  }11451146  /** @name XcmV2Xcm (122) */1147  export interface XcmV2Xcm extends Vec<XcmV2Instruction> {}11481149  /** @name XcmV2Instruction (124) */1150  export interface XcmV2Instruction extends Enum {1151    readonly isWithdrawAsset: boolean;1152    readonly asWithdrawAsset: XcmV1MultiassetMultiAssets;1153    readonly isReserveAssetDeposited: boolean;1154    readonly asReserveAssetDeposited: XcmV1MultiassetMultiAssets;1155    readonly isReceiveTeleportedAsset: boolean;1156    readonly asReceiveTeleportedAsset: XcmV1MultiassetMultiAssets;1157    readonly isQueryResponse: boolean;1158    readonly asQueryResponse: {1159      readonly queryId: Compact<u64>;1160      readonly response: XcmV2Response;1161      readonly maxWeight: Compact<u64>;1162    } & Struct;1163    readonly isTransferAsset: boolean;1164    readonly asTransferAsset: {1165      readonly assets: XcmV1MultiassetMultiAssets;1166      readonly beneficiary: XcmV1MultiLocation;1167    } & Struct;1168    readonly isTransferReserveAsset: boolean;1169    readonly asTransferReserveAsset: {1170      readonly assets: XcmV1MultiassetMultiAssets;1171      readonly dest: XcmV1MultiLocation;1172      readonly xcm: XcmV2Xcm;1173    } & Struct;1174    readonly isTransact: boolean;1175    readonly asTransact: {1176      readonly originType: XcmV0OriginKind;1177      readonly requireWeightAtMost: Compact<u64>;1178      readonly call: XcmDoubleEncoded;1179    } & Struct;1180    readonly isHrmpNewChannelOpenRequest: boolean;1181    readonly asHrmpNewChannelOpenRequest: {1182      readonly sender: Compact<u32>;1183      readonly maxMessageSize: Compact<u32>;1184      readonly maxCapacity: Compact<u32>;1185    } & Struct;1186    readonly isHrmpChannelAccepted: boolean;1187    readonly asHrmpChannelAccepted: {1188      readonly recipient: Compact<u32>;1189    } & Struct;1190    readonly isHrmpChannelClosing: boolean;1191    readonly asHrmpChannelClosing: {1192      readonly initiator: Compact<u32>;1193      readonly sender: Compact<u32>;1194      readonly recipient: Compact<u32>;1195    } & Struct;1196    readonly isClearOrigin: boolean;1197    readonly isDescendOrigin: boolean;1198    readonly asDescendOrigin: XcmV1MultilocationJunctions;1199    readonly isReportError: boolean;1200    readonly asReportError: {1201      readonly queryId: Compact<u64>;1202      readonly dest: XcmV1MultiLocation;1203      readonly maxResponseWeight: Compact<u64>;1204    } & Struct;1205    readonly isDepositAsset: boolean;1206    readonly asDepositAsset: {1207      readonly assets: XcmV1MultiassetMultiAssetFilter;1208      readonly maxAssets: Compact<u32>;1209      readonly beneficiary: XcmV1MultiLocation;1210    } & Struct;1211    readonly isDepositReserveAsset: boolean;1212    readonly asDepositReserveAsset: {1213      readonly assets: XcmV1MultiassetMultiAssetFilter;1214      readonly maxAssets: Compact<u32>;1215      readonly dest: XcmV1MultiLocation;1216      readonly xcm: XcmV2Xcm;1217    } & Struct;1218    readonly isExchangeAsset: boolean;1219    readonly asExchangeAsset: {1220      readonly give: XcmV1MultiassetMultiAssetFilter;1221      readonly receive: XcmV1MultiassetMultiAssets;1222    } & Struct;1223    readonly isInitiateReserveWithdraw: boolean;1224    readonly asInitiateReserveWithdraw: {1225      readonly assets: XcmV1MultiassetMultiAssetFilter;1226      readonly reserve: XcmV1MultiLocation;1227      readonly xcm: XcmV2Xcm;1228    } & Struct;1229    readonly isInitiateTeleport: boolean;1230    readonly asInitiateTeleport: {1231      readonly assets: XcmV1MultiassetMultiAssetFilter;1232      readonly dest: XcmV1MultiLocation;1233      readonly xcm: XcmV2Xcm;1234    } & Struct;1235    readonly isQueryHolding: boolean;1236    readonly asQueryHolding: {1237      readonly queryId: Compact<u64>;1238      readonly dest: XcmV1MultiLocation;1239      readonly assets: XcmV1MultiassetMultiAssetFilter;1240      readonly maxResponseWeight: Compact<u64>;1241    } & Struct;1242    readonly isBuyExecution: boolean;1243    readonly asBuyExecution: {1244      readonly fees: XcmV1MultiAsset;1245      readonly weightLimit: XcmV2WeightLimit;1246    } & Struct;1247    readonly isRefundSurplus: boolean;1248    readonly isSetErrorHandler: boolean;1249    readonly asSetErrorHandler: XcmV2Xcm;1250    readonly isSetAppendix: boolean;1251    readonly asSetAppendix: XcmV2Xcm;1252    readonly isClearError: boolean;1253    readonly isClaimAsset: boolean;1254    readonly asClaimAsset: {1255      readonly assets: XcmV1MultiassetMultiAssets;1256      readonly ticket: XcmV1MultiLocation;1257    } & Struct;1258    readonly isTrap: boolean;1259    readonly asTrap: Compact<u64>;1260    readonly isSubscribeVersion: boolean;1261    readonly asSubscribeVersion: {1262      readonly queryId: Compact<u64>;1263      readonly maxResponseWeight: Compact<u64>;1264    } & Struct;1265    readonly isUnsubscribeVersion: boolean;1266    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';1267  }12681269  /** @name XcmV2Response (125) */1270  export interface XcmV2Response extends Enum {1271    readonly isNull: boolean;1272    readonly isAssets: boolean;1273    readonly asAssets: XcmV1MultiassetMultiAssets;1274    readonly isExecutionResult: boolean;1275    readonly asExecutionResult: Option<ITuple<[u32, XcmV2TraitsError]>>;1276    readonly isVersion: boolean;1277    readonly asVersion: u32;1278    readonly type: 'Null' | 'Assets' | 'ExecutionResult' | 'Version';1279  }12801281  /** @name XcmV2TraitsError (128) */1282  export interface XcmV2TraitsError extends Enum {1283    readonly isOverflow: boolean;1284    readonly isUnimplemented: boolean;1285    readonly isUntrustedReserveLocation: boolean;1286    readonly isUntrustedTeleportLocation: boolean;1287    readonly isMultiLocationFull: boolean;1288    readonly isMultiLocationNotInvertible: boolean;1289    readonly isBadOrigin: boolean;1290    readonly isInvalidLocation: boolean;1291    readonly isAssetNotFound: boolean;1292    readonly isFailedToTransactAsset: boolean;1293    readonly isNotWithdrawable: boolean;1294    readonly isLocationCannotHold: boolean;1295    readonly isExceedsMaxMessageSize: boolean;1296    readonly isDestinationUnsupported: boolean;1297    readonly isTransport: boolean;1298    readonly isUnroutable: boolean;1299    readonly isUnknownClaim: boolean;1300    readonly isFailedToDecode: boolean;1301    readonly isMaxWeightInvalid: boolean;1302    readonly isNotHoldingFees: boolean;1303    readonly isTooExpensive: boolean;1304    readonly isTrap: boolean;1305    readonly asTrap: u64;1306    readonly isUnhandledXcmVersion: boolean;1307    readonly isWeightLimitReached: boolean;1308    readonly asWeightLimitReached: u64;1309    readonly isBarrier: boolean;1310    readonly isWeightNotComputable: boolean;1311    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';1312  }13131314  /** @name XcmV2WeightLimit (129) */1315  export interface XcmV2WeightLimit extends Enum {1316    readonly isUnlimited: boolean;1317    readonly isLimited: boolean;1318    readonly asLimited: Compact<u64>;1319    readonly type: 'Unlimited' | 'Limited';1320  }13211322  /** @name XcmVersionedMultiAssets (130) */1323  export interface XcmVersionedMultiAssets extends Enum {1324    readonly isV0: boolean;1325    readonly asV0: Vec<XcmV0MultiAsset>;1326    readonly isV1: boolean;1327    readonly asV1: XcmV1MultiassetMultiAssets;1328    readonly type: 'V0' | 'V1';1329  }13301331  /** @name CumulusPalletXcmCall (145) */1332  export type CumulusPalletXcmCall = Null;13331334  /** @name CumulusPalletDmpQueueCall (146) */1335  export interface CumulusPalletDmpQueueCall extends Enum {1336    readonly isServiceOverweight: boolean;1337    readonly asServiceOverweight: {1338      readonly index: u64;1339      readonly weightLimit: u64;1340    } & Struct;1341    readonly type: 'ServiceOverweight';1342  }13431344  /** @name PalletInflationCall (147) */1345  export interface PalletInflationCall extends Enum {1346    readonly isStartInflation: boolean;1347    readonly asStartInflation: {1348      readonly inflationStartRelayBlock: u32;1349    } & Struct;1350    readonly type: 'StartInflation';1351  }13521353  /** @name PalletUniqueCall (148) */1354  export interface PalletUniqueCall extends Enum {1355    readonly isCreateCollection: boolean;1356    readonly asCreateCollection: {1357      readonly collectionName: Vec<u16>;1358      readonly collectionDescription: Vec<u16>;1359      readonly tokenPrefix: Bytes;1360      readonly mode: UpDataStructsCollectionMode;1361    } & Struct;1362    readonly isCreateCollectionEx: boolean;1363    readonly asCreateCollectionEx: {1364      readonly data: UpDataStructsCreateCollectionData;1365    } & Struct;1366    readonly isDestroyCollection: boolean;1367    readonly asDestroyCollection: {1368      readonly collectionId: u32;1369    } & Struct;1370    readonly isAddToAllowList: boolean;1371    readonly asAddToAllowList: {1372      readonly collectionId: u32;1373      readonly address: PalletEvmAccountBasicCrossAccountIdRepr;1374    } & Struct;1375    readonly isRemoveFromAllowList: boolean;1376    readonly asRemoveFromAllowList: {1377      readonly collectionId: u32;1378      readonly address: PalletEvmAccountBasicCrossAccountIdRepr;1379    } & Struct;1380    readonly isChangeCollectionOwner: boolean;1381    readonly asChangeCollectionOwner: {1382      readonly collectionId: u32;1383      readonly newOwner: AccountId32;1384    } & Struct;1385    readonly isAddCollectionAdmin: boolean;1386    readonly asAddCollectionAdmin: {1387      readonly collectionId: u32;1388      readonly newAdminId: PalletEvmAccountBasicCrossAccountIdRepr;1389    } & Struct;1390    readonly isRemoveCollectionAdmin: boolean;1391    readonly asRemoveCollectionAdmin: {1392      readonly collectionId: u32;1393      readonly accountId: PalletEvmAccountBasicCrossAccountIdRepr;1394    } & Struct;1395    readonly isSetCollectionSponsor: boolean;1396    readonly asSetCollectionSponsor: {1397      readonly collectionId: u32;1398      readonly newSponsor: AccountId32;1399    } & Struct;1400    readonly isConfirmSponsorship: boolean;1401    readonly asConfirmSponsorship: {1402      readonly collectionId: u32;1403    } & Struct;1404    readonly isRemoveCollectionSponsor: boolean;1405    readonly asRemoveCollectionSponsor: {1406      readonly collectionId: u32;1407    } & Struct;1408    readonly isCreateItem: boolean;1409    readonly asCreateItem: {1410      readonly collectionId: u32;1411      readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1412      readonly data: UpDataStructsCreateItemData;1413    } & Struct;1414    readonly isCreateMultipleItems: boolean;1415    readonly asCreateMultipleItems: {1416      readonly collectionId: u32;1417      readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1418      readonly itemsData: Vec<UpDataStructsCreateItemData>;1419    } & Struct;1420    readonly isSetCollectionProperties: boolean;1421    readonly asSetCollectionProperties: {1422      readonly collectionId: u32;1423      readonly properties: Vec<UpDataStructsProperty>;1424    } & Struct;1425    readonly isDeleteCollectionProperties: boolean;1426    readonly asDeleteCollectionProperties: {1427      readonly collectionId: u32;1428      readonly propertyKeys: Vec<Bytes>;1429    } & Struct;1430    readonly isSetTokenProperties: boolean;1431    readonly asSetTokenProperties: {1432      readonly collectionId: u32;1433      readonly tokenId: u32;1434      readonly properties: Vec<UpDataStructsProperty>;1435    } & Struct;1436    readonly isDeleteTokenProperties: boolean;1437    readonly asDeleteTokenProperties: {1438      readonly collectionId: u32;1439      readonly tokenId: u32;1440      readonly propertyKeys: Vec<Bytes>;1441    } & Struct;1442    readonly isSetTokenPropertyPermissions: boolean;1443    readonly asSetTokenPropertyPermissions: {1444      readonly collectionId: u32;1445      readonly propertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;1446    } & Struct;1447    readonly isCreateMultipleItemsEx: boolean;1448    readonly asCreateMultipleItemsEx: {1449      readonly collectionId: u32;1450      readonly data: UpDataStructsCreateItemExData;1451    } & Struct;1452    readonly isSetTransfersEnabledFlag: boolean;1453    readonly asSetTransfersEnabledFlag: {1454      readonly collectionId: u32;1455      readonly value: bool;1456    } & Struct;1457    readonly isBurnItem: boolean;1458    readonly asBurnItem: {1459      readonly collectionId: u32;1460      readonly itemId: u32;1461      readonly value: u128;1462    } & Struct;1463    readonly isBurnFrom: boolean;1464    readonly asBurnFrom: {1465      readonly collectionId: u32;1466      readonly from: PalletEvmAccountBasicCrossAccountIdRepr;1467      readonly itemId: u32;1468      readonly value: u128;1469    } & Struct;1470    readonly isTransfer: boolean;1471    readonly asTransfer: {1472      readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr;1473      readonly collectionId: u32;1474      readonly itemId: u32;1475      readonly value: u128;1476    } & Struct;1477    readonly isApprove: boolean;1478    readonly asApprove: {1479      readonly spender: PalletEvmAccountBasicCrossAccountIdRepr;1480      readonly collectionId: u32;1481      readonly itemId: u32;1482      readonly amount: u128;1483    } & Struct;1484    readonly isTransferFrom: boolean;1485    readonly asTransferFrom: {1486      readonly from: PalletEvmAccountBasicCrossAccountIdRepr;1487      readonly recipient: PalletEvmAccountBasicCrossAccountIdRepr;1488      readonly collectionId: u32;1489      readonly itemId: u32;1490      readonly value: u128;1491    } & Struct;1492    readonly isSetCollectionLimits: boolean;1493    readonly asSetCollectionLimits: {1494      readonly collectionId: u32;1495      readonly newLimit: UpDataStructsCollectionLimits;1496    } & Struct;1497    readonly isSetCollectionPermissions: boolean;1498    readonly asSetCollectionPermissions: {1499      readonly collectionId: u32;1500      readonly newLimit: UpDataStructsCollectionPermissions;1501    } & Struct;1502    readonly isRepartition: boolean;1503    readonly asRepartition: {1504      readonly collectionId: u32;1505      readonly token: u32;1506      readonly amount: u128;1507    } & Struct;1508    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';1509  }15101511  /** @name UpDataStructsCollectionMode (154) */1512  export interface UpDataStructsCollectionMode extends Enum {1513    readonly isNft: boolean;1514    readonly isFungible: boolean;1515    readonly asFungible: u8;1516    readonly isReFungible: boolean;1517    readonly type: 'Nft' | 'Fungible' | 'ReFungible';1518  }15191520  /** @name UpDataStructsCreateCollectionData (155) */1521  export interface UpDataStructsCreateCollectionData extends Struct {1522    readonly mode: UpDataStructsCollectionMode;1523    readonly access: Option<UpDataStructsAccessMode>;1524    readonly name: Vec<u16>;1525    readonly description: Vec<u16>;1526    readonly tokenPrefix: Bytes;1527    readonly pendingSponsor: Option<AccountId32>;1528    readonly limits: Option<UpDataStructsCollectionLimits>;1529    readonly permissions: Option<UpDataStructsCollectionPermissions>;1530    readonly tokenPropertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;1531    readonly properties: Vec<UpDataStructsProperty>;1532  }15331534  /** @name UpDataStructsAccessMode (157) */1535  export interface UpDataStructsAccessMode extends Enum {1536    readonly isNormal: boolean;1537    readonly isAllowList: boolean;1538    readonly type: 'Normal' | 'AllowList';1539  }15401541  /** @name UpDataStructsCollectionLimits (160) */1542  export interface UpDataStructsCollectionLimits extends Struct {1543    readonly accountTokenOwnershipLimit: Option<u32>;1544    readonly sponsoredDataSize: Option<u32>;1545    readonly sponsoredDataRateLimit: Option<UpDataStructsSponsoringRateLimit>;1546    readonly tokenLimit: Option<u32>;1547    readonly sponsorTransferTimeout: Option<u32>;1548    readonly sponsorApproveTimeout: Option<u32>;1549    readonly ownerCanTransfer: Option<bool>;1550    readonly ownerCanDestroy: Option<bool>;1551    readonly transfersEnabled: Option<bool>;1552  }15531554  /** @name UpDataStructsSponsoringRateLimit (162) */1555  export interface UpDataStructsSponsoringRateLimit extends Enum {1556    readonly isSponsoringDisabled: boolean;1557    readonly isBlocks: boolean;1558    readonly asBlocks: u32;1559    readonly type: 'SponsoringDisabled' | 'Blocks';1560  }15611562  /** @name UpDataStructsCollectionPermissions (165) */1563  export interface UpDataStructsCollectionPermissions extends Struct {1564    readonly access: Option<UpDataStructsAccessMode>;1565    readonly mintMode: Option<bool>;1566    readonly nesting: Option<UpDataStructsNestingPermissions>;1567  }15681569  /** @name UpDataStructsNestingPermissions (167) */1570  export interface UpDataStructsNestingPermissions extends Struct {1571    readonly tokenOwner: bool;1572    readonly collectionAdmin: bool;1573    readonly restricted: Option<UpDataStructsOwnerRestrictedSet>;1574  }15751576  /** @name UpDataStructsOwnerRestrictedSet (169) */1577  export interface UpDataStructsOwnerRestrictedSet extends BTreeSet<u32> {}15781579  /** @name UpDataStructsPropertyKeyPermission (175) */1580  export interface UpDataStructsPropertyKeyPermission extends Struct {1581    readonly key: Bytes;1582    readonly permission: UpDataStructsPropertyPermission;1583  }15841585  /** @name UpDataStructsPropertyPermission (177) */1586  export interface UpDataStructsPropertyPermission extends Struct {1587    readonly mutable: bool;1588    readonly collectionAdmin: bool;1589    readonly tokenOwner: bool;1590  }15911592  /** @name UpDataStructsProperty (180) */1593  export interface UpDataStructsProperty extends Struct {1594    readonly key: Bytes;1595    readonly value: Bytes;1596  }15971598  /** @name PalletEvmAccountBasicCrossAccountIdRepr (183) */1599  export interface PalletEvmAccountBasicCrossAccountIdRepr extends Enum {1600    readonly isSubstrate: boolean;1601    readonly asSubstrate: AccountId32;1602    readonly isEthereum: boolean;1603    readonly asEthereum: H160;1604    readonly type: 'Substrate' | 'Ethereum';1605  }16061607  /** @name UpDataStructsCreateItemData (185) */1608  export interface UpDataStructsCreateItemData extends Enum {1609    readonly isNft: boolean;1610    readonly asNft: UpDataStructsCreateNftData;1611    readonly isFungible: boolean;1612    readonly asFungible: UpDataStructsCreateFungibleData;1613    readonly isReFungible: boolean;1614    readonly asReFungible: UpDataStructsCreateReFungibleData;1615    readonly type: 'Nft' | 'Fungible' | 'ReFungible';1616  }16171618  /** @name UpDataStructsCreateNftData (186) */1619  export interface UpDataStructsCreateNftData extends Struct {1620    readonly properties: Vec<UpDataStructsProperty>;1621  }16221623  /** @name UpDataStructsCreateFungibleData (187) */1624  export interface UpDataStructsCreateFungibleData extends Struct {1625    readonly value: u128;1626  }16271628  /** @name UpDataStructsCreateReFungibleData (188) */1629  export interface UpDataStructsCreateReFungibleData extends Struct {1630    readonly constData: Bytes;1631    readonly pieces: u128;1632  }16331634  /** @name UpDataStructsCreateItemExData (193) */1635  export interface UpDataStructsCreateItemExData extends Enum {1636    readonly isNft: boolean;1637    readonly asNft: Vec<UpDataStructsCreateNftExData>;1638    readonly isFungible: boolean;1639    readonly asFungible: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;1640    readonly isRefungibleMultipleItems: boolean;1641    readonly asRefungibleMultipleItems: Vec<UpDataStructsCreateRefungibleExData>;1642    readonly isRefungibleMultipleOwners: boolean;1643    readonly asRefungibleMultipleOwners: UpDataStructsCreateRefungibleExData;1644    readonly type: 'Nft' | 'Fungible' | 'RefungibleMultipleItems' | 'RefungibleMultipleOwners';1645  }16461647  /** @name UpDataStructsCreateNftExData (195) */1648  export interface UpDataStructsCreateNftExData extends Struct {1649    readonly properties: Vec<UpDataStructsProperty>;1650    readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;1651  }16521653  /** @name UpDataStructsCreateRefungibleExData (202) */1654  export interface UpDataStructsCreateRefungibleExData extends Struct {1655    readonly constData: Bytes;1656    readonly users: BTreeMap<PalletEvmAccountBasicCrossAccountIdRepr, u128>;1657  }16581659  /** @name PalletUniqueSchedulerCall (204) */1660  export interface PalletUniqueSchedulerCall extends Enum {1661    readonly isScheduleNamed: boolean;1662    readonly asScheduleNamed: {1663      readonly id: U8aFixed;1664      readonly when: u32;1665      readonly maybePeriodic: Option<ITuple<[u32, u32]>>;1666      readonly priority: u8;1667      readonly call: FrameSupportScheduleMaybeHashed;1668    } & Struct;1669    readonly isCancelNamed: boolean;1670    readonly asCancelNamed: {1671      readonly id: U8aFixed;1672    } & Struct;1673    readonly isScheduleNamedAfter: boolean;1674    readonly asScheduleNamedAfter: {1675      readonly id: U8aFixed;1676      readonly after: u32;1677      readonly maybePeriodic: Option<ITuple<[u32, u32]>>;1678      readonly priority: u8;1679      readonly call: FrameSupportScheduleMaybeHashed;1680    } & Struct;1681    readonly type: 'ScheduleNamed' | 'CancelNamed' | 'ScheduleNamedAfter';1682  }16831684  /** @name FrameSupportScheduleMaybeHashed (206) */1685  export interface FrameSupportScheduleMaybeHashed extends Enum {1686    readonly isValue: boolean;1687    readonly asValue: Call;1688    readonly isHash: boolean;1689    readonly asHash: H256;1690    readonly type: 'Value' | 'Hash';1691  }16921693  /** @name PalletTemplateTransactionPaymentCall (207) */1694  export type PalletTemplateTransactionPaymentCall = Null;16951696  /** @name PalletStructureCall (208) */1697  export type PalletStructureCall = Null;16981699  /** @name PalletRmrkCoreCall (209) */1700  export interface PalletRmrkCoreCall extends Enum {1701    readonly isCreateCollection: boolean;1702    readonly asCreateCollection: {1703      readonly metadata: Bytes;1704      readonly max: Option<u32>;1705      readonly symbol: Bytes;1706    } & Struct;1707    readonly isDestroyCollection: boolean;1708    readonly asDestroyCollection: {1709      readonly collectionId: u32;1710    } & Struct;1711    readonly isChangeCollectionIssuer: boolean;1712    readonly asChangeCollectionIssuer: {1713      readonly collectionId: u32;1714      readonly newIssuer: MultiAddress;1715    } & Struct;1716    readonly isLockCollection: boolean;1717    readonly asLockCollection: {1718      readonly collectionId: u32;1719    } & Struct;1720    readonly isMintNft: boolean;1721    readonly asMintNft: {1722      readonly owner: Option<AccountId32>;1723      readonly collectionId: u32;1724      readonly recipient: Option<AccountId32>;1725      readonly royaltyAmount: Option<Permill>;1726      readonly metadata: Bytes;1727      readonly transferable: bool;1728      readonly resources: Option<Vec<RmrkTraitsResourceResourceTypes>>;1729    } & Struct;1730    readonly isBurnNft: boolean;1731    readonly asBurnNft: {1732      readonly collectionId: u32;1733      readonly nftId: u32;1734      readonly maxBurns: u32;1735    } & Struct;1736    readonly isSend: boolean;1737    readonly asSend: {1738      readonly rmrkCollectionId: u32;1739      readonly rmrkNftId: u32;1740      readonly newOwner: RmrkTraitsNftAccountIdOrCollectionNftTuple;1741    } & Struct;1742    readonly isAcceptNft: boolean;1743    readonly asAcceptNft: {1744      readonly rmrkCollectionId: u32;1745      readonly rmrkNftId: u32;1746      readonly newOwner: RmrkTraitsNftAccountIdOrCollectionNftTuple;1747    } & Struct;1748    readonly isRejectNft: boolean;1749    readonly asRejectNft: {1750      readonly rmrkCollectionId: u32;1751      readonly rmrkNftId: u32;1752    } & Struct;1753    readonly isAcceptResource: boolean;1754    readonly asAcceptResource: {1755      readonly rmrkCollectionId: u32;1756      readonly rmrkNftId: u32;1757      readonly resourceId: u32;1758    } & Struct;1759    readonly isAcceptResourceRemoval: boolean;1760    readonly asAcceptResourceRemoval: {1761      readonly rmrkCollectionId: u32;1762      readonly rmrkNftId: u32;1763      readonly resourceId: u32;1764    } & Struct;1765    readonly isSetProperty: boolean;1766    readonly asSetProperty: {1767      readonly rmrkCollectionId: Compact<u32>;1768      readonly maybeNftId: Option<u32>;1769      readonly key: Bytes;1770      readonly value: Bytes;1771    } & Struct;1772    readonly isSetPriority: boolean;1773    readonly asSetPriority: {1774      readonly rmrkCollectionId: u32;1775      readonly rmrkNftId: u32;1776      readonly priorities: Vec<u32>;1777    } & Struct;1778    readonly isAddBasicResource: boolean;1779    readonly asAddBasicResource: {1780      readonly rmrkCollectionId: u32;1781      readonly nftId: u32;1782      readonly resource: RmrkTraitsResourceBasicResource;1783    } & Struct;1784    readonly isAddComposableResource: boolean;1785    readonly asAddComposableResource: {1786      readonly rmrkCollectionId: u32;1787      readonly nftId: u32;1788      readonly resource: RmrkTraitsResourceComposableResource;1789    } & Struct;1790    readonly isAddSlotResource: boolean;1791    readonly asAddSlotResource: {1792      readonly rmrkCollectionId: u32;1793      readonly nftId: u32;1794      readonly resource: RmrkTraitsResourceSlotResource;1795    } & Struct;1796    readonly isRemoveResource: boolean;1797    readonly asRemoveResource: {1798      readonly rmrkCollectionId: u32;1799      readonly nftId: u32;1800      readonly resourceId: u32;1801    } & Struct;1802    readonly type: 'CreateCollection' | 'DestroyCollection' | 'ChangeCollectionIssuer' | 'LockCollection' | 'MintNft' | 'BurnNft' | 'Send' | 'AcceptNft' | 'RejectNft' | 'AcceptResource' | 'AcceptResourceRemoval' | 'SetProperty' | 'SetPriority' | 'AddBasicResource' | 'AddComposableResource' | 'AddSlotResource' | 'RemoveResource';1803  }18041805  /** @name RmrkTraitsResourceResourceTypes (215) */1806  export interface RmrkTraitsResourceResourceTypes extends Enum {1807    readonly isBasic: boolean;1808    readonly asBasic: RmrkTraitsResourceBasicResource;1809    readonly isComposable: boolean;1810    readonly asComposable: RmrkTraitsResourceComposableResource;1811    readonly isSlot: boolean;1812    readonly asSlot: RmrkTraitsResourceSlotResource;1813    readonly type: 'Basic' | 'Composable' | 'Slot';1814  }18151816  /** @name RmrkTraitsResourceBasicResource (217) */1817  export interface RmrkTraitsResourceBasicResource extends Struct {1818    readonly src: Option<Bytes>;1819    readonly metadata: Option<Bytes>;1820    readonly license: Option<Bytes>;1821    readonly thumb: Option<Bytes>;1822  }18231824  /** @name RmrkTraitsResourceComposableResource (219) */1825  export interface RmrkTraitsResourceComposableResource extends Struct {1826    readonly parts: Vec<u32>;1827    readonly base: u32;1828    readonly src: Option<Bytes>;1829    readonly metadata: Option<Bytes>;1830    readonly license: Option<Bytes>;1831    readonly thumb: Option<Bytes>;1832  }18331834  /** @name RmrkTraitsResourceSlotResource (220) */1835  export interface RmrkTraitsResourceSlotResource extends Struct {1836    readonly base: u32;1837    readonly src: Option<Bytes>;1838    readonly metadata: Option<Bytes>;1839    readonly slot: u32;1840    readonly license: Option<Bytes>;1841    readonly thumb: Option<Bytes>;1842  }18431844  /** @name RmrkTraitsNftAccountIdOrCollectionNftTuple (222) */1845  export interface RmrkTraitsNftAccountIdOrCollectionNftTuple extends Enum {1846    readonly isAccountId: boolean;1847    readonly asAccountId: AccountId32;1848    readonly isCollectionAndNftTuple: boolean;1849    readonly asCollectionAndNftTuple: ITuple<[u32, u32]>;1850    readonly type: 'AccountId' | 'CollectionAndNftTuple';1851  }18521853  /** @name PalletRmrkEquipCall (226) */1854  export interface PalletRmrkEquipCall extends Enum {1855    readonly isCreateBase: boolean;1856    readonly asCreateBase: {1857      readonly baseType: Bytes;1858      readonly symbol: Bytes;1859      readonly parts: Vec<RmrkTraitsPartPartType>;1860    } & Struct;1861    readonly isThemeAdd: boolean;1862    readonly asThemeAdd: {1863      readonly baseId: u32;1864      readonly theme: RmrkTraitsTheme;1865    } & Struct;1866    readonly isEquippable: boolean;1867    readonly asEquippable: {1868      readonly baseId: u32;1869      readonly slotId: u32;1870      readonly equippables: RmrkTraitsPartEquippableList;1871    } & Struct;1872    readonly type: 'CreateBase' | 'ThemeAdd' | 'Equippable';1873  }18741875  /** @name RmrkTraitsPartPartType (229) */1876  export interface RmrkTraitsPartPartType extends Enum {1877    readonly isFixedPart: boolean;1878    readonly asFixedPart: RmrkTraitsPartFixedPart;1879    readonly isSlotPart: boolean;1880    readonly asSlotPart: RmrkTraitsPartSlotPart;1881    readonly type: 'FixedPart' | 'SlotPart';1882  }18831884  /** @name RmrkTraitsPartFixedPart (231) */1885  export interface RmrkTraitsPartFixedPart extends Struct {1886    readonly id: u32;1887    readonly z: u32;1888    readonly src: Bytes;1889  }18901891  /** @name RmrkTraitsPartSlotPart (232) */1892  export interface RmrkTraitsPartSlotPart extends Struct {1893    readonly id: u32;1894    readonly equippable: RmrkTraitsPartEquippableList;1895    readonly src: Bytes;1896    readonly z: u32;1897  }18981899  /** @name RmrkTraitsPartEquippableList (233) */1900  export interface RmrkTraitsPartEquippableList extends Enum {1901    readonly isAll: boolean;1902    readonly isEmpty: boolean;1903    readonly isCustom: boolean;1904    readonly asCustom: Vec<u32>;1905    readonly type: 'All' | 'Empty' | 'Custom';1906  }19071908  /** @name RmrkTraitsTheme (235) */1909  export interface RmrkTraitsTheme extends Struct {1910    readonly name: Bytes;1911    readonly properties: Vec<RmrkTraitsThemeThemeProperty>;1912    readonly inherit: bool;1913  }19141915  /** @name RmrkTraitsThemeThemeProperty (237) */1916  export interface RmrkTraitsThemeThemeProperty extends Struct {1917    readonly key: Bytes;1918    readonly value: Bytes;1919  }19201921  /** @name PalletEvmCall (239) */1922  export interface PalletEvmCall extends Enum {1923    readonly isWithdraw: boolean;1924    readonly asWithdraw: {1925      readonly address: H160;1926      readonly value: u128;1927    } & Struct;1928    readonly isCall: boolean;1929    readonly asCall: {1930      readonly source: H160;1931      readonly target: H160;1932      readonly input: Bytes;1933      readonly value: U256;1934      readonly gasLimit: u64;1935      readonly maxFeePerGas: U256;1936      readonly maxPriorityFeePerGas: Option<U256>;1937      readonly nonce: Option<U256>;1938      readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1939    } & Struct;1940    readonly isCreate: boolean;1941    readonly asCreate: {1942      readonly source: H160;1943      readonly init: Bytes;1944      readonly value: U256;1945      readonly gasLimit: u64;1946      readonly maxFeePerGas: U256;1947      readonly maxPriorityFeePerGas: Option<U256>;1948      readonly nonce: Option<U256>;1949      readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1950    } & Struct;1951    readonly isCreate2: boolean;1952    readonly asCreate2: {1953      readonly source: H160;1954      readonly init: Bytes;1955      readonly salt: H256;1956      readonly value: U256;1957      readonly gasLimit: u64;1958      readonly maxFeePerGas: U256;1959      readonly maxPriorityFeePerGas: Option<U256>;1960      readonly nonce: Option<U256>;1961      readonly accessList: Vec<ITuple<[H160, Vec<H256>]>>;1962    } & Struct;1963    readonly type: 'Withdraw' | 'Call' | 'Create' | 'Create2';1964  }19651966  /** @name PalletEthereumCall (245) */1967  export interface PalletEthereumCall extends Enum {1968    readonly isTransact: boolean;1969    readonly asTransact: {1970      readonly transaction: EthereumTransactionTransactionV2;1971    } & Struct;1972    readonly type: 'Transact';1973  }19741975  /** @name EthereumTransactionTransactionV2 (246) */1976  export interface EthereumTransactionTransactionV2 extends Enum {1977    readonly isLegacy: boolean;1978    readonly asLegacy: EthereumTransactionLegacyTransaction;1979    readonly isEip2930: boolean;1980    readonly asEip2930: EthereumTransactionEip2930Transaction;1981    readonly isEip1559: boolean;1982    readonly asEip1559: EthereumTransactionEip1559Transaction;1983    readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';1984  }19851986  /** @name EthereumTransactionLegacyTransaction (247) */1987  export interface EthereumTransactionLegacyTransaction extends Struct {1988    readonly nonce: U256;1989    readonly gasPrice: U256;1990    readonly gasLimit: U256;1991    readonly action: EthereumTransactionTransactionAction;1992    readonly value: U256;1993    readonly input: Bytes;1994    readonly signature: EthereumTransactionTransactionSignature;1995  }19961997  /** @name EthereumTransactionTransactionAction (248) */1998  export interface EthereumTransactionTransactionAction extends Enum {1999    readonly isCall: boolean;2000    readonly asCall: H160;2001    readonly isCreate: boolean;2002    readonly type: 'Call' | 'Create';2003  }20042005  /** @name EthereumTransactionTransactionSignature (249) */2006  export interface EthereumTransactionTransactionSignature extends Struct {2007    readonly v: u64;2008    readonly r: H256;2009    readonly s: H256;2010  }20112012  /** @name EthereumTransactionEip2930Transaction (251) */2013  export interface EthereumTransactionEip2930Transaction extends Struct {2014    readonly chainId: u64;2015    readonly nonce: U256;2016    readonly gasPrice: U256;2017    readonly gasLimit: U256;2018    readonly action: EthereumTransactionTransactionAction;2019    readonly value: U256;2020    readonly input: Bytes;2021    readonly accessList: Vec<EthereumTransactionAccessListItem>;2022    readonly oddYParity: bool;2023    readonly r: H256;2024    readonly s: H256;2025  }20262027  /** @name EthereumTransactionAccessListItem (253) */2028  export interface EthereumTransactionAccessListItem extends Struct {2029    readonly address: H160;2030    readonly storageKeys: Vec<H256>;2031  }20322033  /** @name EthereumTransactionEip1559Transaction (254) */2034  export interface EthereumTransactionEip1559Transaction extends Struct {2035    readonly chainId: u64;2036    readonly nonce: U256;2037    readonly maxPriorityFeePerGas: U256;2038    readonly maxFeePerGas: U256;2039    readonly gasLimit: U256;2040    readonly action: EthereumTransactionTransactionAction;2041    readonly value: U256;2042    readonly input: Bytes;2043    readonly accessList: Vec<EthereumTransactionAccessListItem>;2044    readonly oddYParity: bool;2045    readonly r: H256;2046    readonly s: H256;2047  }20482049  /** @name PalletEvmMigrationCall (255) */2050  export interface PalletEvmMigrationCall extends Enum {2051    readonly isBegin: boolean;2052    readonly asBegin: {2053      readonly address: H160;2054    } & Struct;2055    readonly isSetData: boolean;2056    readonly asSetData: {2057      readonly address: H160;2058      readonly data: Vec<ITuple<[H256, H256]>>;2059    } & Struct;2060    readonly isFinish: boolean;2061    readonly asFinish: {2062      readonly address: H160;2063      readonly code: Bytes;2064    } & Struct;2065    readonly type: 'Begin' | 'SetData' | 'Finish';2066  }20672068  /** @name PalletSudoEvent (258) */2069  export interface PalletSudoEvent extends Enum {2070    readonly isSudid: boolean;2071    readonly asSudid: {2072      readonly sudoResult: Result<Null, SpRuntimeDispatchError>;2073    } & Struct;2074    readonly isKeyChanged: boolean;2075    readonly asKeyChanged: {2076      readonly oldSudoer: Option<AccountId32>;2077    } & Struct;2078    readonly isSudoAsDone: boolean;2079    readonly asSudoAsDone: {2080      readonly sudoResult: Result<Null, SpRuntimeDispatchError>;2081    } & Struct;2082    readonly type: 'Sudid' | 'KeyChanged' | 'SudoAsDone';2083  }20842085  /** @name SpRuntimeDispatchError (260) */2086  export interface SpRuntimeDispatchError extends Enum {2087    readonly isOther: boolean;2088    readonly isCannotLookup: boolean;2089    readonly isBadOrigin: boolean;2090    readonly isModule: boolean;2091    readonly asModule: SpRuntimeModuleError;2092    readonly isConsumerRemaining: boolean;2093    readonly isNoProviders: boolean;2094    readonly isTooManyConsumers: boolean;2095    readonly isToken: boolean;2096    readonly asToken: SpRuntimeTokenError;2097    readonly isArithmetic: boolean;2098    readonly asArithmetic: SpRuntimeArithmeticError;2099    readonly isTransactional: boolean;2100    readonly asTransactional: SpRuntimeTransactionalError;2101    readonly type: 'Other' | 'CannotLookup' | 'BadOrigin' | 'Module' | 'ConsumerRemaining' | 'NoProviders' | 'TooManyConsumers' | 'Token' | 'Arithmetic' | 'Transactional';2102  }21032104  /** @name SpRuntimeModuleError (261) */2105  export interface SpRuntimeModuleError extends Struct {2106    readonly index: u8;2107    readonly error: U8aFixed;2108  }21092110  /** @name SpRuntimeTokenError (262) */2111  export interface SpRuntimeTokenError extends Enum {2112    readonly isNoFunds: boolean;2113    readonly isWouldDie: boolean;2114    readonly isBelowMinimum: boolean;2115    readonly isCannotCreate: boolean;2116    readonly isUnknownAsset: boolean;2117    readonly isFrozen: boolean;2118    readonly isUnsupported: boolean;2119    readonly type: 'NoFunds' | 'WouldDie' | 'BelowMinimum' | 'CannotCreate' | 'UnknownAsset' | 'Frozen' | 'Unsupported';2120  }21212122  /** @name SpRuntimeArithmeticError (263) */2123  export interface SpRuntimeArithmeticError extends Enum {2124    readonly isUnderflow: boolean;2125    readonly isOverflow: boolean;2126    readonly isDivisionByZero: boolean;2127    readonly type: 'Underflow' | 'Overflow' | 'DivisionByZero';2128  }21292130  /** @name SpRuntimeTransactionalError (264) */2131  export interface SpRuntimeTransactionalError extends Enum {2132    readonly isLimitReached: boolean;2133    readonly isNoLayer: boolean;2134    readonly type: 'LimitReached' | 'NoLayer';2135  }21362137  /** @name PalletSudoError (265) */2138  export interface PalletSudoError extends Enum {2139    readonly isRequireSudo: boolean;2140    readonly type: 'RequireSudo';2141  }21422143  /** @name FrameSystemAccountInfo (266) */2144  export interface FrameSystemAccountInfo extends Struct {2145    readonly nonce: u32;2146    readonly consumers: u32;2147    readonly providers: u32;2148    readonly sufficients: u32;2149    readonly data: PalletBalancesAccountData;2150  }21512152  /** @name FrameSupportWeightsPerDispatchClassU64 (267) */2153  export interface FrameSupportWeightsPerDispatchClassU64 extends Struct {2154    readonly normal: u64;2155    readonly operational: u64;2156    readonly mandatory: u64;2157  }21582159  /** @name SpRuntimeDigest (268) */2160  export interface SpRuntimeDigest extends Struct {2161    readonly logs: Vec<SpRuntimeDigestDigestItem>;2162  }21632164  /** @name SpRuntimeDigestDigestItem (270) */2165  export interface SpRuntimeDigestDigestItem extends Enum {2166    readonly isOther: boolean;2167    readonly asOther: Bytes;2168    readonly isConsensus: boolean;2169    readonly asConsensus: ITuple<[U8aFixed, Bytes]>;2170    readonly isSeal: boolean;2171    readonly asSeal: ITuple<[U8aFixed, Bytes]>;2172    readonly isPreRuntime: boolean;2173    readonly asPreRuntime: ITuple<[U8aFixed, Bytes]>;2174    readonly isRuntimeEnvironmentUpdated: boolean;2175    readonly type: 'Other' | 'Consensus' | 'Seal' | 'PreRuntime' | 'RuntimeEnvironmentUpdated';2176  }21772178  /** @name FrameSystemEventRecord (272) */2179  export interface FrameSystemEventRecord extends Struct {2180    readonly phase: FrameSystemPhase;2181    readonly event: Event;2182    readonly topics: Vec<H256>;2183  }21842185  /** @name FrameSystemEvent (274) */2186  export interface FrameSystemEvent extends Enum {2187    readonly isExtrinsicSuccess: boolean;2188    readonly asExtrinsicSuccess: {2189      readonly dispatchInfo: FrameSupportWeightsDispatchInfo;2190    } & Struct;2191    readonly isExtrinsicFailed: boolean;2192    readonly asExtrinsicFailed: {2193      readonly dispatchError: SpRuntimeDispatchError;2194      readonly dispatchInfo: FrameSupportWeightsDispatchInfo;2195    } & Struct;2196    readonly isCodeUpdated: boolean;2197    readonly isNewAccount: boolean;2198    readonly asNewAccount: {2199      readonly account: AccountId32;2200    } & Struct;2201    readonly isKilledAccount: boolean;2202    readonly asKilledAccount: {2203      readonly account: AccountId32;2204    } & Struct;2205    readonly isRemarked: boolean;2206    readonly asRemarked: {2207      readonly sender: AccountId32;2208      readonly hash_: H256;2209    } & Struct;2210    readonly type: 'ExtrinsicSuccess' | 'ExtrinsicFailed' | 'CodeUpdated' | 'NewAccount' | 'KilledAccount' | 'Remarked';2211  }22122213  /** @name FrameSupportWeightsDispatchInfo (275) */2214  export interface FrameSupportWeightsDispatchInfo extends Struct {2215    readonly weight: u64;2216    readonly class: FrameSupportWeightsDispatchClass;2217    readonly paysFee: FrameSupportWeightsPays;2218  }22192220  /** @name FrameSupportWeightsDispatchClass (276) */2221  export interface FrameSupportWeightsDispatchClass extends Enum {2222    readonly isNormal: boolean;2223    readonly isOperational: boolean;2224    readonly isMandatory: boolean;2225    readonly type: 'Normal' | 'Operational' | 'Mandatory';2226  }22272228  /** @name FrameSupportWeightsPays (277) */2229  export interface FrameSupportWeightsPays extends Enum {2230    readonly isYes: boolean;2231    readonly isNo: boolean;2232    readonly type: 'Yes' | 'No';2233  }22342235  /** @name OrmlVestingModuleEvent (278) */2236  export interface OrmlVestingModuleEvent extends Enum {2237    readonly isVestingScheduleAdded: boolean;2238    readonly asVestingScheduleAdded: {2239      readonly from: AccountId32;2240      readonly to: AccountId32;2241      readonly vestingSchedule: OrmlVestingVestingSchedule;2242    } & Struct;2243    readonly isClaimed: boolean;2244    readonly asClaimed: {2245      readonly who: AccountId32;2246      readonly amount: u128;2247    } & Struct;2248    readonly isVestingSchedulesUpdated: boolean;2249    readonly asVestingSchedulesUpdated: {2250      readonly who: AccountId32;2251    } & Struct;2252    readonly type: 'VestingScheduleAdded' | 'Claimed' | 'VestingSchedulesUpdated';2253  }22542255  /** @name CumulusPalletXcmpQueueEvent (279) */2256  export interface CumulusPalletXcmpQueueEvent extends Enum {2257    readonly isSuccess: boolean;2258    readonly asSuccess: Option<H256>;2259    readonly isFail: boolean;2260    readonly asFail: ITuple<[Option<H256>, XcmV2TraitsError]>;2261    readonly isBadVersion: boolean;2262    readonly asBadVersion: Option<H256>;2263    readonly isBadFormat: boolean;2264    readonly asBadFormat: Option<H256>;2265    readonly isUpwardMessageSent: boolean;2266    readonly asUpwardMessageSent: Option<H256>;2267    readonly isXcmpMessageSent: boolean;2268    readonly asXcmpMessageSent: Option<H256>;2269    readonly isOverweightEnqueued: boolean;2270    readonly asOverweightEnqueued: ITuple<[u32, u32, u64, u64]>;2271    readonly isOverweightServiced: boolean;2272    readonly asOverweightServiced: ITuple<[u64, u64]>;2273    readonly type: 'Success' | 'Fail' | 'BadVersion' | 'BadFormat' | 'UpwardMessageSent' | 'XcmpMessageSent' | 'OverweightEnqueued' | 'OverweightServiced';2274  }22752276  /** @name PalletXcmEvent (280) */2277  export interface PalletXcmEvent extends Enum {2278    readonly isAttempted: boolean;2279    readonly asAttempted: XcmV2TraitsOutcome;2280    readonly isSent: boolean;2281    readonly asSent: ITuple<[XcmV1MultiLocation, XcmV1MultiLocation, XcmV2Xcm]>;2282    readonly isUnexpectedResponse: boolean;2283    readonly asUnexpectedResponse: ITuple<[XcmV1MultiLocation, u64]>;2284    readonly isResponseReady: boolean;2285    readonly asResponseReady: ITuple<[u64, XcmV2Response]>;2286    readonly isNotified: boolean;2287    readonly asNotified: ITuple<[u64, u8, u8]>;2288    readonly isNotifyOverweight: boolean;2289    readonly asNotifyOverweight: ITuple<[u64, u8, u8, u64, u64]>;2290    readonly isNotifyDispatchError: boolean;2291    readonly asNotifyDispatchError: ITuple<[u64, u8, u8]>;2292    readonly isNotifyDecodeFailed: boolean;2293    readonly asNotifyDecodeFailed: ITuple<[u64, u8, u8]>;2294    readonly isInvalidResponder: boolean;2295    readonly asInvalidResponder: ITuple<[XcmV1MultiLocation, u64, Option<XcmV1MultiLocation>]>;2296    readonly isInvalidResponderVersion: boolean;2297    readonly asInvalidResponderVersion: ITuple<[XcmV1MultiLocation, u64]>;2298    readonly isResponseTaken: boolean;2299    readonly asResponseTaken: u64;2300    readonly isAssetsTrapped: boolean;2301    readonly asAssetsTrapped: ITuple<[H256, XcmV1MultiLocation, XcmVersionedMultiAssets]>;2302    readonly isVersionChangeNotified: boolean;2303    readonly asVersionChangeNotified: ITuple<[XcmV1MultiLocation, u32]>;2304    readonly isSupportedVersionChanged: boolean;2305    readonly asSupportedVersionChanged: ITuple<[XcmV1MultiLocation, u32]>;2306    readonly isNotifyTargetSendFail: boolean;2307    readonly asNotifyTargetSendFail: ITuple<[XcmV1MultiLocation, u64, XcmV2TraitsError]>;2308    readonly isNotifyTargetMigrationFail: boolean;2309    readonly asNotifyTargetMigrationFail: ITuple<[XcmVersionedMultiLocation, u64]>;2310    readonly type: 'Attempted' | 'Sent' | 'UnexpectedResponse' | 'ResponseReady' | 'Notified' | 'NotifyOverweight' | 'NotifyDispatchError' | 'NotifyDecodeFailed' | 'InvalidResponder' | 'InvalidResponderVersion' | 'ResponseTaken' | 'AssetsTrapped' | 'VersionChangeNotified' | 'SupportedVersionChanged' | 'NotifyTargetSendFail' | 'NotifyTargetMigrationFail';2311  }23122313  /** @name XcmV2TraitsOutcome (281) */2314  export interface XcmV2TraitsOutcome extends Enum {2315    readonly isComplete: boolean;2316    readonly asComplete: u64;2317    readonly isIncomplete: boolean;2318    readonly asIncomplete: ITuple<[u64, XcmV2TraitsError]>;2319    readonly isError: boolean;2320    readonly asError: XcmV2TraitsError;2321    readonly type: 'Complete' | 'Incomplete' | 'Error';2322  }23232324  /** @name CumulusPalletXcmEvent (283) */2325  export interface CumulusPalletXcmEvent extends Enum {2326    readonly isInvalidFormat: boolean;2327    readonly asInvalidFormat: U8aFixed;2328    readonly isUnsupportedVersion: boolean;2329    readonly asUnsupportedVersion: U8aFixed;2330    readonly isExecutedDownward: boolean;2331    readonly asExecutedDownward: ITuple<[U8aFixed, XcmV2TraitsOutcome]>;2332    readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward';2333  }23342335  /** @name CumulusPalletDmpQueueEvent (284) */2336  export interface CumulusPalletDmpQueueEvent extends Enum {2337    readonly isInvalidFormat: boolean;2338    readonly asInvalidFormat: {2339      readonly messageId: U8aFixed;2340    } & Struct;2341    readonly isUnsupportedVersion: boolean;2342    readonly asUnsupportedVersion: {2343      readonly messageId: U8aFixed;2344    } & Struct;2345    readonly isExecutedDownward: boolean;2346    readonly asExecutedDownward: {2347      readonly messageId: U8aFixed;2348      readonly outcome: XcmV2TraitsOutcome;2349    } & Struct;2350    readonly isWeightExhausted: boolean;2351    readonly asWeightExhausted: {2352      readonly messageId: U8aFixed;2353      readonly remainingWeight: u64;2354      readonly requiredWeight: u64;2355    } & Struct;2356    readonly isOverweightEnqueued: boolean;2357    readonly asOverweightEnqueued: {2358      readonly messageId: U8aFixed;2359      readonly overweightIndex: u64;2360      readonly requiredWeight: u64;2361    } & Struct;2362    readonly isOverweightServiced: boolean;2363    readonly asOverweightServiced: {2364      readonly overweightIndex: u64;2365      readonly weightUsed: u64;2366    } & Struct;2367    readonly type: 'InvalidFormat' | 'UnsupportedVersion' | 'ExecutedDownward' | 'WeightExhausted' | 'OverweightEnqueued' | 'OverweightServiced';2368  }23692370  /** @name PalletUniqueRawEvent (285) */2371  export interface PalletUniqueRawEvent extends Enum {2372    readonly isCollectionSponsorRemoved: boolean;2373    readonly asCollectionSponsorRemoved: u32;2374    readonly isCollectionAdminAdded: boolean;2375    readonly asCollectionAdminAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2376    readonly isCollectionOwnedChanged: boolean;2377    readonly asCollectionOwnedChanged: ITuple<[u32, AccountId32]>;2378    readonly isCollectionSponsorSet: boolean;2379    readonly asCollectionSponsorSet: ITuple<[u32, AccountId32]>;2380    readonly isSponsorshipConfirmed: boolean;2381    readonly asSponsorshipConfirmed: ITuple<[u32, AccountId32]>;2382    readonly isCollectionAdminRemoved: boolean;2383    readonly asCollectionAdminRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2384    readonly isAllowListAddressRemoved: boolean;2385    readonly asAllowListAddressRemoved: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2386    readonly isAllowListAddressAdded: boolean;2387    readonly asAllowListAddressAdded: ITuple<[u32, PalletEvmAccountBasicCrossAccountIdRepr]>;2388    readonly isCollectionLimitSet: boolean;2389    readonly asCollectionLimitSet: u32;2390    readonly isCollectionPermissionSet: boolean;2391    readonly asCollectionPermissionSet: u32;2392    readonly type: 'CollectionSponsorRemoved' | 'CollectionAdminAdded' | 'CollectionOwnedChanged' | 'CollectionSponsorSet' | 'SponsorshipConfirmed' | 'CollectionAdminRemoved' | 'AllowListAddressRemoved' | 'AllowListAddressAdded' | 'CollectionLimitSet' | 'CollectionPermissionSet';2393  }23942395  /** @name PalletUniqueSchedulerEvent (286) */2396  export interface PalletUniqueSchedulerEvent extends Enum {2397    readonly isScheduled: boolean;2398    readonly asScheduled: {2399      readonly when: u32;2400      readonly index: u32;2401    } & Struct;2402    readonly isCanceled: boolean;2403    readonly asCanceled: {2404      readonly when: u32;2405      readonly index: u32;2406    } & Struct;2407    readonly isDispatched: boolean;2408    readonly asDispatched: {2409      readonly task: ITuple<[u32, u32]>;2410      readonly id: Option<U8aFixed>;2411      readonly result: Result<Null, SpRuntimeDispatchError>;2412    } & Struct;2413    readonly isCallLookupFailed: boolean;2414    readonly asCallLookupFailed: {2415      readonly task: ITuple<[u32, u32]>;2416      readonly id: Option<U8aFixed>;2417      readonly error: FrameSupportScheduleLookupError;2418    } & Struct;2419    readonly type: 'Scheduled' | 'Canceled' | 'Dispatched' | 'CallLookupFailed';2420  }24212422  /** @name FrameSupportScheduleLookupError (288) */2423  export interface FrameSupportScheduleLookupError extends Enum {2424    readonly isUnknown: boolean;2425    readonly isBadFormat: boolean;2426    readonly type: 'Unknown' | 'BadFormat';2427  }24282429  /** @name PalletCommonEvent (289) */2430  export interface PalletCommonEvent extends Enum {2431    readonly isCollectionCreated: boolean;2432    readonly asCollectionCreated: ITuple<[u32, u8, AccountId32]>;2433    readonly isCollectionDestroyed: boolean;2434    readonly asCollectionDestroyed: u32;2435    readonly isItemCreated: boolean;2436    readonly asItemCreated: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2437    readonly isItemDestroyed: boolean;2438    readonly asItemDestroyed: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2439    readonly isTransfer: boolean;2440    readonly asTransfer: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2441    readonly isApproved: boolean;2442    readonly asApproved: ITuple<[u32, u32, PalletEvmAccountBasicCrossAccountIdRepr, PalletEvmAccountBasicCrossAccountIdRepr, u128]>;2443    readonly isCollectionPropertySet: boolean;2444    readonly asCollectionPropertySet: ITuple<[u32, Bytes]>;2445    readonly isCollectionPropertyDeleted: boolean;2446    readonly asCollectionPropertyDeleted: ITuple<[u32, Bytes]>;2447    readonly isTokenPropertySet: boolean;2448    readonly asTokenPropertySet: ITuple<[u32, u32, Bytes]>;2449    readonly isTokenPropertyDeleted: boolean;2450    readonly asTokenPropertyDeleted: ITuple<[u32, u32, Bytes]>;2451    readonly isPropertyPermissionSet: boolean;2452    readonly asPropertyPermissionSet: ITuple<[u32, Bytes]>;2453    readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'ItemCreated' | 'ItemDestroyed' | 'Transfer' | 'Approved' | 'CollectionPropertySet' | 'CollectionPropertyDeleted' | 'TokenPropertySet' | 'TokenPropertyDeleted' | 'PropertyPermissionSet';2454  }24552456  /** @name PalletStructureEvent (290) */2457  export interface PalletStructureEvent extends Enum {2458    readonly isExecuted: boolean;2459    readonly asExecuted: Result<Null, SpRuntimeDispatchError>;2460    readonly type: 'Executed';2461  }24622463  /** @name PalletRmrkCoreEvent (291) */2464  export interface PalletRmrkCoreEvent extends Enum {2465    readonly isCollectionCreated: boolean;2466    readonly asCollectionCreated: {2467      readonly issuer: AccountId32;2468      readonly collectionId: u32;2469    } & Struct;2470    readonly isCollectionDestroyed: boolean;2471    readonly asCollectionDestroyed: {2472      readonly issuer: AccountId32;2473      readonly collectionId: u32;2474    } & Struct;2475    readonly isIssuerChanged: boolean;2476    readonly asIssuerChanged: {2477      readonly oldIssuer: AccountId32;2478      readonly newIssuer: AccountId32;2479      readonly collectionId: u32;2480    } & Struct;2481    readonly isCollectionLocked: boolean;2482    readonly asCollectionLocked: {2483      readonly issuer: AccountId32;2484      readonly collectionId: u32;2485    } & Struct;2486    readonly isNftMinted: boolean;2487    readonly asNftMinted: {2488      readonly owner: AccountId32;2489      readonly collectionId: u32;2490      readonly nftId: u32;2491    } & Struct;2492    readonly isNftBurned: boolean;2493    readonly asNftBurned: {2494      readonly owner: AccountId32;2495      readonly nftId: u32;2496    } & Struct;2497    readonly isNftSent: boolean;2498    readonly asNftSent: {2499      readonly sender: AccountId32;2500      readonly recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple;2501      readonly collectionId: u32;2502      readonly nftId: u32;2503      readonly approvalRequired: bool;2504    } & Struct;2505    readonly isNftAccepted: boolean;2506    readonly asNftAccepted: {2507      readonly sender: AccountId32;2508      readonly recipient: RmrkTraitsNftAccountIdOrCollectionNftTuple;2509      readonly collectionId: u32;2510      readonly nftId: u32;2511    } & Struct;2512    readonly isNftRejected: boolean;2513    readonly asNftRejected: {2514      readonly sender: AccountId32;2515      readonly collectionId: u32;2516      readonly nftId: u32;2517    } & Struct;2518    readonly isPropertySet: boolean;2519    readonly asPropertySet: {2520      readonly collectionId: u32;2521      readonly maybeNftId: Option<u32>;2522      readonly key: Bytes;2523      readonly value: Bytes;2524    } & Struct;2525    readonly isResourceAdded: boolean;2526    readonly asResourceAdded: {2527      readonly nftId: u32;2528      readonly resourceId: u32;2529    } & Struct;2530    readonly isResourceRemoval: boolean;2531    readonly asResourceRemoval: {2532      readonly nftId: u32;2533      readonly resourceId: u32;2534    } & Struct;2535    readonly isResourceAccepted: boolean;2536    readonly asResourceAccepted: {2537      readonly nftId: u32;2538      readonly resourceId: u32;2539    } & Struct;2540    readonly isResourceRemovalAccepted: boolean;2541    readonly asResourceRemovalAccepted: {2542      readonly nftId: u32;2543      readonly resourceId: u32;2544    } & Struct;2545    readonly isPrioritySet: boolean;2546    readonly asPrioritySet: {2547      readonly collectionId: u32;2548      readonly nftId: u32;2549    } & Struct;2550    readonly type: 'CollectionCreated' | 'CollectionDestroyed' | 'IssuerChanged' | 'CollectionLocked' | 'NftMinted' | 'NftBurned' | 'NftSent' | 'NftAccepted' | 'NftRejected' | 'PropertySet' | 'ResourceAdded' | 'ResourceRemoval' | 'ResourceAccepted' | 'ResourceRemovalAccepted' | 'PrioritySet';2551  }25522553  /** @name PalletRmrkEquipEvent (292) */2554  export interface PalletRmrkEquipEvent extends Enum {2555    readonly isBaseCreated: boolean;2556    readonly asBaseCreated: {2557      readonly issuer: AccountId32;2558      readonly baseId: u32;2559    } & Struct;2560    readonly isEquippablesUpdated: boolean;2561    readonly asEquippablesUpdated: {2562      readonly baseId: u32;2563      readonly slotId: u32;2564    } & Struct;2565    readonly type: 'BaseCreated' | 'EquippablesUpdated';2566  }25672568  /** @name PalletEvmEvent (293) */2569  export interface PalletEvmEvent extends Enum {2570    readonly isLog: boolean;2571    readonly asLog: EthereumLog;2572    readonly isCreated: boolean;2573    readonly asCreated: H160;2574    readonly isCreatedFailed: boolean;2575    readonly asCreatedFailed: H160;2576    readonly isExecuted: boolean;2577    readonly asExecuted: H160;2578    readonly isExecutedFailed: boolean;2579    readonly asExecutedFailed: H160;2580    readonly isBalanceDeposit: boolean;2581    readonly asBalanceDeposit: ITuple<[AccountId32, H160, U256]>;2582    readonly isBalanceWithdraw: boolean;2583    readonly asBalanceWithdraw: ITuple<[AccountId32, H160, U256]>;2584    readonly type: 'Log' | 'Created' | 'CreatedFailed' | 'Executed' | 'ExecutedFailed' | 'BalanceDeposit' | 'BalanceWithdraw';2585  }25862587  /** @name EthereumLog (294) */2588  export interface EthereumLog extends Struct {2589    readonly address: H160;2590    readonly topics: Vec<H256>;2591    readonly data: Bytes;2592  }25932594  /** @name PalletEthereumEvent (295) */2595  export interface PalletEthereumEvent extends Enum {2596    readonly isExecuted: boolean;2597    readonly asExecuted: ITuple<[H160, H160, H256, EvmCoreErrorExitReason]>;2598    readonly type: 'Executed';2599  }26002601  /** @name EvmCoreErrorExitReason (296) */2602  export interface EvmCoreErrorExitReason extends Enum {2603    readonly isSucceed: boolean;2604    readonly asSucceed: EvmCoreErrorExitSucceed;2605    readonly isError: boolean;2606    readonly asError: EvmCoreErrorExitError;2607    readonly isRevert: boolean;2608    readonly asRevert: EvmCoreErrorExitRevert;2609    readonly isFatal: boolean;2610    readonly asFatal: EvmCoreErrorExitFatal;2611    readonly type: 'Succeed' | 'Error' | 'Revert' | 'Fatal';2612  }26132614  /** @name EvmCoreErrorExitSucceed (297) */2615  export interface EvmCoreErrorExitSucceed extends Enum {2616    readonly isStopped: boolean;2617    readonly isReturned: boolean;2618    readonly isSuicided: boolean;2619    readonly type: 'Stopped' | 'Returned' | 'Suicided';2620  }26212622  /** @name EvmCoreErrorExitError (298) */2623  export interface EvmCoreErrorExitError extends Enum {2624    readonly isStackUnderflow: boolean;2625    readonly isStackOverflow: boolean;2626    readonly isInvalidJump: boolean;2627    readonly isInvalidRange: boolean;2628    readonly isDesignatedInvalid: boolean;2629    readonly isCallTooDeep: boolean;2630    readonly isCreateCollision: boolean;2631    readonly isCreateContractLimit: boolean;2632    readonly isOutOfOffset: boolean;2633    readonly isOutOfGas: boolean;2634    readonly isOutOfFund: boolean;2635    readonly isPcUnderflow: boolean;2636    readonly isCreateEmpty: boolean;2637    readonly isOther: boolean;2638    readonly asOther: Text;2639    readonly isInvalidCode: boolean;2640    readonly type: 'StackUnderflow' | 'StackOverflow' | 'InvalidJump' | 'InvalidRange' | 'DesignatedInvalid' | 'CallTooDeep' | 'CreateCollision' | 'CreateContractLimit' | 'OutOfOffset' | 'OutOfGas' | 'OutOfFund' | 'PcUnderflow' | 'CreateEmpty' | 'Other' | 'InvalidCode';2641  }26422643  /** @name EvmCoreErrorExitRevert (301) */2644  export interface EvmCoreErrorExitRevert extends Enum {2645    readonly isReverted: boolean;2646    readonly type: 'Reverted';2647  }26482649  /** @name EvmCoreErrorExitFatal (302) */2650  export interface EvmCoreErrorExitFatal extends Enum {2651    readonly isNotSupported: boolean;2652    readonly isUnhandledInterrupt: boolean;2653    readonly isCallErrorAsFatal: boolean;2654    readonly asCallErrorAsFatal: EvmCoreErrorExitError;2655    readonly isOther: boolean;2656    readonly asOther: Text;2657    readonly type: 'NotSupported' | 'UnhandledInterrupt' | 'CallErrorAsFatal' | 'Other';2658  }26592660  /** @name FrameSystemPhase (303) */2661  export interface FrameSystemPhase extends Enum {2662    readonly isApplyExtrinsic: boolean;2663    readonly asApplyExtrinsic: u32;2664    readonly isFinalization: boolean;2665    readonly isInitialization: boolean;2666    readonly type: 'ApplyExtrinsic' | 'Finalization' | 'Initialization';2667  }26682669  /** @name FrameSystemLastRuntimeUpgradeInfo (305) */2670  export interface FrameSystemLastRuntimeUpgradeInfo extends Struct {2671    readonly specVersion: Compact<u32>;2672    readonly specName: Text;2673  }26742675  /** @name FrameSystemLimitsBlockWeights (306) */2676  export interface FrameSystemLimitsBlockWeights extends Struct {2677    readonly baseBlock: u64;2678    readonly maxBlock: u64;2679    readonly perClass: FrameSupportWeightsPerDispatchClassWeightsPerClass;2680  }26812682  /** @name FrameSupportWeightsPerDispatchClassWeightsPerClass (307) */2683  export interface FrameSupportWeightsPerDispatchClassWeightsPerClass extends Struct {2684    readonly normal: FrameSystemLimitsWeightsPerClass;2685    readonly operational: FrameSystemLimitsWeightsPerClass;2686    readonly mandatory: FrameSystemLimitsWeightsPerClass;2687  }26882689  /** @name FrameSystemLimitsWeightsPerClass (308) */2690  export interface FrameSystemLimitsWeightsPerClass extends Struct {2691    readonly baseExtrinsic: u64;2692    readonly maxExtrinsic: Option<u64>;2693    readonly maxTotal: Option<u64>;2694    readonly reserved: Option<u64>;2695  }26962697  /** @name FrameSystemLimitsBlockLength (310) */2698  export interface FrameSystemLimitsBlockLength extends Struct {2699    readonly max: FrameSupportWeightsPerDispatchClassU32;2700  }27012702  /** @name FrameSupportWeightsPerDispatchClassU32 (311) */2703  export interface FrameSupportWeightsPerDispatchClassU32 extends Struct {2704    readonly normal: u32;2705    readonly operational: u32;2706    readonly mandatory: u32;2707  }27082709  /** @name FrameSupportWeightsRuntimeDbWeight (312) */2710  export interface FrameSupportWeightsRuntimeDbWeight extends Struct {2711    readonly read: u64;2712    readonly write: u64;2713  }27142715  /** @name SpVersionRuntimeVersion (313) */2716  export interface SpVersionRuntimeVersion extends Struct {2717    readonly specName: Text;2718    readonly implName: Text;2719    readonly authoringVersion: u32;2720    readonly specVersion: u32;2721    readonly implVersion: u32;2722    readonly apis: Vec<ITuple<[U8aFixed, u32]>>;2723    readonly transactionVersion: u32;2724    readonly stateVersion: u8;2725  }27262727  /** @name FrameSystemError (317) */2728  export interface FrameSystemError extends Enum {2729    readonly isInvalidSpecName: boolean;2730    readonly isSpecVersionNeedsToIncrease: boolean;2731    readonly isFailedToExtractRuntimeVersion: boolean;2732    readonly isNonDefaultComposite: boolean;2733    readonly isNonZeroRefCount: boolean;2734    readonly isCallFiltered: boolean;2735    readonly type: 'InvalidSpecName' | 'SpecVersionNeedsToIncrease' | 'FailedToExtractRuntimeVersion' | 'NonDefaultComposite' | 'NonZeroRefCount' | 'CallFiltered';2736  }27372738  /** @name OrmlVestingModuleError (319) */2739  export interface OrmlVestingModuleError extends Enum {2740    readonly isZeroVestingPeriod: boolean;2741    readonly isZeroVestingPeriodCount: boolean;2742    readonly isInsufficientBalanceToLock: boolean;2743    readonly isTooManyVestingSchedules: boolean;2744    readonly isAmountLow: boolean;2745    readonly isMaxVestingSchedulesExceeded: boolean;2746    readonly type: 'ZeroVestingPeriod' | 'ZeroVestingPeriodCount' | 'InsufficientBalanceToLock' | 'TooManyVestingSchedules' | 'AmountLow' | 'MaxVestingSchedulesExceeded';2747  }27482749  /** @name CumulusPalletXcmpQueueInboundChannelDetails (321) */2750  export interface CumulusPalletXcmpQueueInboundChannelDetails extends Struct {2751    readonly sender: u32;2752    readonly state: CumulusPalletXcmpQueueInboundState;2753    readonly messageMetadata: Vec<ITuple<[u32, PolkadotParachainPrimitivesXcmpMessageFormat]>>;2754  }27552756  /** @name CumulusPalletXcmpQueueInboundState (322) */2757  export interface CumulusPalletXcmpQueueInboundState extends Enum {2758    readonly isOk: boolean;2759    readonly isSuspended: boolean;2760    readonly type: 'Ok' | 'Suspended';2761  }27622763  /** @name PolkadotParachainPrimitivesXcmpMessageFormat (325) */2764  export interface PolkadotParachainPrimitivesXcmpMessageFormat extends Enum {2765    readonly isConcatenatedVersionedXcm: boolean;2766    readonly isConcatenatedEncodedBlob: boolean;2767    readonly isSignals: boolean;2768    readonly type: 'ConcatenatedVersionedXcm' | 'ConcatenatedEncodedBlob' | 'Signals';2769  }27702771  /** @name CumulusPalletXcmpQueueOutboundChannelDetails (328) */2772  export interface CumulusPalletXcmpQueueOutboundChannelDetails extends Struct {2773    readonly recipient: u32;2774    readonly state: CumulusPalletXcmpQueueOutboundState;2775    readonly signalsExist: bool;2776    readonly firstIndex: u16;2777    readonly lastIndex: u16;2778  }27792780  /** @name CumulusPalletXcmpQueueOutboundState (329) */2781  export interface CumulusPalletXcmpQueueOutboundState extends Enum {2782    readonly isOk: boolean;2783    readonly isSuspended: boolean;2784    readonly type: 'Ok' | 'Suspended';2785  }27862787  /** @name CumulusPalletXcmpQueueQueueConfigData (331) */2788  export interface CumulusPalletXcmpQueueQueueConfigData extends Struct {2789    readonly suspendThreshold: u32;2790    readonly dropThreshold: u32;2791    readonly resumeThreshold: u32;2792    readonly thresholdWeight: u64;2793    readonly weightRestrictDecay: u64;2794    readonly xcmpMaxIndividualWeight: u64;2795  }27962797  /** @name CumulusPalletXcmpQueueError (333) */2798  export interface CumulusPalletXcmpQueueError extends Enum {2799    readonly isFailedToSend: boolean;2800    readonly isBadXcmOrigin: boolean;2801    readonly isBadXcm: boolean;2802    readonly isBadOverweightIndex: boolean;2803    readonly isWeightOverLimit: boolean;2804    readonly type: 'FailedToSend' | 'BadXcmOrigin' | 'BadXcm' | 'BadOverweightIndex' | 'WeightOverLimit';2805  }28062807  /** @name PalletXcmError (334) */2808  export interface PalletXcmError extends Enum {2809    readonly isUnreachable: boolean;2810    readonly isSendFailure: boolean;2811    readonly isFiltered: boolean;2812    readonly isUnweighableMessage: boolean;2813    readonly isDestinationNotInvertible: boolean;2814    readonly isEmpty: boolean;2815    readonly isCannotReanchor: boolean;2816    readonly isTooManyAssets: boolean;2817    readonly isInvalidOrigin: boolean;2818    readonly isBadVersion: boolean;2819    readonly isBadLocation: boolean;2820    readonly isNoSubscription: boolean;2821    readonly isAlreadySubscribed: boolean;2822    readonly type: 'Unreachable' | 'SendFailure' | 'Filtered' | 'UnweighableMessage' | 'DestinationNotInvertible' | 'Empty' | 'CannotReanchor' | 'TooManyAssets' | 'InvalidOrigin' | 'BadVersion' | 'BadLocation' | 'NoSubscription' | 'AlreadySubscribed';2823  }28242825  /** @name CumulusPalletXcmError (335) */2826  export type CumulusPalletXcmError = Null;28272828  /** @name CumulusPalletDmpQueueConfigData (336) */2829  export interface CumulusPalletDmpQueueConfigData extends Struct {2830    readonly maxIndividual: u64;2831  }28322833  /** @name CumulusPalletDmpQueuePageIndexData (337) */2834  export interface CumulusPalletDmpQueuePageIndexData extends Struct {2835    readonly beginUsed: u32;2836    readonly endUsed: u32;2837    readonly overweightCount: u64;2838  }28392840  /** @name CumulusPalletDmpQueueError (340) */2841  export interface CumulusPalletDmpQueueError extends Enum {2842    readonly isUnknown: boolean;2843    readonly isOverLimit: boolean;2844    readonly type: 'Unknown' | 'OverLimit';2845  }28462847  /** @name PalletUniqueError (344) */2848  export interface PalletUniqueError extends Enum {2849    readonly isCollectionDecimalPointLimitExceeded: boolean;2850    readonly isConfirmUnsetSponsorFail: boolean;2851    readonly isEmptyArgument: boolean;2852    readonly isRepartitionCalledOnNonRefungibleCollection: boolean;2853    readonly type: 'CollectionDecimalPointLimitExceeded' | 'ConfirmUnsetSponsorFail' | 'EmptyArgument' | 'RepartitionCalledOnNonRefungibleCollection';2854  }28552856  /** @name PalletUniqueSchedulerScheduledV3 (347) */2857  export interface PalletUniqueSchedulerScheduledV3 extends Struct {2858    readonly maybeId: Option<U8aFixed>;2859    readonly priority: u8;2860    readonly call: FrameSupportScheduleMaybeHashed;2861    readonly maybePeriodic: Option<ITuple<[u32, u32]>>;2862    readonly origin: OpalRuntimeOriginCaller;2863  }28642865  /** @name OpalRuntimeOriginCaller (348) */2866  export interface OpalRuntimeOriginCaller extends Enum {2867    readonly isVoid: boolean;2868    readonly isSystem: boolean;2869    readonly asSystem: FrameSupportDispatchRawOrigin;2870    readonly isPolkadotXcm: boolean;2871    readonly asPolkadotXcm: PalletXcmOrigin;2872    readonly isCumulusXcm: boolean;2873    readonly asCumulusXcm: CumulusPalletXcmOrigin;2874    readonly isEthereum: boolean;2875    readonly asEthereum: PalletEthereumRawOrigin;2876    readonly type: 'Void' | 'System' | 'PolkadotXcm' | 'CumulusXcm' | 'Ethereum';2877  }28782879  /** @name FrameSupportDispatchRawOrigin (349) */2880  export interface FrameSupportDispatchRawOrigin extends Enum {2881    readonly isRoot: boolean;2882    readonly isSigned: boolean;2883    readonly asSigned: AccountId32;2884    readonly isNone: boolean;2885    readonly type: 'Root' | 'Signed' | 'None';2886  }28872888  /** @name PalletXcmOrigin (350) */2889  export interface PalletXcmOrigin extends Enum {2890    readonly isXcm: boolean;2891    readonly asXcm: XcmV1MultiLocation;2892    readonly isResponse: boolean;2893    readonly asResponse: XcmV1MultiLocation;2894    readonly type: 'Xcm' | 'Response';2895  }28962897  /** @name CumulusPalletXcmOrigin (351) */2898  export interface CumulusPalletXcmOrigin extends Enum {2899    readonly isRelay: boolean;2900    readonly isSiblingParachain: boolean;2901    readonly asSiblingParachain: u32;2902    readonly type: 'Relay' | 'SiblingParachain';2903  }29042905  /** @name PalletEthereumRawOrigin (352) */2906  export interface PalletEthereumRawOrigin extends Enum {2907    readonly isEthereumTransaction: boolean;2908    readonly asEthereumTransaction: H160;2909    readonly type: 'EthereumTransaction';2910  }29112912  /** @name SpCoreVoid (353) */2913  export type SpCoreVoid = Null;29142915  /** @name PalletUniqueSchedulerError (354) */2916  export interface PalletUniqueSchedulerError extends Enum {2917    readonly isFailedToSchedule: boolean;2918    readonly isNotFound: boolean;2919    readonly isTargetBlockNumberInPast: boolean;2920    readonly isRescheduleNoChange: boolean;2921    readonly type: 'FailedToSchedule' | 'NotFound' | 'TargetBlockNumberInPast' | 'RescheduleNoChange';2922  }29232924  /** @name UpDataStructsCollection (355) */2925  export interface UpDataStructsCollection extends Struct {2926    readonly owner: AccountId32;2927    readonly mode: UpDataStructsCollectionMode;2928    readonly name: Vec<u16>;2929    readonly description: Vec<u16>;2930    readonly tokenPrefix: Bytes;2931    readonly sponsorship: UpDataStructsSponsorshipState;2932    readonly limits: UpDataStructsCollectionLimits;2933    readonly permissions: UpDataStructsCollectionPermissions;2934    readonly externalCollection: bool;2935  }29362937  /** @name UpDataStructsSponsorshipState (356) */2938  export interface UpDataStructsSponsorshipState extends Enum {2939    readonly isDisabled: boolean;2940    readonly isUnconfirmed: boolean;2941    readonly asUnconfirmed: AccountId32;2942    readonly isConfirmed: boolean;2943    readonly asConfirmed: AccountId32;2944    readonly type: 'Disabled' | 'Unconfirmed' | 'Confirmed';2945  }29462947  /** @name UpDataStructsProperties (357) */2948  export interface UpDataStructsProperties extends Struct {2949    readonly map: UpDataStructsPropertiesMapBoundedVec;2950    readonly consumedSpace: u32;2951    readonly spaceLimit: u32;2952  }29532954  /** @name UpDataStructsPropertiesMapBoundedVec (358) */2955  export interface UpDataStructsPropertiesMapBoundedVec extends BTreeMap<Bytes, Bytes> {}29562957  /** @name UpDataStructsPropertiesMapPropertyPermission (363) */2958  export interface UpDataStructsPropertiesMapPropertyPermission extends BTreeMap<Bytes, UpDataStructsPropertyPermission> {}29592960  /** @name UpDataStructsCollectionStats (370) */2961  export interface UpDataStructsCollectionStats extends Struct {2962    readonly created: u32;2963    readonly destroyed: u32;2964    readonly alive: u32;2965  }29662967  /** @name UpDataStructsTokenChild (371) */2968  export interface UpDataStructsTokenChild extends Struct {2969    readonly token: u32;2970    readonly collection: u32;2971  }29722973  /** @name PhantomTypeUpDataStructs (372) */2974  export interface PhantomTypeUpDataStructs extends Vec<ITuple<[UpDataStructsTokenData, UpDataStructsRpcCollection, RmrkTraitsCollectionCollectionInfo, RmrkTraitsNftNftInfo, RmrkTraitsResourceResourceInfo, RmrkTraitsPropertyPropertyInfo, RmrkTraitsBaseBaseInfo, RmrkTraitsPartPartType, RmrkTraitsTheme, RmrkTraitsNftNftChild]>> {}29752976  /** @name UpDataStructsTokenData (374) */2977  export interface UpDataStructsTokenData extends Struct {2978    readonly properties: Vec<UpDataStructsProperty>;2979    readonly owner: Option<PalletEvmAccountBasicCrossAccountIdRepr>;2980  }29812982  /** @name UpDataStructsRpcCollection (376) */2983  export interface UpDataStructsRpcCollection extends Struct {2984    readonly owner: AccountId32;2985    readonly mode: UpDataStructsCollectionMode;2986    readonly name: Vec<u16>;2987    readonly description: Vec<u16>;2988    readonly tokenPrefix: Bytes;2989    readonly sponsorship: UpDataStructsSponsorshipState;2990    readonly limits: UpDataStructsCollectionLimits;2991    readonly permissions: UpDataStructsCollectionPermissions;2992    readonly tokenPropertyPermissions: Vec<UpDataStructsPropertyKeyPermission>;2993    readonly properties: Vec<UpDataStructsProperty>;2994    readonly readOnly: bool;2995  }29962997  /** @name RmrkTraitsCollectionCollectionInfo (377) */2998  export interface RmrkTraitsCollectionCollectionInfo extends Struct {2999    readonly issuer: AccountId32;3000    readonly metadata: Bytes;3001    readonly max: Option<u32>;3002    readonly symbol: Bytes;3003    readonly nftsCount: u32;3004  }30053006  /** @name RmrkTraitsNftNftInfo (378) */3007  export interface RmrkTraitsNftNftInfo extends Struct {3008    readonly owner: RmrkTraitsNftAccountIdOrCollectionNftTuple;3009    readonly royalty: Option<RmrkTraitsNftRoyaltyInfo>;3010    readonly metadata: Bytes;3011    readonly equipped: bool;3012    readonly pending: bool;3013  }30143015  /** @name RmrkTraitsNftRoyaltyInfo (380) */3016  export interface RmrkTraitsNftRoyaltyInfo extends Struct {3017    readonly recipient: AccountId32;3018    readonly amount: Permill;3019  }30203021  /** @name RmrkTraitsResourceResourceInfo (381) */3022  export interface RmrkTraitsResourceResourceInfo extends Struct {3023    readonly id: u32;3024    readonly resource: RmrkTraitsResourceResourceTypes;3025    readonly pending: bool;3026    readonly pendingRemoval: bool;3027  }30283029  /** @name RmrkTraitsPropertyPropertyInfo (382) */3030  export interface RmrkTraitsPropertyPropertyInfo extends Struct {3031    readonly key: Bytes;3032    readonly value: Bytes;3033  }30343035  /** @name RmrkTraitsBaseBaseInfo (383) */3036  export interface RmrkTraitsBaseBaseInfo extends Struct {3037    readonly issuer: AccountId32;3038    readonly baseType: Bytes;3039    readonly symbol: Bytes;3040  }30413042  /** @name RmrkTraitsNftNftChild (384) */3043  export interface RmrkTraitsNftNftChild extends Struct {3044    readonly collectionId: u32;3045    readonly nftId: u32;3046  }30473048  /** @name PalletCommonError (386) */3049  export interface PalletCommonError extends Enum {3050    readonly isCollectionNotFound: boolean;3051    readonly isMustBeTokenOwner: boolean;3052    readonly isNoPermission: boolean;3053    readonly isCantDestroyNotEmptyCollection: boolean;3054    readonly isPublicMintingNotAllowed: boolean;3055    readonly isAddressNotInAllowlist: boolean;3056    readonly isCollectionNameLimitExceeded: boolean;3057    readonly isCollectionDescriptionLimitExceeded: boolean;3058    readonly isCollectionTokenPrefixLimitExceeded: boolean;3059    readonly isTotalCollectionsLimitExceeded: boolean;3060    readonly isCollectionAdminCountExceeded: boolean;3061    readonly isCollectionLimitBoundsExceeded: boolean;3062    readonly isOwnerPermissionsCantBeReverted: boolean;3063    readonly isTransferNotAllowed: boolean;3064    readonly isAccountTokenLimitExceeded: boolean;3065    readonly isCollectionTokenLimitExceeded: boolean;3066    readonly isMetadataFlagFrozen: boolean;3067    readonly isTokenNotFound: boolean;3068    readonly isTokenValueTooLow: boolean;3069    readonly isApprovedValueTooLow: boolean;3070    readonly isCantApproveMoreThanOwned: boolean;3071    readonly isAddressIsZero: boolean;3072    readonly isUnsupportedOperation: boolean;3073    readonly isNotSufficientFounds: boolean;3074    readonly isUserIsNotAllowedToNest: boolean;3075    readonly isSourceCollectionIsNotAllowedToNest: boolean;3076    readonly isCollectionFieldSizeExceeded: boolean;3077    readonly isNoSpaceForProperty: boolean;3078    readonly isPropertyLimitReached: boolean;3079    readonly isPropertyKeyIsTooLong: boolean;3080    readonly isInvalidCharacterInPropertyKey: boolean;3081    readonly isEmptyPropertyKey: boolean;3082    readonly isCollectionIsExternal: boolean;3083    readonly isCollectionIsInternal: boolean;3084    readonly type: 'CollectionNotFound' | 'MustBeTokenOwner' | 'NoPermission' | 'CantDestroyNotEmptyCollection' | 'PublicMintingNotAllowed' | 'AddressNotInAllowlist' | 'CollectionNameLimitExceeded' | 'CollectionDescriptionLimitExceeded' | 'CollectionTokenPrefixLimitExceeded' | 'TotalCollectionsLimitExceeded' | 'CollectionAdminCountExceeded' | 'CollectionLimitBoundsExceeded' | 'OwnerPermissionsCantBeReverted' | 'TransferNotAllowed' | 'AccountTokenLimitExceeded' | 'CollectionTokenLimitExceeded' | 'MetadataFlagFrozen' | 'TokenNotFound' | 'TokenValueTooLow' | 'ApprovedValueTooLow' | 'CantApproveMoreThanOwned' | 'AddressIsZero' | 'UnsupportedOperation' | 'NotSufficientFounds' | 'UserIsNotAllowedToNest' | 'SourceCollectionIsNotAllowedToNest' | 'CollectionFieldSizeExceeded' | 'NoSpaceForProperty' | 'PropertyLimitReached' | 'PropertyKeyIsTooLong' | 'InvalidCharacterInPropertyKey' | 'EmptyPropertyKey' | 'CollectionIsExternal' | 'CollectionIsInternal';3085  }30863087  /** @name PalletFungibleError (388) */3088  export interface PalletFungibleError extends Enum {3089    readonly isNotFungibleDataUsedToMintFungibleCollectionToken: boolean;3090    readonly isFungibleItemsHaveNoId: boolean;3091    readonly isFungibleItemsDontHaveData: boolean;3092    readonly isFungibleDisallowsNesting: boolean;3093    readonly isSettingPropertiesNotAllowed: boolean;3094    readonly type: 'NotFungibleDataUsedToMintFungibleCollectionToken' | 'FungibleItemsHaveNoId' | 'FungibleItemsDontHaveData' | 'FungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';3095  }30963097  /** @name PalletRefungibleItemData (389) */3098  export interface PalletRefungibleItemData extends Struct {3099    readonly constData: Bytes;3100  }31013102  /** @name PalletRefungibleError (393) */3103  export interface PalletRefungibleError extends Enum {3104    readonly isNotRefungibleDataUsedToMintFungibleCollectionToken: boolean;3105    readonly isWrongRefungiblePieces: boolean;3106    readonly isRepartitionWhileNotOwningAllPieces: boolean;3107    readonly isRefungibleDisallowsNesting: boolean;3108    readonly isSettingPropertiesNotAllowed: boolean;3109    readonly type: 'NotRefungibleDataUsedToMintFungibleCollectionToken' | 'WrongRefungiblePieces' | 'RepartitionWhileNotOwningAllPieces' | 'RefungibleDisallowsNesting' | 'SettingPropertiesNotAllowed';3110  }31113112  /** @name PalletNonfungibleItemData (394) */3113  export interface PalletNonfungibleItemData extends Struct {3114    readonly owner: PalletEvmAccountBasicCrossAccountIdRepr;3115  }31163117  /** @name UpDataStructsPropertyScope (396) */3118  export interface UpDataStructsPropertyScope extends Enum {3119    readonly isNone: boolean;3120    readonly isRmrk: boolean;3121    readonly type: 'None' | 'Rmrk';3122  }31233124  /** @name PalletNonfungibleError (398) */3125  export interface PalletNonfungibleError extends Enum {3126    readonly isNotNonfungibleDataUsedToMintFungibleCollectionToken: boolean;3127    readonly isNonfungibleItemsHaveNoAmount: boolean;3128    readonly isCantBurnNftWithChildren: boolean;3129    readonly type: 'NotNonfungibleDataUsedToMintFungibleCollectionToken' | 'NonfungibleItemsHaveNoAmount' | 'CantBurnNftWithChildren';3130  }31313132  /** @name PalletStructureError (399) */3133  export interface PalletStructureError extends Enum {3134    readonly isOuroborosDetected: boolean;3135    readonly isDepthLimit: boolean;3136    readonly isBreadthLimit: boolean;3137    readonly isTokenNotFound: boolean;3138    readonly type: 'OuroborosDetected' | 'DepthLimit' | 'BreadthLimit' | 'TokenNotFound';3139  }31403141  /** @name PalletRmrkCoreError (400) */3142  export interface PalletRmrkCoreError extends Enum {3143    readonly isCorruptedCollectionType: boolean;3144    readonly isNftTypeEncodeError: boolean;3145    readonly isRmrkPropertyKeyIsTooLong: boolean;3146    readonly isRmrkPropertyValueIsTooLong: boolean;3147    readonly isRmrkPropertyIsNotFound: boolean;3148    readonly isUnableToDecodeRmrkData: boolean;3149    readonly isCollectionNotEmpty: boolean;3150    readonly isNoAvailableCollectionId: boolean;3151    readonly isNoAvailableNftId: boolean;3152    readonly isCollectionUnknown: boolean;3153    readonly isNoPermission: boolean;3154    readonly isNonTransferable: boolean;3155    readonly isCollectionFullOrLocked: boolean;3156    readonly isResourceDoesntExist: boolean;3157    readonly isCannotSendToDescendentOrSelf: boolean;3158    readonly isCannotAcceptNonOwnedNft: boolean;3159    readonly isCannotRejectNonOwnedNft: boolean;3160    readonly isCannotRejectNonPendingNft: boolean;3161    readonly isResourceNotPending: boolean;3162    readonly isNoAvailableResourceId: boolean;3163    readonly type: 'CorruptedCollectionType' | 'NftTypeEncodeError' | 'RmrkPropertyKeyIsTooLong' | 'RmrkPropertyValueIsTooLong' | 'RmrkPropertyIsNotFound' | 'UnableToDecodeRmrkData' | 'CollectionNotEmpty' | 'NoAvailableCollectionId' | 'NoAvailableNftId' | 'CollectionUnknown' | 'NoPermission' | 'NonTransferable' | 'CollectionFullOrLocked' | 'ResourceDoesntExist' | 'CannotSendToDescendentOrSelf' | 'CannotAcceptNonOwnedNft' | 'CannotRejectNonOwnedNft' | 'CannotRejectNonPendingNft' | 'ResourceNotPending' | 'NoAvailableResourceId';3164  }31653166  /** @name PalletRmrkEquipError (402) */3167  export interface PalletRmrkEquipError extends Enum {3168    readonly isPermissionError: boolean;3169    readonly isNoAvailableBaseId: boolean;3170    readonly isNoAvailablePartId: boolean;3171    readonly isBaseDoesntExist: boolean;3172    readonly isNeedsDefaultThemeFirst: boolean;3173    readonly isPartDoesntExist: boolean;3174    readonly isNoEquippableOnFixedPart: boolean;3175    readonly type: 'PermissionError' | 'NoAvailableBaseId' | 'NoAvailablePartId' | 'BaseDoesntExist' | 'NeedsDefaultThemeFirst' | 'PartDoesntExist' | 'NoEquippableOnFixedPart';3176  }31773178  /** @name PalletEvmError (405) */3179  export interface PalletEvmError extends Enum {3180    readonly isBalanceLow: boolean;3181    readonly isFeeOverflow: boolean;3182    readonly isPaymentOverflow: boolean;3183    readonly isWithdrawFailed: boolean;3184    readonly isGasPriceTooLow: boolean;3185    readonly isInvalidNonce: boolean;3186    readonly type: 'BalanceLow' | 'FeeOverflow' | 'PaymentOverflow' | 'WithdrawFailed' | 'GasPriceTooLow' | 'InvalidNonce';3187  }31883189  /** @name FpRpcTransactionStatus (408) */3190  export interface FpRpcTransactionStatus extends Struct {3191    readonly transactionHash: H256;3192    readonly transactionIndex: u32;3193    readonly from: H160;3194    readonly to: Option<H160>;3195    readonly contractAddress: Option<H160>;3196    readonly logs: Vec<EthereumLog>;3197    readonly logsBloom: EthbloomBloom;3198  }31993200  /** @name EthbloomBloom (410) */3201  export interface EthbloomBloom extends U8aFixed {}32023203  /** @name EthereumReceiptReceiptV3 (412) */3204  export interface EthereumReceiptReceiptV3 extends Enum {3205    readonly isLegacy: boolean;3206    readonly asLegacy: EthereumReceiptEip658ReceiptData;3207    readonly isEip2930: boolean;3208    readonly asEip2930: EthereumReceiptEip658ReceiptData;3209    readonly isEip1559: boolean;3210    readonly asEip1559: EthereumReceiptEip658ReceiptData;3211    readonly type: 'Legacy' | 'Eip2930' | 'Eip1559';3212  }32133214  /** @name EthereumReceiptEip658ReceiptData (413) */3215  export interface EthereumReceiptEip658ReceiptData extends Struct {3216    readonly statusCode: u8;3217    readonly usedGas: U256;3218    readonly logsBloom: EthbloomBloom;3219    readonly logs: Vec<EthereumLog>;3220  }32213222  /** @name EthereumBlock (414) */3223  export interface EthereumBlock extends Struct {3224    readonly header: EthereumHeader;3225    readonly transactions: Vec<EthereumTransactionTransactionV2>;3226    readonly ommers: Vec<EthereumHeader>;3227  }32283229  /** @name EthereumHeader (415) */3230  export interface EthereumHeader extends Struct {3231    readonly parentHash: H256;3232    readonly ommersHash: H256;3233    readonly beneficiary: H160;3234    readonly stateRoot: H256;3235    readonly transactionsRoot: H256;3236    readonly receiptsRoot: H256;3237    readonly logsBloom: EthbloomBloom;3238    readonly difficulty: U256;3239    readonly number: U256;3240    readonly gasLimit: U256;3241    readonly gasUsed: U256;3242    readonly timestamp: u64;3243    readonly extraData: Bytes;3244    readonly mixHash: H256;3245    readonly nonce: EthereumTypesHashH64;3246  }32473248  /** @name EthereumTypesHashH64 (416) */3249  export interface EthereumTypesHashH64 extends U8aFixed {}32503251  /** @name PalletEthereumError (421) */3252  export interface PalletEthereumError extends Enum {3253    readonly isInvalidSignature: boolean;3254    readonly isPreLogExists: boolean;3255    readonly type: 'InvalidSignature' | 'PreLogExists';3256  }32573258  /** @name PalletEvmCoderSubstrateError (422) */3259  export interface PalletEvmCoderSubstrateError extends Enum {3260    readonly isOutOfGas: boolean;3261    readonly isOutOfFund: boolean;3262    readonly type: 'OutOfGas' | 'OutOfFund';3263  }32643265  /** @name PalletEvmContractHelpersSponsoringModeT (423) */3266  export interface PalletEvmContractHelpersSponsoringModeT extends Enum {3267    readonly isDisabled: boolean;3268    readonly isAllowlisted: boolean;3269    readonly isGenerous: boolean;3270    readonly type: 'Disabled' | 'Allowlisted' | 'Generous';3271  }32723273  /** @name PalletEvmContractHelpersError (425) */3274  export interface PalletEvmContractHelpersError extends Enum {3275    readonly isNoPermission: boolean;3276    readonly type: 'NoPermission';3277  }32783279  /** @name PalletEvmMigrationError (426) */3280  export interface PalletEvmMigrationError extends Enum {3281    readonly isAccountNotEmpty: boolean;3282    readonly isAccountIsNotMigrating: boolean;3283    readonly type: 'AccountNotEmpty' | 'AccountIsNotMigrating';3284  }32853286  /** @name SpRuntimeMultiSignature (428) */3287  export interface SpRuntimeMultiSignature extends Enum {3288    readonly isEd25519: boolean;3289    readonly asEd25519: SpCoreEd25519Signature;3290    readonly isSr25519: boolean;3291    readonly asSr25519: SpCoreSr25519Signature;3292    readonly isEcdsa: boolean;3293    readonly asEcdsa: SpCoreEcdsaSignature;3294    readonly type: 'Ed25519' | 'Sr25519' | 'Ecdsa';3295  }32963297  /** @name SpCoreEd25519Signature (429) */3298  export interface SpCoreEd25519Signature extends U8aFixed {}32993300  /** @name SpCoreSr25519Signature (431) */3301  export interface SpCoreSr25519Signature extends U8aFixed {}33023303  /** @name SpCoreEcdsaSignature (432) */3304  export interface SpCoreEcdsaSignature extends U8aFixed {}33053306  /** @name FrameSystemExtensionsCheckSpecVersion (435) */3307  export type FrameSystemExtensionsCheckSpecVersion = Null;33083309  /** @name FrameSystemExtensionsCheckGenesis (436) */3310  export type FrameSystemExtensionsCheckGenesis = Null;33113312  /** @name FrameSystemExtensionsCheckNonce (439) */3313  export interface FrameSystemExtensionsCheckNonce extends Compact<u32> {}33143315  /** @name FrameSystemExtensionsCheckWeight (440) */3316  export type FrameSystemExtensionsCheckWeight = Null;33173318  /** @name PalletTemplateTransactionPaymentChargeTransactionPayment (441) */3319  export interface PalletTemplateTransactionPaymentChargeTransactionPayment extends Compact<u128> {}33203321  /** @name OpalRuntimeRuntime (442) */3322  export type OpalRuntimeRuntime = Null;33233324  /** @name PalletEthereumFakeTransactionFinalizer (443) */3325  export type PalletEthereumFakeTransactionFinalizer = Null;33263327} // declare module
modifiedtests/src/nesting/graphs.test.tsdiffbeforeafterboth
--- a/tests/src/nesting/graphs.test.ts
+++ b/tests/src/nesting/graphs.test.ts
@@ -36,7 +36,7 @@
     await usingApi(async (api, privateKeyWrapper) => {
       const alice = privateKeyWrapper('//Alice');
       const collection = await buildComplexObjectGraph(api, alice);
-      await setCollectionLimitsExpectSuccess(alice, collection, {ownerCanTransfer: true});
+      const tokenTwoParent = tokenIdToCross(collection, 1);
 
       // to self
       await expect(
@@ -49,7 +49,7 @@
         'second transaction',
       ).to.be.rejectedWith(/structure\.OuroborosDetected/);
       await expect(
-        executeTransaction(api, alice, api.tx.unique.transfer(tokenIdToCross(collection, 8), collection, 2, 1)),
+        executeTransaction(api, alice, api.tx.unique.transferFrom(tokenTwoParent, tokenIdToCross(collection, 8), collection, 2, 1)),
         'third transaction',
       ).to.be.rejectedWith(/structure\.OuroborosDetected/);
     });
modifiedtests/src/nesting/nest.test.tsdiffbeforeafterboth
--- a/tests/src/nesting/nest.test.ts
+++ b/tests/src/nesting/nest.test.ts
@@ -123,7 +123,7 @@
       ], 'Children contents check at nesting #2');
 
       // Move token B to a different user outside the nesting tree
-      await transferExpectSuccess(collectionA, tokenB, alice, bob);
+      await transferFromExpectSuccess(collectionA, tokenB, alice, targetAddress, bob);
       children = await getTokenChildren(api, collectionA, targetToken);
       expect(children.length).to.be.equal(1, 'Children length check at unnesting');
       expect(children).to.be.have.deep.members([
@@ -470,7 +470,7 @@
       await expect(executeTransaction(
         api, 
         alice, 
-        api.tx.unique.transfer(targetAddress, collection, newToken, 1),
+        api.tx.unique.transferFrom(targetAddress, {Substrate: bob.address}, collection, newToken, 1),
       ), 'while nesting another\'s token token').to.be.rejectedWith(/common\.AddressNotInAllowlist/);
       expect(await getTokenOwner(api, collection, newToken)).to.be.deep.equal({Substrate: bob.address});
 
modifiedtests/src/nesting/properties.test.tsdiffbeforeafterboth
--- a/tests/src/nesting/properties.test.ts
+++ b/tests/src/nesting/properties.test.ts
@@ -3,11 +3,13 @@
 import {
   addCollectionAdminExpectSuccess,
   createCollectionExpectSuccess,
+  setCollectionPermissionsExpectSuccess,
   createItemExpectSuccess,
   getCreateCollectionResult,
   transferExpectSuccess,
 } from '../util/helpers';
 import {IKeyringPair} from '@polkadot/types/types';
+import {tokenIdToAddress} from '../eth/util/helpers';
 
 let alice: IKeyringPair;
 let bob: IKeyringPair;
@@ -522,6 +524,7 @@
 describe('Integration Test: Token Properties', () => {
   let collection: number;
   let token: number;
+  let nestedToken: number;
   let permissions: {permission: any, signers: IKeyringPair[]}[];
 
   before(async () => {
@@ -544,7 +547,11 @@
   beforeEach(async () => {
     await usingApi(async () => {
       collection = await createCollectionExpectSuccess();
+      await setCollectionPermissionsExpectSuccess(alice, collection, {nesting: {tokenOwner: true}});
+
       token = await createItemExpectSuccess(alice, collection, 'NFT');
+      nestedToken = await createItemExpectSuccess(alice, collection, 'NFT', {Ethereum: tokenIdToAddress(collection, token)});
+
       await addCollectionAdminExpectSuccess(alice, collection, bob.address);
       await transferExpectSuccess(collection, token, alice, charlie);
     });
@@ -681,6 +688,124 @@
       expect((await api.query.nonfungible.tokenProperties(collection, token)).toJSON().consumedSpace).to.be.equal(0);
     });
   });
+
+  it('Assigns properties to a nested token according to permissions', async () => {
+    await usingApi(async api => {
+      const propertyKeys: string[] = [];
+      let i = 0;
+      for (const permission of permissions) {
+        for (const signer of permission.signers) {
+          const key = i + '_' + signer.address;
+          propertyKeys.push(key);
+
+          await expect(executeTransaction(
+            api, 
+            alice, 
+            api.tx.unique.setTokenPropertyPermissions(collection, [{key: key, permission: permission.permission}]), 
+          ), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected;
+
+          await expect(executeTransaction(
+            api, 
+            signer, 
+            api.tx.unique.setTokenProperties(collection, nestedToken, [{key: key, value: 'Serotonin increase'}]), 
+          ), `on adding property ${i} by ${signer.address}`).to.not.be.rejected;
+        }
+
+        i++;
+      }
+
+      const properties = (await api.rpc.unique.tokenProperties(collection, nestedToken, propertyKeys)).toHuman() as any[];
+      const tokensData = (await api.rpc.unique.tokenData(collection, nestedToken, propertyKeys)).toHuman().properties as any[];
+      for (let i = 0; i < properties.length; i++) {
+        expect(properties[i].value).to.be.equal('Serotonin increase');
+        expect(tokensData[i].value).to.be.equal('Serotonin increase');
+      }
+    });
+  });
+
+  it('Changes properties of a nested token according to permissions', async () => {
+    await usingApi(async api => {
+      const propertyKeys: string[] = [];
+      let i = 0;
+      for (const permission of permissions) {
+        if (!permission.permission.mutable) continue;
+        
+        for (const signer of permission.signers) {
+          const key = i + '_' + signer.address;
+          propertyKeys.push(key);
+
+          await expect(executeTransaction(
+            api, 
+            alice, 
+            api.tx.unique.setTokenPropertyPermissions(collection, [{key: key, permission: permission.permission}]), 
+          ), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected;
+
+          await expect(executeTransaction(
+            api, 
+            signer, 
+            api.tx.unique.setTokenProperties(collection, nestedToken, [{key: key, value: 'Serotonin increase'}]), 
+          ), `on adding property ${i} by ${signer.address}`).to.not.be.rejected;
+
+          await expect(executeTransaction(
+            api, 
+            signer, 
+            api.tx.unique.setTokenProperties(collection, nestedToken, [{key: key, value: 'Serotonin stable'}]), 
+          ), `on changing property ${i} by ${signer.address}`).to.not.be.rejected;
+        }
+
+        i++;
+      }
+
+      const properties = (await api.rpc.unique.tokenProperties(collection, nestedToken, propertyKeys)).toHuman() as any[];
+      const tokensData = (await api.rpc.unique.tokenData(collection, nestedToken, propertyKeys)).toHuman().properties as any[];
+      for (let i = 0; i < properties.length; i++) {
+        expect(properties[i].value).to.be.equal('Serotonin stable');
+        expect(tokensData[i].value).to.be.equal('Serotonin stable');
+      }
+    });
+  });
+
+  it('Deletes properties of a nested token according to permissions', async () => {
+    await usingApi(async api => {
+      const propertyKeys: string[] = [];
+      let i = 0;
+
+      for (const permission of permissions) {
+        if (!permission.permission.mutable) continue;
+        
+        for (const signer of permission.signers) {
+          const key = i + '_' + signer.address;
+          propertyKeys.push(key);
+
+          await expect(executeTransaction(
+            api, 
+            alice, 
+            api.tx.unique.setTokenPropertyPermissions(collection, [{key: key, permission: permission.permission}]), 
+          ), `on setting permission ${i} by ${signer.address}`).to.not.be.rejected;
+
+          await expect(executeTransaction(
+            api, 
+            signer, 
+            api.tx.unique.setTokenProperties(collection, nestedToken, [{key: key, value: 'Serotonin increase'}]), 
+          ), `on adding property ${i} by ${signer.address}`).to.not.be.rejected;
+
+          await expect(executeTransaction(
+            api, 
+            signer, 
+            api.tx.unique.deleteTokenProperties(collection, nestedToken, [key]), 
+          ), `on deleting property ${i} by ${signer.address}`).to.not.be.rejected;
+        }
+        
+        i++;
+      }
+
+      const properties = (await api.rpc.unique.tokenProperties(collection, nestedToken, propertyKeys)).toJSON() as any[];
+      expect(properties).to.be.empty;
+      const tokensData = (await api.rpc.unique.tokenData(collection, nestedToken, propertyKeys)).toJSON().properties as any[];
+      expect(tokensData).to.be.empty;
+      expect((await api.query.nonfungible.tokenProperties(collection, nestedToken)).toJSON().consumedSpace).to.be.equal(0);
+    });
+  });
 });
 
 describe('Negative Integration Test: Token Properties', () => {
@@ -848,4 +973,4 @@
       expect(propertiesMap.consumedSpace).to.be.equal(originalSpace);
     });
   });
-});
\ No newline at end of file
+});
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;
+    });
+  });
 });
addedtests/src/rmrk/acceptNft.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/acceptNft.test.ts
@@ -0,0 +1,103 @@
+import {expect} from 'chai';
+import {getApiConnection} from '../substrate/substrate-api';
+import {
+  createCollection,
+  mintNft,
+  sendNft,
+  acceptNft,
+} from './util/tx';
+import {NftIdTuple} from './util/fetch';
+import {isNftChildOfAnother, expectTxFailure} from './util/helpers';
+
+describe('integration test: accept NFT', () => {
+  let api: any;
+  before(async () => { api = await getApiConnection(); });
+
+  const alice = '//Alice';
+  const bob = '//Bob';
+
+  const createTestCollection = async (issuerUri: string) => {
+    return await createCollection(
+      api,
+      issuerUri,
+      'accept-metadata',
+      null,
+      'acpt',
+    );
+  };
+
+  it('accept NFT', async () => {
+    const ownerAlice = alice;
+    const ownerBob = bob;
+
+    const aliceCollectionId = await createTestCollection(alice);
+    const bobCollectionId = await createTestCollection(bob);
+
+    const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, 'child-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];
+
+    await sendNft(api, 'pending', ownerBob, bobCollectionId, childNftId, newOwnerNFT);
+    await acceptNft(api, alice, bobCollectionId, childNftId, newOwnerNFT);
+
+    const isChild = await isNftChildOfAnother(api, bobCollectionId, childNftId, newOwnerNFT);
+    expect(isChild).to.be.true;
+  });
+
+  it('[negative] unable to accept NFT by a not-an-owner', async () => {
+    const ownerAlice = alice;
+    const ownerBob = bob;
+
+    const aliceCollectionId = await createTestCollection(alice);
+    const bobCollectionId = await createTestCollection(bob);
+
+    const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, 'child-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];
+
+    await sendNft(api, 'pending', ownerBob, bobCollectionId, childNftId, newOwnerNFT);
+    const tx = acceptNft(api, bob, bobCollectionId, childNftId, newOwnerNFT);
+
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+  });
+
+  it('[negative] unable to accept non-existing NFT', async () => {
+    const collectionId = 0;
+    const maxNftId = 0xFFFFFFFF;
+
+    const owner = alice;
+    const aliceCollectionId = await createTestCollection(alice);
+
+    const parentNftId = await mintNft(api, alice, owner, aliceCollectionId, 'parent-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];
+
+    const tx = acceptNft(api, alice, collectionId, maxNftId, newOwnerNFT);
+
+    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);
+  });
+
+  it('[negative] unable to accept NFT which is not sent', async () => {
+    const ownerAlice = alice;
+    const ownerBob = bob;
+
+    const aliceCollectionId = await createTestCollection(alice);
+    const bobCollectionId = await createTestCollection(bob);
+
+    const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, 'child-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];
+
+    const tx = acceptNft(api, alice, bobCollectionId, childNftId, newOwnerNFT);
+
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+
+    const isChild = await isNftChildOfAnother(api, bobCollectionId, childNftId, newOwnerNFT);
+    expect(isChild).to.be.false;
+  });
+
+  after(() => { api.disconnect(); });
+});
addedtests/src/rmrk/addResource.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/addResource.test.ts
@@ -0,0 +1,436 @@
+import {expect} from 'chai';
+import {getApiConnection} from '../substrate/substrate-api';
+import {NftIdTuple} from './util/fetch';
+import {expectTxFailure, getResourceById} from './util/helpers';
+import {
+  addNftBasicResource,
+  acceptNftResource,
+  createCollection,
+  mintNft,
+  sendNft,
+  addNftSlotResource,
+  addNftComposableResource,
+} from './util/tx';
+import {RmrkTraitsResourceResourceInfo as ResourceInfo} from '@polkadot/types/lookup';
+
+describe('integration test: add NFT resource', () => {
+  const Alice = '//Alice';
+  const Bob = '//Bob';
+  const src = 'test-res-src';
+  const metadata = 'test-res-metadata';
+  const license = 'test-res-license';
+  const thumb = 'test-res-thumb';
+
+  const nonexistentId = 99999;
+
+  let api: any;
+  before(async () => {
+    api = await getApiConnection();
+  });
+
+  it('add resource', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftAlice = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionIdAlice,
+      'nft-metadata',
+    );
+
+    await addNftBasicResource(
+      api,
+      Alice,
+      'added',
+      collectionIdAlice,
+      nftAlice,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+  });
+
+  it('add a resource to the nested NFT', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const parentNftId = await mintNft(api, Alice, Alice, collectionIdAlice, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, Alice, Alice, collectionIdAlice, 'child-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [collectionIdAlice, parentNftId];
+
+    await sendNft(api, 'sent', Alice, collectionIdAlice, childNftId, newOwnerNFT);
+
+    await addNftBasicResource(
+      api,
+      Alice,
+      'added',
+      collectionIdAlice,
+      childNftId,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+  });
+
+  it('add multiple resources', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftAlice = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionIdAlice,
+      'nft-metadata',
+    );
+
+    const baseId = 42;
+    const slotId = 10;
+    const parts = [0, 5, 2];
+
+    const resourcesInfo = [];
+    const resourceNum = 4;
+
+    const checkResource = async (resource: ResourceInfo, resType: string, expectedId: number, expected: {
+      src: string,
+      metadata: string,
+      license: string,
+      thumb: string
+    }) => {
+
+      // FIXME A workaround. It seems it is a PolkadotJS bug.
+      // All of the following are `false`.
+      //
+      // console.log('>>> basic:', resource.resource.isBasic);
+      // console.log('>>> composable:', resource.resource.isComposable);
+      // console.log('>>> slot:', resource.resource.isSlot);
+      const resourceJson = (resource.resource.toHuman() as any)[resType];
+
+      expect(resource.id.toNumber(), 'Error: Invalid resource Id')
+        .to.be.eq(expectedId);
+
+      expect(resourceJson.src, 'Error: Invalid resource src')
+        .to.be.eq(expected.src);
+      expect(resourceJson.metadata, 'Error: Invalid resource metadata')
+        .to.be.eq(expected.metadata);
+      expect(resourceJson.license, 'Error: Invalid resource license')
+        .to.be.eq(expected.license);
+      expect(resourceJson.thumb, 'Error: Invalid resource thumb')
+        .to.be.eq(expected.thumb);
+    };
+
+    for (let i = 0; i < resourceNum; i++) {
+      resourcesInfo.push({
+        src: src + 'r-' + i,
+        metadata: metadata + 'r-' + i,
+        license: license + 'r-' + i,
+        thumb: thumb + 'r-' + i,
+      });
+    }
+
+    const firstBasicResourceId = await addNftBasicResource(
+      api,
+      Alice,
+      'added',
+      collectionIdAlice,
+      nftAlice,
+      resourcesInfo[0].src,
+      resourcesInfo[0].metadata,
+      resourcesInfo[0].license,
+      resourcesInfo[0].thumb,
+    );
+
+    const secondBasicResourceId = await addNftBasicResource(
+      api,
+      Alice,
+      'added',
+      collectionIdAlice,
+      nftAlice,
+      resourcesInfo[1].src,
+      resourcesInfo[1].metadata,
+      resourcesInfo[1].license,
+      resourcesInfo[1].thumb,
+    );
+
+    const composableResourceId = await addNftComposableResource(
+      api,
+      Alice,
+      'added',
+      collectionIdAlice,
+      nftAlice,
+      parts,
+      baseId,
+      resourcesInfo[2].src,
+      resourcesInfo[2].metadata,
+      resourcesInfo[2].license,
+      resourcesInfo[2].thumb,
+    );
+
+    const slotResourceId = await addNftSlotResource(
+      api,
+      Alice,
+      'added',
+      collectionIdAlice,
+      nftAlice,
+      baseId,
+      slotId,
+      resourcesInfo[3].src,
+      resourcesInfo[3].metadata,
+      resourcesInfo[3].license,
+      resourcesInfo[3].thumb,
+    );
+
+    const firstResource = await getResourceById(api, collectionIdAlice, nftAlice, firstBasicResourceId);
+    await checkResource(firstResource, 'Basic', firstBasicResourceId, resourcesInfo[0]);
+
+    const secondResource = await getResourceById(api, collectionIdAlice, nftAlice, secondBasicResourceId);
+    await checkResource(secondResource, 'Basic', secondBasicResourceId, resourcesInfo[1]);
+
+    const composableResource = await getResourceById(api, collectionIdAlice, nftAlice, composableResourceId);
+    await checkResource(composableResource, 'Composable', composableResourceId, resourcesInfo[2]);
+
+    const slotResource = await getResourceById(api, collectionIdAlice, nftAlice, slotResourceId);
+    await checkResource(slotResource, 'Slot', slotResourceId, resourcesInfo[3]);
+  });
+
+  it('[negative]: unable to add a resource to the non-existing NFT', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const tx = addNftBasicResource(
+      api,
+      Alice,
+      'added',
+      collectionIdAlice,
+      nonexistentId,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+  
+    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);
+  });
+
+  it('[negative]: unable to add a resource by a not-an-owner user', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftAlice = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionIdAlice,
+      'nft-metadata',
+    );
+
+    const tx = addNftBasicResource(
+      api,
+      Bob,
+      'added',
+      collectionIdAlice,
+      nftAlice,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+  
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+  });
+
+  it('[negative]: unable to add a resource to the nested NFT if it isnt root owned by the caller', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const parentNftId = await mintNft(api, Alice, Alice, collectionIdAlice, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, Alice, Alice, collectionIdAlice, 'child-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [collectionIdAlice, parentNftId];
+
+    await sendNft(api, 'sent', Alice, collectionIdAlice, childNftId, newOwnerNFT);
+
+    const tx = addNftBasicResource(
+      api,
+      Bob,
+      'added',
+      collectionIdAlice,
+      childNftId,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+    
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+  });
+
+  it('accept resource', async () => {
+    const collectionIdBob = await createCollection(
+      api,
+      Bob,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftAlice = await mintNft(
+      api,
+      Bob,
+      Alice,
+      collectionIdBob,
+      'nft-metadata',
+    );
+
+    const resourceId = await addNftBasicResource(
+      api,
+      Bob,
+      'pending',
+      collectionIdBob,
+      nftAlice,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+
+    await acceptNftResource(api, Alice, collectionIdBob, nftAlice, resourceId);
+  });
+
+  it('[negative]: unable to accept a non-existing resource', async () => {
+    const collectionIdBob = await createCollection(
+      api,
+      Bob,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftAlice = await mintNft(
+      api,
+      Bob,
+      Alice,
+      collectionIdBob,
+      'nft-metadata',
+    );
+
+    const tx = acceptNftResource(api, Alice, collectionIdBob, nftAlice, nonexistentId);
+    await expectTxFailure(/rmrkCore\.ResourceDoesntExist/, tx);
+  });
+
+  it('[negative]: unable to accept a resource by a not-an-NFT-owner user', async () => {
+    const collectionIdBob = await createCollection(
+      api,
+      Bob,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftAlice = await mintNft(
+      api,
+      Bob,
+      Alice,
+      collectionIdBob,
+      'nft-metadata',
+    );
+
+    const resourceId = await addNftBasicResource(
+      api,
+      Bob,
+      'pending',
+      collectionIdBob,
+      nftAlice,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+
+    const tx = acceptNftResource(api, Bob, collectionIdBob, nftAlice, resourceId);
+
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+  });
+
+  it('[negative]: unable to accept a resource to a non-target NFT', async () => {
+    const collectionIdBob = await createCollection(
+      api,
+      Bob,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftAlice = await mintNft(
+      api,
+      Bob,
+      Alice,
+      collectionIdBob,
+      'nft-metadata',
+    );
+
+    const wrongNft = await mintNft(
+      api,
+      Bob,
+      Alice,
+      collectionIdBob,
+      'nft-metadata',
+    );
+    
+    const resourceId = await addNftBasicResource(
+      api,
+      Bob,
+      'pending',
+      collectionIdBob,
+      nftAlice,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+
+    const tx = acceptNftResource(api, Bob, collectionIdBob, wrongNft, resourceId);
+
+    await expectTxFailure(/rmrkCore\.ResourceDoesntExist/, tx);
+  });
+
+
+  after(() => {
+    api.disconnect();
+  });
+});
addedtests/src/rmrk/addTheme.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/addTheme.test.ts
@@ -0,0 +1,126 @@
+import {expect} from 'chai';
+import {getApiConnection} from '../substrate/substrate-api';
+import {createBase, addTheme} from './util/tx';
+import {expectTxFailure} from './util/helpers';
+import {getThemeNames} from './util/fetch';
+
+describe('integration test: add Theme to Base', () => {
+  let api: any;
+  before(async () => { api = await getApiConnection(); });
+
+  const alice = '//Alice';
+  const bob = '//Bob';
+
+  it('add default theme', async () => {
+    const baseId = await createBase(api, alice, 'default-themed-base', 'DTBase', []);
+    await addTheme(api, alice, baseId, {
+      name: 'default',
+      properties: [
+        {
+          key: 'some-key',
+          value: 'some-key-value',
+        },
+        {
+          key: 'another-key',
+          value: 'another-key-value',
+        },
+      ],
+    });
+  });
+
+  it('add default theme and a custom one', async () => {
+    const baseId = await createBase(api, alice, '2-themed-base', '2TBase', []);
+    await addTheme(api, alice, baseId, {
+      name: 'default',
+      properties: [
+        {
+          key: 'default-key',
+          value: 'default-key-value',
+        },
+      ],
+    });
+    await addTheme(api, alice, baseId, {
+      name: 'custom-theme',
+      properties: [
+        {
+          key: 'custom-key-0',
+          value: 'custom-key-value-0',
+        },
+        {
+          key: 'custom-key-1',
+          value: 'custom-key-value-1',
+        },
+      ],
+    });
+  });
+
+  it('fetch filtered theme keys', async () => {
+    const baseId = await createBase(api, alice, '2-themed-base', '2TBase', []);
+    await addTheme(api, alice, baseId, {
+      name: 'default',
+      properties: [
+        {
+          key: 'first-key',
+          value: 'first-key-value',
+        },
+        {
+          key: 'second-key',
+          value: 'second-key-value',
+        },
+      ],
+    }, ['second-key']);
+  });
+
+  it('fetch theme names', async() => {
+    const baseId = await createBase(api, alice, '3-themed-base', '3TBase', []);
+    const names = [
+      'default',
+      'first-theme',
+      'second-theme',
+    ];
+
+    for (let i = 0; i < names.length; i++) {
+      await addTheme(api, alice, baseId, {name: names[i], properties: [{key: 'dummy', value: 'dummy'}]});
+    }
+
+    const fetchedNames = await getThemeNames(api, baseId);
+
+    for (let i = 0; i < names.length; i++) {
+      const isFound = fetchedNames.find((name) => name === names[i]) !== undefined;
+
+      expect(isFound, 'Error: invalid theme names').to.be.true;
+    }
+  });
+
+  it('[negative] unable to add theme to non-existing base', async () => {
+    const maxBaseId = 0xFFFFFFFF;
+    const tx = addTheme(api, alice, maxBaseId, {
+      name: 'default',
+      properties: [],
+    });
+
+    await expectTxFailure(/rmrkEquip\.BaseDoesntExist/, tx);
+  });
+
+  it('[negative] unable to add custom theme if no default theme', async () => {
+    const baseId = await createBase(api, alice, 'no-default-themed-base', 'NDTBase', []);
+    const tx = addTheme(api, alice, baseId, {
+      name: 'custom-theme',
+      properties: [],
+    });
+
+    await expectTxFailure(/rmrkEquip\.NeedsDefaultThemeFirst/, tx);
+  });
+
+  it('[negative] unable to add theme by a not-an-owner', async () => {
+    const baseId = await createBase(api, alice, 'no-default-themed-base', 'NDTBase', []);
+    const tx = addTheme(api, bob, baseId, {
+      name: 'default',
+      properties: [],
+    });
+
+    await expectTxFailure(/rmrkEquip\.PermissionError/, tx);
+  });
+
+  after(() => { api.disconnect(); });
+});
addedtests/src/rmrk/burnNft.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/burnNft.test.ts
@@ -0,0 +1,170 @@
+import {getApiConnection} from '../substrate/substrate-api';
+import {expectTxFailure} from './util/helpers';
+import {NftIdTuple, getChildren} from './util/fetch';
+import {burnNft, createCollection, sendNft, mintNft} from './util/tx';
+
+import chai from 'chai';
+import chaiAsPromised from 'chai-as-promised';
+
+chai.use(chaiAsPromised);
+const expect = chai.expect;
+
+describe('integration test: burn nft', () => {
+  const Alice = '//Alice';
+  const Bob = '//Bob';
+
+  let api: any;
+  before(async () => {
+    api = await getApiConnection();
+  });
+
+  it('burn nft', async () => {
+    await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    ).then(async (collectionId) => {
+      const nftId = await mintNft(
+        api,
+        Alice,
+        Alice,
+        collectionId,
+        'nft-metadata',
+      );
+      await burnNft(api, Alice, collectionId, nftId);
+    });
+  });
+
+  it('burn nft with children', async () => {
+    const collectionId = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const parentNftId = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionId,
+      'nft-metadata',
+    );
+
+    const childNftId = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionId,
+      'nft-metadata',
+    );
+
+    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];
+
+    await sendNft(api, 'sent', Alice, collectionId, childNftId, newOwnerNFT);
+
+    const childrenBefore = await getChildren(api, collectionId, parentNftId);
+    expect(childrenBefore.length === 1, 'Error: parent NFT should have children')
+      .to.be.true;
+
+    const child = childrenBefore[0];
+    expect(child.collectionId.eq(collectionId), 'Error: invalid child collection Id')
+      .to.be.true;
+
+    expect(child.nftId.eq(childNftId), 'Error: invalid child NFT Id')
+      .to.be.true;
+
+    await burnNft(api, Alice, collectionId, parentNftId);
+
+    const childrenAfter = await getChildren(api, collectionId, parentNftId);
+
+    expect(childrenAfter.length === 0, 'Error: children should be burned').to.be.true;
+  });
+
+  it('burn child nft', async () => {
+    const collectionId = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const parentNftId = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionId,
+      'nft-metadata',
+    );
+
+    const childNftId = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionId,
+      'nft-metadata',
+    );
+
+    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];
+
+    await sendNft(api, 'sent', Alice, collectionId, childNftId, newOwnerNFT);
+
+    const childrenBefore = await getChildren(api, collectionId, parentNftId);
+    expect(childrenBefore.length === 1, 'Error: parent NFT should have children')
+      .to.be.true;
+
+    const child = childrenBefore[0];
+    expect(child.collectionId.eq(collectionId), 'Error: invalid child collection Id')
+      .to.be.true;
+
+    expect(child.nftId.eq(childNftId), 'Error: invalid child NFT Id')
+      .to.be.true;
+
+    await burnNft(api, Alice, collectionId, childNftId);
+
+    const childrenAfter = await getChildren(api, collectionId, parentNftId);
+
+    expect(childrenAfter.length === 0, 'Error: children should be burned').to.be.true;
+  });
+
+  it('[negative] burn non-existing NFT', async () => {
+    await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    ).then(async (collectionId) => {
+      const tx = burnNft(api, Alice, collectionId, 99999);
+      await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);
+    });
+  });
+
+  it('[negative] burn not an owner NFT user', async () => {
+    await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    ).then(async (collectionId) => {
+      const nftId = await mintNft(
+        api,
+        Alice,
+        Alice,
+        collectionId,
+        'nft-metadata',
+      );
+      const tx = burnNft(api, Bob, collectionId, nftId);
+      await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+    });
+  });
+
+  after(() => {
+    api.disconnect();
+  });
+});
addedtests/src/rmrk/changeCollectionIssuer.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/changeCollectionIssuer.test.ts
@@ -0,0 +1,52 @@
+import {getApiConnection} from '../substrate/substrate-api';
+import {expectTxFailure} from './util/helpers';
+import {
+  changeIssuer,
+  createCollection,
+} from './util/tx';
+
+describe('integration test: collection issuer', () => {
+  const Alice = '//Alice';
+  const Bob = '//Bob';
+
+  let api: any;
+  before(async () => {
+    api = await getApiConnection();
+  });
+
+  it('change collection issuer', async () => {
+    await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    ).then(async (collectionId) => {
+      await changeIssuer(api, Alice, collectionId, Bob);
+    });
+  });
+
+  it('[negative] change not an owner NFT collection issuer', async () => {
+    await createCollection(api, Bob, 'test-metadata', null, 'test-symbol').then(async (collectionId) => {
+      const tx = changeIssuer(api, Alice, collectionId, Bob);
+      await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+    });
+  });
+
+  it('[negative] change non-existigit NFT collection issuer', async () => {
+    await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    ).then(async () => {
+      const tx = changeIssuer(api, Alice, 99999, Bob);
+      await expectTxFailure(/rmrkCore\.CollectionUnknown/, tx);
+    });
+  });
+
+  after(() => {
+    api.disconnect();
+  });
+});
addedtests/src/rmrk/createBase.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/createBase.test.ts
@@ -0,0 +1,84 @@
+import {getApiConnection} from '../substrate/substrate-api';
+import {createCollection, createBase} from './util/tx';
+
+describe('integration test: create new Base', () => {
+  let api: any;
+  before(async () => { api = await getApiConnection(); });
+
+  const alice = '//Alice';
+
+  it('create empty Base', async () => {
+    await createBase(api, alice, 'empty-base-type', 'EBase', []);
+  });
+
+  it('create Base with fixed part', async () => {
+    await createBase(api, alice, 'fixedpart-base-type', 'FPBase', [
+      {
+        'FixedPart': {
+          id: 42,
+          z: 0,
+          src: 'some-fixed-url',
+        },
+      },
+    ]);
+  });
+
+  it('create Base with slot part (no collection)', async () => {
+    await createBase(api, alice, 'slotpart-base-type', 'SPBase', [
+      {
+        'SlotPart': {
+          id: 112,
+          equippable: 'Empty',
+          z: 0,
+          src: 'some-fallback-slot-url',
+        },
+      },
+    ]);
+  });
+
+  it('create Base with slot part (any collection)', async () => {
+    await createBase(api, alice, 'slotpartany-base-type', 'SPABase', [
+      {
+        'SlotPart': {
+          id: 222,
+          equippable: 'All',
+          z: 1,
+          src: 'some-fallback-slot-url',
+        },
+      },
+    ]);
+  });
+
+  it('create Base with slot part (custom collections)', async () => {
+    const firstCollectionId = await createCollection(
+      api,
+      alice,
+      'first-collection-meta',
+      null,
+      'first-collection',
+    );
+
+    const secondCollectionId = await createCollection(
+      api,
+      alice,
+      'first-collection-meta',
+      null,
+      'first-collection',
+    );
+
+    await createBase(api, alice, 'slotpartcustom-base-type', 'SPCBase', [
+      {
+        'SlotPart': {
+          id: 1024,
+          equippable: {
+            'Custom': [firstCollectionId, secondCollectionId],
+          },
+          z: 2,
+          src: 'some-fallback-slot-url',
+        },
+      },
+    ]);
+  });
+
+  after(() => { api.disconnect(); });
+});
addedtests/src/rmrk/createCollection.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/createCollection.test.ts
@@ -0,0 +1,19 @@
+import {getApiConnection} from '../substrate/substrate-api';
+import {createCollection} from './util/tx';
+
+describe('Integration test: create new collection', () => {
+  let api: any;
+  before(async () => { api = await getApiConnection(); });
+
+  const alice = '//Alice';
+
+  it('create NFT collection', async () => {
+    await createCollection(api, alice, 'test-metadata', 42, 'test-symbol');
+  });
+
+  it('create NFT collection without token limit', async () => {
+    await createCollection(api, alice, 'no-limit-metadata', null, 'no-limit-symbol');
+  });
+
+  after(() => { api.disconnect(); });
+});
addedtests/src/rmrk/deleteCollection.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/deleteCollection.test.ts
@@ -0,0 +1,47 @@
+import {getApiConnection} from '../substrate/substrate-api';
+import {expectTxFailure} from './util/helpers';
+import {createCollection, deleteCollection} from './util/tx';
+
+describe('integration test: delete collection', () => {
+  let api: any;
+  before(async () => {
+    api = await getApiConnection();
+  });
+
+  const Alice = '//Alice';
+  const Bob = '//Bob';
+
+  it('delete NFT collection', async () => {
+    await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    ).then(async (collectionId) => {
+      await deleteCollection(api, Alice, collectionId.toString());
+    });
+  });
+
+  it('[negative] delete non-existing NFT collection', async () => {
+    const tx = deleteCollection(api, Alice, '99999');
+    await expectTxFailure(/rmrkCore\.CollectionUnknown/, tx);
+  });
+
+  it('[negative] delete not an owner NFT collection', async () => {
+    await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    ).then(async (collectionId) => {
+      const tx = deleteCollection(api, Bob, collectionId.toString());
+      await expectTxFailure(/rmrkCore.NoPermission/, tx);
+    });
+  });
+
+  after(() => {
+    api.disconnect();
+  });
+});
addedtests/src/rmrk/equipNft.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/equipNft.test.ts
@@ -0,0 +1,340 @@
+import {ApiPromise} from '@polkadot/api';
+import {expect} from 'chai';
+import {getApiConnection} from '../substrate/substrate-api';
+import {getNft, getParts, NftIdTuple} from './util/fetch';
+import {expectTxFailure} from './util/helpers';
+import {
+  addNftComposableResource,
+  addNftSlotResource,
+  createBase,
+  createCollection,
+  equipNft,
+  mintNft,
+  sendNft,
+  unequipNft,
+} from './util/tx';
+
+const Alice = '//Alice';
+const Bob = '//Bob';
+
+const composableParts: number[] = [5, 2, 7];
+const composableSrc = 'test-cmp-src';
+const composableMetadata = 'test-cmp-metadata';
+const composableLicense = 'test-comp-license';
+const composableThumb = 'test-comp-thumb';
+
+const slotSrc = 'test-slot-src';
+const slotLicense = 'test-slot-license';
+const slotMetadata = 'test-slot-metadata';
+const slotThumb = 'test-slot-thumb';
+
+const slotId = 1;
+
+async function createTestCollection(api: ApiPromise): Promise<number> {
+  return createCollection(
+    api,
+    Alice,
+    'test-metadata',
+    null,
+    'test-symbol',
+  );
+}
+
+async function mintTestNft(api: ApiPromise, collectionId: number): Promise<number> {
+  return await mintNft(
+    api,
+    Alice,
+    Alice,
+    collectionId,
+    'nft-metadata',
+  );
+}
+
+async function mintChildNft(api: ApiPromise, collectionId: number, parentNftId: number): Promise<number> {
+  const nftChildId = await mintTestNft(api, collectionId);
+
+  const parentNFT: NftIdTuple = [collectionId, parentNftId];
+
+  await sendNft(api, 'sent', Alice, collectionId, nftChildId, parentNFT);
+
+  return nftChildId;
+}
+
+async function createTestBase(api: ApiPromise): Promise<number> {
+  return createBase(api, Alice, 'test-base', 'DTBase', [
+    {
+      SlotPart: {
+        id: slotId,
+        equippable: 'All',
+        z: 1,
+        src: slotSrc,
+      },
+    },
+  ]);
+}
+
+async function addTestComposable(api: ApiPromise, collectionId: number, nftId: number, baseId: number) {
+  await addNftComposableResource(
+    api,
+    Alice,
+    'added',
+    collectionId,
+    nftId,
+    composableParts,
+    baseId,
+    composableSrc,
+    composableMetadata,
+    composableLicense,
+    composableThumb,
+  );
+}
+
+async function addTestSlot(api: ApiPromise, collectionId: number, nftId: number, baseId: number, slotId: number): Promise<number> {
+  return await addNftSlotResource(
+    api,
+    Alice,
+    'added',
+    collectionId,
+    nftId,
+    baseId,
+    slotId,
+    slotSrc,
+    slotMetadata,
+    slotLicense,
+    slotThumb,
+  );
+}
+
+async function checkEquipStatus(
+  api: ApiPromise,
+  expectedStatus: 'equipped' | 'unequipped',
+  collectionId: number,
+  nftId: number,
+) {
+  const itemNftDataOpt = await getNft(api, collectionId, nftId);
+  expect(itemNftDataOpt.isSome, 'Error: unable to fetch item NFT data');
+
+  const itemNftData = itemNftDataOpt.unwrap();
+  expect(itemNftData.equipped.isTrue, `Error: item NFT should be ${expectedStatus}`)
+    .to.be.equal(expectedStatus === 'equipped');
+}
+
+describe.skip('integration test: Equip NFT', () => {
+
+  let api: any;
+  before(async () => {
+    api = await getApiConnection();
+  });
+
+  it('equip nft', async () => {
+    const collectionId = await createTestCollection(api);
+    const nftParentId = await mintTestNft(api, collectionId);
+    const nftChildId = await mintChildNft(api, collectionId, nftParentId);
+
+    const baseId = await createTestBase(api);
+
+    await addTestComposable(api, collectionId, nftParentId, baseId);
+    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);
+
+    const equipperNFT: NftIdTuple = [collectionId, nftParentId];
+    const itemNFT: NftIdTuple = [collectionId, nftChildId];
+
+    await equipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, slotId);
+
+    await checkEquipStatus(api, 'equipped', collectionId, nftChildId);
+  });
+
+  it('unequip nft', async () => {
+    const collectionId = await createTestCollection(api);
+    const nftParentId = await mintTestNft(api, collectionId);
+    const nftChildId = await mintChildNft(api, collectionId, nftParentId);
+
+    const baseId = await createTestBase(api);
+
+    await addTestComposable(api, collectionId, nftParentId, baseId);
+    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);
+
+    const equipperNFT: NftIdTuple = [collectionId, nftParentId];
+    const itemNFT: NftIdTuple = [collectionId, nftChildId];
+
+    await equipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, slotId);
+
+    await checkEquipStatus(api, 'equipped', collectionId, nftChildId);
+
+    await unequipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, slotId);
+    await checkEquipStatus(api, 'unequipped', collectionId, nftChildId);
+  });
+
+  it('[negative] equip NFT onto non-existing NFT', async () => {
+    const collectionId = await createTestCollection(api);
+
+    const nftChildId = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionId,
+      'nft-metadata',
+    );
+
+    const itemNFT: NftIdTuple = [collectionId, nftChildId];
+    const invalidEquipperNFT: NftIdTuple = [collectionId, 9999999];
+
+    const baseId = 0;
+    const resourceId = 0;
+
+    const tx = equipNft(api, Alice, itemNFT, invalidEquipperNFT, resourceId, baseId, slotId);
+    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);
+  });
+
+  it('[negative] equip non-existing NFT', async () => {
+    const collectionId = await createTestCollection(api);
+    const nftParentId = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionId,
+      'nft-metadata',
+    );
+
+    const baseId = await createTestBase(api);
+
+    await addTestComposable(api, collectionId, nftParentId, baseId);
+
+    const equipperNFT: NftIdTuple = [collectionId, nftParentId];
+    const invalidItemNFT: NftIdTuple = [collectionId, 99999999];
+
+    const resourceId = 0;
+
+    const tx = equipNft(api, Alice, invalidItemNFT, equipperNFT, resourceId, baseId, slotId);
+    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);
+  });
+
+  it('[negative] equip NFT by a not-an-owner user', async () => {
+    const collectionId = await createTestCollection(api);
+    const nftParentId = await mintTestNft(api, collectionId);
+    const nftChildId = await mintChildNft(api, collectionId, nftParentId);
+
+    const baseId = await createTestBase(api);
+
+    await addTestComposable(api, collectionId, nftParentId, baseId);
+
+    const equipperNFT: NftIdTuple = [collectionId, nftParentId];
+    const itemNFT: NftIdTuple = [collectionId, nftChildId];
+
+    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);
+
+    const tx = equipNft(api, Bob, itemNFT, equipperNFT, resourceId, baseId, slotId);
+    await expectTxFailure(/rmrkEquip\.PermissionError/, tx);
+  });
+
+  it('[negative] unable to equip NFT onto indirect parent NFT', async () => {
+    const collectionId = await createTestCollection(api);
+    const nftParentId = await mintTestNft(api, collectionId);
+    const nftChildId = await mintChildNft(api, collectionId, nftParentId);
+    const nftGrandchildId = await mintChildNft(api, collectionId, nftChildId);
+
+    const baseId = await createTestBase(api);
+
+    await addTestComposable(api, collectionId, nftParentId, baseId);
+    const resourceId = await addTestSlot(api, collectionId, nftGrandchildId, baseId, slotId);
+
+    const equipperNFT: NftIdTuple = [collectionId, nftParentId];
+    const itemNFT: NftIdTuple = [collectionId, nftGrandchildId];
+
+    const tx = equipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, slotId);
+    await expectTxFailure(/rmrkEquip\.MustBeDirectParent/, tx);
+  });
+
+  it('[negative] unable to equip NFT onto parent NFT with another base', async () => {
+    const collectionId = await createTestCollection(api);
+    const nftParentId = await mintTestNft(api, collectionId);
+    const nftChildId = await mintChildNft(api, collectionId, nftParentId);
+
+    const baseId = await createTestBase(api);
+
+    await addTestComposable(api, collectionId, nftParentId, baseId);
+    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);
+
+    const equipperNFT: NftIdTuple = [collectionId, nftParentId];
+    const itemNFT: NftIdTuple = [collectionId, nftChildId];
+
+    const invalidBaseId = 99999;
+
+    const tx = equipNft(api, Alice, itemNFT, equipperNFT, resourceId, invalidBaseId, slotId);
+    await expectTxFailure(/rmrkEquip\.NoResourceForThisBaseFoundOnNft/, tx);
+  });
+
+  it('[negative] unable to equip NFT into slot with another id', async () => {
+    const collectionId = await createTestCollection(api);
+    const nftParentId = await mintTestNft(api, collectionId);
+    const nftChildId = await mintChildNft(api, collectionId, nftParentId);
+
+    const baseId = await createTestBase(api);
+
+    await addTestComposable(api, collectionId, nftParentId, baseId);
+    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);
+
+    const equipperNFT: NftIdTuple = [collectionId, nftParentId];
+    const itemNFT: NftIdTuple = [collectionId, nftChildId];
+
+    const incorrectSlotId = slotId + 1;
+    const tx = equipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, incorrectSlotId);
+    await expectTxFailure(/rmrkEquip\.ItemHasNoResourceToEquipThere/, tx);
+  });
+
+  it('[negative] unable to equip NFT with incorrect slot (fixed part)', async () => {
+    const collectionId = await createTestCollection(api);
+    const nftParentId = await mintTestNft(api, collectionId);
+    const nftChildId = await mintChildNft(api, collectionId, nftParentId);
+
+    const baseId = await createBase(api, Alice, 'test-base', 'DTBase', [
+      {
+        FixedPart: {
+          id: slotId,
+          equippable: 'All',
+          z: 1,
+          src: slotSrc,
+        },
+      },
+    ]);
+
+    await addTestComposable(api, collectionId, nftParentId, baseId);
+    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);
+
+    const equipperNFT: NftIdTuple = [collectionId, nftParentId];
+    const itemNFT: NftIdTuple = [collectionId, nftChildId];
+
+    const tx = equipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, slotId);
+    await expectTxFailure(/rmrkEquip\.CantEquipFixedPart/, tx);
+  });
+
+  it('[negative] unable to equip NFT from a collection that is not allowed by the slot', async () => {
+    const collectionId = await createTestCollection(api);
+    const nftParentId = await mintTestNft(api, collectionId);
+    const nftChildId = await mintChildNft(api, collectionId, nftParentId);
+
+    const baseId = await createBase(api, Alice, 'test-base', 'DTBase', [
+      {
+        SlotPart: {
+          id: 1,
+          z: 1,
+          equippable: 'Empty',
+          src: slotSrc,
+        },
+      },
+    ]);
+
+    await addTestComposable(api, collectionId, nftParentId, baseId);
+    const resourceId = await addTestSlot(api, collectionId, nftChildId, baseId, slotId);
+
+    const equipperNFT: NftIdTuple = [collectionId, nftParentId];
+    const itemNFT: NftIdTuple = [collectionId, nftChildId];
+
+    const tx = equipNft(api, Alice, itemNFT, equipperNFT, resourceId, baseId, slotId);
+    await expectTxFailure(/rmrkEquip\.CollectionNotEquippable/, tx);
+  });
+
+  after(() => {
+    api.disconnect();
+  });
+});
addedtests/src/rmrk/getOwnedNfts.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/getOwnedNfts.test.ts
@@ -0,0 +1,74 @@
+import {expect} from 'chai';
+import {getApiConnection} from '../substrate/substrate-api';
+import {getOwnedNfts} from './util/fetch';
+import {mintNft, createCollection} from './util/tx';
+
+describe('integration test: get owned NFTs', () => {
+  let api: any;
+  before(async () => { api = await getApiConnection(); });
+
+  const alice = '//Alice';
+
+  it('fetch all NFTs owned by a user', async () => {
+    const owner = alice;
+    const collectionMetadata = 'aliceCollectionMetadata';
+    const collectionMax = null;
+    const collectionSymbol = 'AliceSym';
+    const recipientUri = null;
+    const royalty = null;
+    const nftMetadata = 'alice-NFT-metadata';
+
+    const collectionId = await createCollection(
+      api,
+      alice,
+      collectionMetadata,
+      collectionMax,
+      collectionSymbol,
+    );
+
+    const nftIds = [
+      await mintNft(
+        api,
+        alice,
+        owner,
+        collectionId,
+        nftMetadata + '-0',
+        recipientUri,
+        royalty,
+      ),
+      await mintNft(
+        api,
+        alice,
+        owner,
+        collectionId,
+        nftMetadata + '-1',
+        recipientUri,
+        royalty,
+      ),
+      await mintNft(
+        api,
+        alice,
+        owner,
+        collectionId,
+        nftMetadata + '-2',
+        recipientUri,
+        royalty,
+      ),
+    ];
+
+    const ownedNfts = await getOwnedNfts(api, alice, collectionId);
+
+    const isFound = (nftId: number) => {
+      return ownedNfts.find((ownedNftId) => {
+        return ownedNftId === nftId;
+      }) !== undefined;
+    };
+
+    nftIds.forEach((nftId) => {
+      expect(isFound(nftId), `NFT ${nftId} should be owned by ${alice}`)
+        .to.be.true;
+    });
+  });
+
+  after(() => { api.disconnect(); });
+});
addedtests/src/rmrk/lockCollection.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/lockCollection.test.ts
@@ -0,0 +1,117 @@
+import {getApiConnection} from '../substrate/substrate-api';
+import {expectTxFailure} from './util/helpers';
+import {createCollection, lockCollection, mintNft} from './util/tx';
+
+describe('integration test: lock collection', () => {
+  const Alice = '//Alice';
+  const Bob = '//Bob';
+  const Max = 5;
+
+  let api: any;
+  before(async () => {
+    api = await getApiConnection();
+  });
+
+  it('lock collection', async () => {
+    await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    ).then(async (collectionId) => {
+      await lockCollection(api, Alice, collectionId);
+    });
+  });
+
+  it('[negative] lock non-existing NFT collection', async () => {
+    const tx = lockCollection(api, Alice, 99999);
+    await expectTxFailure(/rmrkCore\.CollectionUnknown/, tx);
+  });
+
+  it('[negative] lock not an owner NFT collection issuer', async () => {
+    await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    ).then(async (collectionId) => {
+      const tx = lockCollection(api, Bob, collectionId);
+      await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+    });
+  });
+
+  it('lock collection with minting', async () => {
+    await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      Max,
+      'test-symbol',
+    ).then(async (collectionId) => {
+      for (let i = 0; i < 5; i++) {
+        await mintNft(
+          api,
+          Alice,
+          Alice,
+          collectionId,
+          'test-metadata',
+          null,
+          null,
+        );
+      }
+      await lockCollection(api, Alice, collectionId, Max);
+    });
+  });
+
+  it('[negative] unable to mint NFT inside a locked collection', async () => {
+    await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      Max,
+      'test-symbol',
+    ).then(async (collectionId) => {
+      await lockCollection(api, Alice, collectionId);
+      const tx = mintNft(
+        api,
+        Alice,
+        Alice,
+        collectionId,
+        'test-metadata',
+        null,
+        null,
+      );
+      await expectTxFailure(/rmrkCore\.CollectionFullOrLocked/, tx);
+    });
+  });
+
+  it('[negative] unable to mint NFT inside a full collection', async () => {
+    await createCollection(api, Alice, 'test-metadata', 1, 'test-symbol').then(async (collectionId) => {
+      await mintNft(
+        api,
+        Alice,
+        Alice,
+        collectionId,
+        'test-metadata',
+        null,
+        null,
+      );
+      const tx = mintNft(
+        api,
+        Alice,
+        Alice,
+        collectionId,
+        'test-metadata',
+        null,
+        null,
+      );
+      await expectTxFailure(/rmrkCore\.CollectionFullOrLocked/, tx);
+    });
+  });
+
+  after(() => {
+    api.disconnect();
+  });
+});
addedtests/src/rmrk/mintNft.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/mintNft.test.ts
@@ -0,0 +1,206 @@
+import {expect} from 'chai';
+import {getApiConnection} from '../substrate/substrate-api';
+import {getNft} from './util/fetch';
+import {expectTxFailure} from './util/helpers';
+import {createCollection, mintNft} from './util/tx';
+
+describe('integration test: mint new NFT', () => {
+  let api: any;
+  before(async () => { api = await getApiConnection(); });
+
+  const alice = '//Alice';
+  const bob = '//Bob';
+  const maxCollectionId = 0xFFFFFFFF;
+  const maxNftId = 0xFFFFFFFF;
+
+  it('mint NFT', async () => {
+    const owner = null;
+    const collectionMetadata = 'mintingCollectionMetadata';
+    const collectionMax = null;
+    const collectionSymbol = 'MCS';
+    const recipientUri = null;
+    const royalty = null;
+    const nftMetadata = 'NFT-test-metadata';
+
+    const collectionId = await createCollection(
+      api,
+      alice,
+      collectionMetadata,
+      collectionMax,
+      collectionSymbol,
+    );
+
+    await mintNft(
+      api,
+      alice,
+      owner,
+      collectionId,
+      nftMetadata,
+      recipientUri,
+      royalty,
+    );
+  });
+
+  it('mint NFT and set another owner', async () => {
+    const owner = bob;
+    const collectionMetadata = 'setOwnerCollectionMetadata';
+    const collectionMax = null;
+    const collectionSymbol = 'SOCS';
+    const recipientUri = null;
+    const royalty = null;
+    const nftMetadata = 'setOwner-NFT-metadata';
+
+    const collectionId = await createCollection(
+      api,
+      alice,
+      collectionMetadata,
+      collectionMax,
+      collectionSymbol,
+    );
+
+    await mintNft(
+      api,
+      alice,
+      owner,
+      collectionId,
+      nftMetadata,
+      recipientUri,
+      royalty,
+    );
+  });
+
+  it('mint NFT with recipient and roalty', async () => {
+    const owner = alice;
+    const collectionMetadata = 'mintingCollectionMetadata';
+    const collectionMax = null;
+    const collectionSymbol = 'MCS';
+    const recipientUri = bob;
+    const royalty = 70000;
+    const nftMetadata = 'recipient-royalty-NFT-test-metadata';
+
+    const collectionId = await createCollection(
+      api,
+      alice,
+      collectionMetadata,
+      collectionMax,
+      collectionSymbol,
+    );
+
+    await mintNft(
+      api,
+      alice,
+      owner,
+      collectionId,
+      nftMetadata,
+      recipientUri,
+      royalty,
+    );
+  });
+
+  it('mint NFT with resources', async () => {
+    const owner = alice;
+    const collectionMetadata = 'mintingCollectionMetadata';
+    const collectionMax = null;
+    const collectionSymbol = 'MCS';
+    const nftMetadata = 'NFT-with-resources-test-metadata';
+    const resources = [
+      {
+        basic: {
+          metadata: 'basic-resource-nft-minting',
+        },
+      }, {
+        slot: {
+          metadata: 'slot-resource-nft-minting',
+          slot: 9,
+        },
+      }, {
+        composable: {
+          metadata: 'composable-resource-nft-minting',
+          parts: [0, 5, 2],
+        },
+      }, {
+        slot: {
+          metadata: 'slot-resource-nft-minting-2',
+          thumb: 'srnm2',
+          base: 5,
+        },
+      },
+    ];
+
+    const collectionId = await createCollection(
+      api,
+      alice,
+      collectionMetadata,
+      collectionMax,
+      collectionSymbol,
+    );
+
+    await mintNft(
+      api,
+      alice,
+      owner,
+      collectionId,
+      nftMetadata,
+      null,
+      null,
+      true,
+      resources,
+    );
+  });
+
+  it('[negative] unable to mint NFT within non-existing collection', async () => {
+    const owner = alice;
+    const recipientUri = null;
+    const royalty = null;
+    const nftMetadata = 'NFT-test-metadata';
+
+    const tx = mintNft(
+      api,
+      alice,
+      owner,
+      maxCollectionId,
+      nftMetadata,
+      recipientUri,
+      royalty,
+    );
+
+    await expectTxFailure(/rmrkCore\.CollectionUnknown/, tx);
+  });
+
+  it("[negative] unable to mint NFT by a user that isn't the owner of the collection", async () => {
+    const owner = alice;
+    const collectionMetadata = 'mintingCollectionMetadata';
+    const collectionMax = null;
+    const collectionSymbol = 'MCS';
+    const recipientUri = null;
+    const royalty = null;
+    const nftMetadata = 'NFT-test-metadata';
+
+    const collectionId = await createCollection(
+      api,
+      alice,
+      collectionMetadata,
+      collectionMax,
+      collectionSymbol,
+    );
+
+    const tx = mintNft(
+      api,
+      bob,
+      owner,
+      collectionId,
+      nftMetadata,
+      recipientUri,
+      royalty,
+    );
+
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+  });
+
+  it('[negative] unable to fetch non-existing NFT', async () => {
+    const nft = await getNft(api, maxCollectionId, maxNftId);
+    expect(nft.isSome).to.be.false;
+  });
+
+  after(() => { api.disconnect(); });
+});
addedtests/src/rmrk/rejectNft.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/rejectNft.test.ts
@@ -0,0 +1,89 @@
+import {expect} from 'chai';
+import {getApiConnection} from '../substrate/substrate-api';
+import {
+  createCollection,
+  mintNft,
+  sendNft,
+  rejectNft,
+} from './util/tx';
+import {getChildren, NftIdTuple} from './util/fetch';
+import {isNftChildOfAnother, expectTxFailure} from './util/helpers';
+
+describe('integration test: reject NFT', () => {
+  let api: any;
+  before(async () => { api = await getApiConnection(); });
+
+  const alice = '//Alice';
+  const bob = '//Bob';
+
+  const createTestCollection = async (issuerUri: string) => {
+    return await createCollection(
+      api,
+      issuerUri,
+      'reject-metadata',
+      null,
+      'rjct',
+    );
+  };
+
+  it('reject NFT', async () => {
+    const ownerAlice = alice;
+    const ownerBob = bob;
+
+    const aliceCollectionId = await createTestCollection(alice);
+    const bobCollectionId = await createTestCollection(bob);
+
+    const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, 'child-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];
+
+    await sendNft(api, 'pending', ownerBob, bobCollectionId, childNftId, newOwnerNFT);
+    await rejectNft(api, alice, bobCollectionId, childNftId);
+
+    const isChild = await isNftChildOfAnother(api, bobCollectionId, childNftId, newOwnerNFT);
+    expect(isChild, 'Error: rejected NFT is still a child of the target NFT').to.be.false;
+  });
+
+  it('[negative] unable to reject NFT by a not-an-owner', async () => {
+    const ownerAlice = alice;
+    const ownerBob = bob;
+
+    const aliceCollectionId = await createTestCollection(alice);
+    const bobCollectionId = await createTestCollection(bob);
+
+    const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, 'child-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];
+
+    await sendNft(api, 'pending', ownerBob, bobCollectionId, childNftId, newOwnerNFT);
+    const tx = rejectNft(api, bob, bobCollectionId, childNftId);
+
+    await expectTxFailure(/rmrkCore\.CannotRejectNonOwnedNft/, tx);
+  });
+
+  it('[negative] unable to reject non-existing NFT', async () => {
+    const maxNftId = 0xFFFFFFFF;
+
+    const collectionId = await createTestCollection(alice);
+
+    const tx = rejectNft(api, alice, collectionId, maxNftId);
+
+    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);
+  });
+
+  it('[negative] unable to reject NFT which is not sent', async () => {
+    const ownerAlice = alice;
+
+    const collectionId = await createTestCollection(alice);
+
+    const nftId = await mintNft(api, alice, ownerAlice, collectionId, 'parent-nft-metadata');
+
+    const tx = rejectNft(api, alice, collectionId, nftId);
+
+    await expectTxFailure(/rmrkCore\.CannotRejectNonPendingNft/, tx);
+  });
+
+  after(() => { api.disconnect(); });
+});
addedtests/src/rmrk/removeResource.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/removeResource.test.ts
@@ -0,0 +1,348 @@
+import {expect} from 'chai';
+import privateKey from '../substrate/privateKey';
+import {executeTransaction, getApiConnection} from '../substrate/substrate-api';
+import {getNft, NftIdTuple} from './util/fetch';
+import {expectTxFailure} from './util/helpers';
+import {
+  acceptNft, acceptResourceRemoval, addNftBasicResource,
+  createBase,
+  createCollection,
+  mintNft, removeNftResource, sendNft,
+} from './util/tx';
+
+
+
+
+describe('Integration test: remove nft resource', () => {
+  let api: any;
+  let ss58Format: string;
+  before(async () => {
+    api = await getApiConnection();
+    ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  });
+
+  const Alice = '//Alice';
+  const Bob = '//Bob';
+  const src = 'test-basic-src';
+  const metadata = 'test-basic-metadata';
+  const license = 'test-basic-license';
+  const thumb = 'test-basic-thumb';
+
+  it('deleting a resource directly by the NFT owner', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftAlice = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionIdAlice,
+      'nft-metadata',
+    );
+
+    const resourceId = await addNftBasicResource(
+      api,
+      Alice,
+      'added',
+      collectionIdAlice,
+      nftAlice,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+
+    await removeNftResource(api, 'removed', Alice, collectionIdAlice, nftAlice, resourceId);
+  });
+
+  it('deleting resources indirectly by the NFT owner', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const parentNftId = await mintNft(api, Alice, Alice, collectionIdAlice, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, Alice, Alice, collectionIdAlice, 'child-nft-metadata');
+
+    const resourceId = await addNftBasicResource(
+      api,
+      Alice,
+      'added',
+      collectionIdAlice,
+      childNftId,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+
+    const newOwnerNFT: NftIdTuple = [collectionIdAlice, parentNftId];
+
+    await sendNft(api, 'sent', Alice, collectionIdAlice, childNftId, newOwnerNFT);
+
+    await removeNftResource(api, 'removed', Alice, collectionIdAlice, childNftId, resourceId);
+  });
+
+  it('deleting a resource by the collection owner', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftBob = await mintNft(
+      api,
+      Alice,
+      Bob,
+      collectionIdAlice,
+      'nft-metadata',
+    );
+
+    const resourceId = await addNftBasicResource(
+      api,
+      Alice,
+      'pending',
+      collectionIdAlice,
+      nftBob,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+
+    await removeNftResource(api, 'pending', Alice, collectionIdAlice, nftBob, resourceId);
+    await acceptResourceRemoval(api, Bob, collectionIdAlice, nftBob, resourceId);
+  });
+
+  it('deleting a resource in a nested NFT by the collection owner', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const parentNftId = await mintNft(
+      api,
+      Alice,
+      Bob,
+      collectionIdAlice,
+      'parent-nft-metadata',
+    );
+    const childNftId = await mintNft(
+      api,
+      Alice,
+      Bob,
+      collectionIdAlice,
+      'child-nft-metadata',
+    );
+
+    const resourceId = await addNftBasicResource(
+      api,
+      Alice,
+      'pending',
+      collectionIdAlice,
+      childNftId,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+
+    const newOwnerNFT: NftIdTuple = [collectionIdAlice, parentNftId];
+
+    await sendNft(api, 'sent', Bob, collectionIdAlice, childNftId, newOwnerNFT);
+
+    await removeNftResource(api, 'pending', Alice, collectionIdAlice, childNftId, resourceId);
+    await acceptResourceRemoval(api, Bob, collectionIdAlice, childNftId, resourceId);
+  });
+
+  it('[negative]: can\'t delete a resource in a non-existing collection', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftAlice = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionIdAlice,
+      'nft-metadata',
+    );
+
+    const resourceId = await addNftBasicResource(
+      api,
+      Alice,
+      'added',
+      collectionIdAlice,
+      nftAlice,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+
+    const tx = removeNftResource(api, 'removed', Alice, 0xFFFFFFFF, nftAlice, resourceId);
+    await expectTxFailure(/rmrkCore\.CollectionUnknown/, tx); // FIXME: inappropriate error message (NoAvailableNftId)
+  });
+
+  it('[negative]: only collection owner can delete a resource', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftAlice = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionIdAlice,
+      'nft-metadata',
+    );
+
+    const resourceId = await addNftBasicResource(
+      api,
+      Alice,
+      'added',
+      collectionIdAlice,
+      nftAlice,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+
+    const tx = removeNftResource(api, 'removed', Bob, collectionIdAlice, nftAlice, resourceId);
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+  });
+
+  it('[negative]: cannot delete a resource that does not exist', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftAlice = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionIdAlice,
+      'nft-metadata',
+    );
+
+    const tx = removeNftResource(api, 'removed', Alice, collectionIdAlice, nftAlice, 127);
+    await expectTxFailure(/rmrkCore\.ResourceDoesntExist/, tx);
+  });
+
+  it('[negative]: Cannot accept deleting resource without owner attempt do delete it', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftBob = await mintNft(
+      api,
+      Alice,
+      Bob,
+      collectionIdAlice,
+      'nft-metadata',
+    );
+
+    const resourceId = await addNftBasicResource(
+      api,
+      Alice,
+      'pending',
+      collectionIdAlice,
+      nftBob,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+
+    const tx = acceptResourceRemoval(api, Bob, collectionIdAlice, nftBob, resourceId);
+    await expectTxFailure(/rmrkCore\.ResourceNotPending/, tx);
+  });
+
+  it('[negative]: cannot confirm the deletion of a non-existing resource', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftBob = await mintNft(
+      api,
+      Alice,
+      Bob,
+      collectionIdAlice,
+      'nft-metadata',
+    );
+
+    const tx = acceptResourceRemoval(api, Bob, collectionIdAlice, nftBob, 127);
+    await expectTxFailure(/rmrkCore\.ResourceDoesntExist/, tx);
+  });
+
+  it('[negative]: Non-owner user cannot confirm the deletion of resource', async () => {
+    const collectionIdAlice = await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    );
+
+    const nftAlice = await mintNft(
+      api,
+      Alice,
+      Alice,
+      collectionIdAlice,
+      'nft-metadata',
+    );
+
+    const resourceId = await addNftBasicResource(
+      api,
+      Alice,
+      'added',
+      collectionIdAlice,
+      nftAlice,
+      src,
+      metadata,
+      license,
+      thumb,
+    );
+
+    const tx = acceptResourceRemoval(api, Bob, collectionIdAlice, nftAlice, resourceId);
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+  });
+
+  after(() => {
+    api.disconnect();
+  });
+});
deletedtests/src/rmrk/rmrk.test.tsdiffbeforeafterboth
--- a/tests/src/rmrk/rmrk.test.ts
+++ /dev/null
@@ -1,251 +0,0 @@
-import {expect} from 'chai';
-import privateKey from '../substrate/privateKey';
-import usingApi, {executeTransaction} from '../substrate/substrate-api';
-import {
-  createCollectionExpectSuccess,
-  createItemExpectSuccess,
-  getCreateCollectionResult,
-  getDetailedCollectionInfo,
-  getGenericResult,
-  normalizeAccountId,
-} from '../util/helpers';
-import {IKeyringPair} from '@polkadot/types/types';
-import {ApiPromise} from '@polkadot/api';
-import {it} from 'mocha';
-
-let alice: IKeyringPair;
-let bob: IKeyringPair;
-
-async function createRmrkCollection(api: ApiPromise, sender: IKeyringPair): Promise<{uniqueId: number, rmrkId: number}> {
-  const tx = api.tx.rmrkCore.createCollection('metadata', null, 'symbol');
-  const events = await executeTransaction(api, sender, tx);
-
-  const uniqueResult = getCreateCollectionResult(events);
-  const rmrkResult = getGenericResult(events, 'rmrkCore', 'CollectionCreated', (data) => {
-    return parseInt(data[1].toString(), 10);
-  });
-
-  return {
-    uniqueId: uniqueResult.collectionId,
-    rmrkId: rmrkResult.data!,
-  };
-}
-
-async function createRmrkNft(api: ApiPromise, sender: IKeyringPair, collectionId: number): Promise<number> {
-  const tx = api.tx.rmrkCore.mintNft(
-    sender.address,
-    collectionId,
-    sender.address,
-    null,
-    'nft-metadata',
-    true,
-    null,
-  );
-  const events = await executeTransaction(api, sender, tx);
-  const result = getGenericResult(events, 'rmrkCore', 'NftMinted', (data) => {
-    return parseInt(data[2].toString(), 10);
-  });
-
-  return result.data!;
-}
-
-async function isUnique(): Promise<boolean> {
-  return usingApi(async api => {
-    const chain = await api.rpc.system.chain();
-
-    return chain.eq('UNIQUE');
-  });
-}
-
-describe('RMRK External Integration Test', async () => {
-  const it_rmrk = (await isUnique() ? it : it.skip);
-
-  before(async () => {
-    await usingApi(async (api, privateKeyWrapper) => {
-      alice = privateKeyWrapper('//Alice');
-
-      
-    });
-  });
-
-  it_rmrk('Creates a new RMRK collection that is mapped to a different ID and is tagged as external', async () => {
-    await usingApi(async api => {
-      // throwaway collection to bump last Unique collection ID to test ID mapping
-      await createCollectionExpectSuccess();
-
-      const collectionIds = await createRmrkCollection(api, alice);
-
-      expect(collectionIds.rmrkId).to.be.lessThan(collectionIds.uniqueId, 'collection ID mapping');
-
-      const collection = (await getDetailedCollectionInfo(api, collectionIds.uniqueId))!;
-      expect(collection.readOnly.toHuman(), 'tagged external').to.be.true;
-    });
-  });
-});
-
-describe('Negative Integration Test: External Collections, Internal Ops', async () => {
-  let uniqueCollectionId: number;
-  let rmrkCollectionId: number;
-  let rmrkNftId: number;
-
-  const it_rmrk = (await isUnique() ? it : it.skip);
-
-  before(async () => {
-    await usingApi(async (api, privateKeyWrapper) => {
-      alice = privateKeyWrapper('//Alice');
-      bob = privateKeyWrapper('//Bob');
-
-      const collectionIds = await createRmrkCollection(api, alice);
-      uniqueCollectionId = collectionIds.uniqueId;
-      rmrkCollectionId = collectionIds.rmrkId;
-
-      rmrkNftId = await createRmrkNft(api, alice, rmrkCollectionId);
-    });
-  });
-
-  it_rmrk('[Negative] Forbids Unique operations with an external collection, handled by dispatch_call', async () => {
-    await usingApi(async api => {
-      // Collection item creation
-
-      const txCreateItem = api.tx.unique.createItem(uniqueCollectionId, normalizeAccountId(alice), 'NFT');
-      await expect(executeTransaction(api, alice, txCreateItem), 'creating item')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txCreateMultipleItems = api.tx.unique.createMultipleItems(uniqueCollectionId, normalizeAccountId(alice), [{NFT: {}}, {NFT: {}}]);
-      await expect(executeTransaction(api, alice, txCreateMultipleItems), 'creating multiple')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txCreateMultipleItemsEx = api.tx.unique.createMultipleItemsEx(uniqueCollectionId, {NFT: [{}]});
-      await expect(executeTransaction(api, alice, txCreateMultipleItemsEx), 'creating multiple ex')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      // Collection properties
-
-      const txSetCollectionProperties = api.tx.unique.setCollectionProperties(uniqueCollectionId, [{key: 'a', value: '1'}, {key: 'b'}]);
-      await expect(executeTransaction(api, alice, txSetCollectionProperties), 'setting collection properties')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txDeleteCollectionProperties = api.tx.unique.deleteCollectionProperties(uniqueCollectionId, ['a']);
-      await expect(executeTransaction(api, alice, txDeleteCollectionProperties), 'deleting collection properties')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txsetTokenPropertyPermissions = api.tx.unique.setTokenPropertyPermissions(uniqueCollectionId, [{key: 'a', permission: {mutable: true}}]);
-      await expect(executeTransaction(api, alice, txsetTokenPropertyPermissions), 'setting property permissions')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      // NFT
-
-      const txBurn = api.tx.unique.burnItem(uniqueCollectionId, rmrkNftId, 1);
-      await expect(executeTransaction(api, alice, txBurn), 'burning').to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txBurnFrom = api.tx.unique.burnFrom(uniqueCollectionId, normalizeAccountId(alice), rmrkNftId, 1);
-      await expect(executeTransaction(api, alice, txBurnFrom), 'burning-from').to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txTransfer = api.tx.unique.transfer(normalizeAccountId(bob), uniqueCollectionId, rmrkNftId, 1);
-      await expect(executeTransaction(api, alice, txTransfer), 'transferring').to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txApprove = api.tx.unique.approve(normalizeAccountId(bob), uniqueCollectionId, rmrkNftId, 1);
-      await expect(executeTransaction(api, alice, txApprove), 'approving').to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txTransferFrom = api.tx.unique.transferFrom(normalizeAccountId(alice), normalizeAccountId(bob), uniqueCollectionId, rmrkNftId, 1);
-      await expect(executeTransaction(api, alice, txTransferFrom), 'transferring-from').to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      // NFT properties
-
-      const txSetTokenProperties = api.tx.unique.setTokenProperties(uniqueCollectionId, rmrkNftId, [{key: 'a', value: '2'}]);
-      await expect(executeTransaction(api, alice, txSetTokenProperties), 'setting token properties')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txDeleteTokenProperties = api.tx.unique.deleteTokenProperties(uniqueCollectionId, rmrkNftId, ['a']);
-      await expect(executeTransaction(api, alice, txDeleteTokenProperties), 'deleting token properties')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-    });
-  });
-
-  it_rmrk('[Negative] Forbids Unique collection operations with an external collection', async () => {
-    await usingApi(async api => {
-      const txDestroyCollection = api.tx.unique.destroyCollection(uniqueCollectionId);
-      await expect(executeTransaction(api, alice, txDestroyCollection), 'destroying collection')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      // Allow list
-
-      const txAddAllowList = api.tx.unique.addToAllowList(uniqueCollectionId, normalizeAccountId(bob));
-      await expect(executeTransaction(api, alice, txAddAllowList), 'adding to allow list')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txRemoveAllowList = api.tx.unique.removeFromAllowList(uniqueCollectionId, normalizeAccountId(bob));
-      await expect(executeTransaction(api, alice, txRemoveAllowList), 'removing from allowlist')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      // Owner / Admin / Sponsor
-
-      const txChangeOwner = api.tx.unique.changeCollectionOwner(uniqueCollectionId, bob.address);
-      await expect(executeTransaction(api, alice, txChangeOwner), 'changing owner')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txAddAdmin = api.tx.unique.addCollectionAdmin(uniqueCollectionId, normalizeAccountId(bob));
-      await expect(executeTransaction(api, alice, txAddAdmin), 'adding admin')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txRemoveAdmin = api.tx.unique.removeCollectionAdmin(uniqueCollectionId, normalizeAccountId(bob));
-      await expect(executeTransaction(api, alice, txRemoveAdmin), 'removing admin')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txAddCollectionSponsor = api.tx.unique.setCollectionSponsor(uniqueCollectionId, bob.address);
-      await expect(executeTransaction(api, alice, txAddCollectionSponsor), 'setting sponsor')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txConfirmCollectionSponsor = api.tx.unique.confirmSponsorship(uniqueCollectionId);
-      await expect(executeTransaction(api, alice, txConfirmCollectionSponsor), 'confirming sponsor')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txRemoveCollectionSponsor = api.tx.unique.removeCollectionSponsor(uniqueCollectionId);
-      await expect(executeTransaction(api, alice, txRemoveCollectionSponsor), 'removing sponsor')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-      
-      // Limits / permissions / transfers
-
-      const txSetTransfers = api.tx.unique.setTransfersEnabledFlag(uniqueCollectionId, true);
-      await expect(executeTransaction(api, alice, txSetTransfers), 'setting transfers enabled flag')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txSetLimits = api.tx.unique.setCollectionLimits(uniqueCollectionId, {transfersEnabled: false});
-      await expect(executeTransaction(api, alice, txSetLimits), 'setting collection limits')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-
-      const txSetPermissions = api.tx.unique.setCollectionPermissions(uniqueCollectionId, {access: 'AllowList'});
-      await expect(executeTransaction(api, alice, txSetPermissions), 'setting collection permissions')
-        .to.be.rejectedWith(/common\.CollectionIsExternal/);
-    });
-  });
-});
-
-describe('Negative Integration Test: Internal Collections, External Ops', async () => {
-  let collectionId: number;
-  let nftId: number;
-
-  const it_rmrk = (await isUnique() ? it : it.skip);
-
-  before(async () => {
-    await usingApi(async (api, privateKeyWrapper) => {
-      alice = privateKeyWrapper('//Alice');
-      bob = privateKeyWrapper('//Bob');
-
-      collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
-      nftId = await createItemExpectSuccess(alice, collectionId, 'NFT');
-    });
-  });
-
-  it_rmrk('[Negative] Forbids RMRK operations with the internal collection and NFT (due to the lack of mapping)', async () => {
-    await usingApi(async api => {
-      const txChangeOwner = api.tx.rmrkCore.changeCollectionIssuer(collectionId, bob.address);
-      await expect(executeTransaction(api, alice, txChangeOwner), 'changing collection issuer')
-        .to.be.rejectedWith(/rmrkCore\.CollectionUnknown/);
-
-      const maxBurns = 10;
-      const txBurnItem = api.tx.rmrkCore.burnNft(collectionId, nftId, maxBurns);
-      await expect(executeTransaction(api, alice, txBurnItem), 'burning NFT').to.be.rejectedWith(/rmrkCore\.CollectionUnknown/);
-    });
-  });
-});
addedtests/src/rmrk/rmrkIsolation.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/rmrkIsolation.test.ts
@@ -0,0 +1,250 @@
+import {expect} from 'chai';
+import usingApi, {executeTransaction} from '../substrate/substrate-api';
+import {
+  createCollectionExpectSuccess,
+  createItemExpectSuccess,
+  getCreateCollectionResult,
+  getDetailedCollectionInfo,
+  getGenericResult,
+  normalizeAccountId,
+} from '../util/helpers';
+import {IKeyringPair} from '@polkadot/types/types';
+import {ApiPromise} from '@polkadot/api';
+import {it} from 'mocha';
+
+let alice: IKeyringPair;
+let bob: IKeyringPair;
+
+async function createRmrkCollection(api: ApiPromise, sender: IKeyringPair): Promise<{uniqueId: number, rmrkId: number}> {
+  const tx = api.tx.rmrkCore.createCollection('metadata', null, 'symbol');
+  const events = await executeTransaction(api, sender, tx);
+
+  const uniqueResult = getCreateCollectionResult(events);
+  const rmrkResult = getGenericResult(events, 'rmrkCore', 'CollectionCreated', (data) => {
+    return parseInt(data[1].toString(), 10);
+  });
+
+  return {
+    uniqueId: uniqueResult.collectionId,
+    rmrkId: rmrkResult.data!,
+  };
+}
+
+async function createRmrkNft(api: ApiPromise, sender: IKeyringPair, collectionId: number): Promise<number> {
+  const tx = api.tx.rmrkCore.mintNft(
+    sender.address,
+    collectionId,
+    sender.address,
+    null,
+    'nft-metadata',
+    true,
+    null,
+  );
+  const events = await executeTransaction(api, sender, tx);
+  const result = getGenericResult(events, 'rmrkCore', 'NftMinted', (data) => {
+    return parseInt(data[2].toString(), 10);
+  });
+
+  return result.data!;
+}
+
+async function isUnique(): Promise<boolean> {
+  return usingApi(async api => {
+    const chain = await api.rpc.system.chain();
+
+    return chain.eq('UNIQUE');
+  });
+}
+
+describe('RMRK External Integration Test', async () => {
+  const it_rmrk = (await isUnique() ? it : it.skip);
+
+  before(async () => {
+    await usingApi(async (api, privateKeyWrapper) => {
+      alice = privateKeyWrapper('//Alice');
+
+      
+    });
+  });
+
+  it_rmrk('Creates a new RMRK collection that is mapped to a different ID and is tagged as external', async () => {
+    await usingApi(async api => {
+      // throwaway collection to bump last Unique collection ID to test ID mapping
+      await createCollectionExpectSuccess();
+
+      const collectionIds = await createRmrkCollection(api, alice);
+
+      expect(collectionIds.rmrkId).to.be.lessThan(collectionIds.uniqueId, 'collection ID mapping');
+
+      const collection = (await getDetailedCollectionInfo(api, collectionIds.uniqueId))!;
+      expect(collection.readOnly.toHuman(), 'tagged external').to.be.true;
+    });
+  });
+});
+
+describe('Negative Integration Test: External Collections, Internal Ops', async () => {
+  let uniqueCollectionId: number;
+  let rmrkCollectionId: number;
+  let rmrkNftId: number;
+
+  const it_rmrk = (await isUnique() ? it : it.skip);
+
+  before(async () => {
+    await usingApi(async (api, privateKeyWrapper) => {
+      alice = privateKeyWrapper('//Alice');
+      bob = privateKeyWrapper('//Bob');
+
+      const collectionIds = await createRmrkCollection(api, alice);
+      uniqueCollectionId = collectionIds.uniqueId;
+      rmrkCollectionId = collectionIds.rmrkId;
+
+      rmrkNftId = await createRmrkNft(api, alice, rmrkCollectionId);
+    });
+  });
+
+  it_rmrk('[Negative] Forbids Unique operations with an external collection, handled by dispatch_call', async () => {
+    await usingApi(async api => {
+      // Collection item creation
+
+      const txCreateItem = api.tx.unique.createItem(uniqueCollectionId, normalizeAccountId(alice), 'NFT');
+      await expect(executeTransaction(api, alice, txCreateItem), 'creating item')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txCreateMultipleItems = api.tx.unique.createMultipleItems(uniqueCollectionId, normalizeAccountId(alice), [{NFT: {}}, {NFT: {}}]);
+      await expect(executeTransaction(api, alice, txCreateMultipleItems), 'creating multiple')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txCreateMultipleItemsEx = api.tx.unique.createMultipleItemsEx(uniqueCollectionId, {NFT: [{}]});
+      await expect(executeTransaction(api, alice, txCreateMultipleItemsEx), 'creating multiple ex')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      // Collection properties
+
+      const txSetCollectionProperties = api.tx.unique.setCollectionProperties(uniqueCollectionId, [{key: 'a', value: '1'}, {key: 'b'}]);
+      await expect(executeTransaction(api, alice, txSetCollectionProperties), 'setting collection properties')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txDeleteCollectionProperties = api.tx.unique.deleteCollectionProperties(uniqueCollectionId, ['a']);
+      await expect(executeTransaction(api, alice, txDeleteCollectionProperties), 'deleting collection properties')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txsetTokenPropertyPermissions = api.tx.unique.setTokenPropertyPermissions(uniqueCollectionId, [{key: 'a', permission: {mutable: true}}]);
+      await expect(executeTransaction(api, alice, txsetTokenPropertyPermissions), 'setting property permissions')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      // NFT
+
+      const txBurn = api.tx.unique.burnItem(uniqueCollectionId, rmrkNftId, 1);
+      await expect(executeTransaction(api, alice, txBurn), 'burning').to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txBurnFrom = api.tx.unique.burnFrom(uniqueCollectionId, normalizeAccountId(alice), rmrkNftId, 1);
+      await expect(executeTransaction(api, alice, txBurnFrom), 'burning-from').to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txTransfer = api.tx.unique.transfer(normalizeAccountId(bob), uniqueCollectionId, rmrkNftId, 1);
+      await expect(executeTransaction(api, alice, txTransfer), 'transferring').to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txApprove = api.tx.unique.approve(normalizeAccountId(bob), uniqueCollectionId, rmrkNftId, 1);
+      await expect(executeTransaction(api, alice, txApprove), 'approving').to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txTransferFrom = api.tx.unique.transferFrom(normalizeAccountId(alice), normalizeAccountId(bob), uniqueCollectionId, rmrkNftId, 1);
+      await expect(executeTransaction(api, alice, txTransferFrom), 'transferring-from').to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      // NFT properties
+
+      const txSetTokenProperties = api.tx.unique.setTokenProperties(uniqueCollectionId, rmrkNftId, [{key: 'a', value: '2'}]);
+      await expect(executeTransaction(api, alice, txSetTokenProperties), 'setting token properties')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txDeleteTokenProperties = api.tx.unique.deleteTokenProperties(uniqueCollectionId, rmrkNftId, ['a']);
+      await expect(executeTransaction(api, alice, txDeleteTokenProperties), 'deleting token properties')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+    });
+  });
+
+  it_rmrk('[Negative] Forbids Unique collection operations with an external collection', async () => {
+    await usingApi(async api => {
+      const txDestroyCollection = api.tx.unique.destroyCollection(uniqueCollectionId);
+      await expect(executeTransaction(api, alice, txDestroyCollection), 'destroying collection')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      // Allow list
+
+      const txAddAllowList = api.tx.unique.addToAllowList(uniqueCollectionId, normalizeAccountId(bob));
+      await expect(executeTransaction(api, alice, txAddAllowList), 'adding to allow list')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txRemoveAllowList = api.tx.unique.removeFromAllowList(uniqueCollectionId, normalizeAccountId(bob));
+      await expect(executeTransaction(api, alice, txRemoveAllowList), 'removing from allowlist')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      // Owner / Admin / Sponsor
+
+      const txChangeOwner = api.tx.unique.changeCollectionOwner(uniqueCollectionId, bob.address);
+      await expect(executeTransaction(api, alice, txChangeOwner), 'changing owner')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txAddAdmin = api.tx.unique.addCollectionAdmin(uniqueCollectionId, normalizeAccountId(bob));
+      await expect(executeTransaction(api, alice, txAddAdmin), 'adding admin')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txRemoveAdmin = api.tx.unique.removeCollectionAdmin(uniqueCollectionId, normalizeAccountId(bob));
+      await expect(executeTransaction(api, alice, txRemoveAdmin), 'removing admin')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txAddCollectionSponsor = api.tx.unique.setCollectionSponsor(uniqueCollectionId, bob.address);
+      await expect(executeTransaction(api, alice, txAddCollectionSponsor), 'setting sponsor')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txConfirmCollectionSponsor = api.tx.unique.confirmSponsorship(uniqueCollectionId);
+      await expect(executeTransaction(api, alice, txConfirmCollectionSponsor), 'confirming sponsor')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txRemoveCollectionSponsor = api.tx.unique.removeCollectionSponsor(uniqueCollectionId);
+      await expect(executeTransaction(api, alice, txRemoveCollectionSponsor), 'removing sponsor')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+      
+      // Limits / permissions / transfers
+
+      const txSetTransfers = api.tx.unique.setTransfersEnabledFlag(uniqueCollectionId, true);
+      await expect(executeTransaction(api, alice, txSetTransfers), 'setting transfers enabled flag')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txSetLimits = api.tx.unique.setCollectionLimits(uniqueCollectionId, {transfersEnabled: false});
+      await expect(executeTransaction(api, alice, txSetLimits), 'setting collection limits')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+
+      const txSetPermissions = api.tx.unique.setCollectionPermissions(uniqueCollectionId, {access: 'AllowList'});
+      await expect(executeTransaction(api, alice, txSetPermissions), 'setting collection permissions')
+        .to.be.rejectedWith(/common\.CollectionIsExternal/);
+    });
+  });
+});
+
+describe('Negative Integration Test: Internal Collections, External Ops', async () => {
+  let collectionId: number;
+  let nftId: number;
+
+  const it_rmrk = (await isUnique() ? it : it.skip);
+
+  before(async () => {
+    await usingApi(async (api, privateKeyWrapper) => {
+      alice = privateKeyWrapper('//Alice');
+      bob = privateKeyWrapper('//Bob');
+
+      collectionId = await createCollectionExpectSuccess({mode: {type: 'NFT'}});
+      nftId = await createItemExpectSuccess(alice, collectionId, 'NFT');
+    });
+  });
+
+  it_rmrk('[Negative] Forbids RMRK operations with the internal collection and NFT (due to the lack of mapping)', async () => {
+    await usingApi(async api => {
+      const txChangeOwner = api.tx.rmrkCore.changeCollectionIssuer(collectionId, bob.address);
+      await expect(executeTransaction(api, alice, txChangeOwner), 'changing collection issuer')
+        .to.be.rejectedWith(/rmrkCore\.CollectionUnknown/);
+
+      const maxBurns = 10;
+      const txBurnItem = api.tx.rmrkCore.burnNft(collectionId, nftId, maxBurns);
+      await expect(executeTransaction(api, alice, txBurnItem), 'burning NFT').to.be.rejectedWith(/rmrkCore\.CollectionUnknown/);
+    });
+  });
+});
addedtests/src/rmrk/sendNft.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/sendNft.test.ts
@@ -0,0 +1,252 @@
+import {expect} from 'chai';
+import {getApiConnection} from '../substrate/substrate-api';
+import {createCollection, mintNft, sendNft} from './util/tx';
+import {NftIdTuple} from './util/fetch';
+import {isNftChildOfAnother, expectTxFailure} from './util/helpers';
+
+describe('integration test: send NFT', () => {
+  let api: any;
+  before(async () => { api = await getApiConnection(); });
+
+  const maxNftId = 0xFFFFFFFF;
+
+  const alice = '//Alice';
+  const bob = '//Bob';
+
+  const createTestCollection = async (issuerUri: string) => {
+    return await createCollection(
+      api,
+      issuerUri,
+      'nft-collection-metadata',
+      null,
+      'nft-collection',
+    );
+  };
+
+
+  it('send NFT to another user', async () => {
+    const originalOwnerUri = alice;
+    const newOwnerUri = bob;
+
+    const collectionId = await createTestCollection(alice);
+
+    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');
+
+    await sendNft(api, 'sent', originalOwnerUri, collectionId, nftId, newOwnerUri);
+  });
+
+  it('[negative] unable to send non-existing NFT', async () => {
+    const originalOwnerUri = alice;
+    const newOwnerUri = bob;
+
+    const collectionId = 0;
+    const tx = sendNft(api, 'sent', originalOwnerUri, collectionId, maxNftId, newOwnerUri);
+
+    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);
+  });
+
+  it('[negative] unable to send NFT by a not-an-owner', async () => {
+    const originalOwnerUri = alice;
+    const newOwnerUri = bob;
+
+    const collectionId = await createTestCollection(alice);
+
+    const nftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'nft-metadata');
+
+    const tx = sendNft(api, 'sent', newOwnerUri, collectionId, nftId, newOwnerUri);
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+  });
+
+  it('send NFT to another NFT (same owner)', async () => {
+    const originalOwnerUri = alice;
+
+    const collectionId = await createTestCollection(alice);
+
+    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];
+
+    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);
+
+    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);
+    expect(isChild).to.be.true;
+  });
+
+  it('[negative] send non-existing NFT to another NFT', async () => {
+    const originalOwnerUri = alice;
+
+    const collectionId = await createTestCollection(alice);
+
+    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');
+    const childNftId = maxNftId;
+
+    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];
+
+    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);
+
+    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);
+
+    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);
+    expect(isChild).to.be.false;
+  });
+
+  it('send NFT to another NFT (by not-an-owner)', async () => {
+    const originalOwnerUri = alice;
+
+    const collectionId = await createTestCollection(alice);
+
+    const author = alice;
+    const attacker = bob;
+
+    const parentNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, author, originalOwnerUri, collectionId, 'child-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];
+
+    const tx = sendNft(api, 'sent', attacker, collectionId, childNftId, newOwnerNFT);
+
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+
+    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);
+    expect(isChild).to.be.false;
+  });
+
+  it('[negative] send NFT to non-existing NFT', async () => {
+    const originalOwnerUri = alice;
+
+    const collectionId = await createTestCollection(alice);
+
+    const parentNftId = maxNftId;
+    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];
+
+    const tx = sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);
+
+    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);
+
+    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);
+    expect(isChild).to.be.false;
+  });
+
+  it('send NFT to another NFT owned by another user', async () => {
+    const ownerAlice = alice;
+    const ownerBob = bob;
+
+    const aliceCollectionId = await createTestCollection(alice);
+    const bobCollectionId = await createTestCollection(bob);
+
+    const parentNftId = await mintNft(api, alice, ownerAlice, aliceCollectionId, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, bob, ownerBob, bobCollectionId, 'child-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [aliceCollectionId, parentNftId];
+
+    await sendNft(api, 'pending', bob, bobCollectionId, childNftId, newOwnerNFT);
+  });
+
+  it('[negative] unable to send NFT to itself', async () => {
+    const nftOwner = alice;
+    const collectionId = await createTestCollection(alice);
+
+    const nftId = await mintNft(api, alice, nftOwner, collectionId, 'ouroboros-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [collectionId, nftId];
+
+    const tx = sendNft(api, 'sent', alice, collectionId, nftId, newOwnerNFT);
+
+    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);
+
+    const isChild = await isNftChildOfAnother(api, collectionId, nftId, newOwnerNFT);
+    expect(isChild).to.be.false;
+  });
+
+  it('[negative] unable to send NFT to child NFT', async () => {
+    const originalOwnerUri = alice;
+
+    const collectionId = await createTestCollection(alice);
+
+    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');
+
+    const newOwnerNFT: NftIdTuple = [collectionId, parentNftId];
+
+    await sendNft(api, 'sent', alice, collectionId, childNftId, newOwnerNFT);
+
+    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, newOwnerNFT);
+    expect(isChild).to.be.true;
+
+    const descendentOwner: NftIdTuple = [collectionId, childNftId];
+    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, descendentOwner);
+
+    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);
+    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, descendentOwner);
+    expect(isOuroboros).to.be.false;
+  });
+
+  it('[negative] unable to send NFT to descendent NFT', async () => {
+    const originalOwnerUri = alice;
+
+    const collectionId = await createTestCollection(alice);
+
+    const parentNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'child-nft-metadata');
+    const grandsonNftId = await mintNft(api, alice, originalOwnerUri, collectionId, 'grandson-nft-metadata');
+
+    const ownerParentNFT: NftIdTuple = [collectionId, parentNftId];
+
+    await sendNft(api, 'sent', alice, collectionId, childNftId, ownerParentNFT);
+
+    const isChild = await isNftChildOfAnother(api, collectionId, childNftId, ownerParentNFT);
+    expect(isChild).to.be.true;
+
+    const ownerChildNFT: NftIdTuple = [collectionId, childNftId];
+    await sendNft(api, 'sent', alice, collectionId, grandsonNftId, ownerChildNFT);
+
+    const isGrandson = await isNftChildOfAnother(api, collectionId, grandsonNftId, ownerChildNFT);
+    expect(isGrandson).to.be.true;
+
+    const ownerGrandsonNFT: NftIdTuple = [collectionId, grandsonNftId];
+    const tx = sendNft(api, 'sent', alice, collectionId, parentNftId, ownerGrandsonNFT);
+
+    await expectTxFailure(/rmrkCore\.CannotSendToDescendentOrSelf/, tx);
+    const isOuroboros = await isNftChildOfAnother(api, collectionId, parentNftId, ownerGrandsonNFT);
+    expect(isOuroboros).to.be.false;
+  });
+
+  it('send nested NFT to another user', async () => {
+    const originalOwner = alice;
+    const newOwner = bob;
+
+    const collectionId = await createTestCollection(alice);
+
+    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');
+
+    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];
+
+    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);
+
+    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, newOwner);
+  });
+
+  it('[negative] send nested NFT to another user (by a not-root-owner)', async () => {
+    const originalOwner = alice;
+    const newOwner = bob;
+
+    const collectionId = await createTestCollection(alice);
+
+    const parentNftId = await mintNft(api, alice, originalOwner, collectionId, 'parent-nft-metadata');
+    const childNftId = await mintNft(api, alice, originalOwner, collectionId, 'child-nft-metadata');
+
+    const parentNftTuple: NftIdTuple = [collectionId, parentNftId];
+
+    await sendNft(api, 'sent', originalOwner, collectionId, childNftId, parentNftTuple);
+
+    const tx = sendNft(api, 'sent', newOwner, collectionId, childNftId, newOwner);
+
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+  });
+
+  after(() => { api.disconnect(); });
+});
addedtests/src/rmrk/setCollectionProperty.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/setCollectionProperty.test.ts
@@ -0,0 +1,67 @@
+import {getApiConnection} from '../substrate/substrate-api';
+import {expectTxFailure} from './util/helpers';
+import {createCollection, setPropertyCollection} from './util/tx';
+
+describe('integration test: set collection property', () => {
+  const Alice = '//Alice';
+  const Bob = '//Bob';
+
+  let api: any;
+  before(async () => {
+    api = await getApiConnection();
+  });
+
+  it('set collection property', async () => {
+    await createCollection(
+      api,
+      Alice,
+      'test-metadata',
+      null,
+      'test-symbol',
+    ).then(async (collectionId) => {
+      await setPropertyCollection(api, Alice, collectionId, 'test_key', '42');
+      await setPropertyCollection(api, Alice, collectionId, 'test_key', '10');
+      await setPropertyCollection(
+        api,
+        Alice,
+        collectionId,
+        'second_test_key',
+        '111',
+      );
+    });
+  });
+
+  it('[negative] set non-existing collection property', async () => {
+    const tx = setPropertyCollection(
+      api,
+      Alice,
+      9999,
+      'test_key',
+      '42',
+    );
+    await expectTxFailure(/rmrkCore\.CollectionUnknown/, tx);
+  });
+
+  it('[negative] set property not an owner NFT collection issuer', async () => {
+    await createCollection(
+      api,
+      Bob,
+      'test-metadata',
+      null,
+      'test-symbol',
+    ).then(async (collectionId) => {
+      const tx = setPropertyCollection(
+        api,
+        Alice,
+        collectionId,
+        'test_key',
+        '42',
+      );
+      await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+    });
+  });
+
+  after(() => {
+    api.disconnect();
+  });
+});
addedtests/src/rmrk/setEquippableList.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/setEquippableList.test.ts
@@ -0,0 +1,111 @@
+import {getApiConnection} from '../substrate/substrate-api';
+import {expectTxFailure} from './util/helpers';
+import {createCollection, createBase, setEquippableList} from './util/tx';
+
+describe("integration test: set slot's Equippable List", () => {
+  let api: any;
+  before(async () => { api = await getApiConnection(); });
+
+  const alice = '//Alice';
+  const bob = '//Bob';
+
+  it("set Base's slot Equippable List", async () => {
+    const collectionIds = [
+      await createCollection(
+        api,
+        alice,
+        'equiplist-collection-metadata',
+        null,
+        'equiplist-0',
+      ),
+      await createCollection(
+        api,
+        alice,
+        'equiplist-collection-metadata',
+        null,
+        'equiplist-1',
+      ),
+    ];
+
+    const slotId = 202;
+
+    const baseId = await createBase(api, alice, 'slotpartany-base-type', 'slotpartany', [
+      {
+        'SlotPart': {
+          id: slotId,
+          equippable: 'All',
+          z: 1,
+          src: 'some-fallback-slot-url',
+        },
+      },
+    ]);
+
+    await setEquippableList(api, alice, baseId, slotId, 'All');
+    await setEquippableList(api, alice, baseId, slotId, 'Empty');
+    await setEquippableList(api, alice, baseId, slotId, {'Custom': collectionIds});
+  });
+
+  it('[negative] unable to set equippable list of a slot of non-existing base', async () => {
+    const maxBaseId = 0xFFFFFFFF;
+    const slotId = 0;
+
+    const tx = setEquippableList(api, alice, maxBaseId, slotId, 'All');
+    await expectTxFailure(/rmrkEquip\.BaseDoesntExist/, tx);
+  });
+
+  it('[negative] unable to set equippable list by a not-an-owner', async () => {
+    const slotId = 42;
+
+    const baseId = await createBase(api, alice, 'slotpartany-base-type', 'slotpartany', [
+      {
+        'SlotPart': {
+          id: slotId,
+          equippable: 'All',
+          z: 1,
+          src: 'some-fallback-slot-url',
+        },
+      },
+    ]);
+
+    const tx = setEquippableList(api, bob, baseId, slotId, 'All');
+    await expectTxFailure(/rmrkEquip\.PermissionError/, tx);
+  });
+
+  it('[negative] unable to set equippable list to a fixed part', async () => {
+    const fixedPartId = 42;
+
+    const baseId = await createBase(api, alice, 'fixedpart-base-type', 'fixedpart', [
+      {
+        'FixedPart': {
+          id: fixedPartId,
+          z: 0,
+          src: 'fixed-part-url',
+        },
+      },
+    ]);
+
+    const tx = setEquippableList(api, alice, baseId, fixedPartId, 'All');
+    await expectTxFailure(/rmrkEquip\.NoEquippableOnFixedPart/, tx);
+  });
+
+  it('[negative] unable to set equippable list to non-existing slot', async () => {
+    const slotId = 777;
+    const maxSlotId = 0xFFFFFFFF;
+
+    const baseId = await createBase(api, alice, 'slotpartany-base-type', 'slotpartany', [
+      {
+        'SlotPart': {
+          id: slotId,
+          equippable: 'All',
+          z: 1,
+          src: 'some-fallback-slot-url',
+        },
+      },
+    ]);
+
+    const tx = setEquippableList(api, alice, baseId, maxSlotId, 'All');
+    await expectTxFailure(/rmrkEquip\.PartDoesntExist/, tx);
+  });
+
+  after(() => { api.disconnect(); });
+});
addedtests/src/rmrk/setNftProperty.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/setNftProperty.test.ts
@@ -0,0 +1,85 @@
+import {getApiConnection} from '../substrate/substrate-api';
+import {NftIdTuple} from './util/fetch';
+import {expectTxFailure} from './util/helpers';
+import {createCollection, mintNft, sendNft, setNftProperty} from './util/tx';
+
+describe('integration test: set NFT property', () => {
+  let api: any;
+  before(async () => { api = await getApiConnection(); });
+
+  const alice = '//Alice';
+  const bob = '//Bob';
+
+  const createTestCollection = async (issuerUri: string) => {
+    return await createCollection(
+      api,
+      issuerUri,
+      'setprop-nft-collection-metadata',
+      null,
+      'setprop',
+    );
+  };
+
+  it('set NFT property', async () => {
+    const ownerAlice = alice;
+
+    const collectionId = await createTestCollection(alice);
+    const nftId = await mintNft(api, alice, ownerAlice, collectionId, 'prop-nft');
+
+    await setNftProperty(api, alice, collectionId, nftId, 'test-key', 'test-key-value');
+    await setNftProperty(api, alice, collectionId, nftId, 'test-key', 'updated-key-value');
+    await setNftProperty(api, alice, collectionId, nftId, 'second-test-key', 'second-test-key-value');
+  });
+
+  it('[negative] unable to set a property of non-existing NFT', async () => {
+    const collectionId = 0;
+    const maxNftId = 0xFFFFFFFF;
+
+    const tx = setNftProperty(api, alice, collectionId, maxNftId, 'test-key', 'test-value');
+
+    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);
+  });
+
+  it('[negative] unable to set a property by not-an-owner', async () => {
+    const ownerAlice = alice;
+
+    const collectionId = await createTestCollection(alice);
+    const nftId = await mintNft(api, alice, ownerAlice, collectionId, 'prop-nft');
+
+    const tx = setNftProperty(api, bob, collectionId, nftId, 'test-key', 'test-key-value');
+
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+  });
+
+  it('set a property to nested NFT', async () => {
+    const ownerAlice = alice;
+
+    const collectionId = await createTestCollection(alice);
+    const parentNftId = await mintNft(api, alice, ownerAlice, collectionId, 'prop-parent-nft');
+    const childNftId = await mintNft(api, alice, ownerAlice, collectionId, 'prop-child-nft');
+
+    const ownerNft: NftIdTuple = [collectionId, parentNftId];
+
+    await sendNft(api, 'sent', ownerAlice, collectionId, childNftId, ownerNft);
+
+    await setNftProperty(api, alice, collectionId, childNftId, 'test-key', 'test-key-value');
+  });
+
+  it('[negative] set a property to nested NFT (by not-root-owner)', async () => {
+    const ownerAlice = alice;
+
+    const collectionId = await createTestCollection(alice);
+    const parentNftId = await mintNft(api, alice, ownerAlice, collectionId, 'prop-parent-nft');
+    const childNftId = await mintNft(api, alice, ownerAlice, collectionId, 'prop-child-nft');
+
+    const ownerNft: NftIdTuple = [collectionId, parentNftId];
+
+    await sendNft(api, 'sent', ownerAlice, collectionId, childNftId, ownerNft);
+
+    const tx = setNftProperty(api, bob, collectionId, childNftId, 'test-key', 'test-key-value');
+
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+  });
+
+  after(() => { api.disconnect(); });
+});
addedtests/src/rmrk/setResourcePriorities.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/setResourcePriorities.test.ts
@@ -0,0 +1,55 @@
+import {getApiConnection} from '../substrate/substrate-api';
+import {expectTxFailure} from './util/helpers';
+import {mintNft, createCollection, setResourcePriorities} from './util/tx';
+
+describe('integration test: set NFT resource priorities', () => {
+  let api: any;
+  before(async () => { api = await getApiConnection(); });
+
+  const alice = '//Alice';
+  const bob = '//Bob';
+
+  const createTestCollection = (issuerUri: string) => {
+    return createCollection(
+      api,
+      issuerUri,
+      'resprio-collection-metadata',
+      null,
+      'resprio',
+    );
+  };
+
+  it('set NFT resource priorities', async () => {
+    const owner = alice;
+
+    const collectionId = await createTestCollection(alice);
+    const nftId = await mintNft(api, alice, owner, collectionId, 'resprio-nft-metadata');
+
+    await setResourcePriorities(api, alice, collectionId, nftId, [10, 42]);
+  });
+
+  it('[negative] set NFT resource priorities by a not-an-owner', async () => {
+    const owner = alice;
+    const attacker = bob;
+
+    const collectionId = await createTestCollection(alice);
+    const nftId = await mintNft(api, alice, owner, collectionId, 'resprio-nft-metadata');
+
+    const tx = setResourcePriorities(api, attacker, collectionId, nftId, [10, 42]);
+
+    await expectTxFailure(/rmrkCore\.NoPermission/, tx);
+  });
+
+  it('[negative] set NFT resource priorities to non-existing NFT', async () => {
+    const owner = alice;
+
+    const collectionId = 0;
+    const maxNftId = 0xFFFFFFFF;
+
+    const tx = setResourcePriorities(api, alice, collectionId, maxNftId, [10, 42]);
+
+    await expectTxFailure(/rmrkCore\.NoAvailableNftId/, tx);
+  });
+
+  after(() => { api.disconnect(); });
+});
addedtests/src/rmrk/util/fetch.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/util/fetch.ts
@@ -0,0 +1,130 @@
+import {ApiPromise} from '@polkadot/api';
+import type {Option, Bytes} from '@polkadot/types-codec';
+import type {
+  RmrkTraitsCollectionCollectionInfo as Collection,
+  RmrkTraitsNftNftInfo as Nft,
+  RmrkTraitsResourceResourceInfo as Resource,
+  RmrkTraitsBaseBaseInfo as Base,
+  RmrkTraitsPartPartType as PartType,
+  RmrkTraitsNftNftChild as NftChild,
+  RmrkTraitsTheme as Theme,
+  RmrkTraitsPropertyPropertyInfo as Property,
+} from '../../interfaces/default/types'; // '@polkadot/types/lookup';
+import '../../interfaces/augment-api';
+import '../../interfaces/augment-api-query';
+import privateKey from '../../substrate/privateKey';
+
+export type NftIdTuple = [number, number];
+
+export async function getCollectionsCount(api: ApiPromise): Promise<number> {
+  return (await api.rpc.rmrk.lastCollectionIdx()).toNumber();
+}
+
+export async function getCollection(api: ApiPromise, id: number): Promise<Option<Collection>> {
+  return api.rpc.rmrk.collectionById(id);
+}
+
+export async function getOwnedNfts(
+  api: ApiPromise,
+  ownerUri: string,
+  collectionId: number,
+): Promise<number[]> {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const owner = privateKey(ownerUri, Number(ss58Format));
+
+  return (await api.rpc.rmrk.accountTokens(owner.address, collectionId))
+    .map((value) => value.toNumber());
+}
+
+export async function getNft(api: ApiPromise, collectionId: number, nftId: number): Promise<Option<Nft>> {
+  return api.rpc.rmrk.nftById(collectionId, nftId);
+}
+
+export async function getCollectionProperties(api: ApiPromise, collectionId: number): Promise<Property[]> {
+  return (await api.rpc.rmrk.collectionProperties(collectionId)).toArray();
+}
+
+export async function getNftProperties(api: ApiPromise, collectionId: number, nftId: number): Promise<Property[]> {
+  return (await api.rpc.rmrk.nftProperties(collectionId, nftId)).toArray();
+}
+
+export async function getChildren(
+  api: ApiPromise,
+  collectionId: number,
+  nftId: number,
+): Promise<NftChild[]> {
+  return (await api.rpc.rmrk.nftChildren(collectionId, nftId)).toArray();
+}
+
+export async function getBase(api: ApiPromise, baseId: number): Promise<Option<Base>> {
+  return api.rpc.rmrk.base(baseId);
+}
+
+export async function getParts(api: ApiPromise, baseId: number): Promise<PartType[]> {
+  return (await api.rpc.rmrk.baseParts(baseId)).toArray();
+}
+
+export async function getEquippableList(
+  api: ApiPromise,
+  baseId: number,
+  slotId: number,
+): Promise<'All' | 'Empty' | { 'Custom': number[] } | null> {
+  const parts = await getParts(api, baseId);
+
+  const part = parts.find((part) => {
+    if (part.isSlotPart) {
+      return part.asSlotPart.id.toNumber() === slotId;
+    } else {
+      return false;
+    }
+  });
+
+  if (part) {
+    const slot = part.asSlotPart;
+    if (slot.equippable.isCustom) {
+      return {
+        'Custom': slot.equippable.asCustom
+          .toArray()
+          .map((collectionId) => collectionId.toNumber()),
+      };
+    } else if (slot.equippable.isAll) {
+      return 'All';
+    } else {
+      return 'Empty';
+    }
+  } else {
+    return null;
+  }
+}
+
+export async function getResourcePriority(
+  api: ApiPromise,
+  collectionId: number,
+  nftId: number,
+  resourceId: number,
+): Promise<number> {
+  return (await api.rpc.rmrk.nftResourcePriority(collectionId, nftId, resourceId))
+    .unwrap().toNumber();
+}
+
+export async function getThemeNames(api: ApiPromise, baseId: number): Promise<string[]> {
+  return (await api.rpc.rmrk.themeNames(baseId))
+    .map((name) => name.toUtf8());
+}
+
+export async function getTheme(
+  api: ApiPromise,
+  baseId: number,
+  themeName: string,
+  keys: string[] | null = null,
+): Promise<Option<Theme>> {
+  return api.rpc.rmrk.themes(baseId, themeName, keys);
+}
+
+export async function getResources(
+  api: ApiPromise,
+  collectionId: number,
+  nftId: number,
+): Promise<Resource[]> {
+  return (await api.rpc.rmrk.nftResources(collectionId, nftId)).toArray();
+}
addedtests/src/rmrk/util/helpers.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/util/helpers.ts
@@ -0,0 +1,207 @@
+import {ApiPromise} from '@polkadot/api';
+import {
+  RmrkTraitsNftAccountIdOrCollectionNftTuple as NftOwner,
+  RmrkTraitsPropertyPropertyInfo as Property,
+  RmrkTraitsResourceResourceInfo as ResourceInfo,
+} from '@polkadot/types/lookup';
+import type {EventRecord} from '@polkadot/types/interfaces';
+import type {GenericEventData} from '@polkadot/types';
+import privateKey from '../../substrate/privateKey';
+import {NftIdTuple, getChildren, getOwnedNfts, getCollectionProperties, getNftProperties, getResources} from './fetch';
+import chaiAsPromised from 'chai-as-promised';
+import chai from 'chai';
+
+chai.use(chaiAsPromised);
+const expect = chai.expect;
+
+interface TxResult<T> {
+    success: boolean;
+    successData: T | null;
+}
+
+export function makeNftOwner(api: ApiPromise, owner: string | NftIdTuple): NftOwner {
+  const isNftSending = (typeof owner !== 'string');
+
+  if (isNftSending) {
+    return api.createType('RmrkTraitsNftAccountIdOrCollectionNftTuple', {
+      'CollectionAndNftTuple': owner,
+    });
+  } else {
+    const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+    return api.createType('RmrkTraitsNftAccountIdOrCollectionNftTuple', {
+      AccountId: privateKey(owner, Number(ss58Format)).address,
+    });
+  }
+}
+
+export async function isNftOwnedBy(
+  api: ApiPromise,
+  owner: string | NftIdTuple,
+  collectionId: number,
+  nftId: number,
+): Promise<boolean> {
+  if (typeof owner === 'string') {
+    return (await getOwnedNfts(api, owner, collectionId))
+      .find(ownedNftId => {
+        return ownedNftId === nftId;
+      }) !== undefined;
+  } else {
+    return (await getChildren(api, owner[0], owner[1]))
+      .find(child => {
+        return collectionId === child.collectionId.toNumber()
+                    && nftId === child.nftId.toNumber();
+      }) !== undefined;
+  }
+}
+
+export function isPropertyExists(
+  key: string,
+  value: string,
+  props: Property[],
+): boolean {
+  let isPropFound = false;
+  for (let i = 0; i < props.length && !isPropFound; i++) {
+    const fetchedProp = props[i];
+
+    isPropFound = fetchedProp.key.eq(key)
+                    && fetchedProp.value.eq(value);
+  }
+
+  return isPropFound;
+}
+
+export async function isCollectionPropertyExists(
+  api: ApiPromise,
+  collectionId: number,
+  key: string,
+  value: string,
+): Promise<boolean> {
+  const fetchedProps = await getCollectionProperties(api, collectionId);
+  return isPropertyExists(key, value, fetchedProps);
+}
+
+export async function isNftPropertyExists(
+  api: ApiPromise,
+  collectionId: number,
+  nftId: number,
+  key: string,
+  value: string,
+): Promise<boolean> {
+  const fetchedProps = await getNftProperties(api, collectionId, nftId);
+  return isPropertyExists(key, value, fetchedProps);
+}
+
+export async function isNftChildOfAnother(
+  api: ApiPromise,
+  collectionId: number,
+  nftId: number,
+  parentNft: NftIdTuple,
+): Promise<boolean> {
+  return (await getChildren(api, parentNft[0], parentNft[1]))
+    .find((childNft) => {
+      return childNft.collectionId.toNumber() === collectionId
+                && childNft.nftId.toNumber() === nftId;
+    }) !== undefined;
+}
+
+export function isTxResultSuccess(events: EventRecord[]): boolean {
+  let success = false;
+
+  events.forEach(({event: {data, method, section}}) => {
+    if (method == 'ExtrinsicSuccess') {
+      success = true;
+    }
+  });
+
+  return success;
+}
+
+export async function expectTxFailure(expectedError: RegExp, promise: Promise<any>) {
+  await expect(promise).to.be.rejectedWith(expectedError);
+}
+
+export function extractTxResult<T>(
+  events: EventRecord[],
+  expectSection: string,
+  expectMethod: string,
+  extractAction: (data: any) => T,
+): TxResult<T> {
+  let success = false;
+  let successData = null;
+  events.forEach(({event: {data, method, section}}) => {
+    if (method == 'ExtrinsicSuccess') {
+      success = true;
+    } else if ((expectSection == section) && (expectMethod == method)) {
+      successData = extractAction(data);
+    }
+  });
+  const result: TxResult<T> = {
+    success,
+    successData,
+  };
+  return result;
+}
+
+export function extractRmrkCoreTxResult<T>(
+  events: EventRecord[],
+  expectMethod: string,
+  extractAction: (data: GenericEventData) => T,
+): TxResult<T> {
+  return extractTxResult(events, 'rmrkCore', expectMethod, extractAction);
+}
+
+export function extractRmrkEquipTxResult<T>(
+  events: EventRecord[],
+  expectMethod: string,
+  extractAction: (data: GenericEventData) => T,
+): TxResult<T> {
+  return extractTxResult(events, 'rmrkEquip', expectMethod, extractAction);
+}
+
+export async function findResourceById(
+  api: ApiPromise,
+  collectionId: number,
+  nftId: number,
+  resourceId: number,
+): Promise<ResourceInfo> {
+  const resources = await getResources(api, collectionId, nftId);
+
+  let resource = null;
+
+  for (let i = 0; i < resources.length; i++) {
+    const res = resources[i];
+
+    if (res.id.eq(resourceId)) {
+      resource = res;
+      break;
+    }
+  }
+
+  return resource!;
+}
+
+export async function getResourceById(
+  api: ApiPromise,
+  collectionId: number,
+  nftId: number,
+  resourceId: number,
+): Promise<ResourceInfo> {
+  const resource = await findResourceById(
+    api,
+    collectionId,
+    nftId,
+    resourceId,
+  );
+
+  expect(resource !== null, 'Error: resource was not found').to.be.true;
+
+  return resource!;
+}
+
+export function checkResourceStatus(
+  resource: ResourceInfo,
+  expectedStatus: 'pending' | 'added',
+) {
+  expect(resource.pending.isTrue, `Error: added resource should be ${expectedStatus}`)
+    .to.be.equal(expectedStatus === 'pending');
+}
addedtests/src/rmrk/util/tx.tsdiffbeforeafterboth
--- /dev/null
+++ b/tests/src/rmrk/util/tx.ts
@@ -0,0 +1,1132 @@
+import {ApiPromise} from '@polkadot/api';
+import {Bytes, Option, u32, Vec} from '@polkadot/types-codec';
+import {
+  RmrkTraitsNftAccountIdOrCollectionNftTuple as NftOwner, RmrkTraitsPartEquippableList as EquippableList,
+  RmrkTraitsPartPartType as PartType, RmrkTraitsResourceBasicResource as BasicResource,
+  RmrkTraitsResourceComposableResource as ComposableResource, RmrkTraitsResourceResourceInfo as ResourceInfo, RmrkTraitsResourceSlotResource as SlotResource, RmrkTraitsTheme as Theme,
+} from '@polkadot/types/lookup';
+import {IKeyringPair} from '@polkadot/types/types';
+import chai from 'chai';
+import chaiAsPromised from 'chai-as-promised';
+import '../../interfaces/augment-api';
+import privateKey from '../../substrate/privateKey';
+import {executeTransaction} from '../../substrate/substrate-api';
+import {
+  getBase,
+  getCollection,
+  getCollectionsCount,
+  getEquippableList,
+  getNft,
+  getParts,
+  getResources, 
+  getResourcePriority, 
+  getTheme,
+  NftIdTuple,
+} from './fetch';
+import {
+  extractRmrkCoreTxResult,
+  extractRmrkEquipTxResult, isCollectionPropertyExists, isNftOwnedBy, isNftPropertyExists, isTxResultSuccess, makeNftOwner,
+  findResourceById, getResourceById, checkResourceStatus,
+} from './helpers';
+
+chai.use(chaiAsPromised);
+const expect = chai.expect;
+
+export async function createCollection(
+  api: ApiPromise,
+  issuerUri: string,
+  metadata: string,
+  max: number | null,
+  symbol: string,
+): Promise<number> {
+  let collectionId = 0;
+
+  const oldCollectionCount = await getCollectionsCount(api);
+  const maxOptional = max ? max.toString() : null;
+  const ss58Format = (api.registry.getChainProperties())!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const tx = api.tx.rmrkCore.createCollection(metadata, maxOptional, symbol);
+  const events = await executeTransaction(api, issuer, tx);
+
+  const collectionResult = extractRmrkCoreTxResult(events, 'CollectionCreated', (data) => {
+    return parseInt(data[1].toString(), 10);
+  });
+  expect(collectionResult.success, 'Error: unable to create a collection').to.be.true;
+
+  collectionId = collectionResult.successData!;
+
+  const newCollectionCount = await getCollectionsCount(api);
+  const collectionOption = await getCollection(api, collectionId);
+
+  expect(newCollectionCount).to.be.equal(oldCollectionCount + 1, 'Error: NFT collection count should increase');
+  expect(collectionOption.isSome, 'Error: unable to fetch created NFT collection').to.be.true;
+
+  const collection = collectionOption.unwrap();
+
+  expect(collection.metadata.toUtf8()).to.be.equal(metadata, 'Error: Invalid NFT collection metadata');
+  expect(collection.max.isSome).to.be.equal(max !== null, 'Error: Invalid NFT collection max');
+
+  if (collection.max.isSome) {
+    expect(collection.max.unwrap().toNumber()).to.be.equal(max, 'Error: Invalid NFT collection max');
+  }
+  expect(collection.symbol.toUtf8()).to.be.equal(symbol, "Error: Invalid NFT collection's symbol");
+  expect(collection.nftsCount.toNumber()).to.be.equal(0, "Error: NFT collection shoudn't have any tokens");
+  expect(collection.issuer.toString()).to.be.equal(issuer.address, 'Error: Invalid NFT collection issuer');
+
+  return collectionId;
+}
+
+export async function changeIssuer(
+  api: ApiPromise,
+  issuerUri: string,
+  collectionId: number,
+  newIssuer: string,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const alice = privateKey(issuerUri, Number(ss58Format));
+  const bob = privateKey(newIssuer, Number(ss58Format));
+
+  // This is only needed when RMRK uses `uniques` pallet by Parity
+  // let tx = api.tx.uniques.setAcceptOwnership(
+  //     api.createType('Option<u32>', collectionId)
+  // );
+  // let events = await executeTransaction(api, bob, tx);
+  // expect(isTxResultSuccess(events), 'Error: Unable to accept ownership').to.be.true;
+
+  const tx = api.tx.rmrkCore.changeCollectionIssuer(collectionId, bob.address);
+  const events = await executeTransaction(api, alice, tx);
+  const changeIssuerResult = extractRmrkCoreTxResult(events, 'IssuerChanged', (data) => {
+    return parseInt(data[2].toString(), 10);
+  });
+  expect(changeIssuerResult.success, 'Error: Unable to change NFT collection issuer').to.be.true;
+  expect(changeIssuerResult.successData!, 'Error: Invalid collection id after changing the issuer')
+    .to.be.eq(collectionId);
+
+  await getCollection(api, collectionId).then((collectionOption) => {
+    const collection = collectionOption.unwrap();
+    expect(collection.issuer.toString())
+      .to.be.deep.eq(bob.address, 'Error: Invalid NFT collection issuer');
+  });
+}
+
+export async function deleteCollection(
+  api: ApiPromise,
+  issuerUri: string,
+  collectionId: string,
+): Promise<number> {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const tx = api.tx.rmrkCore.destroyCollection(collectionId);
+  const events = await executeTransaction(api, issuer, tx);
+
+  const collectionTxResult = extractRmrkCoreTxResult(
+    events,
+    'CollectionDestroy',
+    (data) => {
+      return parseInt(data[1].toString(), 10);
+    },
+  );
+  expect(collectionTxResult.success, 'Error: Unable to delete NFT collection').to.be.true;
+
+  const collection = await getCollection(
+    api,
+    parseInt(collectionId, 10),
+  );
+  expect(collection.isEmpty, 'Error: NFT collection should be deleted').to.be.true;
+
+  return 0;
+}
+
+export async function negativeDeleteCollection(
+  api: ApiPromise,
+  issuerUri: string,
+  collectionId: string,
+): Promise<number> {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const tx = api.tx.rmrkCore.destroyCollection(collectionId);
+  await expect(executeTransaction(api, issuer, tx)).to.be.rejected;
+
+  return 0;
+}
+
+export async function setNftProperty(
+  api: ApiPromise,
+  issuerUri: string,
+  collectionId: number,
+  nftId: number,
+  key: string,
+  value: string,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const nftIdOpt = api.createType('Option<u32>', nftId);
+  const tx = api.tx.rmrkCore.setProperty(
+    collectionId,
+    nftIdOpt,
+    key,
+    value,
+  );
+  const events = await executeTransaction(api, issuer, tx);
+
+  const propResult = extractRmrkCoreTxResult(events, 'PropertySet', (data) => {
+    return {
+      collectionId: parseInt(data[0].toString(), 10),
+      nftId: data[1] as Option<u32>,
+      key: data[2] as Bytes,
+      value: data[3] as Bytes,
+    };
+  });
+
+  expect(propResult.success, 'Error: Unable to set NFT property').to.be.true;
+  const eventData = propResult.successData!;
+  const eventDescription = 'from set NFT property event';
+
+  expect(eventData.collectionId, 'Error: Invalid collection ID ' + eventDescription)
+    .to.be.equal(collectionId);
+
+  expect(eventData.nftId.eq(nftIdOpt), 'Error: Invalid NFT ID ' + eventDescription)
+    .to.be.true;
+
+  expect(eventData.key.eq(key), 'Error: Invalid property key ' + eventDescription)
+    .to.be.true;
+
+  expect(eventData.value.eq(value), 'Error: Invalid property value ' + eventDescription)
+    .to.be.true;
+
+  expect(
+    await isNftPropertyExists(api, collectionId, nftId, key, value),
+    'Error: NFT property is not found',
+  ).to.be.true;
+}
+
+export async function mintNft(
+  api: ApiPromise,
+  issuerUri: string,
+  ownerUri: string | null,
+  collectionId: number,
+  metadata: string,
+  recipientUri: string | null = null,
+  royalty: number | null = null,
+  transferable = true,
+  resources: {basic?: any, composable?: any, slot?: any}[] | null = null,
+): Promise<number> {
+  let nftId = 0;
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const owner = ownerUri ? privateKey(ownerUri, Number(ss58Format)).address : null;
+  const recipient = recipientUri ? privateKey(recipientUri, Number(ss58Format)).address : null;
+  const royaltyOptional = royalty ? royalty.toString() : null;
+
+  const actualOwnerUri = ownerUri ? ownerUri : issuerUri;
+  const actualOwnerAddress = ownerUri ? owner : issuer.address;
+
+  const collectionOpt = await getCollection(api, collectionId);
+
+  const tx = api.tx.rmrkCore.mintNft(
+    owner,
+    collectionId,
+    recipient,
+    royaltyOptional,
+    metadata,
+    transferable,
+    resources,
+  );
+
+  const events = await executeTransaction(api, issuer, tx);
+  const nftResult = extractRmrkCoreTxResult(events, 'NftMinted', (data) => {
+    return parseInt(data[2].toString(), 10);
+  });
+
+  expect(nftResult.success, 'Error: Unable to mint NFT').to.be.true;
+
+  const newCollectionNftsCount = (await getCollection(api, collectionId))
+    .unwrap()
+    .nftsCount
+    .toNumber();
+
+  const oldCollectionNftsCount = collectionOpt
+    .unwrap()
+    .nftsCount.toNumber();
+
+  expect(newCollectionNftsCount, 'Error: NFTs count should increase')
+    .to.be.equal(oldCollectionNftsCount + 1);
+
+  nftId = nftResult.successData!;
+
+  const nftOption = await getNft(api, collectionId, nftId);
+
+  expect(nftOption.isSome, 'Error: Unable to fetch created NFT').to.be.true;
+
+  const nft = nftOption.unwrap();
+
+  expect(nft.owner.isAccountId, 'Error: NFT owner should be some user').to.be.true;
+  expect(nft.owner.asAccountId.toString()).to.be.equal(actualOwnerAddress, 'Error: Invalid NFT owner');
+
+  const isOwnedInUniques = await isNftOwnedBy(api, actualOwnerUri, collectionId, nftId);
+  expect(isOwnedInUniques, `Error: created NFT is not actually owned by ${ownerUri}`)
+    .to.be.true;
+
+  if (recipient === null && royalty === null) {
+    expect(nft.royalty.isNone, 'Error: Invalid NFT recipient')
+      .to.be.true;
+  } else {
+    expect(nft.royalty.isSome, 'Error: NFT royalty not found')
+      .to.be.true;
+
+    const nftRoyalty = nft.royalty.unwrap();
+    expect(nftRoyalty.recipient.eq(recipient), 'Error: Invalid NFT recipient')
+      .to.be.true;
+
+    expect(nftRoyalty.amount.eq(royalty), 'Error: Invalid NFT royalty')
+      .to.be.true;
+  }
+
+  expect(nft.metadata.toUtf8()).to.be.equal(metadata, 'Error: Invalid NFT metadata');
+    
+  const nftResources = await getResources(api, collectionId, nftId);
+  if (resources == null) {
+    expect(nftResources, 'Error: Invalid NFT resources').to.be.empty;
+  } else {
+    expect(nftResources.length).to.be.equal(resources.length);
+
+    for (let i = 0; i < resources.length; i++) {
+      let successFindingResource = false;
+      const resource = resources[i];
+      // try to find the matching resource from the query
+      for (let j = 0; j < nftResources.length && !successFindingResource; j++) {
+        const nftResourceData = nftResources[j].toHuman();
+        expect(
+          Object.prototype.hasOwnProperty.call(nftResourceData, 'resource'),
+          `Error: Corrupted resource data on resource #${i}`,
+        ).to.be.true;
+        const nftResource = nftResourceData.resource!;
+                type NftResourceKey = keyof typeof nftResource;
+
+                let typedResource = null;
+                let typedNftResource = null;
+
+                if (resource.basic && Object.prototype.hasOwnProperty.call(nftResource, 'Basic')) {
+                  typedResource = resource.basic!;
+                  typedNftResource = nftResource['Basic' as NftResourceKey]!;
+                } else if (resource.composable && Object.prototype.hasOwnProperty.call(nftResource, 'Composable')) {
+                  typedResource = resource.composable!;
+                  typedNftResource = nftResource['Composable' as NftResourceKey]! as any;
+                  if (typedResource.parts != undefined && typedResource.parts.toString() != typedNftResource.parts.toString()
+                        || typedResource.base != typedNftResource.base && typedResource.base != undefined) {
+                    continue;
+                  }
+                } else if (resource.slot && Object.prototype.hasOwnProperty.call(nftResource, 'Slot')) {
+                  typedResource = resource.slot!;
+                  typedNftResource = nftResource['Slot' as NftResourceKey]! as any;
+                  if (typedResource.slot != typedNftResource.slot && typedResource.slot != undefined 
+                        || typedResource.base != typedNftResource.base && typedResource.base != undefined) {
+                    continue;
+                  }
+                } else {
+                  continue;
+                }
+
+                if (typedResource.src != typedNftResource.src 
+                    || typedResource.metadata != typedNftResource.metadata 
+                    || typedResource.thumb != typedNftResource.thumb
+                    || typedResource.license != typedNftResource.license
+                ) {
+                  continue;
+                }
+
+                // do final checks since this is now established to be the resource we seek
+                expect(nftResourceData.pending, `Error: Resource #${i} is pending`).to.be.false;
+                expect(nftResourceData.pendingRemoval, `Error: Resource #${i} is pending removal`).to.be.false;
+
+                // remove the matching resource from the resources we check
+                nftResources.splice(j, 1);
+                successFindingResource = true;
+      }
+
+      expect(successFindingResource, `Error: Couldn't find resource #${i}'s counterpart among the returned`).to.be.true;
+    }
+  }
+
+  return nftId;
+}
+
+export async function sendNft(
+  api: ApiPromise,
+  expectedStatus: 'pending' | 'sent',
+  originalOwnerUri: string,
+  collectionId: number,
+  nftId: number,
+  newOwner: string | NftIdTuple,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const originalOwner = privateKey(originalOwnerUri, Number(ss58Format));
+  const newOwnerObj = makeNftOwner(api, newOwner);
+
+  const nftBeforeSendingOpt = await getNft(api, collectionId, nftId);
+
+  const tx = api.tx.rmrkCore.send(collectionId, nftId, newOwnerObj);
+  const events = await executeTransaction(api, originalOwner, tx);
+
+  const sendResult = extractRmrkCoreTxResult(events, 'NFTSent', (data) => {
+    return {
+      dstOwner: data[1] as NftOwner,
+      collectionId: parseInt(data[2].toString(), 10),
+      nftId: parseInt(data[3].toString(), 10),
+    };
+  });
+
+  expect(sendResult.success, 'Error: Unable to send NFT').to.be.true;
+  const sendData = sendResult.successData!;
+
+  expect(sendData.dstOwner.eq(newOwnerObj), 'Error: Invalid target user (from event data)')
+    .to.be.true;
+
+  expect(sendData.collectionId)
+    .to.be.equal(collectionId, 'Error: Invalid collection ID (from event data)');
+
+  expect(sendData.nftId).to.be.equal(nftId, 'Error: Invalid NFT ID (from event data)');
+
+  expect(nftBeforeSendingOpt.isSome, 'Error: Unable to fetch NFT before sending').to.be.true;
+
+  const nftBeforeSending = nftBeforeSendingOpt.unwrap();
+
+  const nftAfterSendingOpt = await getNft(api, collectionId, nftId);
+
+  expect(nftAfterSendingOpt.isSome, 'Error: Unable to fetch NFT after sending').to.be.true;
+
+  const nftAfterSending = nftAfterSendingOpt.unwrap();
+
+  const isOwnedByNewOwner = await isNftOwnedBy(api, newOwner, collectionId, nftId);
+  const isPending = expectedStatus === 'pending';
+
+  expect(
+    isOwnedByNewOwner,
+    `Error: The NFT should be owned by ${newOwner.toString()}`,
+  ).to.be.true;
+
+  expect(nftAfterSending.royalty.eq(nftBeforeSending.royalty), 'Error: Invalid NFT royalty after sending')
+    .to.be.true;
+
+  expect(nftAfterSending.metadata.eq(nftBeforeSending.metadata), 'Error: Invalid NFT metadata after sending')
+    .to.be.true;
+
+  expect(nftAfterSending.equipped.eq(nftBeforeSending.equipped), 'Error: Invalid NFT equipped status after sending')
+    .to.be.true;
+
+  expect(nftAfterSending.pending.eq(isPending), 'Error: Invalid NFT pending state')
+    .to.be.true;
+}
+
+export async function acceptNft(
+  api: ApiPromise,
+  issuerUri: string,
+  collectionId: number,
+  nftId: number,
+  newOwner: string | [number, number],
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const newOwnerObj = makeNftOwner(api, newOwner);
+
+  const nftBeforeOpt = await getNft(api, collectionId, nftId);
+
+  const tx = api.tx.rmrkCore.acceptNft(collectionId, nftId, newOwnerObj);
+  const events = await executeTransaction(api, issuer, tx);
+
+  const acceptResult = extractRmrkCoreTxResult(events, 'NFTAccepted', (data) => {
+    return {
+      recipient: data[1] as NftOwner,
+      collectionId: parseInt(data[2].toString(), 10),
+      nftId: parseInt(data[3].toString(), 10),
+    };
+  });
+
+  expect(acceptResult.success, 'Error: Unable to accept NFT').to.be.true;
+  const acceptData = acceptResult.successData!;
+
+  expect(acceptData.recipient.eq(newOwnerObj), 'Error: Invalid NFT recipient (from event data)')
+    .to.be.true;
+
+  expect(acceptData.collectionId)
+    .to.be.equal(collectionId, 'Error: Invalid collection ID (from event data)');
+
+  expect(acceptData.nftId)
+    .to.be.equal(nftId, 'Error: Invalid NFT ID (from event data)');
+
+  const nftBefore = nftBeforeOpt.unwrap();
+
+  const isPendingBeforeAccept = nftBefore.pending.isTrue;
+
+  const nftAfter = (await getNft(api, collectionId, nftId)).unwrap();
+  const isPendingAfterAccept = nftAfter.pending.isTrue;
+
+  expect(isPendingBeforeAccept, 'Error: NFT should be pending to be accepted')
+    .to.be.true;
+
+  expect(isPendingAfterAccept, 'Error: NFT should NOT be pending after accept')
+    .to.be.false;
+
+  const isOwnedInUniques = await isNftOwnedBy(api, newOwner, collectionId, nftId);
+  expect(isOwnedInUniques, `Error: created NFT is not actually owned by ${newOwner.toString()}`)
+    .to.be.true;
+}
+
+export async function rejectNft(
+  api: ApiPromise,
+  issuerUri: string,
+  collectionId: number,
+  nftId: number,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const nftBeforeOpt = await getNft(api, collectionId, nftId);
+
+  const tx = api.tx.rmrkCore.rejectNft(collectionId, nftId);
+  const events = await executeTransaction(api, issuer, tx);
+  const rejectResult = extractRmrkCoreTxResult(events, 'NFTRejected', (data) => {
+    return {
+      collectionId: parseInt(data[1].toString(), 10),
+      nftId: parseInt(data[2].toString(), 10),
+    };
+  });
+
+  const rejectData = rejectResult.successData!;
+
+  expect(rejectData.collectionId)
+    .to.be.equal(collectionId, 'Error: Invalid collection ID (from event data)');
+
+  expect(rejectData.nftId)
+    .to.be.equal(nftId, 'Error: Invalid NFT ID (from event data)');
+
+  const nftBefore = nftBeforeOpt.unwrap();
+
+  const isPendingBeforeReject = nftBefore.pending.isTrue;
+
+  const nftAfter = await getNft(api, collectionId, nftId);
+
+  expect(isPendingBeforeReject, 'Error: NFT should be pending to be rejected')
+    .to.be.true;
+
+  expect(nftAfter.isNone, 'Error: NFT should be burned after reject')
+    .to.be.true;
+}
+
+export async function createBase(
+  api: ApiPromise,
+  issuerUri: string,
+  baseType: string,
+  symbol: string,
+  parts: object[],
+): Promise<number> {
+  let baseId = 0;
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+
+  const partTypes = api.createType('Vec<RmrkTraitsPartPartType>', parts) as Vec<PartType>;
+
+  const tx = api.tx.rmrkEquip.createBase(baseType, symbol, partTypes);
+  const events = await executeTransaction(api, issuer, tx);
+
+  const baseResult = extractRmrkEquipTxResult(events, 'BaseCreated', (data) => {
+    return parseInt(data[1].toString(), 10);
+  });
+
+  expect(baseResult.success, 'Error: Unable to create Base')
+    .to.be.true;
+
+  baseId = baseResult.successData!;
+  const baseOptional = await getBase(api, baseId);
+
+  expect(baseOptional.isSome, 'Error: Unable to fetch created Base')
+    .to.be.true;
+
+  const base = baseOptional.unwrap();
+  const baseParts = await getParts(api, baseId);
+
+  expect(base.issuer.toString()).to.be.equal(issuer.address, 'Error: Invalid Base issuer');
+  expect(base.baseType.toUtf8()).to.be.equal(baseType, 'Error: Invalid Base type');
+  expect(base.symbol.toUtf8()).to.be.equal(symbol, 'Error: Invalid Base symbol');
+  expect(partTypes.eq(baseParts), 'Error: Received invalid base parts').to.be.true;
+
+  return baseId;
+}
+
+export async function setResourcePriorities(
+  api: ApiPromise,
+  issuerUri: string,
+  collectionId: number,
+  nftId: number,
+  priorities: number[],
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+
+  const prioritiesVec = api.createType('Vec<u32>', priorities);
+  const tx = api.tx.rmrkCore.setPriority(collectionId, nftId, prioritiesVec);
+  const events = await executeTransaction(api, issuer, tx);
+
+  const prioResult = extractRmrkCoreTxResult(events, 'PrioritySet', (data) => {
+    return {
+      collectionId: parseInt(data[0].toString(), 10),
+      nftId: parseInt(data[1].toString(), 10),
+    };
+  });
+
+  expect(prioResult.success, 'Error: Unable to set resource priorities').to.be.true;
+  const eventData = prioResult.successData!;
+
+  expect(eventData.collectionId)
+    .to.be.equal(collectionId, 'Error: Invalid collection ID (set priorities event data)');
+
+  expect(eventData.nftId).to.be.equal(nftId, 'Error: Invalid NFT ID (set priorities event data');
+
+  for (let i = 0; i < priorities.length; i++) {
+    const resourceId = priorities[i];
+
+    const fetchedPrio = await getResourcePriority(api, collectionId, nftId, resourceId);
+    expect(fetchedPrio).to.be.equal(i, 'Error: Invalid priorities are set');
+  }
+
+}
+
+export async function setEquippableList(
+  api: ApiPromise,
+  issuerUri: string,
+  baseId: number,
+  slotId: number,
+  equippableList: 'All' | 'Empty' | { 'Custom': number[] },
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const equippable = api.createType('RmrkTraitsPartEquippableList', equippableList) as EquippableList;
+
+  const tx = api.tx.rmrkEquip.equippable(baseId, slotId, equippable);
+  const events = await executeTransaction(api, issuer, tx);
+
+  const equipListResult = extractRmrkEquipTxResult(events, 'EquippablesUpdated', (data) => {
+    return {
+      baseId: parseInt(data[0].toString(), 10),
+      slotId: parseInt(data[1].toString(), 10),
+    };
+  });
+
+  expect(equipListResult.success, 'Error: unable to update equippable list').to.be.true;
+  const updateEvent = equipListResult.successData!;
+
+  expect(updateEvent.baseId)
+    .to.be.equal(baseId, 'Error: invalid base ID from update equippable event');
+
+  expect(updateEvent.slotId)
+    .to.be.equal(slotId, 'Error: invalid base ID from update equippable event');
+
+  const fetchedEquippableList = await getEquippableList(api, baseId, slotId);
+
+  expect(fetchedEquippableList, 'Error: unable to fetch equippable list').to.be.not.null;
+  if (fetchedEquippableList) {
+    expect(fetchedEquippableList)
+      .to.be.deep.equal(equippableList, 'Error: invalid equippable list was set');
+  }
+}
+
+export async function addTheme(
+  api: ApiPromise,
+  issuerUri: string,
+  baseId: number,
+  themeObj: object,
+  filterKeys: string[] | null = null,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const theme = api.createType('RmrkTraitsTheme', themeObj) as Theme;
+
+  const tx = api.tx.rmrkEquip.themeAdd(baseId, theme);
+  const events = await executeTransaction(api, issuer, tx);
+
+  expect(isTxResultSuccess(events), 'Error: Unable to add Theme').to.be.true;
+
+  const fetchedThemeOpt = await getTheme(api, baseId, theme.name.toUtf8(), null);
+
+  expect(fetchedThemeOpt.isSome, 'Error: Unable to fetch theme').to.be.true;
+
+  const fetchedTheme = fetchedThemeOpt.unwrap();
+
+  expect(theme.name.eq(fetchedTheme.name), 'Error: Invalid theme name').to.be.true;
+
+  for (let i = 0; i < theme.properties.length; i++) {
+    const property = theme.properties[i];
+    const propertyKey = property.key.toUtf8();
+
+    const propertyFoundCount = fetchedTheme.properties.filter((fetchedProp) => property.key.eq(fetchedProp.key)).length;
+
+    expect(propertyFoundCount > 1, `Error: Too many properties with key ${propertyKey} found`)
+      .to.be.false;
+
+    if (filterKeys) {
+      const isFiltered = fetchedTheme.properties.find((fetchedProp) => fetchedProp.key.eq(property.key)) === undefined;
+
+      if (isFiltered) {
+        expect(propertyFoundCount === 0, `Error: Unexpected filtered key ${propertyKey}`)
+          .to.be.true;
+        continue;
+      }
+    }
+
+    expect(propertyFoundCount === 1, `Error: The property with key ${propertyKey} is not found`)
+      .to.be.true;
+  }
+}
+
+export async function lockCollection(
+  api: ApiPromise,
+  issuerUri: string,
+  collectionId: number,
+  max = 0,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const tx = api.tx.rmrkCore.lockCollection(collectionId);
+  const events = await executeTransaction(api, issuer, tx);
+  const lockResult = extractRmrkCoreTxResult(events, 'CollectionLocked', (data) => {
+    return parseInt(data[1].toString(), 10);
+  });
+  expect(lockResult.success, 'Error: Unable to lock a collection').to.be.true;
+  expect(lockResult.successData!, 'Error: Invalid collection was locked')
+    .to.be.eq(collectionId);
+
+  await getCollection(api, collectionId).then((collectionOption) => {
+    const collection = collectionOption.unwrap();
+    expect(collection.max.unwrap().toNumber()).to.be.equal(max);
+  });
+}
+
+export async function setPropertyCollection(
+  api: ApiPromise,
+  issuerUri: string,
+  collectionId: number,
+  key: string,
+  value: string,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const alice = privateKey(issuerUri, Number(ss58Format));
+
+  const tx = api.tx.rmrkCore.setProperty(collectionId, null, key, value);
+  const events = await executeTransaction(api, alice, tx);
+  const propResult = extractRmrkCoreTxResult(events, 'PropertySet', (data) => {
+    return {
+      collectionId: parseInt(data[0].toString(), 10),
+      nftId: data[1] as Option<u32>,
+      key: data[2] as Bytes,
+      value: data[3] as Bytes,
+    };
+  });
+
+  expect(propResult.success, 'Error: Unable to set collection property').to.be.true;
+  const eventData = propResult.successData!;
+  const eventDescription = 'from set collection property event';
+
+  expect(eventData.collectionId, 'Error: Invalid collection ID ' + eventDescription)
+    .to.be.equal(collectionId);
+
+  expect(eventData.nftId.eq(null), 'Error: Unexpected NFT ID ' + eventDescription)
+    .to.be.true;
+
+  expect(eventData.key.eq(key), 'Error: Invalid property key ' + eventDescription)
+    .to.be.true;
+
+  expect(eventData.value.eq(value), 'Error: Invalid property value ' + eventDescription)
+    .to.be.true;
+
+  expect(await isCollectionPropertyExists(api, collectionId, key, value))
+    .to.be.true;
+}
+
+export async function burnNft(
+  api: ApiPromise,
+  issuerUri: string,
+  collectionId: number,
+  nftId: number,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const maxBurns = 10;
+  const tx = api.tx.rmrkCore.burnNft(collectionId, nftId, maxBurns);
+  const events = await executeTransaction(api, issuer, tx);
+  const burnResult = extractRmrkCoreTxResult(events, 'NFTBurned', (data) => {
+    return parseInt(data[1].toString(), 10);
+  });
+
+  expect(burnResult.success, 'Error: Unable to burn an NFT').to.be.true;
+  expect(burnResult.successData!, 'Error: Invalid NFT was burned')
+    .to.be.eq(nftId);
+
+  const nftBurned = await getNft(api, collectionId, nftId);
+  expect(nftBurned.isSome).to.be.false;
+}
+
+export async function acceptNftResource(
+  api: ApiPromise,
+  issuerUri: string,
+  collectionId: number,
+  nftId: number,
+  resourceId: number,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+
+  const tx = api.tx.rmrkCore.acceptResource(
+    collectionId,
+    nftId,
+    resourceId,
+  );
+
+  const events = await executeTransaction(api, issuer, tx);
+  const acceptResult = extractRmrkCoreTxResult(events, 'ResourceAccepted', (data) => {
+    return {
+      nftId: parseInt(data[0].toString(), 10),
+      resourceId: parseInt(data[1].toString(), 10),
+    };
+  });
+
+  expect(acceptResult.success, 'Error: Unable to accept a resource').to.be.true;
+  expect(acceptResult.successData!.nftId, 'Error: Invalid NFT ID while accepting a resource')
+    .to.be.eq(nftId);
+  expect(acceptResult.successData!.resourceId, 'Error: Invalid resource ID while accepting a resource')
+    .to.be.eq(resourceId);
+
+  const resource = await getResourceById(api, collectionId, nftId, resourceId);
+  checkResourceStatus(resource, 'added');
+}
+
+async function executeResourceCreation(
+  api: ApiPromise,
+  issuer: IKeyringPair,
+  tx: any,
+  collectionId: number,
+  nftId: number,
+  expectedStatus: 'pending' | 'added',
+): Promise<ResourceInfo> {
+  const events = await executeTransaction(api, issuer, tx);
+
+  const resourceResult = extractRmrkCoreTxResult(events, 'ResourceAdded', (data) => {
+    return parseInt(data[1].toString(), 10);
+  });
+  expect(resourceResult.success, 'Error: Unable to add resource').to.be.true;
+  const resourceId = resourceResult.successData!;
+
+  const resource = await getResourceById(api, collectionId, nftId, resourceId);
+  checkResourceStatus(resource, expectedStatus);
+
+  return resource;
+}
+
+export async function addNftBasicResource(
+  api: ApiPromise,
+  issuerUri: string,
+  expectedStatus: 'pending' | 'added',
+  collectionId: number,
+  nftId: number,
+  src: string | null,
+  metadata: string | null,
+  license: string | null,
+  thumb: string | null,
+): Promise<number> {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+
+  const basicResource = api.createType('RmrkTraitsResourceBasicResource', {
+    src: src,
+    metadata: metadata,
+    license: license,
+    thumb: thumb,
+  }) as BasicResource;
+
+  const tx = api.tx.rmrkCore.addBasicResource(
+    collectionId,
+    nftId,
+    basicResource,
+  );
+
+  const resource = await executeResourceCreation(api, issuer, tx, collectionId, nftId, expectedStatus);
+
+  // FIXME A workaround. It seems it is a PolkadotJS bug.
+  // All of the following are `false`.
+  //
+  // console.log('>>> basic:', resource.resource.isBasic);
+  // console.log('>>> composable:', resource.resource.isComposable);
+  // console.log('>>> slot:', resource.resource.isSlot);
+  const resourceJson = resource.resource.toHuman() as any;
+
+  expect(Object.prototype.hasOwnProperty.call(resourceJson, 'Basic'), 'Error: Expected basic resource type')
+    .to.be.true;
+
+  const recvBasicRes = resourceJson['Basic'];
+
+  expect(recvBasicRes.src, 'Error: Invalid basic resource src')
+    .to.be.eq(src);
+  expect(recvBasicRes.metadata, 'Error: basic first resource metadata')
+    .to.be.eq(metadata);
+  expect(recvBasicRes.license, 'Error: basic first resource license')
+    .to.be.eq(license);
+  expect(recvBasicRes.thumb, 'Error: basic first resource thumb')
+    .to.be.eq(thumb);
+
+  return resource.id.toNumber();
+}
+
+export async function addNftComposableResource(
+  api: ApiPromise,
+  issuerUri: string,
+  expectedStatus: 'pending' | 'added',
+  collectionId: number,
+  nftId: number,
+  parts: number[],
+  baseId: number,
+  src: string | null,
+  metadata: string | null,
+  license: string | null,
+  thumb: string | null,
+): Promise<number> {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+
+  const composableResource = api.createType('RmrkTraitsResourceComposableResource', {
+    parts: parts, // api.createType('Vec<u32>', parts),
+    base: baseId,
+    src: src,
+    metadata: metadata,
+    license: license,
+    thumb: thumb,
+  }) as ComposableResource;
+
+  const tx = api.tx.rmrkCore.addComposableResource(
+    collectionId,
+    nftId,
+    composableResource,
+  );
+
+  const resource = await executeResourceCreation(api, issuer, tx, collectionId, nftId, expectedStatus);
+
+  // FIXME A workaround. It seems it is a PolkadotJS bug.
+  // All of the following are `false`.
+  //
+  // console.log('>>> basic:', resource.resource.isBasic);
+  // console.log('>>> composable:', resource.resource.isComposable);
+  // console.log('>>> slot:', resource.resource.isSlot);
+  const resourceJson = resource.resource.toHuman() as any;
+
+  expect(Object.prototype.hasOwnProperty.call(resourceJson, 'Composable'), 'Error: Expected composable resource type')
+    .to.be.true;
+
+  const recvComposableRes = resourceJson['Composable'];
+
+  expect(recvComposableRes.parts.toString(), 'Error: Invalid composable resource parts')
+    .to.be.eq(parts.toString());
+  expect(recvComposableRes.base, 'Error: Invalid composable resource base id')
+    .to.be.eq(baseId.toString());
+  expect(recvComposableRes.src, 'Error: Invalid composable resource src')
+    .to.be.eq(src);
+  expect(recvComposableRes.metadata, 'Error: Invalid composable resource metadata')
+    .to.be.eq(metadata);
+  expect(recvComposableRes.license, 'Error: Invalid composable resource license')
+    .to.be.eq(license);
+  expect(recvComposableRes.thumb, 'Error: Invalid composable resource thumb')
+    .to.be.eq(thumb);
+
+  return resource.id.toNumber();
+}
+
+export async function addNftSlotResource(
+  api: ApiPromise,
+  issuerUri: string,
+  expectedStatus: 'pending' | 'added',
+  collectionId: number,
+  nftId: number,
+  baseId: number,
+  slotId: number,
+  src: string | null,
+  metadata: string | null,
+  license: string | null,
+  thumb: string | null,
+): Promise<number>  {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+
+  const slotResource = api.createType('RmrkTraitsResourceSlotResource', {
+    base: baseId,
+    src: src,
+    metadata,
+    slot: slotId,
+    license: license,
+    thumb: thumb,
+  }) as SlotResource;
+
+  const tx = api.tx.rmrkCore.addSlotResource(
+    collectionId,
+    nftId,
+    slotResource,
+  );
+
+  const resource = await executeResourceCreation(api, issuer, tx, collectionId, nftId, expectedStatus);
+
+  // FIXME A workaround. It seems it is a PolkadotJS bug.
+  // All of the following are `false`.
+  //
+  // console.log('>>> basic:', resource.resource.isBasic);
+  // console.log('>>> composable:', resource.resource.isComposable);
+  // console.log('>>> slot:', resource.resource.isSlot);
+  const resourceJson = resource.resource.toHuman() as any;
+
+  expect(Object.prototype.hasOwnProperty.call(resourceJson, 'Slot'), 'Error: Expected slot resource type')
+    .to.be.true;
+
+  const recvSlotRes = resourceJson['Slot'];
+
+  expect(recvSlotRes.base, 'Error: Invalid slot resource base id')
+    .to.be.eq(baseId.toString());
+  expect(recvSlotRes.slot, 'Error: Invalid slot resource slot id')
+    .to.be.eq(slotId.toString());
+  expect(recvSlotRes.src, 'Error: Invalid slot resource src')
+    .to.be.eq(src);
+  expect(recvSlotRes.metadata, 'Error: Invalid slot resource metadata')
+    .to.be.eq(metadata);
+  expect(recvSlotRes.license, 'Error: Invalid slot resource license')
+    .to.be.eq(license);
+  expect(recvSlotRes.thumb, 'Error: Invalid slot resource thumb')
+    .to.be.eq(thumb);
+
+  return resource.id.toNumber();
+}
+
+export async function equipNft(
+  api: ApiPromise,
+  issuerUri: string,
+  item: NftIdTuple,
+  equipper: NftIdTuple,
+  resource: number,
+  base: number,
+  slot: number,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const tx = api.tx.rmrkEquip.equip(item, equipper, resource, base, slot);
+  const events = await executeTransaction(api, issuer, tx);
+  const equipResult = extractRmrkEquipTxResult(events, 'SlotEquipped', (data) => {
+    return {
+      item_collection: parseInt(data[0].toString(), 10),
+      item_nft: parseInt(data[1].toString(), 10),
+      base_id: parseInt(data[2].toString(), 10),
+      slot_id: parseInt(data[3].toString(), 10),
+    };
+  });
+  expect(equipResult.success, 'Error: Unable to equip an item').to.be.true;
+  expect(equipResult.successData!.item_collection, 'Error: Invalid item collection id')
+    .to.be.eq(item[0]);
+  expect(equipResult.successData!.item_nft, 'Error: Invalid item NFT id')
+    .to.be.eq(item[1]);
+  expect(equipResult.successData!.base_id, 'Error: Invalid base id')
+    .to.be.eq(base);
+  expect(equipResult.successData!.slot_id, 'Error: Invalid slot id')
+    .to.be.eq(slot);
+}
+
+export async function unequipNft(
+  api: ApiPromise,
+  issuerUri: string,
+  item: any,
+  equipper: any,
+  resource: number,
+  base: number,
+  slot: number,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+  const tx = api.tx.rmrkEquip.equip(item, equipper, resource, base, slot);
+  const events = await executeTransaction(api, issuer, tx);
+
+  const unEquipResult = extractRmrkEquipTxResult(
+    events,
+    'SlotUnequipped',
+    (data) => {
+      return {
+        item_collection: parseInt(data[0].toString(), 10),
+        item_nft: parseInt(data[1].toString(), 10),
+        base_id: parseInt(data[2].toString(), 10),
+        slot_id: parseInt(data[3].toString(), 10),
+      };
+    },
+  );
+
+  expect(unEquipResult.success, 'Error: Unable to unequip an item').to.be.true;
+  expect(unEquipResult.successData!.item_collection, 'Error: Invalid item collection id')
+    .to.be.eq(item[0]);
+  expect(unEquipResult.successData!.item_nft, 'Error: Invalid item NFT id')
+    .to.be.eq(item[1]);
+  expect(unEquipResult.successData!.base_id, 'Error: Invalid base id')
+    .to.be.eq(base);
+  expect(unEquipResult.successData!.slot_id, 'Error: Invalid slot id')
+    .to.be.eq(slot);
+}
+
+export async function removeNftResource(
+  api: ApiPromise,
+  expectedStatus: 'pending' | 'removed',
+  issuerUri: string,
+  collectionId: number,
+  nftId: number,
+  resourceId: number,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+
+  const tx = api.tx.rmrkCore.removeResource(collectionId, nftId, resourceId);
+  const events = await executeTransaction(api, issuer, tx);
+  const removeResult = extractRmrkCoreTxResult(events, 'ResourceRemoval', (data) => {
+    return {
+      nftId: parseInt(data[0].toString(), 10),
+      resourceId: parseInt(data[1].toString(), 10),
+    };
+  });
+  expect(removeResult.success, 'Error: Unable to remove a resource').to.be.true;
+  expect(removeResult.successData!.nftId, 'Error: Invalid NFT Id while removing a resource')
+    .to.be.eq(nftId);
+  expect(removeResult.successData!.resourceId, 'Error: Invalid resource Id while removing a resource')
+    .to.be.eq(resourceId);
+
+  const afterDeleting = await findResourceById(api, collectionId, nftId, resourceId);
+
+  if (expectedStatus === 'pending') {
+    expect(afterDeleting).not.to.be.null;
+    expect(afterDeleting?.pendingRemoval.isTrue).to.be.equal(true);
+  } else {
+    expect(afterDeleting).to.be.null;
+  }
+}
+
+export async function acceptResourceRemoval(
+  api: ApiPromise,
+  issuerUri: string,
+  collectionId: number,
+  nftId: number,
+  resourceId: number,
+) {
+  const ss58Format = api.registry.getChainProperties()!.toJSON().ss58Format;
+  const issuer = privateKey(issuerUri, Number(ss58Format));
+
+  const tx = api.tx.rmrkCore.acceptResourceRemoval(collectionId, nftId, resourceId);
+  const events = await executeTransaction(api, issuer, tx);
+  const acceptResult = extractRmrkCoreTxResult(events, 'ResourceRemovalAccepted', (data) => {
+    return {
+      nftId: parseInt(data[0].toString(), 10),
+      resourceId: parseInt(data[1].toString(), 10),
+    };
+  });
+  expect(acceptResult.success, 'Error: Unable to accept a resource').to.be.true;
+  expect(acceptResult.successData!.nftId, 'Error: Invalid NFT Id while accepting a resource')
+    .to.be.eq(nftId);
+  expect(acceptResult.successData!.resourceId, 'Error: Invalid resource Id while accepting a resource')
+    .to.be.eq(resourceId);
+
+  const afterDeleting = await findResourceById(api, collectionId, nftId, resourceId);
+  expect(afterDeleting, 'Error: resource deleting failed').to.be.null;
+}
modifiedtests/src/substrate/substrate-api.tsdiffbeforeafterboth
--- a/tests/src/substrate/substrate-api.ts
+++ b/tests/src/substrate/substrate-api.ts
@@ -59,6 +59,17 @@
   };
 }
 
+export async function getApiConnection(settings: ApiOptions | undefined = undefined): Promise<ApiPromise> {
+  settings = settings || defaultApiOptions();
+  const api = new ApiPromise(settings);
+
+  if (api) {
+    await api.isReadyOrError;
+  }
+
+  return api;
+}
+
 export default async function usingApi<T = void>(action: (api: ApiPromise, privateKeyWrapper: (account: string) => IKeyringPair) => Promise<T>, settings: ApiOptions | undefined = undefined): Promise<T> {
   settings = settings || defaultApiOptions();
   const api: ApiPromise = new ApiPromise(settings);
modifiedtests/src/util/helpers.tsdiffbeforeafterboth
--- a/tests/src/util/helpers.ts
+++ b/tests/src/util/helpers.ts
@@ -830,6 +830,25 @@
   });
 }
 
+export async function burnItemExpectFailure(sender: IKeyringPair, collectionId: number, tokenId: number, value: number | bigint = 1) {
+  await usingApi(async (api) => {
+    const tx = api.tx.unique.burnItem(collectionId, tokenId, value);
+
+    const events = await expect(submitTransactionExpectFailAsync(sender, tx)).to.be.rejected;
+    const result = getCreateCollectionResult(events);
+    // tslint:disable-next-line:no-unused-expression
+    expect(result.success).to.be.false;
+  });
+}
+
+export async function burnFromExpectSuccess(sender: IKeyringPair, from: IKeyringPair | CrossAccountId, collectionId: number, tokenId: number, value: number | bigint = 1) {
+  await usingApi(async (api) => {
+    const tx = api.tx.unique.burnFrom(collectionId, normalizeAccountId(from), tokenId, value);
+    const events = await submitTransactionAsync(sender, tx);
+    return getGenericResult(events).success;
+  });
+}
+
 export async function
 approve(
   api: ApiPromise,
@@ -1005,7 +1024,7 @@
       expectedBlockNumber, 
       repetitions > 1 ? [period, repetitions] : null, 
       0, 
-      {value: operationTx as any},
+      {Value: operationTx as any},
     );
 
     const events = await submitTransactionAsync(sender, scheduleTx);
@@ -1032,7 +1051,7 @@
       expectedBlockNumber, 
       repetitions <= 1 ? null : [period, repetitions], 
       0, 
-      {value: operationTx as any},
+      {Value: operationTx as any},
     );
 
     //const events = 
@@ -1361,7 +1380,7 @@
 
     let tx;
     if (createMode === 'NFT') {
-      const data = api.createType('UpDataStructsCreateItemData', {NFT: {properties: props}});
+      const data = api.createType('UpDataStructsCreateItemData', {NFT: {properties: props}}) as UpDataStructsCreateItemData;
       tx = api.tx.unique.createItem(collectionId, normalizeAccountId(owner), data);
     } else {
       tx = api.tx.unique.createItem(collectionId, normalizeAccountId(owner), createMode);
@@ -1630,3 +1649,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;
+}