difftreelog
feat add evm OptionUint type
in: master
19 files changed
pallets/common/src/eth.rsdiffbeforeafterboth--- a/pallets/common/src/eth.rs
+++ b/pallets/common/src/eth.rs
@@ -66,6 +66,56 @@
T::CrossAccountId::from_sub(account_id)
}
+/// Ethereum representation of Optional value with uint256.
+#[derive(Debug, Default, AbiCoder)]
+pub struct OptionUint {
+ status: bool,
+ value: uint256,
+}
+
+impl From<u32> for OptionUint {
+ fn from(value: u32) -> Self {
+ Self {
+ status: true,
+ value: uint256::from(value),
+ }
+ }
+}
+
+impl From<Option<u32>> for OptionUint {
+ fn from(value: Option<u32>) -> Self {
+ match value {
+ Some(value) => Self {
+ status: true,
+ value: value.into(),
+ },
+ None => Self {
+ status: false,
+ value: Default::default(),
+ },
+ }
+ }
+}
+
+impl From<Option<bool>> for OptionUint {
+ fn from(value: Option<bool>) -> Self {
+ match value {
+ Some(value) => Self {
+ status: true,
+ value: if value {
+ uint256::from(1)
+ } else {
+ Default::default()
+ },
+ },
+ None => Self {
+ status: false,
+ value: Default::default(),
+ },
+ }
+ }
+}
+
/// Cross account struct
#[derive(Debug, Default, AbiCoder)]
pub struct CrossAccount {
@@ -164,8 +214,7 @@
#[derive(Debug, Default, AbiCoder)]
pub struct CollectionLimit {
field: CollectionLimitField,
- status: bool,
- value: uint256,
+ value: OptionUint,
}
impl CollectionLimit {
@@ -173,43 +222,24 @@
pub fn from_int(field: CollectionLimitField, value: u32) -> Self {
Self {
field,
- status: true,
value: value.into(),
}
}
/// Make [`CollectionLimit`] from [`CollectionLimitField`] and optional int value.
pub fn from_opt_int(field: CollectionLimitField, value: Option<u32>) -> Self {
- value
- .map(|v| Self {
- field,
- status: true,
- value: v.into(),
- })
- .unwrap_or(Self {
- field,
- status: false,
- value: Default::default(),
- })
+ Self {
+ field,
+ value: value.into(),
+ }
}
/// Make [`CollectionLimit`] from [`CollectionLimitField`] and bool value.
pub fn from_opt_bool(field: CollectionLimitField, value: Option<bool>) -> Self {
- value
- .map(|v| Self {
- field,
- status: true,
- value: if v {
- uint256::from(1)
- } else {
- Default::default()
- },
- })
- .unwrap_or(Self {
- field,
- status: false,
- value: Default::default(),
- })
+ Self {
+ field,
+ value: value.into(),
+ }
}
}
@@ -217,14 +247,14 @@
type Error = evm_coder::execution::Error;
fn try_into(self) -> Result<up_data_structs::CollectionLimits, Self::Error> {
- if !self.status {
+ if !self.value.status {
return Err(Self::Error::Revert("user can't disable limits".into()));
}
- let value = self.value.try_into().map_err(|error| {
+ let value = self.value.value.try_into().map_err(|error| {
Self::Error::Revert(format!(
"can't convert value to u32 \"{}\" because: \"{error}\"",
- self.value
+ self.value.value
))
})?;
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
@@ -18,7 +18,7 @@
}
/// @title A contract that allows you to work with collections.
-/// @dev the ERC-165 identifier for this interface is 0x23201442
+/// @dev the ERC-165 identifier for this interface is 0x2a14cfd1
contract Collection is Dummy, ERC165 {
// /// Set collection property.
// ///
@@ -172,8 +172,8 @@
/// Set limits for the collection.
/// @dev Throws error if limit not found.
/// @param limit Some limit.
- /// @dev EVM selector for this function is: 0x2a2235e7,
- /// or in textual repr: setCollectionLimit((uint8,bool,uint256))
+ /// @dev EVM selector for this function is: 0x2316ee74,
+ /// or in textual repr: setCollectionLimit((uint8,(bool,uint256)))
function setCollectionLimit(CollectionLimit memory limit) public {
require(false, stub_error);
limit;
@@ -257,19 +257,19 @@
/// Returns nesting for a collection
/// @dev EVM selector for this function is: 0x22d25bfe,
/// or in textual repr: collectionNestingRestrictedCollectionIds()
- function collectionNestingRestrictedCollectionIds() public view returns (Tuple30 memory) {
+ function collectionNestingRestrictedCollectionIds() public view returns (Tuple33 memory) {
require(false, stub_error);
dummy;
- return Tuple30(false, new uint256[](0));
+ return Tuple33(false, new uint256[](0));
}
/// Returns permissions for a collection
/// @dev EVM selector for this function is: 0x5b2eaf4b,
/// or in textual repr: collectionNestingPermissions()
- function collectionNestingPermissions() public view returns (Tuple33[] memory) {
+ function collectionNestingPermissions() public view returns (Tuple36[] memory) {
require(false, stub_error);
dummy;
- return new Tuple33[](0);
+ return new Tuple36[](0);
}
/// Set the collection access method.
@@ -452,13 +452,13 @@
}
/// @dev anonymous struct
-struct Tuple33 {
+struct Tuple36 {
CollectionPermissions field_0;
bool field_1;
}
/// @dev anonymous struct
-struct Tuple30 {
+struct Tuple33 {
bool field_0;
uint256[] field_1;
}
@@ -466,6 +466,10 @@
/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.
struct CollectionLimit {
CollectionLimitField field;
+ OptionUint value;
+}
+
+struct OptionUint {
bool status;
uint256 value;
}
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
@@ -162,7 +162,7 @@
}
/// @title A contract that allows you to work with collections.
-/// @dev the ERC-165 identifier for this interface is 0x23201442
+/// @dev the ERC-165 identifier for this interface is 0x2a14cfd1
contract Collection is Dummy, ERC165 {
// /// Set collection property.
// ///
@@ -316,8 +316,8 @@
/// Set limits for the collection.
/// @dev Throws error if limit not found.
/// @param limit Some limit.
- /// @dev EVM selector for this function is: 0x2a2235e7,
- /// or in textual repr: setCollectionLimit((uint8,bool,uint256))
+ /// @dev EVM selector for this function is: 0x2316ee74,
+ /// or in textual repr: setCollectionLimit((uint8,(bool,uint256)))
function setCollectionLimit(CollectionLimit memory limit) public {
require(false, stub_error);
limit;
@@ -401,19 +401,19 @@
/// Returns nesting for a collection
/// @dev EVM selector for this function is: 0x22d25bfe,
/// or in textual repr: collectionNestingRestrictedCollectionIds()
- function collectionNestingRestrictedCollectionIds() public view returns (Tuple42 memory) {
+ function collectionNestingRestrictedCollectionIds() public view returns (Tuple45 memory) {
require(false, stub_error);
dummy;
- return Tuple42(false, new uint256[](0));
+ return Tuple45(false, new uint256[](0));
}
/// Returns permissions for a collection
/// @dev EVM selector for this function is: 0x5b2eaf4b,
/// or in textual repr: collectionNestingPermissions()
- function collectionNestingPermissions() public view returns (Tuple45[] memory) {
+ function collectionNestingPermissions() public view returns (Tuple48[] memory) {
require(false, stub_error);
dummy;
- return new Tuple45[](0);
+ return new Tuple48[](0);
}
/// Set the collection access method.
@@ -596,13 +596,13 @@
}
/// @dev anonymous struct
-struct Tuple45 {
+struct Tuple48 {
CollectionPermissions field_0;
bool field_1;
}
/// @dev anonymous struct
-struct Tuple42 {
+struct Tuple45 {
bool field_0;
uint256[] field_1;
}
@@ -610,6 +610,10 @@
/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.
struct CollectionLimit {
CollectionLimitField field;
+ OptionUint value;
+}
+
+struct OptionUint {
bool status;
uint256 value;
}
pallets/refungible/src/stubs/UniqueRefungible.rawdiffbeforeafterbothbinary blob — no preview
pallets/refungible/src/stubs/UniqueRefungible.soldiffbeforeafterboth--- a/pallets/refungible/src/stubs/UniqueRefungible.sol
+++ b/pallets/refungible/src/stubs/UniqueRefungible.sol
@@ -162,7 +162,7 @@
}
/// @title A contract that allows you to work with collections.
-/// @dev the ERC-165 identifier for this interface is 0x23201442
+/// @dev the ERC-165 identifier for this interface is 0x2a14cfd1
contract Collection is Dummy, ERC165 {
// /// Set collection property.
// ///
@@ -316,8 +316,8 @@
/// Set limits for the collection.
/// @dev Throws error if limit not found.
/// @param limit Some limit.
- /// @dev EVM selector for this function is: 0x2a2235e7,
- /// or in textual repr: setCollectionLimit((uint8,bool,uint256))
+ /// @dev EVM selector for this function is: 0x2316ee74,
+ /// or in textual repr: setCollectionLimit((uint8,(bool,uint256)))
function setCollectionLimit(CollectionLimit memory limit) public {
require(false, stub_error);
limit;
@@ -401,19 +401,19 @@
/// Returns nesting for a collection
/// @dev EVM selector for this function is: 0x22d25bfe,
/// or in textual repr: collectionNestingRestrictedCollectionIds()
- function collectionNestingRestrictedCollectionIds() public view returns (Tuple41 memory) {
+ function collectionNestingRestrictedCollectionIds() public view returns (Tuple44 memory) {
require(false, stub_error);
dummy;
- return Tuple41(false, new uint256[](0));
+ return Tuple44(false, new uint256[](0));
}
/// Returns permissions for a collection
/// @dev EVM selector for this function is: 0x5b2eaf4b,
/// or in textual repr: collectionNestingPermissions()
- function collectionNestingPermissions() public view returns (Tuple44[] memory) {
+ function collectionNestingPermissions() public view returns (Tuple47[] memory) {
require(false, stub_error);
dummy;
- return new Tuple44[](0);
+ return new Tuple47[](0);
}
/// Set the collection access method.
@@ -596,13 +596,13 @@
}
/// @dev anonymous struct
-struct Tuple44 {
+struct Tuple47 {
CollectionPermissions field_0;
bool field_1;
}
/// @dev anonymous struct
-struct Tuple41 {
+struct Tuple44 {
bool field_0;
uint256[] field_1;
}
@@ -610,6 +610,10 @@
/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.
struct CollectionLimit {
CollectionLimitField field;
+ OptionUint value;
+}
+
+struct OptionUint {
bool status;
uint256 value;
}
tests/src/eth/abi/fungible.jsondiffbeforeafterboth--- a/tests/src/eth/abi/fungible.json
+++ b/tests/src/eth/abi/fungible.json
@@ -217,8 +217,15 @@
"name": "field",
"type": "uint8"
},
- { "internalType": "bool", "name": "status", "type": "bool" },
- { "internalType": "uint256", "name": "value", "type": "uint256" }
+ {
+ "components": [
+ { "internalType": "bool", "name": "status", "type": "bool" },
+ { "internalType": "uint256", "name": "value", "type": "uint256" }
+ ],
+ "internalType": "struct OptionUint",
+ "name": "value",
+ "type": "tuple"
+ }
],
"internalType": "struct CollectionLimit[]",
"name": "",
@@ -241,7 +248,7 @@
},
{ "internalType": "bool", "name": "field_1", "type": "bool" }
],
- "internalType": "struct Tuple33[]",
+ "internalType": "struct Tuple36[]",
"name": "",
"type": "tuple[]"
}
@@ -262,7 +269,7 @@
"type": "uint256[]"
}
],
- "internalType": "struct Tuple30",
+ "internalType": "struct Tuple33",
"name": "",
"type": "tuple"
}
@@ -500,8 +507,15 @@
"name": "field",
"type": "uint8"
},
- { "internalType": "bool", "name": "status", "type": "bool" },
- { "internalType": "uint256", "name": "value", "type": "uint256" }
+ {
+ "components": [
+ { "internalType": "bool", "name": "status", "type": "bool" },
+ { "internalType": "uint256", "name": "value", "type": "uint256" }
+ ],
+ "internalType": "struct OptionUint",
+ "name": "value",
+ "type": "tuple"
+ }
],
"internalType": "struct CollectionLimit",
"name": "limit",
tests/src/eth/abi/nonFungible.jsondiffbeforeafterboth--- a/tests/src/eth/abi/nonFungible.json
+++ b/tests/src/eth/abi/nonFungible.json
@@ -247,8 +247,15 @@
"name": "field",
"type": "uint8"
},
- { "internalType": "bool", "name": "status", "type": "bool" },
- { "internalType": "uint256", "name": "value", "type": "uint256" }
+ {
+ "components": [
+ { "internalType": "bool", "name": "status", "type": "bool" },
+ { "internalType": "uint256", "name": "value", "type": "uint256" }
+ ],
+ "internalType": "struct OptionUint",
+ "name": "value",
+ "type": "tuple"
+ }
],
"internalType": "struct CollectionLimit[]",
"name": "",
@@ -271,7 +278,7 @@
},
{ "internalType": "bool", "name": "field_1", "type": "bool" }
],
- "internalType": "struct Tuple45[]",
+ "internalType": "struct Tuple48[]",
"name": "",
"type": "tuple[]"
}
@@ -292,7 +299,7 @@
"type": "uint256[]"
}
],
- "internalType": "struct Tuple42",
+ "internalType": "struct Tuple45",
"name": "",
"type": "tuple"
}
@@ -662,8 +669,15 @@
"name": "field",
"type": "uint8"
},
- { "internalType": "bool", "name": "status", "type": "bool" },
- { "internalType": "uint256", "name": "value", "type": "uint256" }
+ {
+ "components": [
+ { "internalType": "bool", "name": "status", "type": "bool" },
+ { "internalType": "uint256", "name": "value", "type": "uint256" }
+ ],
+ "internalType": "struct OptionUint",
+ "name": "value",
+ "type": "tuple"
+ }
],
"internalType": "struct CollectionLimit",
"name": "limit",
tests/src/eth/abi/reFungible.jsondiffbeforeafterboth1[2 {3 "anonymous": false,4 "inputs": [5 {6 "indexed": true,7 "internalType": "address",8 "name": "owner",9 "type": "address"10 },11 {12 "indexed": true,13 "internalType": "address",14 "name": "approved",15 "type": "address"16 },17 {18 "indexed": true,19 "internalType": "uint256",20 "name": "tokenId",21 "type": "uint256"22 }23 ],24 "name": "Approval",25 "type": "event"26 },27 {28 "anonymous": false,29 "inputs": [30 {31 "indexed": true,32 "internalType": "address",33 "name": "owner",34 "type": "address"35 },36 {37 "indexed": true,38 "internalType": "address",39 "name": "operator",40 "type": "address"41 },42 {43 "indexed": false,44 "internalType": "bool",45 "name": "approved",46 "type": "bool"47 }48 ],49 "name": "ApprovalForAll",50 "type": "event"51 },52 {53 "anonymous": false,54 "inputs": [],55 "name": "MintingFinished",56 "type": "event"57 },58 {59 "anonymous": false,60 "inputs": [61 {62 "indexed": true,63 "internalType": "address",64 "name": "from",65 "type": "address"66 },67 {68 "indexed": true,69 "internalType": "address",70 "name": "to",71 "type": "address"72 },73 {74 "indexed": true,75 "internalType": "uint256",76 "name": "tokenId",77 "type": "uint256"78 }79 ],80 "name": "Transfer",81 "type": "event"82 },83 {84 "inputs": [85 {86 "components": [87 { "internalType": "address", "name": "eth", "type": "address" },88 { "internalType": "uint256", "name": "sub", "type": "uint256" }89 ],90 "internalType": "struct CrossAccount",91 "name": "newAdmin",92 "type": "tuple"93 }94 ],95 "name": "addCollectionAdminCross",96 "outputs": [],97 "stateMutability": "nonpayable",98 "type": "function"99 },100 {101 "inputs": [102 {103 "components": [104 { "internalType": "address", "name": "eth", "type": "address" },105 { "internalType": "uint256", "name": "sub", "type": "uint256" }106 ],107 "internalType": "struct CrossAccount",108 "name": "user",109 "type": "tuple"110 }111 ],112 "name": "addToCollectionAllowListCross",113 "outputs": [],114 "stateMutability": "nonpayable",115 "type": "function"116 },117 {118 "inputs": [119 {120 "components": [121 { "internalType": "address", "name": "eth", "type": "address" },122 { "internalType": "uint256", "name": "sub", "type": "uint256" }123 ],124 "internalType": "struct CrossAccount",125 "name": "user",126 "type": "tuple"127 }128 ],129 "name": "allowlistedCross",130 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],131 "stateMutability": "view",132 "type": "function"133 },134 {135 "inputs": [136 { "internalType": "address", "name": "approved", "type": "address" },137 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }138 ],139 "name": "approve",140 "outputs": [],141 "stateMutability": "nonpayable",142 "type": "function"143 },144 {145 "inputs": [146 { "internalType": "address", "name": "owner", "type": "address" }147 ],148 "name": "balanceOf",149 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],150 "stateMutability": "view",151 "type": "function"152 },153 {154 "inputs": [155 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }156 ],157 "name": "burn",158 "outputs": [],159 "stateMutability": "nonpayable",160 "type": "function"161 },162 {163 "inputs": [164 {165 "components": [166 { "internalType": "address", "name": "eth", "type": "address" },167 { "internalType": "uint256", "name": "sub", "type": "uint256" }168 ],169 "internalType": "struct CrossAccount",170 "name": "from",171 "type": "tuple"172 },173 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }174 ],175 "name": "burnFromCross",176 "outputs": [],177 "stateMutability": "nonpayable",178 "type": "function"179 },180 {181 "inputs": [182 {183 "components": [184 { "internalType": "address", "name": "eth", "type": "address" },185 { "internalType": "uint256", "name": "sub", "type": "uint256" }186 ],187 "internalType": "struct CrossAccount",188 "name": "newOwner",189 "type": "tuple"190 }191 ],192 "name": "changeCollectionOwnerCross",193 "outputs": [],194 "stateMutability": "nonpayable",195 "type": "function"196 },197 {198 "inputs": [],199 "name": "collectionAdmins",200 "outputs": [201 {202 "components": [203 { "internalType": "address", "name": "eth", "type": "address" },204 { "internalType": "uint256", "name": "sub", "type": "uint256" }205 ],206 "internalType": "struct CrossAccount[]",207 "name": "",208 "type": "tuple[]"209 }210 ],211 "stateMutability": "view",212 "type": "function"213 },214 {215 "inputs": [],216 "name": "collectionHelperAddress",217 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],218 "stateMutability": "view",219 "type": "function"220 },221 {222 "inputs": [],223 "name": "collectionLimits",224 "outputs": [225 {226 "components": [227 {228 "internalType": "enum CollectionLimitField",229 "name": "field",230 "type": "uint8"231 },232 { "internalType": "bool", "name": "status", "type": "bool" },233 { "internalType": "uint256", "name": "value", "type": "uint256" }234 ],235 "internalType": "struct CollectionLimit[]",236 "name": "",237 "type": "tuple[]"238 }239 ],240 "stateMutability": "view",241 "type": "function"242 },243 {244 "inputs": [],245 "name": "collectionNestingPermissions",246 "outputs": [247 {248 "components": [249 {250 "internalType": "enum CollectionPermissions",251 "name": "field_0",252 "type": "uint8"253 },254 { "internalType": "bool", "name": "field_1", "type": "bool" }255 ],256 "internalType": "struct Tuple44[]",257 "name": "",258 "type": "tuple[]"259 }260 ],261 "stateMutability": "view",262 "type": "function"263 },264 {265 "inputs": [],266 "name": "collectionNestingRestrictedCollectionIds",267 "outputs": [268 {269 "components": [270 { "internalType": "bool", "name": "field_0", "type": "bool" },271 {272 "internalType": "uint256[]",273 "name": "field_1",274 "type": "uint256[]"275 }276 ],277 "internalType": "struct Tuple41",278 "name": "",279 "type": "tuple"280 }281 ],282 "stateMutability": "view",283 "type": "function"284 },285 {286 "inputs": [],287 "name": "collectionOwner",288 "outputs": [289 {290 "components": [291 { "internalType": "address", "name": "eth", "type": "address" },292 { "internalType": "uint256", "name": "sub", "type": "uint256" }293 ],294 "internalType": "struct CrossAccount",295 "name": "",296 "type": "tuple"297 }298 ],299 "stateMutability": "view",300 "type": "function"301 },302 {303 "inputs": [304 { "internalType": "string[]", "name": "keys", "type": "string[]" }305 ],306 "name": "collectionProperties",307 "outputs": [308 {309 "components": [310 { "internalType": "string", "name": "key", "type": "string" },311 { "internalType": "bytes", "name": "value", "type": "bytes" }312 ],313 "internalType": "struct Property[]",314 "name": "",315 "type": "tuple[]"316 }317 ],318 "stateMutability": "view",319 "type": "function"320 },321 {322 "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],323 "name": "collectionProperty",324 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],325 "stateMutability": "view",326 "type": "function"327 },328 {329 "inputs": [],330 "name": "collectionSponsor",331 "outputs": [332 {333 "components": [334 { "internalType": "address", "name": "eth", "type": "address" },335 { "internalType": "uint256", "name": "sub", "type": "uint256" }336 ],337 "internalType": "struct CrossAccount",338 "name": "",339 "type": "tuple"340 }341 ],342 "stateMutability": "view",343 "type": "function"344 },345 {346 "inputs": [],347 "name": "confirmCollectionSponsorship",348 "outputs": [],349 "stateMutability": "nonpayable",350 "type": "function"351 },352 {353 "inputs": [],354 "name": "contractAddress",355 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],356 "stateMutability": "view",357 "type": "function"358 },359 {360 "inputs": [361 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }362 ],363 "name": "crossOwnerOf",364 "outputs": [365 {366 "components": [367 { "internalType": "address", "name": "eth", "type": "address" },368 { "internalType": "uint256", "name": "sub", "type": "uint256" }369 ],370 "internalType": "struct CrossAccount",371 "name": "",372 "type": "tuple"373 }374 ],375 "stateMutability": "view",376 "type": "function"377 },378 {379 "inputs": [380 { "internalType": "string[]", "name": "keys", "type": "string[]" }381 ],382 "name": "deleteCollectionProperties",383 "outputs": [],384 "stateMutability": "nonpayable",385 "type": "function"386 },387 {388 "inputs": [389 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },390 { "internalType": "string[]", "name": "keys", "type": "string[]" }391 ],392 "name": "deleteProperties",393 "outputs": [],394 "stateMutability": "nonpayable",395 "type": "function"396 },397 {398 "inputs": [],399 "name": "description",400 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],401 "stateMutability": "view",402 "type": "function"403 },404 {405 "inputs": [],406 "name": "finishMinting",407 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],408 "stateMutability": "nonpayable",409 "type": "function"410 },411 {412 "inputs": [413 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }414 ],415 "name": "getApproved",416 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],417 "stateMutability": "view",418 "type": "function"419 },420 {421 "inputs": [],422 "name": "hasCollectionPendingSponsor",423 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],424 "stateMutability": "view",425 "type": "function"426 },427 {428 "inputs": [429 { "internalType": "address", "name": "owner", "type": "address" },430 { "internalType": "address", "name": "operator", "type": "address" }431 ],432 "name": "isApprovedForAll",433 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],434 "stateMutability": "view",435 "type": "function"436 },437 {438 "inputs": [439 {440 "components": [441 { "internalType": "address", "name": "eth", "type": "address" },442 { "internalType": "uint256", "name": "sub", "type": "uint256" }443 ],444 "internalType": "struct CrossAccount",445 "name": "user",446 "type": "tuple"447 }448 ],449 "name": "isOwnerOrAdminCross",450 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],451 "stateMutability": "view",452 "type": "function"453 },454 {455 "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],456 "name": "mint",457 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],458 "stateMutability": "nonpayable",459 "type": "function"460 },461 {462 "inputs": [463 {464 "components": [465 { "internalType": "address", "name": "eth", "type": "address" },466 { "internalType": "uint256", "name": "sub", "type": "uint256" }467 ],468 "internalType": "struct CrossAccount",469 "name": "to",470 "type": "tuple"471 },472 {473 "components": [474 { "internalType": "string", "name": "key", "type": "string" },475 { "internalType": "bytes", "name": "value", "type": "bytes" }476 ],477 "internalType": "struct Property[]",478 "name": "properties",479 "type": "tuple[]"480 }481 ],482 "name": "mintCross",483 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],484 "stateMutability": "nonpayable",485 "type": "function"486 },487 {488 "inputs": [489 { "internalType": "address", "name": "to", "type": "address" },490 { "internalType": "string", "name": "tokenUri", "type": "string" }491 ],492 "name": "mintWithTokenURI",493 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],494 "stateMutability": "nonpayable",495 "type": "function"496 },497 {498 "inputs": [],499 "name": "mintingFinished",500 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],501 "stateMutability": "view",502 "type": "function"503 },504 {505 "inputs": [],506 "name": "name",507 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],508 "stateMutability": "view",509 "type": "function"510 },511 {512 "inputs": [],513 "name": "nextTokenId",514 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],515 "stateMutability": "view",516 "type": "function"517 },518 {519 "inputs": [520 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }521 ],522 "name": "ownerOf",523 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],524 "stateMutability": "view",525 "type": "function"526 },527 {528 "inputs": [529 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },530 { "internalType": "string[]", "name": "keys", "type": "string[]" }531 ],532 "name": "properties",533 "outputs": [534 {535 "components": [536 { "internalType": "string", "name": "key", "type": "string" },537 { "internalType": "bytes", "name": "value", "type": "bytes" }538 ],539 "internalType": "struct Property[]",540 "name": "",541 "type": "tuple[]"542 }543 ],544 "stateMutability": "view",545 "type": "function"546 },547 {548 "inputs": [549 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },550 { "internalType": "string", "name": "key", "type": "string" }551 ],552 "name": "property",553 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],554 "stateMutability": "view",555 "type": "function"556 },557 {558 "inputs": [559 {560 "components": [561 { "internalType": "address", "name": "eth", "type": "address" },562 { "internalType": "uint256", "name": "sub", "type": "uint256" }563 ],564 "internalType": "struct CrossAccount",565 "name": "admin",566 "type": "tuple"567 }568 ],569 "name": "removeCollectionAdminCross",570 "outputs": [],571 "stateMutability": "nonpayable",572 "type": "function"573 },574 {575 "inputs": [],576 "name": "removeCollectionSponsor",577 "outputs": [],578 "stateMutability": "nonpayable",579 "type": "function"580 },581 {582 "inputs": [583 {584 "components": [585 { "internalType": "address", "name": "eth", "type": "address" },586 { "internalType": "uint256", "name": "sub", "type": "uint256" }587 ],588 "internalType": "struct CrossAccount",589 "name": "user",590 "type": "tuple"591 }592 ],593 "name": "removeFromCollectionAllowListCross",594 "outputs": [],595 "stateMutability": "nonpayable",596 "type": "function"597 },598 {599 "inputs": [600 { "internalType": "address", "name": "from", "type": "address" },601 { "internalType": "address", "name": "to", "type": "address" },602 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }603 ],604 "name": "safeTransferFrom",605 "outputs": [],606 "stateMutability": "nonpayable",607 "type": "function"608 },609 {610 "inputs": [611 { "internalType": "address", "name": "from", "type": "address" },612 { "internalType": "address", "name": "to", "type": "address" },613 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },614 { "internalType": "bytes", "name": "data", "type": "bytes" }615 ],616 "name": "safeTransferFromWithData",617 "outputs": [],618 "stateMutability": "nonpayable",619 "type": "function"620 },621 {622 "inputs": [623 { "internalType": "address", "name": "operator", "type": "address" },624 { "internalType": "bool", "name": "approved", "type": "bool" }625 ],626 "name": "setApprovalForAll",627 "outputs": [],628 "stateMutability": "nonpayable",629 "type": "function"630 },631 {632 "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],633 "name": "setCollectionAccess",634 "outputs": [],635 "stateMutability": "nonpayable",636 "type": "function"637 },638 {639 "inputs": [640 {641 "components": [642 {643 "internalType": "enum CollectionLimitField",644 "name": "field",645 "type": "uint8"646 },647 { "internalType": "bool", "name": "status", "type": "bool" },648 { "internalType": "uint256", "name": "value", "type": "uint256" }649 ],650 "internalType": "struct CollectionLimit",651 "name": "limit",652 "type": "tuple"653 }654 ],655 "name": "setCollectionLimit",656 "outputs": [],657 "stateMutability": "nonpayable",658 "type": "function"659 },660 {661 "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],662 "name": "setCollectionMintMode",663 "outputs": [],664 "stateMutability": "nonpayable",665 "type": "function"666 },667 {668 "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],669 "name": "setCollectionNesting",670 "outputs": [],671 "stateMutability": "nonpayable",672 "type": "function"673 },674 {675 "inputs": [676 { "internalType": "bool", "name": "enable", "type": "bool" },677 {678 "internalType": "address[]",679 "name": "collections",680 "type": "address[]"681 }682 ],683 "name": "setCollectionNesting",684 "outputs": [],685 "stateMutability": "nonpayable",686 "type": "function"687 },688 {689 "inputs": [690 {691 "components": [692 { "internalType": "string", "name": "key", "type": "string" },693 { "internalType": "bytes", "name": "value", "type": "bytes" }694 ],695 "internalType": "struct Property[]",696 "name": "properties",697 "type": "tuple[]"698 }699 ],700 "name": "setCollectionProperties",701 "outputs": [],702 "stateMutability": "nonpayable",703 "type": "function"704 },705 {706 "inputs": [707 {708 "components": [709 { "internalType": "address", "name": "eth", "type": "address" },710 { "internalType": "uint256", "name": "sub", "type": "uint256" }711 ],712 "internalType": "struct CrossAccount",713 "name": "sponsor",714 "type": "tuple"715 }716 ],717 "name": "setCollectionSponsorCross",718 "outputs": [],719 "stateMutability": "nonpayable",720 "type": "function"721 },722 {723 "inputs": [724 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },725 {726 "components": [727 { "internalType": "string", "name": "key", "type": "string" },728 { "internalType": "bytes", "name": "value", "type": "bytes" }729 ],730 "internalType": "struct Property[]",731 "name": "properties",732 "type": "tuple[]"733 }734 ],735 "name": "setProperties",736 "outputs": [],737 "stateMutability": "nonpayable",738 "type": "function"739 },740 {741 "inputs": [742 {743 "components": [744 { "internalType": "string", "name": "key", "type": "string" },745 {746 "components": [747 {748 "internalType": "enum TokenPermissionField",749 "name": "code",750 "type": "uint8"751 },752 { "internalType": "bool", "name": "value", "type": "bool" }753 ],754 "internalType": "struct PropertyPermission[]",755 "name": "permissions",756 "type": "tuple[]"757 }758 ],759 "internalType": "struct TokenPropertyPermission[]",760 "name": "permissions",761 "type": "tuple[]"762 }763 ],764 "name": "setTokenPropertyPermissions",765 "outputs": [],766 "stateMutability": "nonpayable",767 "type": "function"768 },769 {770 "inputs": [771 { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }772 ],773 "name": "supportsInterface",774 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],775 "stateMutability": "view",776 "type": "function"777 },778 {779 "inputs": [],780 "name": "symbol",781 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],782 "stateMutability": "view",783 "type": "function"784 },785 {786 "inputs": [787 { "internalType": "uint256", "name": "index", "type": "uint256" }788 ],789 "name": "tokenByIndex",790 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],791 "stateMutability": "view",792 "type": "function"793 },794 {795 "inputs": [796 { "internalType": "uint256", "name": "token", "type": "uint256" }797 ],798 "name": "tokenContractAddress",799 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],800 "stateMutability": "view",801 "type": "function"802 },803 {804 "inputs": [805 { "internalType": "address", "name": "owner", "type": "address" },806 { "internalType": "uint256", "name": "index", "type": "uint256" }807 ],808 "name": "tokenOfOwnerByIndex",809 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],810 "stateMutability": "view",811 "type": "function"812 },813 {814 "inputs": [],815 "name": "tokenPropertyPermissions",816 "outputs": [817 {818 "components": [819 { "internalType": "string", "name": "key", "type": "string" },820 {821 "components": [822 {823 "internalType": "enum TokenPermissionField",824 "name": "code",825 "type": "uint8"826 },827 { "internalType": "bool", "name": "value", "type": "bool" }828 ],829 "internalType": "struct PropertyPermission[]",830 "name": "permissions",831 "type": "tuple[]"832 }833 ],834 "internalType": "struct TokenPropertyPermission[]",835 "name": "",836 "type": "tuple[]"837 }838 ],839 "stateMutability": "view",840 "type": "function"841 },842 {843 "inputs": [844 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }845 ],846 "name": "tokenURI",847 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],848 "stateMutability": "view",849 "type": "function"850 },851 {852 "inputs": [],853 "name": "totalSupply",854 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],855 "stateMutability": "view",856 "type": "function"857 },858 {859 "inputs": [860 { "internalType": "address", "name": "to", "type": "address" },861 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }862 ],863 "name": "transfer",864 "outputs": [],865 "stateMutability": "nonpayable",866 "type": "function"867 },868 {869 "inputs": [870 {871 "components": [872 { "internalType": "address", "name": "eth", "type": "address" },873 { "internalType": "uint256", "name": "sub", "type": "uint256" }874 ],875 "internalType": "struct CrossAccount",876 "name": "to",877 "type": "tuple"878 },879 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }880 ],881 "name": "transferCross",882 "outputs": [],883 "stateMutability": "nonpayable",884 "type": "function"885 },886 {887 "inputs": [888 { "internalType": "address", "name": "from", "type": "address" },889 { "internalType": "address", "name": "to", "type": "address" },890 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }891 ],892 "name": "transferFrom",893 "outputs": [],894 "stateMutability": "nonpayable",895 "type": "function"896 },897 {898 "inputs": [899 {900 "components": [901 { "internalType": "address", "name": "eth", "type": "address" },902 { "internalType": "uint256", "name": "sub", "type": "uint256" }903 ],904 "internalType": "struct CrossAccount",905 "name": "from",906 "type": "tuple"907 },908 {909 "components": [910 { "internalType": "address", "name": "eth", "type": "address" },911 { "internalType": "uint256", "name": "sub", "type": "uint256" }912 ],913 "internalType": "struct CrossAccount",914 "name": "to",915 "type": "tuple"916 },917 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }918 ],919 "name": "transferFromCross",920 "outputs": [],921 "stateMutability": "nonpayable",922 "type": "function"923 },924 {925 "inputs": [],926 "name": "uniqueCollectionType",927 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],928 "stateMutability": "view",929 "type": "function"930 }931]tests/src/eth/api/UniqueFungible.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueFungible.sol
+++ b/tests/src/eth/api/UniqueFungible.sol
@@ -13,7 +13,7 @@
}
/// @title A contract that allows you to work with collections.
-/// @dev the ERC-165 identifier for this interface is 0x23201442
+/// @dev the ERC-165 identifier for this interface is 0x2a14cfd1
interface Collection is Dummy, ERC165 {
// /// Set collection property.
// ///
@@ -114,8 +114,8 @@
/// Set limits for the collection.
/// @dev Throws error if limit not found.
/// @param limit Some limit.
- /// @dev EVM selector for this function is: 0x2a2235e7,
- /// or in textual repr: setCollectionLimit((uint8,bool,uint256))
+ /// @dev EVM selector for this function is: 0x2316ee74,
+ /// or in textual repr: setCollectionLimit((uint8,(bool,uint256)))
function setCollectionLimit(CollectionLimit memory limit) external;
/// Get contract address.
@@ -166,12 +166,12 @@
/// Returns nesting for a collection
/// @dev EVM selector for this function is: 0x22d25bfe,
/// or in textual repr: collectionNestingRestrictedCollectionIds()
- function collectionNestingRestrictedCollectionIds() external view returns (Tuple26 memory);
+ function collectionNestingRestrictedCollectionIds() external view returns (Tuple28 memory);
/// Returns permissions for a collection
/// @dev EVM selector for this function is: 0x5b2eaf4b,
/// or in textual repr: collectionNestingPermissions()
- function collectionNestingPermissions() external view returns (Tuple29[] memory);
+ function collectionNestingPermissions() external view returns (Tuple31[] memory);
/// Set the collection access method.
/// @param mode Access mode
@@ -286,7 +286,7 @@
}
/// @dev anonymous struct
-struct Tuple29 {
+struct Tuple31 {
CollectionPermissions field_0;
bool field_1;
}
@@ -300,7 +300,7 @@
}
/// @dev anonymous struct
-struct Tuple26 {
+struct Tuple28 {
bool field_0;
uint256[] field_1;
}
@@ -308,6 +308,10 @@
/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.
struct CollectionLimit {
CollectionLimitField field;
+ OptionUint value;
+}
+
+struct OptionUint {
bool status;
uint256 value;
}
tests/src/eth/api/UniqueNFT.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -115,7 +115,7 @@
}
/// @title A contract that allows you to work with collections.
-/// @dev the ERC-165 identifier for this interface is 0x23201442
+/// @dev the ERC-165 identifier for this interface is 0x2a14cfd1
interface Collection is Dummy, ERC165 {
// /// Set collection property.
// ///
@@ -216,8 +216,8 @@
/// Set limits for the collection.
/// @dev Throws error if limit not found.
/// @param limit Some limit.
- /// @dev EVM selector for this function is: 0x2a2235e7,
- /// or in textual repr: setCollectionLimit((uint8,bool,uint256))
+ /// @dev EVM selector for this function is: 0x2316ee74,
+ /// or in textual repr: setCollectionLimit((uint8,(bool,uint256)))
function setCollectionLimit(CollectionLimit memory limit) external;
/// Get contract address.
@@ -268,12 +268,12 @@
/// Returns nesting for a collection
/// @dev EVM selector for this function is: 0x22d25bfe,
/// or in textual repr: collectionNestingRestrictedCollectionIds()
- function collectionNestingRestrictedCollectionIds() external view returns (Tuple36 memory);
+ function collectionNestingRestrictedCollectionIds() external view returns (Tuple38 memory);
/// Returns permissions for a collection
/// @dev EVM selector for this function is: 0x5b2eaf4b,
/// or in textual repr: collectionNestingPermissions()
- function collectionNestingPermissions() external view returns (Tuple39[] memory);
+ function collectionNestingPermissions() external view returns (Tuple41[] memory);
/// Set the collection access method.
/// @param mode Access mode
@@ -388,7 +388,7 @@
}
/// @dev anonymous struct
-struct Tuple39 {
+struct Tuple41 {
CollectionPermissions field_0;
bool field_1;
}
@@ -402,7 +402,7 @@
}
/// @dev anonymous struct
-struct Tuple36 {
+struct Tuple38 {
bool field_0;
uint256[] field_1;
}
@@ -410,6 +410,10 @@
/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.
struct CollectionLimit {
CollectionLimitField field;
+ OptionUint value;
+}
+
+struct OptionUint {
bool status;
uint256 value;
}
tests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -115,7 +115,7 @@
}
/// @title A contract that allows you to work with collections.
-/// @dev the ERC-165 identifier for this interface is 0x23201442
+/// @dev the ERC-165 identifier for this interface is 0x2a14cfd1
interface Collection is Dummy, ERC165 {
// /// Set collection property.
// ///
@@ -216,8 +216,8 @@
/// Set limits for the collection.
/// @dev Throws error if limit not found.
/// @param limit Some limit.
- /// @dev EVM selector for this function is: 0x2a2235e7,
- /// or in textual repr: setCollectionLimit((uint8,bool,uint256))
+ /// @dev EVM selector for this function is: 0x2316ee74,
+ /// or in textual repr: setCollectionLimit((uint8,(bool,uint256)))
function setCollectionLimit(CollectionLimit memory limit) external;
/// Get contract address.
@@ -268,12 +268,12 @@
/// Returns nesting for a collection
/// @dev EVM selector for this function is: 0x22d25bfe,
/// or in textual repr: collectionNestingRestrictedCollectionIds()
- function collectionNestingRestrictedCollectionIds() external view returns (Tuple35 memory);
+ function collectionNestingRestrictedCollectionIds() external view returns (Tuple37 memory);
/// Returns permissions for a collection
/// @dev EVM selector for this function is: 0x5b2eaf4b,
/// or in textual repr: collectionNestingPermissions()
- function collectionNestingPermissions() external view returns (Tuple38[] memory);
+ function collectionNestingPermissions() external view returns (Tuple40[] memory);
/// Set the collection access method.
/// @param mode Access mode
@@ -388,7 +388,7 @@
}
/// @dev anonymous struct
-struct Tuple38 {
+struct Tuple40 {
CollectionPermissions field_0;
bool field_1;
}
@@ -402,7 +402,7 @@
}
/// @dev anonymous struct
-struct Tuple35 {
+struct Tuple37 {
bool field_0;
uint256[] field_1;
}
@@ -410,6 +410,10 @@
/// @dev [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.
struct CollectionLimit {
CollectionLimitField field;
+ OptionUint value;
+}
+
+struct OptionUint {
bool status;
uint256 value;
}
tests/src/eth/collectionLimits.test.tsdiffbeforeafterboth--- a/tests/src/eth/collectionLimits.test.ts
+++ b/tests/src/eth/collectionLimits.test.ts
@@ -46,15 +46,15 @@
};
const collectionEvm = helper.ethNativeContract.collection(collectionAddress, testCase.case, owner);
- await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, status: true, value: limits.accountTokenOwnershipLimit}).send();
- await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.SponsoredDataSize, status: true, value: limits.sponsoredDataSize}).send();
- await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.SponsoredDataRateLimit, status: true, value: limits.sponsoredDataRateLimit}).send();
- await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.TokenLimit, status: true, value: limits.tokenLimit}).send();
- await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.SponsorTransferTimeout, status: true, value: limits.sponsorTransferTimeout}).send();
- await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.SponsorApproveTimeout, status: true, value: limits.sponsorApproveTimeout}).send();
- await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.OwnerCanTransfer, status: true, value: limits.ownerCanTransfer}).send();
- await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.OwnerCanDestroy, status: true, value: limits.ownerCanDestroy}).send();
- await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.TransferEnabled, status: true, value: limits.transfersEnabled}).send();
+ await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: true, value: limits.accountTokenOwnershipLimit}}).send();
+ await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.SponsoredDataSize, value: {status: true, value: limits.sponsoredDataSize}}).send();
+ await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.SponsoredDataRateLimit, value: {status: true, value: limits.sponsoredDataRateLimit}}).send();
+ await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.TokenLimit, value: {status: true, value: limits.tokenLimit}}).send();
+ await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.SponsorTransferTimeout, value: {status: true, value: limits.sponsorTransferTimeout}}).send();
+ await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.SponsorApproveTimeout, value: {status: true, value: limits.sponsorApproveTimeout}}).send();
+ await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.OwnerCanTransfer, value: {status: true, value: limits.ownerCanTransfer}}).send();
+ await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.OwnerCanDestroy, value: {status: true, value: limits.ownerCanDestroy}}).send();
+ await collectionEvm.methods.setCollectionLimit({field: CollectionLimitField.TransferEnabled, value: {status: true, value: limits.transfersEnabled}}).send();
// Check limits from sub:
const data = (await helper.rft.getData(collectionId))!;
@@ -63,15 +63,15 @@
// Check limits from eth:
const limitsEvm = await collectionEvm.methods.collectionLimits().call({from: owner});
expect(limitsEvm).to.have.length(9);
- expect(limitsEvm[0]).to.deep.eq([CollectionLimitField.AccountTokenOwnership.toString(), true, limits.accountTokenOwnershipLimit.toString()]);
- expect(limitsEvm[1]).to.deep.eq([CollectionLimitField.SponsoredDataSize.toString(), true, limits.sponsoredDataSize.toString()]);
- expect(limitsEvm[2]).to.deep.eq([CollectionLimitField.SponsoredDataRateLimit.toString(), true, limits.sponsoredDataRateLimit.toString()]);
- expect(limitsEvm[3]).to.deep.eq([CollectionLimitField.TokenLimit.toString(), true, limits.tokenLimit.toString()]);
- expect(limitsEvm[4]).to.deep.eq([CollectionLimitField.SponsorTransferTimeout.toString(), true, limits.sponsorTransferTimeout.toString()]);
- expect(limitsEvm[5]).to.deep.eq([CollectionLimitField.SponsorApproveTimeout.toString(), true, limits.sponsorApproveTimeout.toString()]);
- expect(limitsEvm[6]).to.deep.eq([CollectionLimitField.OwnerCanTransfer.toString(), true, limits.ownerCanTransfer.toString()]);
- expect(limitsEvm[7]).to.deep.eq([CollectionLimitField.OwnerCanDestroy.toString(), true, limits.ownerCanDestroy.toString()]);
- expect(limitsEvm[8]).to.deep.eq([CollectionLimitField.TransferEnabled.toString(), true, limits.transfersEnabled.toString()]);
+ expect(limitsEvm[0]).to.deep.eq([CollectionLimitField.AccountTokenOwnership.toString(), [true, limits.accountTokenOwnershipLimit.toString()]]);
+ expect(limitsEvm[1]).to.deep.eq([CollectionLimitField.SponsoredDataSize.toString(), [true, limits.sponsoredDataSize.toString()]]);
+ expect(limitsEvm[2]).to.deep.eq([CollectionLimitField.SponsoredDataRateLimit.toString(), [true, limits.sponsoredDataRateLimit.toString()]]);
+ expect(limitsEvm[3]).to.deep.eq([CollectionLimitField.TokenLimit.toString(), [true, limits.tokenLimit.toString()]]);
+ expect(limitsEvm[4]).to.deep.eq([CollectionLimitField.SponsorTransferTimeout.toString(), [true, limits.sponsorTransferTimeout.toString()]]);
+ expect(limitsEvm[5]).to.deep.eq([CollectionLimitField.SponsorApproveTimeout.toString(), [true, limits.sponsorApproveTimeout.toString()]]);
+ expect(limitsEvm[6]).to.deep.eq([CollectionLimitField.OwnerCanTransfer.toString(), [true, limits.ownerCanTransfer.toString()]]);
+ expect(limitsEvm[7]).to.deep.eq([CollectionLimitField.OwnerCanDestroy.toString(), [true, limits.ownerCanDestroy.toString()]]);
+ expect(limitsEvm[8]).to.deep.eq([CollectionLimitField.TransferEnabled.toString(), [true, limits.transfersEnabled.toString()]]);
}));
});
@@ -101,24 +101,24 @@
// Cannot set non-existing limit
await expect(collectionEvm.methods
- .setCollectionLimit({field: 9, status: true, value: 1})
+ .setCollectionLimit({field: 9, value: {status: true, value: 1}})
.call()).to.be.rejectedWith('Value not convertible into enum "CollectionLimitField"');
// Cannot disable limits
await expect(collectionEvm.methods
- .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, status: false, value: 200})
+ .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: false, value: 200}})
.call()).to.be.rejectedWith('user can\'t disable limits');
await expect(collectionEvm.methods
- .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, status: true, value: invalidLimits.accountTokenOwnershipLimit})
+ .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: true, value: invalidLimits.accountTokenOwnershipLimit}})
.call()).to.be.rejectedWith(`can't convert value to u32 "${invalidLimits.accountTokenOwnershipLimit}"`);
await expect(collectionEvm.methods
- .setCollectionLimit({field: CollectionLimitField.TransferEnabled, status: true, value: 3})
+ .setCollectionLimit({field: CollectionLimitField.TransferEnabled, value: {status: true, value: 3}})
.call()).to.be.rejectedWith(`can't convert value to boolean "${invalidLimits.transfersEnabled}"`);
expect(() => collectionEvm.methods
- .setCollectionLimit({field: CollectionLimitField.SponsoredDataSize, status: true, value: -1}).send()).to.throw('value out-of-bounds');
+ .setCollectionLimit({field: CollectionLimitField.SponsoredDataSize, value: {status: true, value: -1}}).send()).to.throw('value out-of-bounds');
}));
[
@@ -133,12 +133,12 @@
const collectionEvm = helper.ethNativeContract.collection(collectionAddress, testCase.case, owner);
await expect(collectionEvm.methods
- .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, status: true, value: 1000})
+ .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: true, value: 1000}})
.call({from: nonOwner}))
.to.be.rejectedWith('NoPermission');
await expect(collectionEvm.methods
- .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, status: true, value: 1000})
+ .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: true, value: 1000}})
.send({from: nonOwner}))
.to.be.rejected;
}));
tests/src/eth/createFTCollection.test.tsdiffbeforeafterboth--- a/tests/src/eth/createFTCollection.test.ts
+++ b/tests/src/eth/createFTCollection.test.ts
@@ -197,7 +197,7 @@
}
{
await expect(peasantCollection.methods
- .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, status: true, value: 1000})
+ .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: true, value: 1000}})
.call()).to.be.rejectedWith(EXPECTED_ERROR);
}
});
@@ -222,7 +222,7 @@
}
{
await expect(peasantCollection.methods
- .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, status: true, value: 1000})
+ .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: true, value: 1000}})
.call()).to.be.rejectedWith(EXPECTED_ERROR);
}
});
tests/src/eth/createNFTCollection.test.tsdiffbeforeafterboth--- a/tests/src/eth/createNFTCollection.test.ts
+++ b/tests/src/eth/createNFTCollection.test.ts
@@ -208,7 +208,7 @@
}
{
await expect(malfeasantCollection.methods
- .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, status: true, value: 1000})
+ .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: true, value: 1000}})
.call()).to.be.rejectedWith(EXPECTED_ERROR);
}
});
@@ -233,7 +233,7 @@
}
{
await expect(malfeasantCollection.methods
- .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, status: true, value: 1000})
+ .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: true, value: 1000}})
.call()).to.be.rejectedWith(EXPECTED_ERROR);
}
});
tests/src/eth/createRFTCollection.test.tsdiffbeforeafterboth--- a/tests/src/eth/createRFTCollection.test.ts
+++ b/tests/src/eth/createRFTCollection.test.ts
@@ -240,7 +240,7 @@
}
{
await expect(peasantCollection.methods
- .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, status: true, value: 1000})
+ .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: true, value: 1000}})
.call()).to.be.rejectedWith(EXPECTED_ERROR);
}
});
@@ -265,7 +265,7 @@
}
{
await expect(peasantCollection.methods
- .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, status: true, value: 1000})
+ .setCollectionLimit({field: CollectionLimitField.AccountTokenOwnership, value: {status: true, value: 1000}})
.call()).to.be.rejectedWith(EXPECTED_ERROR);
}
});
tests/src/eth/events.test.tsdiffbeforeafterboth--- a/tests/src/eth/events.test.ts
+++ b/tests/src/eth/events.test.ts
@@ -233,7 +233,7 @@
});
const {unsubscribe, collectedEvents: subEvents} = await helper.subscribeEvents([{section: 'common', names: ['CollectionLimitSet']}]);
{
- await collection.methods.setCollectionLimit({field: CollectionLimitField.OwnerCanTransfer, status: true, value: 0}).send({from: owner});
+ await collection.methods.setCollectionLimit({field: CollectionLimitField.OwnerCanTransfer, value: {status: true, value: 0}}).send({from: owner});
await helper.wait.newBlocks(1);
expect(ethEvents).to.containSubset([
{
tests/src/eth/util/playgrounds/types.tsdiffbeforeafterboth--- a/tests/src/eth/util/playgrounds/types.ts
+++ b/tests/src/eth/util/playgrounds/types.ts
@@ -13,6 +13,12 @@
event: string,
args: { [key: string]: string }
};
+
+export interface OptionUint {
+ status: boolean,
+ value: bigint,
+}
+
export interface TEthCrossAccount {
readonly eth: string,
readonly sub: string | Uint8Array,
@@ -40,6 +46,5 @@
export interface CollectionLimit {
field: CollectionLimitField,
- status: boolean,
- value: bigint | number,
+ value: OptionUint,
}