difftreelog
fix After rebase
in: master
8 files changed
crates/evm-coder/src/abi.rsdiffbeforeafterboth--- a/crates/evm-coder/src/abi.rs
+++ b/crates/evm-coder/src/abi.rs
@@ -28,10 +28,13 @@
types::{string, self},
};
use crate::execution::Result;
-use crate::solidity::SolidityTypeName;
const ABI_ALIGNMENT: usize = 32;
+trait TypeHelper<T> {
+ fn is_dynamic() -> bool;
+}
+
/// View into RLP data, which provides method to read typed items from it
#[derive(Clone)]
pub struct AbiReader<'i> {
@@ -330,11 +333,18 @@
pub trait AbiRead<T> {
/// Read item from current position, advanding decoder
fn abi_read(&mut self) -> Result<T>;
+
+ /// Size for type aligned to [`ABI_ALIGNMENT`].
fn size() -> usize;
}
macro_rules! impl_abi_readable {
- ($ty:ty, $method:ident) => {
+ ($ty:ty, $method:ident, $dynamic:literal) => {
+ impl TypeHelper<$ty> for $ty {
+ fn is_dynamic() -> bool {
+ $dynamic
+ }
+ }
impl AbiRead<$ty> for AbiReader<'_> {
fn abi_read(&mut self) -> Result<$ty> {
self.$method()
@@ -347,16 +357,16 @@
};
}
-impl_abi_readable!(u8, uint8);
-impl_abi_readable!(u32, uint32);
-impl_abi_readable!(u64, uint64);
-impl_abi_readable!(u128, uint128);
-impl_abi_readable!(U256, uint256);
-impl_abi_readable!([u8; 4], bytes4);
-impl_abi_readable!(H160, address);
-impl_abi_readable!(Vec<u8>, bytes);
-impl_abi_readable!(bool, bool);
-impl_abi_readable!(string, string);
+impl_abi_readable!(u8, uint8, false);
+impl_abi_readable!(u32, uint32, false);
+impl_abi_readable!(u64, uint64, false);
+impl_abi_readable!(u128, uint128, false);
+impl_abi_readable!(U256, uint256, false);
+impl_abi_readable!([u8; 4], bytes4, false);
+impl_abi_readable!(H160, address, false);
+impl_abi_readable!(Vec<u8>, bytes, true);
+impl_abi_readable!(bool, bool, true);
+impl_abi_readable!(string, string, true);
mod sealed {
/// Not all types can be placed in vec, i.e `Vec<u8>` is restricted, `bytes` should be used instead
@@ -389,16 +399,24 @@
macro_rules! impl_tuples {
($($ident:ident)+) => {
+ impl<$($ident: TypeHelper<$ident>,)+> TypeHelper<($($ident,)+)> for ($($ident,)+) {
+ fn is_dynamic() -> bool {
+ false
+ $(
+ || <$ident>::is_dynamic()
+ )*
+ }
+ }
impl<$($ident),+> sealed::CanBePlacedInVec for ($($ident,)+) {}
impl<$($ident),+> AbiRead<($($ident,)+)> for AbiReader<'_>
where
$(
Self: AbiRead<$ident>,
)+
- ($($ident,)+): SolidityTypeName,
+ ($($ident,)+): TypeHelper<($($ident,)+)>,
{
fn abi_read(&mut self) -> Result<($($ident,)+)> {
- let size = if <($($ident,)+)>::is_simple() { Some(<Self as AbiRead<($($ident,)+)>>::size()) } else { None };
+ let size = if !<($($ident,)+)>::is_dynamic() { Some(<Self as AbiRead<($($ident,)+)>>::size()) } else { None };
let mut subresult = self.subresult(size)?;
Ok((
$(<Self as AbiRead<$ident>>::abi_read(&mut subresult)?,)+
crates/evm-coder/src/solidity.rsdiffbeforeafterboth--- a/crates/evm-coder/src/solidity.rs
+++ b/crates/evm-coder/src/solidity.rs
@@ -192,10 +192,7 @@
write!(writer, "{}", tc.collect_tuple::<Self>())
}
fn is_simple() -> bool {
- true
- $(
- && <$ident>::is_simple()
- )*
+ false
}
#[allow(unused_assignments)]
fn solidity_default(writer: &mut impl fmt::Write, tc: &TypeCollector) -> fmt::Result {
pallets/fungible/src/erc.rsdiffbeforeafterboth--- a/pallets/fungible/src/erc.rs
+++ b/pallets/fungible/src/erc.rs
@@ -129,7 +129,7 @@
}
}
-#[solidity_interface(name = "ERC20Mintable")]
+#[solidity_interface(name = ERC20Mintable)]
impl<T: Config> FungibleHandle<T> {
/// Mint tokens for `to` account.
/// @param to account that will receive minted tokens
@@ -148,7 +148,7 @@
}
}
-#[solidity_interface(name = "ERC20UniqueExtensions")]
+#[solidity_interface(name = ERC20UniqueExtensions)]
impl<T: Config> FungibleHandle<T> {
/// Burn tokens from account
/// @dev Function that burns an `amount` of the tokens of a given account,
pallets/fungible/src/stubs/UniqueFungible.rawdiffbeforeafterbothbinary blob — no preview
pallets/fungible/src/stubs/UniqueFungible.soldiffbeforeafterboth1// SPDX-License-Identifier: OTHER2// This code is automatically generated34pragma solidity >=0.8.0 <0.9.0;56// Anonymous struct7struct Tuple0 {8 address field_0;9 uint256 field_1;10}1112// Common stubs holder13contract Dummy {14 uint8 dummy;15 string stub_error = "this contract is implemented in native";16}1718contract ERC165 is Dummy {19 function supportsInterface(bytes4 interfaceID)20 external21 view22 returns (bool)23 {24 require(false, stub_error);25 interfaceID;26 return true;27 }28}2930// Inline31contract ERC20Events {32 event Transfer(address indexed from, address indexed to, uint256 value);33 event Approval(34 address indexed owner,35 address indexed spender,36 uint256 value37 );38}3940// Selector: 40c10f1941contract ERC20Mintable is Dummy, ERC165 {42 // Selector: mint(address,uint256) 40c10f1943 function mint(address to, uint256 amount) public returns (bool) {44 require(false, stub_error);45 to;46 amount;47 dummy = 0;48 return false;49 }50}5152// Selector: 63034ac553contract ERC20UniqueExtensions is Dummy, ERC165 {54 // Selector: burnFrom(address,uint256) 79cc679055 function burnFrom(address from, uint256 amount) public returns (bool) {56 require(false, stub_error);57 from;58 amount;59 dummy = 0;60 return false;61 }6263 // Selector: mintBulk((address,uint256)[]) 1acf2d5564 function mintBulk(Tuple0[] memory amounts) public returns (bool) {65 require(false, stub_error);66 amounts;67 dummy = 0;68 return false;69 }70}7172// Selector: 6cf113cd73contract Collection is Dummy, ERC165 {74 /// Set collection property.75 ///76 /// @param key Property key.77 /// @param value Propery value.78 /// @dev EVM selector for this function is: 0x2f073f66,79 /// or in textual repr: setCollectionProperty(string,bytes)80 function setCollectionProperty(string memory key, bytes memory value)81 public82 {83 require(false, stub_error);84 key;85 value;86 dummy = 0;87 }8889 /// Delete collection property.90 ///91 /// @param key Property key.92 /// @dev EVM selector for this function is: 0x7b7debce,93 /// or in textual repr: deleteCollectionProperty(string)94 function deleteCollectionProperty(string memory key) public {95 require(false, stub_error);96 key;97 dummy = 0;98 }99100 /// Get collection property.101 ///102 /// @dev Throws error if key not found.103 ///104 /// @param key Property key.105 /// @return bytes The property corresponding to the key.106 /// @dev EVM selector for this function is: 0xcf24fd6d,107 /// or in textual repr: collectionProperty(string)108 function collectionProperty(string memory key)109 public110 view111 returns (bytes memory)112 {113 require(false, stub_error);114 key;115 dummy;116 return hex"";117 }118119 /// Set the sponsor of the collection.120 ///121 /// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.122 ///123 /// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.124 /// @dev EVM selector for this function is: 0x7623402e,125 /// or in textual repr: setCollectionSponsor(address)126 function setCollectionSponsor(address sponsor) public {127 require(false, stub_error);128 sponsor;129 dummy = 0;130 }131132 /// Set the substrate sponsor of the collection.133 ///134 /// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor.135 ///136 /// @param sponsor Substrate address of the sponsor from whose account funds will be debited for operations with the contract.137 /// @dev EVM selector for this function is: 0xc74d6751,138 /// or in textual repr: setCollectionSponsorSubstrate(uint256)139 function setCollectionSponsorSubstrate(uint256 sponsor) public {140 require(false, stub_error);141 sponsor;142 dummy = 0;143 }144145 /// @dev EVM selector for this function is: 0x058ac185,146 /// or in textual repr: hasCollectionPendingSponsor()147 function hasCollectionPendingSponsor() public view returns (bool) {148 require(false, stub_error);149 dummy;150 return false;151 }152153 /// Collection sponsorship confirmation.154 ///155 /// @dev After setting the sponsor for the collection, it must be confirmed with this function.156 /// @dev EVM selector for this function is: 0x3c50e97a,157 /// or in textual repr: confirmCollectionSponsorship()158 function confirmCollectionSponsorship() public {159 require(false, stub_error);160 dummy = 0;161 }162163 /// Remove collection sponsor.164 /// @dev EVM selector for this function is: 0x6e0326a3,165 /// or in textual repr: removeCollectionSponsor()166 function removeCollectionSponsor() public {167 require(false, stub_error);168 dummy = 0;169 }170171 /// Get current sponsor.172 ///173 /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.174 /// @dev EVM selector for this function is: 0xb66bbc14,175 /// or in textual repr: getCollectionSponsor()176 function getCollectionSponsor() public view returns (Tuple6 memory) {177 require(false, stub_error);178 dummy;179 return Tuple6(0x0000000000000000000000000000000000000000, 0);180 }181182 /// Set limits for the collection.183 /// @dev Throws error if limit not found.184 /// @param limit Name of the limit. Valid names:185 /// "accountTokenOwnershipLimit",186 /// "sponsoredDataSize",187 /// "sponsoredDataRateLimit",188 /// "tokenLimit",189 /// "sponsorTransferTimeout",190 /// "sponsorApproveTimeout"191 /// @param value Value of the limit.192 /// @dev EVM selector for this function is: 0x6a3841db,193 /// or in textual repr: setCollectionLimit(string,uint32)194 function setCollectionLimit(string memory limit, uint32 value) public {195 require(false, stub_error);196 limit;197 value;198 dummy = 0;199 }200201 /// Set limits for the collection.202 /// @dev Throws error if limit not found.203 /// @param limit Name of the limit. Valid names:204 /// "ownerCanTransfer",205 /// "ownerCanDestroy",206 /// "transfersEnabled"207 /// @param value Value of the limit.208 /// @dev EVM selector for this function is: 0x993b7fba,209 /// or in textual repr: setCollectionLimit(string,bool)210 function setCollectionLimit(string memory limit, bool value) public {211 require(false, stub_error);212 limit;213 value;214 dummy = 0;215 }216217 /// Get contract address.218 /// @dev EVM selector for this function is: 0xf6b4dfb4,219 /// or in textual repr: contractAddress()220 function contractAddress() public view returns (address) {221 require(false, stub_error);222 dummy;223 return 0x0000000000000000000000000000000000000000;224 }225226 /// Add collection admin by substrate address.227 /// @param newAdmin Substrate administrator address.228 /// @dev EVM selector for this function is: 0x5730062b,229 /// or in textual repr: addCollectionAdminSubstrate(uint256)230 function addCollectionAdminSubstrate(uint256 newAdmin) public {231 require(false, stub_error);232 newAdmin;233 dummy = 0;234 }235236 /// Remove collection admin by substrate address.237 /// @param admin Substrate administrator address.238 /// @dev EVM selector for this function is: 0x4048fcf9,239 /// or in textual repr: removeCollectionAdminSubstrate(uint256)240 function removeCollectionAdminSubstrate(uint256 admin) public {241 require(false, stub_error);242 admin;243 dummy = 0;244 }245246 /// Add collection admin.247 /// @param newAdmin Address of the added administrator.248 /// @dev EVM selector for this function is: 0x92e462c7,249 /// or in textual repr: addCollectionAdmin(address)250 function addCollectionAdmin(address newAdmin) public {251 require(false, stub_error);252 newAdmin;253 dummy = 0;254 }255256 /// Remove collection admin.257 ///258 /// @param admin Address of the removed administrator.259 /// @dev EVM selector for this function is: 0xfafd7b42,260 /// or in textual repr: removeCollectionAdmin(address)261 function removeCollectionAdmin(address admin) public {262 require(false, stub_error);263 admin;264 dummy = 0;265 }266267 /// Toggle accessibility of collection nesting.268 ///269 /// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'270 /// @dev EVM selector for this function is: 0x112d4586,271 /// or in textual repr: setCollectionNesting(bool)272 function setCollectionNesting(bool enable) public {273 require(false, stub_error);274 enable;275 dummy = 0;276 }277278 /// Toggle accessibility of collection nesting.279 ///280 /// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled'281 /// @param collections Addresses of collections that will be available for nesting.282 /// @dev EVM selector for this function is: 0x64872396,283 /// or in textual repr: setCollectionNesting(bool,address[])284 function setCollectionNesting(bool enable, address[] memory collections)285 public286 {287 require(false, stub_error);288 enable;289 collections;290 dummy = 0;291 }292293 /// Set the collection access method.294 /// @param mode Access mode295 /// 0 for Normal296 /// 1 for AllowList297 /// @dev EVM selector for this function is: 0x41835d4c,298 /// or in textual repr: setCollectionAccess(uint8)299 function setCollectionAccess(uint8 mode) public {300 require(false, stub_error);301 mode;302 dummy = 0;303 }304305 /// Add the user to the allowed list.306 ///307 /// @param user Address of a trusted user.308 /// @dev EVM selector for this function is: 0x67844fe6,309 /// or in textual repr: addToCollectionAllowList(address)310 function addToCollectionAllowList(address user) public {311 require(false, stub_error);312 user;313 dummy = 0;314 }315316 /// Remove the user from the allowed list.317 ///318 /// @param user Address of a removed user.319 /// @dev EVM selector for this function is: 0x85c51acb,320 /// or in textual repr: removeFromCollectionAllowList(address)321 function removeFromCollectionAllowList(address user) public {322 require(false, stub_error);323 user;324 dummy = 0;325 }326327 /// Switch permission for minting.328 ///329 /// @param mode Enable if "true".330 /// @dev EVM selector for this function is: 0x00018e84,331 /// or in textual repr: setCollectionMintMode(bool)332 function setCollectionMintMode(bool mode) public {333 require(false, stub_error);334 mode;335 dummy = 0;336 }337338 /// Check that account is the owner or admin of the collection339 ///340 /// @param user account to verify341 /// @return "true" if account is the owner or admin342 /// @dev EVM selector for this function is: 0x9811b0c7,343 /// or in textual repr: isOwnerOrAdmin(address)344 function isOwnerOrAdmin(address user) public view returns (bool) {345 require(false, stub_error);346 user;347 dummy;348 return false;349 }350351 /// Check that substrate account is the owner or admin of the collection352 ///353 /// @param user account to verify354 /// @return "true" if account is the owner or admin355 /// @dev EVM selector for this function is: 0x68910e00,356 /// or in textual repr: isOwnerOrAdminSubstrate(uint256)357 function isOwnerOrAdminSubstrate(uint256 user) public view returns (bool) {358 require(false, stub_error);359 user;360 dummy;361 return false;362 }363364 /// Returns collection type365 ///366 /// @return `Fungible` or `NFT` or `ReFungible`367 /// @dev EVM selector for this function is: 0xd34b55b8,368 /// or in textual repr: uniqueCollectionType()369 function uniqueCollectionType() public returns (string memory) {370 require(false, stub_error);371 dummy = 0;372 return "";373 }374375 /// Changes collection owner to another account376 ///377 /// @dev Owner can be changed only by current owner378 /// @param newOwner new owner account379 /// @dev EVM selector for this function is: 0x13af4035,380 /// or in textual repr: setOwner(address)381 function setOwner(address newOwner) public {382 require(false, stub_error);383 newOwner;384 dummy = 0;385 }386387 /// Changes collection owner to another substrate account388 ///389 /// @dev Owner can be changed only by current owner390 /// @param newOwner new owner substrate account391 /// @dev EVM selector for this function is: 0xb212138f,392 /// or in textual repr: setOwnerSubstrate(uint256)393 function setOwnerSubstrate(uint256 newOwner) public {394 require(false, stub_error);395 newOwner;396 dummy = 0;397 }398}399400/// @dev anonymous struct401struct Tuple6 {402 address field_0;403 uint256 field_1;404}405406/// @dev the ERC-165 identifier for this interface is 0x79cc6790407contract ERC20UniqueExtensions is Dummy, ERC165 {408 /// @dev EVM selector for this function is: 0x79cc6790,409 /// or in textual repr: burnFrom(address,uint256)410 function burnFrom(address from, uint256 amount) public returns (bool) {411 require(false, stub_error);412 from;413 amount;414 dummy = 0;415 return false;416 }417}418419/// @dev inlined interface420contract ERC20Events {421 event Transfer(address indexed from, address indexed to, uint256 value);422 event Approval(423 address indexed owner,424 address indexed spender,425 uint256 value426 );427}428429/// @dev the ERC-165 identifier for this interface is 0x942e8b22430contract ERC20 is Dummy, ERC165, ERC20Events {431 /// @dev EVM selector for this function is: 0x06fdde03,432 /// or in textual repr: name()433 function name() public view returns (string memory) {434 require(false, stub_error);435 dummy;436 return "";437 }438439 /// @dev EVM selector for this function is: 0x95d89b41,440 /// or in textual repr: symbol()441 function symbol() public view returns (string memory) {442 require(false, stub_error);443 dummy;444 return "";445 }446447 /// @dev EVM selector for this function is: 0x18160ddd,448 /// or in textual repr: totalSupply()449 function totalSupply() public view returns (uint256) {450 require(false, stub_error);451 dummy;452 return 0;453 }454455 /// @dev EVM selector for this function is: 0x313ce567,456 /// or in textual repr: decimals()457 function decimals() public view returns (uint8) {458 require(false, stub_error);459 dummy;460 return 0;461 }462463 /// @dev EVM selector for this function is: 0x70a08231,464 /// or in textual repr: balanceOf(address)465 function balanceOf(address owner) public view returns (uint256) {466 require(false, stub_error);467 owner;468 dummy;469 return 0;470 }471472 /// @dev EVM selector for this function is: 0xa9059cbb,473 /// or in textual repr: transfer(address,uint256)474 function transfer(address to, uint256 amount) public returns (bool) {475 require(false, stub_error);476 to;477 amount;478 dummy = 0;479 return false;480 }481482 /// @dev EVM selector for this function is: 0x23b872dd,483 /// or in textual repr: transferFrom(address,address,uint256)484 function transferFrom(485 address from,486 address to,487 uint256 amount488 ) public returns (bool) {489 require(false, stub_error);490 from;491 to;492 amount;493 dummy = 0;494 return false;495 }496497 /// @dev EVM selector for this function is: 0x095ea7b3,498 /// or in textual repr: approve(address,uint256)499 function approve(address spender, uint256 amount) public returns (bool) {500 require(false, stub_error);501 spender;502 amount;503 dummy = 0;504 return false;505 }506507 /// @dev EVM selector for this function is: 0xdd62ed3e,508 /// or in textual repr: allowance(address,address)509 function allowance(address owner, address spender)510 public511 view512 returns (uint256)513 {514 require(false, stub_error);515 owner;516 spender;517 dummy;518 return 0;519 }520}521522contract UniqueFungible is523 Dummy,524 ERC165,525 ERC20,526 ERC20Mintable,527 ERC20UniqueExtensions,528 Collection529{}tests/src/eth/api/UniqueFungible.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueFungible.sol
+++ b/tests/src/eth/api/UniqueFungible.sol
@@ -3,13 +3,7 @@
pragma solidity >=0.8.0 <0.9.0;
-// Anonymous struct
-struct Tuple0 {
- address field_0;
- uint256 field_1;
-}
-
-// Common stubs holder
+/// @dev common stubs holder
interface Dummy {
}
@@ -18,32 +12,8 @@
function supportsInterface(bytes4 interfaceID) external view returns (bool);
}
-// Inline
-interface ERC20Events {
- event Transfer(address indexed from, address indexed to, uint256 value);
- event Approval(
- address indexed owner,
- address indexed spender,
- uint256 value
- );
-}
-
-// Selector: 40c10f19
-interface ERC20Mintable is Dummy, ERC165 {
- // Selector: mint(address,uint256) 40c10f19
- function mint(address to, uint256 amount) external returns (bool);
-}
-
-// Selector: 63034ac5
-interface ERC20UniqueExtensions is Dummy, ERC165 {
- // Selector: burnFrom(address,uint256) 79cc6790
- function burnFrom(address from, uint256 amount) external returns (bool);
-
- // Selector: mintBulk((address,uint256)[]) 1acf2d55
- function mintBulk(Tuple0[] memory amounts) external returns (bool);
-}
-
-// Selector: 6cf113cd
+/// @title A contract that allows you to work with collections.
+/// @dev the ERC-165 identifier for this interface is 0xe54be640
interface Collection is Dummy, ERC165 {
/// Set collection property.
///
@@ -237,13 +207,56 @@
/// @dev EVM selector for this function is: 0xd34b55b8,
/// or in textual repr: uniqueCollectionType()
function uniqueCollectionType() external returns (string memory);
+
+ /// Changes collection owner to another account
+ ///
+ /// @dev Owner can be changed only by current owner
+ /// @param newOwner new owner account
+ /// @dev EVM selector for this function is: 0x13af4035,
+ /// or in textual repr: setOwner(address)
+ function setOwner(address newOwner) external;
+
+ /// Changes collection owner to another substrate account
+ ///
+ /// @dev Owner can be changed only by current owner
+ /// @param newOwner new owner substrate account
+ /// @dev EVM selector for this function is: 0xb212138f,
+ /// or in textual repr: setOwnerSubstrate(uint256)
+ function setOwnerSubstrate(uint256 newOwner) external;
}
-/// @dev the ERC-165 identifier for this interface is 0x79cc6790
+/// @dev the ERC-165 identifier for this interface is 0x63034ac5
interface ERC20UniqueExtensions is Dummy, ERC165 {
+ /// Burn tokens from account
+ /// @dev Function that burns an `amount` of the tokens of a given account,
+ /// deducting from the sender's allowance for said account.
+ /// @param from The account whose tokens will be burnt.
+ /// @param amount The amount that will be burnt.
/// @dev EVM selector for this function is: 0x79cc6790,
/// or in textual repr: burnFrom(address,uint256)
function burnFrom(address from, uint256 amount) external returns (bool);
+
+ /// Mint tokens for multiple accounts.
+ /// @param amounts array of pairs of account address and amount
+ /// @dev EVM selector for this function is: 0x1acf2d55,
+ /// or in textual repr: mintBulk((address,uint256)[])
+ function mintBulk(Tuple6[] memory amounts) external returns (bool);
+}
+
+/// @dev anonymous struct
+struct Tuple6 {
+ address field_0;
+ uint256 field_1;
+}
+
+/// @dev the ERC-165 identifier for this interface is 0x40c10f19
+interface ERC20Mintable is Dummy, ERC165 {
+ /// Mint tokens for `to` account.
+ /// @param to account that will receive minted tokens
+ /// @param amount amount of tokens to mint
+ /// @dev EVM selector for this function is: 0x40c10f19,
+ /// or in textual repr: mint(address,uint256)
+ function mint(address to, uint256 amount) external returns (bool);
}
/// @dev inlined interface
tests/src/eth/base.test.tsdiffbeforeafterboth--- a/tests/src/eth/base.test.ts
+++ b/tests/src/eth/base.test.ts
@@ -94,7 +94,7 @@
});
itWeb3('ERC721 support', async ({web3}) => {
- expect(await contract(web3).methods.supportsInterface('0x58800161').call()).to.be.true;
+ expect(await contract(web3).methods.supportsInterface('0x780e9d63').call()).to.be.true;
});
itWeb3('ERC721Metadata support', async ({web3}) => {
tests/src/eth/fungibleAbi.jsondiffbeforeafterboth--- a/tests/src/eth/fungibleAbi.json
+++ b/tests/src/eth/fungibleAbi.json
@@ -151,33 +151,6 @@
"type": "function"
},
{
- "inputs": [
- { "internalType": "address", "name": "to", "type": "address" },
- { "internalType": "uint256", "name": "amount", "type": "uint256" }
- ],
- "name": "mint",
- "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- { "internalType": "address", "name": "field_0", "type": "address" },
- { "internalType": "uint256", "name": "field_1", "type": "uint256" }
- ],
- "internalType": "struct Tuple0[]",
- "name": "amounts",
- "type": "tuple[]"
- }
- ],
- "name": "mintBulk",
- "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
"inputs": [],
"name": "getCollectionSponsor",
"outputs": [
@@ -220,6 +193,33 @@
"type": "function"
},
{
+ "inputs": [
+ { "internalType": "address", "name": "to", "type": "address" },
+ { "internalType": "uint256", "name": "amount", "type": "uint256" }
+ ],
+ "name": "mint",
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ { "internalType": "address", "name": "field_0", "type": "address" },
+ { "internalType": "uint256", "name": "field_1", "type": "uint256" }
+ ],
+ "internalType": "struct Tuple6[]",
+ "name": "amounts",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "mintBulk",
+ "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
"inputs": [],
"name": "name",
"outputs": [{ "internalType": "string", "name": "", "type": "string" }],