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

difftreelog

feat regenerate solidity stubs

Yaroslav Bolyukin2021-11-02parent: #44992fc.patch.diff
in: master

15 files changed

modified.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
modified.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
modifiedMakefilediffbeforeafterboth
--- 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:
modifiedcrates/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
modifiedpallets/evm-contract-helpers/src/stubs/ContractHelpers.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/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
modifiedpallets/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']
modifiedpallets/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> {
modifiedpallets/fungible/src/stubs/UniqueFungible.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/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);
modifiedpallets/nonfungible/src/stubs/UniqueNFT.rawdiffbeforeafterboth

binary blob — no preview

modifiedpallets/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);
modifiedtests/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
modifiedtests/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);
 
modifiedtests/src/eth/api/UniqueNFT.soldiffbeforeafterboth
before · tests/src/eth/api/UniqueNFT.sol
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}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{}
after · tests/src/eth/api/UniqueNFT.sol
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{}