--- a/pallets/nonfungible/src/erc.rs +++ b/pallets/nonfungible/src/erc.rs @@ -291,12 +291,6 @@ }, } -#[derive(ToLog)] -pub enum ERC721UniqueMintableEvents { - #[allow(dead_code)] - MintingFinished {}, -} - /// @title ERC-721 Non-Fungible Token Standard, optional metadata extension /// @dev See https://eips.ethereum.org/EIPS/eip-721 #[solidity_interface(name = ERC721Metadata, expect_selector = 0x5b5e139f)] @@ -544,12 +538,8 @@ } /// @title ERC721 minting logic. -#[solidity_interface(name = ERC721UniqueMintable, events(ERC721UniqueMintableEvents))] +#[solidity_interface(name = ERC721UniqueMintable)] impl NonfungibleHandle { - fn minting_finished(&self) -> Result { - Ok(false) - } - /// @notice Function to mint a token. /// @param to The new owner /// @return uint256 The id of the newly minted token @@ -678,11 +668,6 @@ ) .map_err(dispatch_to_evm::)?; Ok(true) - } - - /// @dev Not implemented - fn finish_minting(&mut self, _caller: caller) -> Result { - Err("not implementable".into()) } } --- a/pallets/nonfungible/src/stubs/UniqueNFT.sol +++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol @@ -700,22 +700,9 @@ } } -/// @dev inlined interface -contract ERC721UniqueMintableEvents { - event MintingFinished(); -} - /// @title ERC721 minting logic. -/// @dev the ERC-165 identifier for this interface is 0x476ff149 -contract ERC721UniqueMintable is Dummy, ERC165, ERC721UniqueMintableEvents { - /// @dev EVM selector for this function is: 0x05d2035b, - /// or in textual repr: mintingFinished() - function mintingFinished() public view returns (bool) { - require(false, stub_error); - dummy; - return false; - } - +/// @dev the ERC-165 identifier for this interface is 0x3fd94ea6 +contract ERC721UniqueMintable is Dummy, ERC165 { /// @notice Function to mint a token. /// @param to The new owner /// @return uint256 The id of the newly minted token @@ -756,7 +743,6 @@ dummy = 0; return 0; } - // /// @notice Function to mint token with the given tokenUri. // /// @dev `tokenId` should be obtained with `nextTokenId` method, // /// unlike standard, you can't specify it manually @@ -774,14 +760,6 @@ // return false; // } - /// @dev Not implemented - /// @dev EVM selector for this function is: 0x7d64bcb4, - /// or in textual repr: finishMinting() - function finishMinting() public returns (bool) { - require(false, stub_error); - dummy = 0; - return false; - } } /// @title Unique extensions for ERC721. --- a/pallets/refungible/src/erc.rs +++ b/pallets/refungible/src/erc.rs @@ -288,13 +288,6 @@ }, } -#[derive(ToLog)] -pub enum ERC721UniqueMintableEvents { - /// @dev Not supported - #[allow(dead_code)] - MintingFinished {}, -} - /// @title ERC-721 Non-Fungible Token Standard, optional metadata extension /// @dev See https://eips.ethereum.org/EIPS/eip-721 #[solidity_interface(name = ERC721Metadata, expect_selector = 0x5b5e139f)] @@ -576,12 +569,8 @@ } /// @title ERC721 minting logic. -#[solidity_interface(name = ERC721UniqueMintable, events(ERC721UniqueMintableEvents))] +#[solidity_interface(name = ERC721UniqueMintable)] impl RefungibleHandle { - fn minting_finished(&self) -> Result { - Ok(false) - } - /// @notice Function to mint a token. /// @param to The new owner /// @return uint256 The id of the newly minted token @@ -717,11 +706,6 @@ ) .map_err(dispatch_to_evm::)?; Ok(true) - } - - /// @dev Not implemented - fn finish_minting(&mut self, _caller: caller) -> Result { - Err("not implementable".into()) } } --- a/pallets/refungible/src/erc_token.rs +++ b/pallets/refungible/src/erc_token.rs @@ -25,7 +25,8 @@ ops::Deref, }; use evm_coder::{ - abi::AbiType, ToLog, execution::*, generate_stubgen, solidity_interface, types::*, weight, + abi::AbiType, ToLog, execution::*, generate_stubgen, solidity_interface, solidity, types::*, + weight, }; use pallet_common::{ CommonWeightInfo, @@ -206,6 +207,7 @@ /// @param from The account whose tokens will be burnt. /// @param amount The amount that will be burnt. #[weight(>::burn_from())] + #[solidity(hide)] fn burn_from(&mut self, caller: caller, from: address, amount: uint256) -> Result { let caller = T::CrossAccountId::from_eth(caller); let from = T::CrossAccountId::from_eth(from); --- a/pallets/refungible/src/stubs/UniqueRefungible.sol +++ b/pallets/refungible/src/stubs/UniqueRefungible.sol @@ -700,22 +700,9 @@ } } -/// @dev inlined interface -contract ERC721UniqueMintableEvents { - event MintingFinished(); -} - /// @title ERC721 minting logic. -/// @dev the ERC-165 identifier for this interface is 0x476ff149 -contract ERC721UniqueMintable is Dummy, ERC165, ERC721UniqueMintableEvents { - /// @dev EVM selector for this function is: 0x05d2035b, - /// or in textual repr: mintingFinished() - function mintingFinished() public view returns (bool) { - require(false, stub_error); - dummy; - return false; - } - +/// @dev the ERC-165 identifier for this interface is 0x3fd94ea6 +contract ERC721UniqueMintable is Dummy, ERC165 { /// @notice Function to mint a token. /// @param to The new owner /// @return uint256 The id of the newly minted token @@ -756,7 +743,6 @@ dummy = 0; return 0; } - // /// @notice Function to mint token with the given tokenUri. // /// @dev `tokenId` should be obtained with `nextTokenId` method, // /// unlike standard, you can't specify it manually @@ -774,14 +760,6 @@ // return false; // } - /// @dev Not implemented - /// @dev EVM selector for this function is: 0x7d64bcb4, - /// or in textual repr: finishMinting() - function finishMinting() public returns (bool) { - require(false, stub_error); - dummy = 0; - return false; - } } /// @title Unique extensions for ERC721. --- a/pallets/refungible/src/stubs/UniqueRefungibleToken.sol +++ b/pallets/refungible/src/stubs/UniqueRefungibleToken.sol @@ -38,19 +38,19 @@ /// @dev the ERC-165 identifier for this interface is 0xe17a7d2b contract ERC20UniqueExtensions is Dummy, ERC165 { - /// @dev Function that burns an amount of the token of a given account, - /// deducting from the sender's allowance for said account. - /// @param from The account whose tokens will be burnt. - /// @param amount The amount that will be burnt. - /// @dev EVM selector for this function is: 0x79cc6790, - /// or in textual repr: burnFrom(address,uint256) - function burnFrom(address from, uint256 amount) public returns (bool) { - require(false, stub_error); - from; - amount; - dummy = 0; - return false; - } + // /// @dev Function that burns an amount of the token of a given account, + // /// deducting from the sender's allowance for said account. + // /// @param from The account whose tokens will be burnt. + // /// @param amount The amount that will be burnt. + // /// @dev EVM selector for this function is: 0x79cc6790, + // /// or in textual repr: burnFrom(address,uint256) + // function burnFrom(address from, uint256 amount) public returns (bool) { + // require(false, stub_error); + // from; + // amount; + // dummy = 0; + // return false; + // } /// @dev Function that burns an amount of the token of a given account, /// deducting from the sender's allowance for said account. --- a/runtime/common/ethereum/sponsoring/refungible.rs +++ b/runtime/common/ethereum/sponsoring/refungible.rs @@ -265,11 +265,9 @@ match call { // Readonly - ERC165Call(_, _) | MintingFinished => None, + ERC165Call(_, _) => None, - // Not sponsored - FinishMinting => None, - + // Sponsored Mint { .. } | MintCheckId { .. } | MintWithTokenUri { .. } --- a/tests/src/check-event/burnItemEvent.test.ts +++ b/tests/src/check-event/burnItemEvent.test.ts @@ -32,6 +32,7 @@ const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'}); const token = await collection.mintToken(alice, {Substrate: alice.address}); await token.burn(alice); + await helper.wait.newBlocks(1); const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[]; const eventStrings = event.map(e => `${e.section}.${e.method}`); --- a/tests/src/check-event/createCollectionEvent.test.ts +++ b/tests/src/check-event/createCollectionEvent.test.ts @@ -29,6 +29,7 @@ }); itSub('Check event from createCollection(): ', async ({helper}) => { await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'}); + await helper.wait.newBlocks(1); const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[]; const eventStrings = event.map(e => `${e.section}.${e.method}`); --- a/tests/src/check-event/createItemEvent.test.ts +++ b/tests/src/check-event/createItemEvent.test.ts @@ -30,6 +30,7 @@ itSub('Check event from createItem(): ', async ({helper}) => { const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'}); await collection.mintToken(alice, {Substrate: alice.address}); + await helper.wait.newBlocks(1); const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[]; const eventStrings = event.map(e => `${e.section}.${e.method}`); --- a/tests/src/check-event/createMultipleItemsEvent.test.ts +++ b/tests/src/check-event/createMultipleItemsEvent.test.ts @@ -35,6 +35,7 @@ {owner: {Substrate: alice.address}}, ]); + await helper.wait.newBlocks(1); const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[]; const eventStrings = event.map(e => `${e.section}.${e.method}`); --- a/tests/src/check-event/destroyCollectionEvent.test.ts +++ b/tests/src/check-event/destroyCollectionEvent.test.ts @@ -31,6 +31,7 @@ itSub('Check event from destroyCollection(): ', async ({helper}) => { const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'}); await collection.burn(alice); + await helper.wait.newBlocks(1); const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[]; const eventStrings = event.map(e => `${e.section}.${e.method}`); --- a/tests/src/check-event/transferEvent.test.ts +++ b/tests/src/check-event/transferEvent.test.ts @@ -34,6 +34,7 @@ const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'}); const token = await collection.mintToken(alice, {Substrate: alice.address}); await token.transfer(alice, {Substrate: bob.address}); + await helper.wait.newBlocks(1); const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[]; const eventStrings = event.map(e => `${e.section}.${e.method}`); --- a/tests/src/check-event/transferFromEvent.test.ts +++ b/tests/src/check-event/transferFromEvent.test.ts @@ -33,6 +33,7 @@ const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'}); const token = await collection.mintToken(alice, {Substrate: alice.address}); await token.transferFrom(alice, {Substrate: alice.address}, {Substrate: bob.address}); + await helper.wait.newBlocks(1); const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[]; const eventStrings = event.map(e => `${e.section}.${e.method}`); --- a/tests/src/eth/abi/nonFungible.json +++ b/tests/src/eth/abi/nonFungible.json @@ -51,12 +51,6 @@ }, { "anonymous": false, - "inputs": [], - "name": "MintingFinished", - "type": "event" - }, - { - "anonymous": false, "inputs": [ { "indexed": true, @@ -420,13 +414,6 @@ "name": "description", "outputs": [{ "internalType": "string", "name": "", "type": "string" }], "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "finishMinting", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", "type": "function" }, { @@ -513,13 +500,6 @@ "name": "mintWithTokenURI", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "mintingFinished", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", "type": "function" }, { --- a/tests/src/eth/abi/reFungible.json +++ b/tests/src/eth/abi/reFungible.json @@ -51,12 +51,6 @@ }, { "anonymous": false, - "inputs": [], - "name": "MintingFinished", - "type": "event" - }, - { - "anonymous": false, "inputs": [ { "indexed": true, @@ -402,13 +396,6 @@ "name": "description", "outputs": [{ "internalType": "string", "name": "", "type": "string" }], "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "finishMinting", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", "type": "function" }, { @@ -495,13 +482,6 @@ "name": "mintWithTokenURI", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "mintingFinished", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", "type": "function" }, { --- a/tests/src/eth/abi/reFungibleToken.json +++ b/tests/src/eth/abi/reFungibleToken.json @@ -98,16 +98,6 @@ }, { "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "burnFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ { "components": [ { "internalType": "address", "name": "eth", "type": "address" }, --- a/tests/src/eth/api/UniqueNFT.sol +++ b/tests/src/eth/api/UniqueNFT.sol @@ -483,18 +483,9 @@ function burn(uint256 tokenId) external; } -/// @dev inlined interface -interface ERC721UniqueMintableEvents { - event MintingFinished(); -} - /// @title ERC721 minting logic. -/// @dev the ERC-165 identifier for this interface is 0x476ff149 -interface ERC721UniqueMintable is Dummy, ERC165, ERC721UniqueMintableEvents { - /// @dev EVM selector for this function is: 0x05d2035b, - /// or in textual repr: mintingFinished() - function mintingFinished() external view returns (bool); - +/// @dev the ERC-165 identifier for this interface is 0x3fd94ea6 +interface ERC721UniqueMintable is Dummy, ERC165 { /// @notice Function to mint a token. /// @param to The new owner /// @return uint256 The id of the newly minted token @@ -518,7 +509,6 @@ /// @dev EVM selector for this function is: 0x45c17782, /// or in textual repr: mintWithTokenURI(address,string) function mintWithTokenURI(address to, string memory tokenUri) external returns (uint256); - // /// @notice Function to mint token with the given tokenUri. // /// @dev `tokenId` should be obtained with `nextTokenId` method, // /// unlike standard, you can't specify it manually @@ -529,10 +519,6 @@ // /// or in textual repr: mintWithTokenURI(address,uint256,string) // function mintWithTokenURI(address to, uint256 tokenId, string memory tokenUri) external returns (bool); - /// @dev Not implemented - /// @dev EVM selector for this function is: 0x7d64bcb4, - /// or in textual repr: finishMinting() - function finishMinting() external returns (bool); } /// @title Unique extensions for ERC721. --- a/tests/src/eth/api/UniqueRefungible.sol +++ b/tests/src/eth/api/UniqueRefungible.sol @@ -483,18 +483,9 @@ function burn(uint256 tokenId) external; } -/// @dev inlined interface -interface ERC721UniqueMintableEvents { - event MintingFinished(); -} - /// @title ERC721 minting logic. -/// @dev the ERC-165 identifier for this interface is 0x476ff149 -interface ERC721UniqueMintable is Dummy, ERC165, ERC721UniqueMintableEvents { - /// @dev EVM selector for this function is: 0x05d2035b, - /// or in textual repr: mintingFinished() - function mintingFinished() external view returns (bool); - +/// @dev the ERC-165 identifier for this interface is 0x3fd94ea6 +interface ERC721UniqueMintable is Dummy, ERC165 { /// @notice Function to mint a token. /// @param to The new owner /// @return uint256 The id of the newly minted token @@ -518,7 +509,6 @@ /// @dev EVM selector for this function is: 0x45c17782, /// or in textual repr: mintWithTokenURI(address,string) function mintWithTokenURI(address to, string memory tokenUri) external returns (uint256); - // /// @notice Function to mint token with the given tokenUri. // /// @dev `tokenId` should be obtained with `nextTokenId` method, // /// unlike standard, you can't specify it manually @@ -529,10 +519,6 @@ // /// or in textual repr: mintWithTokenURI(address,uint256,string) // function mintWithTokenURI(address to, uint256 tokenId, string memory tokenUri) external returns (bool); - /// @dev Not implemented - /// @dev EVM selector for this function is: 0x7d64bcb4, - /// or in textual repr: finishMinting() - function finishMinting() external returns (bool); } /// @title Unique extensions for ERC721. --- a/tests/src/eth/api/UniqueRefungibleToken.sol +++ b/tests/src/eth/api/UniqueRefungibleToken.sol @@ -25,13 +25,13 @@ /// @dev the ERC-165 identifier for this interface is 0xe17a7d2b interface ERC20UniqueExtensions is Dummy, ERC165 { - /// @dev Function that burns an amount of the token of a given account, - /// deducting from the sender's allowance for said account. - /// @param from The account whose tokens will be burnt. - /// @param amount The amount that will be burnt. - /// @dev EVM selector for this function is: 0x79cc6790, - /// or in textual repr: burnFrom(address,uint256) - function burnFrom(address from, uint256 amount) external returns (bool); + // /// @dev Function that burns an amount of the token of a given account, + // /// deducting from the sender's allowance for said account. + // /// @param from The account whose tokens will be burnt. + // /// @param amount The amount that will be burnt. + // /// @dev EVM selector for this function is: 0x79cc6790, + // /// or in textual repr: burnFrom(address,uint256) + // function burnFrom(address from, uint256 amount) external returns (bool); /// @dev Function that burns an amount of the token of a given account, /// deducting from the sender's allowance for said account. --- a/tests/src/eth/base.test.ts +++ b/tests/src/eth/base.test.ts @@ -108,10 +108,6 @@ await checkInterface(helper, '0x5b5e139f', false, true); }); - itEth('ERC721UniqueMintable - 0x476ff149 - support', async ({helper}) => { - await checkInterface(helper, '0x476ff149', true, true); - }); - itEth('ERC721Enumerable - 0x780e9d63 - support', async ({helper}) => { await checkInterface(helper, '0x780e9d63', true, true); });