difftreelog
feat regenerate solidity stubs
in: master
15 files changed
.maintain/scripts/compile_stub.shdiffbeforeafterboth--- a/.maintain/scripts/compile_stub.sh
+++ b/.maintain/scripts/compile_stub.sh
@@ -6,9 +6,9 @@
tmp=$(mktemp -d)
cd $tmp
cp $dir/$INPUT input.sol
-solcjs --optimize --bin input.sol
+solcjs --optimize --bin input.sol -o $PWD
mv input_sol_$(basename $OUTPUT .raw).bin out.bin
xxd -r -p out.bin out.raw
-mv out.raw $dir/$OUTPUT
\ No newline at end of file
+mv out.raw $dir/$OUTPUT
.maintain/scripts/generate_api.shdiffbeforeafterboth--- a/.maintain/scripts/generate_api.sh
+++ b/.maintain/scripts/generate_api.sh
@@ -9,4 +9,4 @@
prettier --use-tabs $raw > $formatted
solhint --fix $formatted
-mv $formatted $OUTPUT
\ No newline at end of file
+mv $formatted $OUTPUT
Makefilediffbeforeafterboth--- a/Makefile
+++ b/Makefile
@@ -8,25 +8,26 @@
.PHONY: regenerate_solidity
regenerate_solidity:
- PACKAGE=pallet-nft NAME=eth::erc::fungible_iface OUTPUT=./tests/src/eth/api/UniqueFungible.sol ./.maintain/scripts/generate_api.sh
- PACKAGE=pallet-nft NAME=eth::erc::nft_iface OUTPUT=./tests/src/eth/api/UniqueNFT.sol ./.maintain/scripts/generate_api.sh
+ PACKAGE=pallet-fungible NAME=erc::gen_iface OUTPUT=./tests/src/eth/api/UniqueFungible.sol ./.maintain/scripts/generate_api.sh
+ PACKAGE=pallet-nonfungible NAME=erc::gen_iface OUTPUT=./tests/src/eth/api/UniqueNFT.sol ./.maintain/scripts/generate_api.sh
PACKAGE=pallet-evm-contract-helpers NAME=eth::contract_helpers_iface OUTPUT=./tests/src/eth/api/ContractHelpers.sol ./.maintain/scripts/generate_api.sh
- PACKAGE=pallet-nft NAME=eth::erc::fungible_impl OUTPUT=./pallets/nft/src/eth/stubs/UniqueFungible.sol ./.maintain/scripts/generate_api.sh
- PACKAGE=pallet-nft NAME=eth::erc::nft_impl OUTPUT=./pallets/nft/src/eth/stubs/UniqueNFT.sol ./.maintain/scripts/generate_api.sh
+ PACKAGE=pallet-fungible NAME=erc::gen_impl OUTPUT=./pallets/fungible/src/stubs/UniqueFungible.sol ./.maintain/scripts/generate_api.sh
+ PACKAGE=pallet-nonfungible NAME=erc::gen_impl OUTPUT=./pallets/nonfungible/src/stubs/UniqueNFT.sol ./.maintain/scripts/generate_api.sh
PACKAGE=pallet-evm-contract-helpers NAME=eth::contract_helpers_impl OUTPUT=./pallets/evm-contract-helpers/src/stubs/ContractHelpers.sol ./.maintain/scripts/generate_api.sh
-NFT_EVM_STUBS=./pallets/nft/src/eth/stubs
+FUNGIBLE_EVM_STUBS=./pallets/fungible/src/stubs
+NONFUNGIBLE_EVM_STUBS=./pallets/nonfungible/src/stubs
CONTRACT_HELPERS_STUBS=./pallets/evm-contract-helpers/src/stubs/
-$(NFT_EVM_STUBS)/UniqueFungible.raw: $(NFT_EVM_STUBS)/UniqueFungible.sol
+$(FUNGIBLE_EVM_STUBS)/UniqueFungible.raw: $(FUNGIBLE_EVM_STUBS)/UniqueFungible.sol
INPUT=$< OUTPUT=$@ ./.maintain/scripts/compile_stub.sh
-$(NFT_EVM_STUBS)/UniqueNFT.raw: $(NFT_EVM_STUBS)/UniqueNFT.sol
+$(NONFUNGIBLE_EVM_STUBS)/UniqueNFT.raw: $(NONFUNGIBLE_EVM_STUBS)/UniqueNFT.sol
INPUT=$< OUTPUT=$@ ./.maintain/scripts/compile_stub.sh
$(CONTRACT_HELPERS_STUBS)/ContractHelpers.raw: $(CONTRACT_HELPERS_STUBS)/ContractHelpers.sol
INPUT=$< OUTPUT=$@ ./.maintain/scripts/compile_stub.sh
-evm_stubs: $(NFT_EVM_STUBS)/UniqueFungible.raw $(NFT_EVM_STUBS)/UniqueNFT.raw $(CONTRACT_HELPERS_STUBS)/ContractHelpers.raw
+evm_stubs: $(FUNGIBLE_EVM_STUBS)/UniqueFungible.raw $(NONFUNGIBLE_EVM_STUBS)/UniqueNFT.raw $(CONTRACT_HELPERS_STUBS)/ContractHelpers.raw
.PHONY: _bench
_bench:
crates/evm-coder-macros/src/solidity_interface.rsdiffbeforeafterboth--- a/crates/evm-coder-macros/src/solidity_interface.rs
+++ b/crates/evm-coder-macros/src/solidity_interface.rs
@@ -714,9 +714,9 @@
)*),
};
if is_impl {
- tc.collect("// Common stubs holder\ncontract Dummy {\n\tuint8 dummy;\n\tstring stub_error = \"this contract is implemented in native\";\n}\ninterface ERC165 {\n\tfunction supportsInterface(bytes4 interfaceID) external view returns (bool) {\n\t\trequire(false, stub_error);\n\t\tinterfaceID;\n\t\treturn true;\n\t}\n}\n".into());
+ tc.collect("// Common stubs holder\ncontract Dummy {\n\tuint8 dummy;\n\tstring stub_error = \"this contract is implemented in native\";\n}\ncontract ERC165 is Dummy {\n\tfunction supportsInterface(bytes4 interfaceID) external view returns (bool) {\n\t\trequire(false, stub_error);\n\t\tinterfaceID;\n\t\treturn true;\n\t}\n}\n".into());
} else {
- tc.collect("// Common stubs holder\ninterface Dummy {\n}\ninterface ERC165 {\n\tfunction supportsInterface(bytes4 interfaceID) external view returns (bool);\n}\n".into());
+ tc.collect("// Common stubs holder\ninterface Dummy {\n}\ninterface ERC165 is Dummy {\n\tfunction supportsInterface(bytes4 interfaceID) external view returns (bool);\n}\n".into());
}
#(
#solidity_generators
pallets/evm-contract-helpers/src/stubs/ContractHelpers.rawdiffbeforeafterbothbinary blob — no preview
pallets/evm-contract-helpers/src/stubs/ContractHelpers.soldiffbeforeafterboth--- a/pallets/evm-contract-helpers/src/stubs/ContractHelpers.sol
+++ b/pallets/evm-contract-helpers/src/stubs/ContractHelpers.sol
@@ -9,7 +9,19 @@
string stub_error = "this contract is implemented in native";
}
-contract ContractHelpers is Dummy {
+contract ERC165 is Dummy {
+ function supportsInterface(bytes4 interfaceID)
+ external
+ view
+ returns (bool)
+ {
+ require(false, stub_error);
+ interfaceID;
+ return true;
+ }
+}
+
+contract ContractHelpers is Dummy, ERC165 {
// Selector: contractOwner(address) 5152b14c
function contractOwner(address contractAddress)
public
pallets/fungible/Cargo.tomldiffbeforeafterboth--- a/pallets/fungible/Cargo.toml
+++ b/pallets/fungible/Cargo.toml
@@ -18,8 +18,8 @@
pallet-common = { default-features = false, path = '../common' }
nft-data-structs = { default-features = false, path = '../../primitives/nft' }
evm-coder = { default-features = false, path = '../../crates/evm-coder' }
+pallet-evm-coder-substrate = { default-features = false, path = '../evm-coder-substrate' }
ethereum = { git = "https://github.com/purestake/ethereum", branch = "joshy-scale-info", default-features = false }
-pallet-evm-coder-substrate = { default-features = false, path = '../evm-coder-substrate' }
frame-benchmarking = { default-features = false, optional = true, git = 'https://github.com/paritytech/substrate.git', branch = 'polkadot-v0.9.12' }
scale-info = { version = "1.0.0", default-features = false, features = [
"derive",
@@ -36,6 +36,7 @@
"pallet-common/std",
"evm-coder/std",
"ethereum/std",
+ "pallet-evm-coder-substrate/std",
'frame-benchmarking/std',
]
runtime-benchmarks = ['frame-benchmarking', 'pallet-common/runtime-benchmarks']
pallets/fungible/src/erc.rsdiffbeforeafterboth--- a/pallets/fungible/src/erc.rs
+++ b/pallets/fungible/src/erc.rs
@@ -111,7 +111,7 @@
#[solidity_interface(name = "UniqueFungible", is(ERC20))]
impl<T: Config> FungibleHandle<T> {}
-generate_stubgen!(get_impl, UniqueFungibleCall, true);
+generate_stubgen!(gen_impl, UniqueFungibleCall, true);
generate_stubgen!(gen_iface, UniqueFungibleCall, false);
impl<T: Config> CommonEvmHandler for FungibleHandle<T> {
pallets/fungible/src/stubs/UniqueFungible.rawdiffbeforeafterbothbinary blob — no preview
pallets/fungible/src/stubs/UniqueFungible.soldiffbeforeafterboth--- a/pallets/fungible/src/stubs/UniqueFungible.sol
+++ b/pallets/fungible/src/stubs/UniqueFungible.sol
@@ -9,6 +9,18 @@
string stub_error = "this contract is implemented in native";
}
+contract ERC165 is Dummy {
+ function supportsInterface(bytes4 interfaceID)
+ external
+ view
+ returns (bool)
+ {
+ require(false, stub_error);
+ interfaceID;
+ return true;
+ }
+}
+
// Inline
contract ERC20Events {
event Transfer(address indexed from, address indexed to, uint256 value);
@@ -19,8 +31,7 @@
);
}
-// Inline
-contract InlineNameSymbol is Dummy {
+contract ERC20 is Dummy, ERC165, ERC20Events {
// Selector: name() 06fdde03
function name() public view returns (string memory) {
require(false, stub_error);
@@ -34,29 +45,14 @@
dummy;
return "";
}
-}
-// Inline
-contract InlineTotalSupply is Dummy {
// Selector: totalSupply() 18160ddd
function totalSupply() public view returns (uint256) {
require(false, stub_error);
dummy;
return 0;
}
-}
-contract ERC165 is Dummy {
- // Selector: supportsInterface(bytes4) 01ffc9a7
- function supportsInterface(uint32 interfaceId) public view returns (bool) {
- require(false, stub_error);
- interfaceId;
- dummy;
- return false;
- }
-}
-
-contract ERC20 is Dummy, InlineNameSymbol, InlineTotalSupply, ERC20Events {
// Selector: decimals() 313ce567
function decimals() public view returns (uint8) {
require(false, stub_error);
pallets/nonfungible/src/stubs/UniqueNFT.rawdiffbeforeafterbothbinary blob — no preview
pallets/nonfungible/src/stubs/UniqueNFT.soldiffbeforeafterboth--- a/pallets/nonfungible/src/stubs/UniqueNFT.sol
+++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol
@@ -15,6 +15,18 @@
string stub_error = "this contract is implemented in native";
}
+contract ERC165 is Dummy {
+ function supportsInterface(bytes4 interfaceID)
+ external
+ view
+ returns (bool)
+ {
+ require(false, stub_error);
+ interfaceID;
+ return true;
+ }
+}
+
// Inline
contract ERC721Events {
event Transfer(
@@ -37,43 +49,6 @@
// Inline
contract ERC721MintableEvents {
event MintingFinished();
-}
-
-// Inline
-contract InlineNameSymbol is Dummy {
- // Selector: name() 06fdde03
- function name() public view returns (string memory) {
- require(false, stub_error);
- dummy;
- return "";
- }
-
- // Selector: symbol() 95d89b41
- function symbol() public view returns (string memory) {
- require(false, stub_error);
- dummy;
- return "";
- }
-}
-
-// Inline
-contract InlineTotalSupply is Dummy {
- // Selector: totalSupply() 18160ddd
- function totalSupply() public view returns (uint256) {
- require(false, stub_error);
- dummy;
- return 0;
- }
-}
-
-contract ERC165 is Dummy {
- // Selector: supportsInterface(bytes4) 01ffc9a7
- function supportsInterface(uint32 interfaceId) public view returns (bool) {
- require(false, stub_error);
- interfaceId;
- dummy;
- return false;
- }
}
contract ERC721 is Dummy, ERC165, ERC721Events {
@@ -172,7 +147,7 @@
}
}
-contract ERC721Burnable is Dummy {
+contract ERC721Burnable is Dummy, ERC165 {
// Selector: burn(uint256) 42966c68
function burn(uint256 tokenId) public {
require(false, stub_error);
@@ -181,7 +156,7 @@
}
}
-contract ERC721Enumerable is Dummy, InlineTotalSupply {
+contract ERC721Enumerable is Dummy, ERC165 {
// Selector: tokenByIndex(uint256) 4f6ccce7
function tokenByIndex(uint256 index) public view returns (uint256) {
require(false, stub_error);
@@ -202,9 +177,30 @@
dummy;
return 0;
}
+
+ // Selector: totalSupply() 18160ddd
+ function totalSupply() public view returns (uint256) {
+ require(false, stub_error);
+ dummy;
+ return 0;
+ }
}
-contract ERC721Metadata is Dummy, InlineNameSymbol {
+contract ERC721Metadata is Dummy, ERC165 {
+ // Selector: name() 06fdde03
+ function name() public view returns (string memory) {
+ require(false, stub_error);
+ dummy;
+ return "";
+ }
+
+ // Selector: symbol() 95d89b41
+ function symbol() public view returns (string memory) {
+ require(false, stub_error);
+ dummy;
+ return "";
+ }
+
// Selector: tokenURI(uint256) c87b56dd
function tokenURI(uint256 tokenId) public view returns (string memory) {
require(false, stub_error);
@@ -214,7 +210,7 @@
}
}
-contract ERC721Mintable is Dummy, ERC721MintableEvents {
+contract ERC721Mintable is Dummy, ERC165, ERC721MintableEvents {
// Selector: mintingFinished() 05d2035b
function mintingFinished() public view returns (bool) {
require(false, stub_error);
@@ -253,7 +249,7 @@
}
}
-contract ERC721UniqueExtensions is Dummy {
+contract ERC721UniqueExtensions is Dummy, ERC165 {
// Selector: transfer(address,uint256) a9059cbb
function transfer(address to, uint256 tokenId) public {
require(false, stub_error);
@@ -262,6 +258,14 @@
dummy = 0;
}
+ // Selector: burnFrom(address,uint256) 79cc6790
+ function burnFrom(address from, uint256 tokenId) public {
+ require(false, stub_error);
+ from;
+ tokenId;
+ dummy = 0;
+ }
+
// Selector: nextTokenId() 75794a3c
function nextTokenId() public view returns (uint256) {
require(false, stub_error);
tests/src/eth/api/ContractHelpers.soldiffbeforeafterboth--- a/tests/src/eth/api/ContractHelpers.sol
+++ b/tests/src/eth/api/ContractHelpers.sol
@@ -8,7 +8,11 @@
}
-interface ContractHelpers is Dummy {
+interface ERC165 is Dummy {
+ function supportsInterface(bytes4 interfaceID) external view returns (bool);
+}
+
+interface ContractHelpers is Dummy, ERC165 {
// Selector: contractOwner(address) 5152b14c
function contractOwner(address contractAddress)
external
tests/src/eth/api/UniqueFungible.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueFungible.sol
+++ b/tests/src/eth/api/UniqueFungible.sol
@@ -8,6 +8,10 @@
}
+interface ERC165 is Dummy {
+ function supportsInterface(bytes4 interfaceID) external view returns (bool);
+}
+
// Inline
interface ERC20Events {
event Transfer(address indexed from, address indexed to, uint256 value);
@@ -18,27 +22,16 @@
);
}
-// Inline
-interface InlineNameSymbol is Dummy {
+interface ERC20 is Dummy, ERC165, ERC20Events {
// Selector: name() 06fdde03
function name() external view returns (string memory);
// Selector: symbol() 95d89b41
function symbol() external view returns (string memory);
-}
-// Inline
-interface InlineTotalSupply is Dummy {
// Selector: totalSupply() 18160ddd
function totalSupply() external view returns (uint256);
-}
-
-interface ERC165 is Dummy {
- // Selector: supportsInterface(bytes4) 01ffc9a7
- function supportsInterface(uint32 interfaceId) external view returns (bool);
-}
-interface ERC20 is Dummy, InlineNameSymbol, InlineTotalSupply, ERC20Events {
// Selector: decimals() 313ce567
function decimals() external view returns (uint8);
tests/src/eth/api/UniqueNFT.soldiffbeforeafterboth1// SPDX-License-Identifier: OTHER2// This code is automatically generated34pragma solidity >=0.8.0 <0.9.0;56// Anonymous struct7struct Tuple0 {8 uint256 field_0;9 string field_1;10}1112// Common stubs holder13interface Dummy {1415}1617// Inline18interface ERC721Events {19 event Transfer(20 address indexed from,21 address indexed to,22 uint256 indexed tokenId23 );24 event Approval(25 address indexed owner,26 address indexed approved,27 uint256 indexed tokenId28 );29 event ApprovalForAll(30 address indexed owner,31 address indexed operator,32 bool approved33 );34}3536// Inline37interface ERC721MintableEvents {38 event MintingFinished();39}4041// Inline42interface InlineNameSymbol is Dummy {43 // Selector: name() 06fdde0344 function name() external view returns (string memory);4546 // Selector: symbol() 95d89b4147 function symbol() external view returns (string memory);48}4950// Inline51interface InlineTotalSupply is Dummy {52 // Selector: totalSupply() 18160ddd53 function totalSupply() external view returns (uint256);54}5556interface ERC165 is Dummy {57 // Selector: supportsInterface(bytes4) 01ffc9a758 function supportsInterface(uint32 interfaceId) external view returns (bool);59}6061interface ERC721 is Dummy, ERC165, ERC721Events {62 // Selector: balanceOf(address) 70a0823163 function balanceOf(address owner) external view returns (uint256);6465 // Selector: ownerOf(uint256) 6352211e66 function ownerOf(uint256 tokenId) external view returns (address);6768 // Selector: safeTransferFromWithData(address,address,uint256,bytes) 60a1167269 function safeTransferFromWithData(70 address from,71 address to,72 uint256 tokenId,73 bytes memory data74 ) external;7576 // Selector: safeTransferFrom(address,address,uint256) 42842e0e77 function safeTransferFrom(78 address from,79 address to,80 uint256 tokenId81 ) external;8283 // Selector: transferFrom(address,address,uint256) 23b872dd84 function transferFrom(85 address from,86 address to,87 uint256 tokenId88 ) external;8990 // Selector: approve(address,uint256) 095ea7b391 function approve(address approved, uint256 tokenId) external;9293 // Selector: setApprovalForAll(address,bool) a22cb46594 function setApprovalForAll(address operator, bool approved) external;9596 // Selector: getApproved(uint256) 081812fc97 function getApproved(uint256 tokenId) external view returns (address);9899 // Selector: isApprovedForAll(address,address) e985e9c5100 function isApprovedForAll(address owner, address operator)101 external102 view103 returns (address);104}105106interface ERC721Burnable is Dummy {107 // Selector: burn(uint256) 42966c68108 function burn(uint256 tokenId) external;109}110111interface ERC721Enumerable is Dummy, InlineTotalSupply {112 // Selector: tokenByIndex(uint256) 4f6ccce7113 function tokenByIndex(uint256 index) external view returns (uint256);114115 // Selector: tokenOfOwnerByIndex(address,uint256) 2f745c59116 function tokenOfOwnerByIndex(address owner, uint256 index)117 external118 view119 returns (uint256);120}121122interface ERC721Metadata is Dummy, InlineNameSymbol {123 // Selector: tokenURI(uint256) c87b56dd124 function tokenURI(uint256 tokenId) external view returns (string memory);125}126127interface ERC721Mintable is Dummy, ERC721MintableEvents {128 // Selector: mintingFinished() 05d2035b129 function mintingFinished() external view returns (bool);130131 // Selector: mint(address,uint256) 40c10f19132 function mint(address to, uint256 tokenId) external returns (bool);133134 // Selector: mintWithTokenURI(address,uint256,string) 50bb4e7f135 function mintWithTokenURI(136 address to,137 uint256 tokenId,138 string memory tokenUri139 ) external returns (bool);140141 // Selector: finishMinting() 7d64bcb4142 function finishMinting() external returns (bool);143}144145interface ERC721UniqueExtensions is Dummy {146 // Selector: transfer(address,uint256) a9059cbb147 function transfer(address to, uint256 tokenId) external;148149 // Selector: nextTokenId() 75794a3c150 function nextTokenId() external view returns (uint256);151152 // Selector: setVariableMetadata(uint256,bytes) d4eac26d153 function setVariableMetadata(uint256 tokenId, bytes memory data) external;154155 // Selector: getVariableMetadata(uint256) e6c5ce6f156 function getVariableMetadata(uint256 tokenId)157 external158 view159 returns (bytes memory);160161 // Selector: mintBulk(address,uint256[]) 44a9945e162 function mintBulk(address to, uint256[] memory tokenIds)163 external164 returns (bool);165166 // Selector: mintBulkWithTokenURI(address,(uint256,string)[]) 36543006167 function mintBulkWithTokenURI(address to, Tuple0[] memory tokens)168 external169 returns (bool);170}171172interface UniqueNFT is173 Dummy,174 ERC165,175 ERC721,176 ERC721Metadata,177 ERC721Enumerable,178 ERC721UniqueExtensions,179 ERC721Mintable,180 ERC721Burnable181{}1// SPDX-License-Identifier: OTHER2// This code is automatically generated34pragma solidity >=0.8.0 <0.9.0;56// Anonymous struct7struct Tuple0 {8 uint256 field_0;9 string field_1;10}1112// Common stubs holder13interface Dummy {1415}1617interface ERC165 is Dummy {18 function supportsInterface(bytes4 interfaceID) external view returns (bool);19}2021// Inline22interface ERC721Events {23 event Transfer(24 address indexed from,25 address indexed to,26 uint256 indexed tokenId27 );28 event Approval(29 address indexed owner,30 address indexed approved,31 uint256 indexed tokenId32 );33 event ApprovalForAll(34 address indexed owner,35 address indexed operator,36 bool approved37 );38}3940// Inline41interface ERC721MintableEvents {42 event MintingFinished();43}4445interface ERC721 is Dummy, ERC165, ERC721Events {46 // Selector: balanceOf(address) 70a0823147 function balanceOf(address owner) external view returns (uint256);4849 // Selector: ownerOf(uint256) 6352211e50 function ownerOf(uint256 tokenId) external view returns (address);5152 // Selector: safeTransferFromWithData(address,address,uint256,bytes) 60a1167253 function safeTransferFromWithData(54 address from,55 address to,56 uint256 tokenId,57 bytes memory data58 ) external;5960 // Selector: safeTransferFrom(address,address,uint256) 42842e0e61 function safeTransferFrom(62 address from,63 address to,64 uint256 tokenId65 ) external;6667 // Selector: transferFrom(address,address,uint256) 23b872dd68 function transferFrom(69 address from,70 address to,71 uint256 tokenId72 ) external;7374 // Selector: approve(address,uint256) 095ea7b375 function approve(address approved, uint256 tokenId) external;7677 // Selector: setApprovalForAll(address,bool) a22cb46578 function setApprovalForAll(address operator, bool approved) external;7980 // Selector: getApproved(uint256) 081812fc81 function getApproved(uint256 tokenId) external view returns (address);8283 // Selector: isApprovedForAll(address,address) e985e9c584 function isApprovedForAll(address owner, address operator)85 external86 view87 returns (address);88}8990interface ERC721Burnable is Dummy, ERC165 {91 // Selector: burn(uint256) 42966c6892 function burn(uint256 tokenId) external;93}9495interface ERC721Enumerable is Dummy, ERC165 {96 // Selector: tokenByIndex(uint256) 4f6ccce797 function tokenByIndex(uint256 index) external view returns (uint256);9899 // Selector: tokenOfOwnerByIndex(address,uint256) 2f745c59100 function tokenOfOwnerByIndex(address owner, uint256 index)101 external102 view103 returns (uint256);104105 // Selector: totalSupply() 18160ddd106 function totalSupply() external view returns (uint256);107}108109interface ERC721Metadata is Dummy, ERC165 {110 // Selector: name() 06fdde03111 function name() external view returns (string memory);112113 // Selector: symbol() 95d89b41114 function symbol() external view returns (string memory);115116 // Selector: tokenURI(uint256) c87b56dd117 function tokenURI(uint256 tokenId) external view returns (string memory);118}119120interface ERC721Mintable is Dummy, ERC165, ERC721MintableEvents {121 // Selector: mintingFinished() 05d2035b122 function mintingFinished() external view returns (bool);123124 // Selector: mint(address,uint256) 40c10f19125 function mint(address to, uint256 tokenId) external returns (bool);126127 // Selector: mintWithTokenURI(address,uint256,string) 50bb4e7f128 function mintWithTokenURI(129 address to,130 uint256 tokenId,131 string memory tokenUri132 ) external returns (bool);133134 // Selector: finishMinting() 7d64bcb4135 function finishMinting() external returns (bool);136}137138interface ERC721UniqueExtensions is Dummy, ERC165 {139 // Selector: transfer(address,uint256) a9059cbb140 function transfer(address to, uint256 tokenId) external;141142 // Selector: burnFrom(address,uint256) 79cc6790143 function burnFrom(address from, uint256 tokenId) external;144145 // Selector: nextTokenId() 75794a3c146 function nextTokenId() external view returns (uint256);147148 // Selector: setVariableMetadata(uint256,bytes) d4eac26d149 function setVariableMetadata(uint256 tokenId, bytes memory data) external;150151 // Selector: getVariableMetadata(uint256) e6c5ce6f152 function getVariableMetadata(uint256 tokenId)153 external154 view155 returns (bytes memory);156157 // Selector: mintBulk(address,uint256[]) 44a9945e158 function mintBulk(address to, uint256[] memory tokenIds)159 external160 returns (bool);161162 // Selector: mintBulkWithTokenURI(address,(uint256,string)[]) 36543006163 function mintBulkWithTokenURI(address to, Tuple0[] memory tokens)164 external165 returns (bool);166}167168interface UniqueNFT is169 Dummy,170 ERC165,171 ERC721,172 ERC721Metadata,173 ERC721Enumerable,174 ERC721UniqueExtensions,175 ERC721Mintable,176 ERC721Burnable177{}