--- a/pallets/unique/src/eth/sponsoring.rs +++ b/pallets/unique/src/eth/sponsoring.rs @@ -28,7 +28,9 @@ use up_evm_mapping::EvmBackwardsAddressMapping; use pallet_common::account::CrossAccountId; -use pallet_nonfungible::erc::{UniqueNFTCall, ERC721UniqueExtensionsCall, ERC721Call}; +use pallet_nonfungible::erc::{ + UniqueNFTCall, ERC721UniqueExtensionsCall, ERC721MintableCall, ERC721Call, +}; use pallet_fungible::erc::{UniqueFungibleCall, ERC20Call}; pub struct UniqueEthSponsorshipHandler(PhantomData<*const T>); @@ -51,6 +53,18 @@ let token_id: TokenId = token_id.try_into().ok()?; withdraw_transfer::(&collection, &who, &token_id).map(|()| sponsor) } + UniqueNFTCall::ERC721Mintable( + ERC721MintableCall::Mint { token_id, .. } + | ERC721MintableCall::MintWithTokenUri { token_id, .. }, + ) => { + let _token_id: TokenId = token_id.try_into().ok()?; + withdraw_create_item::( + &collection, + who.as_sub(), + &CreateItemData::NFT(CreateNftData::default()), + ) + .map(|()| sponsor) + } UniqueNFTCall::ERC721(ERC721Call::TransferFrom { token_id, from, .. }) => { let token_id: TokenId = token_id.try_into().ok()?; let from = T::CrossAccountId::from_eth(from); --- a/pallets/unique/src/sponsorship.rs +++ b/pallets/unique/src/sponsorship.rs @@ -103,7 +103,7 @@ pub fn withdraw_create_item( collection: &CollectionHandle, - who: &T::AccountId, + who: &T::CrossAccountId, _properties: &CreateItemData, ) -> Option<()> { if _properties.data_size() as u32 > collection.limits.sponsored_data_size() { @@ -120,14 +120,14 @@ CreateItemData::ReFungible(_) => REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT, }); - if let Some(last_tx_block) = >::get((collection.id, &who)) { + if let Some(last_tx_block) = >::get((collection.id, who.as_sub())) { let timeout = last_tx_block + limit.into(); if block_number < timeout { return None; } } - CreateItemBasket::::insert((collection.id, who.clone()), block_number); + CreateItemBasket::::insert((collection.id, who.as_sub()), block_number); Some(()) }