git.delta.rocks / unique-network / refs/commits / 800b656c4f48

difftreelog

feat(rmrk) add accept_nft

Daniel Shiposha2022-06-05parent: #dcd5f66.patch.diff
in: master

1 file changed

modifiedpallets/proxy-rmrk-core/src/lib.rsdiffbeforeafterboth
132 CollectionFullOrLocked,132 CollectionFullOrLocked,
133 ResourceDoesntExist,133 ResourceDoesntExist,
134 CannotSendToDescendentOrSelf,134 CannotSendToDescendentOrSelf,
135 CannotAcceptNonOwnedNft,
135 }136 }
136137
137 #[pallet::call]138 #[pallet::call]
453 Ok(())454 Ok(())
454 }455 }
456
457 #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
458 #[transactional]
459 pub fn accept_nft(
460 origin: OriginFor<T>,
461 rmrk_collection_id: RmrkCollectionId,
462 rmrk_nft_id: RmrkNftId,
463 new_owner: RmrkAccountIdOrCollectionNftTuple<T::AccountId>,
464 ) -> DispatchResult {
465 let sender = ensure_signed(origin.clone())?;
466 let cross_sender = T::CrossAccountId::from_sub(sender);
467
468 let collection_id = Self::unique_collection_id(rmrk_collection_id)?;
469 let nft_id = rmrk_nft_id.into();
470
471 let collection = Self::get_typed_nft_collection(
472 collection_id,
473 misc::CollectionType::Regular,
474 )?;
475
476 let new_owner = match new_owner {
477 RmrkAccountIdOrCollectionNftTuple::AccountId(account_id) => {
478 T::CrossAccountId::from_sub(account_id)
479 },
480 RmrkAccountIdOrCollectionNftTuple::CollectionAndNftTuple(target_collection_id, target_nft_id) => {
481 let target_collection_id = Self::unique_collection_id(target_collection_id)?;
482
483 T::CrossTokenAddressMapping::token_to_address(target_collection_id, TokenId(target_nft_id))
484 }
485 };
486
487 let budget = budget::Value::new(NESTING_BUDGET);
488
489 <PalletNft<T>>::transfer(
490 &collection,
491 &cross_sender,
492 &new_owner,
493 nft_id,
494 &budget,
495 ).map_err(|err| {
496 if err == <CommonError<T>>::OnlyOwnerAllowedToNest.into() {
497 <Error<T>>::CannotAcceptNonOwnedNft.into()
498 } else {
499 Self::map_unique_err_to_proxy(err)
500 }
501 })?;
502
503 <PalletNft<T>>::set_scoped_token_property(
504 collection.id,
505 nft_id,
506 PropertyScope::Rmrk,
507 Self::rmrk_property(PendingNftAccept, &false)?,
508 )?;
509
510 Ok(())
511 }
455512
456 #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]513 #[pallet::weight(10_000 + T::DbWeight::get().reads_writes(1,1))]
457 #[transactional]514 #[transactional]