From 5743a92bf274ddf95749935e78d7f23411235038 Mon Sep 17 00:00:00 2001 From: str-mv Date: Tue, 12 Jan 2021 17:04:52 +0000 Subject: [PATCH] NFTPAR-280. Rate limit for CreateItem --- --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -419,6 +419,7 @@ pub AddressTokens get(fn address_tokens): double_map hasher(identity) CollectionId, hasher(twox_64_concat) T::AccountId => Vec; /// Tokens transfer baskets + pub CreateItemBasket get(fn create_item_basket): map hasher(identity) CollectionId => T::BlockNumber; pub NftTransferBasket get(fn nft_transfer_basket): double_map hasher(identity) CollectionId, hasher(identity) TokenId => T::BlockNumber; pub FungibleTransferBasket get(fn fungible_transfer_basket): double_map hasher(identity) CollectionId, hasher(twox_64_concat) T::AccountId => T::BlockNumber; pub ReFungibleTransferBasket get(fn refungible_transfer_basket): double_map hasher(identity) CollectionId, hasher(identity) TokenId => T::BlockNumber; @@ -1470,14 +1471,6 @@ Self::ensure_contract_owned(sender, &contract_address)?; >::insert(contract_address, account_address, true); - Ok(()) - } - - #[weight = T::WeightInfo::add_to_contract_white_list()] - pub fn wasm_dummy_method( - origin - ) -> DispatchResult { - let sender = ensure_signed(origin)?; Ok(()) } @@ -2305,9 +2298,26 @@ let mut sponsor: T::AccountId = match IsSubType::>::is_sub_type(call) { Some(Call::create_item(collection_id, _owner, _properties)) => { + // sponsor timeout + let block_number = >::block_number() as T::BlockNumber; + + let limit = >::get(collection_id).limits.sponsor_transfer_timeout; + let mut sponsored = true; + if >::contains_key(collection_id) { + let last_tx_block = >::get(collection_id); + let limit_time = last_tx_block + limit.into(); + if block_number <= limit_time { + sponsored = false; + } + } + if sponsored { + >::insert(collection_id, block_number); + } + // check free create limit if (>::get(collection_id).limits.sponsored_data_size >= (_properties.len() as u32)) && - (>::get(collection_id).sponsor_confirmed) + (>::get(collection_id).sponsor_confirmed) && + (sponsored) { >::get(collection_id).sponsor } else { -- gitstuff