difftreelog
Merge branch 'develop' into tests/generalization
in: master
33 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2321,7 +2321,7 @@
[[package]]
name = "evm-coder"
-version = "0.1.5"
+version = "0.1.6"
dependencies = [
"ethereum 0.14.0",
"evm-coder-procedural",
crates/evm-coder/CHANGELOG.mddiffbeforeafterboth--- a/crates/evm-coder/CHANGELOG.md
+++ b/crates/evm-coder/CHANGELOG.md
@@ -3,6 +3,13 @@
All notable changes to this project will be documented in this file.
<!-- bureaucrate goes here -->
+## [v0.1.6] - 2023-01-12
+
+### Added
+- Support Option<T> type.
+### Removed
+- Frontier dependency.
+
## [v0.1.5] - 2022-11-30
### Added
crates/evm-coder/Cargo.tomldiffbeforeafterboth--- a/crates/evm-coder/Cargo.toml
+++ b/crates/evm-coder/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "evm-coder"
-version = "0.1.5"
+version = "0.1.6"
license = "GPLv3"
edition = "2021"
crates/evm-coder/src/abi/impls.rsdiffbeforeafterboth--- a/crates/evm-coder/src/abi/impls.rs
+++ b/crates/evm-coder/src/abi/impls.rs
@@ -258,3 +258,39 @@
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}
+
+//----- impls for Option -----
+impl<T: AbiType> AbiType for Option<T> {
+ const SIGNATURE: SignatureUnit = <(bool, T)>::SIGNATURE;
+
+ fn is_dynamic() -> bool {
+ <(bool, T)>::is_dynamic()
+ }
+
+ fn size() -> usize {
+ <(bool, T)>::size()
+ }
+}
+
+impl<T: AbiWrite + AbiType + Default> AbiWrite for Option<T> {
+ fn abi_write(&self, writer: &mut AbiWriter) {
+ match self {
+ Some(value) => (true, value).abi_write(writer),
+ None => (false, T::default()).abi_write(writer),
+ }
+ }
+}
+
+impl<T> AbiRead for Option<T>
+where
+ Self: AbiType,
+ T: AbiRead + AbiType,
+{
+ fn abi_read(reader: &mut AbiReader) -> Result<Self>
+ where
+ Self: Sized,
+ {
+ let (status, value) = <(bool, T)>::abi_read(reader)?;
+ Ok(if status { Some(value) } else { None })
+ }
+}
crates/evm-coder/src/abi/test.rsdiffbeforeafterboth--- a/crates/evm-coder/src/abi/test.rs
+++ b/crates/evm-coder/src/abi/test.rs
@@ -538,3 +538,68 @@
assert_eq!(p1, 0x0a);
assert_eq!(p2, 0x0b);
}
+
+#[test]
+fn encode_decode_option_uint8_some() {
+ test_impl::<Option<u8>>(
+ 0xdeadbeef,
+ Some(44),
+ &hex!(
+ "
+ deadbeef
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 000000000000000000000000000000000000000000000000000000000000002c
+ "
+ ),
+ );
+}
+
+#[test]
+fn encode_decode_option_uint8_none() {
+ test_impl::<Option<u8>>(
+ 0xdeadbeef,
+ None,
+ &hex!(
+ "
+ deadbeef
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ "
+ ),
+ );
+}
+
+#[test]
+fn encode_decode_option_string_some() {
+ test_impl::<Option<String>>(
+ 0xdeadbeef,
+ Some("some string".to_string()),
+ &hex!(
+ "
+ deadbeef
+ 0000000000000000000000000000000000000000000000000000000000000020
+ 0000000000000000000000000000000000000000000000000000000000000001
+ 0000000000000000000000000000000000000000000000000000000000000040
+ 000000000000000000000000000000000000000000000000000000000000000b
+ 736f6d6520737472696e67000000000000000000000000000000000000000000
+ "
+ ),
+ );
+}
+
+#[test]
+fn encode_decode_option_string_none() {
+ test_impl::<Option<String>>(
+ 0xdeadbeef,
+ None,
+ &hex!(
+ "
+ deadbeef
+ 0000000000000000000000000000000000000000000000000000000000000020
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000040
+ 0000000000000000000000000000000000000000000000000000000000000000
+ "
+ ),
+ );
+}
crates/evm-coder/src/solidity/impls.rsdiffbeforeafterboth--- a/crates/evm-coder/src/solidity/impls.rs
+++ b/crates/evm-coder/src/solidity/impls.rs
@@ -121,3 +121,59 @@
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}
+
+//----- impls for Option -----
+impl<T: SolidityTypeName + 'static> SolidityTypeName for Option<T> {
+ 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>())?;
+ bool::solidity_default(writer, tc)?;
+ write!(writer, ", ");
+ T::solidity_default(writer, tc)?;
+ write!(writer, ")")
+ }
+}
+
+impl<T: SolidityTypeName> super::SolidityStructTy for Option<T> {
+ fn generate_solidity_interface(tc: &TypeCollector) -> String {
+ let mut solidity_name = "Option".to_string();
+ let mut generic_name = String::new();
+ T::solidity_name(&mut generic_name, tc);
+ solidity_name.push(
+ generic_name
+ .chars()
+ .next()
+ .expect("Generic name is empty")
+ .to_ascii_uppercase(),
+ );
+ solidity_name.push_str(&generic_name[1..]);
+
+ let interface = super::SolidityStruct {
+ docs: &[" Optional value"],
+ name: solidity_name.as_str(),
+ fields: (
+ super::SolidityStructField::<bool> {
+ docs: &[" Shows the status of accessibility of value"],
+ name: "status",
+ ty: ::core::marker::PhantomData,
+ },
+ super::SolidityStructField::<T> {
+ docs: &[" Actual value if `status` is true"],
+ name: "value",
+ ty: ::core::marker::PhantomData,
+ },
+ ),
+ };
+
+ let mut out = String::new();
+ let _ = interface.format(&mut out, tc);
+ tc.collect(out);
+
+ solidity_name.to_string()
+ }
+}
crates/evm-coder/src/solidity/mod.rsdiffbeforeafterboth--- a/crates/evm-coder/src/solidity/mod.rs
+++ b/crates/evm-coder/src/solidity/mod.rs
@@ -456,13 +456,13 @@
Ok(())
}
}
-pub struct SolidityStruct<F> {
- pub docs: &'static [&'static str],
+pub struct SolidityStruct<'a, F> {
+ pub docs: &'a [&'a str],
// pub generics:
- pub name: &'static str,
+ pub name: &'a str,
pub fields: F,
}
-impl<F> SolidityStruct<F>
+impl<F> SolidityStruct<'_, F>
where
F: SolidityItems,
{
pallets/common/src/erc.rsdiffbeforeafterboth--- a/pallets/common/src/erc.rs
+++ b/pallets/common/src/erc.rs
@@ -284,6 +284,11 @@
fn collection_limits(&self) -> Result<Vec<eth::CollectionLimit>> {
let limits = &self.collection.limits;
+ let convert_value_from_bool = |ob: Option<bool>| match ob {
+ Some(b) => Some(b as u32),
+ None => None,
+ };
+
Ok(vec![
eth::CollectionLimit::new(
eth::CollectionLimitField::AccountTokenOwnership,
@@ -297,15 +302,15 @@
.sponsored_data_rate_limit
.and_then(|limit| {
if let SponsoringRateLimit::Blocks(blocks) = limit {
- Some(eth::CollectionLimit::new::<u32>(
+ Some(eth::CollectionLimit::new(
eth::CollectionLimitField::SponsoredDataRateLimit,
- blocks,
+ Some(blocks),
))
} else {
None
}
})
- .unwrap_or(eth::CollectionLimit::new::<u32>(
+ .unwrap_or(eth::CollectionLimit::new(
eth::CollectionLimitField::SponsoredDataRateLimit,
Default::default(),
)),
@@ -320,15 +325,15 @@
),
eth::CollectionLimit::new(
eth::CollectionLimitField::OwnerCanTransfer,
- limits.owner_can_transfer,
+ convert_value_from_bool(limits.owner_can_transfer),
),
eth::CollectionLimit::new(
eth::CollectionLimitField::OwnerCanDestroy,
- limits.owner_can_destroy,
+ convert_value_from_bool(limits.owner_can_destroy),
),
eth::CollectionLimit::new(
eth::CollectionLimitField::TransferEnabled,
- limits.transfers_enabled,
+ convert_value_from_bool(limits.transfers_enabled),
),
])
}
pallets/common/src/eth.rsdiffbeforeafterboth--- a/pallets/common/src/eth.rs
+++ b/pallets/common/src/eth.rs
@@ -66,71 +66,6 @@
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<bool> for OptionUint {
- fn from(value: bool) -> Self {
- Self {
- status: true,
- value: if value {
- uint256::from(1)
- } else {
- Default::default()
- },
- }
- }
-}
-
-impl From<Option<bool>> for OptionUint {
- fn from(value: Option<bool>) -> Self {
- match value {
- Some(value) => Self::from(value),
- None => Self {
- status: false,
- value: Default::default(),
- },
- }
- }
-}
-
-/// Ethereum representation of Optional value with CrossAddress.
-#[derive(Debug, Default, AbiCoder)]
-pub struct OptionCrossAddress {
- /// Whether or not this CrossAdress is valid and has meaning.
- pub status: bool,
- /// The underlying CrossAddress value. If the status is false, can be set to whatever.
- pub value: CrossAddress,
-}
-
/// Cross account struct
#[derive(Debug, Default, AbiCoder)]
pub struct CrossAddress {
@@ -252,23 +187,23 @@
#[derive(Debug, Default, AbiCoder)]
pub struct CollectionLimit {
field: CollectionLimitField,
- value: OptionUint,
+ value: Option<uint256>,
}
impl CollectionLimit {
/// Create [`CollectionLimit`] from field and value.
- pub fn new<T>(field: CollectionLimitField, value: T) -> Self
- where
- OptionUint: From<T>,
- {
+ pub fn new(field: CollectionLimitField, value: Option<u32>) -> Self {
Self {
field,
- value: value.into(),
+ value: match value {
+ Some(value) => Some(value.into()),
+ None => None,
+ },
}
}
/// Whether the field contains a value.
pub fn has_value(&self) -> bool {
- self.value.status
+ self.value.is_some()
}
}
@@ -276,52 +211,60 @@
type Error = evm_coder::execution::Error;
fn try_into(self) -> Result<up_data_structs::CollectionLimits, Self::Error> {
- let value = self.value.value.try_into().map_err(|error| {
+ let value = self
+ .value
+ .ok_or::<Self::Error>("can't convert `None` value to boolean".into())?;
+ let value = Some(value.try_into().map_err(|error| {
Self::Error::Revert(format!(
"can't convert value to u32 \"{}\" because: \"{error}\"",
- self.value.value
+ value
))
- })?;
+ })?);
let convert_value_to_bool = || match value {
- 0 => Ok(false),
- 1 => Ok(true),
- _ => {
- return Err(Self::Error::Revert(format!(
- "can't convert value to boolean \"{value}\""
- )))
- }
+ Some(value) => match value {
+ 0 => Ok(Some(false)),
+ 1 => Ok(Some(true)),
+ _ => {
+ return Err(Self::Error::Revert(format!(
+ "can't convert value to boolean \"{value}\""
+ )))
+ }
+ },
+ None => Ok(None),
};
let mut limits = up_data_structs::CollectionLimits::default();
match self.field {
CollectionLimitField::AccountTokenOwnership => {
- limits.account_token_ownership_limit = Some(value);
+ limits.account_token_ownership_limit = value;
}
CollectionLimitField::SponsoredDataSize => {
- limits.sponsored_data_size = Some(value);
+ limits.sponsored_data_size = value;
}
CollectionLimitField::SponsoredDataRateLimit => {
- limits.sponsored_data_rate_limit =
- Some(up_data_structs::SponsoringRateLimit::Blocks(value));
+ limits.sponsored_data_rate_limit = match value {
+ Some(value) => Some(up_data_structs::SponsoringRateLimit::Blocks(value)),
+ None => None,
+ };
}
CollectionLimitField::TokenLimit => {
- limits.token_limit = Some(value);
+ limits.token_limit = value;
}
CollectionLimitField::SponsorTransferTimeout => {
- limits.sponsor_transfer_timeout = Some(value);
+ limits.sponsor_transfer_timeout = value;
}
CollectionLimitField::SponsorApproveTimeout => {
- limits.sponsor_approve_timeout = Some(value);
+ limits.sponsor_approve_timeout = value;
}
CollectionLimitField::OwnerCanTransfer => {
- limits.owner_can_transfer = Some(convert_value_to_bool()?);
+ limits.owner_can_transfer = convert_value_to_bool()?;
}
CollectionLimitField::OwnerCanDestroy => {
- limits.owner_can_destroy = Some(convert_value_to_bool()?);
+ limits.owner_can_destroy = convert_value_to_bool()?;
}
CollectionLimitField::TransferEnabled => {
- limits.transfers_enabled = Some(convert_value_to_bool()?);
+ limits.transfers_enabled = convert_value_to_bool()?;
}
};
Ok(limits)
pallets/evm-contract-helpers/src/eth.rsdiffbeforeafterboth--- a/pallets/evm-contract-helpers/src/eth.rs
+++ b/pallets/evm-contract-helpers/src/eth.rs
@@ -175,16 +175,10 @@
///
/// @param contractAddress The contract for which a sponsor is requested.
/// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.
- fn sponsor(&self, contract_address: address) -> Result<eth::OptionCrossAddress> {
+ fn sponsor(&self, contract_address: address) -> Result<Option<eth::CrossAddress>> {
Ok(match Pallet::<T>::get_sponsor(contract_address) {
- Some(ref value) => eth::OptionCrossAddress {
- status: true,
- value: eth::CrossAddress::from_sub_cross_account::<T>(value),
- },
- None => eth::OptionCrossAddress {
- status: false,
- value: Default::default(),
- },
+ Some(ref value) => Some(eth::CrossAddress::from_sub_cross_account::<T>(value)),
+ None => None,
})
}
pallets/evm-contract-helpers/src/stubs/ContractHelpers.rawdiffbeforeafterbothbinary blob — no preview
pallets/evm-contract-helpers/src/stubs/ContractHelpers.soldiffbeforeafterboth--- a/pallets/evm-contract-helpers/src/stubs/ContractHelpers.sol
+++ b/pallets/evm-contract-helpers/src/stubs/ContractHelpers.sol
@@ -281,10 +281,10 @@
uint256 sub;
}
-/// Ethereum representation of Optional value with CrossAddress.
+/// Optional value
struct OptionCrossAddress {
- /// Whether or not this CrossAdress is valid and has meaning.
+ /// Shows the status of accessibility of value
bool status;
- /// The underlying CrossAddress value. If the status is false, can be set to whatever.
+ /// Actual value if `status` is true
CrossAddress 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
@@ -466,12 +466,14 @@
/// [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.
struct CollectionLimit {
CollectionLimitField field;
- OptionUint value;
+ OptionUint256 value;
}
-/// Ethereum representation of Optional value with uint256.
-struct OptionUint {
+/// Optional value
+struct OptionUint256 {
+ /// Shows the status of accessibility of value
bool status;
+ /// Actual value if `status` is true
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
@@ -608,12 +608,14 @@
/// [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.
struct CollectionLimit {
CollectionLimitField field;
- OptionUint value;
+ OptionUint256 value;
}
-/// Ethereum representation of Optional value with uint256.
-struct OptionUint {
+/// Optional value
+struct OptionUint256 {
+ /// Shows the status of accessibility of value
bool status;
+ /// Actual value if `status` is true
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
@@ -608,12 +608,14 @@
/// [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.
struct CollectionLimit {
CollectionLimitField field;
- OptionUint value;
+ OptionUint256 value;
}
-/// Ethereum representation of Optional value with uint256.
-struct OptionUint {
+/// Optional value
+struct OptionUint256 {
+ /// Shows the status of accessibility of value
bool status;
+ /// Actual value if `status` is true
uint256 value;
}
runtime/common/identity.rsdiffbeforeafterboth--- a/runtime/common/identity.rs
+++ b/runtime/common/identity.rs
@@ -24,9 +24,6 @@
transaction_validity::{TransactionValidity, ValidTransaction, TransactionValidityError},
};
-#[cfg(feature = "collator-selection")]
-use sp_runtime::transaction_validity::InvalidTransaction;
-
#[derive(Debug, Encode, Decode, PartialEq, Eq, Clone, TypeInfo)]
pub struct DisableIdentityCalls;
tests/src/eth/abi/fungible.jsondiffbeforeafterboth--- a/tests/src/eth/abi/fungible.json
+++ b/tests/src/eth/abi/fungible.json
@@ -222,7 +222,7 @@
{ "internalType": "bool", "name": "status", "type": "bool" },
{ "internalType": "uint256", "name": "value", "type": "uint256" }
],
- "internalType": "struct OptionUint",
+ "internalType": "struct OptionUint256",
"name": "value",
"type": "tuple"
}
@@ -508,7 +508,7 @@
{ "internalType": "bool", "name": "status", "type": "bool" },
{ "internalType": "uint256", "name": "value", "type": "uint256" }
],
- "internalType": "struct OptionUint",
+ "internalType": "struct OptionUint256",
"name": "value",
"type": "tuple"
}
tests/src/eth/abi/fungibleDeprecated.jsondiffbeforeafterboth--- a/tests/src/eth/abi/fungibleDeprecated.json
+++ b/tests/src/eth/abi/fungibleDeprecated.json
@@ -88,14 +88,5 @@
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
- },
- {
- "inputs": [
- { "internalType": "address", "name": "newOwner", "type": "address" }
- ],
- "name": "changeCollectionOwner",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
}
]
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 CrossAddress",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 CrossAddress",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 CrossAddress",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 CrossAddress",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 CrossAddress",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 CrossAddress",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 CrossAddress[]",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 CollectionLimitField",247 "name": "field",248 "type": "uint8"249 },250 {251 "components": [252 { "internalType": "bool", "name": "status", "type": "bool" },253 { "internalType": "uint256", "name": "value", "type": "uint256" }254 ],255 "internalType": "struct OptionUint",256 "name": "value",257 "type": "tuple"258 }259 ],260 "internalType": "struct CollectionLimit[]",261 "name": "",262 "type": "tuple[]"263 }264 ],265 "stateMutability": "view",266 "type": "function"267 },268 {269 "inputs": [],270 "name": "collectionNestingPermissions",271 "outputs": [272 {273 "components": [274 {275 "internalType": "enum CollectionPermissionField",276 "name": "field",277 "type": "uint8"278 },279 { "internalType": "bool", "name": "value", "type": "bool" }280 ],281 "internalType": "struct CollectionNestingPermission[]",282 "name": "",283 "type": "tuple[]"284 }285 ],286 "stateMutability": "view",287 "type": "function"288 },289 {290 "inputs": [],291 "name": "collectionNestingRestrictedCollectionIds",292 "outputs": [293 {294 "components": [295 { "internalType": "bool", "name": "token_owner", "type": "bool" },296 { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }297 ],298 "internalType": "struct CollectionNesting",299 "name": "",300 "type": "tuple"301 }302 ],303 "stateMutability": "view",304 "type": "function"305 },306 {307 "inputs": [],308 "name": "collectionOwner",309 "outputs": [310 {311 "components": [312 { "internalType": "address", "name": "eth", "type": "address" },313 { "internalType": "uint256", "name": "sub", "type": "uint256" }314 ],315 "internalType": "struct CrossAddress",316 "name": "",317 "type": "tuple"318 }319 ],320 "stateMutability": "view",321 "type": "function"322 },323 {324 "inputs": [325 { "internalType": "string[]", "name": "keys", "type": "string[]" }326 ],327 "name": "collectionProperties",328 "outputs": [329 {330 "components": [331 { "internalType": "string", "name": "key", "type": "string" },332 { "internalType": "bytes", "name": "value", "type": "bytes" }333 ],334 "internalType": "struct Property[]",335 "name": "",336 "type": "tuple[]"337 }338 ],339 "stateMutability": "view",340 "type": "function"341 },342 {343 "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],344 "name": "collectionProperty",345 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],346 "stateMutability": "view",347 "type": "function"348 },349 {350 "inputs": [],351 "name": "collectionSponsor",352 "outputs": [353 {354 "components": [355 { "internalType": "address", "name": "eth", "type": "address" },356 { "internalType": "uint256", "name": "sub", "type": "uint256" }357 ],358 "internalType": "struct CrossAddress",359 "name": "",360 "type": "tuple"361 }362 ],363 "stateMutability": "view",364 "type": "function"365 },366 {367 "inputs": [],368 "name": "confirmCollectionSponsorship",369 "outputs": [],370 "stateMutability": "nonpayable",371 "type": "function"372 },373 {374 "inputs": [],375 "name": "contractAddress",376 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],377 "stateMutability": "view",378 "type": "function"379 },380 {381 "inputs": [382 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }383 ],384 "name": "crossOwnerOf",385 "outputs": [386 {387 "components": [388 { "internalType": "address", "name": "eth", "type": "address" },389 { "internalType": "uint256", "name": "sub", "type": "uint256" }390 ],391 "internalType": "struct CrossAddress",392 "name": "",393 "type": "tuple"394 }395 ],396 "stateMutability": "view",397 "type": "function"398 },399 {400 "inputs": [401 { "internalType": "string[]", "name": "keys", "type": "string[]" }402 ],403 "name": "deleteCollectionProperties",404 "outputs": [],405 "stateMutability": "nonpayable",406 "type": "function"407 },408 {409 "inputs": [410 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },411 { "internalType": "string[]", "name": "keys", "type": "string[]" }412 ],413 "name": "deleteProperties",414 "outputs": [],415 "stateMutability": "nonpayable",416 "type": "function"417 },418 {419 "inputs": [],420 "name": "description",421 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],422 "stateMutability": "view",423 "type": "function"424 },425 {426 "inputs": [],427 "name": "finishMinting",428 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],429 "stateMutability": "nonpayable",430 "type": "function"431 },432 {433 "inputs": [434 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }435 ],436 "name": "getApproved",437 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],438 "stateMutability": "view",439 "type": "function"440 },441 {442 "inputs": [],443 "name": "hasCollectionPendingSponsor",444 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],445 "stateMutability": "view",446 "type": "function"447 },448 {449 "inputs": [450 { "internalType": "address", "name": "owner", "type": "address" },451 { "internalType": "address", "name": "operator", "type": "address" }452 ],453 "name": "isApprovedForAll",454 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],455 "stateMutability": "view",456 "type": "function"457 },458 {459 "inputs": [460 {461 "components": [462 { "internalType": "address", "name": "eth", "type": "address" },463 { "internalType": "uint256", "name": "sub", "type": "uint256" }464 ],465 "internalType": "struct CrossAddress",466 "name": "user",467 "type": "tuple"468 }469 ],470 "name": "isOwnerOrAdminCross",471 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],472 "stateMutability": "view",473 "type": "function"474 },475 {476 "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],477 "name": "mint",478 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],479 "stateMutability": "nonpayable",480 "type": "function"481 },482 {483 "inputs": [484 {485 "components": [486 { "internalType": "address", "name": "eth", "type": "address" },487 { "internalType": "uint256", "name": "sub", "type": "uint256" }488 ],489 "internalType": "struct CrossAddress",490 "name": "to",491 "type": "tuple"492 },493 {494 "components": [495 { "internalType": "string", "name": "key", "type": "string" },496 { "internalType": "bytes", "name": "value", "type": "bytes" }497 ],498 "internalType": "struct Property[]",499 "name": "properties",500 "type": "tuple[]"501 }502 ],503 "name": "mintCross",504 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],505 "stateMutability": "nonpayable",506 "type": "function"507 },508 {509 "inputs": [510 { "internalType": "address", "name": "to", "type": "address" },511 { "internalType": "string", "name": "tokenUri", "type": "string" }512 ],513 "name": "mintWithTokenURI",514 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],515 "stateMutability": "nonpayable",516 "type": "function"517 },518 {519 "inputs": [],520 "name": "mintingFinished",521 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],522 "stateMutability": "view",523 "type": "function"524 },525 {526 "inputs": [],527 "name": "name",528 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],529 "stateMutability": "view",530 "type": "function"531 },532 {533 "inputs": [],534 "name": "nextTokenId",535 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],536 "stateMutability": "view",537 "type": "function"538 },539 {540 "inputs": [541 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }542 ],543 "name": "ownerOf",544 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],545 "stateMutability": "view",546 "type": "function"547 },548 {549 "inputs": [550 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },551 { "internalType": "string[]", "name": "keys", "type": "string[]" }552 ],553 "name": "properties",554 "outputs": [555 {556 "components": [557 { "internalType": "string", "name": "key", "type": "string" },558 { "internalType": "bytes", "name": "value", "type": "bytes" }559 ],560 "internalType": "struct Property[]",561 "name": "",562 "type": "tuple[]"563 }564 ],565 "stateMutability": "view",566 "type": "function"567 },568 {569 "inputs": [570 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },571 { "internalType": "string", "name": "key", "type": "string" }572 ],573 "name": "property",574 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],575 "stateMutability": "view",576 "type": "function"577 },578 {579 "inputs": [580 {581 "components": [582 { "internalType": "address", "name": "eth", "type": "address" },583 { "internalType": "uint256", "name": "sub", "type": "uint256" }584 ],585 "internalType": "struct CrossAddress",586 "name": "admin",587 "type": "tuple"588 }589 ],590 "name": "removeCollectionAdminCross",591 "outputs": [],592 "stateMutability": "nonpayable",593 "type": "function"594 },595 {596 "inputs": [],597 "name": "removeCollectionSponsor",598 "outputs": [],599 "stateMutability": "nonpayable",600 "type": "function"601 },602 {603 "inputs": [604 {605 "components": [606 { "internalType": "address", "name": "eth", "type": "address" },607 { "internalType": "uint256", "name": "sub", "type": "uint256" }608 ],609 "internalType": "struct CrossAddress",610 "name": "user",611 "type": "tuple"612 }613 ],614 "name": "removeFromCollectionAllowListCross",615 "outputs": [],616 "stateMutability": "nonpayable",617 "type": "function"618 },619 {620 "inputs": [621 { "internalType": "address", "name": "from", "type": "address" },622 { "internalType": "address", "name": "to", "type": "address" },623 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }624 ],625 "name": "safeTransferFrom",626 "outputs": [],627 "stateMutability": "nonpayable",628 "type": "function"629 },630 {631 "inputs": [632 { "internalType": "address", "name": "from", "type": "address" },633 { "internalType": "address", "name": "to", "type": "address" },634 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },635 { "internalType": "bytes", "name": "data", "type": "bytes" }636 ],637 "name": "safeTransferFrom",638 "outputs": [],639 "stateMutability": "nonpayable",640 "type": "function"641 },642 {643 "inputs": [644 { "internalType": "address", "name": "operator", "type": "address" },645 { "internalType": "bool", "name": "approved", "type": "bool" }646 ],647 "name": "setApprovalForAll",648 "outputs": [],649 "stateMutability": "nonpayable",650 "type": "function"651 },652 {653 "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],654 "name": "setCollectionAccess",655 "outputs": [],656 "stateMutability": "nonpayable",657 "type": "function"658 },659 {660 "inputs": [661 {662 "components": [663 {664 "internalType": "enum CollectionLimitField",665 "name": "field",666 "type": "uint8"667 },668 {669 "components": [670 { "internalType": "bool", "name": "status", "type": "bool" },671 { "internalType": "uint256", "name": "value", "type": "uint256" }672 ],673 "internalType": "struct OptionUint",674 "name": "value",675 "type": "tuple"676 }677 ],678 "internalType": "struct CollectionLimit",679 "name": "limit",680 "type": "tuple"681 }682 ],683 "name": "setCollectionLimit",684 "outputs": [],685 "stateMutability": "nonpayable",686 "type": "function"687 },688 {689 "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],690 "name": "setCollectionMintMode",691 "outputs": [],692 "stateMutability": "nonpayable",693 "type": "function"694 },695 {696 "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],697 "name": "setCollectionNesting",698 "outputs": [],699 "stateMutability": "nonpayable",700 "type": "function"701 },702 {703 "inputs": [704 { "internalType": "bool", "name": "enable", "type": "bool" },705 {706 "internalType": "address[]",707 "name": "collections",708 "type": "address[]"709 }710 ],711 "name": "setCollectionNesting",712 "outputs": [],713 "stateMutability": "nonpayable",714 "type": "function"715 },716 {717 "inputs": [718 {719 "components": [720 { "internalType": "string", "name": "key", "type": "string" },721 { "internalType": "bytes", "name": "value", "type": "bytes" }722 ],723 "internalType": "struct Property[]",724 "name": "properties",725 "type": "tuple[]"726 }727 ],728 "name": "setCollectionProperties",729 "outputs": [],730 "stateMutability": "nonpayable",731 "type": "function"732 },733 {734 "inputs": [735 {736 "components": [737 { "internalType": "address", "name": "eth", "type": "address" },738 { "internalType": "uint256", "name": "sub", "type": "uint256" }739 ],740 "internalType": "struct CrossAddress",741 "name": "sponsor",742 "type": "tuple"743 }744 ],745 "name": "setCollectionSponsorCross",746 "outputs": [],747 "stateMutability": "nonpayable",748 "type": "function"749 },750 {751 "inputs": [752 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },753 {754 "components": [755 { "internalType": "string", "name": "key", "type": "string" },756 { "internalType": "bytes", "name": "value", "type": "bytes" }757 ],758 "internalType": "struct Property[]",759 "name": "properties",760 "type": "tuple[]"761 }762 ],763 "name": "setProperties",764 "outputs": [],765 "stateMutability": "nonpayable",766 "type": "function"767 },768 {769 "inputs": [770 {771 "components": [772 { "internalType": "string", "name": "key", "type": "string" },773 {774 "components": [775 {776 "internalType": "enum TokenPermissionField",777 "name": "code",778 "type": "uint8"779 },780 { "internalType": "bool", "name": "value", "type": "bool" }781 ],782 "internalType": "struct PropertyPermission[]",783 "name": "permissions",784 "type": "tuple[]"785 }786 ],787 "internalType": "struct TokenPropertyPermission[]",788 "name": "permissions",789 "type": "tuple[]"790 }791 ],792 "name": "setTokenPropertyPermissions",793 "outputs": [],794 "stateMutability": "nonpayable",795 "type": "function"796 },797 {798 "inputs": [799 { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }800 ],801 "name": "supportsInterface",802 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],803 "stateMutability": "view",804 "type": "function"805 },806 {807 "inputs": [],808 "name": "symbol",809 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],810 "stateMutability": "view",811 "type": "function"812 },813 {814 "inputs": [815 { "internalType": "uint256", "name": "index", "type": "uint256" }816 ],817 "name": "tokenByIndex",818 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],819 "stateMutability": "view",820 "type": "function"821 },822 {823 "inputs": [824 { "internalType": "address", "name": "owner", "type": "address" },825 { "internalType": "uint256", "name": "index", "type": "uint256" }826 ],827 "name": "tokenOfOwnerByIndex",828 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],829 "stateMutability": "view",830 "type": "function"831 },832 {833 "inputs": [],834 "name": "tokenPropertyPermissions",835 "outputs": [836 {837 "components": [838 { "internalType": "string", "name": "key", "type": "string" },839 {840 "components": [841 {842 "internalType": "enum TokenPermissionField",843 "name": "code",844 "type": "uint8"845 },846 { "internalType": "bool", "name": "value", "type": "bool" }847 ],848 "internalType": "struct PropertyPermission[]",849 "name": "permissions",850 "type": "tuple[]"851 }852 ],853 "internalType": "struct TokenPropertyPermission[]",854 "name": "",855 "type": "tuple[]"856 }857 ],858 "stateMutability": "view",859 "type": "function"860 },861 {862 "inputs": [863 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }864 ],865 "name": "tokenURI",866 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],867 "stateMutability": "view",868 "type": "function"869 },870 {871 "inputs": [],872 "name": "totalSupply",873 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],874 "stateMutability": "view",875 "type": "function"876 },877 {878 "inputs": [879 { "internalType": "address", "name": "to", "type": "address" },880 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }881 ],882 "name": "transfer",883 "outputs": [],884 "stateMutability": "nonpayable",885 "type": "function"886 },887 {888 "inputs": [889 {890 "components": [891 { "internalType": "address", "name": "eth", "type": "address" },892 { "internalType": "uint256", "name": "sub", "type": "uint256" }893 ],894 "internalType": "struct CrossAddress",895 "name": "to",896 "type": "tuple"897 },898 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }899 ],900 "name": "transferCross",901 "outputs": [],902 "stateMutability": "nonpayable",903 "type": "function"904 },905 {906 "inputs": [907 { "internalType": "address", "name": "from", "type": "address" },908 { "internalType": "address", "name": "to", "type": "address" },909 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }910 ],911 "name": "transferFrom",912 "outputs": [],913 "stateMutability": "nonpayable",914 "type": "function"915 },916 {917 "inputs": [918 {919 "components": [920 { "internalType": "address", "name": "eth", "type": "address" },921 { "internalType": "uint256", "name": "sub", "type": "uint256" }922 ],923 "internalType": "struct CrossAddress",924 "name": "from",925 "type": "tuple"926 },927 {928 "components": [929 { "internalType": "address", "name": "eth", "type": "address" },930 { "internalType": "uint256", "name": "sub", "type": "uint256" }931 ],932 "internalType": "struct CrossAddress",933 "name": "to",934 "type": "tuple"935 },936 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }937 ],938 "name": "transferFromCross",939 "outputs": [],940 "stateMutability": "nonpayable",941 "type": "function"942 },943 {944 "inputs": [],945 "name": "uniqueCollectionType",946 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],947 "stateMutability": "view",948 "type": "function"949 }950]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 {56 "indexed": true,57 "internalType": "address",58 "name": "from",59 "type": "address"60 },61 {62 "indexed": true,63 "internalType": "address",64 "name": "to",65 "type": "address"66 },67 {68 "indexed": true,69 "internalType": "uint256",70 "name": "tokenId",71 "type": "uint256"72 }73 ],74 "name": "Transfer",75 "type": "event"76 },77 {78 "inputs": [79 {80 "components": [81 { "internalType": "address", "name": "eth", "type": "address" },82 { "internalType": "uint256", "name": "sub", "type": "uint256" }83 ],84 "internalType": "struct CrossAddress",85 "name": "newAdmin",86 "type": "tuple"87 }88 ],89 "name": "addCollectionAdminCross",90 "outputs": [],91 "stateMutability": "nonpayable",92 "type": "function"93 },94 {95 "inputs": [96 {97 "components": [98 { "internalType": "address", "name": "eth", "type": "address" },99 { "internalType": "uint256", "name": "sub", "type": "uint256" }100 ],101 "internalType": "struct CrossAddress",102 "name": "user",103 "type": "tuple"104 }105 ],106 "name": "addToCollectionAllowListCross",107 "outputs": [],108 "stateMutability": "nonpayable",109 "type": "function"110 },111 {112 "inputs": [113 {114 "components": [115 { "internalType": "address", "name": "eth", "type": "address" },116 { "internalType": "uint256", "name": "sub", "type": "uint256" }117 ],118 "internalType": "struct CrossAddress",119 "name": "user",120 "type": "tuple"121 }122 ],123 "name": "allowlistedCross",124 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],125 "stateMutability": "view",126 "type": "function"127 },128 {129 "inputs": [130 { "internalType": "address", "name": "approved", "type": "address" },131 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }132 ],133 "name": "approve",134 "outputs": [],135 "stateMutability": "nonpayable",136 "type": "function"137 },138 {139 "inputs": [140 {141 "components": [142 { "internalType": "address", "name": "eth", "type": "address" },143 { "internalType": "uint256", "name": "sub", "type": "uint256" }144 ],145 "internalType": "struct CrossAddress",146 "name": "approved",147 "type": "tuple"148 },149 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }150 ],151 "name": "approveCross",152 "outputs": [],153 "stateMutability": "nonpayable",154 "type": "function"155 },156 {157 "inputs": [158 { "internalType": "address", "name": "owner", "type": "address" }159 ],160 "name": "balanceOf",161 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],162 "stateMutability": "view",163 "type": "function"164 },165 {166 "inputs": [167 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }168 ],169 "name": "burn",170 "outputs": [],171 "stateMutability": "nonpayable",172 "type": "function"173 },174 {175 "inputs": [176 {177 "components": [178 { "internalType": "address", "name": "eth", "type": "address" },179 { "internalType": "uint256", "name": "sub", "type": "uint256" }180 ],181 "internalType": "struct CrossAddress",182 "name": "from",183 "type": "tuple"184 },185 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }186 ],187 "name": "burnFromCross",188 "outputs": [],189 "stateMutability": "nonpayable",190 "type": "function"191 },192 {193 "inputs": [194 {195 "components": [196 { "internalType": "address", "name": "eth", "type": "address" },197 { "internalType": "uint256", "name": "sub", "type": "uint256" }198 ],199 "internalType": "struct CrossAddress",200 "name": "newOwner",201 "type": "tuple"202 }203 ],204 "name": "changeCollectionOwnerCross",205 "outputs": [],206 "stateMutability": "nonpayable",207 "type": "function"208 },209 {210 "inputs": [],211 "name": "collectionAdmins",212 "outputs": [213 {214 "components": [215 { "internalType": "address", "name": "eth", "type": "address" },216 { "internalType": "uint256", "name": "sub", "type": "uint256" }217 ],218 "internalType": "struct CrossAddress[]",219 "name": "",220 "type": "tuple[]"221 }222 ],223 "stateMutability": "view",224 "type": "function"225 },226 {227 "inputs": [],228 "name": "collectionHelperAddress",229 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],230 "stateMutability": "view",231 "type": "function"232 },233 {234 "inputs": [],235 "name": "collectionLimits",236 "outputs": [237 {238 "components": [239 {240 "internalType": "enum CollectionLimitField",241 "name": "field",242 "type": "uint8"243 },244 {245 "components": [246 { "internalType": "bool", "name": "status", "type": "bool" },247 { "internalType": "uint256", "name": "value", "type": "uint256" }248 ],249 "internalType": "struct OptionUint256",250 "name": "value",251 "type": "tuple"252 }253 ],254 "internalType": "struct CollectionLimit[]",255 "name": "",256 "type": "tuple[]"257 }258 ],259 "stateMutability": "view",260 "type": "function"261 },262 {263 "inputs": [],264 "name": "collectionNestingPermissions",265 "outputs": [266 {267 "components": [268 {269 "internalType": "enum CollectionPermissionField",270 "name": "field",271 "type": "uint8"272 },273 { "internalType": "bool", "name": "value", "type": "bool" }274 ],275 "internalType": "struct CollectionNestingPermission[]",276 "name": "",277 "type": "tuple[]"278 }279 ],280 "stateMutability": "view",281 "type": "function"282 },283 {284 "inputs": [],285 "name": "collectionNestingRestrictedCollectionIds",286 "outputs": [287 {288 "components": [289 { "internalType": "bool", "name": "token_owner", "type": "bool" },290 { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }291 ],292 "internalType": "struct CollectionNesting",293 "name": "",294 "type": "tuple"295 }296 ],297 "stateMutability": "view",298 "type": "function"299 },300 {301 "inputs": [],302 "name": "collectionOwner",303 "outputs": [304 {305 "components": [306 { "internalType": "address", "name": "eth", "type": "address" },307 { "internalType": "uint256", "name": "sub", "type": "uint256" }308 ],309 "internalType": "struct CrossAddress",310 "name": "",311 "type": "tuple"312 }313 ],314 "stateMutability": "view",315 "type": "function"316 },317 {318 "inputs": [319 { "internalType": "string[]", "name": "keys", "type": "string[]" }320 ],321 "name": "collectionProperties",322 "outputs": [323 {324 "components": [325 { "internalType": "string", "name": "key", "type": "string" },326 { "internalType": "bytes", "name": "value", "type": "bytes" }327 ],328 "internalType": "struct Property[]",329 "name": "",330 "type": "tuple[]"331 }332 ],333 "stateMutability": "view",334 "type": "function"335 },336 {337 "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],338 "name": "collectionProperty",339 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],340 "stateMutability": "view",341 "type": "function"342 },343 {344 "inputs": [],345 "name": "collectionSponsor",346 "outputs": [347 {348 "components": [349 { "internalType": "address", "name": "eth", "type": "address" },350 { "internalType": "uint256", "name": "sub", "type": "uint256" }351 ],352 "internalType": "struct CrossAddress",353 "name": "",354 "type": "tuple"355 }356 ],357 "stateMutability": "view",358 "type": "function"359 },360 {361 "inputs": [],362 "name": "confirmCollectionSponsorship",363 "outputs": [],364 "stateMutability": "nonpayable",365 "type": "function"366 },367 {368 "inputs": [],369 "name": "contractAddress",370 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],371 "stateMutability": "view",372 "type": "function"373 },374 {375 "inputs": [376 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }377 ],378 "name": "crossOwnerOf",379 "outputs": [380 {381 "components": [382 { "internalType": "address", "name": "eth", "type": "address" },383 { "internalType": "uint256", "name": "sub", "type": "uint256" }384 ],385 "internalType": "struct CrossAddress",386 "name": "",387 "type": "tuple"388 }389 ],390 "stateMutability": "view",391 "type": "function"392 },393 {394 "inputs": [395 { "internalType": "string[]", "name": "keys", "type": "string[]" }396 ],397 "name": "deleteCollectionProperties",398 "outputs": [],399 "stateMutability": "nonpayable",400 "type": "function"401 },402 {403 "inputs": [404 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },405 { "internalType": "string[]", "name": "keys", "type": "string[]" }406 ],407 "name": "deleteProperties",408 "outputs": [],409 "stateMutability": "nonpayable",410 "type": "function"411 },412 {413 "inputs": [],414 "name": "description",415 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],416 "stateMutability": "view",417 "type": "function"418 },419 {420 "inputs": [421 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }422 ],423 "name": "getApproved",424 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],425 "stateMutability": "view",426 "type": "function"427 },428 {429 "inputs": [],430 "name": "hasCollectionPendingSponsor",431 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],432 "stateMutability": "view",433 "type": "function"434 },435 {436 "inputs": [437 { "internalType": "address", "name": "owner", "type": "address" },438 { "internalType": "address", "name": "operator", "type": "address" }439 ],440 "name": "isApprovedForAll",441 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],442 "stateMutability": "view",443 "type": "function"444 },445 {446 "inputs": [447 {448 "components": [449 { "internalType": "address", "name": "eth", "type": "address" },450 { "internalType": "uint256", "name": "sub", "type": "uint256" }451 ],452 "internalType": "struct CrossAddress",453 "name": "user",454 "type": "tuple"455 }456 ],457 "name": "isOwnerOrAdminCross",458 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],459 "stateMutability": "view",460 "type": "function"461 },462 {463 "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],464 "name": "mint",465 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],466 "stateMutability": "nonpayable",467 "type": "function"468 },469 {470 "inputs": [471 {472 "components": [473 { "internalType": "address", "name": "eth", "type": "address" },474 { "internalType": "uint256", "name": "sub", "type": "uint256" }475 ],476 "internalType": "struct CrossAddress",477 "name": "to",478 "type": "tuple"479 },480 {481 "components": [482 { "internalType": "string", "name": "key", "type": "string" },483 { "internalType": "bytes", "name": "value", "type": "bytes" }484 ],485 "internalType": "struct Property[]",486 "name": "properties",487 "type": "tuple[]"488 }489 ],490 "name": "mintCross",491 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],492 "stateMutability": "nonpayable",493 "type": "function"494 },495 {496 "inputs": [497 { "internalType": "address", "name": "to", "type": "address" },498 { "internalType": "string", "name": "tokenUri", "type": "string" }499 ],500 "name": "mintWithTokenURI",501 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],502 "stateMutability": "nonpayable",503 "type": "function"504 },505 {506 "inputs": [],507 "name": "name",508 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],509 "stateMutability": "view",510 "type": "function"511 },512 {513 "inputs": [],514 "name": "nextTokenId",515 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],516 "stateMutability": "view",517 "type": "function"518 },519 {520 "inputs": [521 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }522 ],523 "name": "ownerOf",524 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],525 "stateMutability": "view",526 "type": "function"527 },528 {529 "inputs": [530 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },531 { "internalType": "string[]", "name": "keys", "type": "string[]" }532 ],533 "name": "properties",534 "outputs": [535 {536 "components": [537 { "internalType": "string", "name": "key", "type": "string" },538 { "internalType": "bytes", "name": "value", "type": "bytes" }539 ],540 "internalType": "struct Property[]",541 "name": "",542 "type": "tuple[]"543 }544 ],545 "stateMutability": "view",546 "type": "function"547 },548 {549 "inputs": [550 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },551 { "internalType": "string", "name": "key", "type": "string" }552 ],553 "name": "property",554 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],555 "stateMutability": "view",556 "type": "function"557 },558 {559 "inputs": [560 {561 "components": [562 { "internalType": "address", "name": "eth", "type": "address" },563 { "internalType": "uint256", "name": "sub", "type": "uint256" }564 ],565 "internalType": "struct CrossAddress",566 "name": "admin",567 "type": "tuple"568 }569 ],570 "name": "removeCollectionAdminCross",571 "outputs": [],572 "stateMutability": "nonpayable",573 "type": "function"574 },575 {576 "inputs": [],577 "name": "removeCollectionSponsor",578 "outputs": [],579 "stateMutability": "nonpayable",580 "type": "function"581 },582 {583 "inputs": [584 {585 "components": [586 { "internalType": "address", "name": "eth", "type": "address" },587 { "internalType": "uint256", "name": "sub", "type": "uint256" }588 ],589 "internalType": "struct CrossAddress",590 "name": "user",591 "type": "tuple"592 }593 ],594 "name": "removeFromCollectionAllowListCross",595 "outputs": [],596 "stateMutability": "nonpayable",597 "type": "function"598 },599 {600 "inputs": [601 { "internalType": "address", "name": "from", "type": "address" },602 { "internalType": "address", "name": "to", "type": "address" },603 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }604 ],605 "name": "safeTransferFrom",606 "outputs": [],607 "stateMutability": "nonpayable",608 "type": "function"609 },610 {611 "inputs": [612 { "internalType": "address", "name": "from", "type": "address" },613 { "internalType": "address", "name": "to", "type": "address" },614 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },615 { "internalType": "bytes", "name": "data", "type": "bytes" }616 ],617 "name": "safeTransferFrom",618 "outputs": [],619 "stateMutability": "nonpayable",620 "type": "function"621 },622 {623 "inputs": [624 { "internalType": "address", "name": "operator", "type": "address" },625 { "internalType": "bool", "name": "approved", "type": "bool" }626 ],627 "name": "setApprovalForAll",628 "outputs": [],629 "stateMutability": "nonpayable",630 "type": "function"631 },632 {633 "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],634 "name": "setCollectionAccess",635 "outputs": [],636 "stateMutability": "nonpayable",637 "type": "function"638 },639 {640 "inputs": [641 {642 "components": [643 {644 "internalType": "enum CollectionLimitField",645 "name": "field",646 "type": "uint8"647 },648 {649 "components": [650 { "internalType": "bool", "name": "status", "type": "bool" },651 { "internalType": "uint256", "name": "value", "type": "uint256" }652 ],653 "internalType": "struct OptionUint256",654 "name": "value",655 "type": "tuple"656 }657 ],658 "internalType": "struct CollectionLimit",659 "name": "limit",660 "type": "tuple"661 }662 ],663 "name": "setCollectionLimit",664 "outputs": [],665 "stateMutability": "nonpayable",666 "type": "function"667 },668 {669 "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],670 "name": "setCollectionMintMode",671 "outputs": [],672 "stateMutability": "nonpayable",673 "type": "function"674 },675 {676 "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],677 "name": "setCollectionNesting",678 "outputs": [],679 "stateMutability": "nonpayable",680 "type": "function"681 },682 {683 "inputs": [684 { "internalType": "bool", "name": "enable", "type": "bool" },685 {686 "internalType": "address[]",687 "name": "collections",688 "type": "address[]"689 }690 ],691 "name": "setCollectionNesting",692 "outputs": [],693 "stateMutability": "nonpayable",694 "type": "function"695 },696 {697 "inputs": [698 {699 "components": [700 { "internalType": "string", "name": "key", "type": "string" },701 { "internalType": "bytes", "name": "value", "type": "bytes" }702 ],703 "internalType": "struct Property[]",704 "name": "properties",705 "type": "tuple[]"706 }707 ],708 "name": "setCollectionProperties",709 "outputs": [],710 "stateMutability": "nonpayable",711 "type": "function"712 },713 {714 "inputs": [715 {716 "components": [717 { "internalType": "address", "name": "eth", "type": "address" },718 { "internalType": "uint256", "name": "sub", "type": "uint256" }719 ],720 "internalType": "struct CrossAddress",721 "name": "sponsor",722 "type": "tuple"723 }724 ],725 "name": "setCollectionSponsorCross",726 "outputs": [],727 "stateMutability": "nonpayable",728 "type": "function"729 },730 {731 "inputs": [732 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },733 {734 "components": [735 { "internalType": "string", "name": "key", "type": "string" },736 { "internalType": "bytes", "name": "value", "type": "bytes" }737 ],738 "internalType": "struct Property[]",739 "name": "properties",740 "type": "tuple[]"741 }742 ],743 "name": "setProperties",744 "outputs": [],745 "stateMutability": "nonpayable",746 "type": "function"747 },748 {749 "inputs": [750 {751 "components": [752 { "internalType": "string", "name": "key", "type": "string" },753 {754 "components": [755 {756 "internalType": "enum TokenPermissionField",757 "name": "code",758 "type": "uint8"759 },760 { "internalType": "bool", "name": "value", "type": "bool" }761 ],762 "internalType": "struct PropertyPermission[]",763 "name": "permissions",764 "type": "tuple[]"765 }766 ],767 "internalType": "struct TokenPropertyPermission[]",768 "name": "permissions",769 "type": "tuple[]"770 }771 ],772 "name": "setTokenPropertyPermissions",773 "outputs": [],774 "stateMutability": "nonpayable",775 "type": "function"776 },777 {778 "inputs": [779 { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }780 ],781 "name": "supportsInterface",782 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],783 "stateMutability": "view",784 "type": "function"785 },786 {787 "inputs": [],788 "name": "symbol",789 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],790 "stateMutability": "view",791 "type": "function"792 },793 {794 "inputs": [795 { "internalType": "uint256", "name": "index", "type": "uint256" }796 ],797 "name": "tokenByIndex",798 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],799 "stateMutability": "view",800 "type": "function"801 },802 {803 "inputs": [804 { "internalType": "address", "name": "owner", "type": "address" },805 { "internalType": "uint256", "name": "index", "type": "uint256" }806 ],807 "name": "tokenOfOwnerByIndex",808 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],809 "stateMutability": "view",810 "type": "function"811 },812 {813 "inputs": [],814 "name": "tokenPropertyPermissions",815 "outputs": [816 {817 "components": [818 { "internalType": "string", "name": "key", "type": "string" },819 {820 "components": [821 {822 "internalType": "enum TokenPermissionField",823 "name": "code",824 "type": "uint8"825 },826 { "internalType": "bool", "name": "value", "type": "bool" }827 ],828 "internalType": "struct PropertyPermission[]",829 "name": "permissions",830 "type": "tuple[]"831 }832 ],833 "internalType": "struct TokenPropertyPermission[]",834 "name": "",835 "type": "tuple[]"836 }837 ],838 "stateMutability": "view",839 "type": "function"840 },841 {842 "inputs": [843 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }844 ],845 "name": "tokenURI",846 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],847 "stateMutability": "view",848 "type": "function"849 },850 {851 "inputs": [],852 "name": "totalSupply",853 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],854 "stateMutability": "view",855 "type": "function"856 },857 {858 "inputs": [859 { "internalType": "address", "name": "to", "type": "address" },860 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }861 ],862 "name": "transfer",863 "outputs": [],864 "stateMutability": "nonpayable",865 "type": "function"866 },867 {868 "inputs": [869 {870 "components": [871 { "internalType": "address", "name": "eth", "type": "address" },872 { "internalType": "uint256", "name": "sub", "type": "uint256" }873 ],874 "internalType": "struct CrossAddress",875 "name": "to",876 "type": "tuple"877 },878 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }879 ],880 "name": "transferCross",881 "outputs": [],882 "stateMutability": "nonpayable",883 "type": "function"884 },885 {886 "inputs": [887 { "internalType": "address", "name": "from", "type": "address" },888 { "internalType": "address", "name": "to", "type": "address" },889 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }890 ],891 "name": "transferFrom",892 "outputs": [],893 "stateMutability": "nonpayable",894 "type": "function"895 },896 {897 "inputs": [898 {899 "components": [900 { "internalType": "address", "name": "eth", "type": "address" },901 { "internalType": "uint256", "name": "sub", "type": "uint256" }902 ],903 "internalType": "struct CrossAddress",904 "name": "from",905 "type": "tuple"906 },907 {908 "components": [909 { "internalType": "address", "name": "eth", "type": "address" },910 { "internalType": "uint256", "name": "sub", "type": "uint256" }911 ],912 "internalType": "struct CrossAddress",913 "name": "to",914 "type": "tuple"915 },916 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }917 ],918 "name": "transferFromCross",919 "outputs": [],920 "stateMutability": "nonpayable",921 "type": "function"922 },923 {924 "inputs": [],925 "name": "uniqueCollectionType",926 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],927 "stateMutability": "view",928 "type": "function"929 }930]tests/src/eth/abi/reFungible.jsondiffbeforeafterboth--- a/tests/src/eth/abi/reFungible.json
+++ b/tests/src/eth/abi/reFungible.json
@@ -51,12 +51,6 @@
},
{
"anonymous": false,
- "inputs": [],
- "name": "MintingFinished",
- "type": "event"
- },
- {
- "anonymous": false,
"inputs": [
{
"indexed": true,
@@ -234,7 +228,7 @@
{ "internalType": "bool", "name": "status", "type": "bool" },
{ "internalType": "uint256", "name": "value", "type": "uint256" }
],
- "internalType": "struct OptionUint",
+ "internalType": "struct OptionUint256",
"name": "value",
"type": "tuple"
}
@@ -402,13 +396,6 @@
"name": "description",
"outputs": [{ "internalType": "string", "name": "", "type": "string" }],
"stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "finishMinting",
- "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
- "stateMutability": "nonpayable",
"type": "function"
},
{
@@ -495,13 +482,6 @@
"name": "mintWithTokenURI",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "mintingFinished",
- "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
- "stateMutability": "view",
"type": "function"
},
{
@@ -652,7 +632,7 @@
{ "internalType": "bool", "name": "status", "type": "bool" },
{ "internalType": "uint256", "name": "value", "type": "uint256" }
],
- "internalType": "struct OptionUint",
+ "internalType": "struct OptionUint256",
"name": "value",
"type": "tuple"
}
tests/src/eth/abi/reFungibleDeprecated.jsondiffbeforeafterboth--- a/tests/src/eth/abi/reFungibleDeprecated.json
+++ b/tests/src/eth/abi/reFungibleDeprecated.json
@@ -82,6 +82,17 @@
},
{
"inputs": [
+ { "internalType": "uint256", "name": "tokenId", "type": "uint256" },
+ { "internalType": "string", "name": "key", "type": "string" },
+ { "internalType": "bytes", "name": "value", "type": "bytes" }
+ ],
+ "name": "setProperty",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
{ "internalType": "address", "name": "newOwner", "type": "address" }
],
"name": "changeCollectionOwner",
tests/src/eth/abi/reFungibleToken.jsondiffbeforeafterboth--- a/tests/src/eth/abi/reFungibleToken.json
+++ b/tests/src/eth/abi/reFungibleToken.json
@@ -98,16 +98,6 @@
},
{
"inputs": [
- { "internalType": "address", "name": "from", "type": "address" },
- { "internalType": "uint256", "name": "amount", "type": "uint256" }
- ],
- "name": "burnFrom",
- "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
{
"components": [
{ "internalType": "address", "name": "eth", "type": "address" },
tests/src/eth/abi/reFungibleTokenDeprecated.jsondiffbeforeafterboth--- /dev/null
+++ b/tests/src/eth/abi/reFungibleTokenDeprecated.json
@@ -0,0 +1,12 @@
+[
+ {
+ "inputs": [
+ { "internalType": "address", "name": "from", "type": "address" },
+ { "internalType": "uint256", "name": "amount", "type": "uint256" }
+ ],
+ "name": "burnFrom",
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+]
tests/src/eth/api/ContractHelpers.soldiffbeforeafterboth--- a/tests/src/eth/api/ContractHelpers.sol
+++ b/tests/src/eth/api/ContractHelpers.sol
@@ -181,11 +181,11 @@
Generous
}
-/// Ethereum representation of Optional value with CrossAddress.
+/// Optional value
struct OptionCrossAddress {
- /// Whether or not this CrossAdress is valid and has meaning.
+ /// Shows the status of accessibility of value
bool status;
- /// The underlying CrossAddress value. If the status is false, can be set to whatever.
+ /// Actual value if `status` is true
CrossAddress value;
}
tests/src/eth/api/UniqueFungible.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueFungible.sol
+++ b/tests/src/eth/api/UniqueFungible.sol
@@ -308,12 +308,14 @@
/// [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.
struct CollectionLimit {
CollectionLimitField field;
- OptionUint value;
+ OptionUint256 value;
}
-/// Ethereum representation of Optional value with uint256.
-struct OptionUint {
+/// Optional value
+struct OptionUint256 {
+ /// Shows the status of accessibility of value
bool status;
+ /// Actual value if `status` is true
uint256 value;
}
tests/src/eth/api/UniqueNFT.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -408,12 +408,14 @@
/// [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.
struct CollectionLimit {
CollectionLimitField field;
- OptionUint value;
+ OptionUint256 value;
}
-/// Ethereum representation of Optional value with uint256.
-struct OptionUint {
+/// Optional value
+struct OptionUint256 {
+ /// Shows the status of accessibility of value
bool status;
+ /// Actual value if `status` is true
uint256 value;
}
tests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -408,12 +408,14 @@
/// [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM.
struct CollectionLimit {
CollectionLimitField field;
- OptionUint value;
+ OptionUint256 value;
}
-/// Ethereum representation of Optional value with uint256.
-struct OptionUint {
+/// Optional value
+struct OptionUint256 {
+ /// Shows the status of accessibility of value
bool status;
+ /// Actual value if `status` is true
uint256 value;
}
tests/src/eth/reFungible.test.tsdiffbeforeafterboth--- a/tests/src/eth/reFungible.test.ts
+++ b/tests/src/eth/reFungible.test.ts
@@ -213,7 +213,7 @@
const address = helper.ethAddress.fromCollectionId(collection.collectionId);
const contract = await helper.ethNativeContract.collection(address, 'rft');
- const rftToken = await helper.ethNativeContract.rftTokenById(token.collectionId, token.tokenId, owner);
+ const rftToken = await helper.ethNativeContract.rftTokenById(token.collectionId, token.tokenId, owner, true);
{
await rftToken.methods.approve(operator, 15n).send({from: owner});
tests/src/eth/reFungibleToken.test.tsdiffbeforeafterboth--- a/tests/src/eth/reFungibleToken.test.ts
+++ b/tests/src/eth/reFungibleToken.test.ts
@@ -413,7 +413,7 @@
const result = await contract.methods.mint(caller).send();
const tokenId = result.events.Transfer.returnValues.tokenId;
const tokenAddress = helper.ethAddress.fromTokenId(collectionId, tokenId);
- const tokenContract = await helper.ethNativeContract.rftToken(tokenAddress, caller);
+ const tokenContract = await helper.ethNativeContract.rftToken(tokenAddress, caller, true);
await tokenContract.methods.repartition(2).send();
await tokenContract.methods.transfer(receiver, 1).send();
tests/src/eth/util/playgrounds/unique.dev.tsdiffbeforeafterboth--- a/tests/src/eth/util/playgrounds/unique.dev.ts
+++ b/tests/src/eth/util/playgrounds/unique.dev.ts
@@ -29,6 +29,7 @@
import refungibleAbi from '../../abi/reFungible.json';
import refungibleDeprecatedAbi from '../../abi/reFungibleDeprecated.json';
import refungibleTokenAbi from '../../abi/reFungibleToken.json';
+import refungibleTokenDeprecatedAbi from '../../abi/reFungibleTokenDeprecated.json';
import contractHelpersAbi from '../../abi/contractHelpers.json';
import {ICrossAccountId, TEthereumAccount} from '../../../util/playgrounds/types';
import {TCollectionMode} from '../../../util/playgrounds/types';
@@ -187,17 +188,18 @@
return this.collection(this.helper.ethAddress.fromCollectionId(collectionId), mode, caller, mergeDeprecated);
}
- async rftToken(address: string, caller?: string) {
+ async rftToken(address: string, caller?: string, mergeDeprecated = false) {
const web3 = this.helper.getWeb3();
- return unlimitedMoneyHack(new web3.eth.Contract(refungibleTokenAbi as any, address, {
+ const abi = mergeDeprecated ? [...refungibleTokenAbi, ...refungibleTokenDeprecatedAbi] : refungibleTokenAbi;
+ return unlimitedMoneyHack(new web3.eth.Contract(abi as any, address, {
gas: this.helper.eth.DEFAULT_GAS,
gasPrice: await this.getGasPrice(),
...(caller ? {from: caller} : {}),
}));
}
- rftTokenById(collectionId: number, tokenId: number, caller?: string) {
- return this.rftToken(this.helper.ethAddress.fromTokenId(collectionId, tokenId), caller);
+ rftTokenById(collectionId: number, tokenId: number, caller?: string, mergeDeprecated = false) {
+ return this.rftToken(this.helper.ethAddress.fromTokenId(collectionId, tokenId), caller, mergeDeprecated);
}
}