difftreelog
feat partial burn of RFT token
in: master
1 file changed
pallets/nft/src/lib.rsdiffbeforeafterboth1888 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;189318941894 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 = token1897 .owner1898 .owner1898 .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)?;190219041903 // update balance1905 // update balance1904 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);190819101909 // Re-create owners list with sender removed1911 rft_balance.fraction = (rft_balance.fraction)1912 .checked_sub(value)1913 .ok_or(Error::<T>::NumOverflow)?;19141910 let index = token1915 let index = token1911 .owner1916 .owner1912 .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 removed1915 token.owner.remove(index);1922 token.owner.remove(index);1923 } else {1924 token.owner[index] = rft_balance;1925 }19261916 let owner_count = token.owner.len();1927 let owner_count = token.owner.len();19171928