difftreelog
feat(rmrk) add accept_nft
in: master
1 file changed
pallets/proxy-rmrk-core/src/lib.rsdiffbeforeafterboth132 CollectionFullOrLocked,132 CollectionFullOrLocked,133 ResourceDoesntExist,133 ResourceDoesntExist,134 CannotSendToDescendentOrSelf,134 CannotSendToDescendentOrSelf,135 CannotAcceptNonOwnedNft,135 }136 }136137137 #[pallet::call]138 #[pallet::call]453 Ok(())454 Ok(())454 }455 }456457 #[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);467468 let collection_id = Self::unique_collection_id(rmrk_collection_id)?;469 let nft_id = rmrk_nft_id.into();470471 let collection = Self::get_typed_nft_collection(472 collection_id,473 misc::CollectionType::Regular,474 )?;475476 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)?;482483 T::CrossTokenAddressMapping::token_to_address(target_collection_id, TokenId(target_nft_id))484 }485 };486487 let budget = budget::Value::new(NESTING_BUDGET);488489 <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 })?;502503 <PalletNft<T>>::set_scoped_token_property(504 collection.id,505 nft_id,506 PropertyScope::Rmrk,507 Self::rmrk_property(PendingNftAccept, &false)?,508 )?;509510 Ok(())511 }455512456 #[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]