difftreelog
feat Rewrite tuple to named structures for TokenPropertyPermission. fix: AbiCoder derive macro
in: master
23 files changed
crates/evm-coder/procedural/src/abi_derive/derive_enum.rsdiffbeforeafterboth--- a/crates/evm-coder/procedural/src/abi_derive/derive_enum.rs
+++ b/crates/evm-coder/procedural/src/abi_derive/derive_enum.rs
@@ -86,6 +86,21 @@
)
}
+pub fn impl_enum_solidity_type<'a>(name: &syn::Ident) -> proc_macro2::TokenStream {
+ quote! {
+ #[cfg(feature = "stubgen")]
+ impl ::evm_coder::solidity::SolidityType for #name {
+ fn names(tc: &::evm_coder::solidity::TypeCollector) -> Vec<String> {
+ Vec::new()
+ }
+
+ fn len() -> usize {
+ 1
+ }
+ }
+ }
+}
+
pub fn impl_enum_solidity_type_name(name: &syn::Ident) -> proc_macro2::TokenStream {
quote!(
#[cfg(feature = "stubgen")]
crates/evm-coder/procedural/src/abi_derive/mod.rsdiffbeforeafterboth--- a/crates/evm-coder/procedural/src/abi_derive/mod.rs
+++ b/crates/evm-coder/procedural/src/abi_derive/mod.rs
@@ -86,6 +86,7 @@
let abi_type = impl_enum_abi_type(name, option_count);
let abi_read = impl_enum_abi_read(name);
let abi_write = impl_enum_abi_write(name);
+ let solidity_type = impl_enum_solidity_type(name);
let solidity_type_name = impl_enum_solidity_type_name(name);
let solidity_struct_collect = impl_enum_solidity_struct_collect(
name,
@@ -102,6 +103,7 @@
#abi_type
#abi_read
#abi_write
+ #solidity_type
#solidity_type_name
#solidity_struct_collect
})
crates/evm-coder/src/abi/impls.rsdiffbeforeafterboth--- a/crates/evm-coder/src/abi/impls.rs
+++ b/crates/evm-coder/src/abi/impls.rs
@@ -184,6 +184,11 @@
}
}
+macro_rules! count {
+ () => (0usize);
+ ( $x:tt $($xs:tt)* ) => (1usize + count!($($xs)*));
+}
+
macro_rules! impl_tuples {
($($ident:ident)+) => {
impl<$($ident: AbiType,)+> AbiType for ($($ident,)+)
@@ -198,7 +203,7 @@
shift_left(1)
fixed(")")
);
- const FIELDS_COUNT: usize = 0 $(+ {let _ = <$ident as AbiType>::FIELDS_COUNT; 1})+;
+ const FIELDS_COUNT: usize = count!($($ident)*);
fn is_dynamic() -> bool {
false
crates/evm-coder/src/solidity/impls.rsdiffbeforeafterboth--- a/crates/evm-coder/src/solidity/impls.rs
+++ b/crates/evm-coder/src/solidity/impls.rs
@@ -74,6 +74,16 @@
}
}
+impl<T: StructCollect + sealed::CanBePlacedInVec> StructCollect for Vec<T> {
+ fn name() -> String {
+ <T as StructCollect>::name() + "[]"
+ }
+
+ fn declaration() -> String {
+ unimplemented!("Vectors have not declarations.")
+ }
+}
+
macro_rules! count {
() => (0usize);
( $x:tt $($xs:tt)* ) => (1usize + count!($($xs)*));
@@ -131,60 +141,3 @@
impl_tuples! {A B C D E F G H}
impl_tuples! {A B C D E F G H I}
impl_tuples! {A B C D E F G H I J}
-
-impl StructCollect for Property {
- fn name() -> String {
- "Property".into()
- }
-
- fn declaration() -> String {
- use std::fmt::Write;
-
- let mut str = String::new();
- writeln!(str, "/// @dev Property struct").unwrap();
- writeln!(str, "struct {} {{", Self::name()).unwrap();
- writeln!(str, "\tstring key;").unwrap();
- writeln!(str, "\tbytes value;").unwrap();
- writeln!(str, "}}").unwrap();
- str
- }
-}
-
-impl SolidityTypeName for Property {
- fn solidity_name(writer: &mut impl fmt::Write, tc: &TypeCollector) -> fmt::Result {
- write!(writer, "{}", tc.collect_struct::<Self>())
- }
-
- fn is_simple() -> bool {
- false
- }
-
- fn solidity_default(writer: &mut impl fmt::Write, tc: &TypeCollector) -> fmt::Result {
- write!(writer, "{}(", tc.collect_struct::<Self>())?;
- address::solidity_default(writer, tc)?;
- write!(writer, ",")?;
- uint256::solidity_default(writer, tc)?;
- write!(writer, ")")
- }
-}
-
-impl SolidityType for Property {
- fn names(tc: &TypeCollector) -> Vec<string> {
- let mut collected = Vec::with_capacity(Self::len());
- {
- let mut out = string::new();
- string::solidity_name(&mut out, tc).expect("no fmt error");
- collected.push(out);
- }
- {
- let mut out = string::new();
- bytes::solidity_name(&mut out, tc).expect("no fmt error");
- collected.push(out);
- }
- collected
- }
-
- fn len() -> usize {
- 2
- }
-}
crates/evm-coder/src/solidity/mod.rsdiffbeforeafterboth--- a/crates/evm-coder/src/solidity/mod.rs
+++ b/crates/evm-coder/src/solidity/mod.rs
@@ -76,7 +76,8 @@
self.anonymous.borrow_mut().insert(names, id);
format!("Tuple{}", id)
}
- pub fn collect_struct<T: StructCollect>(&self) -> String {
+ pub fn collect_struct<T: StructCollect + SolidityType>(&self) -> String {
+ let _names = T::names(self);
self.collect(<T as StructCollect>::declaration());
<T as StructCollect>::name()
}
crates/evm-coder/tests/abi_derive_generation.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/abi_derive_generation.rs
+++ b/crates/evm-coder/tests/abi_derive_generation.rs
@@ -100,6 +100,15 @@
}
#[test]
+ #[cfg(feature = "stubgen")]
+ fn struct_collect_vec() {
+ assert_eq!(
+ <Vec<u8> as ::evm_coder::solidity::StructCollect>::name(),
+ "uint8[]"
+ );
+ }
+
+ #[test]
fn impl_abi_type_signature() {
assert_eq!(
<TypeStruct1SimpleParam as evm_coder::abi::AbiType>::SIGNATURE
pallets/common/src/eth.rsdiffbeforeafterboth--- a/pallets/common/src/eth.rs
+++ b/pallets/common/src/eth.rs
@@ -16,6 +16,7 @@
//! The module contains a number of functions for converting and checking ethereum identifiers.
+use sp_std::{vec, vec::Vec};
use evm_coder::{
AbiCoder,
types::{uint256, address},
@@ -183,3 +184,102 @@
/// Permission to change the property for the owner of the token. See [`up_data_structs::PropertyPermission::collection_admin`]
CollectionAdmin,
}
+
+/// Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) as an key and value.
+#[derive(Debug, Default, AbiCoder)]
+pub struct PropertyPermission {
+ /// TokenPermission field.
+ code: EthTokenPermissions,
+ /// TokenPermission value.
+ value: bool,
+}
+
+impl PropertyPermission {
+ pub fn into_vec(pp: up_data_structs::PropertyPermission) -> Vec<Self> {
+ vec![
+ PropertyPermission {
+ code: EthTokenPermissions::Mutable,
+ value: pp.mutable,
+ },
+ PropertyPermission {
+ code: EthTokenPermissions::TokenOwner,
+ value: pp.token_owner,
+ },
+ PropertyPermission {
+ code: EthTokenPermissions::CollectionAdmin,
+ value: pp.collection_admin,
+ },
+ ]
+ }
+
+ pub fn from_vec(permission: Vec<Self>) -> up_data_structs::PropertyPermission {
+ let mut token_permission = up_data_structs::PropertyPermission::default();
+
+ for PropertyPermission { code, value } in permission {
+ match code {
+ EthTokenPermissions::Mutable => token_permission.mutable = value,
+ EthTokenPermissions::TokenOwner => token_permission.token_owner = value,
+ EthTokenPermissions::CollectionAdmin => token_permission.collection_admin = value,
+ }
+ }
+ token_permission
+ }
+}
+
+/// Ethereum representation of Token Property Permissions.
+#[derive(Debug, Default, AbiCoder)]
+pub struct TokenPropertyPermission {
+ /// Token property key.
+ key: evm_coder::types::string,
+ /// Token property permissions.
+ permissions: Vec<PropertyPermission>,
+}
+
+impl
+ From<(
+ up_data_structs::PropertyKey,
+ up_data_structs::PropertyPermission,
+ )> for TokenPropertyPermission
+{
+ fn from(
+ value: (
+ up_data_structs::PropertyKey,
+ up_data_structs::PropertyPermission,
+ ),
+ ) -> Self {
+ let (key, permission) = value;
+ let key = evm_coder::types::string::from_utf8(key.into_inner())
+ .expect("Stored key must be valid");
+ let permissions = PropertyPermission::into_vec(permission);
+ Self { key, permissions }
+ }
+}
+
+impl TokenPropertyPermission {
+ pub fn into_property_key_permissions(
+ permissions: Vec<TokenPropertyPermission>,
+ ) -> evm_coder::execution::Result<Vec<up_data_structs::PropertyKeyPermission>> {
+ let mut perms = Vec::new();
+
+ for TokenPropertyPermission { key, permissions } in permissions {
+ if permissions.len() > <EthTokenPermissions as evm_coder::abi::AbiType>::FIELDS_COUNT {
+ return Err(alloc::format!(
+ "Actual number of fields {} for {}, which exceeds the maximum value of {}",
+ permissions.len(),
+ stringify!(EthTokenPermissions),
+ <EthTokenPermissions as evm_coder::abi::AbiType>::FIELDS_COUNT
+ )
+ .as_str()
+ .into());
+ }
+
+ let token_permission = PropertyPermission::from_vec(permissions);
+
+ perms.push(up_data_structs::PropertyKeyPermission {
+ key: key.into_bytes().try_into().map_err(|_| "too long key")?,
+ permission: token_permission,
+ });
+ }
+ Ok(perms)
+ }
+}
pallets/evm-contract-helpers/src/stubs/ContractHelpers.rawdiffbeforeafterbothbinary blob — no preview
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
@@ -470,9 +470,12 @@
uint256 sub;
}
+/// @dev Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) fields as an enumeration.
enum CollectionPermissions {
- CollectionAdmin,
- TokenOwner
+ /// @dev Owner of token can nest tokens under it.
+ TokenOwner,
+ /// @dev Admin of token collection can nest tokens under token.
+ CollectionAdmin
}
/// @dev anonymous struct
@@ -516,9 +519,11 @@
uint256 field_2;
}
-/// @dev Property struct
+/// @dev Ethereum representation of collection [`PropertyKey`](up_data_structs::PropertyKey) and [`PropertyValue`](up_data_structs::PropertyValue).
struct Property {
+ /// @dev Property key.
string key;
+ /// @dev Property value.
bytes value;
}
pallets/nonfungible/src/erc.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -38,7 +38,7 @@
use pallet_common::{
CollectionHandle, CollectionPropertyPermissions, CommonCollectionOperations,
erc::{CommonEvmHandler, PrecompileResult, CollectionCall, static_property::key},
- eth::{Property as PropertyStruct, EthCrossAccount, EthTokenPermissions},
+ eth::{Property as PropertyStruct, EthCrossAccount},
};
use pallet_evm::{account::CrossAccountId, PrecompileHandle};
use pallet_evm_coder_substrate::call;
@@ -94,40 +94,12 @@
fn set_token_property_permissions(
&mut self,
caller: caller,
- permissions: Vec<(string, Vec<(EthTokenPermissions, bool)>)>,
+ permissions: Vec<pallet_common::eth::TokenPropertyPermission>,
) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
- let mut perms = Vec::new();
-
- for (key, pp) in permissions {
- if pp.len() > EthTokenPermissions::FIELDS_COUNT {
- return Err(alloc::format!(
- "Actual number of fields {} for {}, which exceeds the maximum value of {}",
- pp.len(),
- stringify!(EthTokenPermissions),
- EthTokenPermissions::FIELDS_COUNT
- )
- .as_str()
- .into());
- }
-
- let mut token_permission = PropertyPermission::default();
-
- for (perm, value) in pp {
- match perm {
- EthTokenPermissions::Mutable => token_permission.mutable = value,
- EthTokenPermissions::TokenOwner => token_permission.token_owner = value,
- EthTokenPermissions::CollectionAdmin => {
- token_permission.collection_admin = value
- }
- }
- }
-
- perms.push(PropertyKeyPermission {
- key: key.into_bytes().try_into().map_err(|_| "too long key")?,
- permission: token_permission,
- });
- }
+ let perms = pallet_common::eth::TokenPropertyPermission::into_property_key_permissions(
+ permissions,
+ )?;
<Pallet<T>>::set_token_property_permissions(self, &caller, perms)
.map_err(dispatch_to_evm::<T>)
@@ -136,19 +108,11 @@
/// @notice Get permissions for token properties.
fn token_property_permissions(
&self,
- ) -> Result<Vec<(string, Vec<(EthTokenPermissions, bool)>)>> {
+ ) -> Result<Vec<pallet_common::eth::TokenPropertyPermission>> {
let perms = <Pallet<T>>::token_property_permission(self.id);
Ok(perms
.into_iter()
- .map(|(key, pp)| {
- let key = string::from_utf8(key.into_inner()).expect("Stored key must be valid");
- let pp = vec![
- (EthTokenPermissions::Mutable, pp.mutable),
- (EthTokenPermissions::TokenOwner, pp.token_owner),
- (EthTokenPermissions::CollectionAdmin, pp.collection_admin),
- ];
- (key, pp)
- })
+ .map(pallet_common::eth::TokenPropertyPermission::from)
.collect())
}
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
@@ -42,7 +42,7 @@
/// @param permissions Permissions for keys.
/// @dev EVM selector for this function is: 0xbd92983a,
/// or in textual repr: setTokenPropertyPermissions((string,(uint8,bool)[])[])
- function setTokenPropertyPermissions(Tuple61[] memory permissions) public {
+ function setTokenPropertyPermissions(TokenPropertyPermission[] memory permissions) public {
require(false, stub_error);
permissions;
dummy = 0;
@@ -51,10 +51,10 @@
/// @notice Get permissions for token properties.
/// @dev EVM selector for this function is: 0xf23d7790,
/// or in textual repr: tokenPropertyPermissions()
- function tokenPropertyPermissions() public view returns (Tuple61[] memory) {
+ function tokenPropertyPermissions() public view returns (TokenPropertyPermission[] memory) {
require(false, stub_error);
dummy;
- return new Tuple61[](0);
+ return new TokenPropertyPermission[](0);
}
// /// @notice Set token property value.
@@ -127,12 +127,30 @@
}
}
-/// @dev Property struct
+/// @dev Ethereum representation of collection [`PropertyKey`](up_data_structs::PropertyKey) and [`PropertyValue`](up_data_structs::PropertyValue).
struct Property {
+ /// @dev Property key.
string key;
+ /// @dev Property value.
bytes value;
}
+/// @dev Ethereum representation of Token Property Permissions.
+struct TokenPropertyPermission {
+ /// @dev Token property key.
+ string key;
+ /// @dev Token property permissions.
+ PropertyPermission[] permissions;
+}
+
+/// @dev Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) as an key and value.
+struct PropertyPermission {
+ /// @dev TokenPermission field.
+ EthTokenPermissions code;
+ /// @dev TokenPermission value.
+ bool value;
+}
+
/// @dev Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) fields as an enumeration.
enum EthTokenPermissions {
/// @dev Permission to change the property and property permission. See [`up_data_structs::PropertyPermission::mutable`]
@@ -141,18 +159,6 @@
TokenOwner,
/// @dev Permission to change the property for the owner of the token. See [`up_data_structs::PropertyPermission::collection_admin`]
CollectionAdmin
-}
-
-/// @dev anonymous struct
-struct Tuple61 {
- string field_0;
- Tuple59[] field_1;
-}
-
-/// @dev anonymous struct
-struct Tuple59 {
- EthTokenPermissions field_0;
- bool field_1;
}
/// @title A contract that allows you to work with collections.
@@ -608,9 +614,12 @@
uint256 sub;
}
+/// @dev Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) fields as an enumeration.
enum CollectionPermissions {
- CollectionAdmin,
- TokenOwner
+ /// @dev Owner of token can nest tokens under it.
+ TokenOwner,
+ /// @dev Admin of token collection can nest tokens under token.
+ CollectionAdmin
}
/// @dev anonymous struct
pallets/refungible/src/erc.rsdiffbeforeafterboth--- a/pallets/refungible/src/erc.rs
+++ b/pallets/refungible/src/erc.rs
@@ -33,7 +33,7 @@
use pallet_common::{
CollectionHandle, CollectionPropertyPermissions, CommonCollectionOperations,
erc::{CommonEvmHandler, CollectionCall, static_property::key},
- eth::{Property as PropertyStruct, EthCrossAccount, EthTokenPermissions},
+ eth::{Property as PropertyStruct, EthCrossAccount},
Error as CommonError,
};
use pallet_evm::{account::CrossAccountId, PrecompileHandle};
@@ -97,47 +97,13 @@
fn set_token_property_permissions(
&mut self,
caller: caller,
- permissions: Vec<(string, Vec<(EthTokenPermissions, bool)>)>,
+ permissions: Vec<pallet_common::eth::TokenPropertyPermission>,
) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
- const PERMISSIONS_FIELDS_COUNT: usize = 3;
-
- let mut perms = Vec::new();
-
- for (key, pp) in permissions {
- if pp.len() > PERMISSIONS_FIELDS_COUNT {
- return Err(alloc::format!(
- "Actual number of fields {} for {}, which exceeds the maximum value of {}",
- pp.len(),
- stringify!(EthTokenPermissions),
- PERMISSIONS_FIELDS_COUNT
- )
- .as_str()
- .into());
- }
-
- let mut token_permission = PropertyPermission {
- mutable: false,
- collection_admin: false,
- token_owner: false,
- };
+ let perms = pallet_common::eth::TokenPropertyPermission::into_property_key_permissions(
+ permissions,
+ )?;
- for (perm, value) in pp {
- match perm {
- EthTokenPermissions::Mutable => token_permission.mutable = value,
- EthTokenPermissions::TokenOwner => token_permission.token_owner = value,
- EthTokenPermissions::CollectionAdmin => {
- token_permission.collection_admin = value
- }
- }
- }
-
- perms.push(PropertyKeyPermission {
- key: key.into_bytes().try_into().map_err(|_| "too long key")?,
- permission: token_permission,
- });
- }
-
<Pallet<T>>::set_token_property_permissions(self, &caller, perms)
.map_err(dispatch_to_evm::<T>)
}
@@ -145,19 +111,11 @@
/// @notice Get permissions for token properties.
fn token_property_permissions(
&self,
- ) -> Result<Vec<(string, Vec<(EthTokenPermissions, bool)>)>> {
+ ) -> Result<Vec<pallet_common::eth::TokenPropertyPermission>> {
let perms = <Pallet<T>>::token_property_permission(self.id);
Ok(perms
.into_iter()
- .map(|(key, pp)| {
- let key = string::from_utf8(key.into_inner()).expect("Stored key must be valid");
- let pp = vec![
- (EthTokenPermissions::Mutable, pp.mutable),
- (EthTokenPermissions::TokenOwner, pp.token_owner),
- (EthTokenPermissions::CollectionAdmin, pp.collection_admin),
- ];
- (key, pp)
- })
+ .map(pallet_common::eth::TokenPropertyPermission::from)
.collect())
}
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
@@ -42,7 +42,7 @@
/// @param permissions Permissions for keys.
/// @dev EVM selector for this function is: 0xbd92983a,
/// or in textual repr: setTokenPropertyPermissions((string,(uint8,bool)[])[])
- function setTokenPropertyPermissions(Tuple60[] memory permissions) public {
+ function setTokenPropertyPermissions(TokenPropertyPermission[] memory permissions) public {
require(false, stub_error);
permissions;
dummy = 0;
@@ -51,10 +51,10 @@
/// @notice Get permissions for token properties.
/// @dev EVM selector for this function is: 0xf23d7790,
/// or in textual repr: tokenPropertyPermissions()
- function tokenPropertyPermissions() public view returns (Tuple60[] memory) {
+ function tokenPropertyPermissions() public view returns (TokenPropertyPermission[] memory) {
require(false, stub_error);
dummy;
- return new Tuple60[](0);
+ return new TokenPropertyPermission[](0);
}
// /// @notice Set token property value.
@@ -127,12 +127,30 @@
}
}
-/// @dev Property struct
+/// @dev Ethereum representation of collection [`PropertyKey`](up_data_structs::PropertyKey) and [`PropertyValue`](up_data_structs::PropertyValue).
struct Property {
+ /// @dev Property key.
string key;
+ /// @dev Property value.
bytes value;
}
+/// @dev Ethereum representation of Token Property Permissions.
+struct TokenPropertyPermission {
+ /// @dev Token property key.
+ string key;
+ /// @dev Token property permissions.
+ PropertyPermission[] permissions;
+}
+
+/// @dev Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) as an key and value.
+struct PropertyPermission {
+ /// @dev TokenPermission field.
+ EthTokenPermissions code;
+ /// @dev TokenPermission value.
+ bool value;
+}
+
/// @dev Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) fields as an enumeration.
enum EthTokenPermissions {
/// @dev Permission to change the property and property permission. See [`up_data_structs::PropertyPermission::mutable`]
@@ -141,18 +159,6 @@
TokenOwner,
/// @dev Permission to change the property for the owner of the token. See [`up_data_structs::PropertyPermission::collection_admin`]
CollectionAdmin
-}
-
-/// @dev anonymous struct
-struct Tuple60 {
- string field_0;
- Tuple58[] field_1;
-}
-
-/// @dev anonymous struct
-struct Tuple58 {
- EthTokenPermissions field_0;
- bool field_1;
}
/// @title A contract that allows you to work with collections.
@@ -608,9 +614,12 @@
uint256 sub;
}
+/// @dev Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) fields as an enumeration.
enum CollectionPermissions {
- CollectionAdmin,
- TokenOwner
+ /// @dev Owner of token can nest tokens under it.
+ TokenOwner,
+ /// @dev Admin of token collection can nest tokens under token.
+ CollectionAdmin
}
/// @dev anonymous struct
pallets/refungible/src/stubs/UniqueRefungibleToken.rawdiffbeforeafterbothbinary blob — no preview
pallets/unique/src/eth/stubs/CollectionHelpers.rawdiffbeforeafterbothbinary blob — no preview
tests/src/eth/abi/nonFungible.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 EthCrossAccount",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 EthCrossAccount",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 EthCrossAccount",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 {147 "components": [148 { "internalType": "address", "name": "eth", "type": "address" },149 { "internalType": "uint256", "name": "sub", "type": "uint256" }150 ],151 "internalType": "struct EthCrossAccount",152 "name": "approved",153 "type": "tuple"154 },155 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }156 ],157 "name": "approveCross",158 "outputs": [],159 "stateMutability": "nonpayable",160 "type": "function"161 },162 {163 "inputs": [164 { "internalType": "address", "name": "owner", "type": "address" }165 ],166 "name": "balanceOf",167 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],168 "stateMutability": "view",169 "type": "function"170 },171 {172 "inputs": [173 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }174 ],175 "name": "burn",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 EthCrossAccount",188 "name": "from",189 "type": "tuple"190 },191 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }192 ],193 "name": "burnFromCross",194 "outputs": [],195 "stateMutability": "nonpayable",196 "type": "function"197 },198 {199 "inputs": [200 {201 "components": [202 { "internalType": "address", "name": "eth", "type": "address" },203 { "internalType": "uint256", "name": "sub", "type": "uint256" }204 ],205 "internalType": "struct EthCrossAccount",206 "name": "newOwner",207 "type": "tuple"208 }209 ],210 "name": "changeCollectionOwnerCross",211 "outputs": [],212 "stateMutability": "nonpayable",213 "type": "function"214 },215 {216 "inputs": [],217 "name": "collectionAdmins",218 "outputs": [219 {220 "components": [221 { "internalType": "address", "name": "eth", "type": "address" },222 { "internalType": "uint256", "name": "sub", "type": "uint256" }223 ],224 "internalType": "struct EthCrossAccount[]",225 "name": "",226 "type": "tuple[]"227 }228 ],229 "stateMutability": "view",230 "type": "function"231 },232 {233 "inputs": [],234 "name": "collectionHelperAddress",235 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],236 "stateMutability": "view",237 "type": "function"238 },239 {240 "inputs": [],241 "name": "collectionLimits",242 "outputs": [243 {244 "components": [245 {246 "internalType": "enum CollectionLimits",247 "name": "field_0",248 "type": "uint8"249 },250 { "internalType": "bool", "name": "field_1", "type": "bool" },251 { "internalType": "uint256", "name": "field_2", "type": "uint256" }252 ],253 "internalType": "struct Tuple35[]",254 "name": "",255 "type": "tuple[]"256 }257 ],258 "stateMutability": "view",259 "type": "function"260 },261 {262 "inputs": [],263 "name": "collectionNestingPermissions",264 "outputs": [265 {266 "components": [267 {268 "internalType": "enum CollectionPermissions",269 "name": "field_0",270 "type": "uint8"271 },272 { "internalType": "bool", "name": "field_1", "type": "bool" }273 ],274 "internalType": "struct Tuple44[]",275 "name": "",276 "type": "tuple[]"277 }278 ],279 "stateMutability": "view",280 "type": "function"281 },282 {283 "inputs": [],284 "name": "collectionNestingRestrictedCollectionIds",285 "outputs": [286 {287 "components": [288 { "internalType": "bool", "name": "field_0", "type": "bool" },289 {290 "internalType": "uint256[]",291 "name": "field_1",292 "type": "uint256[]"293 }294 ],295 "internalType": "struct Tuple41",296 "name": "",297 "type": "tuple"298 }299 ],300 "stateMutability": "view",301 "type": "function"302 },303 {304 "inputs": [],305 "name": "collectionOwner",306 "outputs": [307 {308 "components": [309 { "internalType": "address", "name": "eth", "type": "address" },310 { "internalType": "uint256", "name": "sub", "type": "uint256" }311 ],312 "internalType": "struct EthCrossAccount",313 "name": "",314 "type": "tuple"315 }316 ],317 "stateMutability": "view",318 "type": "function"319 },320 {321 "inputs": [322 { "internalType": "string[]", "name": "keys", "type": "string[]" }323 ],324 "name": "collectionProperties",325 "outputs": [326 {327 "components": [328 { "internalType": "string", "name": "key", "type": "string" },329 { "internalType": "bytes", "name": "value", "type": "bytes" }330 ],331 "internalType": "struct Property[]",332 "name": "",333 "type": "tuple[]"334 }335 ],336 "stateMutability": "view",337 "type": "function"338 },339 {340 "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],341 "name": "collectionProperty",342 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],343 "stateMutability": "view",344 "type": "function"345 },346 {347 "inputs": [],348 "name": "collectionSponsor",349 "outputs": [350 {351 "components": [352 { "internalType": "address", "name": "eth", "type": "address" },353 { "internalType": "uint256", "name": "sub", "type": "uint256" }354 ],355 "internalType": "struct EthCrossAccount",356 "name": "",357 "type": "tuple"358 }359 ],360 "stateMutability": "view",361 "type": "function"362 },363 {364 "inputs": [],365 "name": "confirmCollectionSponsorship",366 "outputs": [],367 "stateMutability": "nonpayable",368 "type": "function"369 },370 {371 "inputs": [],372 "name": "contractAddress",373 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],374 "stateMutability": "view",375 "type": "function"376 },377 {378 "inputs": [379 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }380 ],381 "name": "crossOwnerOf",382 "outputs": [383 {384 "components": [385 { "internalType": "address", "name": "eth", "type": "address" },386 { "internalType": "uint256", "name": "sub", "type": "uint256" }387 ],388 "internalType": "struct EthCrossAccount",389 "name": "",390 "type": "tuple"391 }392 ],393 "stateMutability": "view",394 "type": "function"395 },396 {397 "inputs": [398 { "internalType": "string[]", "name": "keys", "type": "string[]" }399 ],400 "name": "deleteCollectionProperties",401 "outputs": [],402 "stateMutability": "nonpayable",403 "type": "function"404 },405 {406 "inputs": [407 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },408 { "internalType": "string[]", "name": "keys", "type": "string[]" }409 ],410 "name": "deleteProperties",411 "outputs": [],412 "stateMutability": "nonpayable",413 "type": "function"414 },415 {416 "inputs": [],417 "name": "description",418 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],419 "stateMutability": "view",420 "type": "function"421 },422 {423 "inputs": [],424 "name": "finishMinting",425 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],426 "stateMutability": "nonpayable",427 "type": "function"428 },429 {430 "inputs": [431 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }432 ],433 "name": "getApproved",434 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],435 "stateMutability": "view",436 "type": "function"437 },438 {439 "inputs": [],440 "name": "hasCollectionPendingSponsor",441 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],442 "stateMutability": "view",443 "type": "function"444 },445 {446 "inputs": [447 { "internalType": "address", "name": "owner", "type": "address" },448 { "internalType": "address", "name": "operator", "type": "address" }449 ],450 "name": "isApprovedForAll",451 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],452 "stateMutability": "view",453 "type": "function"454 },455 {456 "inputs": [457 {458 "components": [459 { "internalType": "address", "name": "eth", "type": "address" },460 { "internalType": "uint256", "name": "sub", "type": "uint256" }461 ],462 "internalType": "struct EthCrossAccount",463 "name": "user",464 "type": "tuple"465 }466 ],467 "name": "isOwnerOrAdminCross",468 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],469 "stateMutability": "view",470 "type": "function"471 },472 {473 "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],474 "name": "mint",475 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],476 "stateMutability": "nonpayable",477 "type": "function"478 },479 {480 "inputs": [481 {482 "components": [483 { "internalType": "address", "name": "eth", "type": "address" },484 { "internalType": "uint256", "name": "sub", "type": "uint256" }485 ],486 "internalType": "struct EthCrossAccount",487 "name": "to",488 "type": "tuple"489 },490 {491 "components": [492 { "internalType": "string", "name": "key", "type": "string" },493 { "internalType": "bytes", "name": "value", "type": "bytes" }494 ],495 "internalType": "struct Property[]",496 "name": "properties",497 "type": "tuple[]"498 }499 ],500 "name": "mintCross",501 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],502 "stateMutability": "nonpayable",503 "type": "function"504 },505 {506 "inputs": [507 { "internalType": "address", "name": "to", "type": "address" },508 { "internalType": "string", "name": "tokenUri", "type": "string" }509 ],510 "name": "mintWithTokenURI",511 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],512 "stateMutability": "nonpayable",513 "type": "function"514 },515 {516 "inputs": [],517 "name": "mintingFinished",518 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],519 "stateMutability": "view",520 "type": "function"521 },522 {523 "inputs": [],524 "name": "name",525 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],526 "stateMutability": "view",527 "type": "function"528 },529 {530 "inputs": [],531 "name": "nextTokenId",532 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],533 "stateMutability": "view",534 "type": "function"535 },536 {537 "inputs": [538 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }539 ],540 "name": "ownerOf",541 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],542 "stateMutability": "view",543 "type": "function"544 },545 {546 "inputs": [547 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },548 { "internalType": "string[]", "name": "keys", "type": "string[]" }549 ],550 "name": "properties",551 "outputs": [552 {553 "components": [554 { "internalType": "string", "name": "key", "type": "string" },555 { "internalType": "bytes", "name": "value", "type": "bytes" }556 ],557 "internalType": "struct Property[]",558 "name": "",559 "type": "tuple[]"560 }561 ],562 "stateMutability": "view",563 "type": "function"564 },565 {566 "inputs": [567 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },568 { "internalType": "string", "name": "key", "type": "string" }569 ],570 "name": "property",571 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],572 "stateMutability": "view",573 "type": "function"574 },575 {576 "inputs": [577 {578 "components": [579 { "internalType": "address", "name": "eth", "type": "address" },580 { "internalType": "uint256", "name": "sub", "type": "uint256" }581 ],582 "internalType": "struct EthCrossAccount",583 "name": "admin",584 "type": "tuple"585 }586 ],587 "name": "removeCollectionAdminCross",588 "outputs": [],589 "stateMutability": "nonpayable",590 "type": "function"591 },592 {593 "inputs": [],594 "name": "removeCollectionSponsor",595 "outputs": [],596 "stateMutability": "nonpayable",597 "type": "function"598 },599 {600 "inputs": [601 {602 "components": [603 { "internalType": "address", "name": "eth", "type": "address" },604 { "internalType": "uint256", "name": "sub", "type": "uint256" }605 ],606 "internalType": "struct EthCrossAccount",607 "name": "user",608 "type": "tuple"609 }610 ],611 "name": "removeFromCollectionAllowListCross",612 "outputs": [],613 "stateMutability": "nonpayable",614 "type": "function"615 },616 {617 "inputs": [618 { "internalType": "address", "name": "from", "type": "address" },619 { "internalType": "address", "name": "to", "type": "address" },620 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }621 ],622 "name": "safeTransferFrom",623 "outputs": [],624 "stateMutability": "nonpayable",625 "type": "function"626 },627 {628 "inputs": [629 { "internalType": "address", "name": "from", "type": "address" },630 { "internalType": "address", "name": "to", "type": "address" },631 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },632 { "internalType": "bytes", "name": "data", "type": "bytes" }633 ],634 "name": "safeTransferFrom",635 "outputs": [],636 "stateMutability": "nonpayable",637 "type": "function"638 },639 {640 "inputs": [641 { "internalType": "address", "name": "operator", "type": "address" },642 { "internalType": "bool", "name": "approved", "type": "bool" }643 ],644 "name": "setApprovalForAll",645 "outputs": [],646 "stateMutability": "nonpayable",647 "type": "function"648 },649 {650 "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],651 "name": "setCollectionAccess",652 "outputs": [],653 "stateMutability": "nonpayable",654 "type": "function"655 },656 {657 "inputs": [658 {659 "internalType": "enum CollectionLimits",660 "name": "limit",661 "type": "uint8"662 },663 { "internalType": "bool", "name": "status", "type": "bool" },664 { "internalType": "uint256", "name": "value", "type": "uint256" }665 ],666 "name": "setCollectionLimit",667 "outputs": [],668 "stateMutability": "nonpayable",669 "type": "function"670 },671 {672 "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],673 "name": "setCollectionMintMode",674 "outputs": [],675 "stateMutability": "nonpayable",676 "type": "function"677 },678 {679 "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],680 "name": "setCollectionNesting",681 "outputs": [],682 "stateMutability": "nonpayable",683 "type": "function"684 },685 {686 "inputs": [687 { "internalType": "bool", "name": "enable", "type": "bool" },688 {689 "internalType": "address[]",690 "name": "collections",691 "type": "address[]"692 }693 ],694 "name": "setCollectionNesting",695 "outputs": [],696 "stateMutability": "nonpayable",697 "type": "function"698 },699 {700 "inputs": [701 {702 "components": [703 { "internalType": "string", "name": "key", "type": "string" },704 { "internalType": "bytes", "name": "value", "type": "bytes" }705 ],706 "internalType": "struct Property[]",707 "name": "properties",708 "type": "tuple[]"709 }710 ],711 "name": "setCollectionProperties",712 "outputs": [],713 "stateMutability": "nonpayable",714 "type": "function"715 },716 {717 "inputs": [718 {719 "components": [720 { "internalType": "address", "name": "eth", "type": "address" },721 { "internalType": "uint256", "name": "sub", "type": "uint256" }722 ],723 "internalType": "struct EthCrossAccount",724 "name": "sponsor",725 "type": "tuple"726 }727 ],728 "name": "setCollectionSponsorCross",729 "outputs": [],730 "stateMutability": "nonpayable",731 "type": "function"732 },733 {734 "inputs": [735 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },736 {737 "components": [738 { "internalType": "string", "name": "key", "type": "string" },739 { "internalType": "bytes", "name": "value", "type": "bytes" }740 ],741 "internalType": "struct Property[]",742 "name": "properties",743 "type": "tuple[]"744 }745 ],746 "name": "setProperties",747 "outputs": [],748 "stateMutability": "nonpayable",749 "type": "function"750 },751 {752 "inputs": [753 {754 "components": [755 { "internalType": "string", "name": "field_0", "type": "string" },756 {757 "components": [758 {759 "internalType": "enum EthTokenPermissions",760 "name": "field_0",761 "type": "uint8"762 },763 { "internalType": "bool", "name": "field_1", "type": "bool" }764 ],765 "internalType": "struct Tuple59[]",766 "name": "field_1",767 "type": "tuple[]"768 }769 ],770 "internalType": "struct Tuple61[]",771 "name": "permissions",772 "type": "tuple[]"773 }774 ],775 "name": "setTokenPropertyPermissions",776 "outputs": [],777 "stateMutability": "nonpayable",778 "type": "function"779 },780 {781 "inputs": [782 { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }783 ],784 "name": "supportsInterface",785 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],786 "stateMutability": "view",787 "type": "function"788 },789 {790 "inputs": [],791 "name": "symbol",792 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],793 "stateMutability": "view",794 "type": "function"795 },796 {797 "inputs": [798 { "internalType": "uint256", "name": "index", "type": "uint256" }799 ],800 "name": "tokenByIndex",801 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],802 "stateMutability": "view",803 "type": "function"804 },805 {806 "inputs": [807 { "internalType": "address", "name": "owner", "type": "address" },808 { "internalType": "uint256", "name": "index", "type": "uint256" }809 ],810 "name": "tokenOfOwnerByIndex",811 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],812 "stateMutability": "view",813 "type": "function"814 },815 {816 "inputs": [],817 "name": "tokenPropertyPermissions",818 "outputs": [819 {820 "components": [821 { "internalType": "string", "name": "field_0", "type": "string" },822 {823 "components": [824 {825 "internalType": "enum EthTokenPermissions",826 "name": "field_0",827 "type": "uint8"828 },829 { "internalType": "bool", "name": "field_1", "type": "bool" }830 ],831 "internalType": "struct Tuple59[]",832 "name": "field_1",833 "type": "tuple[]"834 }835 ],836 "internalType": "struct Tuple61[]",837 "name": "",838 "type": "tuple[]"839 }840 ],841 "stateMutability": "view",842 "type": "function"843 },844 {845 "inputs": [846 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }847 ],848 "name": "tokenURI",849 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],850 "stateMutability": "view",851 "type": "function"852 },853 {854 "inputs": [],855 "name": "totalSupply",856 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],857 "stateMutability": "view",858 "type": "function"859 },860 {861 "inputs": [862 { "internalType": "address", "name": "to", "type": "address" },863 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }864 ],865 "name": "transfer",866 "outputs": [],867 "stateMutability": "nonpayable",868 "type": "function"869 },870 {871 "inputs": [872 {873 "components": [874 { "internalType": "address", "name": "eth", "type": "address" },875 { "internalType": "uint256", "name": "sub", "type": "uint256" }876 ],877 "internalType": "struct EthCrossAccount",878 "name": "to",879 "type": "tuple"880 },881 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }882 ],883 "name": "transferCross",884 "outputs": [],885 "stateMutability": "nonpayable",886 "type": "function"887 },888 {889 "inputs": [890 { "internalType": "address", "name": "from", "type": "address" },891 { "internalType": "address", "name": "to", "type": "address" },892 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }893 ],894 "name": "transferFrom",895 "outputs": [],896 "stateMutability": "nonpayable",897 "type": "function"898 },899 {900 "inputs": [901 {902 "components": [903 { "internalType": "address", "name": "eth", "type": "address" },904 { "internalType": "uint256", "name": "sub", "type": "uint256" }905 ],906 "internalType": "struct EthCrossAccount",907 "name": "from",908 "type": "tuple"909 },910 {911 "components": [912 { "internalType": "address", "name": "eth", "type": "address" },913 { "internalType": "uint256", "name": "sub", "type": "uint256" }914 ],915 "internalType": "struct EthCrossAccount",916 "name": "to",917 "type": "tuple"918 },919 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }920 ],921 "name": "transferFromCross",922 "outputs": [],923 "stateMutability": "nonpayable",924 "type": "function"925 },926 {927 "inputs": [],928 "name": "uniqueCollectionType",929 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],930 "stateMutability": "view",931 "type": "function"932 }933]1[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 EthCrossAccount",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 EthCrossAccount",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 EthCrossAccount",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 {147 "components": [148 { "internalType": "address", "name": "eth", "type": "address" },149 { "internalType": "uint256", "name": "sub", "type": "uint256" }150 ],151 "internalType": "struct EthCrossAccount",152 "name": "approved",153 "type": "tuple"154 },155 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }156 ],157 "name": "approveCross",158 "outputs": [],159 "stateMutability": "nonpayable",160 "type": "function"161 },162 {163 "inputs": [164 { "internalType": "address", "name": "owner", "type": "address" }165 ],166 "name": "balanceOf",167 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],168 "stateMutability": "view",169 "type": "function"170 },171 {172 "inputs": [173 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }174 ],175 "name": "burn",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 EthCrossAccount",188 "name": "from",189 "type": "tuple"190 },191 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }192 ],193 "name": "burnFromCross",194 "outputs": [],195 "stateMutability": "nonpayable",196 "type": "function"197 },198 {199 "inputs": [200 {201 "components": [202 { "internalType": "address", "name": "eth", "type": "address" },203 { "internalType": "uint256", "name": "sub", "type": "uint256" }204 ],205 "internalType": "struct EthCrossAccount",206 "name": "newOwner",207 "type": "tuple"208 }209 ],210 "name": "changeCollectionOwnerCross",211 "outputs": [],212 "stateMutability": "nonpayable",213 "type": "function"214 },215 {216 "inputs": [],217 "name": "collectionAdmins",218 "outputs": [219 {220 "components": [221 { "internalType": "address", "name": "eth", "type": "address" },222 { "internalType": "uint256", "name": "sub", "type": "uint256" }223 ],224 "internalType": "struct EthCrossAccount[]",225 "name": "",226 "type": "tuple[]"227 }228 ],229 "stateMutability": "view",230 "type": "function"231 },232 {233 "inputs": [],234 "name": "collectionHelperAddress",235 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],236 "stateMutability": "view",237 "type": "function"238 },239 {240 "inputs": [],241 "name": "collectionLimits",242 "outputs": [243 {244 "components": [245 {246 "internalType": "enum CollectionLimits",247 "name": "field_0",248 "type": "uint8"249 },250 { "internalType": "bool", "name": "field_1", "type": "bool" },251 { "internalType": "uint256", "name": "field_2", "type": "uint256" }252 ],253 "internalType": "struct Tuple35[]",254 "name": "",255 "type": "tuple[]"256 }257 ],258 "stateMutability": "view",259 "type": "function"260 },261 {262 "inputs": [],263 "name": "collectionNestingPermissions",264 "outputs": [265 {266 "components": [267 {268 "internalType": "enum CollectionPermissions",269 "name": "field_0",270 "type": "uint8"271 },272 { "internalType": "bool", "name": "field_1", "type": "bool" }273 ],274 "internalType": "struct Tuple44[]",275 "name": "",276 "type": "tuple[]"277 }278 ],279 "stateMutability": "view",280 "type": "function"281 },282 {283 "inputs": [],284 "name": "collectionNestingRestrictedCollectionIds",285 "outputs": [286 {287 "components": [288 { "internalType": "bool", "name": "field_0", "type": "bool" },289 {290 "internalType": "uint256[]",291 "name": "field_1",292 "type": "uint256[]"293 }294 ],295 "internalType": "struct Tuple41",296 "name": "",297 "type": "tuple"298 }299 ],300 "stateMutability": "view",301 "type": "function"302 },303 {304 "inputs": [],305 "name": "collectionOwner",306 "outputs": [307 {308 "components": [309 { "internalType": "address", "name": "eth", "type": "address" },310 { "internalType": "uint256", "name": "sub", "type": "uint256" }311 ],312 "internalType": "struct EthCrossAccount",313 "name": "",314 "type": "tuple"315 }316 ],317 "stateMutability": "view",318 "type": "function"319 },320 {321 "inputs": [322 { "internalType": "string[]", "name": "keys", "type": "string[]" }323 ],324 "name": "collectionProperties",325 "outputs": [326 {327 "components": [328 { "internalType": "string", "name": "key", "type": "string" },329 { "internalType": "bytes", "name": "value", "type": "bytes" }330 ],331 "internalType": "struct Property[]",332 "name": "",333 "type": "tuple[]"334 }335 ],336 "stateMutability": "view",337 "type": "function"338 },339 {340 "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],341 "name": "collectionProperty",342 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],343 "stateMutability": "view",344 "type": "function"345 },346 {347 "inputs": [],348 "name": "collectionSponsor",349 "outputs": [350 {351 "components": [352 { "internalType": "address", "name": "eth", "type": "address" },353 { "internalType": "uint256", "name": "sub", "type": "uint256" }354 ],355 "internalType": "struct EthCrossAccount",356 "name": "",357 "type": "tuple"358 }359 ],360 "stateMutability": "view",361 "type": "function"362 },363 {364 "inputs": [],365 "name": "confirmCollectionSponsorship",366 "outputs": [],367 "stateMutability": "nonpayable",368 "type": "function"369 },370 {371 "inputs": [],372 "name": "contractAddress",373 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],374 "stateMutability": "view",375 "type": "function"376 },377 {378 "inputs": [379 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }380 ],381 "name": "crossOwnerOf",382 "outputs": [383 {384 "components": [385 { "internalType": "address", "name": "eth", "type": "address" },386 { "internalType": "uint256", "name": "sub", "type": "uint256" }387 ],388 "internalType": "struct EthCrossAccount",389 "name": "",390 "type": "tuple"391 }392 ],393 "stateMutability": "view",394 "type": "function"395 },396 {397 "inputs": [398 { "internalType": "string[]", "name": "keys", "type": "string[]" }399 ],400 "name": "deleteCollectionProperties",401 "outputs": [],402 "stateMutability": "nonpayable",403 "type": "function"404 },405 {406 "inputs": [407 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },408 { "internalType": "string[]", "name": "keys", "type": "string[]" }409 ],410 "name": "deleteProperties",411 "outputs": [],412 "stateMutability": "nonpayable",413 "type": "function"414 },415 {416 "inputs": [],417 "name": "description",418 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],419 "stateMutability": "view",420 "type": "function"421 },422 {423 "inputs": [],424 "name": "finishMinting",425 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],426 "stateMutability": "nonpayable",427 "type": "function"428 },429 {430 "inputs": [431 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }432 ],433 "name": "getApproved",434 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],435 "stateMutability": "view",436 "type": "function"437 },438 {439 "inputs": [],440 "name": "hasCollectionPendingSponsor",441 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],442 "stateMutability": "view",443 "type": "function"444 },445 {446 "inputs": [447 { "internalType": "address", "name": "owner", "type": "address" },448 { "internalType": "address", "name": "operator", "type": "address" }449 ],450 "name": "isApprovedForAll",451 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],452 "stateMutability": "view",453 "type": "function"454 },455 {456 "inputs": [457 {458 "components": [459 { "internalType": "address", "name": "eth", "type": "address" },460 { "internalType": "uint256", "name": "sub", "type": "uint256" }461 ],462 "internalType": "struct EthCrossAccount",463 "name": "user",464 "type": "tuple"465 }466 ],467 "name": "isOwnerOrAdminCross",468 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],469 "stateMutability": "view",470 "type": "function"471 },472 {473 "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],474 "name": "mint",475 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],476 "stateMutability": "nonpayable",477 "type": "function"478 },479 {480 "inputs": [481 {482 "components": [483 { "internalType": "address", "name": "eth", "type": "address" },484 { "internalType": "uint256", "name": "sub", "type": "uint256" }485 ],486 "internalType": "struct EthCrossAccount",487 "name": "to",488 "type": "tuple"489 },490 {491 "components": [492 { "internalType": "string", "name": "key", "type": "string" },493 { "internalType": "bytes", "name": "value", "type": "bytes" }494 ],495 "internalType": "struct Property[]",496 "name": "properties",497 "type": "tuple[]"498 }499 ],500 "name": "mintCross",501 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],502 "stateMutability": "nonpayable",503 "type": "function"504 },505 {506 "inputs": [507 { "internalType": "address", "name": "to", "type": "address" },508 { "internalType": "string", "name": "tokenUri", "type": "string" }509 ],510 "name": "mintWithTokenURI",511 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],512 "stateMutability": "nonpayable",513 "type": "function"514 },515 {516 "inputs": [],517 "name": "mintingFinished",518 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],519 "stateMutability": "view",520 "type": "function"521 },522 {523 "inputs": [],524 "name": "name",525 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],526 "stateMutability": "view",527 "type": "function"528 },529 {530 "inputs": [],531 "name": "nextTokenId",532 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],533 "stateMutability": "view",534 "type": "function"535 },536 {537 "inputs": [538 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }539 ],540 "name": "ownerOf",541 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],542 "stateMutability": "view",543 "type": "function"544 },545 {546 "inputs": [547 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },548 { "internalType": "string[]", "name": "keys", "type": "string[]" }549 ],550 "name": "properties",551 "outputs": [552 {553 "components": [554 { "internalType": "string", "name": "key", "type": "string" },555 { "internalType": "bytes", "name": "value", "type": "bytes" }556 ],557 "internalType": "struct Property[]",558 "name": "",559 "type": "tuple[]"560 }561 ],562 "stateMutability": "view",563 "type": "function"564 },565 {566 "inputs": [567 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },568 { "internalType": "string", "name": "key", "type": "string" }569 ],570 "name": "property",571 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],572 "stateMutability": "view",573 "type": "function"574 },575 {576 "inputs": [577 {578 "components": [579 { "internalType": "address", "name": "eth", "type": "address" },580 { "internalType": "uint256", "name": "sub", "type": "uint256" }581 ],582 "internalType": "struct EthCrossAccount",583 "name": "admin",584 "type": "tuple"585 }586 ],587 "name": "removeCollectionAdminCross",588 "outputs": [],589 "stateMutability": "nonpayable",590 "type": "function"591 },592 {593 "inputs": [],594 "name": "removeCollectionSponsor",595 "outputs": [],596 "stateMutability": "nonpayable",597 "type": "function"598 },599 {600 "inputs": [601 {602 "components": [603 { "internalType": "address", "name": "eth", "type": "address" },604 { "internalType": "uint256", "name": "sub", "type": "uint256" }605 ],606 "internalType": "struct EthCrossAccount",607 "name": "user",608 "type": "tuple"609 }610 ],611 "name": "removeFromCollectionAllowListCross",612 "outputs": [],613 "stateMutability": "nonpayable",614 "type": "function"615 },616 {617 "inputs": [618 { "internalType": "address", "name": "from", "type": "address" },619 { "internalType": "address", "name": "to", "type": "address" },620 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }621 ],622 "name": "safeTransferFrom",623 "outputs": [],624 "stateMutability": "nonpayable",625 "type": "function"626 },627 {628 "inputs": [629 { "internalType": "address", "name": "from", "type": "address" },630 { "internalType": "address", "name": "to", "type": "address" },631 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },632 { "internalType": "bytes", "name": "data", "type": "bytes" }633 ],634 "name": "safeTransferFrom",635 "outputs": [],636 "stateMutability": "nonpayable",637 "type": "function"638 },639 {640 "inputs": [641 { "internalType": "address", "name": "operator", "type": "address" },642 { "internalType": "bool", "name": "approved", "type": "bool" }643 ],644 "name": "setApprovalForAll",645 "outputs": [],646 "stateMutability": "nonpayable",647 "type": "function"648 },649 {650 "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],651 "name": "setCollectionAccess",652 "outputs": [],653 "stateMutability": "nonpayable",654 "type": "function"655 },656 {657 "inputs": [658 {659 "internalType": "enum CollectionLimits",660 "name": "limit",661 "type": "uint8"662 },663 { "internalType": "bool", "name": "status", "type": "bool" },664 { "internalType": "uint256", "name": "value", "type": "uint256" }665 ],666 "name": "setCollectionLimit",667 "outputs": [],668 "stateMutability": "nonpayable",669 "type": "function"670 },671 {672 "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],673 "name": "setCollectionMintMode",674 "outputs": [],675 "stateMutability": "nonpayable",676 "type": "function"677 },678 {679 "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],680 "name": "setCollectionNesting",681 "outputs": [],682 "stateMutability": "nonpayable",683 "type": "function"684 },685 {686 "inputs": [687 { "internalType": "bool", "name": "enable", "type": "bool" },688 {689 "internalType": "address[]",690 "name": "collections",691 "type": "address[]"692 }693 ],694 "name": "setCollectionNesting",695 "outputs": [],696 "stateMutability": "nonpayable",697 "type": "function"698 },699 {700 "inputs": [701 {702 "components": [703 { "internalType": "string", "name": "key", "type": "string" },704 { "internalType": "bytes", "name": "value", "type": "bytes" }705 ],706 "internalType": "struct Property[]",707 "name": "properties",708 "type": "tuple[]"709 }710 ],711 "name": "setCollectionProperties",712 "outputs": [],713 "stateMutability": "nonpayable",714 "type": "function"715 },716 {717 "inputs": [718 {719 "components": [720 { "internalType": "address", "name": "eth", "type": "address" },721 { "internalType": "uint256", "name": "sub", "type": "uint256" }722 ],723 "internalType": "struct EthCrossAccount",724 "name": "sponsor",725 "type": "tuple"726 }727 ],728 "name": "setCollectionSponsorCross",729 "outputs": [],730 "stateMutability": "nonpayable",731 "type": "function"732 },733 {734 "inputs": [735 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },736 {737 "components": [738 { "internalType": "string", "name": "key", "type": "string" },739 { "internalType": "bytes", "name": "value", "type": "bytes" }740 ],741 "internalType": "struct Property[]",742 "name": "properties",743 "type": "tuple[]"744 }745 ],746 "name": "setProperties",747 "outputs": [],748 "stateMutability": "nonpayable",749 "type": "function"750 },751 {752 "inputs": [753 {754 "components": [755 { "internalType": "string", "name": "key", "type": "string" },756 {757 "components": [758 {759 "internalType": "enum EthTokenPermissions",760 "name": "code",761 "type": "uint8"762 },763 { "internalType": "bool", "name": "value", "type": "bool" }764 ],765 "internalType": "struct PropertyPermission[]",766 "name": "permissions",767 "type": "tuple[]"768 }769 ],770 "internalType": "struct TokenPropertyPermission[]",771 "name": "permissions",772 "type": "tuple[]"773 }774 ],775 "name": "setTokenPropertyPermissions",776 "outputs": [],777 "stateMutability": "nonpayable",778 "type": "function"779 },780 {781 "inputs": [782 { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }783 ],784 "name": "supportsInterface",785 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],786 "stateMutability": "view",787 "type": "function"788 },789 {790 "inputs": [],791 "name": "symbol",792 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],793 "stateMutability": "view",794 "type": "function"795 },796 {797 "inputs": [798 { "internalType": "uint256", "name": "index", "type": "uint256" }799 ],800 "name": "tokenByIndex",801 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],802 "stateMutability": "view",803 "type": "function"804 },805 {806 "inputs": [807 { "internalType": "address", "name": "owner", "type": "address" },808 { "internalType": "uint256", "name": "index", "type": "uint256" }809 ],810 "name": "tokenOfOwnerByIndex",811 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],812 "stateMutability": "view",813 "type": "function"814 },815 {816 "inputs": [],817 "name": "tokenPropertyPermissions",818 "outputs": [819 {820 "components": [821 { "internalType": "string", "name": "key", "type": "string" },822 {823 "components": [824 {825 "internalType": "enum EthTokenPermissions",826 "name": "code",827 "type": "uint8"828 },829 { "internalType": "bool", "name": "value", "type": "bool" }830 ],831 "internalType": "struct PropertyPermission[]",832 "name": "permissions",833 "type": "tuple[]"834 }835 ],836 "internalType": "struct TokenPropertyPermission[]",837 "name": "",838 "type": "tuple[]"839 }840 ],841 "stateMutability": "view",842 "type": "function"843 },844 {845 "inputs": [846 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }847 ],848 "name": "tokenURI",849 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],850 "stateMutability": "view",851 "type": "function"852 },853 {854 "inputs": [],855 "name": "totalSupply",856 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],857 "stateMutability": "view",858 "type": "function"859 },860 {861 "inputs": [862 { "internalType": "address", "name": "to", "type": "address" },863 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }864 ],865 "name": "transfer",866 "outputs": [],867 "stateMutability": "nonpayable",868 "type": "function"869 },870 {871 "inputs": [872 {873 "components": [874 { "internalType": "address", "name": "eth", "type": "address" },875 { "internalType": "uint256", "name": "sub", "type": "uint256" }876 ],877 "internalType": "struct EthCrossAccount",878 "name": "to",879 "type": "tuple"880 },881 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }882 ],883 "name": "transferCross",884 "outputs": [],885 "stateMutability": "nonpayable",886 "type": "function"887 },888 {889 "inputs": [890 { "internalType": "address", "name": "from", "type": "address" },891 { "internalType": "address", "name": "to", "type": "address" },892 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }893 ],894 "name": "transferFrom",895 "outputs": [],896 "stateMutability": "nonpayable",897 "type": "function"898 },899 {900 "inputs": [901 {902 "components": [903 { "internalType": "address", "name": "eth", "type": "address" },904 { "internalType": "uint256", "name": "sub", "type": "uint256" }905 ],906 "internalType": "struct EthCrossAccount",907 "name": "from",908 "type": "tuple"909 },910 {911 "components": [912 { "internalType": "address", "name": "eth", "type": "address" },913 { "internalType": "uint256", "name": "sub", "type": "uint256" }914 ],915 "internalType": "struct EthCrossAccount",916 "name": "to",917 "type": "tuple"918 },919 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }920 ],921 "name": "transferFromCross",922 "outputs": [],923 "stateMutability": "nonpayable",924 "type": "function"925 },926 {927 "inputs": [],928 "name": "uniqueCollectionType",929 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],930 "stateMutability": "view",931 "type": "function"932 }933]tests/src/eth/abi/reFungible.jsondiffbeforeafterboth--- a/tests/src/eth/abi/reFungible.json
+++ b/tests/src/eth/abi/reFungible.json
@@ -734,22 +734,22 @@
"inputs": [
{
"components": [
- { "internalType": "string", "name": "field_0", "type": "string" },
+ { "internalType": "string", "name": "key", "type": "string" },
{
"components": [
{
"internalType": "enum EthTokenPermissions",
- "name": "field_0",
+ "name": "code",
"type": "uint8"
},
- { "internalType": "bool", "name": "field_1", "type": "bool" }
+ { "internalType": "bool", "name": "value", "type": "bool" }
],
- "internalType": "struct Tuple58[]",
- "name": "field_1",
+ "internalType": "struct PropertyPermission[]",
+ "name": "permissions",
"type": "tuple[]"
}
],
- "internalType": "struct Tuple60[]",
+ "internalType": "struct TokenPropertyPermission[]",
"name": "permissions",
"type": "tuple[]"
}
@@ -809,22 +809,22 @@
"outputs": [
{
"components": [
- { "internalType": "string", "name": "field_0", "type": "string" },
+ { "internalType": "string", "name": "key", "type": "string" },
{
"components": [
{
"internalType": "enum EthTokenPermissions",
- "name": "field_0",
+ "name": "code",
"type": "uint8"
},
- { "internalType": "bool", "name": "field_1", "type": "bool" }
+ { "internalType": "bool", "name": "value", "type": "bool" }
],
- "internalType": "struct Tuple58[]",
- "name": "field_1",
+ "internalType": "struct PropertyPermission[]",
+ "name": "permissions",
"type": "tuple[]"
}
],
- "internalType": "struct Tuple60[]",
+ "internalType": "struct TokenPropertyPermission[]",
"name": "",
"type": "tuple[]"
}
tests/src/eth/api/UniqueFungible.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueFungible.sol
+++ b/tests/src/eth/api/UniqueFungible.sol
@@ -316,9 +316,12 @@
bool field_1;
}
+/// @dev Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) fields as an enumeration.
enum CollectionPermissions {
- CollectionAdmin,
- TokenOwner
+ /// @dev Owner of token can nest tokens under it.
+ TokenOwner,
+ /// @dev Admin of token collection can nest tokens under token.
+ CollectionAdmin
}
/// @dev anonymous struct
@@ -356,9 +359,11 @@
uint256 field_2;
}
-/// @dev Property struct
+/// @dev Ethereum representation of collection [`PropertyKey`](up_data_structs::PropertyKey) and [`PropertyValue`](up_data_structs::PropertyValue).
struct Property {
+ /// @dev Property key.
string key;
+ /// @dev Property value.
bytes value;
}
tests/src/eth/api/UniqueNFT.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -30,12 +30,12 @@
/// @param permissions Permissions for keys.
/// @dev EVM selector for this function is: 0xbd92983a,
/// or in textual repr: setTokenPropertyPermissions((string,(uint8,bool)[])[])
- function setTokenPropertyPermissions(Tuple53[] memory permissions) external;
+ function setTokenPropertyPermissions(TokenPropertyPermission[] memory permissions) external;
/// @notice Get permissions for token properties.
/// @dev EVM selector for this function is: 0xf23d7790,
/// or in textual repr: tokenPropertyPermissions()
- function tokenPropertyPermissions() external view returns (Tuple53[] memory);
+ function tokenPropertyPermissions() external view returns (TokenPropertyPermission[] memory);
// /// @notice Set token property value.
// /// @dev Throws error if `msg.sender` has no permission to edit the property.
@@ -80,12 +80,30 @@
function property(uint256 tokenId, string memory key) external view returns (bytes memory);
}
-/// @dev Property struct
+/// @dev Ethereum representation of collection [`PropertyKey`](up_data_structs::PropertyKey) and [`PropertyValue`](up_data_structs::PropertyValue).
struct Property {
+ /// @dev Property key.
string key;
+ /// @dev Property value.
bytes value;
}
+/// @dev Ethereum representation of Token Property Permissions.
+struct TokenPropertyPermission {
+ /// @dev Token property key.
+ string key;
+ /// @dev Token property permissions.
+ PropertyPermission[] permissions;
+}
+
+/// @dev Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) as an key and value.
+struct PropertyPermission {
+ /// @dev TokenPermission field.
+ EthTokenPermissions code;
+ /// @dev TokenPermission value.
+ bool value;
+}
+
/// @dev Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) fields as an enumeration.
enum EthTokenPermissions {
/// @dev Permission to change the property and property permission. See [`up_data_structs::PropertyPermission::mutable`]
@@ -96,18 +114,6 @@
CollectionAdmin
}
-/// @dev anonymous struct
-struct Tuple53 {
- string field_0;
- Tuple51[] field_1;
-}
-
-/// @dev anonymous struct
-struct Tuple51 {
- EthTokenPermissions field_0;
- bool field_1;
-}
-
/// @title A contract that allows you to work with collections.
/// @dev the ERC-165 identifier for this interface is 0x81172a75
interface Collection is Dummy, ERC165 {
@@ -412,9 +418,12 @@
bool field_1;
}
+/// @dev Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) fields as an enumeration.
enum CollectionPermissions {
- CollectionAdmin,
- TokenOwner
+ /// @dev Owner of token can nest tokens under it.
+ TokenOwner,
+ /// @dev Admin of token collection can nest tokens under token.
+ CollectionAdmin
}
/// @dev anonymous struct
tests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -30,12 +30,12 @@
/// @param permissions Permissions for keys.
/// @dev EVM selector for this function is: 0xbd92983a,
/// or in textual repr: setTokenPropertyPermissions((string,(uint8,bool)[])[])
- function setTokenPropertyPermissions(Tuple52[] memory permissions) external;
+ function setTokenPropertyPermissions(TokenPropertyPermission[] memory permissions) external;
/// @notice Get permissions for token properties.
/// @dev EVM selector for this function is: 0xf23d7790,
/// or in textual repr: tokenPropertyPermissions()
- function tokenPropertyPermissions() external view returns (Tuple52[] memory);
+ function tokenPropertyPermissions() external view returns (TokenPropertyPermission[] memory);
// /// @notice Set token property value.
// /// @dev Throws error if `msg.sender` has no permission to edit the property.
@@ -80,12 +80,30 @@
function property(uint256 tokenId, string memory key) external view returns (bytes memory);
}
-/// @dev Property struct
+/// @dev Ethereum representation of collection [`PropertyKey`](up_data_structs::PropertyKey) and [`PropertyValue`](up_data_structs::PropertyValue).
struct Property {
+ /// @dev Property key.
string key;
+ /// @dev Property value.
bytes value;
}
+/// @dev Ethereum representation of Token Property Permissions.
+struct TokenPropertyPermission {
+ /// @dev Token property key.
+ string key;
+ /// @dev Token property permissions.
+ PropertyPermission[] permissions;
+}
+
+/// @dev Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) as an key and value.
+struct PropertyPermission {
+ /// @dev TokenPermission field.
+ EthTokenPermissions code;
+ /// @dev TokenPermission value.
+ bool value;
+}
+
/// @dev Ethereum representation of TokenPermissions (see [`up_data_structs::PropertyPermission`]) fields as an enumeration.
enum EthTokenPermissions {
/// @dev Permission to change the property and property permission. See [`up_data_structs::PropertyPermission::mutable`]
@@ -96,18 +114,6 @@
CollectionAdmin
}
-/// @dev anonymous struct
-struct Tuple52 {
- string field_0;
- Tuple50[] field_1;
-}
-
-/// @dev anonymous struct
-struct Tuple50 {
- EthTokenPermissions field_0;
- bool field_1;
-}
-
/// @title A contract that allows you to work with collections.
/// @dev the ERC-165 identifier for this interface is 0x81172a75
interface Collection is Dummy, ERC165 {
@@ -412,9 +418,12 @@
bool field_1;
}
+/// @dev Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) fields as an enumeration.
enum CollectionPermissions {
- CollectionAdmin,
- TokenOwner
+ /// @dev Owner of token can nest tokens under it.
+ TokenOwner,
+ /// @dev Admin of token collection can nest tokens under token.
+ CollectionAdmin
}
/// @dev anonymous struct