difftreelog
genetate evm stubs & fix abiWriter for struct
in: master
13 files changed
crates/evm-coder/src/abi/impls.rsdiffbeforeafterboth--- a/crates/evm-coder/src/abi/impls.rs
+++ b/crates/evm-coder/src/abi/impls.rs
@@ -184,8 +184,7 @@
impl AbiWrite for Property {
fn abi_write(&self, writer: &mut AbiWriter) {
- self.key.abi_write(writer);
- self.value.abi_write(writer);
+ (&self.key, &self.value).abi_write(writer);
}
}
crates/evm-coder/src/abi/traits.rsdiffbeforeafterboth--- a/crates/evm-coder/src/abi/traits.rs
+++ b/crates/evm-coder/src/abi/traits.rs
@@ -49,3 +49,9 @@
Ok(writer.into())
}
}
+
+impl<T: AbiWrite> AbiWrite for &T {
+ fn abi_write(&self, writer: &mut AbiWriter) {
+ T::abi_write(self, writer);
+ }
+}
pallets/fungible/src/stubs/UniqueFungible.soldiffbeforeafterboth--- a/pallets/fungible/src/stubs/UniqueFungible.sol
+++ b/pallets/fungible/src/stubs/UniqueFungible.sol
@@ -437,7 +437,7 @@
bytes value;
}
-/// @dev the ERC-165 identifier for this interface is 0x29f4dcd9
+/// @dev the ERC-165 identifier for this interface is 0x5b7038cf
contract ERC20UniqueExtensions is Dummy, ERC165 {
/// @notice A description for the collection.
/// @dev EVM selector for this function is: 0x7284e416,
pallets/nonfungible/src/erc.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -725,7 +725,7 @@
&self,
token_id: uint256,
keys: Vec<string>,
- ) -> Result<Vec<(string, bytes)>> {
+ ) -> Result<Vec<PropertyStruct>> {
let keys = keys
.into_iter()
.map(|key| {
@@ -745,7 +745,7 @@
let key = string::from_utf8(p.key.to_vec())
.map_err(|e| Error::Revert(alloc::format!("{}", e)))?;
let value = bytes(p.value.to_vec());
- Ok((key, value))
+ Ok(PropertyStruct { key, value })
})
.collect::<Result<Vec<_>>>()
}
pallets/nonfungible/src/stubs/UniqueNFT.soldiffbeforeafterboth--- a/pallets/nonfungible/src/stubs/UniqueNFT.sol
+++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol
@@ -188,11 +188,11 @@
/// @return Vector of properties key/value pairs.
/// @dev EVM selector for this function is: 0x285fb8e6,
/// or in textual repr: collectionProperties(string[])
- function collectionProperties(string[] memory keys) public view returns (Tuple23[] memory) {
+ function collectionProperties(string[] memory keys) public view returns (Tuple27[] memory) {
require(false, stub_error);
keys;
dummy;
- return new Tuple23[](0);
+ return new Tuple27[](0);
}
// /// Set the sponsor of the collection.
@@ -253,10 +253,10 @@
/// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.
/// @dev EVM selector for this function is: 0x6ec0a9f1,
/// or in textual repr: collectionSponsor()
- function collectionSponsor() public view returns (Tuple26 memory) {
+ function collectionSponsor() public view returns (Tuple30 memory) {
require(false, stub_error);
dummy;
- return Tuple26(0x0000000000000000000000000000000000000000, 0);
+ return Tuple30(0x0000000000000000000000000000000000000000, 0);
}
/// Set limits for the collection.
@@ -527,13 +527,13 @@
}
/// @dev anonymous struct
-struct Tuple26 {
+struct Tuple30 {
address field_0;
uint256 field_1;
}
/// @dev anonymous struct
-struct Tuple23 {
+struct Tuple27 {
string field_0;
bytes field_1;
}
@@ -682,7 +682,7 @@
}
/// @title Unique extensions for ERC721.
-/// @dev the ERC-165 identifier for this interface is 0x0e9fc611
+/// @dev the ERC-165 identifier for this interface is 0xb8f094a0
contract ERC721UniqueExtensions is Dummy, ERC165 {
/// @notice A descriptive name for a collection of NFTs in this contract
/// @dev EVM selector for this function is: 0x06fdde03,
@@ -730,12 +730,12 @@
/// @return Vector of properties key/value pairs.
/// @dev EVM selector for this function is: 0xefc26c69,
/// or in textual repr: tokenProperties(uint256,string[])
- function tokenProperties(uint256 tokenId, string[] memory keys) public view returns (Tuple8[] memory) {
+ function tokenProperties(uint256 tokenId, string[] memory keys) public view returns (Property[] memory) {
require(false, stub_error);
tokenId;
keys;
dummy;
- return new Tuple8[](0);
+ return new Property[](0);
}
/// @notice Set or reaffirm the approved address for an NFT
@@ -861,7 +861,7 @@
// /// @param tokens array of pairs of token ID and token URI for minted tokens
// /// @dev EVM selector for this function is: 0x36543006,
// /// or in textual repr: mintBulkWithTokenURI(address,(uint256,string)[])
- // function mintBulkWithTokenURI(address to, Tuple11[] memory tokens) public returns (bool) {
+ // function mintBulkWithTokenURI(address to, Tuple15[] memory tokens) public returns (bool) {
// require(false, stub_error);
// to;
// tokens;
@@ -872,15 +872,9 @@
}
/// @dev anonymous struct
-struct Tuple11 {
+struct Tuple15 {
uint256 field_0;
string field_1;
-}
-
-/// @dev anonymous struct
-struct Tuple8 {
- string field_0;
- bytes field_1;
}
/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
pallets/refungible/src/erc.rsdiffbeforeafterboth--- a/pallets/refungible/src/erc.rs
+++ b/pallets/refungible/src/erc.rs
@@ -753,7 +753,7 @@
&self,
token_id: uint256,
keys: Vec<string>,
- ) -> Result<Vec<(string, bytes)>> {
+ ) -> Result<Vec<PropertyStruct>> {
let keys = keys
.into_iter()
.map(|key| {
@@ -773,7 +773,7 @@
let key = string::from_utf8(p.key.to_vec())
.map_err(|e| Error::Revert(alloc::format!("{}", e)))?;
let value = bytes(p.value.to_vec());
- Ok((key, value))
+ Ok(PropertyStruct { key, value })
})
.collect::<Result<Vec<_>>>()
}
pallets/refungible/src/stubs/UniqueRefungible.soldiffbeforeafterboth--- a/pallets/refungible/src/stubs/UniqueRefungible.sol
+++ b/pallets/refungible/src/stubs/UniqueRefungible.sol
@@ -188,11 +188,11 @@
/// @return Vector of properties key/value pairs.
/// @dev EVM selector for this function is: 0x285fb8e6,
/// or in textual repr: collectionProperties(string[])
- function collectionProperties(string[] memory keys) public view returns (Tuple22[] memory) {
+ function collectionProperties(string[] memory keys) public view returns (Tuple26[] memory) {
require(false, stub_error);
keys;
dummy;
- return new Tuple22[](0);
+ return new Tuple26[](0);
}
// /// Set the sponsor of the collection.
@@ -253,10 +253,10 @@
/// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.
/// @dev EVM selector for this function is: 0x6ec0a9f1,
/// or in textual repr: collectionSponsor()
- function collectionSponsor() public view returns (Tuple25 memory) {
+ function collectionSponsor() public view returns (Tuple29 memory) {
require(false, stub_error);
dummy;
- return Tuple25(0x0000000000000000000000000000000000000000, 0);
+ return Tuple29(0x0000000000000000000000000000000000000000, 0);
}
/// Set limits for the collection.
@@ -527,13 +527,13 @@
}
/// @dev anonymous struct
-struct Tuple25 {
+struct Tuple29 {
address field_0;
uint256 field_1;
}
/// @dev anonymous struct
-struct Tuple22 {
+struct Tuple26 {
string field_0;
bytes field_1;
}
@@ -680,7 +680,7 @@
}
/// @title Unique extensions for ERC721.
-/// @dev the ERC-165 identifier for this interface is 0xab243667
+/// @dev the ERC-165 identifier for this interface is 0x1d4b64d6
contract ERC721UniqueExtensions is Dummy, ERC165 {
/// @notice A descriptive name for a collection of NFTs in this contract
/// @dev EVM selector for this function is: 0x06fdde03,
@@ -728,12 +728,12 @@
/// @return Vector of properties key/value pairs.
/// @dev EVM selector for this function is: 0xefc26c69,
/// or in textual repr: tokenProperties(uint256,string[])
- function tokenProperties(uint256 tokenId, string[] memory keys) public view returns (Tuple8[] memory) {
+ function tokenProperties(uint256 tokenId, string[] memory keys) public view returns (Property[] memory) {
require(false, stub_error);
tokenId;
keys;
dummy;
- return new Tuple8[](0);
+ return new Property[](0);
}
/// @notice Transfer ownership of an RFT
@@ -849,7 +849,7 @@
// /// @param tokens array of pairs of token ID and token URI for minted tokens
// /// @dev EVM selector for this function is: 0x36543006,
// /// or in textual repr: mintBulkWithTokenURI(address,(uint256,string)[])
- // function mintBulkWithTokenURI(address to, Tuple10[] memory tokens) public returns (bool) {
+ // function mintBulkWithTokenURI(address to, Tuple14[] memory tokens) public returns (bool) {
// require(false, stub_error);
// to;
// tokens;
@@ -871,15 +871,9 @@
}
/// @dev anonymous struct
-struct Tuple10 {
+struct Tuple14 {
uint256 field_0;
string field_1;
-}
-
-/// @dev anonymous struct
-struct Tuple8 {
- string field_0;
- bytes field_1;
}
/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
tests/src/eth/abi/nonFungible.jsondiffbeforeafterboth--- a/tests/src/eth/abi/nonFungible.json
+++ b/tests/src/eth/abi/nonFungible.json
@@ -249,7 +249,7 @@
{ "internalType": "string", "name": "field_0", "type": "string" },
{ "internalType": "bytes", "name": "field_1", "type": "bytes" }
],
- "internalType": "struct Tuple23[]",
+ "internalType": "struct Tuple27[]",
"name": "",
"type": "tuple[]"
}
@@ -273,7 +273,7 @@
{ "internalType": "address", "name": "field_0", "type": "address" },
{ "internalType": "uint256", "name": "field_1", "type": "uint256" }
],
- "internalType": "struct Tuple26",
+ "internalType": "struct Tuple30",
"name": "",
"type": "tuple"
}
@@ -674,10 +674,10 @@
"outputs": [
{
"components": [
- { "internalType": "string", "name": "field_0", "type": "string" },
- { "internalType": "bytes", "name": "field_1", "type": "bytes" }
+ { "internalType": "string", "name": "key", "type": "string" },
+ { "internalType": "bytes", "name": "value", "type": "bytes" }
],
- "internalType": "struct Tuple8[]",
+ "internalType": "struct Property[]",
"name": "",
"type": "tuple[]"
}
tests/src/eth/abi/reFungible.jsondiffbeforeafterboth--- a/tests/src/eth/abi/reFungible.json
+++ b/tests/src/eth/abi/reFungible.json
@@ -231,7 +231,7 @@
{ "internalType": "string", "name": "field_0", "type": "string" },
{ "internalType": "bytes", "name": "field_1", "type": "bytes" }
],
- "internalType": "struct Tuple22[]",
+ "internalType": "struct Tuple26[]",
"name": "",
"type": "tuple[]"
}
@@ -255,7 +255,7 @@
{ "internalType": "address", "name": "field_0", "type": "address" },
{ "internalType": "uint256", "name": "field_1", "type": "uint256" }
],
- "internalType": "struct Tuple25",
+ "internalType": "struct Tuple29",
"name": "",
"type": "tuple"
}
@@ -665,10 +665,10 @@
"outputs": [
{
"components": [
- { "internalType": "string", "name": "field_0", "type": "string" },
- { "internalType": "bytes", "name": "field_1", "type": "bytes" }
+ { "internalType": "string", "name": "key", "type": "string" },
+ { "internalType": "bytes", "name": "value", "type": "bytes" }
],
- "internalType": "struct Tuple8[]",
+ "internalType": "struct Property[]",
"name": "",
"type": "tuple[]"
}
tests/src/eth/api/UniqueFungible.soldiffbeforeafterboth1// SPDX-License-Identifier: OTHER2// This code is automatically generated34pragma solidity >=0.8.0 <0.9.0;56/// @dev common stubs holder7interface Dummy {89}1011interface ERC165 is Dummy {12 function supportsInterface(bytes4 interfaceID) external view returns (bool);13}1415/// @title A contract that allows you to work with collections.16/// @dev the ERC-165 identifier for this interface is 0x8b91d19217interface Collection is Dummy, ERC165 {18 // /// Set collection property.19 // ///20 // /// @param key Property key.21 // /// @param value Propery value.22 // /// @dev EVM selector for this function is: 0x2f073f66,23 // /// or in textual repr: setCollectionProperty(string,bytes)24 // function setCollectionProperty(string memory key, bytes memory value) external;2526 /// Set collection properties.27 ///28 /// @param properties Vector of properties key/value pair.29 /// @dev EVM selector for this function is: 0x50b26b2a,30 /// or in textual repr: setCollectionProperties((string,bytes)[])31 function setCollectionProperties(Property[] memory properties) external;3233 // /// Delete collection property.34 // ///35 // /// @param key Property key.36 // /// @dev EVM selector for this function is: 0x7b7debce,37 // /// or in textual repr: deleteCollectionProperty(string)38 // function deleteCollectionProperty(string memory key) external;3940 /// Delete collection properties.41 ///42 /// @param keys Properties keys.43 /// @dev EVM selector for this function is: 0xee206ee3,44 /// or in textual repr: deleteCollectionProperties(string[])45 function deleteCollectionProperties(string[] memory keys) external;4647 /// Get collection property.48 ///49 /// @dev Throws error if key not found.50 ///51 /// @param key Property key.52 /// @return bytes The property corresponding to the key.53 /// @dev EVM selector for this function is: 0xcf24fd6d,54 /// or in textual repr: collectionProperty(string)55 function collectionProperty(string memory key) external view returns (bytes memory);5657 /// Get collection properties.58 ///59 /// @param keys Properties keys. Empty keys for all propertyes.60 /// @return Vector of properties key/value pairs.61 /// @dev EVM selector for this function is: 0x285fb8e6,62 /// or in textual repr: collectionProperties(string[])63 function collectionProperties(string[] memory keys) external view returns (Tuple16[] memory);6465 // /// Set the sponsor of the collection.66 // ///67 // /// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.68 // ///69 // /// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.70 // /// @dev EVM selector for this function is: 0x7623402e,71 // /// or in textual repr: setCollectionSponsor(address)72 // function setCollectionSponsor(address sponsor) external;7374 /// Set the sponsor of the collection.75 ///76 /// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.77 ///78 /// @param sponsor Cross account address of the sponsor from whose account funds will be debited for operations with the contract.79 /// @dev EVM selector for this function is: 0x84a1d5a8,80 /// or in textual repr: setCollectionSponsorCross((address,uint256))81 function setCollectionSponsorCross(EthCrossAccount memory sponsor) external;8283 /// Whether there is a pending sponsor.84 /// @dev EVM selector for this function is: 0x058ac185,85 /// or in textual repr: hasCollectionPendingSponsor()86 function hasCollectionPendingSponsor() external view returns (bool);8788 /// Collection sponsorship confirmation.89 ///90 /// @dev After setting the sponsor for the collection, it must be confirmed with this function.91 /// @dev EVM selector for this function is: 0x3c50e97a,92 /// or in textual repr: confirmCollectionSponsorship()93 function confirmCollectionSponsorship() external;9495 /// Remove collection sponsor.96 /// @dev EVM selector for this function is: 0x6e0326a3,97 /// or in textual repr: removeCollectionSponsor()98 function removeCollectionSponsor() external;99100 /// Get current sponsor.101 ///102 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.103 /// @dev EVM selector for this function is: 0x6ec0a9f1,104 /// or in textual repr: collectionSponsor()105 function collectionSponsor() external view returns (Tuple8 memory);106107 /// Set limits for the collection.108 /// @dev Throws error if limit not found.109 /// @param limit Name of the limit. Valid names:110 /// "accountTokenOwnershipLimit",111 /// "sponsoredDataSize",112 /// "sponsoredDataRateLimit",113 /// "tokenLimit",114 /// "sponsorTransferTimeout",115 /// "sponsorApproveTimeout"116 /// "ownerCanTransfer",117 /// "ownerCanDestroy",118 /// "transfersEnabled"119 /// @param value Value of the limit.120 /// @dev EVM selector for this function is: 0x4ad890a8,121 /// or in textual repr: setCollectionLimit(string,uint256)122 function setCollectionLimit(string memory limit, uint256 value) external;123124 /// Get contract address.125 /// @dev EVM selector for this function is: 0xf6b4dfb4,126 /// or in textual repr: contractAddress()127 function contractAddress() external view returns (address);128129 /// Add collection admin.130 /// @param newAdmin Cross account administrator address.131 /// @dev EVM selector for this function is: 0x859aa7d6,132 /// or in textual repr: addCollectionAdminCross((address,uint256))133 function addCollectionAdminCross(EthCrossAccount memory newAdmin) external;134135 /// Remove collection admin.136 /// @param admin Cross account administrator address.137 /// @dev EVM selector for this function is: 0x6c0cd173,138 /// or in textual repr: removeCollectionAdminCross((address,uint256))139 function removeCollectionAdminCross(EthCrossAccount memory admin) external;140141 // /// Add collection admin.142 // /// @param newAdmin Address of the added administrator.143 // /// @dev EVM selector for this function is: 0x92e462c7,144 // /// or in textual repr: addCollectionAdmin(address)145 // function addCollectionAdmin(address newAdmin) external;146147 // /// Remove collection admin.148 // ///149 // /// @param admin Address of the removed administrator.150 // /// @dev EVM selector for this function is: 0xfafd7b42,151 // /// or in textual repr: removeCollectionAdmin(address)152 // function removeCollectionAdmin(address admin) external;153154 /// Toggle accessibility of collection nesting.155 ///156 /// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'157 /// @dev EVM selector for this function is: 0x112d4586,158 /// or in textual repr: setCollectionNesting(bool)159 function setCollectionNesting(bool enable) external;160161 /// Toggle accessibility of collection nesting.162 ///163 /// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled'164 /// @param collections Addresses of collections that will be available for nesting.165 /// @dev EVM selector for this function is: 0x64872396,166 /// or in textual repr: setCollectionNesting(bool,address[])167 function setCollectionNesting(bool enable, address[] memory collections) external;168169 /// Set the collection access method.170 /// @param mode Access mode171 /// 0 for Normal172 /// 1 for AllowList173 /// @dev EVM selector for this function is: 0x41835d4c,174 /// or in textual repr: setCollectionAccess(uint8)175 function setCollectionAccess(uint8 mode) external;176177 /// Checks that user allowed to operate with collection.178 ///179 /// @param user User address to check.180 /// @dev EVM selector for this function is: 0xd63a8e11,181 /// or in textual repr: allowed(address)182 function allowed(address user) external view returns (bool);183184 // /// Add the user to the allowed list.185 // ///186 // /// @param user Address of a trusted user.187 // /// @dev EVM selector for this function is: 0x67844fe6,188 // /// or in textual repr: addToCollectionAllowList(address)189 // function addToCollectionAllowList(address user) external;190191 /// Add user to allowed list.192 ///193 /// @param user User cross account address.194 /// @dev EVM selector for this function is: 0xa0184a3a,195 /// or in textual repr: addToCollectionAllowListCross((address,uint256))196 function addToCollectionAllowListCross(EthCrossAccount memory user) external;197198 // /// Remove the user from the allowed list.199 // ///200 // /// @param user Address of a removed user.201 // /// @dev EVM selector for this function is: 0x85c51acb,202 // /// or in textual repr: removeFromCollectionAllowList(address)203 // function removeFromCollectionAllowList(address user) external;204205 /// Remove user from allowed list.206 ///207 /// @param user User cross account address.208 /// @dev EVM selector for this function is: 0x09ba452a,209 /// or in textual repr: removeFromCollectionAllowListCross((address,uint256))210 function removeFromCollectionAllowListCross(EthCrossAccount memory user) external;211212 /// Switch permission for minting.213 ///214 /// @param mode Enable if "true".215 /// @dev EVM selector for this function is: 0x00018e84,216 /// or in textual repr: setCollectionMintMode(bool)217 function setCollectionMintMode(bool mode) external;218219 // /// Check that account is the owner or admin of the collection220 // ///221 // /// @param user account to verify222 // /// @return "true" if account is the owner or admin223 // /// @dev EVM selector for this function is: 0x9811b0c7,224 // /// or in textual repr: isOwnerOrAdmin(address)225 // function isOwnerOrAdmin(address user) external view returns (bool);226227 /// Check that account is the owner or admin of the collection228 ///229 /// @param user User cross account to verify230 /// @return "true" if account is the owner or admin231 /// @dev EVM selector for this function is: 0x3e75a905,232 /// or in textual repr: isOwnerOrAdminCross((address,uint256))233 function isOwnerOrAdminCross(EthCrossAccount memory user) external view returns (bool);234235 /// Returns collection type236 ///237 /// @return `Fungible` or `NFT` or `ReFungible`238 /// @dev EVM selector for this function is: 0xd34b55b8,239 /// or in textual repr: uniqueCollectionType()240 function uniqueCollectionType() external view returns (string memory);241242 /// Get collection owner.243 ///244 /// @return Tuble with sponsor address and his substrate mirror.245 /// If address is canonical then substrate mirror is zero and vice versa.246 /// @dev EVM selector for this function is: 0xdf727d3b,247 /// or in textual repr: collectionOwner()248 function collectionOwner() external view returns (EthCrossAccount memory);249250 // /// Changes collection owner to another account251 // ///252 // /// @dev Owner can be changed only by current owner253 // /// @param newOwner new owner account254 // /// @dev EVM selector for this function is: 0x4f53e226,255 // /// or in textual repr: changeCollectionOwner(address)256 // function changeCollectionOwner(address newOwner) external;257258 /// Get collection administrators259 ///260 /// @return Vector of tuples with admins address and his substrate mirror.261 /// If address is canonical then substrate mirror is zero and vice versa.262 /// @dev EVM selector for this function is: 0x5813216b,263 /// or in textual repr: collectionAdmins()264 function collectionAdmins() external view returns (EthCrossAccount[] memory);265266 /// Changes collection owner to another account267 ///268 /// @dev Owner can be changed only by current owner269 /// @param newOwner new owner cross account270 /// @dev EVM selector for this function is: 0x6496c497,271 /// or in textual repr: changeCollectionOwnerCross((address,uint256))272 function changeCollectionOwnerCross(EthCrossAccount memory newOwner) external;273}274275/// @dev Cross account struct276struct EthCrossAccount {277 address eth;278 uint256 sub;279}280281/// @dev anonymous struct282struct Tuple16 {283 string field_0;284 bytes field_1;285}286287/// @dev Property struct288struct Property {289 string key;290 bytes value;291}292293/// @dev the ERC-165 identifier for this interface is 0x29f4dcd9294interface ERC20UniqueExtensions is Dummy, ERC165 {295 /// @notice A description for the collection.296 /// @dev EVM selector for this function is: 0x7284e416,297 /// or in textual repr: description()298 function description() external view returns (string memory);299300 /// @dev EVM selector for this function is: 0x0ecd0ab0,301 /// or in textual repr: approveCross((address,uint256),uint256)302 function approveCross(EthCrossAccount memory spender, uint256 amount) external returns (bool);303304 // /// Burn tokens from account305 // /// @dev Function that burns an `amount` of the tokens of a given account,306 // /// deducting from the sender's allowance for said account.307 // /// @param from The account whose tokens will be burnt.308 // /// @param amount The amount that will be burnt.309 // /// @dev EVM selector for this function is: 0x79cc6790,310 // /// or in textual repr: burnFrom(address,uint256)311 // function burnFrom(address from, uint256 amount) external returns (bool);312313 /// Burn tokens from account314 /// @dev Function that burns an `amount` of the tokens of a given account,315 /// deducting from the sender's allowance for said account.316 /// @param from The account whose tokens will be burnt.317 /// @param amount The amount that will be burnt.318 /// @dev EVM selector for this function is: 0xbb2f5a58,319 /// or in textual repr: burnFromCross((address,uint256),uint256)320 function burnFromCross(EthCrossAccount memory from, uint256 amount) external returns (bool);321322 /// Mint tokens for multiple accounts.323 /// @param amounts array of pairs of account address and amount324 /// @dev EVM selector for this function is: 0x1acf2d55,325 /// or in textual repr: mintBulk((address,uint256)[])326 function mintBulk(Tuple8[] memory amounts) external returns (bool);327328 /// @dev EVM selector for this function is: 0x2ada85ff,329 /// or in textual repr: transferCross((address,uint256),uint256)330 function transferCross(EthCrossAccount memory to, uint256 amount) external returns (bool);331332 /// @dev EVM selector for this function is: 0xd5cf430b,333 /// or in textual repr: transferFromCross((address,uint256),(address,uint256),uint256)334 function transferFromCross(335 EthCrossAccount memory from,336 EthCrossAccount memory to,337 uint256 amount338 ) external returns (bool);339}340341/// @dev anonymous struct342struct Tuple8 {343 address field_0;344 uint256 field_1;345}346347/// @dev the ERC-165 identifier for this interface is 0x40c10f19348interface ERC20Mintable is Dummy, ERC165 {349 /// Mint tokens for `to` account.350 /// @param to account that will receive minted tokens351 /// @param amount amount of tokens to mint352 /// @dev EVM selector for this function is: 0x40c10f19,353 /// or in textual repr: mint(address,uint256)354 function mint(address to, uint256 amount) external returns (bool);355}356357/// @dev inlined interface358interface ERC20Events {359 event Transfer(address indexed from, address indexed to, uint256 value);360 event Approval(address indexed owner, address indexed spender, uint256 value);361}362363/// @dev the ERC-165 identifier for this interface is 0x942e8b22364interface ERC20 is Dummy, ERC165, ERC20Events {365 /// @dev EVM selector for this function is: 0x06fdde03,366 /// or in textual repr: name()367 function name() external view returns (string memory);368369 /// @dev EVM selector for this function is: 0x95d89b41,370 /// or in textual repr: symbol()371 function symbol() external view returns (string memory);372373 /// @dev EVM selector for this function is: 0x18160ddd,374 /// or in textual repr: totalSupply()375 function totalSupply() external view returns (uint256);376377 /// @dev EVM selector for this function is: 0x313ce567,378 /// or in textual repr: decimals()379 function decimals() external view returns (uint8);380381 /// @dev EVM selector for this function is: 0x70a08231,382 /// or in textual repr: balanceOf(address)383 function balanceOf(address owner) external view returns (uint256);384385 /// @dev EVM selector for this function is: 0xa9059cbb,386 /// or in textual repr: transfer(address,uint256)387 function transfer(address to, uint256 amount) external returns (bool);388389 /// @dev EVM selector for this function is: 0x23b872dd,390 /// or in textual repr: transferFrom(address,address,uint256)391 function transferFrom(392 address from,393 address to,394 uint256 amount395 ) external returns (bool);396397 /// @dev EVM selector for this function is: 0x095ea7b3,398 /// or in textual repr: approve(address,uint256)399 function approve(address spender, uint256 amount) external returns (bool);400401 /// @dev EVM selector for this function is: 0xdd62ed3e,402 /// or in textual repr: allowance(address,address)403 function allowance(address owner, address spender) external view returns (uint256);404}405406interface UniqueFungible is Dummy, ERC165, ERC20, ERC20Mintable, ERC20UniqueExtensions, Collection {}1// SPDX-License-Identifier: OTHER2// This code is automatically generated34pragma solidity >=0.8.0 <0.9.0;56/// @dev common stubs holder7interface Dummy {89}1011interface ERC165 is Dummy {12 function supportsInterface(bytes4 interfaceID) external view returns (bool);13}1415/// @title A contract that allows you to work with collections.16/// @dev the ERC-165 identifier for this interface is 0x8b91d19217interface Collection is Dummy, ERC165 {18 // /// Set collection property.19 // ///20 // /// @param key Property key.21 // /// @param value Propery value.22 // /// @dev EVM selector for this function is: 0x2f073f66,23 // /// or in textual repr: setCollectionProperty(string,bytes)24 // function setCollectionProperty(string memory key, bytes memory value) external;2526 /// Set collection properties.27 ///28 /// @param properties Vector of properties key/value pair.29 /// @dev EVM selector for this function is: 0x50b26b2a,30 /// or in textual repr: setCollectionProperties((string,bytes)[])31 function setCollectionProperties(Property[] memory properties) external;3233 // /// Delete collection property.34 // ///35 // /// @param key Property key.36 // /// @dev EVM selector for this function is: 0x7b7debce,37 // /// or in textual repr: deleteCollectionProperty(string)38 // function deleteCollectionProperty(string memory key) external;3940 /// Delete collection properties.41 ///42 /// @param keys Properties keys.43 /// @dev EVM selector for this function is: 0xee206ee3,44 /// or in textual repr: deleteCollectionProperties(string[])45 function deleteCollectionProperties(string[] memory keys) external;4647 /// Get collection property.48 ///49 /// @dev Throws error if key not found.50 ///51 /// @param key Property key.52 /// @return bytes The property corresponding to the key.53 /// @dev EVM selector for this function is: 0xcf24fd6d,54 /// or in textual repr: collectionProperty(string)55 function collectionProperty(string memory key) external view returns (bytes memory);5657 /// Get collection properties.58 ///59 /// @param keys Properties keys. Empty keys for all propertyes.60 /// @return Vector of properties key/value pairs.61 /// @dev EVM selector for this function is: 0x285fb8e6,62 /// or in textual repr: collectionProperties(string[])63 function collectionProperties(string[] memory keys) external view returns (Tuple16[] memory);6465 // /// Set the sponsor of the collection.66 // ///67 // /// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.68 // ///69 // /// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.70 // /// @dev EVM selector for this function is: 0x7623402e,71 // /// or in textual repr: setCollectionSponsor(address)72 // function setCollectionSponsor(address sponsor) external;7374 /// Set the sponsor of the collection.75 ///76 /// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.77 ///78 /// @param sponsor Cross account address of the sponsor from whose account funds will be debited for operations with the contract.79 /// @dev EVM selector for this function is: 0x84a1d5a8,80 /// or in textual repr: setCollectionSponsorCross((address,uint256))81 function setCollectionSponsorCross(EthCrossAccount memory sponsor) external;8283 /// Whether there is a pending sponsor.84 /// @dev EVM selector for this function is: 0x058ac185,85 /// or in textual repr: hasCollectionPendingSponsor()86 function hasCollectionPendingSponsor() external view returns (bool);8788 /// Collection sponsorship confirmation.89 ///90 /// @dev After setting the sponsor for the collection, it must be confirmed with this function.91 /// @dev EVM selector for this function is: 0x3c50e97a,92 /// or in textual repr: confirmCollectionSponsorship()93 function confirmCollectionSponsorship() external;9495 /// Remove collection sponsor.96 /// @dev EVM selector for this function is: 0x6e0326a3,97 /// or in textual repr: removeCollectionSponsor()98 function removeCollectionSponsor() external;99100 /// Get current sponsor.101 ///102 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.103 /// @dev EVM selector for this function is: 0x6ec0a9f1,104 /// or in textual repr: collectionSponsor()105 function collectionSponsor() external view returns (Tuple8 memory);106107 /// Set limits for the collection.108 /// @dev Throws error if limit not found.109 /// @param limit Name of the limit. Valid names:110 /// "accountTokenOwnershipLimit",111 /// "sponsoredDataSize",112 /// "sponsoredDataRateLimit",113 /// "tokenLimit",114 /// "sponsorTransferTimeout",115 /// "sponsorApproveTimeout"116 /// "ownerCanTransfer",117 /// "ownerCanDestroy",118 /// "transfersEnabled"119 /// @param value Value of the limit.120 /// @dev EVM selector for this function is: 0x4ad890a8,121 /// or in textual repr: setCollectionLimit(string,uint256)122 function setCollectionLimit(string memory limit, uint256 value) external;123124 /// Get contract address.125 /// @dev EVM selector for this function is: 0xf6b4dfb4,126 /// or in textual repr: contractAddress()127 function contractAddress() external view returns (address);128129 /// Add collection admin.130 /// @param newAdmin Cross account administrator address.131 /// @dev EVM selector for this function is: 0x859aa7d6,132 /// or in textual repr: addCollectionAdminCross((address,uint256))133 function addCollectionAdminCross(EthCrossAccount memory newAdmin) external;134135 /// Remove collection admin.136 /// @param admin Cross account administrator address.137 /// @dev EVM selector for this function is: 0x6c0cd173,138 /// or in textual repr: removeCollectionAdminCross((address,uint256))139 function removeCollectionAdminCross(EthCrossAccount memory admin) external;140141 // /// Add collection admin.142 // /// @param newAdmin Address of the added administrator.143 // /// @dev EVM selector for this function is: 0x92e462c7,144 // /// or in textual repr: addCollectionAdmin(address)145 // function addCollectionAdmin(address newAdmin) external;146147 // /// Remove collection admin.148 // ///149 // /// @param admin Address of the removed administrator.150 // /// @dev EVM selector for this function is: 0xfafd7b42,151 // /// or in textual repr: removeCollectionAdmin(address)152 // function removeCollectionAdmin(address admin) external;153154 /// Toggle accessibility of collection nesting.155 ///156 /// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'157 /// @dev EVM selector for this function is: 0x112d4586,158 /// or in textual repr: setCollectionNesting(bool)159 function setCollectionNesting(bool enable) external;160161 /// Toggle accessibility of collection nesting.162 ///163 /// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled'164 /// @param collections Addresses of collections that will be available for nesting.165 /// @dev EVM selector for this function is: 0x64872396,166 /// or in textual repr: setCollectionNesting(bool,address[])167 function setCollectionNesting(bool enable, address[] memory collections) external;168169 /// Set the collection access method.170 /// @param mode Access mode171 /// 0 for Normal172 /// 1 for AllowList173 /// @dev EVM selector for this function is: 0x41835d4c,174 /// or in textual repr: setCollectionAccess(uint8)175 function setCollectionAccess(uint8 mode) external;176177 /// Checks that user allowed to operate with collection.178 ///179 /// @param user User address to check.180 /// @dev EVM selector for this function is: 0xd63a8e11,181 /// or in textual repr: allowed(address)182 function allowed(address user) external view returns (bool);183184 // /// Add the user to the allowed list.185 // ///186 // /// @param user Address of a trusted user.187 // /// @dev EVM selector for this function is: 0x67844fe6,188 // /// or in textual repr: addToCollectionAllowList(address)189 // function addToCollectionAllowList(address user) external;190191 /// Add user to allowed list.192 ///193 /// @param user User cross account address.194 /// @dev EVM selector for this function is: 0xa0184a3a,195 /// or in textual repr: addToCollectionAllowListCross((address,uint256))196 function addToCollectionAllowListCross(EthCrossAccount memory user) external;197198 // /// Remove the user from the allowed list.199 // ///200 // /// @param user Address of a removed user.201 // /// @dev EVM selector for this function is: 0x85c51acb,202 // /// or in textual repr: removeFromCollectionAllowList(address)203 // function removeFromCollectionAllowList(address user) external;204205 /// Remove user from allowed list.206 ///207 /// @param user User cross account address.208 /// @dev EVM selector for this function is: 0x09ba452a,209 /// or in textual repr: removeFromCollectionAllowListCross((address,uint256))210 function removeFromCollectionAllowListCross(EthCrossAccount memory user) external;211212 /// Switch permission for minting.213 ///214 /// @param mode Enable if "true".215 /// @dev EVM selector for this function is: 0x00018e84,216 /// or in textual repr: setCollectionMintMode(bool)217 function setCollectionMintMode(bool mode) external;218219 // /// Check that account is the owner or admin of the collection220 // ///221 // /// @param user account to verify222 // /// @return "true" if account is the owner or admin223 // /// @dev EVM selector for this function is: 0x9811b0c7,224 // /// or in textual repr: isOwnerOrAdmin(address)225 // function isOwnerOrAdmin(address user) external view returns (bool);226227 /// Check that account is the owner or admin of the collection228 ///229 /// @param user User cross account to verify230 /// @return "true" if account is the owner or admin231 /// @dev EVM selector for this function is: 0x3e75a905,232 /// or in textual repr: isOwnerOrAdminCross((address,uint256))233 function isOwnerOrAdminCross(EthCrossAccount memory user) external view returns (bool);234235 /// Returns collection type236 ///237 /// @return `Fungible` or `NFT` or `ReFungible`238 /// @dev EVM selector for this function is: 0xd34b55b8,239 /// or in textual repr: uniqueCollectionType()240 function uniqueCollectionType() external view returns (string memory);241242 /// Get collection owner.243 ///244 /// @return Tuble with sponsor address and his substrate mirror.245 /// If address is canonical then substrate mirror is zero and vice versa.246 /// @dev EVM selector for this function is: 0xdf727d3b,247 /// or in textual repr: collectionOwner()248 function collectionOwner() external view returns (EthCrossAccount memory);249250 // /// Changes collection owner to another account251 // ///252 // /// @dev Owner can be changed only by current owner253 // /// @param newOwner new owner account254 // /// @dev EVM selector for this function is: 0x4f53e226,255 // /// or in textual repr: changeCollectionOwner(address)256 // function changeCollectionOwner(address newOwner) external;257258 /// Get collection administrators259 ///260 /// @return Vector of tuples with admins address and his substrate mirror.261 /// If address is canonical then substrate mirror is zero and vice versa.262 /// @dev EVM selector for this function is: 0x5813216b,263 /// or in textual repr: collectionAdmins()264 function collectionAdmins() external view returns (EthCrossAccount[] memory);265266 /// Changes collection owner to another account267 ///268 /// @dev Owner can be changed only by current owner269 /// @param newOwner new owner cross account270 /// @dev EVM selector for this function is: 0x6496c497,271 /// or in textual repr: changeCollectionOwnerCross((address,uint256))272 function changeCollectionOwnerCross(EthCrossAccount memory newOwner) external;273}274275/// @dev Cross account struct276struct EthCrossAccount {277 address eth;278 uint256 sub;279}280281/// @dev anonymous struct282struct Tuple16 {283 string field_0;284 bytes field_1;285}286287/// @dev Property struct288struct Property {289 string key;290 bytes value;291}292293/// @dev the ERC-165 identifier for this interface is 0x5b7038cf294interface ERC20UniqueExtensions is Dummy, ERC165 {295 /// @notice A description for the collection.296 /// @dev EVM selector for this function is: 0x7284e416,297 /// or in textual repr: description()298 function description() external view returns (string memory);299300 /// @dev EVM selector for this function is: 0x0ecd0ab0,301 /// or in textual repr: approveCross((address,uint256),uint256)302 function approveCross(EthCrossAccount memory spender, uint256 amount) external returns (bool);303304 // /// Burn tokens from account305 // /// @dev Function that burns an `amount` of the tokens of a given account,306 // /// deducting from the sender's allowance for said account.307 // /// @param from The account whose tokens will be burnt.308 // /// @param amount The amount that will be burnt.309 // /// @dev EVM selector for this function is: 0x79cc6790,310 // /// or in textual repr: burnFrom(address,uint256)311 // function burnFrom(address from, uint256 amount) external returns (bool);312313 /// Burn tokens from account314 /// @dev Function that burns an `amount` of the tokens of a given account,315 /// deducting from the sender's allowance for said account.316 /// @param from The account whose tokens will be burnt.317 /// @param amount The amount that will be burnt.318 /// @dev EVM selector for this function is: 0xbb2f5a58,319 /// or in textual repr: burnFromCross((address,uint256),uint256)320 function burnFromCross(EthCrossAccount memory from, uint256 amount) external returns (bool);321322 /// Mint tokens for multiple accounts.323 /// @param amounts array of pairs of account address and amount324 /// @dev EVM selector for this function is: 0x1acf2d55,325 /// or in textual repr: mintBulk((address,uint256)[])326 function mintBulk(Tuple8[] memory amounts) external returns (bool);327328 /// @dev EVM selector for this function is: 0x2ada85ff,329 /// or in textual repr: transferCross((address,uint256),uint256)330 function transferCross(EthCrossAccount memory to, uint256 amount) external returns (bool);331332 /// @dev EVM selector for this function is: 0xd5cf430b,333 /// or in textual repr: transferFromCross((address,uint256),(address,uint256),uint256)334 function transferFromCross(335 EthCrossAccount memory from,336 EthCrossAccount memory to,337 uint256 amount338 ) external returns (bool);339}340341/// @dev anonymous struct342struct Tuple8 {343 address field_0;344 uint256 field_1;345}346347/// @dev the ERC-165 identifier for this interface is 0x40c10f19348interface ERC20Mintable is Dummy, ERC165 {349 /// Mint tokens for `to` account.350 /// @param to account that will receive minted tokens351 /// @param amount amount of tokens to mint352 /// @dev EVM selector for this function is: 0x40c10f19,353 /// or in textual repr: mint(address,uint256)354 function mint(address to, uint256 amount) external returns (bool);355}356357/// @dev inlined interface358interface ERC20Events {359 event Transfer(address indexed from, address indexed to, uint256 value);360 event Approval(address indexed owner, address indexed spender, uint256 value);361}362363/// @dev the ERC-165 identifier for this interface is 0x942e8b22364interface ERC20 is Dummy, ERC165, ERC20Events {365 /// @dev EVM selector for this function is: 0x06fdde03,366 /// or in textual repr: name()367 function name() external view returns (string memory);368369 /// @dev EVM selector for this function is: 0x95d89b41,370 /// or in textual repr: symbol()371 function symbol() external view returns (string memory);372373 /// @dev EVM selector for this function is: 0x18160ddd,374 /// or in textual repr: totalSupply()375 function totalSupply() external view returns (uint256);376377 /// @dev EVM selector for this function is: 0x313ce567,378 /// or in textual repr: decimals()379 function decimals() external view returns (uint8);380381 /// @dev EVM selector for this function is: 0x70a08231,382 /// or in textual repr: balanceOf(address)383 function balanceOf(address owner) external view returns (uint256);384385 /// @dev EVM selector for this function is: 0xa9059cbb,386 /// or in textual repr: transfer(address,uint256)387 function transfer(address to, uint256 amount) external returns (bool);388389 /// @dev EVM selector for this function is: 0x23b872dd,390 /// or in textual repr: transferFrom(address,address,uint256)391 function transferFrom(392 address from,393 address to,394 uint256 amount395 ) external returns (bool);396397 /// @dev EVM selector for this function is: 0x095ea7b3,398 /// or in textual repr: approve(address,uint256)399 function approve(address spender, uint256 amount) external returns (bool);400401 /// @dev EVM selector for this function is: 0xdd62ed3e,402 /// or in textual repr: allowance(address,address)403 function allowance(address owner, address spender) external view returns (uint256);404}405406interface UniqueFungible is Dummy, ERC165, ERC20, ERC20Mintable, ERC20UniqueExtensions, Collection {}tests/src/eth/api/UniqueNFT.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -45,7 +45,7 @@
/// @param properties settable properties
/// @dev EVM selector for this function is: 0x14ed3a6e,
/// or in textual repr: setProperties(uint256,(string,bytes)[])
- function setProperties(uint256 tokenId, Tuple21[] memory properties) external;
+ function setProperties(uint256 tokenId, Property[] memory properties) external;
// /// @notice Delete token property value.
// /// @dev Throws error if `msg.sender` has no permission to edit the property.
@@ -95,7 +95,7 @@
/// @param properties Vector of properties key/value pair.
/// @dev EVM selector for this function is: 0x50b26b2a,
/// or in textual repr: setCollectionProperties((string,bytes)[])
- function setCollectionProperties(Tuple21[] memory properties) external;
+ function setCollectionProperties(Property[] memory properties) external;
// /// Delete collection property.
// ///
@@ -127,7 +127,7 @@
/// @return Vector of properties key/value pairs.
/// @dev EVM selector for this function is: 0x285fb8e6,
/// or in textual repr: collectionProperties(string[])
- function collectionProperties(string[] memory keys) external view returns (Tuple21[] memory);
+ function collectionProperties(string[] memory keys) external view returns (Tuple25[] memory);
// /// Set the sponsor of the collection.
// ///
@@ -169,7 +169,7 @@
/// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.
/// @dev EVM selector for this function is: 0x6ec0a9f1,
/// or in textual repr: collectionSponsor()
- function collectionSponsor() external view returns (Tuple24 memory);
+ function collectionSponsor() external view returns (Tuple28 memory);
/// Set limits for the collection.
/// @dev Throws error if limit not found.
@@ -346,13 +346,13 @@
}
/// @dev anonymous struct
-struct Tuple24 {
+struct Tuple28 {
address field_0;
uint256 field_1;
}
/// @dev anonymous struct
-struct Tuple21 {
+struct Tuple25 {
string field_0;
bytes field_1;
}
@@ -452,7 +452,7 @@
}
/// @title Unique extensions for ERC721.
-/// @dev the ERC-165 identifier for this interface is 0x244543ee
+/// @dev the ERC-165 identifier for this interface is 0xb8f094a0
interface ERC721UniqueExtensions is Dummy, ERC165 {
/// @notice A descriptive name for a collection of NFTs in this contract
/// @dev EVM selector for this function is: 0x06fdde03,
@@ -483,7 +483,7 @@
/// @return Vector of properties key/value pairs.
/// @dev EVM selector for this function is: 0xefc26c69,
/// or in textual repr: tokenProperties(uint256,string[])
- function tokenProperties(uint256 tokenId, string[] memory keys) external view returns (Tuple7[] memory);
+ function tokenProperties(uint256 tokenId, string[] memory keys) external view returns (Property[] memory);
/// @notice Set or reaffirm the approved address for an NFT
/// @dev The zero address indicates there is no approved address.
@@ -567,20 +567,14 @@
// /// @param tokens array of pairs of token ID and token URI for minted tokens
// /// @dev EVM selector for this function is: 0x36543006,
// /// or in textual repr: mintBulkWithTokenURI(address,(uint256,string)[])
- // function mintBulkWithTokenURI(address to, Tuple10[] memory tokens) external returns (bool);
+ // function mintBulkWithTokenURI(address to, Tuple13[] memory tokens) external returns (bool);
}
/// @dev anonymous struct
-struct Tuple10 {
+struct Tuple13 {
uint256 field_0;
string field_1;
-}
-
-/// @dev anonymous struct
-struct Tuple7 {
- string field_0;
- bytes field_1;
}
/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
tests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -127,7 +127,7 @@
/// @return Vector of properties key/value pairs.
/// @dev EVM selector for this function is: 0x285fb8e6,
/// or in textual repr: collectionProperties(string[])
- function collectionProperties(string[] memory keys) external view returns (Tuple22[] memory);
+ function collectionProperties(string[] memory keys) external view returns (Tuple24[] memory);
// /// Set the sponsor of the collection.
// ///
@@ -169,7 +169,7 @@
/// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.
/// @dev EVM selector for this function is: 0x6ec0a9f1,
/// or in textual repr: collectionSponsor()
- function collectionSponsor() external view returns (Tuple25 memory);
+ function collectionSponsor() external view returns (Tuple27 memory);
/// Set limits for the collection.
/// @dev Throws error if limit not found.
@@ -346,13 +346,13 @@
}
/// @dev anonymous struct
-struct Tuple25 {
+struct Tuple27 {
address field_0;
uint256 field_1;
}
/// @dev anonymous struct
-struct Tuple22 {
+struct Tuple24 {
string field_0;
bytes field_1;
}
@@ -450,7 +450,7 @@
}
/// @title Unique extensions for ERC721.
-/// @dev the ERC-165 identifier for this interface is 0xab243667
+/// @dev the ERC-165 identifier for this interface is 0x1d4b64d6
interface ERC721UniqueExtensions is Dummy, ERC165 {
/// @notice A descriptive name for a collection of NFTs in this contract
/// @dev EVM selector for this function is: 0x06fdde03,
@@ -481,7 +481,7 @@
/// @return Vector of properties key/value pairs.
/// @dev EVM selector for this function is: 0xefc26c69,
/// or in textual repr: tokenProperties(uint256,string[])
- function tokenProperties(uint256 tokenId, string[] memory keys) external view returns (Tuple7[] memory);
+ function tokenProperties(uint256 tokenId, string[] memory keys) external view returns (Property[] memory);
/// @notice Transfer ownership of an RFT
/// @dev Throws unless `msg.sender` is the current owner. Throws if `to`
@@ -560,7 +560,7 @@
// /// @param tokens array of pairs of token ID and token URI for minted tokens
// /// @dev EVM selector for this function is: 0x36543006,
// /// or in textual repr: mintBulkWithTokenURI(address,(uint256,string)[])
- // function mintBulkWithTokenURI(address to, Tuple10[] memory tokens) external returns (bool);
+ // function mintBulkWithTokenURI(address to, Tuple12[] memory tokens) external returns (bool);
/// Returns EVM address for refungible token
///
@@ -571,15 +571,9 @@
}
/// @dev anonymous struct
-struct Tuple10 {
+struct Tuple12 {
uint256 field_0;
string field_1;
-}
-
-/// @dev anonymous struct
-struct Tuple7 {
- string field_0;
- bytes field_1;
}
/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
tests/src/eth/base.test.tsdiffbeforeafterboth--- a/tests/src/eth/base.test.ts
+++ b/tests/src/eth/base.test.ts
@@ -117,7 +117,7 @@
});
itEth('ERC721UniqueExtensions support', async ({helper}) => {
- await checkInterface(helper, '0x922a115f', true, true);
+ await checkInterface(helper, '0xb8f094a0', true, true);
});
itEth('ERC721Burnable - 0x42966c68 - support', async ({helper}) => {