difftreelog
refactor move ChainLimits to constants
in: master
5 files changed
pallets/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;
pallets/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
);
pallets/nft/src/sponsorship.rsdiffbeforeafterboth1use 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}1use crate::{2 Config, Call, CollectionById, CreateItemBasket, VariableMetaDataBasket,3 ReFungibleTransferBasket, FungibleTransferBasket, NftTransferBasket, CreateItemData,4 CollectionMode,5};6use core::marker::PhantomData;7use up_sponsorship::SponsorshipHandler;8use frame_support::{9 traits::{IsSubType},10 storage::{StorageMap, StorageDoubleMap},11};12use nft_data_structs::{13 TokenId, CollectionId, NFT_SPONSOR_TRANSFER_TIMEOUT, REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,14 FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,15};1617pub struct NftSponsorshipHandler<T>(PhantomData<T>);18impl<T: Config> NftSponsorshipHandler<T> {19 pub fn withdraw_create_item(20 who: &T::AccountId,21 collection_id: &CollectionId,22 _properties: &CreateItemData,23 ) -> Option<T::AccountId> {24 let collection = CollectionById::<T>::get(collection_id)?;2526 // sponsor timeout27 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;2829 let limit = collection.limits.sponsor_transfer_timeout;30 if CreateItemBasket::<T>::contains_key((collection_id, &who)) {31 let last_tx_block = CreateItemBasket::<T>::get((collection_id, &who));32 let limit_time = last_tx_block + limit.into();33 if block_number <= limit_time {34 return None;35 }36 }37 CreateItemBasket::<T>::insert((collection_id, who.clone()), block_number);3839 // check free create limit40 if collection.limits.sponsored_data_size >= (_properties.data_size() as u32) {41 collection.sponsorship.sponsor().cloned()42 } else {43 None44 }45 }4647 pub fn withdraw_transfer(48 who: &T::AccountId,49 collection_id: &CollectionId,50 item_id: &TokenId,51 ) -> Option<T::AccountId> {52 let collection = CollectionById::<T>::get(collection_id)?;5354 let mut sponsor_transfer = false;55 if collection.sponsorship.confirmed() {56 let collection_limits = collection.limits.clone();57 let collection_mode = collection.mode.clone();5859 // sponsor timeout60 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;61 sponsor_transfer = match collection_mode {62 CollectionMode::NFT => {63 // get correct limit64 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {65 collection_limits.sponsor_transfer_timeout66 } else {67 NFT_SPONSOR_TRANSFER_TIMEOUT68 };6970 let mut sponsored = true;71 if NftTransferBasket::<T>::contains_key(collection_id, item_id) {72 let last_tx_block = NftTransferBasket::<T>::get(collection_id, item_id);73 let limit_time = last_tx_block + limit.into();74 if block_number <= limit_time {75 sponsored = false;76 }77 }78 if sponsored {79 NftTransferBasket::<T>::insert(collection_id, item_id, block_number);80 }8182 sponsored83 }84 CollectionMode::Fungible(_) => {85 // get correct limit86 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {87 collection_limits.sponsor_transfer_timeout88 } else {89 FUNGIBLE_SPONSOR_TRANSFER_TIMEOUT90 };9192 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;93 let mut sponsored = true;94 if FungibleTransferBasket::<T>::contains_key(collection_id, who) {95 let last_tx_block = FungibleTransferBasket::<T>::get(collection_id, who);96 let limit_time = last_tx_block + limit.into();97 if block_number <= limit_time {98 sponsored = false;99 }100 }101 if sponsored {102 FungibleTransferBasket::<T>::insert(collection_id, who, block_number);103 }104105 sponsored106 }107 CollectionMode::ReFungible => {108 // get correct limit109 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {110 collection_limits.sponsor_transfer_timeout111 } else {112 REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT113 };114115 let mut sponsored = true;116 if ReFungibleTransferBasket::<T>::contains_key(collection_id, item_id) {117 let last_tx_block =118 ReFungibleTransferBasket::<T>::get(collection_id, item_id);119 let limit_time = last_tx_block + limit.into();120 if block_number <= limit_time {121 sponsored = false;122 }123 }124 if sponsored {125 ReFungibleTransferBasket::<T>::insert(collection_id, item_id, block_number);126 }127128 sponsored129 }130 _ => false,131 };132 }133134 if !sponsor_transfer {135 None136 } else {137 collection.sponsorship.sponsor().cloned()138 }139 }140141 pub fn withdraw_set_variable_meta_data(142 collection_id: &CollectionId,143 item_id: &TokenId,144 data: &[u8],145 ) -> Option<T::AccountId> {146 let mut sponsor_metadata_changes = false;147148 let collection = CollectionById::<T>::get(collection_id)?;149150 if collection.sponsorship.confirmed() &&151 // Can't sponsor fungible collection, this tx will be rejected152 // as invalid153 !matches!(collection.mode, CollectionMode::Fungible(_)) &&154 data.len() <= collection.limits.sponsored_data_size as usize155 {156 if let Some(rate_limit) = collection.limits.sponsored_data_rate_limit {157 let block_number = <frame_system::Pallet<T>>::block_number() as T::BlockNumber;158159 if VariableMetaDataBasket::<T>::get(collection_id, item_id)160 .map(|last_block| block_number - last_block > rate_limit)161 .unwrap_or(true)162 {163 sponsor_metadata_changes = true;164 VariableMetaDataBasket::<T>::insert(collection_id, item_id, block_number);165 }166 }167 }168169 if !sponsor_metadata_changes {170 None171 } else {172 collection.sponsorship.sponsor().cloned()173 }174 }175}176177impl<T, C> SponsorshipHandler<T::AccountId, C> for NftSponsorshipHandler<T>178where179 T: Config,180 C: IsSubType<Call<T>>,181{182 fn get_sponsor(who: &T::AccountId, call: &C) -> Option<T::AccountId> {183 match IsSubType::<Call<T>>::is_sub_type(call)? {184 Call::create_item(collection_id, _owner, properties) => {185 Self::withdraw_create_item(who, collection_id, properties)186 }187 Call::transfer(_new_owner, collection_id, item_id, _value) => {188 Self::withdraw_transfer(who, collection_id, item_id)189 }190 Call::set_variable_meta_data(collection_id, item_id, data) => {191 Self::withdraw_set_variable_meta_data(collection_id, item_id, data)192 }193 _ => None,194 }195 }196}primitives/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)
}
runtime/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! {