difftreelog
Debug sponsoring
in: master
1 file changed
pallets/nft/src/lib.rsdiffbeforeafterboth1876 <FungibleItemList<T>>::insert(collection_id, item_id, new_full_item);1876 <FungibleItemList<T>>::insert(collection_id, item_id, new_full_item);187718771878 // update balance1878 // update balance1879 let balance_new_owner = <Balance<T>>::get(collection_id, new_owner.clone())1879 let balancenew_owner = <Balance<T>>::get(collection_id, new_owner.clone())1880 .checked_add(value)1880 .checked_add(value)1881 .ok_or(Error::<T>::NumOverflow)?;1881 .ok_or(Error::<T>::NumOverflow)?;1882 <Balance<T>>::insert(collection_id, new_owner.clone(), balance_new_owner);1882 <Balance<T>>::insert(collection_id, new_owner.clone(), balancenew_owner);188318831884 // update index collection1884 // update index collection1885 Self::move_token_index(collection_id, item_id, owner.clone(), new_owner.clone())?;1885 Self::move_token_index(collection_id, item_id, owner.clone(), new_owner.clone())?;1894 item.value += value;1894 item.value += value;189518951896 // update balance1896 // update balance1897 let balance_new_owner = <Balance<T>>::get(collection_id, new_owner.clone())1897 let balancenew_owner = <Balance<T>>::get(collection_id, new_owner.clone())1898 .checked_add(value)1898 .checked_add(value)1899 .ok_or(Error::<T>::NumOverflow)?;1899 .ok_or(Error::<T>::NumOverflow)?;1900 <Balance<T>>::insert(collection_id, new_owner.clone(), balance_new_owner);1900 <Balance<T>>::insert(collection_id, new_owner.clone(), balancenew_owner);190119011902 <FungibleItemList<T>>::insert(collection_id, new_owner_account_id, item);1902 <FungibleItemList<T>>::insert(collection_id, new_owner_account_id, item);1903 } else {1903 } else {1954 .ok_or(Error::<T>::NumOverflow)?;1954 .ok_or(Error::<T>::NumOverflow)?;1955 <Balance<T>>::insert(collection_id, item.owner.clone(), balance_old_owner);1955 <Balance<T>>::insert(collection_id, item.owner.clone(), balance_old_owner);195619561957 let balance_new_owner = <Balance<T>>::get(collection_id, new_owner.clone())1957 let balancenew_owner = <Balance<T>>::get(collection_id, new_owner.clone())1958 .checked_add(value)1958 .checked_add(value)1959 .ok_or(Error::<T>::NumOverflow)?;1959 .ok_or(Error::<T>::NumOverflow)?;1960 <Balance<T>>::insert(collection_id, new_owner.clone(), balance_new_owner);1960 <Balance<T>>::insert(collection_id, new_owner.clone(), balancenew_owner);196119611962 let old_owner = item.owner.clone();1962 let old_owner = item.owner.clone();1963 let new_owner_has_account = full_item.owner.iter().any(|i| i.owner == new_owner);1963 let new_owner_has_account = full_item.owner.iter().any(|i| i.owner == new_owner);2034 .ok_or(Error::<T>::NumOverflow)?;2034 .ok_or(Error::<T>::NumOverflow)?;2035 <Balance<T>>::insert(collection_id, item.owner.clone(), balance_old_owner);2035 <Balance<T>>::insert(collection_id, item.owner.clone(), balance_old_owner);203620362037 let balance_new_owner = <Balance<T>>::get(collection_id, new_owner.clone())2037 let balancenew_owner = <Balance<T>>::get(collection_id, new_owner.clone())2038 .checked_add(1)2038 .checked_add(1)2039 .ok_or(Error::<T>::NumOverflow)?;2039 .ok_or(Error::<T>::NumOverflow)?;2040 <Balance<T>>::insert(collection_id, new_owner.clone(), balance_new_owner);2040 <Balance<T>>::insert(collection_id, new_owner.clone(), balancenew_owner);204120412042 // change owner2042 // change owner2043 let old_owner = item.owner.clone();2043 let old_owner = item.owner.clone();2333 // };2333 // };2334 let fee = Self::traditional_fee(len, info, tip);2334 let fee = Self::traditional_fee(len, info, tip);23352336 // Only mess with balances if fee is not zero.2337 if fee.is_zero() {2338 return Ok((fee, None));2339 }233523402336 // Determine who is paying transaction fee based on ecnomic model2341 // Determine who is paying transaction fee based on ecnomic model2337 // Parse call to extract collection ID and access collection sponsor2342 // Parse call to extract collection ID and access collection sponsor2347 T::AccountId::default()2352 T::AccountId::default()2348 }2353 }2349 }2354 }2350 Some(Call::transfer(_new_owner, collection_id, _item_id, _value)) => {2355 Some(Call::transfer(new_owner, collection_id, item_id, _value)) => {2351 2356 2352 let mut sponsor_transfer = false;2357 let mut sponsor_transfer = false;2353 if <Collection<T>>::get(collection_id).sponsor_confirmed {2358 if <Collection<T>>::get(collection_id).sponsor_confirmed {2354 let _collection_limits = <Collection<T>>::get(collection_id).limits;2359 let collection_limits = <Collection<T>>::get(collection_id).limits;2355 let _collection_mode = <Collection<T>>::get(collection_id).mode;2360 let collection_mode = <Collection<T>>::get(collection_id).mode;2356 2361 2357 // sponsor timeout2362 // sponsor timeout2358 sponsor_transfer = match _collection_mode {2363 sponsor_transfer = match collection_mode {2359 CollectionMode::NFT => {2364 CollectionMode::NFT => {2360 2365 2361 // get correct limit2366 // get correct limit2362 let limit: u32 = if _collection_limits.sponsor_transfer_timeout > 0 {2367 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {2363 _collection_limits.sponsor_transfer_timeout2368 collection_limits.sponsor_transfer_timeout2364 } else {2369 } else {2365 ChainLimit::get().nft_sponsor_transfer_timeout2370 ChainLimit::get().nft_sponsor_transfer_timeout2366 };2371 };2367 2372 2368 let basket = <NftTransferBasket<T>>::get(collection_id, _item_id);2373 let basket = <NftTransferBasket<T>>::get(collection_id, item_id);2369 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;2374 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;2370 let limit_time = basket + limit.into();2375 let limit_time = basket + limit.into();2371 if block_number >= limit_time {2376 if block_number >= limit_time {2372 <NftTransferBasket<T>>::insert(collection_id, _item_id, block_number);2377 <NftTransferBasket<T>>::insert(collection_id, item_id, block_number);2373 true2378 true2374 }2379 }2375 else {2380 else {2379 CollectionMode::Fungible(_) => {2384 CollectionMode::Fungible(_) => {2380 2385 2381 // get correct limit2386 // get correct limit2382 let limit: u32 = if _collection_limits.sponsor_transfer_timeout > 0 {2387 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {2383 _collection_limits.sponsor_transfer_timeout2388 collection_limits.sponsor_transfer_timeout2384 } else {2389 } else {2385 ChainLimit::get().fungible_sponsor_transfer_timeout2390 ChainLimit::get().fungible_sponsor_transfer_timeout2386 };2391 };2387 2392 2388 let mut basket = <FungibleTransferBasket<T>>::get(collection_id, _item_id);2393 let mut basket = <FungibleTransferBasket<T>>::get(collection_id, item_id);2389 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;2394 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;2390 if basket.iter().any(|i| i.address == _new_owner.clone())2395 if basket.iter().any(|i| i.address == new_owner.clone())2391 {2396 {2392 let item = basket.iter_mut().find(|i| i.address == _new_owner.clone()).unwrap().clone();2397 let item = basket.iter_mut().find(|i| i.address == new_owner.clone()).unwrap().clone();2393 let limit_time = item.start_block + limit.into();2398 let limit_time = item.start_block + limit.into();2394 if block_number >= limit_time {2399 if block_number >= limit_time {2395 basket.retain(|x| x.address == item.address);2400 basket.retain(|x| x.address == item.address);2396 basket.push(BasketItem { start_block: block_number, address: _new_owner.clone() });2401 basket.push(BasketItem { start_block: block_number, address: new_owner.clone() });2397 <FungibleTransferBasket<T>>::insert(collection_id, _item_id, basket);2402 <FungibleTransferBasket<T>>::insert(collection_id, item_id, basket);2398 true2403 true2399 }2404 }2400 else {2405 else {2401 false2406 false2402 }2407 }2403 }2408 }2404 else {2409 else {2405 basket.push(BasketItem { start_block: block_number, address: _new_owner.clone()});2410 basket.push(BasketItem { start_block: block_number, address: new_owner.clone()});2406 true2411 true2407 }2412 }2408 }2413 }2409 CollectionMode::ReFungible(_) => {2414 CollectionMode::ReFungible(_) => {2410 2415 2411 // get correct limit2416 // get correct limit2412 let limit: u32 = if _collection_limits.sponsor_transfer_timeout > 0 {2417 let limit: u32 = if collection_limits.sponsor_transfer_timeout > 0 {2413 _collection_limits.sponsor_transfer_timeout2418 collection_limits.sponsor_transfer_timeout2414 } else {2419 } else {2415 ChainLimit::get().refungible_sponsor_transfer_timeout2420 ChainLimit::get().refungible_sponsor_transfer_timeout2416 };2421 };2417 2422 2418 let basket = <ReFungibleTransferBasket<T>>::get(collection_id, _item_id);2423 let basket = <ReFungibleTransferBasket<T>>::get(collection_id, item_id);2419 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;2424 let block_number = <system::Module<T>>::block_number() as T::BlockNumber;2420 let limit_time = basket + limit.into();2425 let limit_time = basket + limit.into();2421 if block_number >= limit_time {2426 if block_number >= limit_time {2422 <ReFungibleTransferBasket<T>>::insert(collection_id, _item_id, block_number);2427 <ReFungibleTransferBasket<T>>::insert(collection_id, item_id, block_number);2423 true2428 true2424 } else {2429 } else {2425 false2430 false2498 who_pays_fee = who.clone();2503 who_pays_fee = who.clone();2499 }2504 }25002501 // Only mess with balances if fee is not zero.2502 if fee.is_zero() {2503 return Ok((fee, None));2504 }250525052506 match <T as transaction_payment::Trait>::Currency::withdraw(2506 match <T as transaction_payment::Trait>::Currency::withdraw(2507 &who_pays_fee,2507 &who_pays_fee,