From dd4848c7d2e43c4b06c55449515ac487d010e135 Mon Sep 17 00:00:00 2001 From: str-mv Date: Tue, 13 Oct 2020 07:33:05 +0000 Subject: [PATCH] Sponsor transfer fixes --- --- a/pallets/nft/src/lib.rs +++ b/pallets/nft/src/lib.rs @@ -833,6 +833,10 @@ ::insert(item.collection, current_index); >::insert(item.collection, current_index, itemcopy); + // Add current block + let v: Vec> = Vec::new(); + >::insert(item.collection, current_index, v); + // Update balance let new_balance = >::get(item.collection, owner.clone()) .checked_add(value) @@ -856,6 +860,10 @@ ::insert(item.collection, current_index); >::insert(item.collection, current_index, itemcopy); + // Add current block + let block_number: T::BlockNumber = 0.into(); + >::insert(item.collection, current_index, block_number); + // Update balance let new_balance = >::get(item.collection, owner.clone()) .checked_add(value) @@ -877,6 +885,10 @@ ::insert(collection_id, current_index); >::insert(collection_id, current_index, item); + // Add current block + let block_number: T::BlockNumber = 0.into(); + >::insert(collection_id, current_index, block_number); + // Update balance let new_balance = >::get(collection_id, item_owner.clone()) .checked_add(1) @@ -1494,53 +1506,58 @@ let _collection_mode = >::get(collection_id).mode; // sponsor timeout - let sponsor_timeout = match _collection_mode { + let sponsor_transfer = match _collection_mode { CollectionMode::NFT(_) => { let basket = >::get(collection_id, _item_id); let block_number = >::block_number() as T::BlockNumber; - let time = basket - ChainLimit::get().nft_sponsor_transfer_timeout.into() - block_number; - if time <= 0.into() { + let limit_time = basket + ChainLimit::get().nft_sponsor_transfer_timeout.into(); + if block_number >= limit_time { >::insert(collection_id, _item_id, block_number); + true + } + else { + false } - time } CollectionMode::Fungible(_) => { let mut basket = >::get(collection_id, _item_id); let block_number = >::block_number() as T::BlockNumber; - let time: T::BlockNumber; if basket.iter().any(|i| i.address == _new_owner.clone()) { let item = basket.iter_mut().find(|i| i.address == _new_owner.clone()).unwrap().clone(); - time = block_number - ChainLimit::get().fungible_sponsor_transfer_timeout.into() - item.start_block; - if time <= 0.into() { + let limit_time = item.start_block + ChainLimit::get().fungible_sponsor_transfer_timeout.into(); + if block_number >= limit_time { basket.retain(|x| x.address == item.address); basket.push(BasketItem { start_block: block_number, address: _new_owner.clone() }); >::insert(collection_id, _item_id, basket); + true + } + else { + false } } else { - time = block_number; basket.push(BasketItem { start_block: block_number, address: _new_owner.clone()}); + true } - - time } CollectionMode::ReFungible(_, _) => { let basket = >::get(collection_id, _item_id); let block_number = >::block_number() as T::BlockNumber; - let time = basket - ChainLimit::get().refungible_sponsor_transfer_timeout.into() - block_number; - if time <= 0.into() { + let limit_time = basket + ChainLimit::get().nft_sponsor_transfer_timeout.into(); + if block_number >= limit_time { >::insert(collection_id, _item_id, block_number); + true + } else { + false } - time } _ => { - let block_number = >::block_number() as T::BlockNumber; - block_number + false }, }; - if sponsor_timeout > 0.into() { + if !sponsor_transfer { T::AccountId::default() } else { >::get(collection_id).sponsor -- gitstuff