git.delta.rocks / unique-network / refs/commits / 298277a8973d

difftreelog

Debug sponsoring

Greg Zaitsev2020-12-23parent: #9b1ad2d.patch.diff
in: master

1 file changed

modifiedpallets/nft/src/lib.rsdiffbeforeafterboth
1876 <FungibleItemList<T>>::insert(collection_id, item_id, new_full_item);1876 <FungibleItemList<T>>::insert(collection_id, item_id, new_full_item);
18771877
1878 // update balance1878 // update balance
1879 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);
18831883
1884 // update index collection1884 // update index collection
1885 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;
18951895
1896 // update balance1896 // update balance
1897 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);
19011901
1902 <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);
19561956
1957 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);
19611961
1962 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);
20362036
2037 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);
20412041
2042 // change owner2042 // change owner
2043 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);
2335
2336 // Only mess with balances if fee is not zero.
2337 if fee.is_zero() {
2338 return Ok((fee, None));
2339 }
23352340
2336 // Determine who is paying transaction fee based on ecnomic model2341 // Determine who is paying transaction fee based on ecnomic model
2337 // Parse call to extract collection ID and access collection sponsor2342 // Parse call to extract collection ID and access collection sponsor
2347 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 timeout
2358 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 limit
2362 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_timeout
2364 } else {2369 } else {
2365 ChainLimit::get().nft_sponsor_transfer_timeout2370 ChainLimit::get().nft_sponsor_transfer_timeout
2366 };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 true
2374 }2379 }
2375 else {2380 else {
2379 CollectionMode::Fungible(_) => {2384 CollectionMode::Fungible(_) => {
2380 2385
2381 // get correct limit2386 // get correct limit
2382 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_timeout
2384 } else {2389 } else {
2385 ChainLimit::get().fungible_sponsor_transfer_timeout2390 ChainLimit::get().fungible_sponsor_transfer_timeout
2386 };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 true
2399 }2404 }
2400 else {2405 else {
2401 false2406 false
2402 }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 true
2407 }2412 }
2408 }2413 }
2409 CollectionMode::ReFungible(_) => {2414 CollectionMode::ReFungible(_) => {
2410 2415
2411 // get correct limit2416 // get correct limit
2412 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_timeout
2414 } else {2419 } else {
2415 ChainLimit::get().refungible_sponsor_transfer_timeout2420 ChainLimit::get().refungible_sponsor_transfer_timeout
2416 };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 true
2424 } else {2429 } else {
2425 false2430 false
2498 who_pays_fee = who.clone();2503 who_pays_fee = who.clone();
2499 }2504 }
2500
2501 // Only mess with balances if fee is not zero.
2502 if fee.is_zero() {
2503 return Ok((fee, None));
2504 }
25052505
2506 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,