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

difftreelog

feat partial burn of RFT token

Yaroslav Bolyukin2021-10-06parent: #2a91ae7.patch.diff
in: master

1 file changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
1888 collection: &CollectionHandle<T>,1888 collection: &CollectionHandle<T>,
1889 item_id: TokenId,1889 item_id: TokenId,
1890 owner: &T::CrossAccountId,1890 owner: &T::CrossAccountId,
1891 value: u128,
1891 ) -> DispatchResult {1892 ) -> DispatchResult {
1892 let collection_id = collection.id;1893 let collection_id = collection.id;
18931894
1894 let mut token = <ReFungibleItemList<T>>::get(collection_id, item_id)1895 let mut token = <ReFungibleItemList<T>>::get(collection_id, item_id)
1895 .ok_or(Error::<T>::TokenNotFound)?;1896 .ok_or(Error::<T>::TokenNotFound)?;
1896 let rft_balance = token1897 let mut rft_balance = token
1897 .owner1898 .owner
1898 .iter()1899 .iter()
1899 .find(|&i| i.owner == *owner)1900 .find(|&i| i.owner == *owner)
1900 .ok_or(Error::<T>::TokenNotFound)?;1901 .ok_or(Error::<T>::TokenNotFound)?
1902 .clone();
1901 Self::remove_token_index(collection, item_id, owner)?;1903 Self::remove_token_index(collection, item_id, owner)?;
19021904
1903 // update balance1905 // update balance
1904 let new_balance = <Balance<T>>::get(collection_id, rft_balance.owner.as_sub())1906 let new_balance = <Balance<T>>::get(collection_id, rft_balance.owner.as_sub())
1905 .checked_sub(rft_balance.fraction)1907 .checked_sub(value)
1906 .ok_or(Error::<T>::NumOverflow)?;1908 .ok_or(Error::<T>::NumOverflow)?;
1907 <Balance<T>>::insert(collection_id, rft_balance.owner.as_sub(), new_balance);1909 <Balance<T>>::insert(collection_id, rft_balance.owner.as_sub(), new_balance);
19081910
1909 // Re-create owners list with sender removed1911 rft_balance.fraction = (rft_balance.fraction)
1912 .checked_sub(value)
1913 .ok_or(Error::<T>::NumOverflow)?;
1914
1910 let index = token1915 let index = token
1911 .owner1916 .owner
1912 .iter()1917 .iter()
1913 .position(|i| i.owner == *owner)1918 .position(|i| i.owner == *owner)
1914 .expect("owned item is exists");1919 .expect("owned item is exists");
1920 if rft_balance.fraction == 0 {
1921 // Re-create owners list with sender removed
1915 token.owner.remove(index);1922 token.owner.remove(index);
1923 } else {
1924 token.owner[index] = rft_balance;
1925 }
1926
1916 let owner_count = token.owner.len();1927 let owner_count = token.owner.len();
19171928