git.delta.rocks / unique-network / refs/commits / dd4848c7d2e4

difftreelog

Sponsor transfer fixes

str-mv2020-10-13parent: #5a0b0e3.patch.diff
in: master

1 file changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
833 <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);
835835
836 // Add current block
837 let v: Vec<BasketItem<T::AccountId, T::BlockNumber>> = Vec::new();
838 <FungibleTransferBasket<T>>::insert(item.collection, current_index, v);
839
836 // Update balance840 // Update balance
837 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);
862
863 // Add current block
864 let block_number: T::BlockNumber = 0.into();
865 <ReFungibleTransferBasket<T>>::insert(item.collection, current_index, block_number);
858866
859 // Update balance867 // Update balance
860 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);
887
888 // Add current block
889 let block_number: T::BlockNumber = 0.into();
890 <NftTransferBasket<T>>::insert(collection_id, current_index, block_number);
879891
880 // Update balance892 // Update balance
881 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;
14951507
1496 // sponsor timeout1508 // sponsor timeout
1497 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 true
1504 }1517 }
1505 time1518 else {
1519 false
1520 }
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 true
1519 }1534 }
1535 else {
1536 false
1537 }
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 true
1524 }1542 }
1525
1526 time
1527 }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 true
1534 }1551 } else {
1535 time1552 false
1553 }
1536 }1554 }
1537 _ => {1555 _ => {
1538 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;1556 false
1539 block_number
1540 },1557 },
1541 };1558 };
15421559
1543 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