git.delta.rocks / unique-network / refs/commits / dd5e7347d781

difftreelog

fix handle sponsoring for ERC721Mintable

Yaroslav Bolyukin2022-03-30parent: #c801a90.patch.diff
in: master

2 files changed

modifiedpallets/unique/src/eth/sponsoring.rsdiffbeforeafterboth
--- 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<T: Config>(PhantomData<*const T>);
@@ -51,6 +53,18 @@
 						let token_id: TokenId = token_id.try_into().ok()?;
 						withdraw_transfer::<T>(&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::<T>(
+							&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);
modifiedpallets/unique/src/sponsorship.rsdiffbeforeafterboth
103103
104pub fn withdraw_create_item<T: Config>(104pub fn withdraw_create_item<T: Config>(
105 collection: &CollectionHandle<T>,105 collection: &CollectionHandle<T>,
106 who: &T::AccountId,106 who: &T::CrossAccountId,
107 _properties: &CreateItemData,107 _properties: &CreateItemData,
108) -> Option<()> {108) -> Option<()> {
109 if _properties.data_size() as u32 > collection.limits.sponsored_data_size() {109 if _properties.data_size() as u32 > collection.limits.sponsored_data_size() {
120 CreateItemData::ReFungible(_) => REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,120 CreateItemData::ReFungible(_) => REFUNGIBLE_SPONSOR_TRANSFER_TIMEOUT,
121 });121 });
122122
123 if let Some(last_tx_block) = <CreateItemBasket<T>>::get((collection.id, &who)) {123 if let Some(last_tx_block) = <CreateItemBasket<T>>::get((collection.id, who.as_sub())) {
124 let timeout = last_tx_block + limit.into();124 let timeout = last_tx_block + limit.into();
125 if block_number < timeout {125 if block_number < timeout {
126 return None;126 return None;
127 }127 }
128 }128 }
129129
130 CreateItemBasket::<T>::insert((collection.id, who.clone()), block_number);130 CreateItemBasket::<T>::insert((collection.id, who.as_sub()), block_number);
131131
132 Some(())132 Some(())
133}133}