git.delta.rocks / unique-network / refs/commits / 7a034de544fd

difftreelog

refactor move ChainLimits to constants

Yaroslav Bolyukin2021-08-10parent: #fb1ebd6.patch.diff
in: master

5 files changed

modifiedpallets/nft/src/eth/sponsoring.rsdiffbeforeafterboth
--- a/pallets/nft/src/eth/sponsoring.rs
+++ b/pallets/nft/src/eth/sponsoring.rs
@@ -2,12 +2,11 @@
 
 use crate::{
 	Collection, CollectionById, Config, FungibleTransferBasket, NftTransferBasket,
-	eth::{account::EvmBackwardsAddressMapping, map_eth_to_id}, limit,
+	eth::{account::EvmBackwardsAddressMapping, map_eth_to_id},
 };
 use evm_coder::{Call, abi::AbiReader};
 use frame_support::{
 	storage::{StorageMap, StorageDoubleMap},
-	traits::Get,
 };
 use sp_core::H160;
 use sp_std::prelude::*;
@@ -18,6 +17,7 @@
 };
 use core::convert::TryInto;
 use core::marker::PhantomData;
+use nft_data_structs::{NFT_SPONSOR_TRANSFER_TIMEOUT, FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT};
 
 struct AnyError;
 
@@ -44,7 +44,7 @@
 					let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
 						collection_limits.sponsor_transfer_timeout
 					} else {
-						<limit!(T, NftSponsorTransferTimeout)>::get()
+						NFT_SPONSOR_TRANSFER_TIMEOUT
 					};
 
 					let mut sponsor = true;
@@ -75,7 +75,7 @@
 					let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {
 						collection_limits.sponsor_transfer_timeout
 					} else {
-						<limit!(T, FungibleSponsorTransferTimeout)>::get()
+						FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT
 					};
 
 					let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;
modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
--- a/pallets/nft/src/lib.rs
+++ b/pallets/nft/src/lib.rs
@@ -38,7 +38,9 @@
 use core::ops::{Deref, DerefMut};
 use nft_data_structs::{
 	MAX_DECIMAL_POINTS, MAX_SPONSOR_TIMEOUT, MAX_TOKEN_OWNERSHIP, MAX_REFUNGIBLE_PIECES,
-	AccessMode, ChainLimits, Collection, CreateItemData, CollectionLimits, CollectionId,
+	CUSTOM_DATA_LIMIT, COLLECTION_NUMBER_LIMIT, ACCOUNT_TOKEN_OWNERSHIP_LIMIT,
+	VARIABLE_ON_CHAIN_SCHEMA_LIMIT, CONST_ON_CHAIN_SCHEMA_LIMIT, COLLECTION_ADMINS_LIMIT,
+	OFFCHAIN_SCHEMA_LIMIT, AccessMode, Collection, CreateItemData, CollectionLimits, CollectionId,
 	CollectionMode, TokenId, SchemaVersion, SponsorshipState, Ownership, NftItemType,
 	FungibleItemType, ReFungibleItemType,
 };
@@ -243,15 +245,6 @@
 		<<Self as Config>::Currency as Currency<Self::AccountId>>::Balance,
 	>;
 	type TreasuryAccountId: Get<Self::AccountId>;
-	type ChainLimits: ChainLimits;
-}
-
-pub type ChainLimitsOf<T> = <T as Config>::ChainLimits;
-#[macro_export]
-macro_rules! limit {
-	($config:ty, $limit:ident) => {
-		<$crate::ChainLimitsOf<$config> as nft_data_structs::ChainLimits>::$limit
-	}
 }
 
 // # Used definitions
@@ -495,7 +488,7 @@
 			let destroyed_count = DestroyedCollectionCount::get();
 
 			// bound Total number of collections
-			ensure!(created_count - destroyed_count < <limit!(T, CollectionNumberLimit)>::get(), Error::<T>::TotalCollectionsLimitExceeded);
+			ensure!(created_count - destroyed_count < COLLECTION_NUMBER_LIMIT, Error::<T>::TotalCollectionsLimitExceeded);
 
 			// check params
 			ensure!(decimal_points <= MAX_DECIMAL_POINTS, Error::<T>::CollectionDecimalPointLimitExceeded);
@@ -511,7 +504,7 @@
 			CreatedCollectionCount::put(next_id);
 
 			let limits = CollectionLimits {
-				sponsored_data_size: <limit!(T, CustomDataLimit)>::get(),
+				sponsored_data_size: CUSTOM_DATA_LIMIT,
 				..Default::default()
 			};
 
@@ -740,7 +733,7 @@
 			match admin_arr.binary_search(&new_admin_id) {
 				Ok(_) => {},
 				Err(idx) => {
-					ensure!(admin_arr.len() < <limit!(T, CollectionAdminsLimit)>::get() as usize, Error::<T>::CollectionAdminsLimitExceeded);
+					ensure!(admin_arr.len() < COLLECTION_ADMINS_LIMIT as usize, Error::<T>::CollectionAdminsLimitExceeded);
 					admin_arr.insert(idx, new_admin_id);
 					<AdminList<T>>::insert(collection_id, admin_arr);
 				}
@@ -864,7 +857,7 @@
 
 		#[weight = <T as Config>::WeightInfo::create_item(data.data_size())]
 		#[transactional]
-		pub fn create_item(origin, collection_id: CollectionId, owner: T::CrossAccountId, data: CreateItemData<ChainLimitsOf<T>>) -> DispatchResult {
+		pub fn create_item(origin, collection_id: CollectionId, owner: T::CrossAccountId, data: CreateItemData) -> DispatchResult {
 			let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
 			let collection = Self::get_collection(collection_id)?;
 
@@ -895,7 +888,7 @@
 							   .map(|data| { data.data_size() })
 							   .sum())]
 		#[transactional]
-		pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::CrossAccountId, items_data: Vec<CreateItemData<ChainLimitsOf<T>>>) -> DispatchResult {
+		pub fn create_multiple_items(origin, collection_id: CollectionId, owner: T::CrossAccountId, items_data: Vec<CreateItemData>) -> DispatchResult {
 
 			ensure!(!items_data.is_empty(), Error::<T>::EmptyArgument);
 			let sender = T::CrossAccountId::from_sub(ensure_signed(origin)?);
@@ -1140,7 +1133,7 @@
 			Self::check_owner_or_admin_permissions(&target_collection, &sender)?;
 
 			// check schema limit
-			ensure!(schema.len() as u32 <= <limit!(T, OffchainSchemaLimit)>::get(), "");
+			ensure!(schema.len() as u32 <= OFFCHAIN_SCHEMA_LIMIT, "");
 
 			target_collection.offchain_schema = schema;
 			target_collection.save()
@@ -1170,7 +1163,7 @@
 			Self::check_owner_or_admin_permissions(&target_collection, &sender)?;
 
 			// check schema limit
-			ensure!(schema.len() as u32 <= <limit!(T, ConstOnChainSchemaLimit)>::get(), "");
+			ensure!(schema.len() as u32 <= CONST_ON_CHAIN_SCHEMA_LIMIT, "");
 
 			target_collection.const_on_chain_schema = schema;
 			target_collection.save()
@@ -1200,7 +1193,7 @@
 			Self::check_owner_or_admin_permissions(&target_collection, &sender)?;
 
 			// check schema limit
-			ensure!(schema.len() as u32 <= <limit!(T, VariableOnChainSchemaLimit)>::get(), "");
+			ensure!(schema.len() as u32 <= VARIABLE_ON_CHAIN_SCHEMA_LIMIT, "");
 
 			target_collection.variable_on_chain_schema = schema;
 			target_collection.save()
@@ -1221,7 +1214,7 @@
 			// collection bounds
 			ensure!(new_limits.sponsor_transfer_timeout <= MAX_SPONSOR_TIMEOUT &&
 				new_limits.account_token_ownership_limit <= MAX_TOKEN_OWNERSHIP &&
-				new_limits.sponsored_data_size <= <ChainLimitsOf<T> as ChainLimits>::CustomDataLimit::get(),
+				new_limits.sponsored_data_size <= CUSTOM_DATA_LIMIT,
 				Error::<T>::CollectionLimitBoundsExceeded);
 
 			// token_limit   check  prev
@@ -1246,7 +1239,7 @@
 		sender: &T::CrossAccountId,
 		collection: &CollectionHandle<T>,
 		owner: &T::CrossAccountId,
-		data: CreateItemData<ChainLimitsOf<T>>,
+		data: CreateItemData,
 	) -> DispatchResult {
 		Self::can_create_items_in_collection(collection, sender, owner, 1)?;
 		Self::validate_create_item_args(collection, &data)?;
@@ -1457,7 +1450,7 @@
 		Self::token_exists(collection, item_id)?;
 
 		ensure!(
-			<limit!(T, CustomDataLimit)>::get() >= data.len() as u32,
+			CUSTOM_DATA_LIMIT >= data.len() as u32,
 			Error::<T>::TokenVariableDataLimitExceeded
 		);
 
@@ -1484,7 +1477,7 @@
 		sender: &T::CrossAccountId,
 		collection: &CollectionHandle<T>,
 		owner: &T::CrossAccountId,
-		items_data: Vec<CreateItemData<ChainLimitsOf<T>>>,
+		items_data: Vec<CreateItemData>,
 	) -> DispatchResult {
 		Self::can_create_items_in_collection(collection, sender, owner, items_data.len() as u32)?;
 
@@ -1598,18 +1591,18 @@
 
 	fn validate_create_item_args(
 		target_collection: &CollectionHandle<T>,
-		data: &CreateItemData<ChainLimitsOf<T>>,
+		data: &CreateItemData,
 	) -> DispatchResult {
 		match target_collection.mode {
 			CollectionMode::NFT => {
 				if let CreateItemData::NFT(data) = data {
 					// check sizes
 					ensure!(
-						<limit!(T, CustomDataLimit)>::get() >= data.const_data.len() as u32,
+						CUSTOM_DATA_LIMIT >= data.const_data.len() as u32,
 						Error::<T>::TokenConstDataLimitExceeded
 					);
 					ensure!(
-						<limit!(T, CustomDataLimit)>::get() >= data.variable_data.len() as u32,
+						CUSTOM_DATA_LIMIT >= data.variable_data.len() as u32,
 						Error::<T>::TokenVariableDataLimitExceeded
 					);
 				} else {
@@ -1626,11 +1619,11 @@
 				if let CreateItemData::ReFungible(data) = data {
 					// check sizes
 					ensure!(
-						<limit!(T, CustomDataLimit)>::get() >= data.const_data.len() as u32,
+						CUSTOM_DATA_LIMIT >= data.const_data.len() as u32,
 						Error::<T>::TokenConstDataLimitExceeded
 					);
 					ensure!(
-						<limit!(T, CustomDataLimit)>::get() >= data.variable_data.len() as u32,
+						CUSTOM_DATA_LIMIT >= data.variable_data.len() as u32,
 						Error::<T>::TokenVariableDataLimitExceeded
 					);
 
@@ -1655,7 +1648,7 @@
 	fn create_item_no_validation(
 		collection: &CollectionHandle<T>,
 		owner: &T::CrossAccountId,
-		data: CreateItemData<ChainLimitsOf<T>>,
+		data: CreateItemData,
 	) -> DispatchResult {
 		match data {
 			CreateItemData::NFT(data) => {
@@ -2278,7 +2271,7 @@
 			// bound Owned tokens by a single address
 			let count = <AccountItemCount<T>>::get(owner.as_sub());
 			ensure!(
-				count < <limit!(T, AccountTokenOwnershipLimit)>::get(),
+				count < ACCOUNT_TOKEN_OWNERSHIP_LIMIT,
 				Error::<T>::AddressOwnershipLimitExceeded
 			);
 
modifiedpallets/nft/src/sponsorship.rsdiffbeforeafterboth
before · pallets/nft/src/sponsorship.rs
1use crate::{2	Config, Call, CollectionById, CreateItemBasket, VariableMetaDataBasket,3	ReFungibleTransferBasket, FungibleTransferBasket, NftTransferBasket,4	CreateItemData, CollectionMode, limit,5};6use core::marker::PhantomData;7use up_sponsorship::SponsorshipHandler;8use frame_support::{9	traits::{IsSubType, Get},10	storage::{StorageMap, StorageDoubleMap},11};12use nft_data_structs::{TokenId, CollectionId};1314pub struct NftSponsorshipHandler<T>(PhantomData<T>);15impl<T: Config> NftSponsorshipHandler<T> {16	pub fn withdraw_create_item(17		who: &T::AccountId,18		collection_id: &CollectionId,19		_properties: &CreateItemData<T::ChainLimits>,20	) -> Option<T::AccountId> {21		let collection = CollectionById::<T>::get(collection_id)?;2223		// sponsor timeout24		let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;2526		let limit = collection.limits.sponsor_transfer_timeout;27		if CreateItemBasket::<T>::contains_key((collection_id, &who)) {28			let last_tx_block = CreateItemBasket::<T>::get((collection_id, &who));29			let limit_time = last_tx_block + limit.into();30			if block_number <= limit_time {31				return None;32			}33		}34		CreateItemBasket::<T>::insert((collection_id, who.clone()), block_number);3536		// check free create limit37		if collection.limits.sponsored_data_size >= (_properties.data_size() as u32) {38			collection.sponsorship.sponsor().cloned()39		} else {40			None41		}42	}4344	pub fn withdraw_transfer(45		who: &T::AccountId,46		collection_id: &CollectionId,47		item_id: &TokenId,48	) -> Option<T::AccountId> {49		let collection = CollectionById::<T>::get(collection_id)?;5051		let mut sponsor_transfer = false;52		if collection.sponsorship.confirmed() {53			let collection_limits = collection.limits.clone();54			let collection_mode = collection.mode.clone();5556			// sponsor timeout57			let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;58			sponsor_transfer = match collection_mode {59				CollectionMode::NFT => {60					// get correct limit61					let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {62						collection_limits.sponsor_transfer_timeout63					} else {64						<limit!(T, NftSponsorTransferTimeout)>::get()65					};6667					let mut sponsored = true;68					if NftTransferBasket::<T>::contains_key(collection_id, item_id) {69						let last_tx_block = NftTransferBasket::<T>::get(collection_id, item_id);70						let limit_time = last_tx_block + limit.into();71						if block_number <= limit_time {72							sponsored = false;73						}74					}75					if sponsored {76						NftTransferBasket::<T>::insert(collection_id, item_id, block_number);77					}7879					sponsored80				}81				CollectionMode::Fungible(_) => {82					// get correct limit83					let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {84						collection_limits.sponsor_transfer_timeout85					} else {86						<limit!(T, FungibleSponsorTransferTimeout)>::get()87					};8889					let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;90					let mut sponsored = true;91					if FungibleTransferBasket::<T>::contains_key(collection_id, who) {92						let last_tx_block = FungibleTransferBasket::<T>::get(collection_id, who);93						let limit_time = last_tx_block + limit.into();94						if block_number <= limit_time {95							sponsored = false;96						}97					}98					if sponsored {99						FungibleTransferBasket::<T>::insert(collection_id, who, block_number);100					}101102					sponsored103				}104				CollectionMode::ReFungible => {105					// get correct limit106					let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {107						collection_limits.sponsor_transfer_timeout108					} else {109						<limit!(T, ReFungibleSponsorTransferTimeout)>::get()110					};111112					let mut sponsored = true;113					if ReFungibleTransferBasket::<T>::contains_key(collection_id, item_id) {114						let last_tx_block =115							ReFungibleTransferBasket::<T>::get(collection_id, item_id);116						let limit_time = last_tx_block + limit.into();117						if block_number <= limit_time {118							sponsored = false;119						}120					}121					if sponsored {122						ReFungibleTransferBasket::<T>::insert(collection_id, item_id, block_number);123					}124125					sponsored126				}127				_ => false,128			};129		}130131		if !sponsor_transfer {132			None133		} else {134			collection.sponsorship.sponsor().cloned()135		}136	}137138	pub fn withdraw_set_variable_meta_data(139		collection_id: &CollectionId,140		item_id: &TokenId,141		data: &[u8],142	) -> Option<T::AccountId> {143		let mut sponsor_metadata_changes = false;144145		let collection = CollectionById::<T>::get(collection_id)?;146147		if collection.sponsorship.confirmed() &&148			// Can't sponsor fungible collection, this tx will be rejected149			// as invalid150			!matches!(collection.mode, CollectionMode::Fungible(_)) &&151			data.len() <= collection.limits.sponsored_data_size as usize152		{153			if let Some(rate_limit) = collection.limits.sponsored_data_rate_limit {154				let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;155156				if VariableMetaDataBasket::<T>::get(collection_id, item_id)157					.map(|last_block| block_number - last_block > rate_limit)158					.unwrap_or(true)159				{160					sponsor_metadata_changes = true;161					VariableMetaDataBasket::<T>::insert(collection_id, item_id, block_number);162				}163			}164		}165166		if !sponsor_metadata_changes {167			None168		} else {169			collection.sponsorship.sponsor().cloned()170		}171	}172}173174impl<T, C> SponsorshipHandler<T::AccountId, C> for NftSponsorshipHandler<T>175where176	T: Config,177	C: IsSubType<Call<T>>,178{179	fn get_sponsor(who: &T::AccountId, call: &C) -> Option<T::AccountId> {180		match IsSubType::<Call<T>>::is_sub_type(call)? {181			Call::create_item(collection_id, _owner, properties) => {182				Self::withdraw_create_item(who, collection_id, properties)183			}184			Call::transfer(_new_owner, collection_id, item_id, _value) => {185				Self::withdraw_transfer(who, collection_id, item_id)186			}187			Call::set_variable_meta_data(collection_id, item_id, data) => {188				Self::withdraw_set_variable_meta_data(collection_id, item_id, data)189			}190			_ => None,191		}192	}193}
modifiedprimitives/nft/src/lib.rsdiffbeforeafterboth
--- a/primitives/nft/src/lib.rs
+++ b/primitives/nft/src/lib.rs
@@ -28,6 +28,29 @@
 pub const MAX_SPONSOR_TIMEOUT: u32 = 10_368_000;
 pub const MAX_TOKEN_OWNERSHIP: u32 = 10_000_000;
 
+pub const COLLECTION_NUMBER_LIMIT: u32 = 100000;
+pub const CUSTOM_DATA_LIMIT: u32 = 2048;
+pub const COLLECTION_ADMINS_LIMIT: u64 = 5;
+pub const ACCOUNT_TOKEN_OWNERSHIP_LIMIT: u32 = 1000000;
+
+// Timeouts for item types in passed blocks
+pub const NFT_SPONSOR_TRANSFER_TIMEOUT: u32 = 5;
+pub const FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT: u32 = 5;
+pub const REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT: u32 = 5;
+
+// Schema limits
+pub const OFFCHAIN_SCHEMA_LIMIT: u32 = 1024;
+pub const VARIABLE_ON_CHAIN_SCHEMA_LIMIT: u32 = 1024;
+pub const CONST_ON_CHAIN_SCHEMA_LIMIT: u32 = 1024;
+
+/// How much items can be created per single
+/// create_many call
+pub const MAX_ITEMS_PER_BATCH: u32 = 200;
+
+parameter_types! {
+	pub const CustomDataLimit: u32 = CUSTOM_DATA_LIMIT;
+}
+
 pub type CollectionId = u32;
 pub type TokenId = u32;
 pub type DecimalPoints = u8;
@@ -203,27 +226,6 @@
 	}
 }
 
-pub trait ChainLimits {
-	type CollectionNumberLimit: Get<u32>;
-	type AccountTokenOwnershipLimit: Get<u32>;
-	type CollectionAdminsLimit: Get<u64>;
-	type CustomDataLimit: Get<u32>;
-
-	// Timeouts for item types in passed blocks
-	type NftSponsorTransferTimeout: Get<u32>;
-	type FungibleSponsorTransferTimeout: Get<u32>;
-	type ReFungibleSponsorTransferTimeout: Get<u32>;
-
-	// Schema limits
-	type OffchainSchemaLimit: Get<u32>;
-	type VariableOnChainSchemaLimit: Get<u32>;
-	type ConstOnChainSchemaLimit: Get<u32>;
-
-	/// How much items can be created per single
-	/// create_many call
-	type MaxItemsPerBatch: Get<u32>;
-}
-
 /// BoundedVec doesn't supports serde
 #[cfg(feature = "serde1")]
 mod bounded_serde {
@@ -257,16 +259,16 @@
 	}
 }
 
-#[derive(Encode, Decode, MaxEncodedLen, Default, Derivative)]
+#[derive(Encode, Decode, MaxEncodedLen, Default, PartialEq, Clone, Derivative)]
 #[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
-#[derivative(Debug(bound = ""), PartialEq(bound = ""), Clone(bound = ""))]
-pub struct CreateNftData<T: ChainLimits> {
+#[derivative(Debug)]
+pub struct CreateNftData {
 	#[cfg_attr(feature = "serde1", serde(with = "bounded_serde"))]
 	#[derivative(Debug = "ignore")]
-	pub const_data: BoundedVec<u8, T::CustomDataLimit>,
+	pub const_data: BoundedVec<u8, CustomDataLimit>,
 	#[cfg_attr(feature = "serde1", serde(with = "bounded_serde"))]
 	#[derivative(Debug = "ignore")]
-	pub variable_data: BoundedVec<u8, T::CustomDataLimit>,
+	pub variable_data: BoundedVec<u8, CustomDataLimit>,
 }
 
 #[derive(Encode, Decode, MaxEncodedLen, Default, Debug, Clone, PartialEq)]
@@ -275,29 +277,28 @@
 	pub value: u128,
 }
 
-#[derive(Encode, Decode, MaxEncodedLen, Default, Derivative)]
+#[derive(Encode, Decode, MaxEncodedLen, Default, PartialEq, Clone, Derivative)]
 #[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
-#[derivative(Debug(bound = ""), PartialEq(bound = ""), Clone(bound = ""))]
-pub struct CreateReFungibleData<T: ChainLimits> {
+#[derivative(Debug)]
+pub struct CreateReFungibleData {
 	#[cfg_attr(feature = "serde1", serde(with = "bounded_serde"))]
 	#[derivative(Debug = "ignore")]
-	pub const_data: BoundedVec<u8, T::CustomDataLimit>,
+	pub const_data: BoundedVec<u8, CustomDataLimit>,
 	#[cfg_attr(feature = "serde1", serde(with = "bounded_serde"))]
 	#[derivative(Debug = "ignore")]
-	pub variable_data: BoundedVec<u8, T::CustomDataLimit>,
+	pub variable_data: BoundedVec<u8, CustomDataLimit>,
 	pub pieces: u128,
 }
 
-#[derive(Encode, Decode, MaxEncodedLen, Derivative)]
+#[derive(Encode, Decode, MaxEncodedLen, PartialEq, Clone, Debug)]
 #[cfg_attr(feature = "serde1", derive(Serialize, Deserialize))]
-#[derivative(Debug(bound = ""), PartialEq(bound = ""), Clone(bound = ""))]
-pub enum CreateItemData<T: ChainLimits> {
-	NFT(CreateNftData<T>),
+pub enum CreateItemData {
+	NFT(CreateNftData),
 	Fungible(CreateFungibleData),
-	ReFungible(CreateReFungibleData<T>),
+	ReFungible(CreateReFungibleData),
 }
 
-impl<T: ChainLimits> CreateItemData<T> {
+impl CreateItemData {
 	pub fn data_size(&self) -> usize {
 		match self {
 			CreateItemData::NFT(data) => data.variable_data.len() + data.const_data.len(),
@@ -307,19 +308,19 @@
 	}
 }
 
-impl<T: ChainLimits> From<CreateNftData<T>> for CreateItemData<T> {
-	fn from(item: CreateNftData<T>) -> Self {
+impl From<CreateNftData> for CreateItemData {
+	fn from(item: CreateNftData) -> Self {
 		CreateItemData::NFT(item)
 	}
 }
 
-impl<T: ChainLimits> From<CreateReFungibleData<T>> for CreateItemData<T> {
-	fn from(item: CreateReFungibleData<T>) -> Self {
+impl From<CreateReFungibleData> for CreateItemData {
+	fn from(item: CreateReFungibleData) -> Self {
 		CreateItemData::ReFungible(item)
 	}
 }
 
-impl<T: ChainLimits> From<CreateFungibleData> for CreateItemData<T> {
+impl From<CreateFungibleData> for CreateItemData {
 	fn from(item: CreateFungibleData) -> Self {
 		CreateItemData::Fungible(item)
 	}
modifiedruntime/src/lib.rsdiffbeforeafterboth
--- a/runtime/src/lib.rs
+++ b/runtime/src/lib.rs
@@ -683,35 +683,6 @@
 }
 
 parameter_types! {
-	pub const CollectionNumberLimit: u32 = 100000;
-	pub const AccountTokenOwnershipLimit: u32 = 1000000;
-	pub const CollectionAdminsLimit: u64 = 5;
-	pub const CustomDataLimit: u32 = 2048;
-	pub const NftSponsorTransferTimeout: u32 = 5;
-	pub const FungibleSponsorTransferTimeout: u32 = 5;
-	pub const ReFungibleSponsorTransferTimeout: u32 = 5;
-	pub const OffchainSchemaLimit: u32 = 1024;
-	pub const VariableOnChainSchemaLimit: u32 = 1024;
-	pub const ConstOnChainSchemaLimit: u32 = 1024;
-	pub const MaxItemsPerBatch: u32 = 200;
-}
-
-pub struct ChainLimits;
-impl nft_data_structs::ChainLimits for ChainLimits {
-    type CollectionNumberLimit = CollectionNumberLimit;
-    type AccountTokenOwnershipLimit = AccountTokenOwnershipLimit;
-    type CollectionAdminsLimit = CollectionAdminsLimit;
-    type CustomDataLimit = CustomDataLimit;
-    type NftSponsorTransferTimeout = NftSponsorTransferTimeout;
-    type FungibleSponsorTransferTimeout = FungibleSponsorTransferTimeout;
-    type ReFungibleSponsorTransferTimeout = ReFungibleSponsorTransferTimeout;
-    type OffchainSchemaLimit = OffchainSchemaLimit;
-    type VariableOnChainSchemaLimit = VariableOnChainSchemaLimit;
-    type ConstOnChainSchemaLimit = ConstOnChainSchemaLimit;
-    type MaxItemsPerBatch = MaxItemsPerBatch;
-}
-
-parameter_types! {
 	pub TreasuryAccountId: AccountId = TreasuryModuleId::get().into_account();
 	pub const CollectionCreationPrice: Balance = 100 * UNIQUE;
 }
@@ -728,7 +699,6 @@
 	type Currency = Balances;
 	type CollectionCreationPrice = CollectionCreationPrice;
 	type TreasuryAccountId = TreasuryAccountId;
-	type ChainLimits = ChainLimits;
 }
 
 parameter_types! {