difftreelog
Sponsor transfer fixes
in: master
1 file changed
pallets/nft/src/lib.rsdiffbeforeafterboth833 <ItemListIndex>::insert(item.collection, current_index);833 <ItemListIndex>::insert(item.collection, current_index);834 <FungibleItemList<T>>::insert(item.collection, current_index, itemcopy);834 <FungibleItemList<T>>::insert(item.collection, current_index, itemcopy);835835836 // Add current block837 let v: Vec<BasketItem<T::AccountId, T::BlockNumber>> = Vec::new();838 <FungibleTransferBasket<T>>::insert(item.collection, current_index, v);839 836 // Update balance840 // Update balance837 let new_balance = <Balance<T>>::get(item.collection, owner.clone())841 let new_balance = <Balance<T>>::get(item.collection, owner.clone())856 <ItemListIndex>::insert(item.collection, current_index);860 <ItemListIndex>::insert(item.collection, current_index);857 <ReFungibleItemList<T>>::insert(item.collection, current_index, itemcopy);861 <ReFungibleItemList<T>>::insert(item.collection, current_index, itemcopy);862863 // Add current block864 let block_number: T::BlockNumber = 0.into();865 <ReFungibleTransferBasket<T>>::insert(item.collection, current_index, block_number);858866859 // Update balance867 // Update balance860 let new_balance = <Balance<T>>::get(item.collection, owner.clone())868 let new_balance = <Balance<T>>::get(item.collection, owner.clone())877 <ItemListIndex>::insert(collection_id, current_index);885 <ItemListIndex>::insert(collection_id, current_index);878 <NftItemList<T>>::insert(collection_id, current_index, item);886 <NftItemList<T>>::insert(collection_id, current_index, item);887888 // Add current block889 let block_number: T::BlockNumber = 0.into();890 <NftTransferBasket<T>>::insert(collection_id, current_index, block_number);879891880 // Update balance892 // Update balance881 let new_balance = <Balance<T>>::get(collection_id, item_owner.clone())893 let new_balance = <Balance<T>>::get(collection_id, item_owner.clone())1494 let _collection_mode = <Collection<T>>::get(collection_id).mode;1506 let _collection_mode = <Collection<T>>::get(collection_id).mode;149515071496 // sponsor timeout1508 // sponsor timeout1497 let sponsor_timeout = match _collection_mode {1509 let sponsor_transfer = match _collection_mode {1498 CollectionMode::NFT(_) => {1510 CollectionMode::NFT(_) => {1499 let basket = <NftTransferBasket<T>>::get(collection_id, _item_id);1511 let basket = <NftTransferBasket<T>>::get(collection_id, _item_id);1500 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;1512 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;1501 let time = basket - ChainLimit::get().nft_sponsor_transfer_timeout.into() - block_number;1513 let limit_time = basket + ChainLimit::get().nft_sponsor_transfer_timeout.into();1502 if time <= 0.into() {1514 if block_number >= limit_time {1503 <NftTransferBasket<T>>::insert(collection_id, _item_id, block_number);1515 <NftTransferBasket<T>>::insert(collection_id, _item_id, block_number);1516 true1504 }1517 }1505 time1518 else {1519 false1520 }1506 }1521 }1507 CollectionMode::Fungible(_) => {1522 CollectionMode::Fungible(_) => {1508 let mut basket = <FungibleTransferBasket<T>>::get(collection_id, _item_id);1523 let mut basket = <FungibleTransferBasket<T>>::get(collection_id, _item_id);1509 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;1524 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;1510 let time: T::BlockNumber;1511 if basket.iter().any(|i| i.address == _new_owner.clone())1525 if basket.iter().any(|i| i.address == _new_owner.clone())1512 {1526 {1513 let item = basket.iter_mut().find(|i| i.address == _new_owner.clone()).unwrap().clone();1527 let item = basket.iter_mut().find(|i| i.address == _new_owner.clone()).unwrap().clone();1514 time = block_number - ChainLimit::get().fungible_sponsor_transfer_timeout.into() - item.start_block;1528 let limit_time = item.start_block + ChainLimit::get().fungible_sponsor_transfer_timeout.into();1515 if time <= 0.into() {1529 if block_number >= limit_time {1516 basket.retain(|x| x.address == item.address);1530 basket.retain(|x| x.address == item.address);1517 basket.push(BasketItem { start_block: block_number, address: _new_owner.clone() });1531 basket.push(BasketItem { start_block: block_number, address: _new_owner.clone() });1518 <FungibleTransferBasket<T>>::insert(collection_id, _item_id, basket);1532 <FungibleTransferBasket<T>>::insert(collection_id, _item_id, basket);1533 true1519 }1534 }1535 else {1536 false1537 }1520 }1538 }1521 else {1539 else {1522 time = block_number;1523 basket.push(BasketItem { start_block: block_number, address: _new_owner.clone()});1540 basket.push(BasketItem { start_block: block_number, address: _new_owner.clone()});1541 true1524 }1542 }15251526 time1527 }1543 }1528 CollectionMode::ReFungible(_, _) => {1544 CollectionMode::ReFungible(_, _) => {1529 let basket = <ReFungibleTransferBasket<T>>::get(collection_id, _item_id);1545 let basket = <ReFungibleTransferBasket<T>>::get(collection_id, _item_id);1530 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;1546 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;1531 let time = basket - ChainLimit::get().refungible_sponsor_transfer_timeout.into() - block_number;1547 let limit_time = basket + ChainLimit::get().nft_sponsor_transfer_timeout.into();1532 if time <= 0.into() {1548 if block_number >= limit_time {1533 <ReFungibleTransferBasket<T>>::insert(collection_id, _item_id, block_number);1549 <ReFungibleTransferBasket<T>>::insert(collection_id, _item_id, block_number);1550 true1534 }1551 } else {1535 time1552 false1553 }1536 }1554 }1537 _ => {1555 _ => {1538 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;1556 false1539 block_number1540 },1557 },1541 };1558 };154215591543 if sponsor_timeout > 0.into() {1560 if !sponsor_transfer {1544 T::AccountId::default()1561 T::AccountId::default()1545 } else {1562 } else {1546 <Collection<T>>::get(collection_id).sponsor1563 <Collection<T>>::get(collection_id).sponsor