From 5075a45a9dd3efa3bff972d56a9850d9c889fdb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 4 Jun 2025 18:02:26 +0200 Subject: [PATCH 01/49] add hedera libraries and interfaces --- contracts/hedera/HTS.sol | 275 ++++++++++ contracts/hedera/HederaResponseCodes.sol | 310 +++++++++++ contracts/hedera/IHederaTokenService.sol | 667 +++++++++++++++++++++++ contracts/hedera/README.md | 31 ++ 4 files changed, 1283 insertions(+) create mode 100644 contracts/hedera/HTS.sol create mode 100644 contracts/hedera/HederaResponseCodes.sol create mode 100644 contracts/hedera/IHederaTokenService.sol create mode 100644 contracts/hedera/README.md diff --git a/contracts/hedera/HTS.sol b/contracts/hedera/HTS.sol new file mode 100644 index 00000000..37a2c0f7 --- /dev/null +++ b/contracts/hedera/HTS.sol @@ -0,0 +1,275 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { HederaResponseCodes } from './HederaResponseCodes.sol'; +import { IHederaTokenService } from './IHederaTokenService.sol'; + +/** + * @title HTS + * @notice This library provides a set of functions to interact with the Hedera Token Service (HTS). + * It includes functionalities for creating, transferring, minting, and burning tokens, as well as querying token information and associating tokens with accounts. + * + * @dev This library includes a subset of the Hedera provided system library [HederaTokenService](https://github.com/hashgraph/hedera-smart-contracts/blob/bc3a549c0ca062c51b0045fd1916fdaa0558a360/contracts/system-contracts/hedera-token-service/HederaTokenService.sol). + * Functions are modified to revert instead of returning response codes. + * The library includes custom errors and additional functions. + */ +library HTS { + address private constant PRECOMPILE = address(0x167); + + // See `TokenKey` struct, `keyType`. + // 0th bit: adminKey + uint256 internal constant ADMIN_KEY_BIT = 1 << 0; + // 1st bit: kycKey + uint256 internal constant KYC_KEY_BIT = 1 << 1; + // 2nd bit: freezeKey + uint256 internal constant FREEZE_KEY_BIT = 1 << 2; + // 3rd bit: wipeKey + uint256 internal constant WIPE_KEY_BIT = 1 << 3; + // 4th bit: supplyKey + uint256 internal constant SUPPLY_KEY_BIT = 1 << 4; + // 5th bit: feeScheduleKey + uint256 internal constant FEE_SCHEDULE_KEY_BIT = 1 << 5; + // 6th bit: pauseKey + uint256 internal constant PAUSE_KEY_BIT = 1 << 6; + + // 90 days in seconds + int32 private constant DEFAULT_AUTO_RENEW = 7776000; + + /// @dev Thrown when the sender or receiver account is invalid. + error InvalidAccount(); + + /// @dev Thrown when the amount to mint/burn is invalid (negative or out of bounds). + error InvalidAmount(); + + /// @dev Thrown when the token decimals are invalid. Max value is uint8 (255). + error InvalidTokenDecimals(); + + /// @dev ITS cannot support KYC enabled tokens, or tokens with freeze, wipe or pause. + error TokenUnsupported(); + + /// @dev HTS EVM only supports a single minter, creating a token with initial supply is unsupported. + error InitialSupplyUnsupported(); + + /// @dev See HederaResponseCodes for a list of possible response codes. + error HTSCallFailed(int32 responseCode); + + /// Query if valid token found for the given address + /// @param token The token address + /// @return isTokenFlag True if valid token found for the given address + /// @dev This function reverts if the call is not successful + function isToken(address token) public returns (bool isTokenFlag) { + (bool success, bytes memory result) = PRECOMPILE.call(abi.encodeWithSelector(IHederaTokenService.isToken.selector, token)); + int32 responseCode; + (responseCode, isTokenFlag) = success ? abi.decode(result, (int32, bool)) : (HederaResponseCodes.UNKNOWN, false); + if (responseCode != HederaResponseCodes.SUCCESS) { + revert HTSCallFailed(responseCode); + } + } + + /// Retrieves fungible specific token info for a fungible token + /// @param token The ID of the token as a solidity address + /// @return tokenInfo FungibleTokenInfo + /// @dev This function reverts if the call is not successful + function getFungibleTokenInfo(address token) public returns (IHederaTokenService.FungibleTokenInfo memory tokenInfo) { + (bool success, bytes memory result) = PRECOMPILE.call( + abi.encodeWithSelector(IHederaTokenService.getFungibleTokenInfo.selector, token) + ); + IHederaTokenService.FungibleTokenInfo memory defaultTokenInfo; + int32 responseCode; + (responseCode, tokenInfo) = success + ? abi.decode(result, (int32, IHederaTokenService.FungibleTokenInfo)) + : (HederaResponseCodes.UNKNOWN, defaultTokenInfo); + if (responseCode != HederaResponseCodes.SUCCESS) { + revert HTSCallFailed(responseCode); + } + } + + /// Creates a Fungible Token with the specified properties + /// @param token the basic properties of the token being created + /// @param initialTotalSupply Specifies the initial supply of tokens to be put in circulation. The + /// initial supply is sent to the Treasury Account. The supply is in the lowest denomination possible. + /// @param decimals the number of decimal places a token is divisible by + /// @return tokenAddress the created token's address + function createFungibleToken( + IHederaTokenService.HederaToken memory token, + int64 initialTotalSupply, + int32 decimals + ) public returns (address tokenAddress) { + if (token.expiry.second == 0 && token.expiry.autoRenewPeriod == 0) { + token.expiry.autoRenewPeriod = DEFAULT_AUTO_RENEW; + } + + (bool success, bytes memory result) = PRECOMPILE.call{ value: msg.value }( + abi.encodeWithSelector(IHederaTokenService.createFungibleToken.selector, token, initialTotalSupply, decimals) + ); + + int32 responseCode; + (responseCode, tokenAddress) = success ? abi.decode(result, (int32, address)) : (HederaResponseCodes.UNKNOWN, address(0)); + + if (responseCode != HederaResponseCodes.SUCCESS) { + revert HTSCallFailed(responseCode); + } + } + + /// Transfers tokens where the calling account/contract is implicitly the first entry in the token transfer list, + /// where the amount is the value needed to zero balance the transfers. Regular signing rules apply for sending + /// (positive amount) or receiving (negative amount) + /// @param token The token to transfer to/from + /// @param sender The sender for the transaction + /// @param receiver The receiver of the transaction + /// @param amount Non-negative value to send. a negative value will result in a failure. + function transferToken(address token, address sender, address receiver, uint256 amount) public { + if (amount > uint256(int256(type(int64).max))) { + revert InvalidAmount(); + } + if (sender == address(0) || receiver == address(0)) revert InvalidAccount(); + int64 amountInt64 = int64(int256(amount)); + (bool success, bytes memory result) = PRECOMPILE.call( + abi.encodeWithSelector(IHederaTokenService.transferToken.selector, token, sender, receiver, amountInt64) + ); + int32 responseCode; + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + if (responseCode != HederaResponseCodes.SUCCESS) { + revert HTSCallFailed(responseCode); + } + } + + /// Transfers `amount` tokens from `from` to `to` using the + /// allowance mechanism. `amount` is then deducted from the caller's allowance. + /// Only applicable to fungible tokens + /// @param token The address of the fungible Hedera token to transfer + /// @param from The account address of the owner of the token, on the behalf of which to transfer `amount` tokens + /// @param to The account address of the receiver of the `amount` tokens + /// @param amount The amount of tokens to transfer from `from` to `to` + function transferFrom(address token, address from, address to, uint256 amount) public { + if (amount > uint256(int256(type(int64).max))) { + revert InvalidAmount(); + } + if (from == address(0) || to == address(0)) revert InvalidAccount(); + int64 amountInt64 = int64(int256(amount)); + (bool success, bytes memory result) = PRECOMPILE.call( + abi.encodeWithSelector(IHederaTokenService.transferFrom.selector, token, from, to, amountInt64) + ); + int32 responseCode; + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + if (responseCode != HederaResponseCodes.SUCCESS) { + revert HTSCallFailed(responseCode); + } + } + + /// Mints an amount of the token to the defined treasury account + /// @param token The token for which to mint tokens. If token does not exist, transaction results in + /// INVALID_TOKEN_ID + /// @param amount Applicable to tokens of type FUNGIBLE_COMMON. The amount to mint to the Treasury Account. + /// Amount must be a non-negative number represented in the lowest denomination of the + /// token. The new supply must be lower than 2^63. + /// Amount can be zero as per [HIP-564](https://hips.hedera.com/hip/hip-564). + /// @return newTotalSupply The new supply of tokens. For NFTs it is the total count of NFTs + function mintToken(address token, uint256 amount) public returns (int64 newTotalSupply) { + if (amount > uint256(int256(type(int64).max))) { + revert InvalidAmount(); + } + + bytes[] memory metadata; + int64 amountInt64 = int64(int256(amount)); + (bool success, bytes memory result) = PRECOMPILE.call( + abi.encodeWithSelector(IHederaTokenService.mintToken.selector, token, amountInt64, metadata) + ); + int32 responseCode; + (responseCode, newTotalSupply, ) = success + ? abi.decode(result, (int32, int64, int64[])) + : (HederaResponseCodes.UNKNOWN, int64(0), new int64[](0)); + if (responseCode != HederaResponseCodes.SUCCESS) { + revert HTSCallFailed(responseCode); + } + } + + /// Burns an amount of the token from the defined treasury account + /// @param token The token for which to burn tokens. If token does not exist, transaction results in + /// INVALID_TOKEN_ID + /// @param amount Applicable to tokens of type FUNGIBLE_COMMON. The amount to burn from the Treasury Account. + /// Amount must be a non-negative number, not bigger than the token balance of the treasury + /// account [0; balance], represented in the lowest denomination. + /// Amount can be zero as per [HIP-564](https://hips.hedera.com/hip/hip-564). + /// @return newTotalSupply The new supply of tokens. For NFTs it is the total count of NFTs + function burnToken(address token, uint256 amount) public returns (int64 newTotalSupply) { + if (amount > uint256(int256(type(int64).max))) { + revert InvalidAmount(); + } + int64 amountInt64 = int64(int256(amount)); + int64[] memory serialNumbers; + (bool success, bytes memory result) = PRECOMPILE.call( + abi.encodeWithSelector(IHederaTokenService.burnToken.selector, token, amountInt64, serialNumbers) + ); + int32 responseCode; + (responseCode, newTotalSupply) = success ? abi.decode(result, (int32, int64)) : (HederaResponseCodes.UNKNOWN, int64(0)); + if (responseCode != HederaResponseCodes.SUCCESS) { + revert HTSCallFailed(responseCode); + } + } + + /// Associates the provided account with the provided tokens. Must be signed by the provided + /// Account's key or called from the accounts contract key + /// If the provided account is not found, the transaction will resolve to INVALID_ACCOUNT_ID. + /// If the provided account has been deleted, the transaction will resolve to ACCOUNT_DELETED. + /// If any of the provided tokens is not found, the transaction will resolve to INVALID_TOKEN_REF. + /// If any of the provided tokens has been deleted, the transaction will resolve to TOKEN_WAS_DELETED. + /// If an association between the provided account and any of the tokens already exists, the + /// transaction resolves to TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT, but the function doesn't revert. + /// If the provided account's associations count exceed the constraint of maximum token associations + /// per account, the transaction will resolve to TOKENS_PER_ACCOUNT_LIMIT_EXCEEDED. + /// On success, associations between the provided account and tokens are made and the account is + /// ready to interact with the tokens. + /// @param account The account to be associated with the provided tokens + /// @param token The token to be associated with the provided account. + function associateToken(address account, address token) public { + (bool success, bytes memory result) = PRECOMPILE.call( + abi.encodeWithSelector(IHederaTokenService.associateToken.selector, account, token) + ); + int32 responseCode; + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + // If the token is already associated to the account, we don't need to do anything (ie. we don't revert) + if (responseCode == HederaResponseCodes.TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT) { + return; + } + if (responseCode != HederaResponseCodes.SUCCESS) { + revert HTSCallFailed(responseCode); + } + } + + // + // Extra functionality + // + + /// Checks if the Token is supported by ITS. + /// @param token The token address to check. + /// @return supported If the token is supported. + function isTokenSupportedByITS(address token) public returns (bool supported) { + IHederaTokenService.FungibleTokenInfo memory fTokenInfo = getFungibleTokenInfo(token); + + bool hasUnsupportedKeys = false; + for (uint256 i = 0; i < fTokenInfo.tokenInfo.token.tokenKeys.length; i++) { + uint256 keyType = fTokenInfo.tokenInfo.token.tokenKeys[i].keyType; + + // Check if the key in question is one that we care about + if ((keyType & (KYC_KEY_BIT | FREEZE_KEY_BIT | WIPE_KEY_BIT | PAUSE_KEY_BIT)) != 0) { + IHederaTokenService.KeyValue memory keyValue = fTokenInfo.tokenInfo.token.tokenKeys[i].key; + + // Check if it has any value for the key + // If it does, the token is not supported + if ( + keyValue.inheritAccountKey || + keyValue.contractId != address(0) || + keyValue.ed25519.length != 0 || + keyValue.ECDSA_secp256k1.length != 0 || + keyValue.delegatableContractId != address(0) + ) { + hasUnsupportedKeys = true; + break; + } + } + } + + return !hasUnsupportedKeys; + } +} diff --git a/contracts/hedera/HederaResponseCodes.sol b/contracts/hedera/HederaResponseCodes.sol new file mode 100644 index 00000000..143e2d56 --- /dev/null +++ b/contracts/hedera/HederaResponseCodes.sol @@ -0,0 +1,310 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.0; + +library HederaResponseCodes { + // response codes + int32 internal constant OK = 0; // The transaction passed the precheck validations. + int32 internal constant INVALID_TRANSACTION = 1; // For any error not handled by specific error codes listed below. + int32 internal constant PAYER_ACCOUNT_NOT_FOUND = 2; //Payer account does not exist. + int32 internal constant INVALID_NODE_ACCOUNT = 3; //Node Account provided does not match the node account of the node the transaction was submitted to. + int32 internal constant TRANSACTION_EXPIRED = 4; // Pre-Check error when TransactionValidStart + transactionValidDuration is less than current consensus time. + int32 internal constant INVALID_TRANSACTION_START = 5; // Transaction start time is greater than current consensus time + int32 internal constant INVALID_TRANSACTION_DURATION = 6; //valid transaction duration is a positive non zero number that does not exceed 120 seconds + int32 internal constant INVALID_SIGNATURE = 7; // The transaction signature is not valid + int32 internal constant MEMO_TOO_LONG = 8; //Transaction memo size exceeded 100 bytes + int32 internal constant INSUFFICIENT_TX_FEE = 9; // The fee provided in the transaction is insufficient for this type of transaction + int32 internal constant INSUFFICIENT_PAYER_BALANCE = 10; // The payer account has insufficient cryptocurrency to pay the transaction fee + int32 internal constant DUPLICATE_TRANSACTION = 11; // This transaction ID is a duplicate of one that was submitted to this node or reached consensus in the last 180 seconds (receipt period) + int32 internal constant BUSY = 12; //If API is throttled out + int32 internal constant NOT_SUPPORTED = 13; //The API is not currently supported + + int32 internal constant INVALID_FILE_ID = 14; //The file id is invalid or does not exist + int32 internal constant INVALID_ACCOUNT_ID = 15; //The account id is invalid or does not exist + int32 internal constant INVALID_CONTRACT_ID = 16; //The contract id is invalid or does not exist + int32 internal constant INVALID_TRANSACTION_ID = 17; //Transaction id is not valid + int32 internal constant RECEIPT_NOT_FOUND = 18; //Receipt for given transaction id does not exist + int32 internal constant RECORD_NOT_FOUND = 19; //Record for given transaction id does not exist + int32 internal constant INVALID_SOLIDITY_ID = 20; //The solidity id is invalid or entity with this solidity id does not exist + + int32 internal constant UNKNOWN = 21; // The responding node has submitted the transaction to the network. Its final status is still unknown. + int32 internal constant SUCCESS = 22; // The transaction succeeded + int32 internal constant FAIL_INVALID = 23; // There was a system error and the transaction failed because of invalid request parameters. + int32 internal constant FAIL_FEE = 24; // There was a system error while performing fee calculation, reserved for future. + int32 internal constant FAIL_BALANCE = 25; // There was a system error while performing balance checks, reserved for future. + + int32 internal constant KEY_REQUIRED = 26; //Key not provided in the transaction body + int32 internal constant BAD_ENCODING = 27; //Unsupported algorithm/encoding used for keys in the transaction + int32 internal constant INSUFFICIENT_ACCOUNT_BALANCE = 28; //When the account balance is not sufficient for the transfer + int32 internal constant INVALID_SOLIDITY_ADDRESS = 29; //During an update transaction when the system is not able to find the Users Solidity address + + int32 internal constant INSUFFICIENT_GAS = 30; //Not enough gas was supplied to execute transaction + int32 internal constant CONTRACT_SIZE_LIMIT_EXCEEDED = 31; //contract byte code size is over the limit + int32 internal constant LOCAL_CALL_MODIFICATION_EXCEPTION = 32; //local execution (query) is requested for a function which changes state + int32 internal constant CONTRACT_REVERT_EXECUTED = 33; //Contract REVERT OPCODE executed + int32 internal constant CONTRACT_EXECUTION_EXCEPTION = 34; //For any contract execution related error not handled by specific error codes listed above. + int32 internal constant INVALID_RECEIVING_NODE_ACCOUNT = 35; //In Query validation, account with +ve(amount) value should be Receiving node account, the receiver account should be only one account in the list + int32 internal constant MISSING_QUERY_HEADER = 36; // Header is missing in Query request + + int32 internal constant ACCOUNT_UPDATE_FAILED = 37; // The update of the account failed + int32 internal constant INVALID_KEY_ENCODING = 38; // Provided key encoding was not supported by the system + int32 internal constant NULL_SOLIDITY_ADDRESS = 39; // null solidity address + + int32 internal constant CONTRACT_UPDATE_FAILED = 40; // update of the contract failed + int32 internal constant INVALID_QUERY_HEADER = 41; // the query header is invalid + + int32 internal constant INVALID_FEE_SUBMITTED = 42; // Invalid fee submitted + int32 internal constant INVALID_PAYER_SIGNATURE = 43; // Payer signature is invalid + + int32 internal constant KEY_NOT_PROVIDED = 44; // The keys were not provided in the request. + int32 internal constant INVALID_EXPIRATION_TIME = 45; // Expiration time provided in the transaction was invalid. + int32 internal constant NO_WACL_KEY = 46; //WriteAccess Control Keys are not provided for the file + int32 internal constant FILE_CONTENT_EMPTY = 47; //The contents of file are provided as empty. + int32 internal constant INVALID_ACCOUNT_AMOUNTS = 48; // The crypto transfer credit and debit do not sum equal to 0 + int32 internal constant EMPTY_TRANSACTION_BODY = 49; // Transaction body provided is empty + int32 internal constant INVALID_TRANSACTION_BODY = 50; // Invalid transaction body provided + + int32 internal constant INVALID_SIGNATURE_TYPE_MISMATCHING_KEY = 51; // the type of key (base ed25519 key, KeyList, or ThresholdKey) does not match the type of signature (base ed25519 signature, SignatureList, or ThresholdKeySignature) + int32 internal constant INVALID_SIGNATURE_COUNT_MISMATCHING_KEY = 52; // the number of key (KeyList, or ThresholdKey) does not match that of signature (SignatureList, or ThresholdKeySignature). e.g. if a keyList has 3 base keys, then the corresponding signatureList should also have 3 base signatures. + + int32 internal constant EMPTY_LIVE_HASH_BODY = 53; // the livehash body is empty + int32 internal constant EMPTY_LIVE_HASH = 54; // the livehash data is missing + int32 internal constant EMPTY_LIVE_HASH_KEYS = 55; // the keys for a livehash are missing + int32 internal constant INVALID_LIVE_HASH_SIZE = 56; // the livehash data is not the output of a SHA-384 digest + + int32 internal constant EMPTY_QUERY_BODY = 57; // the query body is empty + int32 internal constant EMPTY_LIVE_HASH_QUERY = 58; // the crypto livehash query is empty + int32 internal constant LIVE_HASH_NOT_FOUND = 59; // the livehash is not present + int32 internal constant ACCOUNT_ID_DOES_NOT_EXIST = 60; // the account id passed has not yet been created. + int32 internal constant LIVE_HASH_ALREADY_EXISTS = 61; // the livehash already exists for a given account + + int32 internal constant INVALID_FILE_WACL = 62; // File WACL keys are invalid + int32 internal constant SERIALIZATION_FAILED = 63; // Serialization failure + int32 internal constant TRANSACTION_OVERSIZE = 64; // The size of the Transaction is greater than transactionMaxBytes + int32 internal constant TRANSACTION_TOO_MANY_LAYERS = 65; // The Transaction has more than 50 levels + int32 internal constant CONTRACT_DELETED = 66; //Contract is marked as deleted + + int32 internal constant PLATFORM_NOT_ACTIVE = 67; // the platform node is either disconnected or lagging behind. + int32 internal constant KEY_PREFIX_MISMATCH = 68; // one internal key matches more than one prefixes on the signature map + int32 internal constant PLATFORM_TRANSACTION_NOT_CREATED = 69; // transaction not created by platform due to large backlog + int32 internal constant INVALID_RENEWAL_PERIOD = 70; // auto renewal period is not a positive number of seconds + int32 internal constant INVALID_PAYER_ACCOUNT_ID = 71; // the response code when a smart contract id is passed for a crypto API request + int32 internal constant ACCOUNT_DELETED = 72; // the account has been marked as deleted + int32 internal constant FILE_DELETED = 73; // the file has been marked as deleted + int32 internal constant ACCOUNT_REPEATED_IN_ACCOUNT_AMOUNTS = 74; // same accounts repeated in the transfer account list + int32 internal constant SETTING_NEGATIVE_ACCOUNT_BALANCE = 75; // attempting to set negative balance value for crypto account + int32 internal constant OBTAINER_REQUIRED = 76; // when deleting smart contract that has crypto balance either transfer account or transfer smart contract is required + int32 internal constant OBTAINER_SAME_CONTRACT_ID = 77; //when deleting smart contract that has crypto balance you can not use the same contract id as transferContractId as the one being deleted + int32 internal constant OBTAINER_DOES_NOT_EXIST = 78; //transferAccountId or transferContractId specified for contract delete does not exist + int32 internal constant MODIFYING_IMMUTABLE_CONTRACT = 79; //attempting to modify (update or delete a immutable smart contract, i.e. one created without a admin key) + int32 internal constant FILE_SYSTEM_EXCEPTION = 80; //Unexpected exception thrown by file system functions + int32 internal constant AUTORENEW_DURATION_NOT_IN_RANGE = 81; // the duration is not a subset of [MINIMUM_AUTORENEW_DURATION,MAXIMUM_AUTORENEW_DURATION] + int32 internal constant ERROR_DECODING_BYTESTRING = 82; // Decoding the smart contract binary to a byte array failed. Check that the input is a valid hex string. + int32 internal constant CONTRACT_FILE_EMPTY = 83; // File to create a smart contract was of length zero + int32 internal constant CONTRACT_BYTECODE_EMPTY = 84; // Bytecode for smart contract is of length zero + int32 internal constant INVALID_INITIAL_BALANCE = 85; // Attempt to set negative initial balance + int32 internal constant INVALID_RECEIVE_RECORD_THRESHOLD = 86; // [Deprecated]. attempt to set negative receive record threshold + int32 internal constant INVALID_SEND_RECORD_THRESHOLD = 87; // [Deprecated]. attempt to set negative send record threshold + int32 internal constant ACCOUNT_IS_NOT_GENESIS_ACCOUNT = 88; // Special Account Operations should be performed by only Genesis account, return this code if it is not Genesis Account + int32 internal constant PAYER_ACCOUNT_UNAUTHORIZED = 89; // The fee payer account doesn't have permission to submit such Transaction + int32 internal constant INVALID_FREEZE_TRANSACTION_BODY = 90; // FreezeTransactionBody is invalid + int32 internal constant FREEZE_TRANSACTION_BODY_NOT_FOUND = 91; // FreezeTransactionBody does not exist + int32 internal constant TRANSFER_LIST_SIZE_LIMIT_EXCEEDED = 92; //Exceeded the number of accounts (both from and to) allowed for crypto transfer list + int32 internal constant RESULT_SIZE_LIMIT_EXCEEDED = 93; // Smart contract result size greater than specified maxResultSize + int32 internal constant NOT_SPECIAL_ACCOUNT = 94; //The payer account is not a special account(account 0.0.55) + int32 internal constant CONTRACT_NEGATIVE_GAS = 95; // Negative gas was offered in smart contract call + int32 internal constant CONTRACT_NEGATIVE_VALUE = 96; // Negative value / initial balance was specified in a smart contract call / create + int32 internal constant INVALID_FEE_FILE = 97; // Failed to update fee file + int32 internal constant INVALID_EXCHANGE_RATE_FILE = 98; // Failed to update exchange rate file + int32 internal constant INSUFFICIENT_LOCAL_CALL_GAS = 99; // Payment tendered for contract local call cannot cover both the fee and the gas + int32 internal constant ENTITY_NOT_ALLOWED_TO_DELETE = 100; // Entities with Entity ID below 1000 are not allowed to be deleted + int32 internal constant AUTHORIZATION_FAILED = 101; // Violating one of these rules: 1) treasury account can update all entities below 0.0.1000, 2) account 0.0.50 can update all entities from 0.0.51 - 0.0.80, 3) Network Function Master Account A/c 0.0.50 - Update all Network Function accounts & perform all the Network Functions listed below, 4) Network Function Accounts: i) A/c 0.0.55 - Update Address Book files (0.0.101/102), ii) A/c 0.0.56 - Update Fee schedule (0.0.111), iii) A/c 0.0.57 - Update Exchange Rate (0.0.112). + int32 internal constant FILE_UPLOADED_PROTO_INVALID = 102; // Fee Schedule Proto uploaded but not valid (append or update is required) + int32 internal constant FILE_UPLOADED_PROTO_NOT_SAVED_TO_DISK = 103; // Fee Schedule Proto uploaded but not valid (append or update is required) + int32 internal constant FEE_SCHEDULE_FILE_PART_UPLOADED = 104; // Fee Schedule Proto File Part uploaded + int32 internal constant EXCHANGE_RATE_CHANGE_LIMIT_EXCEEDED = 105; // The change on Exchange Rate exceeds Exchange_Rate_Allowed_Percentage + int32 internal constant MAX_CONTRACT_STORAGE_EXCEEDED = 106; // Contract permanent storage exceeded the currently allowable limit + int32 internal constant TRANSFER_ACCOUNT_SAME_AS_DELETE_ACCOUNT = 107; // Transfer Account should not be same as Account to be deleted + int32 internal constant TOTAL_LEDGER_BALANCE_INVALID = 108; + int32 internal constant EXPIRATION_REDUCTION_NOT_ALLOWED = 110; // The expiration date/time on a smart contract may not be reduced + int32 internal constant MAX_GAS_LIMIT_EXCEEDED = 111; //Gas exceeded currently allowable gas limit per transaction + int32 internal constant MAX_FILE_SIZE_EXCEEDED = 112; // File size exceeded the currently allowable limit + + int32 internal constant INVALID_TOPIC_ID = 150; // The Topic ID specified is not in the system. + int32 internal constant INVALID_ADMIN_KEY = 155; // A provided admin key was invalid. + int32 internal constant INVALID_SUBMIT_KEY = 156; // A provided submit key was invalid. + int32 internal constant UNAUTHORIZED = 157; // An attempted operation was not authorized (ie - a deleteTopic for a topic with no adminKey). + int32 internal constant INVALID_TOPIC_MESSAGE = 158; // A ConsensusService message is empty. + int32 internal constant INVALID_AUTORENEW_ACCOUNT = 159; // The autoRenewAccount specified is not a valid, active account. + int32 internal constant AUTORENEW_ACCOUNT_NOT_ALLOWED = 160; // An adminKey was not specified on the topic, so there must not be an autoRenewAccount. + // The topic has expired, was not automatically renewed, and is in a 7 day grace period before the topic will be + // deleted unrecoverably. This error response code will not be returned until autoRenew functionality is supported + // by HAPI. + int32 internal constant TOPIC_EXPIRED = 162; + int32 internal constant INVALID_CHUNK_NUMBER = 163; // chunk number must be from 1 to total (chunks) inclusive. + int32 internal constant INVALID_CHUNK_TRANSACTION_ID = 164; // For every chunk, the payer account that is part of initialTransactionID must match the Payer Account of this transaction. The entire initialTransactionID should match the transactionID of the first chunk, but this is not checked or enforced by Hedera except when the chunk number is 1. + int32 internal constant ACCOUNT_FROZEN_FOR_TOKEN = 165; // Account is frozen and cannot transact with the token + int32 internal constant TOKENS_PER_ACCOUNT_LIMIT_EXCEEDED = 166; // An involved account already has more than tokens.maxPerAccount associations with non-deleted tokens. + int32 internal constant INVALID_TOKEN_ID = 167; // The token is invalid or does not exist + int32 internal constant INVALID_TOKEN_DECIMALS = 168; // Invalid token decimals + int32 internal constant INVALID_TOKEN_INITIAL_SUPPLY = 169; // Invalid token initial supply + int32 internal constant INVALID_TREASURY_ACCOUNT_FOR_TOKEN = 170; // Treasury Account does not exist or is deleted + int32 internal constant INVALID_TOKEN_SYMBOL = 171; // Token Symbol is not UTF-8 capitalized alphabetical string + int32 internal constant TOKEN_HAS_NO_FREEZE_KEY = 172; // Freeze key is not set on token + int32 internal constant TRANSFERS_NOT_ZERO_SUM_FOR_TOKEN = 173; // Amounts in transfer list are not net zero + int32 internal constant MISSING_TOKEN_SYMBOL = 174; // A token symbol was not provided + int32 internal constant TOKEN_SYMBOL_TOO_LONG = 175; // The provided token symbol was too long + int32 internal constant ACCOUNT_KYC_NOT_GRANTED_FOR_TOKEN = 176; // KYC must be granted and account does not have KYC granted + int32 internal constant TOKEN_HAS_NO_KYC_KEY = 177; // KYC key is not set on token + int32 internal constant INSUFFICIENT_TOKEN_BALANCE = 178; // Token balance is not sufficient for the transaction + int32 internal constant TOKEN_WAS_DELETED = 179; // Token transactions cannot be executed on deleted token + int32 internal constant TOKEN_HAS_NO_SUPPLY_KEY = 180; // Supply key is not set on token + int32 internal constant TOKEN_HAS_NO_WIPE_KEY = 181; // Wipe key is not set on token + int32 internal constant INVALID_TOKEN_MINT_AMOUNT = 182; // The requested token mint amount would cause an invalid total supply + int32 internal constant INVALID_TOKEN_BURN_AMOUNT = 183; // The requested token burn amount would cause an invalid total supply + int32 internal constant TOKEN_NOT_ASSOCIATED_TO_ACCOUNT = 184; // A required token-account relationship is missing + int32 internal constant CANNOT_WIPE_TOKEN_TREASURY_ACCOUNT = 185; // The target of a wipe operation was the token treasury account + int32 internal constant INVALID_KYC_KEY = 186; // The provided KYC key was invalid. + int32 internal constant INVALID_WIPE_KEY = 187; // The provided wipe key was invalid. + int32 internal constant INVALID_FREEZE_KEY = 188; // The provided freeze key was invalid. + int32 internal constant INVALID_SUPPLY_KEY = 189; // The provided supply key was invalid. + int32 internal constant MISSING_TOKEN_NAME = 190; // Token Name is not provided + int32 internal constant TOKEN_NAME_TOO_LONG = 191; // Token Name is too long + int32 internal constant INVALID_WIPING_AMOUNT = 192; // The provided wipe amount must not be negative, zero or bigger than the token holder balance + int32 internal constant TOKEN_IS_IMMUTABLE = 193; // Token does not have Admin key set, thus update/delete transactions cannot be performed + int32 internal constant TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT = 194; // An associateToken operation specified a token already associated to the account + int32 internal constant TRANSACTION_REQUIRES_ZERO_TOKEN_BALANCES = 195; // An attempted operation is invalid until all token balances for the target account are zero + int32 internal constant ACCOUNT_IS_TREASURY = 196; // An attempted operation is invalid because the account is a treasury + int32 internal constant TOKEN_ID_REPEATED_IN_TOKEN_LIST = 197; // Same TokenIDs present in the token list + int32 internal constant TOKEN_TRANSFER_LIST_SIZE_LIMIT_EXCEEDED = 198; // Exceeded the number of token transfers (both from and to) allowed for token transfer list + int32 internal constant EMPTY_TOKEN_TRANSFER_BODY = 199; // TokenTransfersTransactionBody has no TokenTransferList + int32 internal constant EMPTY_TOKEN_TRANSFER_ACCOUNT_AMOUNTS = 200; // TokenTransfersTransactionBody has a TokenTransferList with no AccountAmounts + int32 internal constant INVALID_SCHEDULE_ID = 201; // The Scheduled entity does not exist; or has now expired, been deleted, or been executed + int32 internal constant SCHEDULE_IS_IMMUTABLE = 202; // The Scheduled entity cannot be modified. Admin key not set + int32 internal constant INVALID_SCHEDULE_PAYER_ID = 203; // The provided Scheduled Payer does not exist + int32 internal constant INVALID_SCHEDULE_ACCOUNT_ID = 204; // The Schedule Create Transaction TransactionID account does not exist + int32 internal constant NO_NEW_VALID_SIGNATURES = 205; // The provided sig map did not contain any new valid signatures from required signers of the scheduled transaction + int32 internal constant UNRESOLVABLE_REQUIRED_SIGNERS = 206; // The required signers for a scheduled transaction cannot be resolved, for example because they do not exist or have been deleted + int32 internal constant SCHEDULED_TRANSACTION_NOT_IN_WHITELIST = 207; // Only whitelisted transaction types may be scheduled + int32 internal constant SOME_SIGNATURES_WERE_INVALID = 208; // At least one of the signatures in the provided sig map did not represent a valid signature for any required signer + int32 internal constant TRANSACTION_ID_FIELD_NOT_ALLOWED = 209; // The scheduled field in the TransactionID may not be set to true + int32 internal constant IDENTICAL_SCHEDULE_ALREADY_CREATED = 210; // A schedule already exists with the same identifying fields of an attempted ScheduleCreate (that is, all fields other than scheduledPayerAccountID) + int32 internal constant INVALID_ZERO_BYTE_IN_STRING = 211; // A string field in the transaction has a UTF-8 encoding with the prohibited zero byte + int32 internal constant SCHEDULE_ALREADY_DELETED = 212; // A schedule being signed or deleted has already been deleted + int32 internal constant SCHEDULE_ALREADY_EXECUTED = 213; // A schedule being signed or deleted has already been executed + int32 internal constant MESSAGE_SIZE_TOO_LARGE = 214; // ConsensusSubmitMessage request's message size is larger than allowed. + int32 internal constant OPERATION_REPEATED_IN_BUCKET_GROUPS = 215; // An operation was assigned to more than one throttle group in a given bucket + int32 internal constant BUCKET_CAPACITY_OVERFLOW = 216; // The capacity needed to satisfy all opsPerSec groups in a bucket overflowed a signed 8-byte integral type + int32 internal constant NODE_CAPACITY_NOT_SUFFICIENT_FOR_OPERATION = 217; // Given the network size in the address book, the node-level capacity for an operation would never be enough to accept a single request; usually means a bucket burstPeriod should be increased + int32 internal constant BUCKET_HAS_NO_THROTTLE_GROUPS = 218; // A bucket was defined without any throttle groups + int32 internal constant THROTTLE_GROUP_HAS_ZERO_OPS_PER_SEC = 219; // A throttle group was granted zero opsPerSec + int32 internal constant SUCCESS_BUT_MISSING_EXPECTED_OPERATION = 220; // The throttle definitions file was updated, but some supported operations were not assigned a bucket + int32 internal constant UNPARSEABLE_THROTTLE_DEFINITIONS = 221; // The new contents for the throttle definitions system file were not valid protobuf + int32 internal constant INVALID_THROTTLE_DEFINITIONS = 222; // The new throttle definitions system file were invalid, and no more specific error could be divined + int32 internal constant ACCOUNT_EXPIRED_AND_PENDING_REMOVAL = 223; // The transaction references an account which has passed its expiration without renewal funds available, and currently remains in the ledger only because of the grace period given to expired entities + int32 internal constant INVALID_TOKEN_MAX_SUPPLY = 224; // Invalid token max supply + int32 internal constant INVALID_TOKEN_NFT_SERIAL_NUMBER = 225; // Invalid token nft serial number + int32 internal constant INVALID_NFT_ID = 226; // Invalid nft id + int32 internal constant METADATA_TOO_LONG = 227; // Nft metadata is too long + int32 internal constant BATCH_SIZE_LIMIT_EXCEEDED = 228; // Repeated operations count exceeds the limit + int32 internal constant INVALID_QUERY_RANGE = 229; // The range of data to be gathered is out of the set boundaries + int32 internal constant FRACTION_DIVIDES_BY_ZERO = 230; // A custom fractional fee set a denominator of zero + int32 internal constant INSUFFICIENT_PAYER_BALANCE_FOR_CUSTOM_FEE = 231; // The transaction payer could not afford a custom fee + int32 internal constant CUSTOM_FEES_LIST_TOO_LONG = 232; // More than 10 custom fees were specified + int32 internal constant INVALID_CUSTOM_FEE_COLLECTOR = 233; // Any of the feeCollector accounts for customFees is invalid + int32 internal constant INVALID_TOKEN_ID_IN_CUSTOM_FEES = 234; // Any of the token Ids in customFees is invalid + int32 internal constant TOKEN_NOT_ASSOCIATED_TO_FEE_COLLECTOR = 235; // Any of the token Ids in customFees are not associated to feeCollector + int32 internal constant TOKEN_MAX_SUPPLY_REACHED = 236; // A token cannot have more units minted due to its configured supply ceiling + int32 internal constant SENDER_DOES_NOT_OWN_NFT_SERIAL_NO = 237; // The transaction attempted to move an NFT serial number from an account other than its owner + int32 internal constant CUSTOM_FEE_NOT_FULLY_SPECIFIED = 238; // A custom fee schedule entry did not specify either a fixed or fractional fee + int32 internal constant CUSTOM_FEE_MUST_BE_POSITIVE = 239; // Only positive fees may be assessed at this time + int32 internal constant TOKEN_HAS_NO_FEE_SCHEDULE_KEY = 240; // Fee schedule key is not set on token + int32 internal constant CUSTOM_FEE_OUTSIDE_NUMERIC_RANGE = 241; // A fractional custom fee exceeded the range of a 64-bit signed integer + int32 internal constant ROYALTY_FRACTION_CANNOT_EXCEED_ONE = 242; // A royalty cannot exceed the total fungible value exchanged for an NFT + int32 internal constant FRACTIONAL_FEE_MAX_AMOUNT_LESS_THAN_MIN_AMOUNT = 243; // Each fractional custom fee must have its maximum_amount, if specified, at least its minimum_amount + int32 internal constant CUSTOM_SCHEDULE_ALREADY_HAS_NO_FEES = 244; // A fee schedule update tried to clear the custom fees from a token whose fee schedule was already empty + int32 internal constant CUSTOM_FEE_DENOMINATION_MUST_BE_FUNGIBLE_COMMON = 245; // Only tokens of type FUNGIBLE_COMMON can be used to as fee schedule denominations + int32 internal constant CUSTOM_FRACTIONAL_FEE_ONLY_ALLOWED_FOR_FUNGIBLE_COMMON = 246; // Only tokens of type FUNGIBLE_COMMON can have fractional fees + int32 internal constant INVALID_CUSTOM_FEE_SCHEDULE_KEY = 247; // The provided custom fee schedule key was invalid + int32 internal constant INVALID_TOKEN_MINT_METADATA = 248; // The requested token mint metadata was invalid + int32 internal constant INVALID_TOKEN_BURN_METADATA = 249; // The requested token burn metadata was invalid + int32 internal constant CURRENT_TREASURY_STILL_OWNS_NFTS = 250; // The treasury for a unique token cannot be changed until it owns no NFTs + int32 internal constant ACCOUNT_STILL_OWNS_NFTS = 251; // An account cannot be dissociated from a unique token if it owns NFTs for the token + int32 internal constant TREASURY_MUST_OWN_BURNED_NFT = 252; // A NFT can only be burned when owned by the unique token's treasury + int32 internal constant ACCOUNT_DOES_NOT_OWN_WIPED_NFT = 253; // An account did not own the NFT to be wiped + int32 internal constant ACCOUNT_AMOUNT_TRANSFERS_ONLY_ALLOWED_FOR_FUNGIBLE_COMMON = 254; // An AccountAmount token transfers list referenced a token type other than FUNGIBLE_COMMON + int32 internal constant MAX_NFTS_IN_PRICE_REGIME_HAVE_BEEN_MINTED = 255; // All the NFTs allowed in the current price regime have already been minted + int32 internal constant PAYER_ACCOUNT_DELETED = 256; // The payer account has been marked as deleted + int32 internal constant CUSTOM_FEE_CHARGING_EXCEEDED_MAX_RECURSION_DEPTH = 257; // The reference chain of custom fees for a transferred token exceeded the maximum length of 2 + int32 internal constant CUSTOM_FEE_CHARGING_EXCEEDED_MAX_ACCOUNT_AMOUNTS = 258; // More than 20 balance adjustments were to satisfy a CryptoTransfer and its implied custom fee payments + int32 internal constant INSUFFICIENT_SENDER_ACCOUNT_BALANCE_FOR_CUSTOM_FEE = 259; // The sender account in the token transfer transaction could not afford a custom fee + int32 internal constant SERIAL_NUMBER_LIMIT_REACHED = 260; // Currently no more than 4,294,967,295 NFTs may be minted for a given unique token type + int32 internal constant CUSTOM_ROYALTY_FEE_ONLY_ALLOWED_FOR_NON_FUNGIBLE_UNIQUE = 261; // Only tokens of type NON_FUNGIBLE_UNIQUE can have royalty fees + int32 internal constant NO_REMAINING_AUTOMATIC_ASSOCIATIONS = 262; // The account has reached the limit on the automatic associations count. + int32 internal constant EXISTING_AUTOMATIC_ASSOCIATIONS_EXCEED_GIVEN_LIMIT = 263; // Already existing automatic associations are more than the new maximum automatic associations. + int32 internal constant REQUESTED_NUM_AUTOMATIC_ASSOCIATIONS_EXCEEDS_ASSOCIATION_LIMIT = 264; // Cannot set the number of automatic associations for an account more than the maximum allowed tokens.maxPerAccount. + int32 internal constant TOKEN_IS_PAUSED = 265; // Token is paused. This Token cannot be a part of any kind of Transaction until unpaused. + int32 internal constant TOKEN_HAS_NO_PAUSE_KEY = 266; // Pause key is not set on token + int32 internal constant INVALID_PAUSE_KEY = 267; // The provided pause key was invalid + int32 internal constant FREEZE_UPDATE_FILE_DOES_NOT_EXIST = 268; // The update file in a freeze transaction body must exist. + int32 internal constant FREEZE_UPDATE_FILE_HASH_DOES_NOT_MATCH = 269; // The hash of the update file in a freeze transaction body must match the in-memory hash. + int32 internal constant NO_UPGRADE_HAS_BEEN_PREPARED = 270; // A FREEZE_UPGRADE transaction was handled with no previous update prepared. + int32 internal constant NO_FREEZE_IS_SCHEDULED = 271; // A FREEZE_ABORT transaction was handled with no scheduled freeze. + int32 internal constant UPDATE_FILE_HASH_CHANGED_SINCE_PREPARE_UPGRADE = 272; // The update file hash when handling a FREEZE_UPGRADE transaction differs from the file hash at the time of handling the PREPARE_UPGRADE transaction. + int32 internal constant FREEZE_START_TIME_MUST_BE_FUTURE = 273; // The given freeze start time was in the (consensus) past. + int32 internal constant PREPARED_UPDATE_FILE_IS_IMMUTABLE = 274; // The prepared update file cannot be updated or appended until either the upgrade has been completed, or a FREEZE_ABORT has been handled. + int32 internal constant FREEZE_ALREADY_SCHEDULED = 275; // Once a freeze is scheduled, it must be aborted before any other type of freeze can be performed. + int32 internal constant FREEZE_UPGRADE_IN_PROGRESS = 276; // If an NMT upgrade has been prepared, the following operation must be a FREEZE_UPGRADE (To issue a FREEZE_ONLY, submit a FREEZE_ABORT first.) + int32 internal constant UPDATE_FILE_ID_DOES_NOT_MATCH_PREPARED = 277; // If an NMT upgrade has been prepared, the subsequent FREEZE_UPGRADE transaction must confirm the id of the file to be used in the upgrade. + int32 internal constant UPDATE_FILE_HASH_DOES_NOT_MATCH_PREPARED = 278; // If an NMT upgrade has been prepared, the subsequent FREEZE_UPGRADE transaction must confirm the hash of the file to be used in the upgrade. + int32 internal constant CONSENSUS_GAS_EXHAUSTED = 279; // Consensus throttle did not allow execution of this transaction. System is throttled at consensus level. + int32 internal constant REVERTED_SUCCESS = 280; // A precompiled contract succeeded, but was later reverted. + int32 internal constant MAX_STORAGE_IN_PRICE_REGIME_HAS_BEEN_USED = 281; // All contract storage allocated to the current price regime has been consumed. + int32 internal constant INVALID_ALIAS_KEY = 282; // An alias used in a CryptoTransfer transaction is not the serialization of a primitive Key message -- that is, a Key with a single Ed25519 or ECDSA(secp256k1) public key and no unknown protobuf fields. + int32 internal constant UNEXPECTED_TOKEN_DECIMALS = 283; // A fungible token transfer expected a different number of decimals than the involved type actually has. + int32 internal constant INVALID_PROXY_ACCOUNT_ID = 284; // [Deprecated] The proxy account id is invalid or does not exist. + int32 internal constant INVALID_TRANSFER_ACCOUNT_ID = 285; // The transfer account id in CryptoDelete transaction is invalid or does not exist. + int32 internal constant INVALID_FEE_COLLECTOR_ACCOUNT_ID = 286; // The fee collector account id in TokenFeeScheduleUpdate is invalid or does not exist. + int32 internal constant ALIAS_IS_IMMUTABLE = 287; // The alias already set on an account cannot be updated using CryptoUpdate transaction. + int32 internal constant SPENDER_ACCOUNT_SAME_AS_OWNER = 288; // An approved allowance specifies a spender account that is the same as the hbar/token owner account. + int32 internal constant AMOUNT_EXCEEDS_TOKEN_MAX_SUPPLY = 289; // The establishment or adjustment of an approved allowance cause the token allowance to exceed the token maximum supply. + int32 internal constant NEGATIVE_ALLOWANCE_AMOUNT = 290; // The specified amount for an approved allowance cannot be negative. + int32 internal constant CANNOT_APPROVE_FOR_ALL_FUNGIBLE_COMMON = 291; // [Deprecated] The approveForAll flag cannot be set for a fungible token. + int32 internal constant SPENDER_DOES_NOT_HAVE_ALLOWANCE = 292; // The spender does not have an existing approved allowance with the hbar/token owner. + int32 internal constant AMOUNT_EXCEEDS_ALLOWANCE = 293; // The transfer amount exceeds the current approved allowance for the spender account. + int32 internal constant MAX_ALLOWANCES_EXCEEDED = 294; // The payer account of an approveAllowances or adjustAllowance transaction is attempting to go beyond the maximum allowed number of allowances. + int32 internal constant EMPTY_ALLOWANCES = 295; // No allowances have been specified in the approval transaction. + int32 internal constant SPENDER_ACCOUNT_REPEATED_IN_ALLOWANCES = 296; // [Deprecated] Spender is repeated more than once in Crypto or Token or NFT allowance lists in a single CryptoApproveAllowance transaction. + int32 internal constant REPEATED_SERIAL_NUMS_IN_NFT_ALLOWANCES = 297; // [Deprecated] Serial numbers are repeated in nft allowance for a single spender account + int32 internal constant FUNGIBLE_TOKEN_IN_NFT_ALLOWANCES = 298; // Fungible common token used in NFT allowances + int32 internal constant NFT_IN_FUNGIBLE_TOKEN_ALLOWANCES = 299; // Non fungible token used in fungible token allowances + int32 internal constant INVALID_ALLOWANCE_OWNER_ID = 300; // The account id specified as the owner is invalid or does not exist. + int32 internal constant INVALID_ALLOWANCE_SPENDER_ID = 301; // The account id specified as the spender is invalid or does not exist. + int32 internal constant REPEATED_ALLOWANCES_TO_DELETE = 302; // [Deprecated] If the CryptoDeleteAllowance transaction has repeated crypto or token or Nft allowances to delete. + int32 internal constant INVALID_DELEGATING_SPENDER = 303; // If the account Id specified as the delegating spender is invalid or does not exist. + int32 internal constant DELEGATING_SPENDER_CANNOT_GRANT_APPROVE_FOR_ALL = 304; // The delegating Spender cannot grant approveForAll allowance on a NFT token type for another spender. + int32 internal constant DELEGATING_SPENDER_DOES_NOT_HAVE_APPROVE_FOR_ALL = 305; // The delegating Spender cannot grant allowance on a NFT serial for another spender as it doesnt not have approveForAll granted on token-owner. + int32 internal constant SCHEDULE_EXPIRATION_TIME_TOO_FAR_IN_FUTURE = 306; // The scheduled transaction could not be created because it's expiration_time was too far in the future. + int32 internal constant SCHEDULE_EXPIRATION_TIME_MUST_BE_HIGHER_THAN_CONSENSUS_TIME = 307; // The scheduled transaction could not be created because it's expiration_time was less than or equal to the consensus time. + int32 internal constant SCHEDULE_FUTURE_THROTTLE_EXCEEDED = 308; // The scheduled transaction could not be created because it would cause throttles to be violated on the specified expiration_time. + int32 internal constant SCHEDULE_FUTURE_GAS_LIMIT_EXCEEDED = 309; // The scheduled transaction could not be created because it would cause the gas limit to be violated on the specified expiration_time. + int32 internal constant INVALID_ETHEREUM_TRANSACTION = 310; // The ethereum transaction either failed parsing or failed signature validation, or some other EthereumTransaction error not covered by another response code. + int32 internal constant WRONG_CHAIN_ID = 311; // EthereumTransaction was signed against a chainId that this network does not support. + int32 internal constant WRONG_NONCE = 312; // This transaction specified an ethereumNonce that is not the current ethereumNonce of the account. + int32 internal constant ACCESS_LIST_UNSUPPORTED = 313; // The ethereum transaction specified an access list, which the network does not support. + int32 internal constant SCHEDULE_PENDING_EXPIRATION = 314; // A schedule being signed or deleted has passed it's expiration date and is pending execution if needed and then expiration. + int32 internal constant CONTRACT_IS_TOKEN_TREASURY = 315; // A selfdestruct or ContractDelete targeted a contract that is a token treasury. + int32 internal constant CONTRACT_HAS_NON_ZERO_TOKEN_BALANCES = 316; // A selfdestruct or ContractDelete targeted a contract with non-zero token balances. + int32 internal constant CONTRACT_EXPIRED_AND_PENDING_REMOVAL = 317; // A contract referenced by a transaction is "detached"; that is, expired and lacking any hbar funds for auto-renewal payment---but still within its post-expiry grace period. + int32 internal constant CONTRACT_HAS_NO_AUTO_RENEW_ACCOUNT = 318; // A ContractUpdate requested removal of a contract's auto-renew account, but that contract has no auto-renew account. + int32 internal constant PERMANENT_REMOVAL_REQUIRES_SYSTEM_INITIATION = 319; // A delete transaction submitted via HAPI set permanent_removal=true + int32 internal constant PROXY_ACCOUNT_ID_FIELD_IS_DEPRECATED = 320; // A CryptoCreate or ContractCreate used the deprecated proxyAccountID field. + int32 internal constant SELF_STAKING_IS_NOT_ALLOWED = 321; // An account set the staked_account_id to itself in CryptoUpdate or ContractUpdate transactions. + int32 internal constant INVALID_STAKING_ID = 322; // The staking account id or staking node id given is invalid or does not exist. + int32 internal constant STAKING_NOT_ENABLED = 323; // Native staking, while implemented, has not yet enabled by the council. + int32 internal constant INVALID_PRNG_RANGE = 324; // The range provided in UtilPrng transaction is negative. + int32 internal constant MAX_ENTITIES_IN_PRICE_REGIME_HAVE_BEEN_CREATED = 325; // The maximum number of entities allowed in the current price regime have been created. + int32 internal constant INVALID_FULL_PREFIX_SIGNATURE_FOR_PRECOMPILE = 326; // The full prefix signature for precompile is not valid + int32 internal constant INSUFFICIENT_BALANCES_FOR_STORAGE_RENT = 327; // The combined balances of a contract and its auto-renew account (if any) did not cover the rent charged for net new storage used in a transaction. + int32 internal constant MAX_CHILD_RECORDS_EXCEEDED = 328; // A contract transaction tried to use more than the allowed number of child records, via either system contract records or internal contract creations. + int32 internal constant INSUFFICIENT_BALANCES_FOR_RENEWAL_FEES = 329; // The combined balances of a contract and its auto-renew account (if any) or balance of an account did not cover the auto-renewal fees in a transaction. +} diff --git a/contracts/hedera/IHederaTokenService.sol b/contracts/hedera/IHederaTokenService.sol new file mode 100644 index 00000000..e674b0fb --- /dev/null +++ b/contracts/hedera/IHederaTokenService.sol @@ -0,0 +1,667 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.0; + +interface IHederaTokenService { + /// Transfers cryptocurrency among two or more accounts by making the desired adjustments to their + /// balances. Each transfer list can specify up to 10 adjustments. Each negative amount is withdrawn + /// from the corresponding account (a sender), and each positive one is added to the corresponding + /// account (a receiver). The amounts list must sum to zero. Each amount is a number of tinybars + /// (there are 100,000,000 tinybars in one hbar). If any sender account fails to have sufficient + /// hbars, then the entire transaction fails, and none of those transfers occur, though the + /// transaction fee is still charged. This transaction must be signed by the keys for all the sending + /// accounts, and for any receiving accounts that have receiverSigRequired == true. The signatures + /// are in the same order as the accounts, skipping those accounts that don't need a signature. + struct AccountAmount { + // The Account ID, as a solidity address, that sends/receives cryptocurrency or tokens + // solhint-disable-next-line var-name-mixedcase + address accountID; + // The amount of the lowest denomination of the given token that + // the account sends(negative) or receives(positive) + int64 amount; + // If true then the transfer is expected to be an approved allowance and the + // accountID is expected to be the owner. The default is false (omitted). + bool isApproval; + } + + /// A sender account, a receiver account, and the serial number of an NFT of a Token with + /// NON_FUNGIBLE_UNIQUE type. When minting NFTs the sender will be the default AccountID instance + /// (0.0.0 aka 0x0) and when burning NFTs, the receiver will be the default AccountID instance. + struct NftTransfer { + // The solidity address of the sender + address senderAccountID; + // The solidity address of the receiver + address receiverAccountID; + // The serial number of the NFT + int64 serialNumber; + // If true then the transfer is expected to be an approved allowance and the + // accountID is expected to be the owner. The default is false (omitted). + bool isApproval; + } + + struct TokenTransferList { + // The ID of the token as a solidity address + address token; + // Applicable to tokens of type FUNGIBLE_COMMON. Multiple list of AccountAmounts, each of which + // has an account and amount. + AccountAmount[] transfers; + // Applicable to tokens of type NON_FUNGIBLE_UNIQUE. Multiple list of NftTransfers, each of + // which has a sender and receiver account, including the serial number of the NFT + NftTransfer[] nftTransfers; + } + + struct TransferList { + // Multiple list of AccountAmounts, each of which has an account and amount. + // Used to transfer hbars between the accounts in the list. + AccountAmount[] transfers; + } + + /// Expiry properties of a Hedera token - second, autoRenewAccount, autoRenewPeriod + struct Expiry { + // The epoch second at which the token should expire; if an auto-renew account and period are + // specified, this is coerced to the current epoch second plus the autoRenewPeriod + int64 second; + // ID of an account which will be automatically charged to renew the token's expiration, at + // autoRenewPeriod interval, expressed as a solidity address + address autoRenewAccount; + // The interval at which the auto-renew account will be charged to extend the token's expiry + int64 autoRenewPeriod; + } + + /// A Key can be a public key from either the Ed25519 or ECDSA(secp256k1) signature schemes, where + /// in the ECDSA(secp256k1) case we require the 33-byte compressed form of the public key. We call + /// these public keys primitive keys. + /// A Key can also be the ID of a smart contract instance, which is then authorized to perform any + /// precompiled contract action that requires this key to sign. + /// Note that when a Key is a smart contract ID, it doesn't mean the contract with that ID + /// will actually create a cryptographic signature. It only means that when the contract calls a + /// precompiled contract, the resulting "child transaction" will be authorized to perform any action + /// controlled by the Key. + /// Exactly one of the possible values should be populated in order for the Key to be valid. + struct KeyValue { + // if set to true, the key of the calling Hedera account will be inherited as the token key + bool inheritAccountKey; + // smart contract instance that is authorized as if it had signed with a key + address contractId; + // Ed25519 public key bytes + bytes ed25519; + // Compressed ECDSA(secp256k1) public key bytes + // solhint-disable-next-line var-name-mixedcase + bytes ECDSA_secp256k1; + // A smart contract that, if the recipient of the active message frame, should be treated + // as having signed. (Note this does not mean the code being executed in the frame + // will belong to the given contract, since it could be running another contract's code via + // delegatecall. So setting this key is a more permissive version of setting the + // contractID key, which also requires the code in the active message frame belong to the + // the contract with the given id.) + address delegatableContractId; + } + + /// A list of token key types the key should be applied to and the value of the key + struct TokenKey { + // bit field representing the key type. Keys of all types that have corresponding bits set to 1 + // will be created for the token. + // 0th bit: adminKey + // 1st bit: kycKey + // 2nd bit: freezeKey + // 3rd bit: wipeKey + // 4th bit: supplyKey + // 5th bit: feeScheduleKey + // 6th bit: pauseKey + // 7th bit: ignored + uint256 keyType; + // the value that will be set to the key type + KeyValue key; + } + + /// Basic properties of a Hedera Token - name, symbol, memo, tokenSupplyType, maxSupply, + /// treasury, freezeDefault. These properties are related both to Fungible and NFT token types. + struct HederaToken { + // The publicly visible name of the token. The token name is specified as a Unicode string. + // Its UTF-8 encoding cannot exceed 100 bytes, and cannot contain the 0 byte (NUL). + string name; + // The publicly visible token symbol. The token symbol is specified as a Unicode string. + // Its UTF-8 encoding cannot exceed 100 bytes, and cannot contain the 0 byte (NUL). + string symbol; + // The ID of the account which will act as a treasury for the token as a solidity address. + // This account will receive the specified initial supply or the newly minted NFTs in + // the case for NON_FUNGIBLE_UNIQUE Type + address treasury; + // The memo associated with the token (UTF-8 encoding max 100 bytes) + string memo; + // IWA compatibility. Specified the token supply type. Defaults to INFINITE + bool tokenSupplyType; + // IWA Compatibility. Depends on TokenSupplyType. For tokens of type FUNGIBLE_COMMON - the + // maximum number of tokens that can be in circulation. For tokens of type NON_FUNGIBLE_UNIQUE - + // the maximum number of NFTs (serial numbers) that can be minted. This field can never be changed! + int64 maxSupply; + // The default Freeze status (frozen or unfrozen) of Hedera accounts relative to this token. If + // true, an account must be unfrozen before it can receive the token + bool freezeDefault; + // list of keys to set to the token + TokenKey[] tokenKeys; + // expiry properties of a Hedera token - second, autoRenewAccount, autoRenewPeriod + Expiry expiry; + } + + /// Additional post creation fungible and non fungible properties of a Hedera Token. + struct TokenInfo { + /// Basic properties of a Hedera Token + HederaToken token; + /// The number of tokens (fungible) or serials (non-fungible) of the token + int64 totalSupply; + /// Specifies whether the token is deleted or not + bool deleted; + /// Specifies whether the token kyc was defaulted with KycNotApplicable (true) or Revoked (false) + bool defaultKycStatus; + /// Specifies whether the token is currently paused or not + bool pauseStatus; + /// The fixed fees collected when transferring the token + FixedFee[] fixedFees; + /// The fractional fees collected when transferring the token + FractionalFee[] fractionalFees; + /// The royalty fees collected when transferring the token + RoyaltyFee[] royaltyFees; + /// The ID of the network ledger + string ledgerId; + } + + /// Additional fungible properties of a Hedera Token. + struct FungibleTokenInfo { + /// The shared hedera token info + TokenInfo tokenInfo; + /// The number of decimal places a token is divisible by + int32 decimals; + } + + /// Additional non fungible properties of a Hedera Token. + struct NonFungibleTokenInfo { + /// The shared hedera token info + TokenInfo tokenInfo; + /// The serial number of the nft + int64 serialNumber; + /// The account id specifying the owner of the non fungible token + address ownerId; + /// The epoch second at which the token was created. + int64 creationTime; + /// The unique metadata of the NFT + bytes metadata; + /// The account id specifying an account that has been granted spending permissions on this nft + address spenderId; + } + + /// A fixed number of units (hbar or token) to assess as a fee during a transfer of + /// units of the token to which this fixed fee is attached. The denomination of + /// the fee depends on the values of tokenId, useHbarsForPayment and + /// useCurrentTokenForPayment. Exactly one of the values should be set. + struct FixedFee { + int64 amount; + // Specifies ID of token that should be used for fixed fee denomination + address tokenId; + // Specifies this fixed fee should be denominated in Hbar + bool useHbarsForPayment; + // Specifies this fixed fee should be denominated in the Token currently being created + bool useCurrentTokenForPayment; + // The ID of the account to receive the custom fee, expressed as a solidity address + address feeCollector; + } + + /// A fraction of the transferred units of a token to assess as a fee. The amount assessed will never + /// be less than the given minimumAmount, and never greater than the given maximumAmount. The + /// denomination is always units of the token to which this fractional fee is attached. + struct FractionalFee { + // A rational number's numerator, used to set the amount of a value transfer to collect as a custom fee + int64 numerator; + // A rational number's denominator, used to set the amount of a value transfer to collect as a custom fee + int64 denominator; + // The minimum amount to assess + int64 minimumAmount; + // The maximum amount to assess (zero implies no maximum) + int64 maximumAmount; + bool netOfTransfers; + // The ID of the account to receive the custom fee, expressed as a solidity address + address feeCollector; + } + + /// A fee to assess during a transfer that changes ownership of an NFT. Defines the fraction of + /// the fungible value exchanged for an NFT that the ledger should collect as a royalty. ("Fungible + /// value" includes both ℏ and units of fungible HTS tokens.) When the NFT sender does not receive + /// any fungible value, the ledger will assess the fallback fee, if present, to the new NFT owner. + /// Royalty fees can only be added to tokens of type type NON_FUNGIBLE_UNIQUE. + struct RoyaltyFee { + // A fraction's numerator of fungible value exchanged for an NFT to collect as royalty + int64 numerator; + // A fraction's denominator of fungible value exchanged for an NFT to collect as royalty + int64 denominator; + // If present, the fee to assess to the NFT receiver when no fungible value + // is exchanged with the sender. Consists of: + // amount: the amount to charge for the fee + // tokenId: Specifies ID of token that should be used for fixed fee denomination + // useHbarsForPayment: Specifies this fee should be denominated in Hbar + int64 amount; + address tokenId; + bool useHbarsForPayment; + // The ID of the account to receive the custom fee, expressed as a solidity address + address feeCollector; + } + + /** + * + * Direct HTS Calls * + * + */ + + /// Performs transfers among combinations of tokens and hbars + /// @param transferList the list of hbar transfers to do + /// @param tokenTransfers the list of token transfers to do + function cryptoTransfer( + TransferList memory transferList, + TokenTransferList[] memory tokenTransfers + ) external returns (int64 responseCode); + + /// Mints an amount of the token to the defined treasury account + /// @param token The token for which to mint tokens. If token does not exist, transaction results in + /// INVALID_TOKEN_ID + /// @param amount Applicable to tokens of type FUNGIBLE_COMMON. The amount to mint to the Treasury Account. + /// Amount must be a positive non-zero number represented in the lowest denomination of the + /// token. The new supply must be lower than 2^63. + /// @param metadata Applicable to tokens of type NON_FUNGIBLE_UNIQUE. A list of metadata that are being created. + /// Maximum allowed size of each metadata is 100 bytes + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return newTotalSupply The new supply of tokens. For NFTs it is the total count of NFTs + /// @return serialNumbers If the token is an NFT the newly generate serial numbers, othersise empty. + function mintToken( + address token, + int64 amount, + bytes[] memory metadata + ) external returns (int64 responseCode, int64 newTotalSupply, int64[] memory serialNumbers); + + /// Burns an amount of the token from the defined treasury account + /// @param token The token for which to burn tokens. If token does not exist, transaction results in + /// INVALID_TOKEN_ID + /// @param amount Applicable to tokens of type FUNGIBLE_COMMON. The amount to burn from the Treasury Account. + /// Amount must be a positive non-zero number, not bigger than the token balance of the treasury + /// account (0; balance], represented in the lowest denomination. + /// @param serialNumbers Applicable to tokens of type NON_FUNGIBLE_UNIQUE. The list of serial numbers to be burned. + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return newTotalSupply The new supply of tokens. For NFTs it is the total count of NFTs + function burnToken( + address token, + int64 amount, + int64[] memory serialNumbers + ) external returns (int64 responseCode, int64 newTotalSupply); + + /// Associates the provided account with the provided tokens. Must be signed by the provided + /// Account's key or called from the accounts contract key + /// If the provided account is not found, the transaction will resolve to INVALID_ACCOUNT_ID. + /// If the provided account has been deleted, the transaction will resolve to ACCOUNT_DELETED. + /// If any of the provided tokens is not found, the transaction will resolve to INVALID_TOKEN_REF. + /// If any of the provided tokens has been deleted, the transaction will resolve to TOKEN_WAS_DELETED. + /// If an association between the provided account and any of the tokens already exists, the + /// transaction will resolve to TOKEN_ALREADY_ASSOCIATED_TO_ACCOUNT. + /// If the provided account's associations count exceed the constraint of maximum token associations + /// per account, the transaction will resolve to TOKENS_PER_ACCOUNT_LIMIT_EXCEEDED. + /// On success, associations between the provided account and tokens are made and the account is + /// ready to interact with the tokens. + /// @param account The account to be associated with the provided tokens + /// @param tokens The tokens to be associated with the provided account. In the case of NON_FUNGIBLE_UNIQUE + /// Type, once an account is associated, it can hold any number of NFTs (serial numbers) of that + /// token type + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function associateTokens(address account, address[] memory tokens) external returns (int64 responseCode); + + /// Single-token variant of associateTokens. Will be mapped to a single entry array call of associateTokens + /// @param account The account to be associated with the provided token + /// @param token The token to be associated with the provided account + function associateToken(address account, address token) external returns (int64 responseCode); + + /// Dissociates the provided account with the provided tokens. Must be signed by the provided + /// Account's key. + /// If the provided account is not found, the transaction will resolve to INVALID_ACCOUNT_ID. + /// If the provided account has been deleted, the transaction will resolve to ACCOUNT_DELETED. + /// If any of the provided tokens is not found, the transaction will resolve to INVALID_TOKEN_REF. + /// If any of the provided tokens has been deleted, the transaction will resolve to TOKEN_WAS_DELETED. + /// If an association between the provided account and any of the tokens does not exist, the + /// transaction will resolve to TOKEN_NOT_ASSOCIATED_TO_ACCOUNT. + /// If a token has not been deleted and has not expired, and the user has a nonzero balance, the + /// transaction will resolve to TRANSACTION_REQUIRES_ZERO_TOKEN_BALANCES. + /// If a fungible token has expired, the user can disassociate even if their token balance is + /// not zero. + /// If a non fungible token has expired, the user can not disassociate if their token + /// balance is not zero. The transaction will resolve to TRANSACTION_REQUIRED_ZERO_TOKEN_BALANCES. + /// On success, associations between the provided account and tokens are removed. + /// @param account The account to be dissociated from the provided tokens + /// @param tokens The tokens to be dissociated from the provided account. + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function dissociateTokens(address account, address[] memory tokens) external returns (int64 responseCode); + + /// Single-token variant of dissociateTokens. Will be mapped to a single entry array call of dissociateTokens + /// @param account The account to be associated with the provided token + /// @param token The token to be associated with the provided account + function dissociateToken(address account, address token) external returns (int64 responseCode); + + /// Creates a Fungible Token with the specified properties + /// @param token the basic properties of the token being created + /// @param initialTotalSupply Specifies the initial supply of tokens to be put in circulation. The + /// initial supply is sent to the Treasury Account. The supply is in the lowest denomination possible. + /// @param decimals the number of decimal places a token is divisible by + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return tokenAddress the created token's address + function createFungibleToken( + HederaToken memory token, + int64 initialTotalSupply, + int32 decimals + ) external payable returns (int64 responseCode, address tokenAddress); + + /// Creates a Fungible Token with the specified properties + /// @param token the basic properties of the token being created + /// @param initialTotalSupply Specifies the initial supply of tokens to be put in circulation. The + /// initial supply is sent to the Treasury Account. The supply is in the lowest denomination possible. + /// @param decimals the number of decimal places a token is divisible by. + /// @param fixedFees list of fixed fees to apply to the token + /// @param fractionalFees list of fractional fees to apply to the token + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return tokenAddress the created token's address + function createFungibleTokenWithCustomFees( + HederaToken memory token, + int64 initialTotalSupply, + int32 decimals, + FixedFee[] memory fixedFees, + FractionalFee[] memory fractionalFees + ) external payable returns (int64 responseCode, address tokenAddress); + + /// Creates an Non Fungible Unique Token with the specified properties + /// @param token the basic properties of the token being created + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return tokenAddress the created token's address + function createNonFungibleToken(HederaToken memory token) external payable returns (int64 responseCode, address tokenAddress); + + /// Creates an Non Fungible Unique Token with the specified properties + /// @param token the basic properties of the token being created + /// @param fixedFees list of fixed fees to apply to the token + /// @param royaltyFees list of royalty fees to apply to the token + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return tokenAddress the created token's address + function createNonFungibleTokenWithCustomFees( + HederaToken memory token, + FixedFee[] memory fixedFees, + RoyaltyFee[] memory royaltyFees + ) external payable returns (int64 responseCode, address tokenAddress); + + /** + * + * ABIV1 calls * + * + */ + + /// Initiates a Fungible Token Transfer + /// @param token The ID of the token as a solidity address + /// @param accountId account to do a transfer to/from + /// @param amount The amount from the accountId at the same index + function transferTokens(address token, address[] memory accountId, int64[] memory amount) external returns (int64 responseCode); + + /// Initiates a Non-Fungable Token Transfer + /// @param token The ID of the token as a solidity address + /// @param sender the sender of an nft + /// @param receiver the receiver of the nft sent by the same index at sender + /// @param serialNumber the serial number of the nft sent by the same index at sender + function transferNFTs( + address token, + address[] memory sender, + address[] memory receiver, + int64[] memory serialNumber + ) external returns (int64 responseCode); + + /// Transfers tokens where the calling account/contract is implicitly the first entry in the token transfer list, + /// where the amount is the value needed to zero balance the transfers. Regular signing rules apply for sending + /// (positive amount) or receiving (negative amount) + /// @param token The token to transfer to/from + /// @param sender The sender for the transaction + /// @param recipient The receiver of the transaction + /// @param amount Non-negative value to send. a negative value will result in a failure. + function transferToken(address token, address sender, address recipient, int64 amount) external returns (int64 responseCode); + + /// Transfers tokens where the calling account/contract is implicitly the first entry in the token transfer list, + /// where the amount is the value needed to zero balance the transfers. Regular signing rules apply for sending + /// (positive amount) or receiving (negative amount) + /// @param token The token to transfer to/from + /// @param sender The sender for the transaction + /// @param recipient The receiver of the transaction + /// @param serialNumber The serial number of the NFT to transfer. + function transferNFT(address token, address sender, address recipient, int64 serialNumber) external returns (int64 responseCode); + + /// Allows spender to withdraw from your account multiple times, up to the value amount. If this function is called + /// again it overwrites the current allowance with value. + /// Only Applicable to Fungible Tokens + /// @param token The hedera token address to approve + /// @param spender the account address authorized to spend + /// @param amount the amount of tokens authorized to spend. + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function approve(address token, address spender, uint256 amount) external returns (int64 responseCode); + + /// Transfers `amount` tokens from `from` to `to` using the + // allowance mechanism. `amount` is then deducted from the caller's allowance. + /// Only applicable to fungible tokens + /// @param token The address of the fungible Hedera token to transfer + /// @param from The account address of the owner of the token, on the behalf of which to transfer `amount` tokens + /// @param to The account address of the receiver of the `amount` tokens + /// @param amount The amount of tokens to transfer from `from` to `to` + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function transferFrom(address token, address from, address to, uint256 amount) external returns (int64 responseCode); + + /// Returns the amount which spender is still allowed to withdraw from owner. + /// Only Applicable to Fungible Tokens + /// @param token The Hedera token address to check the allowance of + /// @param owner the owner of the tokens to be spent + /// @param spender the spender of the tokens + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return allowance The amount which spender is still allowed to withdraw from owner. + function allowance(address token, address owner, address spender) external returns (int64 responseCode, uint256 allowance); + + /// Allow or reaffirm the approved address to transfer an NFT the approved address does not own. + /// Only Applicable to NFT Tokens + /// @param token The Hedera NFT token address to approve + /// @param approved The new approved NFT controller. To revoke approvals pass in the zero address. + /// @param serialNumber The NFT serial number to approve + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function approveNFT(address token, address approved, uint256 serialNumber) external returns (int64 responseCode); + + /// Transfers `serialNumber` of `token` from `from` to `to` using the allowance mechanism. + /// Only applicable to NFT tokens + /// @param token The address of the non-fungible Hedera token to transfer + /// @param from The account address of the owner of `serialNumber` of `token` + /// @param to The account address of the receiver of `serialNumber` + /// @param serialNumber The NFT serial number to transfer + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function transferFromNFT(address token, address from, address to, uint256 serialNumber) external returns (int64 responseCode); + + /// Get the approved address for a single NFT + /// Only Applicable to NFT Tokens + /// @param token The Hedera NFT token address to check approval + /// @param serialNumber The NFT to find the approved address for + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return approved The approved address for this NFT, or the zero address if there is none + function getApproved(address token, uint256 serialNumber) external returns (int64 responseCode, address approved); + + /// Enable or disable approval for a third party ("operator") to manage + /// all of `msg.sender`'s assets + /// @param token The Hedera NFT token address to approve + /// @param operator Address to add to the set of authorized operators + /// @param approved True if the operator is approved, false to revoke approval + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function setApprovalForAll(address token, address operator, bool approved) external returns (int64 responseCode); + + /// Query if an address is an authorized operator for another address + /// Only Applicable to NFT Tokens + /// @param token The Hedera NFT token address to approve + /// @param owner The address that owns the NFTs + /// @param operator The address that acts on behalf of the owner + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return approved True if `operator` is an approved operator for `owner`, false otherwise + function isApprovedForAll(address token, address owner, address operator) external returns (int64 responseCode, bool approved); + + /// Query if token account is frozen + /// @param token The token address to check + /// @param account The account address associated with the token + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return frozen True if `account` is frozen for `token` + function isFrozen(address token, address account) external returns (int64 responseCode, bool frozen); + + /// Query if token account has kyc granted + /// @param token The token address to check + /// @param account The account address associated with the token + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return kycGranted True if `account` has kyc granted for `token` + function isKyc(address token, address account) external returns (int64 responseCode, bool kycGranted); + + /// Operation to delete token + /// @param token The token address to be deleted + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function deleteToken(address token) external returns (int64 responseCode); + + /// Query token custom fees + /// @param token The token address to check + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return fixedFees Set of fixed fees for `token` + /// @return fractionalFees Set of fractional fees for `token` + /// @return royaltyFees Set of royalty fees for `token` + function getTokenCustomFees( + address token + ) + external + returns (int64 responseCode, FixedFee[] memory fixedFees, FractionalFee[] memory fractionalFees, RoyaltyFee[] memory royaltyFees); + + /// Query token default freeze status + /// @param token The token address to check + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return defaultFreezeStatus True if `token` default freeze status is frozen. + function getTokenDefaultFreezeStatus(address token) external returns (int64 responseCode, bool defaultFreezeStatus); + + /// Query token default kyc status + /// @param token The token address to check + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return defaultKycStatus True if `token` default kyc status is KycNotApplicable and false if Revoked. + function getTokenDefaultKycStatus(address token) external returns (int64 responseCode, bool defaultKycStatus); + + /// Query token expiry info + /// @param token The token address to check + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return expiry Expiry info for `token` + function getTokenExpiryInfo(address token) external returns (int64 responseCode, Expiry memory expiry); + + /// Query fungible token info + /// @param token The token address to check + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return fungibleTokenInfo FungibleTokenInfo info for `token` + function getFungibleTokenInfo(address token) external returns (int64 responseCode, FungibleTokenInfo memory fungibleTokenInfo); + + /// Query token info + /// @param token The token address to check + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return tokenInfo TokenInfo info for `token` + function getTokenInfo(address token) external returns (int64 responseCode, TokenInfo memory tokenInfo); + + /// Query token KeyValue + /// @param token The token address to check + /// @param keyType The keyType of the desired KeyValue + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return key KeyValue info for key of type `keyType` + function getTokenKey(address token, uint256 keyType) external returns (int64 responseCode, KeyValue memory key); + + /// Query non fungible token info + /// @param token The token address to check + /// @param serialNumber The NFT serialNumber to check + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return nonFungibleTokenInfo NonFungibleTokenInfo info for `token` `serialNumber` + function getNonFungibleTokenInfo( + address token, + int64 serialNumber + ) external returns (int64 responseCode, NonFungibleTokenInfo memory nonFungibleTokenInfo); + + /// Operation to freeze token account + /// @param token The token address + /// @param account The account address to be frozen + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function freezeToken(address token, address account) external returns (int64 responseCode); + + /// Operation to unfreeze token account + /// @param token The token address + /// @param account The account address to be unfrozen + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function unfreezeToken(address token, address account) external returns (int64 responseCode); + + /// Operation to grant kyc to token account + /// @param token The token address + /// @param account The account address to grant kyc + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function grantTokenKyc(address token, address account) external returns (int64 responseCode); + + /// Operation to revoke kyc to token account + /// @param token The token address + /// @param account The account address to revoke kyc + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function revokeTokenKyc(address token, address account) external returns (int64 responseCode); + + /// Operation to pause token + /// @param token The token address to be paused + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function pauseToken(address token) external returns (int64 responseCode); + + /// Operation to unpause token + /// @param token The token address to be unpaused + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function unpauseToken(address token) external returns (int64 responseCode); + + /// Operation to wipe fungible tokens from account + /// @param token The token address + /// @param account The account address to revoke kyc + /// @param amount The number of tokens to wipe + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function wipeTokenAccount(address token, address account, int64 amount) external returns (int64 responseCode); + + /// Operation to wipe non fungible tokens from account + /// @param token The token address + /// @param account The account address to revoke kyc + /// @param serialNumbers The serial numbers of token to wipe + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function wipeTokenAccountNFT(address token, address account, int64[] memory serialNumbers) external returns (int64 responseCode); + + /// Operation to update token info + /// @param token The token address + /// @param tokenInfo The hedera token info to update token with + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function updateTokenInfo(address token, HederaToken memory tokenInfo) external returns (int64 responseCode); + + /// Operation to update token expiry info + /// @param token The token address + /// @param expiryInfo The hedera token expiry info + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function updateTokenExpiryInfo(address token, Expiry memory expiryInfo) external returns (int64 responseCode); + + /// Operation to update token expiry info + /// @param token The token address + /// @param keys The token keys + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function updateTokenKeys(address token, TokenKey[] memory keys) external returns (int64 responseCode); + + /// Query if valid token found for the given address + /// @param token The token address + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return isToken True if valid token found for the given address + function isToken(address token) external returns (int64 responseCode, bool isToken); + + /// Query to return the token type for a given address + /// @param token The token address + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return tokenType the token type. 0 is FUNGIBLE_COMMON, 1 is NON_FUNGIBLE_UNIQUE, -1 is UNRECOGNIZED + function getTokenType(address token) external returns (int64 responseCode, int32 tokenType); + + /// Initiates a Redirect For Token + /// @param token The token address + /// @param encodedFunctionSelector The function selector from the ERC20 interface + the bytes input for the function called + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return response The result of the call that had been encoded and sent for execution. + function redirectForToken( + address token, + bytes memory encodedFunctionSelector + ) external returns (int64 responseCode, bytes memory response); +} diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md new file mode 100644 index 00000000..d5423360 --- /dev/null +++ b/contracts/hedera/README.md @@ -0,0 +1,31 @@ +# Hedera ITS Support + +## Overview + +ITS contracts in this repo are modified to support Hedera Token Service. All new interchain tokens will be created via HTS, while existing HTS and ERC20 tokens are supported for registration. New HTS Interchain tokens will have `InterchainTokenService` as the sole Supply Key ("MinterBurner" equivalent in Hedera) and Treasury (the contract that gets the newly minted coins). After minting, the Treasury transfers the tokens to the designated account. Before burning, the tokens are transfered back to the Treasury. ITS uses typical `allowance` and `transferFrom` to move tokens before burning. ITS keeps track of minters and allows for external minting and burning (see `TokenMinter.sol`). Certain ITS features are not supported due to HTS limitations, such as initial supply. + +### Hedera-related Notes + +- Hedera contract and token "rent" and "expiry" are disabled on Hedera and not supported in this implementation. +- `IERC20` standard methods are supported, including `allowance` and `approve`. See [hip-218](https://hips.hedera.com/hip/hip-218) and [hip-376](https://hips.hedera.com/hip/hip-376). `mint` and `burn` are not supported. +- Unlike an EVM token, the [maximum supply for an HTS token is 2^63](https://docs.hedera.com/hedera/sdks-and-apis/sdks/token-service/define-a-token#token-properties). There's planned support for decimal translation in ITS. +- HTS tokens with the following keys are not supported by ITS: `kycKey`, `wipeKey`, `freezeKey`, `pauseKey`. `adminKey` can update existing keys, but cannot add new keys if they were not set during the creation of the token ([see here](https://docs.hedera.com/hedera/sdks-and-apis/sdks/token-service/update-a-token)). +- `HTS.sol` library is a subset of the Hedera provided system library [HederaTokenService](https://github.com/hashgraph/hedera-smart-contracts/blob/bc3a549c0ca062c51b0045fd1916fdaa0558a360/contracts/system-contracts/hedera-token-service/HederaTokenService.sol). Functions are modified to revert instead of returning response codes. +- Currently new tokens created via HTS EVM system contract can have **only one** Supply Key (Minter). +- Currently new tokens created via HTS EVM system contract must have the Treasury be the creator of the token. +- `createFungibleToken` in `HTS.sol` uses `msg.value` to pay for token creation, alongside regular gas fee. + +### ITS-related Notes + +- `InterchainTokenService.sol` `execute` is payable, since it needs to pay for the HTS token creation fee. It is assumed that the fee is sent as value. `IAxelarValuedExpressExecutable`, `IAxelarExpressExecutable` and `IAxelarExecutable` are copied from `@axelar-network/axelar-gmp-sdk-solidity`. All unchanged except for the `execute` method in `IAxelarExecutable` to include the `payable` modifier. +- `InterchainTokenDeployer.sol` `deployedAddress` is not supported, since HTS tokens don't have deterministic addresses. +- `interchainTokenAddress` was removed from `InterchainTokenService.sol`, since HTS tokens don't have deterministic addresses. `registeredTokenAddress` should be used instead. +- `transmitInterchainTransfer` was removed from `InterchainTokenService.sol` since it's meant to be called from an `InterchainToken` contract, which is not used. +- `flowLimit`, `flowOutAmount` and `flowInAmount` are removed from `InterchainTokenService.sol` to reduce the size of the contract. +- When creating a new interchain token, `InterchainTokenService` and `TokenManager` are associated with the token. +- When deploying a new interchain token, a Hedera-specific token-creation fee must be sent as value. For this reason, the `deployInterchainToken` method is payable. +- `initialSupply` isn't supported when deploying a new interchain token. To receive tokens, an account needs to previously associate with the token, thus it cannot immediately receive tokens after creation. +- Both HTS tokens and ERC20 tokens are supported for registration. +- When registering a canonical token, only the `TokenManager` is associated with the token. +- `TokenHandler`'s `_giveInterchainToken` and `_takeInterchainToken` interact with the HTS directly — it is assumed the methods are called by the `InterchainTokenService` contract. `TokenManager` is still used for ERC20 tokens, lock-unlock and flow limits. +- `MINT_BURN` and `MINT_BURN_FROM` Token Manager types are currently unsupported, due to missing support of transferring the Treasury role. If this gets supported in the future, the `TokenManager` can be upgraded. From 386f43acbe4b0f59c07d1a7ae57ce6a5f96d6a6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Fri, 6 Jun 2025 14:30:19 +0200 Subject: [PATCH 02/49] create hts token from token manager + inherit Minter contract --- contracts/InterchainTokenService.sol | 91 ++++++++++--------- contracts/hedera/HTS.sol | 20 ++++ contracts/hedera/IExchangeRate.sol | 27 ++++++ contracts/hedera/README.md | 3 +- contracts/interfaces/IBaseTokenManager.sol | 5 + .../interfaces/IInterchainTokenDeployer.sol | 22 +---- contracts/interfaces/ITokenManager.sol | 11 ++- contracts/interfaces/ITokenManagerProxy.sol | 2 + contracts/proxies/TokenManagerProxy.sol | 57 +++++++++++- contracts/token-manager/TokenManager.sol | 82 +++++++++++++++-- contracts/utils/InterchainTokenDeployer.sol | 89 ++++++++---------- contracts/utils/Minter.sol | 2 +- 12 files changed, 281 insertions(+), 130 deletions(-) create mode 100644 contracts/hedera/IExchangeRate.sol diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index db0c3195..57806301 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -404,9 +404,7 @@ contract InterchainTokenService is emit InterchainTokenIdClaimed(tokenId, deployer, salt); if (bytes(destinationChain).length == 0) { - address tokenAddress = _deployInterchainToken(tokenId, minter, name, symbol, decimals); - - _deployTokenManager(tokenId, TokenManagerType.NATIVE_INTERCHAIN_TOKEN, tokenAddress, minter); + _deployTokenManagerWithInterchainToken(tokenId, name, symbol, decimals, minter); } else { if (chainNameHash == keccak256(bytes(destinationChain))) revert CannotDeployRemotelyToSelf(); @@ -767,11 +765,8 @@ contract InterchainTokenService is payload, (uint256, bytes32, string, string, uint8, bytes) ); - address tokenAddress; - tokenAddress = _deployInterchainToken(tokenId, minterBytes, name, symbol, decimals); - - _deployTokenManager(tokenId, TokenManagerType.NATIVE_INTERCHAIN_TOKEN, tokenAddress, minterBytes); + _deployTokenManagerWithInterchainToken(tokenId, name, symbol, decimals, minterBytes); } /** @@ -970,6 +965,50 @@ contract InterchainTokenService is _routeMessage(destinationChain, payload, gasValue); } + /** + * @notice Deploys a token manager. + * @param tokenId The ID of the token. + * @param operator The operator of the token manager. + */ + function _deployTokenManagerWithInterchainToken( + bytes32 tokenId, + string memory name, + string memory symbol, + uint8 decimals, + bytes memory operator + ) internal { + // TokenManagerProxy deploy params + bytes memory params = abi.encode(operator, name, symbol, decimals); + + TokenManagerType tokenManagerType = TokenManagerType.NATIVE_INTERCHAIN_TOKEN; + + (bool success, bytes memory returnData) = tokenManagerDeployer.delegatecall( + abi.encodeWithSelector(ITokenManagerDeployer.deployTokenManager.selector, tokenId, tokenManagerType, params) + ); + if (!success) revert TokenManagerDeploymentFailed(returnData); + + address tokenManager_; + assembly { + tokenManager_ := mload(add(returnData, 0x20)) + } + + (success, returnData) = tokenHandler.delegatecall( + abi.encodeWithSelector(ITokenHandler.postTokenManagerDeploy.selector, tokenManagerType, tokenManager_) + ); + if (!success) revert PostDeployFailed(returnData); + + // Get the token address from the deployed token manager + address tokenAddress = ITokenManager(tokenManager_).tokenAddress(); + + address minter; + if (bytes(operator).length != 0) minter = operator.toAddress(); + + // slither-disable-next-line reentrancy-events + emit InterchainTokenDeployed(tokenId, tokenAddress, minter, name, symbol, decimals); + // slither-disable-next-line reentrancy-events + emit TokenManagerDeployed(tokenId, tokenManager_, tokenManagerType, params); + } + /** * @notice Deploys a token manager. * @param tokenId The ID of the token. @@ -1009,44 +1048,6 @@ contract InterchainTokenService is salt = keccak256(abi.encode(PREFIX_INTERCHAIN_TOKEN_SALT, tokenId)); } - /** - * @notice Deploys an interchain token. - * @param tokenId The ID of the token. - * @param minterBytes The minter address for the token. - * @param name The name of the token. - * @param symbol The symbol of the token. - * @param decimals The number of decimals of the token. - */ - function _deployInterchainToken( - bytes32 tokenId, - bytes memory minterBytes, - string memory name, - string memory symbol, - uint8 decimals - ) internal returns (address tokenAddress) { - if (bytes(name).length == 0) revert EmptyTokenName(); - if (bytes(symbol).length == 0) revert EmptyTokenSymbol(); - - bytes32 salt = _getInterchainTokenSalt(tokenId); - - address minter; - if (bytes(minterBytes).length != 0) minter = minterBytes.toAddress(); - - (bool success, bytes memory returnData) = interchainTokenDeployer.delegatecall( - abi.encodeWithSelector(IInterchainTokenDeployer.deployInterchainToken.selector, salt, tokenId, minter, name, symbol, decimals) - ); - if (!success) { - revert InterchainTokenDeploymentFailed(returnData); - } - - assembly { - tokenAddress := mload(add(returnData, 0x20)) - } - - // slither-disable-next-line reentrancy-events - emit InterchainTokenDeployed(tokenId, tokenAddress, minter, name, symbol, decimals); - } - /** * @notice Decodes the metadata into a version number and data bytes. * @dev The function expects the metadata to have the version in the first 4 bytes, followed by the actual data. diff --git a/contracts/hedera/HTS.sol b/contracts/hedera/HTS.sol index 37a2c0f7..e468754b 100644 --- a/contracts/hedera/HTS.sol +++ b/contracts/hedera/HTS.sol @@ -3,6 +3,7 @@ pragma solidity ^0.8.0; import { HederaResponseCodes } from './HederaResponseCodes.sol'; import { IHederaTokenService } from './IHederaTokenService.sol'; +import { IExchangeRate } from './IExchangeRate.sol'; /** * @title HTS @@ -15,6 +16,11 @@ import { IHederaTokenService } from './IHederaTokenService.sol'; */ library HTS { address private constant PRECOMPILE = address(0x167); + address private constant EXCHANGE_RATE_PRECOMPILE = address(0x168); + + // 1 whole is divided into 100_000_000 tiny parts + // Applicable for tinybars and tinycents - used for exchange rate calculations + uint256 constant TINY_PARTS_PER_WHOLE = 100_000_000; // See `TokenKey` struct, `keyType`. // 0th bit: adminKey @@ -237,6 +243,20 @@ library HTS { } } + // + // Exchange rate functionality + // + + function centsToTinybars(uint256 cents) internal returns (uint256 tinybars) { + uint256 tinycents = cents * TINY_PARTS_PER_WHOLE; + + (bool success, bytes memory result) = PRECOMPILE.call( + abi.encodeWithSelector(IExchangeRate.tinycentsToTinybars.selector, tinycents) + ); + require(success); + tinybars = abi.decode(result, (uint256)); + } + // // Extra functionality // diff --git a/contracts/hedera/IExchangeRate.sol b/contracts/hedera/IExchangeRate.sol new file mode 100644 index 00000000..142cb11b --- /dev/null +++ b/contracts/hedera/IExchangeRate.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IExchangeRate { + // Given a value in tinycents (1e-8 US cents or 1e-10 USD), returns the + // equivalent value in tinybars (1e-8 HBAR) at the current exchange rate + // stored in system file 0.0.112. + // + // This rate is a weighted median of the the recent" HBAR-USD exchange + // rate on major exchanges, but should _not_ be treated as a live price + // oracle! It is important primarily because the network will use it to + // compute the tinybar fees for the active transaction. + // + // So a "self-funding" contract can use this rate to compute how much + // tinybar its users must send to cover the Hedera fees for the transaction. + function tinycentsToTinybars(uint256 tinycents) external returns (uint256); + + // Given a value in tinybars (1e-8 HBAR), returns the equivalent value in + // tinycents (1e-8 US cents or 1e-10 USD) at the current exchange rate + // stored in system file 0.0.112. + // + // This rate tracks the the HBAR-USD rate on public exchanges, but + // should _not_ be treated as a live price oracle! This conversion is + // less likely to be needed than the above conversion from tinycent to + // tinybars, but we include it for completeness. + function tinybarsToTinycents(uint256 tinybars) external returns (uint256); +} diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index d5423360..9df44090 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -14,14 +14,13 @@ ITS contracts in this repo are modified to support Hedera Token Service. All new - Currently new tokens created via HTS EVM system contract can have **only one** Supply Key (Minter). - Currently new tokens created via HTS EVM system contract must have the Treasury be the creator of the token. - `createFungibleToken` in `HTS.sol` uses `msg.value` to pay for token creation, alongside regular gas fee. +- `WHBAR` contracts used can be found [here](https://docs.hedera.com/hedera/core-concepts/smart-contracts/wrapped-hbar-whbar#contract-deployments). ### ITS-related Notes -- `InterchainTokenService.sol` `execute` is payable, since it needs to pay for the HTS token creation fee. It is assumed that the fee is sent as value. `IAxelarValuedExpressExecutable`, `IAxelarExpressExecutable` and `IAxelarExecutable` are copied from `@axelar-network/axelar-gmp-sdk-solidity`. All unchanged except for the `execute` method in `IAxelarExecutable` to include the `payable` modifier. - `InterchainTokenDeployer.sol` `deployedAddress` is not supported, since HTS tokens don't have deterministic addresses. - `interchainTokenAddress` was removed from `InterchainTokenService.sol`, since HTS tokens don't have deterministic addresses. `registeredTokenAddress` should be used instead. - `transmitInterchainTransfer` was removed from `InterchainTokenService.sol` since it's meant to be called from an `InterchainToken` contract, which is not used. -- `flowLimit`, `flowOutAmount` and `flowInAmount` are removed from `InterchainTokenService.sol` to reduce the size of the contract. - When creating a new interchain token, `InterchainTokenService` and `TokenManager` are associated with the token. - When deploying a new interchain token, a Hedera-specific token-creation fee must be sent as value. For this reason, the `deployInterchainToken` method is payable. - `initialSupply` isn't supported when deploying a new interchain token. To receive tokens, an account needs to previously associate with the token, thus it cannot immediately receive tokens after creation. diff --git a/contracts/interfaces/IBaseTokenManager.sol b/contracts/interfaces/IBaseTokenManager.sol index 2ceff77d..6508259c 100644 --- a/contracts/interfaces/IBaseTokenManager.sol +++ b/contracts/interfaces/IBaseTokenManager.sol @@ -23,4 +23,9 @@ interface IBaseTokenManager { * @notice A function that should return the token address from the init params. */ function getTokenAddressFromParams(bytes calldata params) external pure returns (address); + + /** + * @notice A function that should return the native interchain token deployment params. + */ + function getTokenDeployInfoFromParams(bytes calldata params) external pure returns (bytes memory, string memory, string memory, uint8); } diff --git a/contracts/interfaces/IInterchainTokenDeployer.sol b/contracts/interfaces/IInterchainTokenDeployer.sol index 753356b3..a952af81 100644 --- a/contracts/interfaces/IInterchainTokenDeployer.sol +++ b/contracts/interfaces/IInterchainTokenDeployer.sol @@ -8,37 +8,23 @@ pragma solidity ^0.8.0; */ interface IInterchainTokenDeployer { error AddressZero(); + error TokenIdZero(); + error TokenNameEmpty(); + error TokenSymbolEmpty(); error TokenDeploymentFailed(); - /** - * @notice Returns the interchain token implementation address. - * @return address The interchain token implementation address. - */ - function implementationAddress() external view returns (address); - - /** - * @notice Returns the interchain token deployment address. - * @param salt The deployment salt. - * @return tokenAddress The token address. - */ - function deployedAddress(bytes32 salt) external view returns (address tokenAddress); - /** * @notice Deploys a new instance of the InterchainTokenProxy contract. - * @param salt The salt used by Create3Deployer. * @param tokenId tokenId of the token. - * @param minter Address of the minter. * @param name Name of the token. * @param symbol Symbol of the token. * @param decimals Decimals of the token. * @return tokenAddress Address of the deployed token. */ function deployInterchainToken( - bytes32 salt, bytes32 tokenId, - address minter, string calldata name, string calldata symbol, uint8 decimals - ) external returns (address tokenAddress); + ) external payable returns (address tokenAddress); } diff --git a/contracts/interfaces/ITokenManager.sol b/contracts/interfaces/ITokenManager.sol index 50c582a9..f551ba4c 100644 --- a/contracts/interfaces/ITokenManager.sol +++ b/contracts/interfaces/ITokenManager.sol @@ -7,12 +7,13 @@ import { IImplementation } from '@axelar-network/axelar-gmp-sdk-solidity/contrac import { IBaseTokenManager } from './IBaseTokenManager.sol'; import { IOperator } from './IOperator.sol'; import { IFlowLimit } from './IFlowLimit.sol'; +import { ITokenManagerType } from './ITokenManagerType.sol'; /** * @title ITokenManager Interface * @notice This contract is responsible for managing tokens, such as setting locking token balances, or setting flow limits, for interchain transfers. */ -interface ITokenManager is IBaseTokenManager, IOperator, IFlowLimit, IImplementation { +interface ITokenManager is IBaseTokenManager, ITokenManagerType, IOperator, IFlowLimit, IImplementation { error TokenLinkerZeroAddress(); error NotService(address caller); error TakeTokenFailed(); @@ -22,6 +23,7 @@ interface ITokenManager is IBaseTokenManager, IOperator, IFlowLimit, IImplementa error AlreadyFlowLimiter(address flowLimiter); error NotFlowLimiter(address flowLimiter); error NotSupported(); + error ManagerTypeNotSupported(); /** * @notice Returns implementation type of this token manager. @@ -29,6 +31,13 @@ interface ITokenManager is IBaseTokenManager, IOperator, IFlowLimit, IImplementa */ function implementationType() external view returns (uint256); + /** + * @notice Reverts if the token manager type is not supported for a given token address. + * @param tokenAddress_ The address of the token. + * @param implementationType_ The implementation type to check. + */ + function ensureSupported(address tokenAddress_, uint256 implementationType_) external; + function addFlowIn(uint256 amount) external; function addFlowOut(uint256 amount) external; diff --git a/contracts/interfaces/ITokenManagerProxy.sol b/contracts/interfaces/ITokenManagerProxy.sol index 885ba28a..ee8bdf92 100644 --- a/contracts/interfaces/ITokenManagerProxy.sol +++ b/contracts/interfaces/ITokenManagerProxy.sol @@ -10,6 +10,8 @@ import { IProxy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interf */ interface ITokenManagerProxy is IProxy { error ZeroAddress(); + error NotSupported(bytes data); + error InterchainTokenDeploymentFailed(bytes error); /** * @notice Returns implementation type of this token manager. diff --git a/contracts/proxies/TokenManagerProxy.sol b/contracts/proxies/TokenManagerProxy.sol index 069358c8..2cd08d5d 100644 --- a/contracts/proxies/TokenManagerProxy.sol +++ b/contracts/proxies/TokenManagerProxy.sol @@ -6,15 +6,19 @@ import { IProxy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interf import { BaseProxy } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/upgradable/BaseProxy.sol'; import { IBaseTokenManager } from '../interfaces/IBaseTokenManager.sol'; +import { IInterchainTokenDeployer } from '../interfaces/IInterchainTokenDeployer.sol'; +import { IInterchainTokenService } from '../interfaces/IInterchainTokenService.sol'; +import { ITokenManager } from '../interfaces/ITokenManager.sol'; import { ITokenManagerProxy } from '../interfaces/ITokenManagerProxy.sol'; import { ITokenManagerImplementation } from '../interfaces/ITokenManagerImplementation.sol'; +import { ITokenManagerType } from '../interfaces/ITokenManagerType.sol'; /** * @title TokenManagerProxy * @notice This contract is a proxy for token manager contracts. * @dev This contract implements BaseProxy and ITokenManagerProxy. */ -contract TokenManagerProxy is BaseProxy, ITokenManagerProxy { +contract TokenManagerProxy is BaseProxy, ITokenManagerType, ITokenManagerProxy { bytes32 private constant CONTRACT_ID = keccak256('token-manager'); address public immutable interchainTokenService; @@ -29,7 +33,7 @@ contract TokenManagerProxy is BaseProxy, ITokenManagerProxy { * @param tokenId The identifier for the token. * @param params The initialization parameters for the token manager contract. */ - constructor(address interchainTokenService_, uint256 implementationType_, bytes32 tokenId, bytes memory params) { + constructor(address interchainTokenService_, uint256 implementationType_, bytes32 tokenId, bytes memory params) payable { if (interchainTokenService_ == address(0)) revert ZeroAddress(); interchainTokenService = interchainTokenService_; @@ -39,10 +43,53 @@ contract TokenManagerProxy is BaseProxy, ITokenManagerProxy { address implementation_ = _tokenManagerImplementation(interchainTokenService_, implementationType_); if (implementation_ == address(0)) revert InvalidImplementation(); - (bool success, ) = implementation_.delegatecall(abi.encodeWithSelector(IProxy.setup.selector, params)); - if (!success) revert SetupFailed(); + // If the implementation type is NATIVE_INTERCHAIN_TOKEN, deploy the token + if (implementationType_ == uint256(TokenManagerType.NATIVE_INTERCHAIN_TOKEN)) { + // Parse the parameters to get the token deploy info + (bytes memory operator, string memory name, string memory symbol, uint8 decimals) = IBaseTokenManager(implementation_) + .getTokenDeployInfoFromParams(params); - tokenAddress = IBaseTokenManager(implementation_).getTokenAddressFromParams(params); + // Get the deployer address from the interchain token service + address interchainTokenDeployer = IInterchainTokenService(interchainTokenService).interchainTokenDeployer(); + + // Call the interchain token deployer to deploy the token + (bool deploySuccess, bytes memory returnData) = interchainTokenDeployer.delegatecall( + abi.encodeWithSelector(IInterchainTokenDeployer.deployInterchainToken.selector, tokenId, name, symbol, decimals) + ); + if (!deploySuccess) { + revert InterchainTokenDeploymentFailed(returnData); + } + + // Get and save the address + address tokenAddress_; + assembly { + tokenAddress_ := mload(add(returnData, 0x20)) + } + tokenAddress = tokenAddress_; + + // Setup the token manager + // The setup will add operator as the minter + bytes memory setupParams = abi.encode(operator, tokenAddress_); + + (bool success, ) = implementation_.delegatecall(abi.encodeWithSelector(IProxy.setup.selector, setupParams)); + if (!success) revert SetupFailed(); + } else { + // For other token manager types + // Check token manager type is supported + bool success; + bytes memory returnData; + (success, returnData) = implementation_.delegatecall( + abi.encodeWithSelector(ITokenManager.ensureSupported.selector, tokenAddress, implementationType_) + ); + if (!success) revert NotSupported(returnData); + + // Get the token address from the params + tokenAddress = IBaseTokenManager(implementation_).getTokenAddressFromParams(params); + + // Setup the token manager + (success, ) = implementation_.delegatecall(abi.encodeWithSelector(IProxy.setup.selector, params)); + if (!success) revert SetupFailed(); + } } /** diff --git a/contracts/token-manager/TokenManager.sol b/contracts/token-manager/TokenManager.sol index e6d30174..bbbadad7 100644 --- a/contracts/token-manager/TokenManager.sol +++ b/contracts/token-manager/TokenManager.sol @@ -15,11 +15,14 @@ import { IERC20MintableBurnable } from '../interfaces/IERC20MintableBurnable.sol import { Operator } from '../utils/Operator.sol'; import { FlowLimit } from '../utils/FlowLimit.sol'; +import { HTS } from '../hedera/HTS.sol'; +import { Minter } from '../utils/Minter.sol'; + /** * @title TokenManager * @notice This contract is responsible for managing tokens, such as setting locking token balances, or setting flow limits, for interchain transfers. */ -contract TokenManager is ITokenManager, Operator, FlowLimit, Implementation, Multicall { +contract TokenManager is ITokenManager, Minter, Operator, FlowLimit, Implementation, Multicall { using AddressBytes for bytes; using SafeTokenCall for IERC20; @@ -47,6 +50,14 @@ contract TokenManager is ITokenManager, Operator, FlowLimit, Implementation, Mul _; } + /** + * @notice A modifier that allows only the interchain token service to execute the function. + */ + modifier onlyServiceOrMinter() { + if (msg.sender != interchainTokenService && !isMinter(msg.sender)) revert MissingRole(msg.sender, uint8(Roles.MINTER)); + _; + } + /** * @notice Getter for the contract id. * @return bytes32 The contract id. @@ -82,6 +93,32 @@ contract TokenManager is ITokenManager, Operator, FlowLimit, Implementation, Mul revert NotSupported(); } + /** + * @notice Reverts if the token manager type is not supported, or if the token is not supported. + * If the token is a supported HTS token, the Token Manager will associate itself with the token. + * @param tokenAddress_ The address of the token to check. + * @param implementationType_ The implementation type to check. + * @dev It's cheaper to check both the token and the implementation type in one function. + */ + function ensureSupported(address tokenAddress_, uint256 implementationType_) external { + bool isHtsToken = HTS.isToken(tokenAddress_); + if (isHtsToken) { + // Currently MINT_BURN and MINT_BURN_FROM are not supported for HTS tokens + // See contracts/hedera/README.md for more information + if ( + implementationType_ == uint256(TokenManagerType.MINT_BURN) || + implementationType_ == uint256(TokenManagerType.MINT_BURN_FROM) + ) { + revert ManagerTypeNotSupported(); + } + + // Check if token is supported + if (!HTS.isTokenSupportedByITS(tokenAddress_)) { + revert HTS.TokenUnsupported(); + } + } + } + /** * @notice A function that should return the token address from the setup params. * @param params_ The setup parameters. @@ -91,6 +128,15 @@ contract TokenManager is ITokenManager, Operator, FlowLimit, Implementation, Mul (, tokenAddress_) = abi.decode(params_, (bytes, address)); } + /** + * @notice A function that should return the native interchain token deployment params. + */ + function getTokenDeployInfoFromParams( + bytes calldata params_ + ) external pure returns (bytes memory operator, string memory name, string memory symbol, uint8 decimals) { + (operator, name, symbol, decimals) = abi.decode(params_, (bytes, string, string, uint8)); + } + /** * @notice Setup function for the TokenManager. * @dev This function should only be called by the proxy, and only once from the proxy constructor. @@ -99,7 +145,7 @@ contract TokenManager is ITokenManager, Operator, FlowLimit, Implementation, Mul * @param params_ The parameters to be used to initialize the TokenManager. */ function setup(bytes calldata params_) external override(Implementation, IImplementation) onlyProxy { - bytes memory operatorBytes = abi.decode(params_, (bytes)); + (bytes memory operatorBytes, address tokenAddress_) = abi.decode(params_, (bytes, address)); address operator = address(0); @@ -107,11 +153,25 @@ contract TokenManager is ITokenManager, Operator, FlowLimit, Implementation, Mul operator = operatorBytes.toAddress(); } + /** + * @dev Set the token service as a minter to allow it to mint and burn tokens. + * Also add the provided address as a minter. If `address(0)` was provided, + * add it as a minter to allow anyone to easily check that no custom minter was set. + */ + // TODO(hedera) should we add the service as a minter? + _addMinter(interchainTokenService); + _addMinter(operator); + // If an operator is not provided, set `address(0)` as the operator. // This allows anyone to easily check if a custom operator was set on the token manager. _addAccountRoles(operator, (1 << uint8(Roles.FLOW_LIMITER)) | (1 << uint8(Roles.OPERATOR))); // Add operator and flow limiter role to the service. The operator can remove the flow limiter role if they so chose and the service has no way to use the operator role for now. _addAccountRoles(interchainTokenService, (1 << uint8(Roles.FLOW_LIMITER)) | (1 << uint8(Roles.OPERATOR))); + + // Associate the token manager with the token + // TODO(hedera) this should be done only if token manager type is LOCK_UNLOCK? + // is it more expensive to check or associate either way? + HTS.associateToken(address(this), tokenAddress_); } function addFlowIn(uint256 amount) external onlyService { @@ -199,8 +259,13 @@ contract TokenManager is ITokenManager, Operator, FlowLimit, Implementation, Mul * @param to The recipient. * @param amount The amount to mint. */ - function mintToken(address tokenAddress_, address to, uint256 amount) external onlyService { - IERC20(tokenAddress_).safeCall(abi.encodeWithSelector(IERC20MintableBurnable.mint.selector, to, amount)); + function mintToken(address tokenAddress_, address to, uint256 amount) external onlyServiceOrMinter { + if (HTS.isToken(tokenAddress_)) { + HTS.mintToken(tokenAddress_, amount); + HTS.transferToken(tokenAddress_, address(this), to, amount); + } else { + IERC20(tokenAddress_).safeCall(abi.encodeWithSelector(IERC20MintableBurnable.mint.selector, to, amount)); + } } /** @@ -210,7 +275,12 @@ contract TokenManager is ITokenManager, Operator, FlowLimit, Implementation, Mul * @param from The address to burn the token from. * @param amount The amount to burn. */ - function burnToken(address tokenAddress_, address from, uint256 amount) external onlyService { - IERC20(tokenAddress_).safeCall(abi.encodeWithSelector(IERC20MintableBurnable.burn.selector, from, amount)); + function burnToken(address tokenAddress_, address from, uint256 amount) external onlyServiceOrMinter { + if (HTS.isToken(tokenAddress_)) { + HTS.transferFrom(tokenAddress_, from, address(this), amount); + HTS.burnToken(tokenAddress_, amount); + } else { + IERC20(tokenAddress_).safeCall(abi.encodeWithSelector(IERC20MintableBurnable.burn.selector, from, amount)); + } } } diff --git a/contracts/utils/InterchainTokenDeployer.sol b/contracts/utils/InterchainTokenDeployer.sol index 0ec736f3..d2eb32d4 100644 --- a/contracts/utils/InterchainTokenDeployer.sol +++ b/contracts/utils/InterchainTokenDeployer.sol @@ -2,76 +2,61 @@ pragma solidity ^0.8.0; -import { Create3Fixed } from './Create3Fixed.sol'; - import { IInterchainTokenDeployer } from '../interfaces/IInterchainTokenDeployer.sol'; -import { IInterchainToken } from '../interfaces/IInterchainToken.sol'; + +import { HTS, IHederaTokenService } from '../hedera/HTS.sol'; /** * @title InterchainTokenDeployer * @notice This contract is used to deploy new instances of the InterchainTokenProxy contract. */ -contract InterchainTokenDeployer is IInterchainTokenDeployer, Create3Fixed { - address public immutable implementationAddress; - - /** - * @notice Constructor for the InterchainTokenDeployer contract. - * @param implementationAddress_ Address of the InterchainToken contract. - */ - constructor(address implementationAddress_) { - if (implementationAddress_ == address(0)) revert AddressZero(); - - implementationAddress = implementationAddress_; - } - +contract InterchainTokenDeployer is IInterchainTokenDeployer { /** * @notice Deploys a new instance of the InterchainTokenProxy contract. - * @param salt The salt used by Create3Deployer. * @param tokenId TokenId for the token. - * @param minter Address of the minter. * @param name Name of the token. * @param symbol Symbol of the token. * @param decimals Decimals of the token. * @return tokenAddress Address of the deployed token. */ function deployInterchainToken( - bytes32 salt, bytes32 tokenId, - address minter, string calldata name, string calldata symbol, uint8 decimals - ) external returns (address tokenAddress) { - // Use a minimal proxy for cheap token deployment and auto-verification on explorers - // https://eips.ethereum.org/EIPS/eip-1167 - // The minimal proxy bytecode is the same as https://github.com/OpenZeppelin/openzeppelin-contracts/blob/94697be8a3f0dfcd95dfb13ffbd39b5973f5c65d/contracts/proxy/Clones.sol#L28 - // The minimal proxy bytecode is 0x37 = 55 bytes long - bytes memory bytecode = new bytes(0x37); - address implementation = implementationAddress; - - /// @solidity memory-safe-assembly - assembly { - // The first 0x20 = 32 bytes (0x00 - 0x19) are reserved for the length. - // The next 0x14 = 20 bytes (0x20 - 0x33) are the ones below. - mstore(add(bytecode, 0x20), shl(0x60, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)) - // The next 0x14 = 20 bytes (0x34 - 0x47) are the implementation address. - mstore(add(bytecode, 0x34), shl(0x60, implementation)) - // The last 0x0f = 15 bytes (0x48 - 0x56) are the ones below. - mstore(add(bytecode, 0x48), shl(0x88, 0x5af43d82803e903d91602b57fd5bf3)) - } - - tokenAddress = _create3(bytecode, salt); - if (tokenAddress.code.length == 0) revert TokenDeploymentFailed(); - - IInterchainToken(tokenAddress).init(tokenId, minter, name, symbol, decimals); - } - - /** - * @notice Returns the interchain token deployment address. - * @param salt The deployment salt. - * @return tokenAddress The token address. - */ - function deployedAddress(bytes32 salt) external view returns (address tokenAddress) { - tokenAddress = _create3Address(salt); + ) external payable returns (address tokenAddress) { + // Since the caller uses delegatecall `this` refers to the calling contract + address self = address(this); + + if (tokenId == bytes32(0)) revert TokenIdZero(); + if (bytes(name).length == 0) revert TokenNameEmpty(); + if (bytes(symbol).length == 0) revert TokenSymbolEmpty(); + + IHederaTokenService.HederaToken memory token; + token.name = name; + token.symbol = symbol; + token.treasury = self; + + // Set the token service as a minter to allow it to mint and burn tokens. + IHederaTokenService.TokenKey[] memory tokenKeys = new IHederaTokenService.TokenKey[](1); + // Define the supply keys - minter + IHederaTokenService.KeyValue memory supplyKeyITS = IHederaTokenService.KeyValue({ + inheritAccountKey: false, + contractId: self, + ed25519: '', + ECDSA_secp256k1: '', + delegatableContractId: address(0) + }); + tokenKeys[0] = IHederaTokenService.TokenKey({ keyType: HTS.SUPPLY_KEY_BIT, key: supplyKeyITS }); + token.tokenKeys = tokenKeys; + + // Set autoRenewPeriod to 0 so the default will be used (see `HTS.createFungibleToken`) + // NOTE: Expiry is disabled on Hedera + IHederaTokenService.Expiry memory expiry = IHederaTokenService.Expiry(0, self, 0); + token.expiry = expiry; + + address createdTokenAddress = HTS.createFungibleToken(token, 0, int32(uint32(decimals))); + + tokenAddress = createdTokenAddress; } } diff --git a/contracts/utils/Minter.sol b/contracts/utils/Minter.sol index 742d1d12..315f9a7a 100644 --- a/contracts/utils/Minter.sol +++ b/contracts/utils/Minter.sol @@ -55,7 +55,7 @@ contract Minter is IMinter, RolesBase, RolesConstants { * @param addr the address to query for * @return bool Boolean value representing whether or not the address is a minter. */ - function isMinter(address addr) external view returns (bool) { + function isMinter(address addr) public view returns (bool) { return hasRole(addr, uint8(Roles.MINTER)); } } From 3e6fe1fa6815af915d22e1376d4ff85a3d3bf19b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Tue, 10 Jun 2025 15:53:44 +0200 Subject: [PATCH 03/49] add token creation price calculation + whbar contract address --- contracts/InterchainTokenService.sol | 31 ++++- contracts/hedera/HTS.sol | 12 +- contracts/hedera/IWHBAR.sol | 129 ++++++++++++++++++ contracts/hedera/WHBAR.sol | 90 ++++++++++++ contracts/interfaces/IBaseTokenManager.sol | 4 +- .../interfaces/ITokenCreationPricing.sol | 49 +++++++ contracts/proxies/TokenManagerProxy.sol | 14 +- .../test/utils/TestTokenCreationPricing.sol | 29 ++++ contracts/token-manager/TokenManager.sol | 4 +- contracts/utils/TokenCreationPricing.sol | 62 +++++++++ test/UtilsTest.js | 35 +++++ 11 files changed, 450 insertions(+), 9 deletions(-) create mode 100644 contracts/hedera/IWHBAR.sol create mode 100644 contracts/hedera/WHBAR.sol create mode 100644 contracts/interfaces/ITokenCreationPricing.sol create mode 100644 contracts/test/utils/TestTokenCreationPricing.sol create mode 100644 contracts/utils/TokenCreationPricing.sol diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index 57806301..6cf30b04 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -24,8 +24,11 @@ import { IMinter } from './interfaces/IMinter.sol'; import { Create3AddressFixed } from './utils/Create3AddressFixed.sol'; import { Operator } from './utils/Operator.sol'; import { ChainTracker } from './utils/ChainTracker.sol'; +import { TokenCreationPricing } from './utils/TokenCreationPricing.sol'; import { ItsHubAddressTracker } from './utils/ItsHubAddressTracker.sol'; +import { IWHBAR } from './hedera/IWHBAR.sol'; + /** * @title The Interchain Token Service * @notice This contract is responsible for facilitating interchain token transfers. @@ -42,6 +45,7 @@ contract InterchainTokenService is ExpressExecutorTracker, InterchainAddressTracker, ChainTracker, + TokenCreationPricing, ItsHubAddressTracker, IInterchainTokenService { @@ -637,6 +641,22 @@ contract InterchainTokenService is _removeTrustedChain(chainName); } + /** + * @notice Used to set the token creation price in tinycents. + * @param price The new token creation price in tinycents. + */ + function setTokenCreationPrice(uint256 price) external onlyOperatorOrOwner { + _setTokenCreationPrice(price); + } + + /** + * @notice Used to set the WHBAR contract address. + * @param whbarAddress_ The new WHBAR contract address. + */ + function setWhbarAddress(address whbarAddress_) external onlyOperatorOrOwner { + _setWhbarAddress(whbarAddress_); + } + /** * @notice Allows the owner to pause/unpause the token service. * @param paused Boolean value representing whether to pause or unpause. @@ -977,17 +997,24 @@ contract InterchainTokenService is uint8 decimals, bytes memory operator ) internal { + // Price in tinybars + uint256 tokenCreatePrice = tokenCreationPriceTinybars(); + // TokenManagerProxy deploy params - bytes memory params = abi.encode(operator, name, symbol, decimals); + bytes memory params = abi.encode(operator, name, symbol, decimals, tokenCreatePrice); TokenManagerType tokenManagerType = TokenManagerType.NATIVE_INTERCHAIN_TOKEN; + address tokenManager_ = tokenManagerAddress(tokenId); + + // Approve the token manager deployer to spend the token creation price + IWHBAR(whbarAddress()).approve(tokenManager_, tokenCreatePrice); + (bool success, bytes memory returnData) = tokenManagerDeployer.delegatecall( abi.encodeWithSelector(ITokenManagerDeployer.deployTokenManager.selector, tokenId, tokenManagerType, params) ); if (!success) revert TokenManagerDeploymentFailed(returnData); - address tokenManager_; assembly { tokenManager_ := mload(add(returnData, 0x20)) } diff --git a/contracts/hedera/HTS.sol b/contracts/hedera/HTS.sol index e468754b..bf39f4dd 100644 --- a/contracts/hedera/HTS.sol +++ b/contracts/hedera/HTS.sol @@ -247,10 +247,18 @@ library HTS { // Exchange rate functionality // - function centsToTinybars(uint256 cents) internal returns (uint256 tinybars) { + function centsToTinybars(uint256 cents) public returns (uint256 tinybars) { uint256 tinycents = cents * TINY_PARTS_PER_WHOLE; - (bool success, bytes memory result) = PRECOMPILE.call( + (bool success, bytes memory result) = EXCHANGE_RATE_PRECOMPILE.call( + abi.encodeWithSelector(IExchangeRate.tinycentsToTinybars.selector, tinycents) + ); + require(success); + tinybars = abi.decode(result, (uint256)); + } + + function tinycentsToTinybars(uint256 tinycents) public returns (uint256 tinybars) { + (bool success, bytes memory result) = EXCHANGE_RATE_PRECOMPILE.call( abi.encodeWithSelector(IExchangeRate.tinycentsToTinybars.selector, tinycents) ); require(success); diff --git a/contracts/hedera/IWHBAR.sol b/contracts/hedera/IWHBAR.sol new file mode 100644 index 00000000..2720f59e --- /dev/null +++ b/contracts/hedera/IWHBAR.sol @@ -0,0 +1,129 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +/** + * @title IWHBAR + * @notice Interface for the Wrapped HBAR (WHBAR) contract + */ +interface IWHBAR { + /** + * @notice Emitted when HBAR is deposited and WHBAR is minted + * @param dst The address that received the WHBAR + * @param wad The amount of WHBAR minted + */ + event Deposit(address indexed dst, uint wad); + + /** + * @notice Emitted when WHBAR is burned and HBAR is withdrawn + * @param src The address that burned the WHBAR + * @param wad The amount of WHBAR burned + */ + event Withdrawal(address indexed src, uint wad); + + /** + * @notice Emitted when approval is set + * @param src The owner address + * @param guy The spender address + * @param wad The approved amount + */ + event Approval(address indexed src, address indexed guy, uint wad); + + /** + * @notice Emitted when tokens are transferred + * @param src The sender address + * @param dst The receiver address + * @param wad The amount transferred + */ + event Transfer(address indexed src, address indexed dst, uint wad); + + /** + * @notice Error thrown when account has insufficient funds + */ + error InsufficientFunds(); + + /** + * @notice Error thrown when spender has insufficient allowance + */ + error InsufficientAllowance(); + + /** + * @notice Error thrown when HBAR transfer fails + */ + error SendFailed(); + + /** + * @notice Returns the name of the token + * @return The token name + */ + function name() external view returns (string memory); + + /** + * @notice Returns the symbol of the token + * @return The token symbol + */ + function symbol() external view returns (string memory); + + /** + * @notice Returns the number of decimals + * @return The number of decimals + */ + function decimals() external view returns (uint8); + + /** + * @notice Returns the total supply of WHBAR + * @return The total supply + */ + function totalSupply() external view returns (uint); + + /** + * @notice Returns the balance of an account + * @param user The address to query + * @return The balance of the account + */ + function balanceOf(address user) external view returns (uint); + + /** + * @notice Returns the allowance of a spender for an owner + * @param owner The owner address + * @param spender The spender address + * @return The allowance amount + */ + function allowance(address owner, address spender) external view returns (uint); + + /** + * @notice Deposits HBAR and mints WHBAR to the sender + */ + function deposit() external payable; + + /** + * @notice Withdraws HBAR by burning WHBAR + * @param wad The amount of WHBAR to burn + */ + function withdraw(uint wad) external; + + /** + * @notice Approves a spender to transfer tokens on behalf of the caller + * @param guy The spender address + * @param wad The amount to approve + * @return True if successful + */ + function approve(address guy, uint wad) external returns (bool); + + /** + * @notice Transfers tokens to a recipient + * @param dst The recipient address + * @param wad The amount to transfer + * @return True if successful + */ + function transfer(address dst, uint wad) external returns (bool); + + /** + * @notice Transfers tokens from one address to another using allowance + * @param src The sender address + * @param dst The recipient address + * @param wad The amount to transfer + * @return True if successful + */ + function transferFrom(address src, address dst, uint wad) external returns (bool); +} \ No newline at end of file diff --git a/contracts/hedera/WHBAR.sol b/contracts/hedera/WHBAR.sol new file mode 100644 index 00000000..18fe2951 --- /dev/null +++ b/contracts/hedera/WHBAR.sol @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.0; + +contract WHBAR { + string public name = 'Wrapped HBAR'; + string public symbol = 'WHBAR'; + uint8 public decimals = 8; + uint256 private whbarTotalSupply = 0; + + event Approval(address indexed src, address indexed guy, uint wad); + event Transfer(address indexed src, address indexed dst, uint wad); + event Deposit(address indexed dst, uint wad); + event Withdrawal(address indexed src, uint wad); + + error InsufficientFunds(); + error InsufficientAllowance(); + error SendFailed(); + + mapping(address user => uint balance) public balanceOf; + mapping(address owner => mapping(address spender => uint amount)) public allowance; + + fallback() external payable { + deposit(); + } + + receive() external payable { + deposit(); + } + + function deposit() public payable { + balanceOf[msg.sender] += msg.value; + whbarTotalSupply += msg.value; + + emit Deposit(msg.sender, msg.value); + } + + function withdraw(uint wad) public { + if (!(balanceOf[msg.sender] >= wad)) { + revert InsufficientFunds(); + } + + balanceOf[msg.sender] -= wad; + whbarTotalSupply -= wad; + (bool success, ) = payable(msg.sender).call{ value: wad }(''); + if (!success) { + revert SendFailed(); + } + + emit Withdrawal(msg.sender, wad); + } + + function totalSupply() public view returns (uint) { + return whbarTotalSupply; + } + + function approve(address guy, uint wad) public returns (bool) { + allowance[msg.sender][guy] = wad; + + emit Approval(msg.sender, guy, wad); + + return true; + } + + function transfer(address dst, uint wad) public returns (bool) { + return transferFrom(msg.sender, dst, wad); + } + + function transferFrom(address src, address dst, uint wad) public returns (bool) { + if (dst == address(this)) { + revert SendFailed(); + } + if (!(balanceOf[src] >= wad)) { + revert InsufficientFunds(); + } + + if (src != msg.sender && allowance[src][msg.sender] != type(uint256).max) { + if (!(allowance[src][msg.sender] >= wad)) { + revert InsufficientAllowance(); + } + allowance[src][msg.sender] -= wad; + } + + balanceOf[src] -= wad; + balanceOf[dst] += wad; + + emit Transfer(src, dst, wad); + + return true; + } +} diff --git a/contracts/interfaces/IBaseTokenManager.sol b/contracts/interfaces/IBaseTokenManager.sol index 6508259c..d4c7f544 100644 --- a/contracts/interfaces/IBaseTokenManager.sol +++ b/contracts/interfaces/IBaseTokenManager.sol @@ -27,5 +27,7 @@ interface IBaseTokenManager { /** * @notice A function that should return the native interchain token deployment params. */ - function getTokenDeployInfoFromParams(bytes calldata params) external pure returns (bytes memory, string memory, string memory, uint8); + function getTokenDeployInfoFromParams( + bytes calldata params + ) external pure returns (bytes memory, string memory, string memory, uint8, uint256); } diff --git a/contracts/interfaces/ITokenCreationPricing.sol b/contracts/interfaces/ITokenCreationPricing.sol new file mode 100644 index 00000000..6454c016 --- /dev/null +++ b/contracts/interfaces/ITokenCreationPricing.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +/** + * @title ITokenCreationPricing + * @notice Interface for managing token creation pricing functionality + */ +interface ITokenCreationPricing { + /** + * @notice Emitted when the token creation price is updated + * @param newPrice The new token creation price in tinycents + */ + event TokenCreationPriceSet(uint256 newPrice); + + /** + * @notice Emitted when the WHBAR address is updated + * @param newWhbarAddress The new WHBAR contract address + */ + event WhbarAddressSet(address newWhbarAddress); + + /** + * @notice Error thrown when an invalid price is provided + */ + error InvalidTokenCreationPrice(); + + /** + * @notice Error thrown when an invalid WHBAR address is provided + */ + error InvalidWhbarAddress(); + + /** + * @notice Returns the token creation price in tinycents + * @return price The token creation price in tinycents + */ + function tokenCreationPrice() external view returns (uint256 price); + + /** + * @notice Returns the token creation price in tinybars. + * @return price The token creation price in tinybars. + */ + function tokenCreationPriceTinybars() external returns (uint256 price); + + /** + * @notice Returns the WHBAR contract address + * @return whbarAddress The WHBAR contract address + */ + function whbarAddress() external view returns (address whbarAddress); +} diff --git a/contracts/proxies/TokenManagerProxy.sol b/contracts/proxies/TokenManagerProxy.sol index 2cd08d5d..a8c887fa 100644 --- a/contracts/proxies/TokenManagerProxy.sol +++ b/contracts/proxies/TokenManagerProxy.sol @@ -12,6 +12,9 @@ import { ITokenManager } from '../interfaces/ITokenManager.sol'; import { ITokenManagerProxy } from '../interfaces/ITokenManagerProxy.sol'; import { ITokenManagerImplementation } from '../interfaces/ITokenManagerImplementation.sol'; import { ITokenManagerType } from '../interfaces/ITokenManagerType.sol'; +import { ITokenCreationPricing } from '../interfaces/ITokenCreationPricing.sol'; + +import { IWHBAR } from '../hedera/IWHBAR.sol'; /** * @title TokenManagerProxy @@ -46,11 +49,18 @@ contract TokenManagerProxy is BaseProxy, ITokenManagerType, ITokenManagerProxy { // If the implementation type is NATIVE_INTERCHAIN_TOKEN, deploy the token if (implementationType_ == uint256(TokenManagerType.NATIVE_INTERCHAIN_TOKEN)) { // Parse the parameters to get the token deploy info - (bytes memory operator, string memory name, string memory symbol, uint8 decimals) = IBaseTokenManager(implementation_) - .getTokenDeployInfoFromParams(params); + (bytes memory operator, string memory name, string memory symbol, uint8 decimals, uint256 price) = IBaseTokenManager( + implementation_ + ).getTokenDeployInfoFromParams(params); // Get the deployer address from the interchain token service address interchainTokenDeployer = IInterchainTokenService(interchainTokenService).interchainTokenDeployer(); + address whbarAddress = ITokenCreationPricing(interchainTokenService).whbarAddress(); + + // Transfer from ITS to itself + IWHBAR(whbarAddress).transferFrom(interchainTokenService, address(this), price); + // Redeem HBAR to pay for token creation + IWHBAR(whbarAddress).withdraw(price); // Call the interchain token deployer to deploy the token (bool deploySuccess, bytes memory returnData) = interchainTokenDeployer.delegatecall( diff --git a/contracts/test/utils/TestTokenCreationPricing.sol b/contracts/test/utils/TestTokenCreationPricing.sol new file mode 100644 index 00000000..2b35b2a6 --- /dev/null +++ b/contracts/test/utils/TestTokenCreationPricing.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import { TokenCreationPricing } from '../../utils/TokenCreationPricing.sol'; + +contract TestTokenCreationPricing is TokenCreationPricing { + error Invalid(); + + constructor() { + if (TOKEN_CREATION_PRICING_SLOT != uint256(keccak256('TokenCreationPricing.Slot')) - 1) revert Invalid(); + } + + function setTokenCreationPriceTest(uint256 price) external { + _setTokenCreationPrice(price); + } + + function setWhbarAddressTest(address whbarAddress_) external { + _setWhbarAddress(whbarAddress_); + } + + function getTokenCreationPricingSlot() external pure returns (uint256) { + return TOKEN_CREATION_PRICING_SLOT; + } + + function calculateExpectedSlot() external pure returns (uint256) { + return uint256(keccak256('TokenCreationPricing.Slot')) - 1; + } +} diff --git a/contracts/token-manager/TokenManager.sol b/contracts/token-manager/TokenManager.sol index bbbadad7..f7bb3820 100644 --- a/contracts/token-manager/TokenManager.sol +++ b/contracts/token-manager/TokenManager.sol @@ -133,8 +133,8 @@ contract TokenManager is ITokenManager, Minter, Operator, FlowLimit, Implementat */ function getTokenDeployInfoFromParams( bytes calldata params_ - ) external pure returns (bytes memory operator, string memory name, string memory symbol, uint8 decimals) { - (operator, name, symbol, decimals) = abi.decode(params_, (bytes, string, string, uint8)); + ) external pure returns (bytes memory operator, string memory name, string memory symbol, uint8 decimals, uint256 price) { + (operator, name, symbol, decimals, price) = abi.decode(params_, (bytes, string, string, uint8, uint256)); } /** diff --git a/contracts/utils/TokenCreationPricing.sol b/contracts/utils/TokenCreationPricing.sol new file mode 100644 index 00000000..10335a0f --- /dev/null +++ b/contracts/utils/TokenCreationPricing.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import { ITokenCreationPricing } from '../interfaces/ITokenCreationPricing.sol'; +import { HTS } from '../hedera/HTS.sol'; + +contract TokenCreationPricing is ITokenCreationPricing { + // uint256(keccak256('TokenCreationPricing.Slot')) - 1 + uint256 internal constant TOKEN_CREATION_PRICING_SLOT = 0xb92579529e766822ba0a44394069682b56cba9d6058dc6334ef7fe967101807d; + + struct TokenCreationPricingStorage { + uint256 tokenCreationPrice; + address whbarAddress; + } + + function _setTokenCreationPrice(uint256 price) internal { + _tokenCreationPricingStorage().tokenCreationPrice = price; + + emit TokenCreationPriceSet(price); + } + + function _setWhbarAddress(address whbarAddress_) internal { + if (whbarAddress_ == address(0)) revert InvalidWhbarAddress(); + + _tokenCreationPricingStorage().whbarAddress = whbarAddress_; + + emit WhbarAddressSet(whbarAddress_); + } + + function tokenCreationPrice() public view returns (uint256 price) { + price = _tokenCreationPricingStorage().tokenCreationPrice; + } + + /** + * @notice Returns the token creation price in tinybars. + * @return price The token creation price in tinybars. + */ + function tokenCreationPriceTinybars() public returns (uint256 price) { + uint256 priceTinycents = _tokenCreationPricingStorage().tokenCreationPrice; + + if (priceTinycents == 0) { + return 0; + } + + price = HTS.tinycentsToTinybars(priceTinycents); + } + + function whbarAddress() public view returns (address whbarAddress_) { + whbarAddress_ = _tokenCreationPricingStorage().whbarAddress; + } + + /** + * @notice Gets the specific storage location for preventing upgrade collisions + * @return slot containing the storage struct + */ + function _tokenCreationPricingStorage() private pure returns (TokenCreationPricingStorage storage slot) { + assembly { + slot.slot := TOKEN_CREATION_PRICING_SLOT + } + } +} diff --git a/test/UtilsTest.js b/test/UtilsTest.js index 7bc263c8..b669585d 100644 --- a/test/UtilsTest.js +++ b/test/UtilsTest.js @@ -189,6 +189,41 @@ describe('ChainTracker', async () => { }); }); +describe('TokenCreationPricing', async () => { + let test; + let whbarContract; + const tokenPrice = 100; // 100 tinycents + + before(async () => { + test = await deployContract(ownerWallet, 'TestTokenCreationPricing'); + whbarContract = await deployContract(ownerWallet, 'WHBAR'); + }); + + it('Should calculate hardcoded constants correctly', async () => { + await expect(deployContract(ownerWallet, `TestTokenCreationPricing`, [])).to.not.be.reverted; + }); + + it('Should set and query token creation price properly', async () => { + expect(await test.tokenCreationPrice()).to.equal(0); + + await expect(test.setTokenCreationPriceTest(tokenPrice)).to.emit(test, 'TokenCreationPriceSet').withArgs(tokenPrice); + + expect(await test.tokenCreationPrice()).to.equal(tokenPrice); + }); + + it('Should set and query WHBAR address properly', async () => { + expect(await test.whbarAddress()).to.equal(AddressZero); + + await expect(test.setWhbarAddressTest(whbarContract.address)).to.emit(test, 'WhbarAddressSet').withArgs(whbarContract.address); + + expect(await test.whbarAddress()).to.equal(whbarContract.address); + }); + + it('Should revert when setting invalid WHBAR address', async () => { + await expectRevert((gasOptions) => test.setWhbarAddressTest(AddressZero, gasOptions), test, 'InvalidWhbarAddress'); + }); +}); + describe('InterchainTokenDeployer', () => { let interchainToken, interchainTokenDeployer; const service = new Wallet(getRandomBytes32()).address; From 374103fe1fd145b39a26c4f8b41fc8cf840441bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Tue, 10 Jun 2025 16:13:51 +0200 Subject: [PATCH 04/49] pay for token creation, specify price --- contracts/InterchainTokenService.sol | 2 +- contracts/hedera/HTS.sol | 6 ++++-- contracts/interfaces/IInterchainTokenDeployer.sol | 6 ++++-- contracts/interfaces/ITokenCreationPricing.sol | 6 ------ contracts/proxies/TokenManagerProxy.sol | 2 +- contracts/utils/InterchainTokenDeployer.sol | 7 ++++--- contracts/utils/TokenCreationPricing.sol | 5 +++-- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index 6cf30b04..62a4b158 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -998,7 +998,7 @@ contract InterchainTokenService is bytes memory operator ) internal { // Price in tinybars - uint256 tokenCreatePrice = tokenCreationPriceTinybars(); + uint256 tokenCreatePrice = _tokenCreationPriceTinybars(); // TokenManagerProxy deploy params bytes memory params = abi.encode(operator, name, symbol, decimals, tokenCreatePrice); diff --git a/contracts/hedera/HTS.sol b/contracts/hedera/HTS.sol index bf39f4dd..4515f80e 100644 --- a/contracts/hedera/HTS.sol +++ b/contracts/hedera/HTS.sol @@ -95,17 +95,19 @@ library HTS { /// @param initialTotalSupply Specifies the initial supply of tokens to be put in circulation. The /// initial supply is sent to the Treasury Account. The supply is in the lowest denomination possible. /// @param decimals the number of decimal places a token is divisible by + /// @param price the amount of HBAR (in tinybars) to pay for token creation /// @return tokenAddress the created token's address function createFungibleToken( IHederaTokenService.HederaToken memory token, int64 initialTotalSupply, - int32 decimals + int32 decimals, + uint256 price ) public returns (address tokenAddress) { if (token.expiry.second == 0 && token.expiry.autoRenewPeriod == 0) { token.expiry.autoRenewPeriod = DEFAULT_AUTO_RENEW; } - (bool success, bytes memory result) = PRECOMPILE.call{ value: msg.value }( + (bool success, bytes memory result) = PRECOMPILE.call{ value: price }( abi.encodeWithSelector(IHederaTokenService.createFungibleToken.selector, token, initialTotalSupply, decimals) ); diff --git a/contracts/interfaces/IInterchainTokenDeployer.sol b/contracts/interfaces/IInterchainTokenDeployer.sol index a952af81..09eb386b 100644 --- a/contracts/interfaces/IInterchainTokenDeployer.sol +++ b/contracts/interfaces/IInterchainTokenDeployer.sol @@ -19,12 +19,14 @@ interface IInterchainTokenDeployer { * @param name Name of the token. * @param symbol Symbol of the token. * @param decimals Decimals of the token. + * @param price Price in HBAR (tinybars) to pay for token creation. * @return tokenAddress Address of the deployed token. */ function deployInterchainToken( bytes32 tokenId, string calldata name, string calldata symbol, - uint8 decimals - ) external payable returns (address tokenAddress); + uint8 decimals, + uint256 price + ) external returns (address tokenAddress); } diff --git a/contracts/interfaces/ITokenCreationPricing.sol b/contracts/interfaces/ITokenCreationPricing.sol index 6454c016..91b50ad3 100644 --- a/contracts/interfaces/ITokenCreationPricing.sol +++ b/contracts/interfaces/ITokenCreationPricing.sol @@ -35,12 +35,6 @@ interface ITokenCreationPricing { */ function tokenCreationPrice() external view returns (uint256 price); - /** - * @notice Returns the token creation price in tinybars. - * @return price The token creation price in tinybars. - */ - function tokenCreationPriceTinybars() external returns (uint256 price); - /** * @notice Returns the WHBAR contract address * @return whbarAddress The WHBAR contract address diff --git a/contracts/proxies/TokenManagerProxy.sol b/contracts/proxies/TokenManagerProxy.sol index a8c887fa..4c61bae2 100644 --- a/contracts/proxies/TokenManagerProxy.sol +++ b/contracts/proxies/TokenManagerProxy.sol @@ -64,7 +64,7 @@ contract TokenManagerProxy is BaseProxy, ITokenManagerType, ITokenManagerProxy { // Call the interchain token deployer to deploy the token (bool deploySuccess, bytes memory returnData) = interchainTokenDeployer.delegatecall( - abi.encodeWithSelector(IInterchainTokenDeployer.deployInterchainToken.selector, tokenId, name, symbol, decimals) + abi.encodeWithSelector(IInterchainTokenDeployer.deployInterchainToken.selector, tokenId, name, symbol, decimals, price) ); if (!deploySuccess) { revert InterchainTokenDeploymentFailed(returnData); diff --git a/contracts/utils/InterchainTokenDeployer.sol b/contracts/utils/InterchainTokenDeployer.sol index d2eb32d4..536a9863 100644 --- a/contracts/utils/InterchainTokenDeployer.sol +++ b/contracts/utils/InterchainTokenDeployer.sol @@ -23,8 +23,9 @@ contract InterchainTokenDeployer is IInterchainTokenDeployer { bytes32 tokenId, string calldata name, string calldata symbol, - uint8 decimals - ) external payable returns (address tokenAddress) { + uint8 decimals, + uint256 price + ) external returns (address tokenAddress) { // Since the caller uses delegatecall `this` refers to the calling contract address self = address(this); @@ -55,7 +56,7 @@ contract InterchainTokenDeployer is IInterchainTokenDeployer { IHederaTokenService.Expiry memory expiry = IHederaTokenService.Expiry(0, self, 0); token.expiry = expiry; - address createdTokenAddress = HTS.createFungibleToken(token, 0, int32(uint32(decimals))); + address createdTokenAddress = HTS.createFungibleToken(token, 0, int32(uint32(decimals)), price); tokenAddress = createdTokenAddress; } diff --git a/contracts/utils/TokenCreationPricing.sol b/contracts/utils/TokenCreationPricing.sol index 10335a0f..ed44605d 100644 --- a/contracts/utils/TokenCreationPricing.sol +++ b/contracts/utils/TokenCreationPricing.sol @@ -36,14 +36,15 @@ contract TokenCreationPricing is ITokenCreationPricing { * @notice Returns the token creation price in tinybars. * @return price The token creation price in tinybars. */ - function tokenCreationPriceTinybars() public returns (uint256 price) { + function _tokenCreationPriceTinybars() internal returns (uint256 price) { uint256 priceTinycents = _tokenCreationPricingStorage().tokenCreationPrice; if (priceTinycents == 0) { return 0; } - price = HTS.tinycentsToTinybars(priceTinycents); + // TODO(hedera) explain why + 1 (for rounding) + price = HTS.tinycentsToTinybars(priceTinycents) + 1; } function whbarAddress() public view returns (address whbarAddress_) { From 7964a796eb1a0935e0f580b008a4b9ddfc63bfdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 11 Jun 2025 11:11:46 +0200 Subject: [PATCH 05/49] deploy hts lib for testing --- contracts/hedera/HTS.sol | 2 +- .../interfaces/IInterchainTokenDeployer.sol | 2 +- scripts/deploy-hts.js | 52 ++++++++++++++++++ scripts/deploy.js | 54 +++++++++++++++++-- test/UtilsTest.js | 5 +- 5 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 scripts/deploy-hts.js diff --git a/contracts/hedera/HTS.sol b/contracts/hedera/HTS.sol index 4515f80e..4dc63a05 100644 --- a/contracts/hedera/HTS.sol +++ b/contracts/hedera/HTS.sol @@ -95,7 +95,7 @@ library HTS { /// @param initialTotalSupply Specifies the initial supply of tokens to be put in circulation. The /// initial supply is sent to the Treasury Account. The supply is in the lowest denomination possible. /// @param decimals the number of decimal places a token is divisible by - /// @param price the amount of HBAR (in tinybars) to pay for token creation + /// @param price the amount to pay for token creation /// @return tokenAddress the created token's address function createFungibleToken( IHederaTokenService.HederaToken memory token, diff --git a/contracts/interfaces/IInterchainTokenDeployer.sol b/contracts/interfaces/IInterchainTokenDeployer.sol index 09eb386b..98d2c978 100644 --- a/contracts/interfaces/IInterchainTokenDeployer.sol +++ b/contracts/interfaces/IInterchainTokenDeployer.sol @@ -19,7 +19,7 @@ interface IInterchainTokenDeployer { * @param name Name of the token. * @param symbol Symbol of the token. * @param decimals Decimals of the token. - * @param price Price in HBAR (tinybars) to pay for token creation. + * @param price Amount to pay for token creation. * @return tokenAddress Address of the deployed token. */ function deployInterchainToken( diff --git a/scripts/deploy-hts.js b/scripts/deploy-hts.js new file mode 100644 index 00000000..85215113 --- /dev/null +++ b/scripts/deploy-hts.js @@ -0,0 +1,52 @@ +const { ethers } = require('hardhat'); + +async function deployHTS(wallet) { + const factory = await ethers.getContractFactory('HTS', wallet); + const hts = await factory.deploy().then((d) => d.deployed()); + + return hts.address; +} + +async function deployWithHTSLibrary(wallet, contractName, htsAddress, args = []) { + const factory = await ethers.getContractFactory(contractName, { + signer: wallet, + libraries: { + HTS: htsAddress, + }, + }); + const contract = await factory.deploy(...args).then((d) => d.deployed()); + + return contract; +} + +async function main() { + const [deployer] = await ethers.getSigners(); + + console.log('Deploying HTS library with account:', deployer.address); + console.log('Account balance:', (await deployer.getBalance()).toString()); + + const htsAddress = await deployHTS(deployer); + + console.log('HTS deployment completed!'); + console.log('HTS library address:', htsAddress); + + return { + hts: htsAddress, + }; +} + +// Allow script to be run directly +if (require.main === module) { + main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); +} + +module.exports = { + deployHTS, + deployWithHTSLibrary, + main, +}; diff --git a/scripts/deploy.js b/scripts/deploy.js index 898c344d..9a53ea29 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -7,9 +7,51 @@ const Proxy = require('../artifacts/contracts/proxies/InterchainProxy.sol/Interc const Create3Deployer = require('@axelar-network/axelar-gmp-sdk-solidity/artifacts/contracts/deploy/Create3Deployer.sol/Create3Deployer.json'); const { create3DeployContract, getCreate3Address } = require('@axelar-network/axelar-gmp-sdk-solidity'); const { ITS_HUB_ADDRESS } = require('../test/constants'); +const { deployHTS } = require('./deploy-hts'); -async function deployContract(wallet, contractName, args = []) { - const factory = await ethers.getContractFactory(contractName, wallet); +const HTS_LIBRARY_NAME = 'contracts/hedera/HTS.sol:HTS'; + +// List of contracts that depend on HTS library +const HTS_DEPENDENT_CONTRACTS = [ + 'InterchainTokenService', + 'InterchainTokenDeployer', + 'TokenManager', + // Test + 'TestInterchainTokenService', + 'TestInterchainTokenDeployer', + 'TestTokenManager', +]; + +// Context object to hold deployment state +const deploymentContext = { + htsAddress: null, +}; + +function getCurrentHTSAddress() { + return deploymentContext.htsAddress; +} + +async function deployContract(wallet, contractName, args = [], additionalLibraries = {}, htsAddress = null) { + const libraries = { ...additionalLibraries }; + + // Automatically add HTS library for dependent contracts + if (HTS_DEPENDENT_CONTRACTS.includes(contractName)) { + let currentHtsAddress = htsAddress || deploymentContext.htsAddress; + + if (!currentHtsAddress) { + console.log('Deploying HTS library for', contractName); + currentHtsAddress = await deployHTS(wallet); + console.log('HTS library deployed at:', currentHtsAddress); + deploymentContext.htsAddress = currentHtsAddress; + } + + libraries[HTS_LIBRARY_NAME] = currentHtsAddress; + } + + const factory = await ethers.getContractFactory(contractName, { + signer: wallet, + libraries, + }); const contract = await factory.deploy(...args).then((d) => d.deployed()); return contract; @@ -80,7 +122,11 @@ async function deployAll( evmChains = [], deploymentKey = 'InterchainTokenService', factoryDeploymentKey = deploymentKey + 'Factory', + htsAddress = null, ) { + // Reset deployment context + deploymentContext.htsAddress = htsAddress; + const create3Deployer = await new ethers.ContractFactory(Create3Deployer.abi, Create3Deployer.bytecode, wallet) .deploy() .then((d) => d.deployed()); @@ -90,7 +136,7 @@ async function deployAll( const interchainTokenServiceAddress = await getCreate3Address(create3Deployer.address, wallet, deploymentKey); const tokenManagerDeployer = await deployContract(wallet, 'TokenManagerDeployer', []); const interchainToken = await deployContract(wallet, 'InterchainToken', [interchainTokenServiceAddress]); - const interchainTokenDeployer = await deployContract(wallet, 'InterchainTokenDeployer', [interchainToken.address]); + const interchainTokenDeployer = await deployContract(wallet, 'InterchainTokenDeployer'); const tokenManager = await deployContract(wallet, 'TokenManager', [interchainTokenServiceAddress]); const tokenHandler = await deployContract(wallet, 'TokenHandler', []); @@ -130,6 +176,7 @@ async function deployAll( interchainTokenDeployer, tokenManager, tokenHandler, + htsAddress: deploymentContext.htsAddress, }; } @@ -140,4 +187,5 @@ module.exports = { deployInterchainTokenService, deployInterchainTokenFactory, deployAll, + getCurrentHTSAddress, }; diff --git a/test/UtilsTest.js b/test/UtilsTest.js index b669585d..5463c686 100644 --- a/test/UtilsTest.js +++ b/test/UtilsTest.js @@ -230,6 +230,7 @@ describe('InterchainTokenDeployer', () => { const name = 'tokenName'; const symbol = 'tokenSymbol'; const decimals = 18; + const price = 1000; // 1000 tinybars const MINTER_ROLE = 0; before(async () => { @@ -252,7 +253,7 @@ describe('InterchainTokenDeployer', () => { const token = await getContractAt('InterchainToken', tokenAddress, ownerWallet); - await expect(interchainTokenDeployer.deployInterchainToken(salt, tokenId, ownerWallet.address, name, symbol, decimals)) + await expect(interchainTokenDeployer.deployInterchainToken(salt, tokenId, ownerWallet.address, name, symbol, decimals, price)) .to.emit(token, 'RolesAdded') .withArgs(service, 1 << MINTER_ROLE) .and.to.emit(token, 'RolesAdded') @@ -268,7 +269,7 @@ describe('InterchainTokenDeployer', () => { await expectRevert( (gasOptions) => - interchainTokenDeployer.deployInterchainToken(salt, tokenId, ownerWallet.address, name, symbol, decimals, gasOptions), + interchainTokenDeployer.deployInterchainToken(salt, tokenId, ownerWallet.address, name, symbol, decimals, price, gasOptions), interchainTokenDeployer, 'AlreadyDeployed', ); From 414c13b76d8a90713816d05eb99d9b0231e36b6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 11 Jun 2025 11:11:58 +0200 Subject: [PATCH 06/49] rm unused `transmitInterchainTransfer` ITS method --- contracts/InterchainTokenService.sol | 30 +------------------ .../interfaces/IInterchainTokenService.sol | 4 +-- 2 files changed, 3 insertions(+), 31 deletions(-) diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index 62a4b158..267fb409 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -577,35 +577,6 @@ contract InterchainTokenService is _interchainTransfer(tokenId, destinationChain, destinationAddress, amount, data, gasValue); } - /******************\ - TOKEN ONLY FUNCTIONS - \******************/ - - /** - * @notice Transmit an interchain transfer for the given tokenId. - * @dev Only callable by a token registered under a tokenId. - * @param tokenId The tokenId of the token (which must be the msg.sender). - * @param sourceAddress The address where the token is coming from. - * @param destinationChain The name of the chain to send tokens to. - * @param destinationAddress The destinationAddress for the interchainTransfer. - * @param amount The amount of token to give. - * @param metadata Optional metadata for the call for additional effects (such as calling a destination contract). - */ - function transmitInterchainTransfer( - bytes32 tokenId, - address sourceAddress, - string calldata destinationChain, - bytes memory destinationAddress, - uint256 amount, - bytes calldata metadata - ) external payable whenNotPaused { - amount = _takeToken(tokenId, sourceAddress, amount, true); - - bytes memory data = _decodeMetadata(metadata); - - _transmitInterchainTransfer(tokenId, sourceAddress, destinationChain, destinationAddress, amount, data, msg.value); - } - /*************\ OWNER FUNCTIONS \*************/ @@ -1005,6 +976,7 @@ contract InterchainTokenService is TokenManagerType tokenManagerType = TokenManagerType.NATIVE_INTERCHAIN_TOKEN; + // Get the pre-determined token manager address address tokenManager_ = tokenManagerAddress(tokenId); // Approve the token manager deployer to spend the token creation price diff --git a/contracts/interfaces/IInterchainTokenService.sol b/contracts/interfaces/IInterchainTokenService.sol index 6f90ff94..1b7afd00 100644 --- a/contracts/interfaces/IInterchainTokenService.sol +++ b/contracts/interfaces/IInterchainTokenService.sol @@ -8,20 +8,20 @@ import { IPausable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/int import { IUpgradable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IUpgradable.sol'; import { IInterchainAddressTracker } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IInterchainAddressTracker.sol'; -import { ITransmitInterchainToken } from './ITransmitInterchainToken.sol'; import { ITokenManager } from './ITokenManager.sol'; import { ITokenManagerType } from './ITokenManagerType.sol'; import { ITokenManagerImplementation } from './ITokenManagerImplementation.sol'; import { IOperator } from './IOperator.sol'; import { IChainTracker } from './IChainTracker.sol'; import { IItsHubAddressTracker } from './IItsHubAddressTracker.sol'; +import { ITokenCreationPricing } from './ITokenCreationPricing.sol'; /** * @title IInterchainTokenService Interface * @notice Interface for the Interchain Token Service */ interface IInterchainTokenService is - ITransmitInterchainToken, + ITokenCreationPricing, ITokenManagerType, ITokenManagerImplementation, IAxelarValuedExpressExecutable, From ab88ce0d6ee3b3677c2a02e1c337422e85a12309 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 11 Jun 2025 22:45:05 +0200 Subject: [PATCH 07/49] revert on initial supply token deployments in factory --- contracts/InterchainTokenFactory.sol | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/contracts/InterchainTokenFactory.sol b/contracts/InterchainTokenFactory.sol index 5551b444..90bf9da5 100644 --- a/contracts/InterchainTokenFactory.sol +++ b/contracts/InterchainTokenFactory.sol @@ -11,6 +11,8 @@ import { ITokenManager } from './interfaces/ITokenManager.sol'; import { IInterchainToken } from './interfaces/IInterchainToken.sol'; import { IERC20Named } from './interfaces/IERC20Named.sol'; +import { HTS, IHederaTokenService } from './hedera/HTS.sol'; + /** * @title InterchainTokenFactory * @notice This contract is responsible for deploying new interchain tokens and managing their token managers. @@ -144,9 +146,14 @@ contract InterchainTokenFactory is IInterchainTokenFactory, Multicall, Upgradabl string memory currentChain = ''; uint256 gasValue = 0; - if (initialSupply > 0) { - minterBytes = address(this).toBytes(); - } else if (minter != address(0)) { + // HTS tokens must previously be associated with an account + // to be able to send tokens to it. Since a new token will be created + // it's not possible to send it right away. + if (initialSupply != 0) { + revert HTS.InitialSupplyUnsupported(); + } + + if (minter != address(0)) { if (minter == address(interchainTokenService)) revert InvalidMinter(minter); minterBytes = minter.toBytes(); From a8b20e3d6e1f83ef313f1fcd90b71464e83625a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 11 Jun 2025 22:58:23 +0200 Subject: [PATCH 08/49] wip tests --- contracts/InterchainTokenService.sol | 11 - contracts/hedera/HTS.sol | 16 +- .../interfaces/IInterchainTokenService.sol | 7 - .../interfaces/ITokenCreationPricing.sol | 12 - contracts/utils/TokenCreationPricing.sol | 8 - hardhat.config.js | 18 +- hedera-failing-tests.txt | 852 ++++++++++++++++++ scripts/deploy.js | 2 + test/InterchainTokenService.js | 2 +- test/utils.js | 4 + 10 files changed, 884 insertions(+), 48 deletions(-) create mode 100644 hedera-failing-tests.txt diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index 267fb409..9edeb33a 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -240,17 +240,6 @@ contract InterchainTokenService is tokenAddress = ITokenManager(deployedTokenManager(tokenId)).tokenAddress(); } - /** - * @notice Returns the address of the interchain token associated with the given tokenId. - * @dev The token does not need to exist. - * @param tokenId The tokenId of the interchain token. - * @return tokenAddress The address of the interchain token. - */ - function interchainTokenAddress(bytes32 tokenId) public view returns (address tokenAddress) { - tokenId = _getInterchainTokenSalt(tokenId); - tokenAddress = _create3Address(tokenId); - } - /** * @notice Calculates the tokenId that would correspond to a link for a given deployer with a specified salt. * @param sender The address of the TokenManager deployer. diff --git a/contracts/hedera/HTS.sol b/contracts/hedera/HTS.sol index 4dc63a05..1c3d7897 100644 --- a/contracts/hedera/HTS.sol +++ b/contracts/hedera/HTS.sol @@ -24,19 +24,19 @@ library HTS { // See `TokenKey` struct, `keyType`. // 0th bit: adminKey - uint256 internal constant ADMIN_KEY_BIT = 1 << 0; + uint256 private constant ADMIN_KEY_BIT = 1 << 0; // 1st bit: kycKey - uint256 internal constant KYC_KEY_BIT = 1 << 1; + uint256 private constant KYC_KEY_BIT = 1 << 1; // 2nd bit: freezeKey - uint256 internal constant FREEZE_KEY_BIT = 1 << 2; + uint256 private constant FREEZE_KEY_BIT = 1 << 2; // 3rd bit: wipeKey - uint256 internal constant WIPE_KEY_BIT = 1 << 3; + uint256 private constant WIPE_KEY_BIT = 1 << 3; // 4th bit: supplyKey uint256 internal constant SUPPLY_KEY_BIT = 1 << 4; // 5th bit: feeScheduleKey - uint256 internal constant FEE_SCHEDULE_KEY_BIT = 1 << 5; + uint256 private constant FEE_SCHEDULE_KEY_BIT = 1 << 5; // 6th bit: pauseKey - uint256 internal constant PAUSE_KEY_BIT = 1 << 6; + uint256 private constant PAUSE_KEY_BIT = 1 << 6; // 90 days in seconds int32 private constant DEFAULT_AUTO_RENEW = 7776000; @@ -260,6 +260,10 @@ library HTS { } function tinycentsToTinybars(uint256 tinycents) public returns (uint256 tinybars) { + if (tinycents == 0) { + return 0; + } + (bool success, bytes memory result) = EXCHANGE_RATE_PRECOMPILE.call( abi.encodeWithSelector(IExchangeRate.tinycentsToTinybars.selector, tinycents) ); diff --git a/contracts/interfaces/IInterchainTokenService.sol b/contracts/interfaces/IInterchainTokenService.sol index 1b7afd00..3959c713 100644 --- a/contracts/interfaces/IInterchainTokenService.sol +++ b/contracts/interfaces/IInterchainTokenService.sol @@ -163,13 +163,6 @@ interface IInterchainTokenService is */ function registeredTokenAddress(bytes32 tokenId) external view returns (address tokenAddress); - /** - * @notice Returns the address of the interchain token associated with the given tokenId. - * @param tokenId The tokenId of the interchain token. - * @return tokenAddress The address of the interchain token. - */ - function interchainTokenAddress(bytes32 tokenId) external view returns (address tokenAddress); - /** * @notice Returns the custom tokenId associated with the given operator and salt. * @param operator_ The operator address. diff --git a/contracts/interfaces/ITokenCreationPricing.sol b/contracts/interfaces/ITokenCreationPricing.sol index 91b50ad3..20e51913 100644 --- a/contracts/interfaces/ITokenCreationPricing.sol +++ b/contracts/interfaces/ITokenCreationPricing.sol @@ -7,18 +7,6 @@ pragma solidity ^0.8.0; * @notice Interface for managing token creation pricing functionality */ interface ITokenCreationPricing { - /** - * @notice Emitted when the token creation price is updated - * @param newPrice The new token creation price in tinycents - */ - event TokenCreationPriceSet(uint256 newPrice); - - /** - * @notice Emitted when the WHBAR address is updated - * @param newWhbarAddress The new WHBAR contract address - */ - event WhbarAddressSet(address newWhbarAddress); - /** * @notice Error thrown when an invalid price is provided */ diff --git a/contracts/utils/TokenCreationPricing.sol b/contracts/utils/TokenCreationPricing.sol index ed44605d..12a22cea 100644 --- a/contracts/utils/TokenCreationPricing.sol +++ b/contracts/utils/TokenCreationPricing.sol @@ -16,16 +16,12 @@ contract TokenCreationPricing is ITokenCreationPricing { function _setTokenCreationPrice(uint256 price) internal { _tokenCreationPricingStorage().tokenCreationPrice = price; - - emit TokenCreationPriceSet(price); } function _setWhbarAddress(address whbarAddress_) internal { if (whbarAddress_ == address(0)) revert InvalidWhbarAddress(); _tokenCreationPricingStorage().whbarAddress = whbarAddress_; - - emit WhbarAddressSet(whbarAddress_); } function tokenCreationPrice() public view returns (uint256 price) { @@ -39,10 +35,6 @@ contract TokenCreationPricing is ITokenCreationPricing { function _tokenCreationPriceTinybars() internal returns (uint256 price) { uint256 priceTinycents = _tokenCreationPricingStorage().tokenCreationPrice; - if (priceTinycents == 0) { - return 0; - } - // TODO(hedera) explain why + 1 (for rounding) price = HTS.tinycentsToTinybars(priceTinycents) + 1; } diff --git a/hardhat.config.js b/hardhat.config.js index b82bde0f..383fe3af 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -49,9 +49,11 @@ const itsCompilerSettings = { version: '0.8.27', settings: { evmVersion: process.env.EVM_VERSION || 'london', + // TODO(hedera) check about using viaIR + viaIR: true, optimizer: { ...optimizerSettings, - runs: 100, + runs: 1, }, }, }; @@ -73,8 +75,18 @@ module.exports = { 'contracts/InterchainTokenService.sol': itsCompilerSettings, }, }, - defaultNetwork: 'hardhat', - networks, + defaultNetwork: 'local', + networks: { + ...networks, + local: { + url: 'http://localhost:7546', + accounts: [ + '0x105d050185ccb907fba04dd92d8de9e32c18305e097ab41dadda21489a211524', + '0x2e1d968b041d84dd120a5860cee60cd83f9374ef527ca86996317ada3d0d03e7', + ], + chainId: 298, + }, + }, etherscan, mocha: { timeout: 1000000, diff --git a/hedera-failing-tests.txt b/hedera-failing-tests.txt new file mode 100644 index 00000000..659dd40f --- /dev/null +++ b/hedera-failing-tests.txt @@ -0,0 +1,852 @@ +~/P/c/h/interchain-token-service on  hedera-its [!] via ⬢ v23.8.0 took 9m53s ❯ npm test + +> @axelar-network/interchain-token-service@2.1.0 test +> npx hardhat test + +WARNING: You are currently using Node.js v23.8.0, which is not supported by Hardhat. This can lead to unexpected behavior. See https://hardhat.org/nodejs-versions + + + ·----------------------------|--------------------------------|--------------------------------· + | Solc version: 0.8.27 · Optimizer enabled: true · Runs: 1000 │ + ·····························|································|································· + | Contract Name · Deployed size (KiB) (change) · Initcode size (KiB) (change) │ + ·····························|································|································· + | Create3AddressFixed · 0.062 (0.000) · 0.090 (0.000) │ + ·····························|································|································· + | Create3Fixed · 0.062 (0.000) · 0.090 (0.000) │ + ·····························|································|································· + | RolesConstants · 0.062 (0.000) · 0.090 (0.000) │ + ·····························|································|································· + | ReentrancyGuard · 0.062 (0.000) · 0.090 (0.000) │ + ·····························|································|································· + | HederaResponseCodes · 0.084 (0.000) · 0.138 (0.000) │ + ·····························|································|································· + | AddressBytes · 0.084 (0.000) · 0.138 (0.000) │ + ·····························|································|································· + | SafeTokenCall · 0.084 (0.000) · 0.138 (0.000) │ + ·····························|································|································· + | SafeNativeTransfer · 0.084 (0.000) · 0.138 (0.000) │ + ·····························|································|································· + | StringStorage · 0.084 (0.000) · 0.138 (0.000) │ + ·····························|································|································· + | SafeTokenTransfer · 0.084 (0.000) · 0.138 (0.000) │ + ·····························|································|································· + | SafeTokenTransferFrom · 0.084 (0.000) · 0.138 (0.000) │ + ·····························|································|································· + | ContractAddress · 0.084 (0.000) · 0.138 (0.000) │ + ·····························|································|································· + | Pausable · 0.149 (0.000) · 0.178 (0.000) │ + ·····························|································|································· + | TokenCreationPricing · 0.227 (0.000) · 0.256 (0.000) │ + ·····························|································|································· + | CreateDeploy · 0.354 (0.000) · 0.384 (0.000) │ + ·····························|································|································· + | RolesBase · 0.383 (0.000) · 0.413 (0.000) │ + ·····························|································|································· + | InterchainProxy · 0.411 (0.000) · 1.162 (0.000) │ + ·····························|································|································· + | Proxy · 0.413 (0.000) · 1.164 (0.000) │ + ·····························|································|································· + | FlowLimit · 0.453 (0.000) · 0.483 (0.000) │ + ·····························|································|································· + | Multicall · 0.859 (0.000) · 0.890 (0.000) │ + ·····························|································|································· + | TokenManagerProxy · 1.038 (0.000) · 3.765 (0.000) │ + ·····························|································|································· + | ERC20 · 1.289 (0.000) · 1.319 (0.000) │ + ·····························|································|································· + | InterchainAddressTracker · 1.294 (0.000) · 1.324 (0.000) │ + ·····························|································|································· + | Minter · 1.486 (0.000) · 1.517 (0.000) │ + ·····························|································|································· + | Operator · 1.487 (0.000) · 1.518 (0.000) │ + ·····························|································|································· + | InterchainTokenDeployer · 1.929 (0.000) · 1.959 (0.000) │ + ·····························|································|································· + | WHBAR · 2.197 (0.000) · 2.672 (0.000) │ + ·····························|································|································· + | TokenHandler · 3.913 (0.000) · 3.943 (0.000) │ + ·····························|································|································· + | TokenManagerDeployer · 5.448 (0.000) · 5.479 (0.000) │ + ·····························|································|································· + | InterchainToken · 7.070 (0.000) · 7.308 (0.000) │ + ·····························|································|································· + | TokenManager · 9.205 (0.000) · 9.447 (0.000) │ + ·····························|································|································· + | HTS · 9.800 (0.000) · 9.855 (0.000) │ + ·····························|································|································· + | InterchainTokenFactory · 11.295 (0.000) · 11.890 (0.000) │ + ·····························|································|································· + | AxelarGasService · 11.644 (0.000) · 11.991 (0.000) │ + ·····························|································|································· + | InterchainTokenService · 18.561 (0.000) · 19.631 (0.000) │ + ·----------------------------|--------------------------------|--------------------------------· + + + Interchain Token Service +Deployed MockGateway to 0x8A7fa94487d0d0460550e5F3F80A663c39Ac8B10 +Deployed AxelarGasService to 0x2825a2eBD7F17Ae448900992D6293eF599B75C46 +Deployed TokenManagerDeployer to 0x009d6C5A3b5Ba38121cD18b8B987eB226176Dd04 +Deployed InterchainToken to 0x3Db0338922CDE54A66E0c585011249915d32d225 +Deploying HTS library for InterchainTokenDeployer +HTS library deployed at: 0x3658ACCAb6Ab0FE6eeDe58c67812AB43b137CB41 +Deployed InterchainTokenDeployer to 0xb5d100d1be8c360665CD5E250a70Df0e41f95466 +Deployed TokenManager to 0x53f9A96E09fbAfE4220b43D2d5aA3A5251E131aE +Deployed TokenHandler to 0xB3e022eBC7D5C5B1f4ca50b3D4A55173b34ceD49 +Deployed InterchainTokenService to 0xD0647968cC4eA1cB57167428eACE50a416f540dD +Deployed InterchainTokenFactory to 0x3a4c3d9B3e78ED01D4fcC22b490FC70C42b29F60 +Deployed TestInterchainTokenStandard to 0x59487EfbC26c4d300305b1e0aBBf8d98DC25d436 + Interchain Token Service Deployment +Deployed TestInterchainTokenService to 0xFf8F0650334d857F575623f5B925D06054891Ab5 + ✔ Should clear previously set addresses (8717ms) + ✔ Should test setup revert cases (98ms) + ✔ Should revert on invalid interchain token factory + ✔ Should revert on invalid gas service + ✔ Should revert on invalid chain name + ✔ Should revert on invalid token manager deployer + ✔ Should revert on invalid interchain token deployer + ✔ Should revert on invalid gateway + ✔ Should revert on invalid token manager implementation + ✔ Should revert on invalid token handler + ✔ Should revert on invalid its hub address + ✔ Should return the correct contract id + ✔ Should return the token manager implementation + 1) Should revert on TokenManagerProxy deployment with invalid constructor parameters + ✔ Should revert when deploying a remote interchain token to self as not the factory + ✔ Should revert when deploying a remote token manager to self + Owner functions + ✔ Should revert on set pause status when not called by the owner + Operator functions + ✔ Should revert on set trusted chain when not called by the owner + ✔ Should set trusted chain (4103ms) + ✔ Should revert on remove trusted address when not called by the owner (41ms) + ✔ Should remove trusted address (4103ms) + Token Handler + ✔ Should revert on give token with non existing token id (4070ms) + ✔ Should revert on take token with non existing token id (4079ms) + ✔ Should revert on transfer token from non existing token id (4115ms) + Deploy and Register Interchain Token + ✔ Should revert when registering an interchain token when service is paused (8309ms) + Deploy and Register remote Interchain Token + 2) "before all" hook for "Should revert on remote interchain token deployment if paused" + Receive Remote Interchain Token Deployment + ✔ Should revert on receiving a remote interchain token deployment if not approved by the gateway + 3) Should be able to receive a remote interchain token deployment with a mint/burn token manager with empty minter and operator + Register Token Metadata +Deployed TestInterchainTokenStandard to 0xEB7A35F115Dd688905683D986265556BBA8c5dDf + ✔ Should revert on registering token metadata with empty token address + ✔ Should successfully register token metadata (4105ms) + Custom Token Manager Deployment +Deployed TestInterchainTokenStandard to 0xB0E8DEF1bf24Fde0f3Dd679Ea4Ba3a22B32b73A2 + ✔ Should revert when calling registerCustomToken as not the factory (103ms) + ✔ Should revert on deploying an invalid token manager (4397ms) + ✔ Should revert on deploying a local token manager with invalid params (104ms) + ✔ Should revert on deploying a local token manager with interchain token manager type + ✔ Should revert on deploying a local token manager with invalid params + ✔ Should revert on linking a token with empty token address + ✔ Should revert on deploying a remote token manager with interchain token manager type + ✔ Should revert when deploying a custom token manager if paused (8388ms) + Initialize remote custom token manager deployment +Deployed TestInterchainTokenStandard to 0xB02FcA4FD6c591c82d212E465010B85E774CB502 + 4) "before all" hook for "Should initialize a remote custom token manager deployment" + Receive Remote Token Manager Deployment +Deployed TestInterchainTokenStandard to 0xb5e1B586606D96Ff47DB6895Ad41c19BbE1CE9d7 + 5) Should be able to receive a remote lock/unlock token manager deployment +Deployed TestInterchainTokenStandard to 0x4035edA37BdfE7C4e659687591A0CdeFFb9Ff948 + 6) Should be able to receive a remote mint/burn token manager deployment +Deployed TestInterchainTokenStandard to 0x2642601660515B06e198e9436e737eD4a3006c94 + ✔ Should not be able to receive a remote interchain token manager deployment (8273ms) + Send Token +Deployed TestInterchainTokenStandard to 0xB3787d6810D6Ab8e68A2448aE377aE188edcdab7 + 7) "before all" hook for "Should be able to initiate an interchain token transfer for lockUnlockFee with a normal ERC20 token" + Execute checks + ✔ Should revert on execute if remote address validation fails (4218ms) + ✔ Should revert on execute if the service is paused (12295ms) + ✔ Should revert on execute with invalid messageType (4176ms) + Receive Remote Tokens + ✔ Should revert with InvalidPayload (4136ms) +Deployed TestInterchainTokenStandard to 0x3AdE29C269197a1e4673c3E5b667c4b29e7B5404 + 8) Should be able to receive lock/unlock token +Deployed TestInterchainTokenStandard to 0x951e93C1E0206F892Dea7ECF881DF2A03a876620 + 9) Should be able to receive mint/burn token +Deployed TestFeeOnTransferToken to 0xdFE64B5a249A6DE6a9c5a9cDf7D1c11438f3404B + 10) Should be able to receive lock/unlock with fee on transfer token +Deployed TestFeeOnTransferTokenNoFee to 0x208e94081B32e87097b7dDE9B0dce643691B4351 + 11) Should be able to receive lock/unlock with fee on transfer token with normal ERC20 token + Send Token With Data +Deployed TestInterchainTokenStandard to 0x6BF9c73953166817Ce4A0CC0C8A3deD8BD790837 + 12) "before all" hook for "Should initiate an interchain token transfer via the interchainTransfer standard contract call & express call [lockUnlock]" + Receive Remote Token with Data +Deployed TestInterchainExecutable to 0x9Fb8F5E78F1d9f3e64B3c021A4E75feF3E4df802 +Deployed TestInvalidInterchainExecutable to 0xEA2565D5A21633e55d8a3eFcA2c9F7ef83A5242E +Deployed TestInterchainTokenStandard to 0xDCd4FC85dcD6050331ddA149EfA70C165B47c7df + 13) Should be able to receive lock/unlock token +Deployed TestInterchainTokenStandard to 0x814d379C35ac00B5C5FAa72123d4B2D8A15999dE + 14) Should be able to receive lock/unlock token with empty data and not call destination contract +Deployed TestInterchainTokenStandard to 0xc691B34F449A5E5DD22306AD241d2B2E25FE90C1 + 15) Should be able to receive mint/burn token +Deployed TestInterchainTokenStandard to 0x8844a0D5C40AE955326C4B7826F0e768f4a32bb8 + 16) Should be able to receive mint/burn from token +Deployed TestFeeOnTransferToken to 0xc83180Eca96B02b8d9f4383052Ab6B7aE7a5c8d0 + 17) Should be able to receive lock/unlock with fee on transfer token +Deployed TestInterchainTokenStandard to 0x373E3486214E401582e50599360857525B47C9B3 + 18) Should revert if token handler transfer token from fails +Deployed TestInterchainTokenStandard to 0x3eaa43C517B6418c8b0A7Ea0B5Ed64a0B9Ee13C5 + 19) Should revert if execute with interchain token fails + ✔ Should revert with UntrustedChain when the message type is RECEIVE_FROM_HUB and untrusted original source chain (4094ms) + ✔ Should revert with InvalidPayload when the message type is RECEIVE_FROM_HUB and has invalid inner payload. (8483ms) +Deployed TestInterchainTokenStandard to 0xbDB6782DaC4521BE6Ddb8593E895f22eb48d2de9 + 20) Should receive a message wrapped with RECEIVE_FROM_HUB and has MESSAGE_TYPE_DEPLOY_TOKEN_MANAGER type. + ✔ Should revert with UntrustedChain when receiving a direct message from the ITS Hub. Not supported yet (4112ms) + Send Interchain Token +Deployed TestInterchainTokenStandard to 0x90B8566d98D847Fd48bf83cBC5489394f502B445 + 21) Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [mintBurn] +Deployed TestInterchainTokenStandard to 0x24fBdE19491E3FdD9c2c43C1F898e19fcCD6927A + 22) Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [mintBurnFrom] +Deployed TestFeeOnTransferToken to 0x8BA9B2A89a1F149E063f53f42A799AC90f8d541C + 23) Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [lockUnlockFee] +Deployed TestInterchainTokenStandard to 0xAd138600464117275B3a80Fa3b35778bf1f921ec + 24) Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [lockUnlock] +Deployed TestInterchainTokenStandard to 0xFf7B446BB64f9A3Cfb301e00062732F8DA9D01e7 + 25) Should be able to initiate an interchain token transfer via interchainTransfer [mintBurn] without native gas +Deployed TestInterchainTokenStandard to 0x84034b6CF3C1197A031F179EF66a9e68F14bb8C5 + 26) Should be able to initiate an interchain token transfer via interchainTransfer [mintBurnFrom] without native gas +Deployed TestFeeOnTransferToken to 0x46e0aD69E7ed13bFF651b24b43e7b48232835F30 + 27) Should be able to initiate an interchain token transfer via interchainTransfer [lockUnlockFee] without native gas +Deployed TestInterchainTokenStandard to 0xfCa52A9aA40c24959dD5918E13aFD9D507Ecc8ce + 28) Should be able to initiate an interchain token transfer via interchainTransfer [lockUnlock] without native gas + 29) Should be able to initiate an interchain token transfer using interchainTransferFrom with max possible allowance + 30) Should revert using interchainTransferFrom with zero amount + Send Interchain Token With Data +Deployed TestInterchainTokenStandard to 0x22958B6AA8D0B01f04a4bafF4F4a535F5e64622E + 31) Should be able to initiate an interchain token transfer [lockUnlock] +Deployed TestInterchainTokenStandard to 0xBAdf703D3e9f55778C6b23C03597C073E18Ecf7e + 32) Should be able to initiate an interchain token transfer [mintBurn] +Deployed TestInterchainTokenStandard to 0x50F778D3eD1B91Bd2C5b66575fD339400bAc9672 + 33) Should be able to initiate an interchain token transfer [mintBurnFrom] +Deployed TestFeeOnTransferToken to 0x1BE6841d4a99E627de7721173BFED9B8640B28a6 + 34) Should be able to initiate an interchain token transfer [lockUnlockFee] + Express Execute +Deployed TestInterchainTokenStandard to 0x5131D2fbB38d29901b650195B8fd2f72281a508f + 35) "before all" hook for "Should revert on executeWithInterchainToken when not called by the service" + Interchain Executable +Deployed TestInterchainTokenStandard to 0x02aA74D60886931A448eE67B11182C16bF00236F + 36) "before all" hook for "Should revert on executeWithInterchainToken when not called by the service" + Express Receive Remote Token +Deployed TestInterchainTokenStandard to 0xb2A2AFE56A954c6079e35B6cB7909C9EC2A47D22 + 37) "before all" hook for "Should revert if command is already executed by gateway" + Express Receive Remote Token with Data +Deployed TestInterchainExecutable to 0xd726F1c8CFC9EB2928E390c4fAaeBe71B1921B03 +Deployed TestInterchainTokenStandard to 0x448DF94110105C527083894BD5749B0d40d790F4 + 38) Should be able to receive lock_unlock token + 39) Should be able to receive native_interchain token +Deployed TestInterchainTokenStandard to 0xEd23156eA19623e8E36A2bcB1eC30Fe92dCbBF92 + 40) Should be able to receive mint_burn token +Deployed TestFeeOnTransferToken to 0x7a7A6422eDD5ca7C59717Bc2aF89796a17d633bB + 41) Should be able to receive lock_unlock_with_fee token + Flow Limits +Deployed TestInterchainTokenStandard to 0x26cd0706C2F8cC5A3202c71615B668e56Eb9f69d + 42) "before all" hook for "Should be able to send token only if it does not trigger the mint limit" + Flow Limiters +Deployed TestInterchainTokenStandard to 0x61C8E8170bB77730eFA749069Adb8ca6aF6f57e9 + 43) "before all" hook for "Should have only the owner be a flow limiter" + Call contract value + ✔ Should revert on contractCallValue if not called by remote service + ✔ Should revert on contractCallValue if service is paused (8165ms) + ✔ Should revert on invalid message type + ✔ Should revert on invalid express message type +Deployed TestInterchainTokenStandard to 0x752799a3b4e1F8D28aC4149354c17041C286E221 + 44) Should return correct token address and amount + Interchain Token Migration + 45) Should migrate a token succesfully + 46) Should not be able to migrate a token twice + 47) Should not be able to migrate a token as not the owner + Bytecode checks [ @skip-on-coverage ] + ✔ Should preserve the same proxy bytecode for each EVM + + + 48 passing (10m) + 47 failing + + 1) Interchain Token Service + Interchain Token Service Deployment + Should revert on TokenManagerProxy deployment with invalid constructor parameters: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 905562a2-3894-43cf-8c42-c5edd15f1e14] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","data":"0x61010060405234801561001157600080fd5b50604051610f07380380610f078339810160408190526100309161082b565b838383836001600160a01b03841661005b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03841660805260a083905260c0829052600061007e85856106d3565b90506001600160a01b0381166100a75760405163340aafcd60e11b815260040160405180910390fd5b836104c1576000806000806000856001600160a01b031663ee30075b886040518263ffffffff1660e01b81526004016100e091906108b9565b600060405180830381865afa1580156100fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261012591908101906108cc565b9450945094509450945060006080516001600160a01b0316634f9ae6086040518163ffffffff1660e01b8152600401602060405180830381865afa158015610171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101959190610986565b905060006080516001600160a01b031663500f6e146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fd9190610986565b6080516040516323b872dd60e01b81526001600160a01b039182166004820152306024820152604481018690529192508216906323b872dd906064016020604051808303816000875af1158015610258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027c91906109a1565b50604051632e1a7d4d60e01b8152600481018490526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b1580156102bf57600080fd5b505af11580156102d3573d6000803e3d6000fd5b50505050600080836001600160a01b0316634e8e5ce060e01b8d8a8a8a8a6040516024016103059594939291906109c3565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516103439190610a06565b600060405180830381855af49150503d806000811461037e576040519150601f19603f3d011682016040523d82523d6000602084013e610383565b606091505b5091509150816103b1578060405163c226af8b60e01b81526004016103a891906108b9565b60405180910390fd5b6020818101516001600160a01b03811660e05260405190916000916103da918d91859101610a22565b604051602081830303815290604052905060008c6001600160a01b0316639ded06df60e01b8360405160240161041091906108b9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161044e9190610a06565b600060405180830381855af49150503d8060008114610489576040519150601f19603f3d011682016040523d82523d6000602084013e61048e565b606091505b50509050806104b0576040516397905dfb60e01b815260040160405180910390fd5b5050505050505050505050506106c5565b60e051604080516001600160a01b039283166024820152604480820188905282518083039091018152606490910182526020810180516001600160e01b031663082c78e360e21b1790529051600092606092908516916105219190610a06565b600060405180830381855af49150503d806000811461055c576040519150601f19603f3d011682016040523d82523d6000602084013e610561565b606091505b509092509050816105875780604051632d9606db60e11b81526004016103a891906108b9565b60405163f5983e8360e01b81526001600160a01b0384169063f5983e83906105b39087906004016108b9565b602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190610986565b6001600160a01b0390811660e05260405190841690639ded06df60e01b906106209087906024016108b9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161065e9190610a06565b600060405180830381855af49150503d8060008114610699576040519150601f19603f3d011682016040523d82523d6000602084013e61069e565b606091505b505080925050816106c2576040516397905dfb60e01b815260040160405180910390fd5b50505b505050505050505050610a4c565b604051633f0a8fd360e11b8152600481018290526000906001600160a01b03841690637e151fa690602401602060405180830381865afa15801561071b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f9190610986565b9392505050565b80516001600160a01b038116811461075d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561079357818101518382015260200161077b565b50506000910152565b600082601f8301126107ad57600080fd5b8151602083016000806001600160401b038411156107cd576107cd610762565b50604051601f19601f85018116603f011681018181106001600160401b03821117156107fb576107fb610762565b60405283815290508082840187101561081357600080fd5b610821846020830185610778565b9695505050505050565b6000806000806080858703121561084157600080fd5b61084a85610746565b60208601516040870151606088015192965090945092506001600160401b0381111561087557600080fd5b6108818782880161079c565b91505092959194509250565b600081518084526108a5816020860160208601610778565b601f01601f19169290920160200192915050565b60208152600061073f602083018461088d565b600080600080600060a086880312156108e457600080fd5b85516001600160401b038111156108fa57600080fd5b6109068882890161079c565b602088015190965090506001600160401b0381111561092457600080fd5b6109308882890161079c565b604088015190955090506001600160401b0381111561094e57600080fd5b61095a8882890161079c565b935050606086015160ff8116811461097157600080fd5b60809690960151949793965091949392915050565b60006020828403121561099857600080fd5b61073f82610746565b6000602082840312156109b357600080fd5b8151801515811461073f57600080fd5b85815260a0602082015260006109dc60a083018761088d565b82810360408401526109ee818761088d565b60ff9590951660608401525050608001529392505050565b60008251610a18818460208701610778565b9190910192915050565b604081526000610a35604083018561088d565b905060018060a01b03831660208301529392505050565b60805160a05160c05160e051610467610aa0600039600081816101e601526102720152600061012801526000818161019d0152818161023a01526102c501526000818160ca01526102a401526104676000f3fe60806040526004361061007f5760003560e01c80635c60da1b1161004e5780635c60da1b146101bf5780639d76ea58146101d45780639ded06df14610208578063d4ae3c421461022757610086565b806309c6bed9146100b8578063129d8188146101165780634788cabf146101585780634fdf7cb51461018b57610086565b3661008657005b600061009061029d565b90503660008037600080366000845af43d6000803e8080156100b1573d6000f35b3d6000fd5b005b3480156100c457600080fd5b506100ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561012257600080fd5b5061014a7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161010d565b34801561016457600080fd5b507fde5fa9c0ef6d18cdb8ef4461bfb45c94dc915629a2a1f311fb33838aff95436f61014a565b34801561019757600080fd5b5061014a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101cb57600080fd5b506100ec61029d565b3480156101e057600080fd5b506100ec7f000000000000000000000000000000000000000000000000000000000000000081565b34801561021457600080fd5b506100b6610223366004610387565b5050565b34801561023357600080fd5b50604080517f0000000000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201520161010d565b60006102e97f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006102ee565b905090565b6040517f7e151fa60000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff841690637e151fa690602401602060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038091906103fb565b9392505050565b6000806020838503121561039a57600080fd5b823567ffffffffffffffff8111156103b157600080fd5b8301601f810185136103c257600080fd5b803567ffffffffffffffff8111156103d957600080fd5b8560208284010111156103eb57600080fd5b6020919091019590945092505050565b60006020828403121561040d57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461038057600080fdfea26469706673582212209788ef99a2bfdbd83c296713575c465567eb742ac0d11306a7fa3ca20f20b81264736f6c634300081b0033000000000000000000000000602ea66271618eb9f9b8d781daae7d955e0c148b00000000000000000000000000000000000000000000000000000000000000045cff84611ee274e284a1ef1aa62eabcf96fae844e7564bed4e8554455241fd410000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000003db0338922cde54a66e0c585011249915d32d2250000000000000000000000000000000000000000000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 905562a2-3894-43cf-8c42-c5edd15f1e14] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0x97905dfb"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 2) Interchain Token Service + Deploy and Register remote Interchain Token + "before all" hook for "Should revert on remote interchain token deployment if paused": + TypeError: service.interchainTokenAddress is not a function + at Context. (test/InterchainTokenService.js:736:48) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 3) Interchain Token Service + Receive Remote Interchain Token Deployment + Should be able to receive a remote interchain token deployment with a mint/burn token manager with empty minter and operator: + TypeError: service.interchainTokenAddress is not a function + at Context. (test/InterchainTokenService.js:797:48) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 4) Interchain Token Service + Initialize remote custom token manager deployment + "before all" hook for "Should initialize a remote custom token manager deployment": + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 31dfde05-148a-4225-a4c3-00c0933c0346] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658f919e0998db75a4c1f80f5751042d6e2fdc31a67da694aafd479bdb17cda9bf9000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005c3de9a91cdc324f268f0bec76891953d1b1ae2278349b79775c38da688ae6d55000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b02fca4fd6c591c82d212e465010b85e774cb502000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 31dfde05-148a-4225-a4c3-00c0933c0346] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 5) Interchain Token Service + Receive Remote Token Manager Deployment + Should be able to receive a remote lock/unlock token manager deployment: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: daac2bda-a04d-4462-85eb-7782c6cd93e7] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658a2f49febaca5bf132d0ed2ea46fdfe0d0c9d7740d9da3ca4f68c9ac67da66df1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000056e5e74accd834b29f8ed7b407236054c4195672d880e76c37f08a5b5583fda5e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b5e1b586606d96ff47db6895ad41c19bbe1ce9d7000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: daac2bda-a04d-4462-85eb-7782c6cd93e7] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 6) Interchain Token Service + Receive Remote Token Manager Deployment + Should be able to receive a remote mint/burn token manager deployment: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 1f463237-afd4-4b19-8a2c-1fe7bd1db132] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606589296714b596f7a98366d666a476fa5c6a30fe8625c4160a30a29725f8dbe275b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005c48b830facd2bd297f7c3b7003b5c5d41d684b5edac7d7d0b3961909356b6def000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144035eda37bdfe7c4e659687591a0cdeffb9ff948000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 1f463237-afd4-4b19-8a2c-1fe7bd1db132] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 7) Interchain Token Service + Send Token + "before all" hook for "Should be able to initiate an interchain token transfer for lockUnlockFee with a normal ERC20 token": + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 06dfc5bd-ba72-4958-b5e1-b2b7ee942064] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x4916065830887c1400b01025c2469670512332a473b361b2f898d8d4fb62ef40c9e24fc4000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000054ea35c0aaae7a4b44bdb32f76326b810cb7fda708f363c3b9f81d1b341b19b28000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b3787d6810d6ab8e68a2448ae377ae188edcdab7000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 06dfc5bd-ba72-4958-b5e1-b2b7ee942064] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 8) Interchain Token Service + Receive Remote Tokens + Should be able to receive lock/unlock token: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 575ada96-1214-41bd-b430-be31c4563079] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658879a8efc82b2a124ab2c76ec11a15e3cba17f0e5a5ded793e0ebd66a41a162f9000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005fe6b96889e77f9e03ba345ed254f6e611c1c73e6fcc18ed50d6518fad2fc01d9000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143ade29c269197a1e4673c3e5b667c4b29e7b5404000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 575ada96-1214-41bd-b430-be31c4563079] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 9) Interchain Token Service + Receive Remote Tokens + Should be able to receive mint/burn token: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 5c5d6e2a-c586-4a58-bdb7-25adc8c0e018] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606586f678488727c050579bb550d9af6272cf1fb2be793e155237633d0d69a16609d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000592853d60bc755102869fa44909befc99c65c71e2866a68ed14bce6166a910191000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014951e93c1e0206f892dea7ecf881df2a03a876620000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 5c5d6e2a-c586-4a58-bdb7-25adc8c0e018] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 10) Interchain Token Service + Receive Remote Tokens + Should be able to receive lock/unlock with fee on transfer token: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: f5d52e7d-1790-406d-b57d-00aa76c459da] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606589c989166a3a376a2a017390bcc77b20e856aa2fdaa327eab95a105bab8b873f0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000578d001c477686187109fc753466d16b388cdc5df229140ec65711c9d6bedbd1d000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014dfe64b5a249a6de6a9c5a9cdf7d1c11438f3404b000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: f5d52e7d-1790-406d-b57d-00aa76c459da] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 11) Interchain Token Service + Receive Remote Tokens + Should be able to receive lock/unlock with fee on transfer token with normal ERC20 token: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 05ebe582-b822-4633-b852-58f3b2b0f191] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658ca9af8a668218465986ef04481066e23e29fc7f96605324962e2514e58ad69a8000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005f23b7c697bec5689560ec7187dae081b153f2a6c2b9aa2f42f27fe2f5d198c55000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014208e94081b32e87097b7dde9b0dce643691b4351000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 05ebe582-b822-4633-b852-58f3b2b0f191] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 12) Interchain Token Service + Send Token With Data + "before all" hook for "Should initiate an interchain token transfer via the interchainTransfer standard contract call & express call [lockUnlock]": + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: bd84551f-4542-41aa-a238-d9b4b76c0edc] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606586a3ee923b18394d3fc1e174c73a242cd4dc1be9f01d6dfbd4846390a2b4f71aa000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005e2e64947067ebfa1e0d9177a86fddae6d0d09e375238c54c2f4bd70d0d4dde77000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000146bf9c73953166817ce4a0cc0c8a3ded8bd790837000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: bd84551f-4542-41aa-a238-d9b4b76c0edc] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 13) Interchain Token Service + Receive Remote Token with Data + Should be able to receive lock/unlock token: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 53ffbe04-46b4-4748-8dfe-3d16d05a5a87] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606582298302ee09432a9583fbc035dfe522ba227d03d60038065af1cb4edb422ada3000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000577b76e88d8f6f27ade01a441a75f68008b3a7f19f1a8956fbefcb907781493fd000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014dcd4fc85dcd6050331dda149efa70c165b47c7df000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 53ffbe04-46b4-4748-8dfe-3d16d05a5a87] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 14) Interchain Token Service + Receive Remote Token with Data + Should be able to receive lock/unlock token with empty data and not call destination contract: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 8e162eb8-2dae-4957-b8fd-f2c2532ff2d1] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606585cc4cfd19082080aca3901da0db5e08d0742bb289943f4c60f2721e47cd95b99000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000056bbc6bf464a9981954605ec9d8ef904941707ed968c43fb80eb6f7f0dbea60c3000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014814d379c35ac00b5c5faa72123d4b2d8a15999de000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 8e162eb8-2dae-4957-b8fd-f2c2532ff2d1] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 15) Interchain Token Service + Receive Remote Token with Data + Should be able to receive mint/burn token: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: fd957681-e93e-4dd6-bcfe-f58949cfdb90] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658459bf928c8098bfd933437ac4b06510c0cfe54b004cd501de91d275ceb91bca1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005e213e41bbd4af7977d06cccade71ca02f2704141f54ebf0b730bfccd69354d65000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014c691b34f449a5e5dd22306ad241d2b2e25fe90c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: fd957681-e93e-4dd6-bcfe-f58949cfdb90] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 16) Interchain Token Service + Receive Remote Token with Data + Should be able to receive mint/burn from token: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: f3c67ab4-13ac-46ea-aa83-70712b098ed0] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658e883d991e893ebe8a7b6aedd18f980c1ad83aa0c9bc5bd75ec57ac7426950cd3000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005635c8ef89318328781d5ac31872a0935684bc966ccf18cb9d6719d260c7b5d16000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000148844a0d5c40ae955326c4b7826f0e768f4a32bb8000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: f3c67ab4-13ac-46ea-aa83-70712b098ed0] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 17) Interchain Token Service + Receive Remote Token with Data + Should be able to receive lock/unlock with fee on transfer token: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 96cc9f92-dd19-493c-996e-d679c2fadc70] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x4916065845901c75351f7fae2f94a8425a3f5ac73f3f2cc63325218e11aed0feba3c4a33000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005db8c4c76a4b789d898734748d249acf2c3e1b9db8927c464c13b6d645d96c6bf000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014c83180eca96b02b8d9f4383052ab6b7ae7a5c8d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 96cc9f92-dd19-493c-996e-d679c2fadc70] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 18) Interchain Token Service + Receive Remote Token with Data + Should revert if token handler transfer token from fails: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 9e7f2971-d18f-4f71-b9f7-7fdccb2a59fe] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606587bdf60d719c942ed2d143c3b36744928b9b386f71747e06132b971ac0ba55798000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000523ddb9676dda173e63939175c3a580218a2892c9b533a8f2ec8d345684ba106f000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014373e3486214e401582e50599360857525b47c9b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 9e7f2971-d18f-4f71-b9f7-7fdccb2a59fe] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 19) Interchain Token Service + Receive Remote Token with Data + Should revert if execute with interchain token fails: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 5ba997f3-9c7f-4865-a682-12d71a965908] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x4916065821d327397c84402d5ab7e2e6aa417c83e1010c8630c7acafc92f9a25a46bb6db000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005c152814a607037a47cb65c40b939e7fc8184f8a8604bbb3ee14851e07a48ca6b000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143eaa43c517b6418c8b0a7ea0b5ed64a0b9ee13c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 5ba997f3-9c7f-4865-a682-12d71a965908] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 20) Interchain Token Service + Receive Remote Token with Data + Should receive a message wrapped with RECEIVE_FROM_HUB and has MESSAGE_TYPE_DEPLOY_TOKEN_MANAGER type.: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 6e44d416-f2c2-4743-bea1-5c725950a4ce] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658bac9cea25f7e4f6f51ef21f7ac6842ca51426021f0239e8d46345e58f8a84721000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000b68756220636861696e2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000053f28672dc411c64eb27d5a7c295a9d5c941d0c755bc9b824930f7095e95db489000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014bdb6782dac4521be6ddb8593e895f22eb48d2de9000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 6e44d416-f2c2-4743-bea1-5c725950a4ce] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 21) Interchain Token Service + Send Interchain Token + Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [mintBurn]: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: db25fd50-78a7-46de-9d15-3c77f21f95b9] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658404c65c46035e25223162f4bdb04c1947854ae1498f6f6d70549f18a2dd11ad7000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005cf3e8d3f1c2413d34fede7ea3b9f162d17390d0bc20dc36ae2fec11209aca40b000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001490b8566d98d847fd48bf83cbc5489394f502b445000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: db25fd50-78a7-46de-9d15-3c77f21f95b9] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 22) Interchain Token Service + Send Interchain Token + Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [mintBurnFrom]: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 055a9348-5bb5-4ebb-a095-2b73ec29a1c1] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658a0c3e05a9027d8fd603a2bb401fcb82767e1eb642b0a46299e96268b6ae45983000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005c595455001e61c6cc863a3ce85c4169abc87828910b10ac406766901c88335e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001424fbde19491e3fdd9c2c43c1f898e19fccd6927a000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 055a9348-5bb5-4ebb-a095-2b73ec29a1c1] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 23) Interchain Token Service + Send Interchain Token + Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [lockUnlockFee]: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 6d7e5fec-49df-4311-ba8b-8bf265798020] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606583600c7be3a0a0c66aab471cbacc3cdd3ecf8dfd5aa5cf68f8c62b8a63e479b84000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000551ba3df5925aec241f05fcd8b96603990b4c1e9c42a0bd9fc5d55c0375f11c1a000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000148ba9b2a89a1f149e063f53f42a799ac90f8d541c000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 6d7e5fec-49df-4311-ba8b-8bf265798020] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 24) Interchain Token Service + Send Interchain Token + Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [lockUnlock]: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 43235e24-aee2-452b-a939-a1b51f9b2921] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x4916065896e99e55359f9bf0540886912f83e2a7ec223ff41b9703f348a514bcda070417000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000595fffe164f59ec85674474305bd6d20aa7e7fa64a11a1c5306ef52b2d26850e4000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ad138600464117275b3a80fa3b35778bf1f921ec000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 43235e24-aee2-452b-a939-a1b51f9b2921] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 25) Interchain Token Service + Send Interchain Token + Should be able to initiate an interchain token transfer via interchainTransfer [mintBurn] without native gas: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 75f18ee9-05ca-42c8-9212-4ebb91d9b792] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606589a0794a7678faf983b6ef7ba70e76c20cc287cbbed4812868acd57ce0e7c05c3000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000058387157a7e908d3fbe092b73cc140cea59e44e76a248f6971c240b6a21accd08000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ff7b446bb64f9a3cfb301e00062732f8da9d01e7000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 75f18ee9-05ca-42c8-9212-4ebb91d9b792] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 26) Interchain Token Service + Send Interchain Token + Should be able to initiate an interchain token transfer via interchainTransfer [mintBurnFrom] without native gas: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 0d17f604-62ca-4b6d-8f6b-6c5318b6253d] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658db13437bafc18608ba4100c77349a8232d99f8b4e27de78ec8b12a1da9cface0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000050d844a8e93259434ed48a0fe4257f88a3622415d6ab637e90105aafec6cfa1eb000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001484034b6cf3c1197a031f179ef66a9e68f14bb8c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 0d17f604-62ca-4b6d-8f6b-6c5318b6253d] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 27) Interchain Token Service + Send Interchain Token + Should be able to initiate an interchain token transfer via interchainTransfer [lockUnlockFee] without native gas: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 0943bc45-a815-4462-b9c4-ede54cb3a704] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658fe827d9a4de9aae4acd7488dbbcfb4f8db50fb635193914cf576fc7d966b9480000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005d11e67e973db50f1d87f36d73c610f135fd8a86ded83f58427aac976b002dc00000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001446e0ad69e7ed13bff651b24b43e7b48232835f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 0943bc45-a815-4462-b9c4-ede54cb3a704] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 28) Interchain Token Service + Send Interchain Token + Should be able to initiate an interchain token transfer via interchainTransfer [lockUnlock] without native gas: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: a1e9c971-ba77-4686-885b-9d1c5eff9d1b] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x4916065861441be1773517cff6462e88f73f3bfc1482d7eedaef03249aec5a9a0253c956000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000572d33813603baf54266e1acefa1e9fafa355fdda8ccc21d9a4509650a587a5b2000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014fca52a9aa40c24959dd5918e13afd9d507ecc8ce000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: a1e9c971-ba77-4686-885b-9d1c5eff9d1b] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 29) Interchain Token Service + Send Interchain Token + Should be able to initiate an interchain token transfer using interchainTransferFrom with max possible allowance: + TypeError: Cannot read properties of undefined (reading 'toHexString') + at isHexable (node_modules/@ethersproject/bytes/src.ts/index.ts:58:21) + at arrayify (node_modules/@ethersproject/bytes/src.ts/index.ts:115:9) + at FixedBytesCoder.encode (node_modules/@ethersproject/abi/src.ts/coders/fixed-bytes.ts:22:28) + at /Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@ethersproject/abi/src.ts/coders/array.ts:71:19 + at Array.forEach () + at pack (node_modules/@ethersproject/abi/src.ts/coders/array.ts:54:12) + at TupleCoder.encode (node_modules/@ethersproject/abi/src.ts/coders/tuple.ts:54:20) + at AbiCoder.encode (node_modules/@ethersproject/abi/src.ts/abi-coder.ts:111:15) + at encodeInterchainTransferMessage (test/utils.js:200:28) + at Context. (test/InterchainTokenService.js:2053:17) + + 30) Interchain Token Service + Send Interchain Token + Should revert using interchainTransferFrom with zero amount: + TypeError: Cannot read properties of undefined (reading 'approve') + at Context. (test/InterchainTokenService.js:2081:25) + at processImmediate (node:internal/timers:511:21) + + 31) Interchain Token Service + Send Interchain Token With Data + Should be able to initiate an interchain token transfer [lockUnlock]: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 44b77538-e163-4ebf-9b48-0004b620a7bc] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658659c687f018fe96a23905f73f5bc0771a2c666bfbba62cf31555f716c2b87fcb000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005ce4f063281c72258c38235907752f7a362a859c32cdfed1e6ba910b1a2e77dc1000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001422958b6aa8d0b01f04a4baff4f4a535f5e64622e000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 44b77538-e163-4ebf-9b48-0004b620a7bc] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 32) Interchain Token Service + Send Interchain Token With Data + Should be able to initiate an interchain token transfer [mintBurn]: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: e2fd9aef-0aaf-47a5-94c1-0dddf7895e81] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606588a1cca49eaf6a7a0aef4bf1cfcc194218404752d44595d989fd95004d1b9e2f0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005c6b02ce6c0e55241ed9f350938d1be622d353941c04c7ffc0a96781669235f71000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014badf703d3e9f55778c6b23c03597c073e18ecf7e000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: e2fd9aef-0aaf-47a5-94c1-0dddf7895e81] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 33) Interchain Token Service + Send Interchain Token With Data + Should be able to initiate an interchain token transfer [mintBurnFrom]: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 2430afb2-a184-41df-bd34-fa306e6b3808] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606582d8a88df65148fe26a05ce9b6f4961fbfcb87aed0ad86dd8fe514b36952d102d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000055900895f635bf547e4f829d802f8db03b55fd8677ec1c336bea8789438c8f76b000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001450f778d3ed1b91bd2c5b66575fd339400bac9672000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 2430afb2-a184-41df-bd34-fa306e6b3808] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 34) Interchain Token Service + Send Interchain Token With Data + Should be able to initiate an interchain token transfer [lockUnlockFee]: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: f5f015c8-9339-48a3-a14d-d5ef4026e9f7] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658264e23d5c5471d47cf2277565c04def0838b3c71766c21016cc4d73fa9cc8a1a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005710e78296ca356aa0d53b0674642309e6cd6a7dea74bf6482978015a364eae24000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141be6841d4a99e627de7721173bfed9b8640b28a6000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: f5f015c8-9339-48a3-a14d-d5ef4026e9f7] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 35) Interchain Token Service + Express Execute + "before all" hook for "Should revert on executeWithInterchainToken when not called by the service": + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 0a62257b-d2e4-4d79-96a0-b2a3445bbaf9] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658a88e9ccd1bf51fdf41b9e32ae1eef2ca2367167efdde858a13b191e27d10e364000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005764bbee2ad06527f62ec804dbc8d9e6a12c6e8b2403e9c29c1cb4faa2075f502000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145131d2fbb38d29901b650195b8fd2f72281a508f000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 0a62257b-d2e4-4d79-96a0-b2a3445bbaf9] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 36) Interchain Token Service + Interchain Executable + "before all" hook for "Should revert on executeWithInterchainToken when not called by the service": + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: f266e24f-b0ae-4a8d-857a-0718bce2f05a] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606585c41a331a90e6e89867ecfd58fa7f1ae3e2d0738f8c0fe40e9883acf8728f1ac000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000052ee838b6cef3559610be96a0061d7fb224f47d3fb2f6635b5efa6bd8282a592e000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001402aa74d60886931a448ee67b11182c16bf00236f000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: f266e24f-b0ae-4a8d-857a-0718bce2f05a] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 37) Interchain Token Service + Express Receive Remote Token + "before all" hook for "Should revert if command is already executed by gateway": + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 1ccc05f9-cd26-4ad9-88dd-7367c9d7f0c1] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658e7f39e931f07bc27ddb3a6e13bf76b5822e9570b70ab30995c62abc02534c714000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005d3958e7309ac7469789a04843ae092a3079f26828ae1faadac2c3a26708eb12e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b2a2afe56a954c6079e35b6cb7909c9ec2a47d22000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 1ccc05f9-cd26-4ad9-88dd-7367c9d7f0c1] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 38) Interchain Token Service + Express Receive Remote Token with Data + Should be able to receive lock_unlock token: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 236a8a9c-4993-4e15-bfcb-6853a83fcca3] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658732e4440cb42da2a5b47286dc796928f0fd232676bee2f70497e562d2d51f95a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000057224d83c73f9d499de8c794678c0912d46e24a406ccc19be39ffea88f30dd36b000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014448df94110105c527083894bd5749b0d40d790f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 236a8a9c-4993-4e15-bfcb-6853a83fcca3] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 39) Interchain Token Service + Express Receive Remote Token with Data + Should be able to receive native_interchain token: + TypeError: service.interchainTokenAddress is not a function + at Object.deployNewInterchainToken [as interchainToken] (test/InterchainTokenService.js:236:44) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + at Context. (test/InterchainTokenService.js:2578:40) + + 40) Interchain Token Service + Express Receive Remote Token with Data + Should be able to receive mint_burn token: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 658d2d7f-836d-4503-a5d6-827f19fcd88f] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606582e09883225484fcb56c2d46f7001b4cda7c98950f2cceac377c7a9524a4e938c000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000058574827af729251a5c62489ecd547bd60fc970328916157912a26226fe954793000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ed23156ea19623e8e36a2bcb1ec30fe92dcbbf92000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 658d2d7f-836d-4503-a5d6-827f19fcd88f] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 41) Interchain Token Service + Express Receive Remote Token with Data + Should be able to receive lock_unlock_with_fee token: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 4cc715f1-8e32-4db5-a62b-e02b7c3eecc7] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606580fe211fecad7bcf78eb8003354873340e93de84ada1bf0cd89b01a5b711aee72000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005bd274a1d53441319cda89b2a23a865958a17c8d625e44086a5c16e8d1f0bc827000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000147a7a6422edd5ca7c59717bc2af89796a17d633bb000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 4cc715f1-8e32-4db5-a62b-e02b7c3eecc7] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 42) Interchain Token Service + Flow Limits + "before all" hook for "Should be able to send token only if it does not trigger the mint limit": + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: c6d17be8-9b3b-47cd-b99e-c8cbb271dd04] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x4916065812b39537984b07b23669ef8f6e55130bf2f55951880c8ddac184bae7d5a35b2a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000054fa43dd556c49f9db6949db696d778f93adb2c6de587cefb3a86a21b61ed71f5000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001426cd0706c2f8cc5a3202c71615b668e56eb9f69d000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: c6d17be8-9b3b-47cd-b99e-c8cbb271dd04] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 43) Interchain Token Service + Flow Limiters + "before all" hook for "Should have only the owner be a flow limiter": + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 4ee9624d-5276-486b-bd72-d71acfa20dbf] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658dabf8484d02750235c810b98c17e483959e0d17e44f4fd749b4bb8132fa6775a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005a6b8498c1378f84858ea34a77fbca3a3e7fd752ea17559221fe380604a0519c9000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001461c8e8170bb77730efa749069adb8ca6af6f57e9000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 4ee9624d-5276-486b-bd72-d71acfa20dbf] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 44) Interchain Token Service + Call contract value + Should return correct token address and amount: + Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 12f9affe-a951-48d0-8fb1-d218926f61a1] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658d59bc4ecd95fecf1666f35d5041cf69c34d39f75f6ea8d181fbc8363422dcb6e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000058fda4c5a4a81da8b736cb24dcc94771933189c4f7b6327399056f8f81051a062000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014752799a3b4e1f8d28ac4149354c17041c286e221000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 12f9affe-a951-48d0-8fb1-d218926f61a1] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) + at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) + at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) + at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) + at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) + at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) + at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) + at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + + 45) Interchain Token Service + Interchain Token Migration + Should migrate a token succesfully: + TypeError: service.interchainTokenAddress is not a function + at Object.deployNewInterchainToken [as interchainToken] (test/InterchainTokenService.js:236:44) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + at Context. (test/InterchainTokenService.js:2943:52) + + 46) Interchain Token Service + Interchain Token Migration + Should not be able to migrate a token twice: + TypeError: service.interchainTokenAddress is not a function + at Object.deployNewInterchainToken [as interchainToken] (test/InterchainTokenService.js:236:44) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + at Context. (test/InterchainTokenService.js:2957:52) + + 47) Interchain Token Service + Interchain Token Migration + Should not be able to migrate a token as not the owner: + TypeError: service.interchainTokenAddress is not a function + at Object.deployNewInterchainToken [as interchainToken] (test/InterchainTokenService.js:236:44) + at processTicksAndRejections (node:internal/process/task_queues:105:5) + at Context. (test/InterchainTokenService.js:2976:35) + + + + +Your solidity settings have viaIR enabled, which is not fully supported yet. You can still use Hardhat, but some features, like stack traces, might not work correctly. + +Learn more at https://hardhat.org/solc-viair +~/P/c/h/interchain-token-service on  hedera-its [!] via ⬢ v23.8.0 took 10m24s ❯ diff --git a/scripts/deploy.js b/scripts/deploy.js index 9a53ea29..dbb43c1d 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -54,6 +54,8 @@ async function deployContract(wallet, contractName, args = [], additionalLibrari }); const contract = await factory.deploy(...args).then((d) => d.deployed()); + console.log(`Deployed ${contractName} to ${contract.address}`); + return contract; } diff --git a/test/InterchainTokenService.js b/test/InterchainTokenService.js index f0bac331..f98181bd 100644 --- a/test/InterchainTokenService.js +++ b/test/InterchainTokenService.js @@ -47,7 +47,7 @@ const { const reportGas = gasReporter('Interchain Token Service'); -describe('Interchain Token Service', () => { +describe.only('Interchain Token Service', () => { let wallet, otherWallet; let service, gateway, gasService, testToken; diff --git a/test/utils.js b/test/utils.js index 6b55e2ab..cd8f6936 100644 --- a/test/utils.js +++ b/test/utils.js @@ -33,6 +33,10 @@ const getGasOptions = () => { return network.config.blockGasLimit ? { gasLimit: network.config.blockGasLimit.toString() } : { gasLimit: 5e6 }; // defaults to 5M gas for revert tests to work correctly }; +const expectNonZeroAddress = (v) => { + return expect(v).to.be.a('string') && v !== ethers.constants.AddressZero && v !== ''; +}; + const expectRevert = async (txFunc, contract, error, args) => { if (network.config.skipRevertTests || contract === undefined) { await expect(txFunc(getGasOptions())).to.be.reverted; From 707e7c11641363b45e2da4440166e53cab67a45f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Fri, 13 Jun 2025 13:35:15 +0200 Subject: [PATCH 09/49] add test checks for token deployment events - add small doc as guide for testing via Hedera localnet --- contracts/hedera/TESTING.md | 3 + test/InterchainTokenFactory.js | 145 ++++++++++++------------- test/InterchainTokenService.js | 19 +--- test/InterchainTokenServiceFullFlow.js | 69 +++++++++--- test/utils.js | 33 ++++++ 5 files changed, 162 insertions(+), 107 deletions(-) create mode 100644 contracts/hedera/TESTING.md diff --git a/contracts/hedera/TESTING.md b/contracts/hedera/TESTING.md new file mode 100644 index 00000000..3431f6f8 --- /dev/null +++ b/contracts/hedera/TESTING.md @@ -0,0 +1,3 @@ +# Local Hedera devnet for testing + +Follow [instructions for setting up a local Hedera devnet](https://github.com/hiero-ledger/hiero-local-node). It is recommended to install the cli tool and run `hedera start --dev --verbose=trace --enable-block-node`. \ No newline at end of file diff --git a/test/InterchainTokenFactory.js b/test/InterchainTokenFactory.js index 09ea8651..35d38eb9 100644 --- a/test/InterchainTokenFactory.js +++ b/test/InterchainTokenFactory.js @@ -17,6 +17,8 @@ const { encodeDeployInterchainTokenMessage, encodeSendHubMessage, encodeLinkTokenMessage, + expectNonZeroAddress, + validateTokenManagerParams, } = require('./utils'); const { NATIVE_INTERCHAIN_TOKEN, @@ -239,15 +241,19 @@ describe('InterchainTokenFactory', () => { it('Should register a token if the mint amount is zero', async () => { const salt = keccak256('0x1234'); tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); - const tokenAddress = await service.interchainTokenAddress(tokenId); - const params = defaultAbiCoder.encode(['bytes', 'address'], [minter, tokenAddress]); - const tokenManager = await getContractAt('TokenManager', await service.tokenManagerAddress(tokenId), wallet); + const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, 0, minter)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, tokenAddress, minter, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, minter, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, tokenManager.address, NATIVE_INTERCHAIN_TOKEN, params); + .withArgs( + tokenId, + expectedTokenManagerAddress, + NATIVE_INTERCHAIN_TOKEN, + validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', minter, name, symbol, decimals), + ); await checkRoles(tokenManager, minter); }); @@ -267,15 +273,19 @@ describe('InterchainTokenFactory', () => { it('Should register a token if the mint amount is greater than zero and the minter is the zero address', async () => { const salt = keccak256('0x12345678'); tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); - const tokenAddress = await service.interchainTokenAddress(tokenId); - const params = defaultAbiCoder.encode(['bytes', 'address'], [tokenFactory.address, tokenAddress]); - const tokenManager = await getContractAt('TokenManager', await service.tokenManagerAddress(tokenId), wallet); + const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, mintAmount, AddressZero)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, tokenAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, tokenManager.address, NATIVE_INTERCHAIN_TOKEN, params); + .withArgs( + tokenId, + expectedTokenManagerAddress, + NATIVE_INTERCHAIN_TOKEN, + validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), + ); await checkRoles(tokenManager, AddressZero); }); @@ -283,35 +293,28 @@ describe('InterchainTokenFactory', () => { it('Should register a token', async () => { const salt = keccak256('0x'); tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); - const tokenAddress = await service.interchainTokenAddress(tokenId); - const params = defaultAbiCoder.encode(['bytes', 'address'], [tokenFactory.address, tokenAddress]); - const tokenManager = await getContractAt('TokenManager', await service.tokenManagerAddress(tokenId), wallet); - const token = await getContractAt('InterchainToken', tokenAddress, wallet); + const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, mintAmount, minter)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, tokenAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, tokenManager.address, NATIVE_INTERCHAIN_TOKEN, params) - .and.to.emit(token, 'Transfer') - .withArgs(AddressZero, wallet.address, mintAmount) - .and.to.emit(tokenManager, 'RolesAdded') - .withArgs(minter, 1 << FLOW_LIMITER_ROLE) - .and.to.emit(tokenManager, 'RolesAdded') - .withArgs(minter, 1 << OPERATOR_ROLE) - .and.to.emit(token, 'RolesAdded') - .withArgs(minter, 1 << MINTER_ROLE) - .and.to.emit(token, 'RolesRemoved') - .withArgs(tokenFactory.address, 1 << MINTER_ROLE) - .and.to.emit(tokenManager, 'RolesRemoved') - .withArgs(tokenFactory.address, 1 << OPERATOR_ROLE) - .and.to.emit(tokenManager, 'RolesRemoved') - .withArgs(tokenFactory.address, 1 << FLOW_LIMITER_ROLE); + .withArgs( + tokenId, + expectedTokenManagerAddress, + NATIVE_INTERCHAIN_TOKEN, + validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), + ); + + // Get token address from the deployed token manager + const tokenAddress = await tokenManager.tokenAddress(); + const token = await getContractAt('InterchainToken', tokenAddress, wallet); expect(await token.balanceOf(tokenFactory.address)).to.equal(0); expect(await token.balanceOf(wallet.address)).to.equal(mintAmount); - await checkRoles(tokenManager, minter); + await checkRoles(tokenManager, AddressZero); }); it('Should initiate a remote interchain token deployment with the same minter', async () => { @@ -320,34 +323,19 @@ describe('InterchainTokenFactory', () => { const salt = keccak256('0x12'); tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); - const tokenAddress = await service.interchainTokenAddress(tokenId); - const params = defaultAbiCoder.encode(['bytes', 'address'], [tokenFactory.address, tokenAddress]); - const tokenManager = await getContractAt('TokenManager', await service.tokenManagerAddress(tokenId), wallet); - const token = await getContractAt('InterchainToken', tokenAddress, wallet); + const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, mintAmount, wallet.address)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, tokenAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, tokenManager.address, NATIVE_INTERCHAIN_TOKEN, params) - .and.to.emit(token, 'Transfer') - .withArgs(AddressZero, wallet.address, mintAmount) - .and.to.emit(token, 'RolesAdded') - .withArgs(wallet.address, 1 << MINTER_ROLE) - .and.to.emit(tokenManager, 'RolesAdded') - .withArgs(wallet.address, 1 << OPERATOR_ROLE) - .and.to.emit(tokenManager, 'RolesAdded') - .withArgs(wallet.address, 1 << FLOW_LIMITER_ROLE) - .and.to.emit(token, 'RolesRemoved') - .withArgs(tokenFactory.address, 1 << MINTER_ROLE) - .and.to.emit(tokenManager, 'RolesRemoved') - .withArgs(tokenFactory.address, 1 << OPERATOR_ROLE) - .and.to.emit(tokenManager, 'RolesRemoved') - .withArgs(tokenFactory.address, 1 << FLOW_LIMITER_ROLE) - .and.to.emit(token, 'RolesRemoved') - .withArgs(service.address, 1 << MINTER_ROLE) - .and.to.emit(token, 'RolesAdded') - .withArgs(tokenManager.address, 1 << MINTER_ROLE); + .withArgs( + tokenId, + expectedTokenManagerAddress, + NATIVE_INTERCHAIN_TOKEN, + validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), + ); const { payload, payloadHash } = encodeSendHubMessage( destinationChain, @@ -507,30 +495,22 @@ describe('InterchainTokenFactory', () => { const salt = keccak256('0x1245'); tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); - const tokenAddress = await service.interchainTokenAddress(tokenId); - const params = defaultAbiCoder.encode(['bytes', 'address'], [tokenFactory.address, tokenAddress]); - const tokenManager = await getContractAt('TokenManager', await service.tokenManagerAddress(tokenId), wallet); - const token = await getContractAt('InterchainToken', tokenAddress, wallet); + const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, mintAmount, wallet.address)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, tokenAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, tokenManager.address, NATIVE_INTERCHAIN_TOKEN, params) - .and.to.emit(token, 'Transfer') - .withArgs(AddressZero, wallet.address, mintAmount) - .and.to.emit(token, 'RolesAdded') - .withArgs(wallet.address, 1 << MINTER_ROLE) - .and.to.emit(tokenManager, 'RolesAdded') - .withArgs(wallet.address, 1 << OPERATOR_ROLE) - .and.to.emit(tokenManager, 'RolesAdded') - .withArgs(wallet.address, 1 << FLOW_LIMITER_ROLE) - .and.to.emit(token, 'RolesRemoved') - .withArgs(tokenFactory.address, 1 << MINTER_ROLE) - .and.to.emit(tokenManager, 'RolesRemoved') - .withArgs(tokenFactory.address, 1 << OPERATOR_ROLE) - .and.to.emit(tokenManager, 'RolesRemoved') - .withArgs(tokenFactory.address, 1 << FLOW_LIMITER_ROLE); + .withArgs( + tokenId, + expectedTokenManagerAddress, + NATIVE_INTERCHAIN_TOKEN, + validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), + ); + + // Get token address and check roles/transfers + // const tokenAddress = await tokenManager.tokenAddress(); const { payload, payloadHash } = encodeSendHubMessage( destinationChain, @@ -639,7 +619,7 @@ describe('InterchainTokenFactory', () => { ); }); - it('Should not be able to migrate a token deployed after this upgrade', async () => { + it.skip('Should not be able to migrate a token deployed after this upgrade', async () => { const salt = getRandomBytes32(); const name = 'migrated token'; const symbol = 'MT'; @@ -647,7 +627,9 @@ describe('InterchainTokenFactory', () => { const tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); await tokenFactory.deployInterchainToken(salt, name, symbol, decimals, 0, wallet.address).then((tx) => tx.wait()); - const tokenAddress = await service.interchainTokenAddress(tokenId); + const tokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); + const tokenAddress = await tokenManager.tokenAddress(); const token = await getContractAt('InterchainToken', tokenAddress, wallet); await expectRevert((gasOptions) => service.migrateInterchainToken(tokenId, { gasOptions }), token, 'MissingRole', [ @@ -833,7 +815,14 @@ describe('InterchainTokenFactory', () => { const tx = tokenFactory.registerCustomToken(salt, token.address, MINT_BURN, wallet.address); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - await expect(tx).to.emit(service, 'TokenManagerDeployed').withArgs(tokenId, expectedTokenManagerAddress, MINT_BURN, params); + await expect(tx) + .to.emit(service, 'TokenManagerDeployed') + .withArgs( + tokenId, + expectedTokenManagerAddress, + MINT_BURN, + validateTokenManagerParams('MINT_BURN', wallet.address, undefined, undefined, undefined, token.address), + ); expect(tokenManagerAddress).to.not.equal(AddressZero); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); diff --git a/test/InterchainTokenService.js b/test/InterchainTokenService.js index f98181bd..bb464649 100644 --- a/test/InterchainTokenService.js +++ b/test/InterchainTokenService.js @@ -24,6 +24,7 @@ const { encodeReceiveHubMessage, encodeLinkTokenMessage, encodeRegisterTokenMetadataMessage, + expectNonZeroAddress, } = require('./utils'); const { deployAll, deployContract, deployInterchainTokenService } = require('../scripts/deploy'); const { @@ -233,8 +234,6 @@ describe.only('Interchain Token Service', () => { const tokenId = await service.interchainTokenId(wallet.address, salt); const tokenManagerAddress = await service.tokenManagerAddress(tokenId); - const tokenAddress = await service.interchainTokenAddress(tokenId); - const params = defaultAbiCoder.encode(['bytes', 'address'], [wallet.address, tokenAddress]); const { payload } = encodeReceiveHubMessage( sourceChain, encodeDeployInterchainTokenMessage(tokenId, tokenName, tokenSymbol, tokenDecimals, wallet.address), @@ -243,23 +242,21 @@ describe.only('Interchain Token Service', () => { await expect(service.execute(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payload)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, tokenAddress, wallet.address, tokenName, tokenSymbol, tokenDecimals) + .withArgs(tokenId, expectNonZeroAddress, wallet.address, tokenName, tokenSymbol, tokenDecimals) .and.to.emit(service, 'TokenManagerDeployed') .withArgs(tokenId, tokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, params); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); - expect(await tokenManager.tokenAddress()).to.equal(tokenAddress); expect(await tokenManager.hasRole(service.address, OPERATOR_ROLE)).to.be.true; - const token = await getContractAt('IInterchainToken', tokenAddress, wallet); - if (mintAmount > 0) { - await token.mint(wallet.address, mintAmount).then((tx) => tx.wait()); - if (!skipApprove) await token.approve(service.address, mintAmount).then((tx) => tx.wait()); + await tokenManager.mint(wallet.address, mintAmount).then((tx) => tx.wait()); + // TODO(hedera) support this + if (!skipApprove) await tokenManager.approve(service.address, mintAmount).then((tx) => tx.wait()); } if (minter) { - await token.transferMintership(minter).then((tx) => tx.wait()); + await tokenManager.transferMintership(minter).then((tx) => tx.wait()); } return [token, tokenManager, tokenId, salt]; @@ -733,8 +730,6 @@ describe.only('Interchain Token Service', () => { const tokenManagerAddress = await service.tokenManagerAddress(tokenId); const minter = '0x'; const operator = '0x'; - const tokenAddress = await service.interchainTokenAddress(tokenId); - const params = defaultAbiCoder.encode(['bytes', 'address'], [operator, tokenAddress]); const { payload } = encodeReceiveHubMessage( destinationChain, encodeDeployInterchainTokenMessage(tokenId, tokenName, tokenSymbol, tokenDecimals, minter), @@ -794,8 +789,6 @@ describe.only('Interchain Token Service', () => { const tokenManagerAddress = await service.tokenManagerAddress(tokenId); const minter = '0x'; const operator = '0x'; - const tokenAddress = await service.interchainTokenAddress(tokenId); - const params = defaultAbiCoder.encode(['bytes', 'address'], [operator, tokenAddress]); const { payload } = encodeReceiveHubMessage( destinationChain, encodeDeployInterchainTokenMessage(tokenId, tokenName, tokenSymbol, tokenDecimals, minter), diff --git a/test/InterchainTokenServiceFullFlow.js b/test/InterchainTokenServiceFullFlow.js index 8cef14a1..f069e220 100644 --- a/test/InterchainTokenServiceFullFlow.js +++ b/test/InterchainTokenServiceFullFlow.js @@ -21,6 +21,8 @@ const { encodeReceiveHubMessage, encodeLinkTokenMessage, encodeRegisterTokenMetadataMessage, + expectNonZeroAddress, + validateTokenManagerParams, } = require('./utils'); const { deployAll, deployContract } = require('../scripts/deploy'); const { approveContractCall } = require('../scripts/utils'); @@ -166,7 +168,12 @@ describe('Interchain Token Service Full Flow', () => { before(async () => { tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); - const tokenAddress = await service.interchainTokenAddress(tokenId); + + // Deploy token first to get address + await tokenFactory.deployInterchainToken(salt, name, symbol, decimals, 0, wallet.address); + const tokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); + const tokenAddress = await tokenManager.tokenAddress(); token = await getContractAt('InterchainToken', tokenAddress, wallet); }); @@ -197,14 +204,18 @@ describe('Interchain Token Service Full Flow', () => { encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, wallet.address)), ); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - const expectedTokenAddress = await service.interchainTokenAddress(tokenId); const multicall = await tokenFactory.multicall(calls, { value }); await expect(multicall) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, expectedTokenAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, params) + .withArgs( + tokenId, + expectedTokenManagerAddress, + NATIVE_INTERCHAIN_TOKEN, + validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), + ) .and.to.emit(service, 'InterchainTokenDeploymentStarted') .withArgs(tokenId, name, symbol, decimals, wallet.address.toLowerCase(), otherChains[0]) .and.to.emit(gasService, 'NativeGasPaidForContractCall') @@ -512,7 +523,12 @@ describe('Interchain Token Service Full Flow', () => { before(async () => { tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); - const tokenAddress = await service.interchainTokenAddress(tokenId); + + // Deploy token first to get address + await tokenFactory.deployInterchainToken(salt, name, symbol, decimals, totalMint, AddressZero); + const tokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); + const tokenAddress = await tokenManager.tokenAddress(); token = await getContractAt('InterchainToken', tokenAddress, wallet); }); @@ -536,14 +552,18 @@ describe('Interchain Token Service Full Flow', () => { encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, '0x')), ); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - const expectedTokenAddress = await service.interchainTokenAddress(tokenId); const multicall = await tokenFactory.multicall(calls, { value }); await expect(multicall) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, expectedTokenAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, params) + .withArgs( + tokenId, + expectedTokenManagerAddress, + NATIVE_INTERCHAIN_TOKEN, + validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), + ) .and.to.emit(service, 'InterchainTokenDeploymentStarted') .withArgs(tokenId, name, symbol, decimals, '0x', otherChains[0]) .and.to.emit(gasService, 'NativeGasPaidForContractCall') @@ -622,16 +642,23 @@ describe('Interchain Token Service Full Flow', () => { before(async () => { const salt = getRandomBytes32(); tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); - const tokenAddress = await service.interchainTokenAddress(tokenId); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - const params = defaultAbiCoder.encode(['bytes', 'address'], [tokenFactory.address, tokenAddress]); await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, totalMint, AddressZero)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, tokenAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, params); + .withArgs( + tokenId, + expectedTokenManagerAddress, + NATIVE_INTERCHAIN_TOKEN, + validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), + ); + // Get token address from deployed token manager + const tokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); + const tokenAddress = await tokenManager.tokenAddress(); token = await getContractAt('InterchainToken', tokenAddress, wallet); executable = await deployContract(wallet, 'TestInterchainExecutable', [service.address]); }); @@ -718,8 +745,14 @@ describe('Interchain Token Service Full Flow', () => { before(async () => { tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); - const tokenAddress = await service.interchainTokenAddress(tokenId); + + // Deploy token first to get address + await tokenFactory.deployInterchainToken(salt, name, symbol, decimals, mintAmount, wallet.address); + const tokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); + const tokenAddress = await tokenManager.tokenAddress(); token = await getContractAt('InterchainToken', tokenAddress, wallet); + executable = await deployContract(wallet, 'TestInterchainExecutable', [service.address]); // Route via ITS Hub for the following chain @@ -749,14 +782,18 @@ describe('Interchain Token Service Full Flow', () => { encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, '0x')), ); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - const expectedTokenAddress = await service.interchainTokenAddress(tokenId); const multicall = await tokenFactory.multicall(calls, { value }); await expect(multicall) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, expectedTokenAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, params) + .withArgs( + tokenId, + expectedTokenManagerAddress, + NATIVE_INTERCHAIN_TOKEN, + validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', '0x', name, symbol, decimals), + ) .and.to.emit(service, 'InterchainTokenDeploymentStarted') .withArgs(tokenId, name, symbol, decimals, '0x', otherChains[0]) .and.to.emit(gasService, 'NativeGasPaidForContractCall') diff --git a/test/utils.js b/test/utils.js index cd8f6936..50736a90 100644 --- a/test/utils.js +++ b/test/utils.js @@ -37,6 +37,37 @@ const expectNonZeroAddress = (v) => { return expect(v).to.be.a('string') && v !== ethers.constants.AddressZero && v !== ''; }; +const validateTokenManagerParams = ( + tokenManagerType, + expectedOperator, + expectedName, + expectedSymbol, + expectedDecimals, + expectedTokenAddress, +) => { + return (params) => { + if (tokenManagerType === 'NATIVE_INTERCHAIN_TOKEN') { + // For native interchain tokens: abi.encode(operator, name, symbol, decimals, tokenCreatePrice) + const [operator, name, symbol, decimals, price] = defaultAbiCoder.decode( + ['bytes', 'string', 'string', 'uint8', 'uint256'], + params, + ); + expect(operator).to.equal(expectedOperator); + expect(name).to.equal(expectedName); + expect(symbol).to.equal(expectedSymbol); + expect(decimals).to.equal(expectedDecimals); + expect(price).to.be.a('number'); + } else { + // For other token manager types: abi.encode(operator, tokenAddress) + const [operator, tokenAddress] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(operator).to.equal(expectedOperator); + expect(tokenAddress).to.equal(expectedTokenAddress); + } + + return true; + }; +}; + const expectRevert = async (txFunc, contract, error, args) => { if (network.config.skipRevertTests || contract === undefined) { await expect(txFunc(getGasOptions())).to.be.reverted; @@ -257,6 +288,8 @@ module.exports = { getChainId, getGasOptions, expectRevert, + expectNonZeroAddress, + validateTokenManagerParams, getPayloadAndProposalHash, waitFor, gasReporter, From 5c6cb057f174f4fca6b5a437aaba48f94b72e0e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Fri, 13 Jun 2025 16:09:33 +0200 Subject: [PATCH 10/49] save isHtsToken flag in TokenManagerProxy --- contracts/interfaces/ITokenManager.sol | 3 ++- contracts/interfaces/ITokenManagerProxy.sol | 6 ++++++ contracts/proxies/TokenManagerProxy.sol | 17 ++++++++++++++--- contracts/token-manager/TokenManager.sol | 5 +++-- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/contracts/interfaces/ITokenManager.sol b/contracts/interfaces/ITokenManager.sol index f551ba4c..0f457a9b 100644 --- a/contracts/interfaces/ITokenManager.sol +++ b/contracts/interfaces/ITokenManager.sol @@ -35,8 +35,9 @@ interface ITokenManager is IBaseTokenManager, ITokenManagerType, IOperator, IFlo * @notice Reverts if the token manager type is not supported for a given token address. * @param tokenAddress_ The address of the token. * @param implementationType_ The implementation type to check. + * @return isHtsToken True if the token is an HTS token, false otherwise. */ - function ensureSupported(address tokenAddress_, uint256 implementationType_) external; + function ensureSupported(address tokenAddress_, uint256 implementationType_) external returns (bool isHtsToken); function addFlowIn(uint256 amount) external; diff --git a/contracts/interfaces/ITokenManagerProxy.sol b/contracts/interfaces/ITokenManagerProxy.sol index ee8bdf92..ff17121a 100644 --- a/contracts/interfaces/ITokenManagerProxy.sol +++ b/contracts/interfaces/ITokenManagerProxy.sol @@ -37,4 +37,10 @@ interface ITokenManagerProxy is IProxy { * @return address The token address. */ function getImplementationTypeAndTokenAddress() external view returns (uint256, address); + + /** + * @notice Returns whether the token is an HTS token. + * @return bool True if the token is an HTS token, false otherwise. + */ + function isHtsToken() external view returns (bool); } diff --git a/contracts/proxies/TokenManagerProxy.sol b/contracts/proxies/TokenManagerProxy.sol index 4c61bae2..45a50841 100644 --- a/contracts/proxies/TokenManagerProxy.sol +++ b/contracts/proxies/TokenManagerProxy.sol @@ -28,6 +28,7 @@ contract TokenManagerProxy is BaseProxy, ITokenManagerType, ITokenManagerProxy { uint256 public immutable implementationType; bytes32 public immutable interchainTokenId; address public immutable tokenAddress; + bool public immutable isHtsToken; /** * @notice Constructs the TokenManagerProxy contract. @@ -77,6 +78,9 @@ contract TokenManagerProxy is BaseProxy, ITokenManagerType, ITokenManagerProxy { } tokenAddress = tokenAddress_; + // Native interchain tokens are always HTS tokens on Hedera + isHtsToken = true; + // Setup the token manager // The setup will add operator as the minter bytes memory setupParams = abi.encode(operator, tokenAddress_); @@ -85,7 +89,10 @@ contract TokenManagerProxy is BaseProxy, ITokenManagerType, ITokenManagerProxy { if (!success) revert SetupFailed(); } else { // For other token manager types - // Check token manager type is supported + // Get the token address from the params first + tokenAddress = IBaseTokenManager(implementation_).getTokenAddressFromParams(params); + + // Check token manager type is supported and get HTS status bool success; bytes memory returnData; (success, returnData) = implementation_.delegatecall( @@ -93,8 +100,12 @@ contract TokenManagerProxy is BaseProxy, ITokenManagerType, ITokenManagerProxy { ); if (!success) revert NotSupported(returnData); - // Get the token address from the params - tokenAddress = IBaseTokenManager(implementation_).getTokenAddressFromParams(params); + // Decode the return value to get isHtsToken + bool isHtsToken_; + assembly { + isHtsToken_ := mload(add(returnData, 0x20)) + } + isHtsToken = isHtsToken_; // Setup the token manager (success, ) = implementation_.delegatecall(abi.encodeWithSelector(IProxy.setup.selector, params)); diff --git a/contracts/token-manager/TokenManager.sol b/contracts/token-manager/TokenManager.sol index f7bb3820..d35de685 100644 --- a/contracts/token-manager/TokenManager.sol +++ b/contracts/token-manager/TokenManager.sol @@ -98,10 +98,11 @@ contract TokenManager is ITokenManager, Minter, Operator, FlowLimit, Implementat * If the token is a supported HTS token, the Token Manager will associate itself with the token. * @param tokenAddress_ The address of the token to check. * @param implementationType_ The implementation type to check. + * @return isHtsToken True if the token is an HTS token, false otherwise. * @dev It's cheaper to check both the token and the implementation type in one function. */ - function ensureSupported(address tokenAddress_, uint256 implementationType_) external { - bool isHtsToken = HTS.isToken(tokenAddress_); + function ensureSupported(address tokenAddress_, uint256 implementationType_) external returns (bool isHtsToken) { + isHtsToken = HTS.isToken(tokenAddress_); if (isHtsToken) { // Currently MINT_BURN and MINT_BURN_FROM are not supported for HTS tokens // See contracts/hedera/README.md for more information From b133129c2efcd855cc71df2d5e181e2267524f1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Fri, 13 Jun 2025 17:24:29 +0200 Subject: [PATCH 11/49] add deploy and fund scripts for whbar --- hardhat.config.js | 1 + scripts/deploy-whbar.js | 68 ++++++++++++++++++++++++++++++++++ scripts/deploy.js | 42 ++++++++++++++++++++- test/InterchainTokenService.js | 2 +- test/UtilsTest.js | 52 +++++++++++++++++++++++++- 5 files changed, 161 insertions(+), 4 deletions(-) create mode 100644 scripts/deploy-whbar.js diff --git a/hardhat.config.js b/hardhat.config.js index 383fe3af..329b7267 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -83,6 +83,7 @@ module.exports = { accounts: [ '0x105d050185ccb907fba04dd92d8de9e32c18305e097ab41dadda21489a211524', '0x2e1d968b041d84dd120a5860cee60cd83f9374ef527ca86996317ada3d0d03e7', + '0x45a5a7108a18dd5013cf2d5857a28144beadc9c70b3bdbd914e38df4e804b8d8', ], chainId: 298, }, diff --git a/scripts/deploy-whbar.js b/scripts/deploy-whbar.js new file mode 100644 index 00000000..46dd41a7 --- /dev/null +++ b/scripts/deploy-whbar.js @@ -0,0 +1,68 @@ +const { ethers } = require('hardhat'); + +async function deployWHBAR(wallet) { + const factory = await ethers.getContractFactory('WHBAR', wallet); + const whbar = await factory.deploy().then((d) => d.deployed()); + + console.log(`WHBAR deployed to: ${whbar.address}`); + return whbar; +} + +async function fundWithWHBAR(whbar, targetAddress, amount, wallet) { + console.log(`Funding ${targetAddress} with ${ethers.utils.formatUnits(amount, 18)} HBAR worth of WHBAR...`); + + // Deposit HBAR to get WHBAR + const depositTx = await whbar.connect(wallet).deposit({ value: amount }); + await depositTx.wait(); + + console.log('Deposited funds.'); + const ownBalance = await whbar.balanceOf(wallet.address); + console.log(`${wallet.address} WHBAR balance: ${ethers.utils.formatUnits(ownBalance, 8)} WHBAR`); + + // Transfer WHBAR if target is different from wallet + if (targetAddress.toLowerCase() !== wallet.address.toLowerCase()) { + // See https://docs.hedera.com/hedera/core-concepts/smart-contracts/wrapped-hbar-whbar + // as to why we need to scale down the amount + const scale = 10 ** 10; + const transferTx = await whbar.connect(wallet).transfer(targetAddress, amount / scale); + await transferTx.wait(); + } + + const balance = await whbar.balanceOf(targetAddress); + console.log(`${targetAddress} WHBAR balance: ${ethers.utils.formatUnits(balance, 8)} WHBAR`); +} + +async function main() { + const [deployer] = await ethers.getSigners(); + + console.log('Deploying WHBAR with account:', deployer.address); + console.log('Account balance:', ethers.utils.formatEther(await deployer.getBalance()), 'HBAR'); + + const whbar = await deployWHBAR(deployer); + + // Fund target address if provided via command line + const targetAddress = process.argv[2]; + const fundingAmount = process.argv[3] ? ethers.utils.parseEther(process.argv[3]) : ethers.utils.parseEther('10'); + + if (targetAddress) { + await fundWithWHBAR(whbar, targetAddress, fundingAmount, deployer); + } + + console.log('WHBAR deployment completed!'); + return whbar; +} + +if (require.main === module) { + main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); +} + +module.exports = { + deployWHBAR, + fundWithWHBAR, + main, +}; diff --git a/scripts/deploy.js b/scripts/deploy.js index dbb43c1d..c2fda30d 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -8,6 +8,7 @@ const Create3Deployer = require('@axelar-network/axelar-gmp-sdk-solidity/artifac const { create3DeployContract, getCreate3Address } = require('@axelar-network/axelar-gmp-sdk-solidity'); const { ITS_HUB_ADDRESS } = require('../test/constants'); const { deployHTS } = require('./deploy-hts'); +const { deployWHBAR, fundWithWHBAR } = require('./deploy-whbar'); const HTS_LIBRARY_NAME = 'contracts/hedera/HTS.sol:HTS'; @@ -25,12 +26,17 @@ const HTS_DEPENDENT_CONTRACTS = [ // Context object to hold deployment state const deploymentContext = { htsAddress: null, + whbarAddress: null, }; function getCurrentHTSAddress() { return deploymentContext.htsAddress; } +function getCurrentWHBARAddress() { + return deploymentContext.whbarAddress; +} + async function deployContract(wallet, contractName, args = [], additionalLibraries = {}, htsAddress = null) { const libraries = { ...additionalLibraries }; @@ -41,7 +47,7 @@ async function deployContract(wallet, contractName, args = [], additionalLibrari if (!currentHtsAddress) { console.log('Deploying HTS library for', contractName); currentHtsAddress = await deployHTS(wallet); - console.log('HTS library deployed at:', currentHtsAddress); + console.log('HTS library deployed to', currentHtsAddress); deploymentContext.htsAddress = currentHtsAddress; } @@ -125,9 +131,16 @@ async function deployAll( deploymentKey = 'InterchainTokenService', factoryDeploymentKey = deploymentKey + 'Factory', htsAddress = null, + whbarAddress = null, + fundingAmount = '10', // Default 10 HBAR funding for ITS ) { + // Print wallet balance + const balance = await wallet.getBalance(); + console.log(`Wallet balance: ${ethers.utils.formatEther(balance)} ETH`); + // Reset deployment context deploymentContext.htsAddress = htsAddress; + deploymentContext.whbarAddress = whbarAddress; const create3Deployer = await new ethers.ContractFactory(Create3Deployer.abi, Create3Deployer.bytecode, wallet) .deploy() @@ -135,6 +148,18 @@ async function deployAll( const gateway = await deployMockGateway(wallet); const gasService = await deployGasService(wallet); + // Deploy WHBAR if not provided + let whbar; + + if (!deploymentContext.whbarAddress) { + console.log('Deploying WHBAR...'); + whbar = await deployWHBAR(wallet); + deploymentContext.whbarAddress = whbar.address; + } else { + console.log('Using existing WHBAR at:', deploymentContext.whbarAddress); + whbar = await ethers.getContractAt('WHBAR', deploymentContext.whbarAddress, wallet); + } + const interchainTokenServiceAddress = await getCreate3Address(create3Deployer.address, wallet, deploymentKey); const tokenManagerDeployer = await deployContract(wallet, 'TokenManagerDeployer', []); const interchainToken = await deployContract(wallet, 'InterchainToken', [interchainTokenServiceAddress]); @@ -160,6 +185,18 @@ async function deployAll( deploymentKey, ); + // Set WHBAR address on ITS + console.log('Setting WHBAR address on ITS...'); + const setWhbarTx = await service.setWhbarAddress(whbar.address); + await setWhbarTx.wait(); + console.log(`WHBAR address set on ITS: ${whbar.address}`); + + // Fund ITS with WHBAR if funding amount is specified + if (fundingAmount && parseFloat(fundingAmount) > 0) { + const fundingAmountWei = ethers.utils.parseEther(fundingAmount); + await fundWithWHBAR(whbar, service.address, fundingAmountWei, wallet); + } + const tokenFactory = await deployInterchainTokenFactory( wallet, create3Deployer.address, @@ -179,6 +216,8 @@ async function deployAll( tokenManager, tokenHandler, htsAddress: deploymentContext.htsAddress, + whbarAddress: deploymentContext.whbarAddress, + whbar, }; } @@ -190,4 +229,5 @@ module.exports = { deployInterchainTokenFactory, deployAll, getCurrentHTSAddress, + getCurrentWHBARAddress, }; diff --git a/test/InterchainTokenService.js b/test/InterchainTokenService.js index bb464649..d847a73b 100644 --- a/test/InterchainTokenService.js +++ b/test/InterchainTokenService.js @@ -48,7 +48,7 @@ const { const reportGas = gasReporter('Interchain Token Service'); -describe.only('Interchain Token Service', () => { +describe('Interchain Token Service', () => { let wallet, otherWallet; let service, gateway, gasService, testToken; diff --git a/test/UtilsTest.js b/test/UtilsTest.js index 5463c686..c83aa812 100644 --- a/test/UtilsTest.js +++ b/test/UtilsTest.js @@ -9,7 +9,7 @@ const { } = ethers; const { expect } = chai; const { getRandomBytes32, expectRevert } = require('./utils'); -const { deployContract } = require('../scripts/deploy'); +const { deployContract, deployAll } = require('../scripts/deploy'); let ownerWallet, otherWallet; @@ -269,7 +269,16 @@ describe('InterchainTokenDeployer', () => { await expectRevert( (gasOptions) => - interchainTokenDeployer.deployInterchainToken(salt, tokenId, ownerWallet.address, name, symbol, decimals, price, gasOptions), + interchainTokenDeployer.deployInterchainToken( + salt, + tokenId, + ownerWallet.address, + name, + symbol, + decimals, + price, + gasOptions, + ), interchainTokenDeployer, 'AlreadyDeployed', ); @@ -345,3 +354,42 @@ describe('Create3Deployer', () => { }); }); }); + +describe('WHBAR Integration', () => { + let deployment; + let whbar; + + before(async () => { + deployment = await deployAll( + ownerWallet, + 'test-chain', + undefined, // itsHubAddress + [], // evmChains + 'TestITS', + 'TestITSFactory', + undefined, // htsAddress + undefined, // whbarAddress + '50', // Fund ITS with 5 HBAR worth of WHBAR + ); + whbar = deployment.whbar; + }); + + it('Should deploy ITS with WHBAR integration', async () => { + expect(deployment.service.address).to.not.equal(AddressZero); + expect(deployment.whbarAddress).to.not.equal(AddressZero); + }); + + it('Should set WHBAR address on ITS', async () => { + const whbarAddressFromITS = await deployment.service.whbarAddress(); + expect(whbarAddressFromITS).to.equal(deployment.whbarAddress); + }); + + it('Should fund ITS with WHBAR balance', async () => { + const itsWhbarBalance = await whbar.balanceOf(deployment.service.address); + expect(itsWhbarBalance).to.be.gt(0); + + // Should have 5 HBAR worth of WHBAR (50 * 10^8 tinybars) + const expectedBalance = ethers.utils.parseUnits('50', 8); + expect(itsWhbarBalance).to.equal(expectedBalance); + }); +}); From 9face17caa0c576375aa727e5f292ec62523b1c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 23 Jun 2025 21:25:29 +0200 Subject: [PATCH 12/49] get token metadata for hts tokens in factory - check isMinter via token manager instead of the InterchainToken contract --- contracts/InterchainTokenFactory.sol | 68 +++++++++++++------------- contracts/interfaces/ITokenManager.sol | 3 +- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/contracts/InterchainTokenFactory.sol b/contracts/InterchainTokenFactory.sol index 90bf9da5..73c9e68f 100644 --- a/contracts/InterchainTokenFactory.sol +++ b/contracts/InterchainTokenFactory.sol @@ -10,6 +10,7 @@ import { IInterchainTokenFactory } from './interfaces/IInterchainTokenFactory.so import { ITokenManager } from './interfaces/ITokenManager.sol'; import { IInterchainToken } from './interfaces/IInterchainToken.sol'; import { IERC20Named } from './interfaces/IERC20Named.sol'; +import { IMinter } from './interfaces/IMinter.sol'; import { HTS, IHederaTokenService } from './hedera/HTS.sol'; @@ -162,21 +163,6 @@ contract InterchainTokenFactory is IInterchainTokenFactory, Multicall, Upgradabl } tokenId = _deployInterchainToken(deploySalt, currentChain, name, symbol, decimals, minterBytes, gasValue); - - if (initialSupply > 0) { - IInterchainToken token = IInterchainToken(interchainTokenService.registeredTokenAddress(tokenId)); - ITokenManager tokenManager = ITokenManager(interchainTokenService.deployedTokenManager(tokenId)); - - token.mint(sender, initialSupply); - - token.transferMintership(minter); - tokenManager.removeFlowLimiter(address(this)); - - // If minter == address(0), we still set it as a flow limiter for consistency with the remote token manager. - tokenManager.addFlowLimiter(minter); - - tokenManager.transferOperatorship(minter); - } } /** @@ -336,8 +322,8 @@ contract InterchainTokenFactory is IInterchainTokenFactory, Multicall, Upgradabl */ function _checkTokenMinter(bytes32 tokenId, address minter) internal view { // Ensure that the minter is registered for the token on the current chain - IInterchainToken token = IInterchainToken(interchainTokenService.registeredTokenAddress(tokenId)); - if (!token.isMinter(minter)) revert NotMinter(minter); + ITokenManager tokenManager = ITokenManager(interchainTokenService.deployedTokenManager(tokenId)); + if (!tokenManager.isMinter(minter)) revert NotMinter(minter); // Sanity check to prevent accidental use of the current ITS address as the token minter if (minter == address(interchainTokenService)) revert InvalidMinter(minter); @@ -419,31 +405,45 @@ contract InterchainTokenFactory is IInterchainTokenFactory, Multicall, Upgradabl } /** - * @notice Retrieves the metadata of an ERC20 token. Reverts with `NotToken` error if metadata is not available. + * @notice Retrieves the metadata of an ERC20 or HTS token. Reverts with `NotToken` error if metadata is not available. + * @notice Returns HTS.InvalidtokenDecimals() if the decimals are not supported. * @param tokenAddress The address of the token. * @return name The name of the token. * @return symbol The symbol of the token. * @return decimals The number of decimals for the token. */ - function _getTokenMetadata(address tokenAddress) internal view returns (string memory name, string memory symbol, uint8 decimals) { - IERC20Named token = IERC20Named(tokenAddress); + function _getTokenMetadata(address tokenAddress) internal returns (string memory name, string memory symbol, uint8 decimals) { + bool isHTSToken = HTS.isToken(tokenAddress); + + if (isHTSToken) { + IHederaTokenService.FungibleTokenInfo memory fTokenInfo = HTS.getFungibleTokenInfo(tokenAddress); + name = fTokenInfo.tokenInfo.token.name; + symbol = fTokenInfo.tokenInfo.token.symbol; + int32 htsDecimals = fTokenInfo.decimals; + if (decimals < 0 || htsDecimals > int32(uint32(type(uint8).max))) { + revert HTS.InvalidTokenDecimals(); + } + decimals = uint8(uint32(htsDecimals)); + } else { + IERC20Named token = IERC20Named(tokenAddress); - try token.name() returns (string memory name_) { - name = name_; - } catch { - revert NotToken(tokenAddress); - } + try token.name() returns (string memory name_) { + name = name_; + } catch { + revert NotToken(tokenAddress); + } - try token.symbol() returns (string memory symbol_) { - symbol = symbol_; - } catch { - revert NotToken(tokenAddress); - } + try token.symbol() returns (string memory symbol_) { + symbol = symbol_; + } catch { + revert NotToken(tokenAddress); + } - try token.decimals() returns (uint8 decimals_) { - decimals = decimals_; - } catch { - revert NotToken(tokenAddress); + try token.decimals() returns (uint8 decimals_) { + decimals = decimals_; + } catch { + revert NotToken(tokenAddress); + } } } diff --git a/contracts/interfaces/ITokenManager.sol b/contracts/interfaces/ITokenManager.sol index 0f457a9b..c4870609 100644 --- a/contracts/interfaces/ITokenManager.sol +++ b/contracts/interfaces/ITokenManager.sol @@ -8,12 +8,13 @@ import { IBaseTokenManager } from './IBaseTokenManager.sol'; import { IOperator } from './IOperator.sol'; import { IFlowLimit } from './IFlowLimit.sol'; import { ITokenManagerType } from './ITokenManagerType.sol'; +import { IMinter } from '../interfaces/IMinter.sol'; /** * @title ITokenManager Interface * @notice This contract is responsible for managing tokens, such as setting locking token balances, or setting flow limits, for interchain transfers. */ -interface ITokenManager is IBaseTokenManager, ITokenManagerType, IOperator, IFlowLimit, IImplementation { +interface ITokenManager is IBaseTokenManager, IMinter, ITokenManagerType, IOperator, IFlowLimit, IImplementation { error TokenLinkerZeroAddress(); error NotService(address caller); error TakeTokenFailed(); From a11e2fbf7ebfdc2f79844c37588a777cc491dfbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Tue, 24 Jun 2025 15:38:34 +0200 Subject: [PATCH 13/49] approve service to int64.max for hts tokens --- contracts/InterchainTokenService.sol | 1 + contracts/token-manager/TokenManager.sol | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index 9edeb33a..7227d692 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -632,6 +632,7 @@ contract InterchainTokenService is /** * @notice Allows the owner to migrate minter of native interchain tokens from ITS to the corresponding token manager. * @param tokenId the tokenId of the registered token. + * @dev TODO(hedera) should this be removed? */ function migrateInterchainToken(bytes32 tokenId) external onlyOwner { ITokenManager tokenManager_ = deployedTokenManager(tokenId); diff --git a/contracts/token-manager/TokenManager.sol b/contracts/token-manager/TokenManager.sol index d35de685..69e68fa6 100644 --- a/contracts/token-manager/TokenManager.sol +++ b/contracts/token-manager/TokenManager.sol @@ -27,6 +27,7 @@ contract TokenManager is ITokenManager, Minter, Operator, FlowLimit, Implementat using SafeTokenCall for IERC20; uint256 internal constant UINT256_MAX = type(uint256).max; + uint256 internal constant INT64_MAX = uint256(uint64(type(int64).max)); address public immutable interchainTokenService; @@ -234,12 +235,17 @@ contract TokenManager is ITokenManager, Minter, Operator, FlowLimit, Implementat * @notice A function to renew approval to the service if we need to. */ function approveService() external onlyService { + address tokenAddress_ = this.tokenAddress(); + bool isHTSToken = HTS.isToken(tokenAddress_); + uint256 amount = isHTSToken ? INT64_MAX : UINT256_MAX; /** * @dev Some tokens may not obey the infinite approval. * Even so, it is unexpected to run out of allowance in practice. * If needed, we can upgrade to allow replenishing the allowance in the future. + * + * @notice HTS tokens have a maximum supply of 2^63-1 (int64.max). */ - IERC20(this.tokenAddress()).safeCall(abi.encodeWithSelector(IERC20.approve.selector, interchainTokenService, UINT256_MAX)); + IERC20(tokenAddress_).safeCall(abi.encodeWithSelector(IERC20.approve.selector, interchainTokenService, amount)); } /** From 7dafa598d8b44baa35bc5976f945d7fc5fd2be0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Tue, 24 Jun 2025 15:38:54 +0200 Subject: [PATCH 14/49] don't transfer mintership to TM post-deployment --- contracts/TokenHandler.sol | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/contracts/TokenHandler.sol b/contracts/TokenHandler.sol index de0ceeef..d4216c69 100644 --- a/contracts/TokenHandler.sol +++ b/contracts/TokenHandler.sol @@ -128,14 +128,7 @@ contract TokenHandler is ITokenHandler, ITokenManagerType, ReentrancyGuard, Crea */ // slither-disable-next-line locked-ether function postTokenManagerDeploy(uint256 tokenManagerType, ITokenManager tokenManager) external payable { - // For native interchain tokens, we transfer mintership to the token manager. - // This is done here because the InterchainToken bytecode is preferred to be fixed to avoid having multiple versions of the Token code used in production. - if (tokenManagerType == uint256(TokenManagerType.NATIVE_INTERCHAIN_TOKEN)) { - IMinter(tokenManager.tokenAddress()).transferMintership(address(tokenManager)); - // For lock/unlock token managers, the ITS contract needs an approval from the token manager to transfer tokens on its behalf. - } else if ( - tokenManagerType == uint256(TokenManagerType.LOCK_UNLOCK) || tokenManagerType == uint256(TokenManagerType.LOCK_UNLOCK_FEE) - ) { + if (tokenManagerType == uint256(TokenManagerType.LOCK_UNLOCK) || tokenManagerType == uint256(TokenManagerType.LOCK_UNLOCK_FEE)) { tokenManager.approveService(); } } From 98985c2848fb9dba0aac630f089b4ce941581fa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 25 Jun 2025 00:14:02 +0200 Subject: [PATCH 15/49] associate TM only for HTS tokens and LOCK_UNLOCK --- contracts/proxies/TokenManagerProxy.sol | 138 +++++++++++++---------- contracts/token-manager/TokenManager.sol | 11 +- 2 files changed, 88 insertions(+), 61 deletions(-) diff --git a/contracts/proxies/TokenManagerProxy.sol b/contracts/proxies/TokenManagerProxy.sol index 45a50841..40ce8fd1 100644 --- a/contracts/proxies/TokenManagerProxy.sol +++ b/contracts/proxies/TokenManagerProxy.sol @@ -49,70 +49,94 @@ contract TokenManagerProxy is BaseProxy, ITokenManagerType, ITokenManagerProxy { // If the implementation type is NATIVE_INTERCHAIN_TOKEN, deploy the token if (implementationType_ == uint256(TokenManagerType.NATIVE_INTERCHAIN_TOKEN)) { - // Parse the parameters to get the token deploy info - (bytes memory operator, string memory name, string memory symbol, uint8 decimals, uint256 price) = IBaseTokenManager( - implementation_ - ).getTokenDeployInfoFromParams(params); - - // Get the deployer address from the interchain token service - address interchainTokenDeployer = IInterchainTokenService(interchainTokenService).interchainTokenDeployer(); - address whbarAddress = ITokenCreationPricing(interchainTokenService).whbarAddress(); - - // Transfer from ITS to itself - IWHBAR(whbarAddress).transferFrom(interchainTokenService, address(this), price); - // Redeem HBAR to pay for token creation - IWHBAR(whbarAddress).withdraw(price); - - // Call the interchain token deployer to deploy the token - (bool deploySuccess, bytes memory returnData) = interchainTokenDeployer.delegatecall( - abi.encodeWithSelector(IInterchainTokenDeployer.deployInterchainToken.selector, tokenId, name, symbol, decimals, price) - ); - if (!deploySuccess) { - revert InterchainTokenDeploymentFailed(returnData); - } - - // Get and save the address - address tokenAddress_; - assembly { - tokenAddress_ := mload(add(returnData, 0x20)) - } - tokenAddress = tokenAddress_; - - // Native interchain tokens are always HTS tokens on Hedera + tokenAddress = _deployNativeInterchainToken(implementation_, tokenId, params); isHtsToken = true; - - // Setup the token manager - // The setup will add operator as the minter - bytes memory setupParams = abi.encode(operator, tokenAddress_); - - (bool success, ) = implementation_.delegatecall(abi.encodeWithSelector(IProxy.setup.selector, setupParams)); - if (!success) revert SetupFailed(); + _setupTokenManager(implementation_, params, tokenAddress, true); } else { - // For other token manager types - // Get the token address from the params first tokenAddress = IBaseTokenManager(implementation_).getTokenAddressFromParams(params); + isHtsToken = _checkTokenSupport(implementation_, tokenAddress, implementationType_); + _setupTokenManager(implementation_, params, tokenAddress, isHtsToken); + } + } + + /** + * @notice Deploys a native interchain token. + * @param implementation_ The implementation address. + * @param tokenId The token identifier. + * @param params The deployment parameters. + * @return tokenAddress_ The deployed token address. + */ + function _deployNativeInterchainToken( + address implementation_, + bytes32 tokenId, + bytes memory params + ) private returns (address tokenAddress_) { + // Parse the parameters to get the token deploy info + (, string memory name, string memory symbol, uint8 decimals, uint256 price) = IBaseTokenManager(implementation_) + .getTokenDeployInfoFromParams(params); + + // Get the deployer address from the interchain token service + address interchainTokenDeployer = IInterchainTokenService(interchainTokenService).interchainTokenDeployer(); + address whbarAddress = ITokenCreationPricing(interchainTokenService).whbarAddress(); + + // Transfer from ITS to itself + IWHBAR(whbarAddress).transferFrom(interchainTokenService, address(this), price); + // Redeem HBAR to pay for token creation + IWHBAR(whbarAddress).withdraw(price); + + // Call the interchain token deployer to deploy the token + (bool deploySuccess, bytes memory returnData) = interchainTokenDeployer.delegatecall( + abi.encodeWithSelector(IInterchainTokenDeployer.deployInterchainToken.selector, tokenId, name, symbol, decimals, price) + ); + if (!deploySuccess) { + revert InterchainTokenDeploymentFailed(returnData); + } - // Check token manager type is supported and get HTS status - bool success; - bytes memory returnData; - (success, returnData) = implementation_.delegatecall( - abi.encodeWithSelector(ITokenManager.ensureSupported.selector, tokenAddress, implementationType_) - ); - if (!success) revert NotSupported(returnData); - - // Decode the return value to get isHtsToken - bool isHtsToken_; - assembly { - isHtsToken_ := mload(add(returnData, 0x20)) - } - isHtsToken = isHtsToken_; - - // Setup the token manager - (success, ) = implementation_.delegatecall(abi.encodeWithSelector(IProxy.setup.selector, params)); - if (!success) revert SetupFailed(); + // Get and return the address + assembly { + tokenAddress_ := mload(add(returnData, 0x20)) } } + /** + * @notice Checks if the token is supported and returns HTS status. + * @param implementation_ The implementation address. + * @param tokenAddress_ The token address. + * @param implementationType_ The implementation type. + * @return isHtsToken_ Whether the token is an HTS token. + */ + function _checkTokenSupport( + address implementation_, + address tokenAddress_, + uint256 implementationType_ + ) private returns (bool isHtsToken_) { + (bool success, bytes memory returnData) = implementation_.delegatecall( + abi.encodeWithSelector(ITokenManager.ensureSupported.selector, tokenAddress_, implementationType_) + ); + if (!success) revert NotSupported(returnData); + + // Decode the return value to get isHtsToken + assembly { + isHtsToken_ := mload(add(returnData, 0x20)) + } + } + + /** + * @notice Sets up the token manager. + * @param implementation_ The implementation address. + * @param params The setup parameters. + * @param tokenAddress_ The token address. + * @param isHtsToken_ Whether the token is an HTS token. + */ + function _setupTokenManager(address implementation_, bytes memory params, address tokenAddress_, bool isHtsToken_) private { + bytes memory operator = abi.decode(params, (bytes)); + + (bool success, ) = implementation_.delegatecall( + abi.encodeWithSelector(IProxy.setup.selector, abi.encode(operator, tokenAddress_, isHtsToken_, implementationType)) + ); + if (!success) revert SetupFailed(); + } + /** * @notice Getter for the contract id. * @return bytes32 The contract id. diff --git a/contracts/token-manager/TokenManager.sol b/contracts/token-manager/TokenManager.sol index 69e68fa6..db69e3e8 100644 --- a/contracts/token-manager/TokenManager.sol +++ b/contracts/token-manager/TokenManager.sol @@ -147,7 +147,10 @@ contract TokenManager is ITokenManager, Minter, Operator, FlowLimit, Implementat * @param params_ The parameters to be used to initialize the TokenManager. */ function setup(bytes calldata params_) external override(Implementation, IImplementation) onlyProxy { - (bytes memory operatorBytes, address tokenAddress_) = abi.decode(params_, (bytes, address)); + (bytes memory operatorBytes, address tokenAddress_, bool isHtsToken, uint256 implementationType_) = abi.decode( + params_, + (bytes, address, bool, uint256) + ); address operator = address(0); @@ -171,9 +174,9 @@ contract TokenManager is ITokenManager, Minter, Operator, FlowLimit, Implementat _addAccountRoles(interchainTokenService, (1 << uint8(Roles.FLOW_LIMITER)) | (1 << uint8(Roles.OPERATOR))); // Associate the token manager with the token - // TODO(hedera) this should be done only if token manager type is LOCK_UNLOCK? - // is it more expensive to check or associate either way? - HTS.associateToken(address(this), tokenAddress_); + if (isHtsToken && implementationType_ != uint256(TokenManagerType.NATIVE_INTERCHAIN_TOKEN)) { + HTS.associateToken(address(this), tokenAddress_); + } } function addFlowIn(uint256 amount) external onlyService { From a959b48ccd84cdf136ba815f36bae8cbd6501d99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Thu, 26 Jun 2025 10:27:47 +0200 Subject: [PATCH 16/49] update deploy scripts + add token associate script --- hardhat.config.js | 7 +- package-lock.json | 14899 ++++++++++++++++++++++++----------- package.json | 1 + scripts/deploy-whbar.js | 2 +- scripts/deploy.js | 32 +- scripts/token-associate.js | 83 + test/HederaBasic.js | 94 + 7 files changed, 10415 insertions(+), 4703 deletions(-) create mode 100644 scripts/token-associate.js create mode 100644 test/HederaBasic.js diff --git a/hardhat.config.js b/hardhat.config.js index 329b7267..766e8306 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -79,7 +79,7 @@ module.exports = { networks: { ...networks, local: { - url: 'http://localhost:7546', + url: process.env.HEDERA_RPC_URL ?? 'http://localhost:7546', accounts: [ '0x105d050185ccb907fba04dd92d8de9e32c18305e097ab41dadda21489a211524', '0x2e1d968b041d84dd120a5860cee60cd83f9374ef527ca86996317ada3d0d03e7', @@ -87,6 +87,11 @@ module.exports = { ], chainId: 298, }, + testnet: { + url: 'https://testnet.hashio.io/api', + accounts: [process.env.HEDERA_TESTNET_PK_HEX], + chainId: 296, + }, }, etherscan, mocha: { diff --git a/package-lock.json b/package-lock.json index 4c749924..99ba6418 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@axelar-network/axelar-chains-config": "^1.3.0", "@axelarjs/evm": "^0.2.1", "@changesets/cli": "^2.27.9", + "@hashgraph/sdk": "^2.66.0", "@nomicfoundation/hardhat-toolbox": "^2.0.2", "@tsconfig/strictest": "^2.0.2", "chai": "^4.3.7", @@ -50,6 +51,33 @@ "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==", "dev": true }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ampproject/remapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@axelar-network/axelar-cgp-solidity": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/@axelar-network/axelar-cgp-solidity/-/axelar-cgp-solidity-6.4.0.tgz", @@ -129,508 +157,605 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "node_modules/@babel/compat-data": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", + "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "node_modules/@babel/core": { + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", + "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.4", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.4", + "@babel/types": "^7.27.3", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/runtime": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", - "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "regenerator-runtime": "^0.14.0" + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@changesets/apply-release-plan": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.5.tgz", - "integrity": "sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==", + "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@changesets/config": "^3.0.3", - "@changesets/get-version-range-type": "^0.4.0", - "@changesets/git": "^3.0.1", - "@changesets/should-skip-package": "^0.1.1", - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3", - "detect-indent": "^6.0.0", - "fs-extra": "^7.0.1", - "lodash.startcase": "^4.4.0", - "outdent": "^0.5.0", - "prettier": "^2.7.1", - "resolve-from": "^5.0.0", - "semver": "^7.5.3" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@changesets/apply-release-plan/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=6.9.0" } }, - "node_modules/@changesets/apply-release-plan/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "license": "ISC", + "peer": true, + "dependencies": { + "yallist": "^3.0.2" } }, - "node_modules/@changesets/apply-release-plan/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/@changesets/apply-release-plan/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@changesets/apply-release-plan/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">= 4.0.0" + "node": ">=6.9.0" } }, - "node_modules/@changesets/assemble-release-plan": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.4.tgz", - "integrity": "sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==", + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, "license": "MIT", - "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.2", - "@changesets/should-skip-package": "^0.1.1", - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3", - "semver": "^7.5.3" + "peer": true, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@changesets/assemble-release-plan/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6.9.0" } }, - "node_modules/@changesets/changelog-git": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.0.tgz", - "integrity": "sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==", + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", - "dependencies": { - "@changesets/types": "^6.0.0" + "peer": true, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@changesets/cli": { - "version": "2.27.9", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.9.tgz", - "integrity": "sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==", + "node_modules/@babel/helpers": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@changesets/apply-release-plan": "^7.0.5", - "@changesets/assemble-release-plan": "^6.0.4", - "@changesets/changelog-git": "^0.2.0", - "@changesets/config": "^3.0.3", - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.2", - "@changesets/get-release-plan": "^4.0.4", - "@changesets/git": "^3.0.1", - "@changesets/logger": "^0.1.1", - "@changesets/pre": "^2.0.1", - "@changesets/read": "^0.6.1", - "@changesets/should-skip-package": "^0.1.1", - "@changesets/types": "^6.0.0", - "@changesets/write": "^0.3.2", - "@manypkg/get-packages": "^1.1.3", - "ansi-colors": "^4.1.3", - "ci-info": "^3.7.0", - "enquirer": "^2.3.0", - "external-editor": "^3.1.0", - "fs-extra": "^7.0.1", - "mri": "^1.2.0", - "p-limit": "^2.2.0", - "package-manager-detector": "^0.2.0", - "picocolors": "^1.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.5.3", - "spawndamnit": "^2.0.0", - "term-size": "^2.1.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" }, - "bin": { - "changeset": "bin.js" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@changesets/cli/node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "node_modules/@babel/parser": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.27.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/@changesets/cli/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6 <7 || >=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/cli/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/cli/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "p-try": "^2.0.0" + "@babel/helper-plugin-utils": "^7.12.13" }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/cli/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": ">=6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/cli/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, "engines": { - "node": ">=8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/cli/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/cli/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4.0.0" + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/config": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.0.3.tgz", - "integrity": "sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@changesets/errors": "^0.2.0", - "@changesets/get-dependents-graph": "^2.1.2", - "@changesets/logger": "^0.1.1", - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1", - "micromatch": "^4.0.2" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/config/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6 <7 || >=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/config/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/config/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4.0.0" + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/errors": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", - "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "extendable-error": "^0.1.5" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/get-dependents-graph": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.2.tgz", - "integrity": "sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3", - "picocolors": "^1.1.0", - "semver": "^7.5.3" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/get-dependents-graph/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/get-release-plan": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.4.tgz", - "integrity": "sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@changesets/assemble-release-plan": "^6.0.4", - "@changesets/config": "^3.0.3", - "@changesets/pre": "^2.0.1", - "@changesets/read": "^0.6.1", - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@changesets/get-version-range-type": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", - "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", + "node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@changesets/git": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.1.tgz", - "integrity": "sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==", + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@changesets/errors": "^0.2.0", - "@manypkg/get-packages": "^1.1.3", - "is-subdir": "^1.1.1", - "micromatch": "^4.0.2", - "spawndamnit": "^2.0.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@changesets/logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", - "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", + "node_modules/@babel/traverse": { + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "picocolors": "^1.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@changesets/parse": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.0.tgz", - "integrity": "sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==", + "node_modules/@babel/traverse--for-generate-function-map": { + "name": "@babel/traverse", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@changesets/types": "^6.0.0", - "js-yaml": "^3.13.1" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@changesets/parse/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@babel/traverse--for-generate-function-map/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" + "peer": true, + "engines": { + "node": ">=4" } }, - "node_modules/@changesets/parse/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "license": "MIT", + "peer": true, "engines": { "node": ">=4" } }, - "node_modules/@changesets/parse/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/@babel/types": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@changesets/pre": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.1.tgz", - "integrity": "sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==", + "node_modules/@changesets/apply-release-plan": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.5.tgz", + "integrity": "sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==", "dev": true, "license": "MIT", "dependencies": { - "@changesets/errors": "^0.2.0", + "@changesets/config": "^3.0.3", + "@changesets/get-version-range-type": "^0.4.0", + "@changesets/git": "^3.0.1", + "@changesets/should-skip-package": "^0.1.1", "@changesets/types": "^6.0.0", "@manypkg/get-packages": "^1.1.3", - "fs-extra": "^7.0.1" + "detect-indent": "^6.0.0", + "fs-extra": "^7.0.1", + "lodash.startcase": "^4.4.0", + "outdent": "^0.5.0", + "prettier": "^2.7.1", + "resolve-from": "^5.0.0", + "semver": "^7.5.3" } }, - "node_modules/@changesets/pre/node_modules/fs-extra": { + "node_modules/@changesets/apply-release-plan/node_modules/fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", @@ -645,7 +770,7 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/@changesets/pre/node_modules/jsonfile": { + "node_modules/@changesets/apply-release-plan/node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", @@ -655,7 +780,30 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@changesets/pre/node_modules/universalify": { + "node_modules/@changesets/apply-release-plan/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", @@ -665,23 +813,101 @@ "node": ">= 4.0.0" } }, - "node_modules/@changesets/read": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.1.tgz", - "integrity": "sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==", + "node_modules/@changesets/assemble-release-plan": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.4.tgz", + "integrity": "sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/should-skip-package": "^0.1.1", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/assemble-release-plan/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/changelog-git": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.0.tgz", + "integrity": "sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==", "dev": true, "license": "MIT", "dependencies": { + "@changesets/types": "^6.0.0" + } + }, + "node_modules/@changesets/cli": { + "version": "2.27.9", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.9.tgz", + "integrity": "sha512-q42a/ZbDnxPpCb5Wkm6tMVIxgeI9C/bexntzTeCFBrQEdpisQqk8kCHllYZMDjYtEc1ZzumbMJAG8H0Z4rdvjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/apply-release-plan": "^7.0.5", + "@changesets/assemble-release-plan": "^6.0.4", + "@changesets/changelog-git": "^0.2.0", + "@changesets/config": "^3.0.3", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/get-release-plan": "^4.0.4", "@changesets/git": "^3.0.1", "@changesets/logger": "^0.1.1", - "@changesets/parse": "^0.4.0", + "@changesets/pre": "^2.0.1", + "@changesets/read": "^0.6.1", + "@changesets/should-skip-package": "^0.1.1", "@changesets/types": "^6.0.0", + "@changesets/write": "^0.3.2", + "@manypkg/get-packages": "^1.1.3", + "ansi-colors": "^4.1.3", + "ci-info": "^3.7.0", + "enquirer": "^2.3.0", + "external-editor": "^3.1.0", "fs-extra": "^7.0.1", - "p-filter": "^2.1.0", - "picocolors": "^1.1.0" + "mri": "^1.2.0", + "p-limit": "^2.2.0", + "package-manager-detector": "^0.2.0", + "picocolors": "^1.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "spawndamnit": "^2.0.0", + "term-size": "^2.1.0" + }, + "bin": { + "changeset": "bin.js" } }, - "node_modules/@changesets/read/node_modules/fs-extra": { + "node_modules/@changesets/cli/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@changesets/cli/node_modules/fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", @@ -696,7 +922,7 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/@changesets/read/node_modules/jsonfile": { + "node_modules/@changesets/cli/node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", @@ -706,48 +932,82 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@changesets/read/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/@changesets/cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@changesets/should-skip-package": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.1.tgz", - "integrity": "sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==", + "node_modules/@changesets/cli/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "license": "MIT", - "dependencies": { - "@changesets/types": "^6.0.0", - "@manypkg/get-packages": "^1.1.3" + "engines": { + "node": ">=6" } }, - "node_modules/@changesets/types": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.0.0.tgz", - "integrity": "sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==", + "node_modules/@changesets/cli/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/@changesets/write": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.2.tgz", - "integrity": "sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==", + "node_modules/@changesets/cli/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@changesets/cli/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@changesets/config": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.0.3.tgz", + "integrity": "sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==", "dev": true, "license": "MIT", "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/logger": "^0.1.1", "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", "fs-extra": "^7.0.1", - "human-id": "^1.0.2", - "prettier": "^2.7.1" + "micromatch": "^4.0.2" } }, - "node_modules/@changesets/write/node_modules/fs-extra": { + "node_modules/@changesets/config/node_modules/fs-extra": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", @@ -762,7 +1022,7 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/@changesets/write/node_modules/jsonfile": { + "node_modules/@changesets/config/node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", @@ -772,7 +1032,7 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@changesets/write/node_modules/universalify": { + "node_modules/@changesets/config/node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", @@ -782,413 +1042,709 @@ "node": ">= 4.0.0" } }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "node_modules/@changesets/errors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", + "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" + "license": "MIT", + "dependencies": { + "extendable-error": "^0.1.5" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "node_modules/@changesets/get-dependents-graph": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.2.tgz", + "integrity": "sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "picocolors": "^1.1.0", + "semver": "^7.5.3" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], + "node_modules/@changesets/get-dependents-graph/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], + "node_modules/@changesets/get-release-plan": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.4.tgz", + "integrity": "sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@changesets/assemble-release-plan": "^6.0.4", + "@changesets/config": "^3.0.3", + "@changesets/pre": "^2.0.1", + "@changesets/read": "^0.6.1", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], + "node_modules/@changesets/get-version-range-type": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", + "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], + "node_modules/@changesets/git": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.1.tgz", + "integrity": "sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@manypkg/get-packages": "^1.1.3", + "is-subdir": "^1.1.1", + "micromatch": "^4.0.2", + "spawndamnit": "^2.0.0" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], + "node_modules/@changesets/logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", + "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.0" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], + "node_modules/@changesets/parse": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.0.tgz", + "integrity": "sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.0.0", + "js-yaml": "^3.13.1" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], + "node_modules/@changesets/parse/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], + "node_modules/@changesets/parse/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], + "node_modules/@changesets/parse/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], + "node_modules/@changesets/pre": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.1.tgz", + "integrity": "sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], + "node_modules/@changesets/pre/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, "engines": { - "node": ">=12" + "node": ">=6 <7 || >=8" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], + "node_modules/@changesets/pre/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], + "node_modules/@changesets/pre/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 4.0.0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], + "node_modules/@changesets/read": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.1.tgz", + "integrity": "sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "license": "MIT", + "dependencies": { + "@changesets/git": "^3.0.1", + "@changesets/logger": "^0.1.1", + "@changesets/parse": "^0.4.0", + "@changesets/types": "^6.0.0", + "fs-extra": "^7.0.1", + "p-filter": "^2.1.0", + "picocolors": "^1.1.0" + } + }, + "node_modules/@changesets/read/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@changesets/read/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@changesets/read/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@changesets/should-skip-package": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.1.tgz", + "integrity": "sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/types": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.0.0.tgz", + "integrity": "sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@changesets/write": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.2.tgz", + "integrity": "sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.0.0", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "prettier": "^2.7.1" + } + }, + "node_modules/@changesets/write/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@changesets/write/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@changesets/write/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", "cpu": [ - "s390x" + "arm" ], "dev": true, "optional": true, "os": [ - "linux" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/linux-x64": { + "node_modules/@esbuild/android-arm64": { "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", "cpu": [ - "x64" + "arm64" ], "dev": true, "optional": true, "os": [ - "linux" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/netbsd-x64": { + "node_modules/@esbuild/android-x64": { "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ - "netbsd" + "android" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/openbsd-x64": { + "node_modules/@esbuild/darwin-arm64": { "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", "cpu": [ - "x64" + "arm64" ], "dev": true, "optional": true, "os": [ - "openbsd" + "darwin" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/sunos-x64": { + "node_modules/@esbuild/darwin-x64": { "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ - "sunos" + "darwin" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/win32-arm64": { + "node_modules/@esbuild/freebsd-arm64": { "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ - "win32" + "freebsd" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/win32-ia32": { + "node_modules/@esbuild/freebsd-x64": { "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", "cpu": [ - "ia32" + "x64" ], "dev": true, "optional": true, "os": [ - "win32" + "freebsd" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/win32-x64": { + "node_modules/@esbuild/linux-arm": { "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", "cpu": [ - "x64" + "arm" ], "dev": true, "optional": true, "os": [ - "win32" + "linux" ], "engines": { "node": ">=12" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": ">=12" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", @@ -1943,1522 +2499,4966 @@ "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", + "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", + "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/proto-loader/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@hashgraph/cryptography": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@hashgraph/cryptography/-/cryptography-1.8.0.tgz", + "integrity": "sha512-tkBbGd8zU2dNCwlxCX47cS+VhRosh8mEbFfjvjzjcuW2KxdVsdV6GshyVtXeFxHMijo5kAcxd2CoubhCreNdaQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@noble/curves": "^1.8.1", + "asn1js": "^3.0.6", + "bignumber.js": "^9.1.1", + "bn.js": "^5.2.1", + "buffer": "^6.0.3", + "crypto-js": "^4.2.0", + "forge-light": "1.1.4", + "js-base64": "^3.7.7", + "react-native-get-random-values": "^1.11.0", + "spark-md5": "^3.0.2", + "tweetnacl": "^1.0.3", + "utf8": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependenciesMeta": { + "expo-crypto": { + "optional": true + } + } + }, + "node_modules/@hashgraph/cryptography/node_modules/@noble/curves": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz", + "integrity": "sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@hashgraph/cryptography/node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@hashgraph/proto": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/@hashgraph/proto/-/proto-2.19.0.tgz", + "integrity": "sha512-ghlkyPb8JJx9ACGVna84vOtMqQkisBZ+EGeQe+FT+ci7qlhdf/ecRGvMw/uanSE5yviOFBqJeH0c2SzVIqpydQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "long": "^5.2.3", + "protobufjs": "7.2.5" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@hashgraph/sdk": { + "version": "2.66.0", + "resolved": "https://registry.npmjs.org/@hashgraph/sdk/-/sdk-2.66.0.tgz", + "integrity": "sha512-A5dCSxb7pzYhgd7zhkOJ7lJRwg29MEcfkq0B/Nqb5j2Swdee6v+DCse7xkB978dmHnfrG6UM64LZX0qMWw8Uiw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@ethersproject/abi": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@grpc/grpc-js": "^1.12.6", + "@hashgraph/cryptography": "1.8.0", + "@hashgraph/proto": "2.19.0", + "bignumber.js": "^9.1.1", + "bn.js": "^5.1.1", + "crypto-js": "^4.2.0", + "js-base64": "^3.7.4", + "long": "^5.3.1", + "pino": "^9.6.0", + "pino-pretty": "^13.0.0", + "protobufjs": "7.2.5", + "rfc4648": "^1.5.3", + "utf8": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "bn.js": "^5.2.1" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/abi": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz", + "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/hash": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/abstract-provider": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz", + "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/networks": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/transactions": "^5.8.0", + "@ethersproject/web": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/abstract-signer": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz", + "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-provider": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/address": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz", + "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/rlp": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/base64": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz", + "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/bignumber": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz", + "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/bytes": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz", + "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/constants": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz", + "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bignumber": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/hash": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz", + "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/abstract-signer": "^5.8.0", + "@ethersproject/address": "^5.8.0", + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/keccak256": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz", + "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/logger": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz", + "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT" + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/networks": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz", + "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/properties": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz", + "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/rlp": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz", + "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/signing-key": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz", + "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "bn.js": "^5.2.1", + "elliptic": "6.6.1", + "hash.js": "1.1.7" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/strings": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz", + "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/logger": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/transactions": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz", + "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/address": "^5.8.0", + "@ethersproject/bignumber": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/constants": "^5.8.0", + "@ethersproject/keccak256": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/rlp": "^5.8.0", + "@ethersproject/signing-key": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/@ethersproject/web": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz", + "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@ethersproject/base64": "^5.8.0", + "@ethersproject/bytes": "^5.8.0", + "@ethersproject/logger": "^5.8.0", + "@ethersproject/properties": "^5.8.0", + "@ethersproject/strings": "^5.8.0" + } + }, + "node_modules/@hashgraph/sdk/node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@hashgraph/sdk/node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true + }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@manypkg/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" + } + }, + "node_modules/@manypkg/find-root/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@manypkg/find-root/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@manypkg/find-root/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@manypkg/find-root/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@manypkg/find-root/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" + } + }, + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@manypkg/get-packages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@manypkg/get-packages/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@manypkg/get-packages/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@manypkg/get-packages/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dev": true, + "dependencies": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/@noble/curves": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/hashes": "1.3.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomicfoundation/edr": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.6.4.tgz", + "integrity": "sha512-YgrSuT3yo5ZQkbvBGqQ7hG+RDvz3YygSkddg4tb1Z0Y6pLXFzwrcEwWaJCFAVeeZxdxGfCgGMUYgRVneK+WXkw==", + "dev": true, + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.6.4", + "@nomicfoundation/edr-darwin-x64": "0.6.4", + "@nomicfoundation/edr-linux-arm64-gnu": "0.6.4", + "@nomicfoundation/edr-linux-arm64-musl": "0.6.4", + "@nomicfoundation/edr-linux-x64-gnu": "0.6.4", + "@nomicfoundation/edr-linux-x64-musl": "0.6.4", + "@nomicfoundation/edr-win32-x64-msvc": "0.6.4" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.4.tgz", + "integrity": "sha512-QNQErISLgssV9+qia8sIjRANqtbW8snSDvjspixT/kSQ5ZSGxxctTg7x72wPSrcu8+EBEveIe5uqENIp5GH8HQ==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.4.tgz", + "integrity": "sha512-cjVmREiwByyc9+oGfvAh49IAw+oVJHF9WWYRD+Tm/ZlSpnEVWxrGNBak2bd/JSYjn+mZE7gmWS4SMRi4nKaLUg==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.4.tgz", + "integrity": "sha512-96o9kRIVD6W5VkgKvUOGpWyUGInVQ5BRlME2Fa36YoNsRQMaKtmYJEU0ACosYES6ZTpYC8U5sjMulvPtVoEfOA==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.4.tgz", + "integrity": "sha512-+JVEW9e5plHrUfQlSgkEj/UONrIU6rADTEk+Yp9pbe+mzNkJdfJYhs5JYiLQRP4OjxH4QOrXI97bKU6FcEbt5Q==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.4.tgz", + "integrity": "sha512-nzYWW+fO3EZItOeP4CrdMgDXfaGBIBkKg0Y/7ySpUxLqzut40O4Mb0/+quqLAFkacUSWMlFp8nsmypJfOH5zoA==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.4.tgz", + "integrity": "sha512-QFRoE9qSQ2boRrVeQ1HdzU+XN7NUgwZ1SIy5DQt4d7jCP+5qTNsq8LBNcqhRBOATgO63nsweNUhxX/Suj5r1Sw==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.4.tgz", + "integrity": "sha512-2yopjelNkkCvIjUgBGhrn153IBPLwnsDeNiq6oA0WkeM8tGmQi4td+PGi9jAriUDAkc59Yoi2q9hYA6efiY7Zw==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", + "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", + "dev": true, + "dependencies": { + "@nomicfoundation/ethereumjs-util": "9.0.4" + } + }, + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", + "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", + "dev": true, + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", + "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", + "dev": true, + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", + "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", + "dev": true, + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", + "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", + "dev": true, + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomiclabs/hardhat-ethers": "^2.0.0", + "chai": "^4.2.0", + "ethers": "^5.0.0", + "hardhat": "^2.9.4" + } + }, + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.9.tgz", + "integrity": "sha512-OXWCv0cHpwLUO2u7bFxBna6dQtCC2Gg/aN/KtJLO7gmuuA28vgmVKYFRCDUqrbjujzgfwQ2aKyZ9Y3vSmDqS7Q==", + "dev": true, + "peer": true, + "dependencies": { + "ethereumjs-util": "^7.1.4" + }, + "peerDependencies": { + "hardhat": "^2.9.5" + } + }, + "node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz", + "integrity": "sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg==", + "dev": true, + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomiclabs/hardhat-ethers": "^2.0.0", + "@nomiclabs/hardhat-etherscan": "^3.0.0", + "@typechain/ethers-v5": "^10.1.0", + "@typechain/hardhat": "^6.1.2", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=12.0.0", + "chai": "^4.2.0", + "ethers": "^5.4.7", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.1.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", + "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", + "dev": true, + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", + "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", + "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", + "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", + "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", + "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", + "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", + "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", + "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", + "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", + "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomiclabs/hardhat-ethers": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", + "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", + "dev": true, + "peer": true, + "peerDependencies": { + "ethers": "^5.0.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", + "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", + "dev": true, + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@nomiclabs/hardhat-etherscan/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "dev": true, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "dev": true, + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "dev": true, + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@react-native/assets-registry": { + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.80.0.tgz", + "integrity": "sha512-MlScsKAz99zoYghe5Rf5mUqsqz2rMB02640NxtPtBMSHNdGxxRlWu/pp1bFexDa1DYJwyIjnLgt3Z/Y90ikHfw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/codegen": { + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.80.0.tgz", + "integrity": "sha512-X9TsPgytoUkNrQjzAZh4dXa4AuouvYT0NzYyvnjw1ry4LESCZtKba+eY4x3+M30WPR52zjgu+UFL//14BSdCCA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "glob": "^7.1.1", + "hermes-parser": "0.28.1", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/codegen/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@react-native/codegen/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@react-native/codegen/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@react-native/community-cli-plugin": { + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.80.0.tgz", + "integrity": "sha512-uadfVvzZfz5tGpqwslL12i+rELK9m6cLhtqICX0JQvS7Bu12PJwrozhKzEzIYwN9i3wl2dWrKDUr08izt7S9Iw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@react-native/dev-middleware": "0.80.0", + "chalk": "^4.0.0", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "metro": "^0.82.2", + "metro-config": "^0.82.2", + "metro-core": "^0.82.2", + "semver": "^7.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@react-native-community/cli": "*" + }, + "peerDependenciesMeta": { + "@react-native-community/cli": { + "optional": true + } + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@react-native/community-cli-plugin/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@react-native/community-cli-plugin/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.80.0.tgz", + "integrity": "sha512-lpu9Z3xtKUaKFvEcm5HSgo1KGfkDa/W3oZHn22Zy0WQ9MiOu2/ar1txgd1wjkoNiK/NethKcRdCN7mqnc6y2mA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware": { + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.80.0.tgz", + "integrity": "sha512-lLyTnJ687A5jF3fn8yR/undlCis3FG+N/apQ+Q0Lcl+GV6FsZs0U5H28YmL6lZtjOj4TLek6uGPMPmZasHx7cQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.80.0", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "serve-static": "^1.16.2", + "ws": "^6.2.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/@react-native/gradle-plugin": { + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.80.0.tgz", + "integrity": "sha512-drmS68rabSMOuDD+YsAY2luNT8br82ycodSDORDqAg7yWQcieHMp4ZUOcdOi5iW+JCqobablT/b6qxcrBg+RaA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.80.0.tgz", + "integrity": "sha512-dMX7IcBuwghySTgIeK8q03tYz/epg5ScGmJEfBQAciuhzMDMV1LBR/9wwdgD73EXM/133yC5A+TlHb3KQil4Ew==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/normalize-colors": { + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.80.0.tgz", + "integrity": "sha512-bJZDSopadjJxMDvysc634eTfLL4w7cAx5diPe14Ez5l+xcKjvpfofS/1Ja14DlgdMJhxGd03MTXlrxoWust3zg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@react-native/virtualized-lists": { + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.80.0.tgz", + "integrity": "sha512-d9zZdPS/ZRexVAkxo1eRp85U7XnnEpXA1ZpSomRKxBuStYKky1YohfEX5YD5MhphemKK24tT7JR4UhaLlmeX8Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^19.0.0", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@scure/base": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", + "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==", + "dev": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "dev": true, + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, + "peer": true, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true, + "peer": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "peer": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "peer": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "peer": true + }, + "node_modules/@tsconfig/strictest": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/strictest/-/strictest-2.0.2.tgz", + "integrity": "sha512-jt4jIsWKvUvuY6adJnQJlb/UR7DdjC8CjHI/OaSQruj2yX9/K6+KOvDt/vD6udqos/FUk5Op66CvYT7TBLYO5Q==", + "dev": true + }, + "node_modules/@typechain/ethers-v5": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", + "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^8.1.1", + "typescript": ">=4.3.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", + "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", + "dev": true, + "peer": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@typechain/ethers-v5": "^10.2.1", + "ethers": "^5.4.7", + "hardhat": "^2.9.9", + "typechain": "^8.1.1" + } + }, + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/bn.js": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.4.tgz", + "integrity": "sha512-ZtBd9L8hVtoBpPMSWfbwjC4dhQtJdlPS+e1A0Rydb7vg7bDcUwiRklPx24sMYtXcmAMST/k0Wze7JLbNU/5SkA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.9.tgz", + "integrity": "sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==", + "dev": true, + "peer": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.7.tgz", + "integrity": "sha512-APucaP5rlmTRYKtRA6FE5QPP87x76ejw5t5guRJ4y5OgMnwtsvigw7HHhKZlx2MGXLeZd6R/GNZR/IqDHcbtQw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", + "dev": true, + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true, + "peer": true + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.3.tgz", + "integrity": "sha512-RsOPImTriV/OE4A9qKjMtk2MnXiuLLbcO3nCXK+kvq4nr0iMfFgpjaX3MPLb6f7+EL1FGSelYvuJMV6REH+ZPQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/node": { + "version": "20.8.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", + "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4HCoGwR3221nOc7G0Z/6KgTNGgaaFGkbGrtUJsB+zlKX2LBVjFHHIUkieMBgHHXgBH5Gq6dZHJKdBYdtlhBQvw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true, + "peer": true + }, + "node_modules/@types/ps-tree": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/ps-tree/-/ps-tree-1.1.5.tgz", + "integrity": "sha512-3LU5a3EZYI1/HvvOkQmmVGrdXopwKXpr3K5cxlZ0zRiP0QzW7IH0o1z4UDI7KdnyQnpPfYHXOOqflEXIl23LFw==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.9", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.9.tgz", + "integrity": "sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==", + "dev": true, + "peer": true + }, + "node_modules/@types/secp256k1": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.5.tgz", + "integrity": "sha512-aIonTBMErtE3T9MxDvTZRzcrT/mCqpEZBw3CCY/i+oG9n57N/+7obBkhFgavUAIrX21bU0LHg1XRgtaLdelBhA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/which": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.2.tgz", + "integrity": "sha512-UqCG7NjNyume6e+BHcFkOQOS8of/E18V2z/jTRkiD98YiiryYOFBVvPxqA/8PQCwkn7icKqz/hFflMIRN2HGhQ==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true, + "peer": true + }, + "node_modules/abitype": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.9.8.tgz", + "integrity": "sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true, + "peer": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@fastify/busboy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", - "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { - "node": ">=14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=4" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/antlr4": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.1.tgz", + "integrity": "sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA==", "dev": true, "engines": { - "node": ">=12.22" + "node": ">=16" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "engines": { + "node": ">= 8" } }, - "node_modules/@humanwhocodes/object-schema": { + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "peer": true + }, + "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, "peer": true, "engines": { - "node": ">=6.0.0" + "node": ">=6" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dev": true, - "peer": true + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true, "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.3.tgz", + "integrity": "sha512-kcBubumjciBg4JKp5KTKtI7ec7tRefPk88yjkWJwaVKYd9QfTaxcsOxoMNKd7iBr447zCfDV0z1kOF47umv42g==", + "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@manypkg/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/runtime": "^7.5.5", - "@types/node": "^12.7.1", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@manypkg/find-root/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, - "license": "MIT" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@manypkg/find-root/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, - "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@manypkg/find-root/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "dev": true, - "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@manypkg/find-root/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "peer": true }, - "node_modules/@manypkg/find-root/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/asn1js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", + "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "p-locate": "^4.1.0" + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" }, "engines": { - "node": ">=8" + "node": ">=12.0.0" } }, - "node_modules/@manypkg/find-root/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/asn1js/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, - "node_modules/@manypkg/find-root/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/ast-parents": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", + "integrity": "sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==", + "dev": true + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { "node": ">=8" } }, - "node_modules/@manypkg/find-root/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "peer": true }, - "node_modules/@manypkg/find-root/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true, "license": "MIT", + "peer": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "peer": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "peer": true, "engines": { "node": ">= 4.0.0" } }, - "node_modules/@manypkg/get-packages": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", - "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", "dev": true, "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.5.5", - "@changesets/types": "^4.0.1", - "@manypkg/find-root": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "read-yaml-file": "^1.1.0" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, - "license": "MIT" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@manypkg/get-packages/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/axios": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", + "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, - "node_modules/@manypkg/get-packages/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", "slash": "^3.0.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.8.0" } }, - "node_modules/@manypkg/get-packages/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@manypkg/get-packages/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12.0.0" + "node": ">=7.0.0" } }, - "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "license": "MIT", + "peer": true }, - "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@noble/curves": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@noble/hashes": "1.3.1" + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=8" } }, - "node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, - "engines": { - "node": ">= 16" + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=8" } }, - "node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">= 8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.28.1.tgz", + "integrity": "sha512-meT17DOuUElMNsL5LZN56d+KBp22hb0EfxWfuPUeoSi54e40v1W4C2V36P75FpsH9fVEfDKpw5Nnkahc8haSsQ==", "dev": true, - "engines": { - "node": ">= 8" + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-parser": "0.28.1" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@nomicfoundation/edr": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.6.4.tgz", - "integrity": "sha512-YgrSuT3yo5ZQkbvBGqQ7hG+RDvz3YygSkddg4tb1Z0Y6pLXFzwrcEwWaJCFAVeeZxdxGfCgGMUYgRVneK+WXkw==", + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.6.4", - "@nomicfoundation/edr-darwin-x64": "0.6.4", - "@nomicfoundation/edr-linux-arm64-gnu": "0.6.4", - "@nomicfoundation/edr-linux-arm64-musl": "0.6.4", - "@nomicfoundation/edr-linux-x64-gnu": "0.6.4", - "@nomicfoundation/edr-linux-x64-musl": "0.6.4", - "@nomicfoundation/edr-win32-x64-msvc": "0.6.4" + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">= 18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.4.tgz", - "integrity": "sha512-QNQErISLgssV9+qia8sIjRANqtbW8snSDvjspixT/kSQ5ZSGxxctTg7x72wPSrcu8+EBEveIe5uqENIp5GH8HQ==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", "dev": true, - "engines": { - "node": ">= 18" + "dependencies": { + "safe-buffer": "^5.0.1" } }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.4.tgz", - "integrity": "sha512-cjVmREiwByyc9+oGfvAh49IAw+oVJHF9WWYRD+Tm/ZlSpnEVWxrGNBak2bd/JSYjn+mZE7gmWS4SMRi4nKaLUg==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, - "engines": { - "node": ">= 18" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.4.tgz", - "integrity": "sha512-96o9kRIVD6W5VkgKvUOGpWyUGInVQ5BRlME2Fa36YoNsRQMaKtmYJEU0ACosYES6ZTpYC8U5sjMulvPtVoEfOA==", + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", "dev": true, + "peer": true + }, + "node_modules/better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-windows": "^1.0.0" + }, "engines": { - "node": ">= 18" + "node": ">=4" } }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.4.tgz", - "integrity": "sha512-+JVEW9e5plHrUfQlSgkEj/UONrIU6rADTEk+Yp9pbe+mzNkJdfJYhs5JYiLQRP4OjxH4QOrXI97bKU6FcEbt5Q==", + "node_modules/bignumber.js": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.0.tgz", + "integrity": "sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 18" + "node": "*" } }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.4.tgz", - "integrity": "sha512-nzYWW+fO3EZItOeP4CrdMgDXfaGBIBkKg0Y/7ySpUxLqzut40O4Mb0/+quqLAFkacUSWMlFp8nsmypJfOH5zoA==", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { - "node": ">= 18" + "node": ">=8" } }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.4.tgz", - "integrity": "sha512-QFRoE9qSQ2boRrVeQ1HdzU+XN7NUgwZ1SIy5DQt4d7jCP+5qTNsq8LBNcqhRBOATgO63nsweNUhxX/Suj5r1Sw==", + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": ">= 18" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.4.tgz", - "integrity": "sha512-2yopjelNkkCvIjUgBGhrn153IBPLwnsDeNiq6oA0WkeM8tGmQi4td+PGi9jAriUDAkc59Yoi2q9hYA6efiY7Zw==", + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">= 18" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", - "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-util": "9.0.4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", - "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", + "node_modules/boxen/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "bin": { - "rlp": "bin/rlp.cjs" + "dependencies": { + "color-name": "~1.1.4" }, "engines": { - "node": ">=18" + "node": ">=7.0.0" } }, - "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", - "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", + "node_modules/boxen/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/boxen/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "ethereum-cryptography": "0.1.3" - }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", - "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "ethereum-cryptography": "0.1.3" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } + "node": ">=8" } }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz", - "integrity": "sha512-f5ZMNmabZeZegEfuxn/0kW+mm7+yV7VNDxLpMOMGXWFJ2l/Ct3QShujzDRF9cOkK9Ui/hbDeOWGZqyQALDXVCQ==", + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "peer": true, "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" - }, - "peerDependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.0", - "chai": "^4.2.0", - "ethers": "^5.0.0", - "hardhat": "^2.9.4" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.9.tgz", - "integrity": "sha512-OXWCv0cHpwLUO2u7bFxBna6dQtCC2Gg/aN/KtJLO7gmuuA28vgmVKYFRCDUqrbjujzgfwQ2aKyZ9Y3vSmDqS7Q==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "peer": true, "dependencies": { - "ethereumjs-util": "^7.1.4" + "fill-range": "^7.0.1" }, - "peerDependencies": { - "hardhat": "^2.9.5" + "engines": { + "node": ">=8" } }, - "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz", - "integrity": "sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg==", - "dev": true, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-etherscan": "^3.0.0", - "@typechain/ethers-v5": "^10.1.0", - "@typechain/hardhat": "^6.1.2", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/node": ">=12.0.0", - "chai": "^4.2.0", - "ethers": "^5.4.7", - "hardhat": "^2.11.0", - "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.1", - "ts-node": ">=8.0.0", - "typechain": "^8.1.0", - "typescript": ">=4.5.0" - } + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", - "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "engines": { - "node": ">= 12" - }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", - "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", - "cpu": [ - "arm64" - ], + "node_modules/browserslist": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", "dev": true, - "optional": true, - "os": [ - "darwin" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } ], + "license": "MIT", + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, "engines": { - "node": ">= 10" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", - "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", - "cpu": [ - "x64" - ], + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "base-x": "^3.0.2" } }, - "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", - "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", - "cpu": [ - "x64" - ], + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", - "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", - "cpu": [ - "arm64" - ], + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "node-int64": "^0.4.0" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", - "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", - "cpu": [ - "arm64" - ], + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, - "optional": true, - "os": [ - "linux" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], - "engines": { - "node": ">= 10" + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", - "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", - "cpu": [ - "x64" - ], + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": ">= 0.8" } }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", - "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", - "cpu": [ - "x64" - ], + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">= 10" + "node": ">=14.16" } }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", - "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", - "cpu": [ - "arm64" - ], + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, "engines": { - "node": ">= 10" + "node": ">=14.16" } }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", - "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", - "cpu": [ - "ia32" - ], + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", - "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", - "cpu": [ - "x64" - ], + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", + "peer": true, + "dependencies": { + "callsites": "^2.0.0" + }, "engines": { - "node": ">= 10" + "node": ">=4" } }, - "node_modules/@nomiclabs/hardhat-ethers": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", - "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", "dev": true, + "license": "MIT", "peer": true, - "peerDependencies": { - "ethers": "^5.0.0", - "hardhat": "^2.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.7.tgz", - "integrity": "sha512-tZ3TvSgpvsQ6B6OGmo1/Au6u8BrAkvs1mIC/eURA3xgIfznUZBhmpne8hv7BXUzw9xNL3fXdpOYgOQlVMTcoHQ==", + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "chalk": "^2.4.2", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "lodash": "^4.17.11", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" + "caller-callsite": "^2.0.0" }, - "peerDependencies": { - "hardhat": "^2.0.4" + "engines": { + "node": ">=4" } }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=6" } }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/caniuse-lite": { + "version": "1.0.30001724", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001724.tgz", + "integrity": "sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0", + "peer": true + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "peer": true + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", "dev": true, "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=12.19" } }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "node_modules/chai": { + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" + }, "engines": { - "node": ">=12.22.0" + "node": ">=4" } }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "node_modules/chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, + "peer": true, "dependencies": { - "graceful-fs": "4.2.10" + "check-error": "^1.0.2" }, - "engines": { - "node": ">=12.22.0" + "peerDependencies": { + "chai": ">= 2.1.2 < 5" } }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@scure/base": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.3.tgz", - "integrity": "sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==", + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true, - "funding": { - "url": "https://paulmillr.com/funding/" - } + "license": "MIT" }, - "node_modules/@scure/bip32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", - "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, "peer": true, - "dependencies": { - "@noble/curves": "~1.1.0", - "@noble/hashes": "~1.3.1", - "@scure/base": "~1.1.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": "*" } }, - "node_modules/@scure/bip39": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", - "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, "dependencies": { - "@noble/hashes": "~1.3.0", - "@scure/base": "~1.1.0" + "get-func-name": "^2.0.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": "*" } }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=6" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", "dev": true, + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" }, "engines": { - "node": ">=6" + "node": ">=12.13.0" } }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, + "license": "MIT", + "peer": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "node_modules/chromium-edge-launcher": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", + "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", "dev": true, + "license": "Apache-2.0", + "peer": true, "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "node_modules/chromium-edge-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "node_modules/chromium-edge-launcher/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, "engines": { "node": ">=6" } }, - "node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "dev": true, "engines": { - "node": ">=14.16" + "node": ">=6" }, "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, - "peer": true, "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "peer": true + "dependencies": { + "color-name": "1.1.3" + } }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "peer": true + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true, - "peer": true + "license": "MIT" }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "peer": true - }, - "node_modules/@tsconfig/strictest": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/strictest/-/strictest-2.0.2.tgz", - "integrity": "sha512-jt4jIsWKvUvuY6adJnQJlb/UR7DdjC8CjHI/OaSQruj2yX9/K6+KOvDt/vD6udqos/FUk5Op66CvYT7TBLYO5Q==", - "dev": true + "peer": true, + "engines": { + "node": ">=0.1.90" + } }, - "node_modules/@typechain/ethers-v5": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", - "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "peer": true, "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" + "delayed-stream": "~1.0.0" }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.1.1", - "typescript": ">=4.3.0" + "engines": { + "node": ">= 0.8" } }, - "node_modules/@typechain/hardhat": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.6.tgz", - "integrity": "sha512-BiVnegSs+ZHVymyidtK472syodx1sXYlYJJixZfRstHVGYTi8V1O7QG4nsjyb0PC/LORcq7sfBUcHto1y6UgJA==", + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, "peer": true, "dependencies": { - "fs-extra": "^9.1.0" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" }, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@typechain/ethers-v5": "^10.2.1", - "ethers": "^5.4.7", - "hardhat": "^2.9.9", - "typechain": "^8.1.1" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", "dev": true, "peer": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/@types/bn.js": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.4.tgz", - "integrity": "sha512-ZtBd9L8hVtoBpPMSWfbwjC4dhQtJdlPS+e1A0Rydb7vg7bDcUwiRklPx24sMYtXcmAMST/k0Wze7JLbNU/5SkA==", + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, - "dependencies": { - "@types/node": "*" + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/@types/chai": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.9.tgz", - "integrity": "sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==", - "dev": true, - "peer": true - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.7.tgz", - "integrity": "sha512-APucaP5rlmTRYKtRA6FE5QPP87x76ejw5t5guRJ4y5OgMnwtsvigw7HHhKZlx2MGXLeZd6R/GNZR/IqDHcbtQw==", + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, "peer": true, - "dependencies": { - "@types/chai": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">= 12" } }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, + "engines": [ + "node >= 0.8" + ], "peer": true, "dependencies": { - "@types/node": "*" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "node_modules/@types/fs-extra": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" - } + "peer": true }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "peer": true, "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/jsonfile": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", - "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true + "peer": true }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "peer": true - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } }, - "node_modules/@types/mocha": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.3.tgz", - "integrity": "sha512-RsOPImTriV/OE4A9qKjMtk2MnXiuLLbcO3nCXK+kvq4nr0iMfFgpjaX3MPLb6f7+EL1FGSelYvuJMV6REH+ZPQ==", + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "dev": true, - "peer": true + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } }, - "node_modules/@types/node": { - "version": "20.8.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", - "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "undici-types": "~5.26.4" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/@types/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4HCoGwR3221nOc7G0Z/6KgTNGgaaFGkbGrtUJsB+zlKX2LBVjFHHIUkieMBgHHXgBH5Gq6dZHJKdBYdtlhBQvw==", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@types/node": "*" + "ms": "2.0.0" } }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, + "license": "MIT", "peer": true }, - "node_modules/@types/ps-tree": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@types/ps-tree/-/ps-tree-1.1.5.tgz", - "integrity": "sha512-3LU5a3EZYI1/HvvOkQmmVGrdXopwKXpr3K5cxlZ0zRiP0QzW7IH0o1z4UDI7KdnyQnpPfYHXOOqflEXIl23LFw==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.9", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.9.tgz", - "integrity": "sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, + "license": "MIT", "peer": true }, - "node_modules/@types/secp256k1": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.5.tgz", - "integrity": "sha512-aIonTBMErtE3T9MxDvTZRzcrT/mCqpEZBw3CCY/i+oG9n57N/+7obBkhFgavUAIrX21bU0LHg1XRgtaLdelBhA==", + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">= 0.6" } }, - "node_modules/@types/which": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.2.tgz", - "integrity": "sha512-UqCG7NjNyume6e+BHcFkOQOS8of/E18V2z/jTRkiD98YiiryYOFBVvPxqA/8PQCwkn7icKqz/hFflMIRN2HGhQ==", - "dev": true - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, "peer": true }, - "node_modules/abitype": { - "version": "0.9.8", - "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.9.8.tgz", - "integrity": "sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==", + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wagmi-dev" - } - ], + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.19.1" + "typescript": ">=4.9.5" }, "peerDependenciesMeta": { "typescript": { "optional": true - }, - "zod": { - "optional": true } } }, - "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", - "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "peer": true, - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "engines": { - "node": ">=0.3.0" + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, "peer": true }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, "dependencies": { - "debug": "4" + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" }, "engines": { - "node": ">= 6.0.0" + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peer": true, + "engines": { + "node": "*" } }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true, - "optional": true, - "peer": true, "engines": { - "node": ">=0.4.2" + "node": ">= 12" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true, - "dependencies": { - "string-width": "^4.1.0" + "license": "MIT", + "engines": { + "node": "*" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", "dev": true, - "engines": { - "node": ">=6" - } + "peer": true }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" + "ms": "2.1.2" }, "engines": { - "node": ">=8" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "engines": { "node": ">=10" @@ -3467,102 +7467,92 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/antlr4": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.13.1.tgz", - "integrity": "sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA==", + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "engines": { - "node": ">=16" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "type-detect": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, - "peer": true + "engines": { + "node": ">=4.0.0" + } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, - "peer": true, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, - "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -3571,2051 +7561,2321 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/array.prototype.findlast": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.3.tgz", - "integrity": "sha512-kcBubumjciBg4JKp5KTKtI7ec7tRefPk88yjkWJwaVKYd9QfTaxcsOxoMNKd7iBr447zCfDV0z1kOF47umv42g==", + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - }, + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "address": "^1.0.1", + "debug": "4" }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.3.1" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "heap": ">= 0.2.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "*" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "path-type": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" + "esutils": "^2.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.0.0" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "peer": true - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", "dev": true, "engines": { - "node": "*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, - "node_modules/ast-parents": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", - "integrity": "sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==", + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true, + "license": "MIT", "peer": true }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "node_modules/electron-to-chromium": { + "version": "1.5.172", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.172.tgz", + "integrity": "sha512-fnKW9dGgmBfsebbYognQSv0CGGLFH1a5iV9EDYTBwmAQn+whbzHbLFlC+3XbHc8xaNtpO0etm8LOcRXs1qMRkQ==", "dev": true, + "license": "ISC", "peer": true }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, - "node_modules/axios": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", - "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, + "license": "MIT", "peer": true, - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "engines": { + "node": ">= 0.8" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "once": "^1.4.0" } }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true, - "peer": true - }, - "node_modules/better-path-resolve": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", - "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, - "license": "MIT", "dependencies": { - "is-windows": "^1.0.0" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=8.6" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "stackframe": "^1.3.4" + } }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "node_modules/es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dev": true, "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/boxen/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/boxen/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" } }, - "node_modules/boxen/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/boxen/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/boxen/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT", + "peer": true }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=0.8.0" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", "dev": true, + "peer": true, "dependencies": { - "fill-range": "^7.0.1" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=8" + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/escodegen/node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, + "peer": true, "dependencies": { - "base-x": "^3.0.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, + "peer": true, "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/buffer-from": { + "node_modules/escodegen/node_modules/prelude-ls": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true, + "peer": true, "engines": { - "node": ">= 0.8" + "node": ">= 0.8.0" } }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, "engines": { - "node": ">=14.16" + "node": ">= 0.8.0" } }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "node_modules/eslint": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", + "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", "dev": true, "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.52.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=14.16" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "node_modules/eslint-config-prettier": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", + "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-stdin": "^6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "eslint-config-prettier-check": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=3.14.1" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/eslint-config-richardpringle": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-richardpringle/-/eslint-config-richardpringle-2.0.0.tgz", + "integrity": "sha512-c2eaJF76KmvOz1KvQCu5nrHBM1H6qB9Z5aW+RYaw9yQsoELiZ09ms9F7NZdPV4Q15sYV8NEJje9rTwnrbUSX6w==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "eslint-config-prettier": "^6.10.1", + "eslint-config-standard": "^14.1.1", + "eslint-plugin-import": "^2.20.2", + "eslint-plugin-mocha": "^6.3.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.1" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/eslint-config-standard": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz", + "integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "eslint": ">=6.2.2", + "eslint-plugin-import": ">=2.18.0", + "eslint-plugin-node": ">=9.1.0", + "eslint-plugin-promise": ">=4.2.1", + "eslint-plugin-standard": ">=4.0.0" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "peer": true + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "peer": true, "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" + "ms": "^2.1.1" } }, - "node_modules/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "debug": "^3.2.7" }, "engines": { "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "peer": true, "dependencies": { - "check-error": "^1.0.2" + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "chai": ">= 2.1.2 < 5" + "eslint": ">=4.19.1" } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/eslint-plugin-import": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", + "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" }, "engines": { "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "peer": true, - "engines": { - "node": "*" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "get-func-name": "^2.0.2" + "esutils": "^2.0.2" }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/eslint-plugin-mocha": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-6.3.0.tgz", + "integrity": "sha512-Cd2roo8caAyG21oKaaNTj7cqeYRWW1I2B5SfpKRp0Ip1gkfwoR1Ow0IGlPWnNjzywdF4n+kHL8/9vM6zCJUxdg==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "eslint-utils": "^2.0.0", + "ramda": "^0.27.0" }, "engines": { - "node": ">= 8.10.0" + "node": ">=8.0.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "peerDependencies": { + "eslint": ">= 4.0.0" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" }, "engines": { - "node": ">= 6" + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" } }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "node_modules/eslint-plugin-promise": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", + "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "engines": { + "node": ">=6" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/eslint-plugin-standard": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", + "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", "dev": true, - "engines": { - "node": ">=6" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": ">=5.0.0" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "dependencies": { - "string-width": "^4.2.0" + "eslint-visitor-keys": "^1.1.0" }, "engines": { - "node": "10.* || >= 12.*" + "node": ">=6" }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=0.1.90" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "peer": true, "dependencies": { - "delayed-stream": "~1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "peer": true, "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4.0.0" + "node": ">=7.0.0" } }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "peer": true, - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" + "engines": { + "node": ">=10" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "peer": true, "engines": { "node": ">=8" } }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { - "node": ">= 12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", "dev": true, - "engines": [ - "node >= 0.8" - ], "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "peer": true - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "peer": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "peer": true, "dependencies": { - "safe-buffer": "~5.1.0" + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "engines": { + "node": ">=4.0" } }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "node_modules/eth-gas-reporter": { + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", + "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", "dev": true, + "peer": true, "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" + "@solidity-parser/parser": "^0.14.0", + "axios": "^1.5.1", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^5.7.2", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^10.2.0", + "req-cwd": "^2.0.0", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" }, "peerDependencies": { - "typescript": ">=4.9.5" + "@codechecks/client": "^0.1.0" }, "peerDependenciesMeta": { - "typescript": { + "@codechecks/client": { "optional": true } } }, - "node_modules/create-hash": { + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "peer": true }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "peer": true, "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" } }, - "node_modules/create-require": { + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", "dev": true, - "peer": true - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "peer": true, + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, + "peer": true, "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" + "node": ">=4" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/eth-gas-reporter/node_modules/cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", "dev": true, + "peer": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "object-assign": "^4.1.0", + "string-width": "^2.1.1" }, "engines": { - "node": ">= 8" + "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "dev": true, "peer": true, - "engines": { - "node": "*" + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" } }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "node_modules/eth-gas-reporter/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, + "peer": true, "engines": { - "node": ">= 12" + "node": ">=4" } }, - "node_modules/death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "dev": true, - "peer": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/eth-gas-reporter/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, + "peer": true, "dependencies": { - "ms": "2.1.2" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=4" } }, - "node_modules/decamelize": { + "node_modules/eth-gas-reporter/node_modules/strip-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, - "engines": { - "node": ">=10" + "peer": true, + "dependencies": { + "ansi-regex": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", "dev": true, + "peer": true, "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "js-sha3": "^0.8.0" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", "dev": true, "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dev": true, - "engines": { - "node": ">=4.0.0" + "dependencies": { + "@types/node": "*" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, + "peer": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, "engines": { - "node": ">=10" + "node": ">=10.0.0" + } + }, + "node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" } }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", "dev": true, + "peer": true, "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "peer": true }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "dev": true, - "peer": true, + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, "engines": { - "node": ">=0.4.0" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", "dev": true, - "engines": { - "node": ">= 0.8" + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "peer": true, "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", "dev": true, - "engines": { - "node": ">=0.3.1" - } + "license": "Apache-2.0", + "peer": true }, - "node_modules/difflib": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", - "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "node_modules/extendable-error": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", "dev": true, - "peer": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", "dependencies": { - "heap": ">= 0.2.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-copy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">= 6" } }, - "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "node": ">=6" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "reusify": "^1.0.4" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "bser": "2.1.1" + } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, "engines": { - "node": ">=8.6" + "node": "^12.20 || >= 14.13" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, "engines": { - "node": ">=6" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { - "is-arrayish": "^0.2.1" + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" - }, + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/finalhandler/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">= 0.4" + "node": ">= 0.6" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, + "peer": true, "dependencies": { - "hasown": "^2.0.0" + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "hasInstallScript": true, "bin": { - "esbuild": "bin/esbuild" + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=12" + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/flow-enums-runtime": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forge-light": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/forge-light/-/forge-light-1.1.4.tgz", + "integrity": "sha512-Nr0xdu93LJawgBZVU/tC+A+4pbKqigdY5PRBz8CXNm4e5saAZIqU2Qe9+nVFtVO5TWCHSgvI0LaZZuatgE5J1g==", "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { - "node": ">=6" + "node": ">= 6.13.0" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">= 14.17" } }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, - "peer": true, "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "fetch-blob": "^3.1.2" }, "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" + "node": ">=12.20.0" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, + "license": "MIT", "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, - "peer": true, "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=14.14" } }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true, - "peer": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, + "peer": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.8.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/escodegen/node_modules/prelude-ls": { + "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "peer": true, "dependencies": { - "prelude-ls": "~1.1.2" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "node_modules/fx": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/fx/-/fx-30.2.0.tgz", + "integrity": "sha512-rIYQBmx85Jfhd3pkSw06YPgvSvfTi022ZXTeFDkcCZGCs5nt3sjqFBGtcMFe1TR2S00RDz63be0ab5mhCiOLBw==", "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, "bin": { - "eslint-config-prettier-check": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=3.14.1" + "fx": "index.js" } }, - "node_modules/eslint-config-richardpringle": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-richardpringle/-/eslint-config-richardpringle-2.0.0.tgz", - "integrity": "sha512-c2eaJF76KmvOz1KvQCu5nrHBM1H6qB9Z5aW+RYaw9yQsoELiZ09ms9F7NZdPV4Q15sYV8NEJje9rTwnrbUSX6w==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "dependencies": { - "eslint-config-prettier": "^6.10.1", - "eslint-config-standard": "^14.1.1", - "eslint-plugin-import": "^2.20.2", - "eslint-plugin-mocha": "^6.3.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-standard": "^4.0.1" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/eslint-config-standard": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz", - "integrity": "sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "peerDependencies": { - "eslint": ">=6.2.2", - "eslint-plugin-import": ">=2.18.0", - "eslint-plugin-node": ">=9.1.0", - "eslint-plugin-promise": ">=4.2.1", - "eslint-plugin-standard": ">=4.0.0" + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "dependencies": { - "ms": "^2.1.1" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, + "peer": true, "engines": { "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", "dev": true, - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=4" } }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, "engines": { - "node": ">=8.10.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/get-tsconfig": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "resolve-pkg-maps": "^1.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/eslint-plugin-mocha": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-6.3.0.tgz", - "integrity": "sha512-Cd2roo8caAyG21oKaaNTj7cqeYRWW1I2B5SfpKRp0Ip1gkfwoR1Ow0IGlPWnNjzywdF4n+kHL8/9vM6zCJUxdg==", + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", "dev": true, + "peer": true, "dependencies": { - "eslint-utils": "^2.0.0", - "ramda": "^0.27.0" - }, - "engines": { - "node": ">=8.0.0" + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" }, - "peerDependencies": { - "eslint": ">= 4.0.0" + "bin": { + "testrpc-sc": "index.js" } }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=8.10.0" + "node": "*" }, - "peerDependencies": { - "eslint": ">=5.16.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/eslint-plugin-promise": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", - "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-plugin-standard": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", - "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peerDependencies": { - "eslint": ">=5.0.0" + "node": ">=10.13.0" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, + "peer": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "global-prefix": "^3.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=6" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, + "peer": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "engines": { - "node": ">=4" + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "define-properties": "^1.1.3" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", "dev": true, + "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, "engines": { - "node": ">=10" + "node": ">=0.4.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/hardhat": { + "version": "2.22.15", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.15.tgz", + "integrity": "sha512-BpTGa9PE/sKAaHi4s/S1e9WGv63DR1m7Lzfd60C8gSEchDPfAJssVRSq0MZ2v2k76ig9m0kHAwVLf5teYwu/Mw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/edr": "^0.6.4", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chalk": "^2.4.2", + "chokidar": "^4.0.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "json-stream-stringify": "^3.1.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.8.26", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" }, - "engines": { - "node": ">=8" + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/hardhat-contract-sizer": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz", + "integrity": "sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==", "dev": true, "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "chalk": "^4.0.0", + "cli-table3": "^0.6.0", + "strip-ansi": "^6.0.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "hardhat": "^2.0.0" } }, - "node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "node_modules/hardhat-contract-sizer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/hardhat-contract-sizer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/hardhat-contract-sizer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4.0" + "node": ">=7.0.0" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/hardhat-contract-sizer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/hardhat-contract-sizer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/hardhat-contract-sizer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/eth-gas-reporter": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", - "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", + "node_modules/hardhat-gas-reporter": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", + "integrity": "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==", "dev": true, "peer": true, "dependencies": { - "@solidity-parser/parser": "^0.14.0", - "axios": "^1.5.1", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^5.7.2", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^10.2.0", - "req-cwd": "^2.0.0", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" }, "peerDependencies": { - "@codechecks/client": "^0.1.0" - }, - "peerDependenciesMeta": { - "@codechecks/client": { - "optional": true - } + "hardhat": "^2.0.2" } }, - "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "node_modules/hardhat/node_modules/@noble/hashes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", @@ -5625,10 +9885,9 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ], - "peer": true + ] }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "node_modules/hardhat/node_modules/@scure/bip32": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", @@ -5639,14 +9898,13 @@ "url": "https://paulmillr.com/funding/" } ], - "peer": true, "dependencies": { "@noble/hashes": "~1.2.0", "@noble/secp256k1": "~1.7.0", "@scure/base": "~1.1.0" } }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "node_modules/hardhat/node_modules/@scure/bip39": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", @@ -5657,45 +9915,31 @@ "url": "https://paulmillr.com/funding/" } ], - "peer": true, "dependencies": { "@noble/hashes": "~1.2.0", "@scure/base": "~1.1.0" } }, - "node_modules/eth-gas-reporter/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-gas-reporter/node_modules/cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "node_modules/hardhat/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", "dev": true, - "peer": true, "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" + "readdirp": "^4.0.1" }, "engines": { - "node": ">=6" + "node": ">= 14.16.0" }, - "optionalDependencies": { - "colors": "^1.1.2" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "node_modules/hardhat/node_modules/ethereum-cryptography": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", "dev": true, - "peer": true, "dependencies": { "@noble/hashes": "1.2.0", "@noble/secp256k1": "1.7.1", @@ -5703,568 +9947,633 @@ "@scure/bip39": "1.1.1" } }, - "node_modules/eth-gas-reporter/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/hardhat/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, - "peer": true, + "dependencies": { + "locate-path": "^2.0.0" + }, "engines": { "node": ">=4" } }, - "node_modules/eth-gas-reporter/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, - "peer": true, "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=6 <7 || >=8" } }, - "node_modules/eth-gas-reporter/node_modules/strip-ansi": { + "node_modules/hardhat/node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, - "peer": true, "dependencies": { - "ansi-regex": "^3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "node_modules/hardhat/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "peer": true, "dependencies": { - "js-sha3": "^0.8.0" + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "node_modules/hardhat/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/hardhat/node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" } }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, - "peer": true, "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=4" } }, - "node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dev": true, - "peer": true, "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">= 0.4" } }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", "dev": true, "peer": true }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-estree": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.28.1.tgz", + "integrity": "sha512-w3nxl/RGM7LBae0v8LH2o36+8VqwOZGv9rX1wyoWT6YaKZLqpJZ0YQ5P0LVr3tuRpf7vCx0iIG4i/VmBJejxTQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/hermes-parser": { + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.28.1.tgz", + "integrity": "sha512-nf8o+hE8g7UJWParnccljHumE9Vlq8F7MqIdeahl+4x0tvCUJYRrT0L7h0MMg/X9YJmkNwsfbaNNrzPtFXOscg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "hermes-estree": "0.28.1" } }, - "node_modules/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", "dev": true, + "peer": true, "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/extendable-error": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", - "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", - "dev": true, - "license": "MIT" + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, - "license": "MIT", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "^10.0.3" + } }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true, + "peer": true }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "node_modules/http2-wrapper": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", + "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" }, "engines": { - "node": ">=8.6.0" + "node": ">=10.19.0" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "agent-base": "6", + "debug": "4" }, "engines": { "node": ">= 6" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "node_modules/human-id": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz", + "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==", + "dev": true, + "license": "MIT" }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "reusify": "^1.0.4" + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/jimmywarting" + "url": "https://github.com/sponsors/feross" }, { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } + "license": "BSD-3-Clause" }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 4" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/image-size": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", + "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "to-regex-range": "^5.0.1" + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" }, "engines": { - "node": ">=8" + "node": ">=16.x" } }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "node_modules/immer": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.3.tgz", + "integrity": "sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==", "dev": true, - "peer": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "bin": { - "flat": "cli.js" + "engines": { + "node": ">=0.8.19" } }, - "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, "engines": { - "node": ">=12.0.0" + "node": ">=8" } }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" + "dependencies": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "engines": { + "node": ">= 0.4" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, - "dependencies": { - "is-callable": "^1.1.3" + "peer": true, + "engines": { + "node": ">= 0.10" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "loose-envify": "^1.0.0" } }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", "dev": true, - "engines": { - "node": ">= 14.17" + "dependencies": { + "fp-ts": "^1.0.0" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "dependencies": { - "fetch-blob": "^3.1.2" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" }, - "engines": { - "node": ">=12.20.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=14.14" + "node": ">=8" } }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "peer": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6273,96 +10582,102 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/fx": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/fx/-/fx-30.2.0.tgz", - "integrity": "sha512-rIYQBmx85Jfhd3pkSw06YPgvSvfTi022ZXTeFDkcCZGCs5nt3sjqFBGtcMFe1TR2S00RDz63be0ab5mhCiOLBw==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "license": "MIT", + "peer": true, "bin": { - "fx": "index.js" + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=0.10.0" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "is-extglob": "^2.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", "dev": true, - "peer": true, "engines": { - "node": ">=4" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.12.0" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6371,127 +10686,102 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "engines": { + "node": ">=8" } }, - "node_modules/ghost-testrpc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", - "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "peer": true, - "dependencies": { - "chalk": "^2.4.2", - "node-emoji": "^1.10.0" - }, - "bin": { - "testrpc-sc": "index.js" + "engines": { + "node": ">=8" } }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "*" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=10.13.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "peer": true, "dependencies": { - "global-prefix": "^3.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "peer": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "node": ">= 0.4" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "better-path-resolve": "1.0.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=4" } }, - "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -6500,191 +10790,206 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "peer": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": ">=8" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "node_modules/isomorphic-unfetch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-4.0.2.tgz", + "integrity": "sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA==", + "dev": true, + "dependencies": { + "node-fetch": "^3.2.0", + "unfetch": "^5.0.0" + } + }, + "node_modules/isows": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.3.tgz", + "integrity": "sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, "engines": { - "node": ">=0.4.7" + "node": ">=8" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/hardhat": { - "version": "2.22.15", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.15.tgz", - "integrity": "sha512-BpTGa9PE/sKAaHi4s/S1e9WGv63DR1m7Lzfd60C8gSEchDPfAJssVRSq0MZ2v2k76ig9m0kHAwVLf5teYwu/Mw==", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.6.4", - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-tx": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "boxen": "^5.1.2", - "chalk": "^2.4.2", - "chokidar": "^4.0.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "json-stream-stringify": "^3.1.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.8.26", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "bin": { - "hardhat": "internal/cli/bootstrap.js" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/hardhat-contract-sizer": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz", - "integrity": "sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "cli-table3": "^0.6.0", - "strip-ansi": "^6.0.0" + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, - "peerDependencies": { - "hardhat": "^2.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/hardhat-contract-sizer/node_modules/ansi-styles": { + "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -6695,11 +11000,13 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/hardhat-contract-sizer/node_modules/chalk": { + "node_modules/jest-message-util/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6711,11 +11018,13 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/hardhat-contract-sizer/node_modules/color-convert": { + "node_modules/jest-message-util/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -6723,26 +11032,32 @@ "node": ">=7.0.0" } }, - "node_modules/hardhat-contract-sizer/node_modules/color-name": { + "node_modules/jest-message-util/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/hardhat-contract-sizer/node_modules/has-flag": { + "node_modules/jest-message-util/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/hardhat-contract-sizer/node_modules/supports-color": { + "node_modules/jest-message-util/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -6750,1128 +11065,1296 @@ "node": ">=8" } }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", - "integrity": "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.25", - "sha1": "^1.1.1" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, - "peerDependencies": { - "hardhat": "^2.0.2" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/hardhat/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/hardhat/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "license": "MIT", + "peer": true, "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/hardhat/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/hardhat/node_modules/chokidar": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", - "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "readdirp": "^4.0.1" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/hardhat/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/hardhat/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "locate-path": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/hardhat/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=7.0.0" } }, - "node_modules/hardhat/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "license": "MIT", + "peer": true }, - "node_modules/hardhat/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, + "license": "MIT", + "peer": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/hardhat/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "p-try": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/hardhat/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "p-limit": "^1.1.0" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/hardhat/node_modules/readdirp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", - "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" + "node": ">=8" } }, - "node_modules/hardhat/node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "path-parse": "^1.0.6" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/hardhat/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">=10" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "node_modules/js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "BSD-3-Clause" }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, - "engines": { - "node": ">=4" - } + "license": "MIT" }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/jsc-safe-url": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", "dev": true, - "engines": { - "node": ">= 0.4" + "license": "0BSD", + "peer": true + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stream-stringify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", + "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=7.10.1" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "minimist": "^1.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=4" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/jsonschema": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "peer": true, + "engines": { + "node": "*" } }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", "dev": true, + "hasInstallScript": true, "dependencies": { - "function-bind": "^1.1.2" + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10.0.0" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "bin": { - "he": "bin/he" + "dependencies": { + "json-buffer": "3.0.1" } }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true, - "peer": true - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "peer": true, - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, "engines": { - "node": ">=6.0.0" + "node": ">=6" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8.0" } }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", "dev": true, + "license": "Apache-2.0", "peer": true, "dependencies": { - "@types/node": "^10.0.3" + "debug": "^2.6.9", + "marky": "^1.2.2" } }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true, - "peer": true - }, - "node_modules/http2-wrapper": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", - "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" + "ms": "2.0.0" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } + "license": "MIT", + "peer": true }, - "node_modules/human-id": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz", - "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==", - "dev": true, - "license": "MIT" + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "node_modules/immer": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.3.tgz", - "integrity": "sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==", + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } + "license": "MIT" + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "dev": true }, - "node_modules/immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" + "node": ">=7.0.0" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.10" - } + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "fp-ts": "^1.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "Apache-2.0" }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "binary-extensions": "^2.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "get-func-name": "^2.0.1" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, "engines": { - "node": ">= 0.4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, + "license": "ISC", "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "peer": true }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "tmpl": "1.0.5" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", "dev": true, - "engines": { - "node": ">=8" - } + "peer": true + }, + "node_modules/marky": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz", + "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", "dev": true, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } + "license": "MIT", + "peer": true }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.10.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "engines": { - "node": ">=0.12.0" + "node": ">= 8" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/metro": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.82.4.tgz", + "integrity": "sha512-/gFmw3ux9CPG5WUmygY35hpyno28zi/7OUn6+OFfbweA8l0B+PPqXXLr0/T6cf5nclCcH0d22o+02fICaShVxw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "@babel/code-frame": "^7.24.7", + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "@babel/types": "^7.25.2", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.28.1", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.82.4", + "metro-cache": "0.82.4", + "metro-cache-key": "0.82.4", + "metro-config": "0.82.4", + "metro-core": "0.82.4", + "metro-file-map": "0.82.4", + "metro-resolver": "0.82.4", + "metro-runtime": "0.82.4", + "metro-source-map": "0.82.4", + "metro-symbolicate": "0.82.4", + "metro-transform-plugins": "0.82.4", + "metro-transform-worker": "0.82.4", + "mime-types": "^2.1.27", + "nullthrows": "^1.1.1", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "throat": "^5.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" }, - "engines": { - "node": ">= 0.4" + "bin": { + "metro": "src/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, "engines": { - "node": ">=8" + "node": ">=18.18" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/metro-babel-transformer": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.82.4.tgz", + "integrity": "sha512-4juJahGRb1gmNbQq48lNinB6WFNfb6m0BQqi/RQibEltNiqTCxew/dBspI2EWA4xVCd3mQWGfw0TML4KurQZnQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@babel/core": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.28.1", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18.18" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "node_modules/metro-cache": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.82.4.tgz", + "integrity": "sha512-vX0ylSMGtORKiZ4G8uP6fgfPdDiCWvLZUGZ5zIblSGylOX6JYhvExl0Zg4UA9pix/SSQu5Pnp9vdODMFsNIxhw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "call-bind": "^1.0.2" + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "https-proxy-agent": "^7.0.5", + "metro-core": "0.82.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=18.18" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/metro-cache-key": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.82.4.tgz", + "integrity": "sha512-2JCTqcpF+f2OghOpe/+x+JywfzDkrHdAqinPFWmK2ezNAU/qX0jBFaTETogPibFivxZJil37w9Yp6syX8rFUng==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "flow-enums-runtime": "^0.0.6" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18.18" } }, - "node_modules/is-subdir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", - "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", + "node_modules/metro-cache/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, "license": "MIT", - "dependencies": { - "better-path-resolve": "1.0.0" - }, + "peer": true, "engines": { - "node": ">=4" + "node": ">= 14" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/metro-cache/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "has-symbols": "^1.0.2" + "agent-base": "^7.1.2", + "debug": "4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 14" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "node_modules/metro-config": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.82.4.tgz", + "integrity": "sha512-Ki3Wumr3hKHGDS7RrHsygmmRNc/PCJrvkLn0+BWWxmbOmOcMMJDSmSI+WRlT8jd5VPZFxIi4wg+sAt5yBXAK0g==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "which-typed-array": "^1.1.11" + "connect": "^3.6.5", + "cosmiconfig": "^5.0.5", + "flow-enums-runtime": "^0.0.6", + "jest-validate": "^29.7.0", + "metro": "0.82.4", + "metro-cache": "0.82.4", + "metro-core": "0.82.4", + "metro-runtime": "0.82.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=18.18" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/metro-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/metro-config/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "call-bind": "^1.0.2" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "node_modules/metro-config/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { + "node_modules/metro-config/node_modules/import-fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isomorphic-unfetch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-4.0.2.tgz", - "integrity": "sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA==", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "node-fetch": "^3.2.0", - "unfetch": "^5.0.0" - } - }, - "node_modules/isows": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.3.tgz", - "integrity": "sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wagmi-dev" - } - ], - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/metro-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "argparse": "^2.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "node_modules/metro-config/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/json-stream-stringify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz", - "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==", + "node_modules/metro-config/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">=7.10.1" + "node": ">=4" } }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/metro-core": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.82.4.tgz", + "integrity": "sha512-Xo4ozbxPg2vfgJGCgXZ8sVhC2M0lhTqD+tsKO2q9aelq/dCjnnSb26xZKcQO80CQOQUL7e3QWB7pLFGPjZm31A==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "minimist": "^1.2.0" + "flow-enums-runtime": "^0.0.6", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.82.4" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=18.18" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/metro-file-map": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.82.4.tgz", + "integrity": "sha512-eO7HD1O3aeNsbEe6NBZvx1lLJUrxgyATjnDmb7bm4eyF6yWOQot9XVtxTDLNifECuvsZ4jzRiTInrbmIHkTdGA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "universalify": "^2.0.0" + "debug": "^4.4.0", + "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=18.18" } }, - "node_modules/jsonschema": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", - "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", + "node_modules/metro-file-map/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "license": "MIT", "peer": true, + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": "*" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "node_modules/metro-file-map/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "hasInstallScript": true, + "license": "MIT", + "peer": true + }, + "node_modules/metro-minify-terser": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.82.4.tgz", + "integrity": "sha512-W79Mi6BUwWVaM8Mc5XepcqkG+TSsCyyo//dmTsgYfJcsmReQorRFodil3bbJInETvjzdnS1mCsUo9pllNjT1Hg==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" + "flow-enums-runtime": "^0.0.6", + "terser": "^5.15.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.18" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/metro-resolver": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.82.4.tgz", + "integrity": "sha512-uWoHzOBGQTPT5PjippB8rRT3iI9CTgFA9tRiLMzrseA5o7YAlgvfTdY9vFk2qyk3lW3aQfFKWkmqENryPRpu+Q==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "json-buffer": "3.0.1" + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/metro-runtime": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.82.4.tgz", + "integrity": "sha512-vVyFO7H+eLXRV2E7YAUYA7aMGBECGagqxmFvC2hmErS7oq90BbPVENfAHbUWq1vWH+MRiivoRxdxlN8gBoF/dw==", "dev": true, + "license": "MIT", "peer": true, + "dependencies": { + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18.18" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/metro-source-map": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.82.4.tgz", + "integrity": "sha512-9jzDQJ0FPas1FuQFtwmBHsez2BfhFNufMowbOMeG3ZaFvzeziE8A0aJwILDS3U+V5039ssCQFiQeqDgENWvquA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "@babel/traverse": "^7.25.3", + "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.82.4", + "nullthrows": "^1.1.1", + "ob1": "0.82.4", + "source-map": "^0.5.6", + "vlq": "^1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=18.18" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "node_modules/metro-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/metro-symbolicate": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.82.4.tgz", + "integrity": "sha512-LwEwAtdsx7z8rYjxjpLWxuFa2U0J6TS6ljlQM4WAATKa4uzV8unmnRuN2iNBWTmRqgNR77mzmI2vhwD4QSCo+w==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "p-locate": "^5.0.0" + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.82.4", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "vlq": "^1.0.0" }, - "engines": { - "node": ">=10" + "bin": { + "metro-symbolicate": "src/index.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=18.18" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "node_modules/metro-symbolicate/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "peer": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", - "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "node_modules/metro-transform-plugins": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.82.4.tgz", + "integrity": "sha512-NoWQRPHupVpnDgYguiEcm7YwDhnqW02iWWQjO2O8NsNP09rEMSq99nPjARWfukN7+KDh6YjLvTIN20mj3dk9kw==", "dev": true, - "license": "MIT" - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "flow-enums-runtime": "^0.0.6", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18.18" + } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/metro-transform-worker": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.82.4.tgz", + "integrity": "sha512-kPI7Ad/tdAnI9PY4T+2H0cdgGeSWWdiPRKuytI806UcN4VhFL6OmYa19/4abYVYF+Cd2jo57CDuwbaxRfmXDhw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "metro": "0.82.4", + "metro-babel-transformer": "0.82.4", + "metro-cache": "0.82.4", + "metro-cache-key": "0.82.4", + "metro-minify-terser": "0.82.4", + "metro-source-map": "0.82.4", + "metro-transform-plugins": "0.82.4", + "nullthrows": "^1.1.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18.18" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { + "node_modules/metro/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -7882,11 +12365,13 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/log-symbols/node_modules/chalk": { + "node_modules/metro/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7898,11 +12383,29 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/log-symbols/node_modules/color-convert": { + "node_modules/metro/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/metro/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -7910,26 +12413,70 @@ "node": ">=7.0.0" } }, - "node_modules/log-symbols/node_modules/color-name": { + "node_modules/metro/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/metro/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } }, - "node_modules/log-symbols/node_modules/has-flag": { + "node_modules/metro/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/log-symbols/node_modules/supports-color": { + "node_modules/metro/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/metro/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -7937,91 +12484,58 @@ "node": ">=8" } }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "node_modules/metro/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8.3.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "peer": true - }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", - "dev": true - }, - "node_modules/markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", - "dev": true, - "peer": true - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/metro/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, "engines": { - "node": ">= 0.10.0" + "node": ">=12" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/metro/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", + "peer": true, "engines": { - "node": ">= 8" + "node": ">=12" } }, "node_modules/micro-ftch": { @@ -8044,6 +12558,20 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -8280,6 +12808,17 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -8350,6 +12889,22 @@ "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/nofilter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", @@ -8394,6 +12949,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/number-to-bn": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", @@ -8416,6 +12979,20 @@ "dev": true, "peer": true }, + "node_modules/ob1": { + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.82.4.tgz", + "integrity": "sha512-n9S8e4l5TvkrequEAMDidl4yXesruWTNTzVkeaHSGywoTOIwTzZzKw7Z670H3eaXDZui5MJXjWGNzYowVZIxCA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -8514,6 +13091,30 @@ "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", "dev": true }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -8523,6 +13124,24 @@ "wrappy": "1" } }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -8744,6 +13363,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -8821,9 +13451,9 @@ } }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, @@ -8848,6 +13478,82 @@ "node": ">=6" } }, + "node_modules/pino": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.7.0.tgz", + "integrity": "sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-pretty": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.0.0.tgz", + "integrity": "sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.2", + "fast-safe-stringify": "^2.1.1", + "help-me": "^5.0.0", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pump": "^3.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^4.0.1", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -8934,12 +13640,42 @@ "node": ">=10" } }, - "node_modules/prettier-plugin-solidity/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, + "node_modules/prettier-plugin-solidity/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -8947,6 +13683,23 @@ "dev": true, "peer": true }, + "node_modules/process-warning": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, "node_modules/promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", @@ -8963,6 +13716,31 @@ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, + "node_modules/protobufjs": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", + "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", + "dev": true, + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -8992,6 +13770,17 @@ "dev": true, "license": "ISC" }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -9001,6 +13790,33 @@ "node": ">=6" } }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvtsutils/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/pvutils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", + "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/qs": { "version": "6.11.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", @@ -9017,6 +13833,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -9037,6 +13864,13 @@ } ] }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "dev": true, + "license": "MIT" + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -9064,6 +13898,17 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/raw-body": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", @@ -9076,29 +13921,317 @@ "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-6.1.2.tgz", + "integrity": "sha512-ldFwzufLletzCikNJVYaxlxMLu7swJ3T2VrGfzXlMsVhZhPDKXA38DEROidaYZVgMAmQnIjymrmqto5pyfrwPA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/react-native": { + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.80.0.tgz", + "integrity": "sha512-b9K1ygb2MWCBtKAodKmE3UsbUuC29Pt4CrJMR0ocTA8k+8HJQTPleBPDNKL4/p0P01QO9aL/gZUddoxHempLow==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/create-cache-key-function": "^29.7.0", + "@react-native/assets-registry": "0.80.0", + "@react-native/codegen": "0.80.0", + "@react-native/community-cli-plugin": "0.80.0", + "@react-native/gradle-plugin": "0.80.0", + "@react-native/js-polyfills": "0.80.0", + "@react-native/normalize-colors": "0.80.0", + "@react-native/virtualized-lists": "0.80.0", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "babel-jest": "^29.7.0", + "babel-plugin-syntax-hermes-parser": "0.28.1", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "commander": "^12.0.0", + "flow-enums-runtime": "^0.0.6", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jest-environment-node": "^29.7.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.82.2", + "metro-source-map": "^0.82.2", + "nullthrows": "^1.1.1", + "pretty-format": "^29.7.0", + "promise": "^8.3.0", + "react-devtools-core": "^6.1.1", + "react-refresh": "^0.14.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.26.0", + "semver": "^7.1.3", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.3", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^19.1.0", + "react": "^19.1.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-native-get-random-values": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.11.0.tgz", + "integrity": "sha512-4BTbDbRmS7iPdhYLRcz3PGFIpFJBwNZg9g42iwa2P6FOv9vZj/xJc678RZXnLNZzd0qd7Q3CCF6Yd+CU2eoXKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-base64-decode": "^1.0.0" + }, + "peerDependencies": { + "react-native": ">=0.56" + } + }, + "node_modules/react-native/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-native/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/react-native/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/react-native/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/react-native/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/react-native/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/react-native/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-native/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/react-native/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-native/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-native/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/react-native/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "node_modules/react-native/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -9183,6 +14316,16 @@ "node": ">=8.10.0" } }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -9402,6 +14545,13 @@ "node": ">=0.10.0" } }, + "node_modules/rfc4648": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.4.tgz", + "integrity": "sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==", + "dev": true, + "license": "MIT" + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -9514,6 +14664,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -9644,6 +14804,14 @@ "which": "bin/which" } }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", @@ -9665,6 +14833,13 @@ "node": ">=10.0.0" } }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -9674,6 +14849,84 @@ "semver": "bin/semver.js" } }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -9683,6 +14936,34 @@ "randombytes": "^2.1.0" } }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/set-function-length": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", @@ -9772,6 +15053,20 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", @@ -10236,6 +15531,16 @@ "hardhat": "^2.8.0" } }, + "node_modules/sonic-boom": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "dev": true, + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, "node_modules/source-map": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", @@ -10269,6 +15574,13 @@ "node": ">=0.10.0" } }, + "node_modules/spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, "node_modules/spawndamnit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz", @@ -10340,12 +15652,55 @@ "node": "*" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/stacktrace-parser": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", @@ -10642,6 +15997,50 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/terser": { + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.14.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -10693,6 +16092,24 @@ "node": ">= 0.12" } }, + "node_modules/thread-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -10717,6 +16134,14 @@ "node": ">=0.6.0" } }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -11242,6 +16667,38 @@ "node": ">= 0.8" } }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -11255,8 +16712,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true, - "peer": true + "dev": true }, "node_modules/util-deprecate": { "version": "1.0.2", @@ -11264,6 +16720,17 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -11369,6 +16836,25 @@ } } }, + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/web-streams-polyfill": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", @@ -11420,6 +16906,14 @@ "webpod": "dist/index.js" } }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -11584,6 +17078,21 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", diff --git a/package.json b/package.json index 5b62c7c5..8795781e 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "@axelar-network/axelar-chains-config": "^1.3.0", "@axelarjs/evm": "^0.2.1", "@changesets/cli": "^2.27.9", + "@hashgraph/sdk": "^2.66.0", "@nomicfoundation/hardhat-toolbox": "^2.0.2", "@tsconfig/strictest": "^2.0.2", "chai": "^4.3.7", diff --git a/scripts/deploy-whbar.js b/scripts/deploy-whbar.js index 46dd41a7..0955fbea 100644 --- a/scripts/deploy-whbar.js +++ b/scripts/deploy-whbar.js @@ -4,7 +4,7 @@ async function deployWHBAR(wallet) { const factory = await ethers.getContractFactory('WHBAR', wallet); const whbar = await factory.deploy().then((d) => d.deployed()); - console.log(`WHBAR deployed to: ${whbar.address}`); + console.log(`Deployed WHBAR to ${whbar.address}`); return whbar; } diff --git a/scripts/deploy.js b/scripts/deploy.js index c2fda30d..0f8ddfaf 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -15,6 +15,7 @@ const HTS_LIBRARY_NAME = 'contracts/hedera/HTS.sol:HTS'; // List of contracts that depend on HTS library const HTS_DEPENDENT_CONTRACTS = [ 'InterchainTokenService', + 'InterchainTokenFactory', 'InterchainTokenDeployer', 'TokenManager', // Test @@ -27,6 +28,7 @@ const HTS_DEPENDENT_CONTRACTS = [ const deploymentContext = { htsAddress: null, whbarAddress: null, + contracts: {}, }; function getCurrentHTSAddress() { @@ -38,6 +40,13 @@ function getCurrentWHBARAddress() { } async function deployContract(wallet, contractName, args = [], additionalLibraries = {}, htsAddress = null) { + // Check if contract already exists in deployment context + if (deploymentContext.contracts[contractName]) { + console.log(`Using existing ${contractName} at ${deploymentContext.contracts[contractName]}`); + const contract = await ethers.getContractAt(contractName, deploymentContext.contracts[contractName], wallet); + return contract; + } + const libraries = { ...additionalLibraries }; // Automatically add HTS library for dependent contracts @@ -45,9 +54,8 @@ async function deployContract(wallet, contractName, args = [], additionalLibrari let currentHtsAddress = htsAddress || deploymentContext.htsAddress; if (!currentHtsAddress) { - console.log('Deploying HTS library for', contractName); currentHtsAddress = await deployHTS(wallet); - console.log('HTS library deployed to', currentHtsAddress); + console.log('Deployed HTS library to', currentHtsAddress); deploymentContext.htsAddress = currentHtsAddress; } @@ -62,6 +70,9 @@ async function deployContract(wallet, contractName, args = [], additionalLibrari console.log(`Deployed ${contractName} to ${contract.address}`); + // Store the new address in deployment context + deploymentContext.contracts[contractName] = contract.address; + return contract; } @@ -108,6 +119,7 @@ async function deployInterchainTokenService( ownerAddress, defaultAbiCoder.encode(['address', 'string', 'string[]'], [operatorAddress, chainName, evmChains]), ]); + console.log(`Deployed InterchainTokenServiceProxy to ${proxy.address}`); const service = new Contract(proxy.address, implementation.interface, wallet); return service; } @@ -119,6 +131,7 @@ async function deployInterchainTokenFactory(wallet, create3DeployerAddress, inte wallet.address, '0x', ]); + console.log(`Deployed InterchainTokenFactoryProxy to ${proxy.address}`); const factory = new Contract(proxy.address, implementation.interface, wallet); return factory; } @@ -132,7 +145,7 @@ async function deployAll( factoryDeploymentKey = deploymentKey + 'Factory', htsAddress = null, whbarAddress = null, - fundingAmount = '10', // Default 10 HBAR funding for ITS + fundingAmount = '20', // Default 20 HBAR funding for ITS ) { // Print wallet balance const balance = await wallet.getBalance(); @@ -152,7 +165,6 @@ async function deployAll( let whbar; if (!deploymentContext.whbarAddress) { - console.log('Deploying WHBAR...'); whbar = await deployWHBAR(wallet); deploymentContext.whbarAddress = whbar.address; } else { @@ -162,7 +174,7 @@ async function deployAll( const interchainTokenServiceAddress = await getCreate3Address(create3Deployer.address, wallet, deploymentKey); const tokenManagerDeployer = await deployContract(wallet, 'TokenManagerDeployer', []); - const interchainToken = await deployContract(wallet, 'InterchainToken', [interchainTokenServiceAddress]); + // const interchainToken = await deployContract(wallet, 'InterchainToken', [interchainTokenServiceAddress]); const interchainTokenDeployer = await deployContract(wallet, 'InterchainTokenDeployer'); const tokenManager = await deployContract(wallet, 'TokenManager', [interchainTokenServiceAddress]); const tokenHandler = await deployContract(wallet, 'TokenHandler', []); @@ -191,6 +203,14 @@ async function deployAll( await setWhbarTx.wait(); console.log(`WHBAR address set on ITS: ${whbar.address}`); + // Set WHBAR address on ITS + console.log('Setting token creation price on ITS...'); + // $1 = 100 cents = 100 * 10^8 tinycents + const price = 100 * 10 ** 8; + const setTokenCreationPrice = await service.setTokenCreationPrice(price); + await setTokenCreationPrice.wait(); + console.log(`Token creation price set on ITS: ${price} tinycents`); + // Fund ITS with WHBAR if funding amount is specified if (fundingAmount && parseFloat(fundingAmount) > 0) { const fundingAmountWei = ethers.utils.parseEther(fundingAmount); @@ -211,7 +231,7 @@ async function deployAll( tokenFactory, create3Deployer, tokenManagerDeployer, - interchainToken, + // interchainToken, interchainTokenDeployer, tokenManager, tokenHandler, diff --git a/scripts/token-associate.js b/scripts/token-associate.js new file mode 100644 index 00000000..a313e682 --- /dev/null +++ b/scripts/token-associate.js @@ -0,0 +1,83 @@ +require('dotenv').config(); + +const { Client, PrivateKey, TokenAssociateTransaction, TokenId, AccountId } = require('@hashgraph/sdk'); + +// Configure accounts and client +const accPk = PrivateKey.fromStringECDSA(process.env.HEDERA_PK); +console.log('Account EVM address: 0x%s', accPk.publicKey.toEvmAddress()); + +// const accId = accPk.toAccountId(0, 0); +const accId = AccountId.fromString('0.0.1012'); +console.log('Account ID: ', accId.toString()); + +// TODO allow change from local node to testnet/mainnet +const client = Client.forLocalNode().setOperator(accId, accPk); + +/** + * Convert EVM address to Hedera token ID format + * @param {string} evmAddress - EVM address (0x...) + * @returns {string} - Hedera token ID format (0.0.xxxxx) + */ +function evmAddressToTokenId(evmAddress) { + // Return in Hedera format + return TokenId.fromSolidityAddress(evmAddress); +} + +/** + * Associate a token with an account + * @param {Client} client - Hedera client + * @param {string} tokenId - Token ID in Hedera format (0.0.xxxxx) + * @param {AccountId} accountId - Account ID + * @param {PrivateKey} privateKey - Private key + */ +async function associateToken(client, tokenId, accountId, privateKey) { + const associateTx = new TokenAssociateTransaction().setAccountId(accountId).setTokenIds([tokenId]).freezeWith(client); + + const signTx = await associateTx.sign(privateKey); + const submitTx = await signTx.execute(client); + const receipt = await submitTx.getReceipt(client); + + console.log('Token associated with account successfully'); + console.log('Receipt status:', receipt.status.toString()); + + return receipt; +} + +// CLI functionality +async function main() { + const args = process.argv.slice(2); + + if (args.length === 0) { + console.error('Usage: node token-associate.js '); + console.error('Example: node token-associate.js 0x52C2B8'); + process.exit(1); + } + + const tokenEvmAddress = args[0]; + + try { + // Convert EVM address to Hedera token ID format + const tokenId = evmAddressToTokenId(tokenEvmAddress); + console.log('Token EVM Address:', tokenEvmAddress); + console.log('Token ID (Hedera format):', tokenId.toString()); + + // Associate the token + await associateToken(client, tokenId, accId, accPk); + + process.exit(0); + } catch (error) { + console.error('Error associating token:', error.message); + process.exit(1); + } +} + +// Export functions for use as module +module.exports = { + associateToken, + evmAddressToTokenId, +}; + +// Run main function if script is executed directly +if (require.main === module) { + main().catch(console.error); +} diff --git a/test/HederaBasic.js b/test/HederaBasic.js new file mode 100644 index 00000000..41f6abc2 --- /dev/null +++ b/test/HederaBasic.js @@ -0,0 +1,94 @@ +'use strict'; + +const chai = require('chai'); +const { expect } = chai; +const { ethers } = require('hardhat'); +const { + Wallet, + constants: { MaxUint256, AddressZero, HashZero }, + utils: { defaultAbiCoder, solidityPack, keccak256, toUtf8Bytes, hexlify, id, randomBytes }, + getContractAt, +} = ethers; + +const { getCreate3Address } = require('@axelar-network/axelar-gmp-sdk-solidity'); +const { approveContractCall } = require('../scripts/utils'); +const { + getRandomBytes32, + getRandomInt, + expectRevert, + gasReporter, + getEVMVersion, + encodeInterchainTransferMessage, + encodeDeployInterchainTokenMessage, + encodeDeployTokenManagerMessage, + encodeSendHubMessage, + encodeReceiveHubMessage, + encodeLinkTokenMessage, + encodeRegisterTokenMetadataMessage, + expectNonZeroAddress, +} = require('./utils'); +const { deployAll, deployContract, deployInterchainTokenService } = require('../scripts/deploy'); +const { + MESSAGE_TYPE_INTERCHAIN_TRANSFER, + MESSAGE_TYPE_DEPLOY_TOKEN_MANAGER, + INVALID_MESSAGE_TYPE, + NATIVE_INTERCHAIN_TOKEN, + MINT_BURN_FROM, + LOCK_UNLOCK, + LOCK_UNLOCK_FEE_ON_TRANSFER, + MINT_BURN, + OPERATOR_ROLE, + FLOW_LIMITER_ROLE, + ITS_HUB_CHAIN, + ITS_HUB_ADDRESS, + MINTER_ROLE, + MESSAGE_TYPE_SEND_TO_HUB, + INTERCHAIN_TRANSFER, + INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE, +} = require('./constants'); +const { deployWHBAR, fundWithWHBAR } = require('../scripts/deploy-whbar'); + +describe.only('HederaBasic', () => { + let wallet, otherWallet; + let service, gateway, gasService, whbar; + + let create3Deployer; + let tokenManagerDeployer; + let interchainTokenDeployer; + let tokenManager; + let tokenHandler; + + const chainName = 'Test'; + + const destinationChain = 'destination chain'; + const sourceChain = 'source chain'; + + before(async () => { + const wallets = await ethers.getSigners(); + wallet = wallets[0]; + otherWallet = wallets[1]; + + ({ + service, + gateway, + gasService, + create3Deployer, + tokenManagerDeployer, + interchainTokenDeployer, + tokenManager, + tokenHandler, + whbar, + } = await deployAll(wallet, 'Test', ITS_HUB_ADDRESS, [sourceChain, destinationChain])); + }); + + it('should deploy InterchainTokenService', async () => { + const chainNameHash = await service.chainNameHash(); + console.log('Chain Name Hash:', chainNameHash); + expect(chainNameHash).to.equal(keccak256(chainName)); + }); + + it('should be funded with WHBAR', async () => { + const balance = await whbar.balanceOf(service.address); + expect(balance).to.be.gt(0, 'Service should have a non-zero WHBAR balance'); + }); +}); From f7c81fbe40a7604de6ff6d17b809d4d07cf25944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Tue, 1 Jul 2025 17:17:20 +0200 Subject: [PATCH 17/49] set `tokenCreationPrice` during ITS setup --- contracts/InterchainTokenService.sol | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index 7227d692..a7ace2fc 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -645,7 +645,10 @@ contract InterchainTokenService is \****************/ function _setup(bytes calldata params) internal override { - (address operator, string memory chainName_, string[] memory trustedChainNames) = abi.decode(params, (address, string, string[])); + (address operator, string memory chainName_, string[] memory trustedChainNames, uint256 _tokenCreationPrice) = abi.decode( + params, + (address, string, string[], uint256) + ); if (operator == address(0)) revert ZeroAddress(); if (bytes(chainName_).length == 0 || keccak256(bytes(chainName_)) != chainNameHash) revert InvalidChainName(); @@ -661,6 +664,8 @@ contract InterchainTokenService is _removeTrustedAddress(trustedChainName); } } + + _setTokenCreationPrice(_tokenCreationPrice); } /** From 7f2537197fbdca7c598c8663bc97ed5992b9a003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Tue, 1 Jul 2025 17:17:41 +0200 Subject: [PATCH 18/49] optionally include a Hedera testnet account in hardhat config --- hardhat.config.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/hardhat.config.js b/hardhat.config.js index 766e8306..a5bb957b 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -10,6 +10,14 @@ const chains = require(`@axelar-network/axelar-chains-config/info/${env}.json`); const keys = readJSON(`${__dirname}/keys.json`); const { networks, etherscan } = importNetworks(chains, keys); +if (typeof process.env.HEDERA_TESTNET_PK_HEX === 'string') { + networks.testnet = { + url: 'https://testnet.hashio.io/api', + accounts: [process.env.HEDERA_TESTNET_PK_HEX], + chainId: 296, + }; +} + const optimizerSettings = { enabled: true, runs: 1000, @@ -87,11 +95,6 @@ module.exports = { ], chainId: 298, }, - testnet: { - url: 'https://testnet.hashio.io/api', - accounts: [process.env.HEDERA_TESTNET_PK_HEX], - chainId: 296, - }, }, etherscan, mocha: { From f477f741d4e5f4b902cfea556c895f11ba3b455b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Tue, 1 Jul 2025 17:44:25 +0200 Subject: [PATCH 19/49] remove `migrateInterchainToken` support --- contracts/InterchainTokenService.sol | 11 ----- .../interfaces/IInterchainTokenService.sol | 6 --- test/InterchainTokenFactory.js | 19 ------- test/InterchainTokenService.js | 49 ------------------- 4 files changed, 85 deletions(-) diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index a7ace2fc..5c239cc1 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -629,17 +629,6 @@ contract InterchainTokenService is } } - /** - * @notice Allows the owner to migrate minter of native interchain tokens from ITS to the corresponding token manager. - * @param tokenId the tokenId of the registered token. - * @dev TODO(hedera) should this be removed? - */ - function migrateInterchainToken(bytes32 tokenId) external onlyOwner { - ITokenManager tokenManager_ = deployedTokenManager(tokenId); - address tokenAddress = tokenManager_.tokenAddress(); - IMinter(tokenAddress).transferMintership(address(tokenManager_)); - } - /****************\ INTERNAL FUNCTIONS \****************/ diff --git a/contracts/interfaces/IInterchainTokenService.sol b/contracts/interfaces/IInterchainTokenService.sol index 3959c713..ebf95d00 100644 --- a/contracts/interfaces/IInterchainTokenService.sol +++ b/contracts/interfaces/IInterchainTokenService.sol @@ -296,10 +296,4 @@ interface IInterchainTokenService is * @param paused whether to pause or unpause. */ function setPauseStatus(bool paused) external; - - /** - * @notice Allows the owner to migrate legacy tokens that cannot be migrated automatically. - * @param tokenId the tokenId of the registered token. - */ - function migrateInterchainToken(bytes32 tokenId) external; } diff --git a/test/InterchainTokenFactory.js b/test/InterchainTokenFactory.js index 35d38eb9..5933f435 100644 --- a/test/InterchainTokenFactory.js +++ b/test/InterchainTokenFactory.js @@ -619,25 +619,6 @@ describe('InterchainTokenFactory', () => { ); }); - it.skip('Should not be able to migrate a token deployed after this upgrade', async () => { - const salt = getRandomBytes32(); - const name = 'migrated token'; - const symbol = 'MT'; - const decimals = 53; - const tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); - - await tokenFactory.deployInterchainToken(salt, name, symbol, decimals, 0, wallet.address).then((tx) => tx.wait()); - const tokenManagerAddress = await service.tokenManagerAddress(tokenId); - const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); - const tokenAddress = await tokenManager.tokenAddress(); - const token = await getContractAt('InterchainToken', tokenAddress, wallet); - - await expectRevert((gasOptions) => service.migrateInterchainToken(tokenId, { gasOptions }), token, 'MissingRole', [ - service.address, - MINTER_ROLE, - ]); - }); - describe('Custom Token Manager Deployment', () => { const tokenName = 'Token Name'; const tokenSymbol = 'TN'; diff --git a/test/InterchainTokenService.js b/test/InterchainTokenService.js index d847a73b..066d5be9 100644 --- a/test/InterchainTokenService.js +++ b/test/InterchainTokenService.js @@ -2927,55 +2927,6 @@ describe('Interchain Token Service', () => { }); }); - describe('Interchain Token Migration', () => { - it('Should migrate a token succesfully', async () => { - const name = 'migrated token'; - const symbol = 'MT'; - const decimals = 53; - - const [token, tokenManager, tokenId] = await deployFunctions.interchainToken(service, name, symbol, decimals, service.address); - - await expect(service.migrateInterchainToken(tokenId)) - .to.emit(token, 'RolesRemoved') - .withArgs(service.address, 1 << MINTER_ROLE) - .to.emit(token, 'RolesAdded') - .withArgs(tokenManager.address, 1 << MINTER_ROLE); - }); - - it('Should not be able to migrate a token twice', async () => { - const name = 'migrated token'; - const symbol = 'MT'; - const decimals = 53; - - const [token, tokenManager, tokenId] = await deployFunctions.interchainToken(service, name, symbol, decimals, service.address); - - await expect(service.migrateInterchainToken(tokenId)) - .to.emit(token, 'RolesRemoved') - .withArgs(service.address, 1 << MINTER_ROLE) - .to.emit(token, 'RolesAdded') - .withArgs(tokenManager.address, 1 << MINTER_ROLE); - - await expectRevert((gasOptions) => service.migrateInterchainToken(tokenId, { gasOptions }), token, 'MissingRole', [ - service.address, - MINTER_ROLE, - ]); - }); - - it('Should not be able to migrate a token as not the owner', async () => { - const name = 'migrated token'; - const symbol = 'MT'; - const decimals = 53; - - const [, , tokenId] = await deployFunctions.interchainToken(service, name, symbol, decimals, service.address); - - await expectRevert( - (gasOptions) => service.connect(otherWallet).migrateInterchainToken(tokenId, gasOptions), - service, - 'NotOwner', - ); - }); - }); - describe('Bytecode checks [ @skip-on-coverage ]', () => { it('Should preserve the same proxy bytecode for each EVM', async () => { const proxyFactory = await ethers.getContractFactory('InterchainProxy', wallet); From 64037cc3cd5c3b5d218e2114e8d3da1e983cc2e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Thu, 3 Jul 2025 23:54:17 +0200 Subject: [PATCH 20/49] update hedera/README.md with the new design --- contracts/hedera/README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index 9df44090..d41f2870 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -2,7 +2,11 @@ ## Overview -ITS contracts in this repo are modified to support Hedera Token Service. All new interchain tokens will be created via HTS, while existing HTS and ERC20 tokens are supported for registration. New HTS Interchain tokens will have `InterchainTokenService` as the sole Supply Key ("MinterBurner" equivalent in Hedera) and Treasury (the contract that gets the newly minted coins). After minting, the Treasury transfers the tokens to the designated account. Before burning, the tokens are transfered back to the Treasury. ITS uses typical `allowance` and `transferFrom` to move tokens before burning. ITS keeps track of minters and allows for external minting and burning (see `TokenMinter.sol`). Certain ITS features are not supported due to HTS limitations, such as initial supply. +ITS contracts in this repo are modified to support Hedera Token Service. All new interchain tokens will be created via HTS, while existing HTS and ERC20 tokens are supported for registration. + +ew HTS Interchain tokens will have their Token Manager as the sole Supply Key ("MinterBurner" equivalent in Hedera) and Treasury (the contract that gets the newly minted coins). After minting, the Treasury transfers the tokens to the designated account. Before burning, the tokens are transfered back to the Treasury. Token Managers use typical `allowance` and `transferFrom` to move tokens before burning. Token Manager keeps track of minters and allows for external minting and burning (see `Minter.sol`). Certain ITS features are not supported due to HTS limitations, such as initial supply. + +Since the `createFungibleToken` precompile in Hedera requires a fee to be sent as value, an `WHBAR` contract (`WETH` equivalent) is deployed to hold the HBAR used for token creation. `InterchainTokenService` is funded with WHBAR, and before `TokenManager` deployment ITS approves the Token Manager for a given amount, since the address is deterministic. `TokenManagerProxy`, during constructing transfers the amount to itself and withdraws it, forwarding it to `InterchainTokenDeployer`, who finally calls the precompile and sends the fee. ### Hedera-related Notes @@ -18,13 +22,11 @@ ITS contracts in this repo are modified to support Hedera Token Service. All new ### ITS-related Notes +- `MINT_BURN` and `MINT_BURN_FROM` Token Manager types are currently unsupported, due to missing support of transferring the Treasury role. If this gets supported in the future, the `TokenManager` can be upgraded. +- When registering a canonical token, only the `TokenManager` is associated with the token. - `InterchainTokenDeployer.sol` `deployedAddress` is not supported, since HTS tokens don't have deterministic addresses. - `interchainTokenAddress` was removed from `InterchainTokenService.sol`, since HTS tokens don't have deterministic addresses. `registeredTokenAddress` should be used instead. - `transmitInterchainTransfer` was removed from `InterchainTokenService.sol` since it's meant to be called from an `InterchainToken` contract, which is not used. - When creating a new interchain token, `InterchainTokenService` and `TokenManager` are associated with the token. -- When deploying a new interchain token, a Hedera-specific token-creation fee must be sent as value. For this reason, the `deployInterchainToken` method is payable. - `initialSupply` isn't supported when deploying a new interchain token. To receive tokens, an account needs to previously associate with the token, thus it cannot immediately receive tokens after creation. - Both HTS tokens and ERC20 tokens are supported for registration. -- When registering a canonical token, only the `TokenManager` is associated with the token. -- `TokenHandler`'s `_giveInterchainToken` and `_takeInterchainToken` interact with the HTS directly — it is assumed the methods are called by the `InterchainTokenService` contract. `TokenManager` is still used for ERC20 tokens, lock-unlock and flow limits. -- `MINT_BURN` and `MINT_BURN_FROM` Token Manager types are currently unsupported, due to missing support of transferring the Treasury role. If this gets supported in the future, the `TokenManager` can be upgraded. From e1dbb8e53c332f79821aaf8380beebcf649fdddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Thu, 3 Jul 2025 23:58:42 +0200 Subject: [PATCH 21/49] remove impossible < 0 check --- contracts/InterchainTokenFactory.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/InterchainTokenFactory.sol b/contracts/InterchainTokenFactory.sol index 73c9e68f..96357296 100644 --- a/contracts/InterchainTokenFactory.sol +++ b/contracts/InterchainTokenFactory.sol @@ -420,7 +420,7 @@ contract InterchainTokenFactory is IInterchainTokenFactory, Multicall, Upgradabl name = fTokenInfo.tokenInfo.token.name; symbol = fTokenInfo.tokenInfo.token.symbol; int32 htsDecimals = fTokenInfo.decimals; - if (decimals < 0 || htsDecimals > int32(uint32(type(uint8).max))) { + if (htsDecimals > int32(uint32(type(uint8).max))) { revert HTS.InvalidTokenDecimals(); } decimals = uint8(uint32(htsDecimals)); From ab136032cf09917d72987b6a6b281108ecf63aa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Fri, 18 Jul 2025 15:33:06 +0200 Subject: [PATCH 22/49] fix its unit tests suite + improve docs --- contracts/InterchainTokenService.sol | 5 +- contracts/hedera/README.md | 7 +- contracts/hedera/TESTING.md | 18 +- contracts/test/TestERC20MintableBurnable.sol | 54 ++ hardhat.config.js | 19 +- hedera-failing-tests.txt | 852 ------------------- scripts/create-hts-token.js | 33 + scripts/deploy-whbar.js | 1 - scripts/deploy.js | 215 ++++- test/HederaBasic.js | 94 -- test/InterchainToken.js | 2 +- test/InterchainTokenService.js | 428 ++++++---- test/TokenManager.js | 13 +- test/UtilsTest.js | 129 +-- test/constants.js | 5 + test/utils.js | 11 +- 16 files changed, 610 insertions(+), 1276 deletions(-) create mode 100644 contracts/test/TestERC20MintableBurnable.sol delete mode 100644 hedera-failing-tests.txt create mode 100644 scripts/create-hts-token.js delete mode 100644 test/HederaBasic.js diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index 5c239cc1..fcd75d91 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -988,8 +988,11 @@ contract InterchainTokenService is // slither-disable-next-line reentrancy-events emit InterchainTokenDeployed(tokenId, tokenAddress, minter, name, symbol, decimals); + + // TokenManagerDeployed is emited with this payload to keep it consistent with _deployTokenManager + bytes memory tokenManagerDeployParams = abi.encode(operator, tokenAddress); // slither-disable-next-line reentrancy-events - emit TokenManagerDeployed(tokenId, tokenManager_, tokenManagerType, params); + emit TokenManagerDeployed(tokenId, tokenManager_, tokenManagerType, tokenManagerDeployParams); } /** diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index d41f2870..951b6b43 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -2,11 +2,12 @@ ## Overview -ITS contracts in this repo are modified to support Hedera Token Service. All new interchain tokens will be created via HTS, while existing HTS and ERC20 tokens are supported for registration. +ITS contracts in this repo are modified to support Hedera Token Service. All new Interchain Token will be created via HTS, while existing HTS and ERC20 tokens are supported for registration. -ew HTS Interchain tokens will have their Token Manager as the sole Supply Key ("MinterBurner" equivalent in Hedera) and Treasury (the contract that gets the newly minted coins). After minting, the Treasury transfers the tokens to the designated account. Before burning, the tokens are transfered back to the Treasury. Token Managers use typical `allowance` and `transferFrom` to move tokens before burning. Token Manager keeps track of minters and allows for external minting and burning (see `Minter.sol`). Certain ITS features are not supported due to HTS limitations, such as initial supply. +New HTS Interchain Tokens will have their Token Manager as the sole Supply Key ("MinterBurner" equivalent in Hedera) and Treasury (the contract that gets the newly minted coins). After minting, the Treasury transfers the tokens to the designated account. Before burning, the tokens are transfered back to the Treasury. Token Managers use typical `allowance` and `transferFrom` to move tokens before burning. Token Manager keeps track of minters and allows for external minting and burning (see `Minter.sol`). Certain ITS features are not supported due to HTS limitations, such as deploying a new Interchain Token with initial supply. + +Since the `createFungibleToken` precompile in Hedera requires a fee to be sent as value, an `WHBAR` contract (`WETH` equivalent) is used to hold the HBAR used for token creation. `InterchainTokenService` transfers certain amount of `WHBAR` to the newly deploying `TokenManagerProxy` contract. The `TokenManagerProxy` contract, during constructor, withdraws HBAR from `WHBAR`, and sends it to `InterchainTokenDeployer`, which finally uses it to pay for the token creation. -Since the `createFungibleToken` precompile in Hedera requires a fee to be sent as value, an `WHBAR` contract (`WETH` equivalent) is deployed to hold the HBAR used for token creation. `InterchainTokenService` is funded with WHBAR, and before `TokenManager` deployment ITS approves the Token Manager for a given amount, since the address is deterministic. `TokenManagerProxy`, during constructing transfers the amount to itself and withdraws it, forwarding it to `InterchainTokenDeployer`, who finally calls the precompile and sends the fee. ### Hedera-related Notes diff --git a/contracts/hedera/TESTING.md b/contracts/hedera/TESTING.md index 3431f6f8..583bbdff 100644 --- a/contracts/hedera/TESTING.md +++ b/contracts/hedera/TESTING.md @@ -1,3 +1,19 @@ # Local Hedera devnet for testing -Follow [instructions for setting up a local Hedera devnet](https://github.com/hiero-ledger/hiero-local-node). It is recommended to install the cli tool and run `hedera start --dev --verbose=trace --enable-block-node`. \ No newline at end of file +Follow [instructions for setting up a local Hedera devnet](https://github.com/hiero-ledger/hiero-local-node). It is recommended to install the cli tool and run `hedera start --dev --verbose=trace`. + +If starting the local node on a server, you can use the `--host` option to specify the host address. For example, `hedera start --dev --verbose=trace --host=`. Before that, make the following env var available: `export DOCKER_LOCAL_MIRROR_NODE_URL="http://:5551"` to be able to inspect the local node in the Hedera explorer, available at `http://:8090`. + +## Test Configuration + +Create a `.env` file in the root directory with the following content: + +```sh +HEDERA_PK=0x105d050185ccb907fba04dd92d8de9e32c18305e097ab41dadda21489a211524 +HEDERA_ACCOUNT_ID=0.0.1012 +HEDERA_NODE_ID=0.0.3 +HEDERA_LOCAL_RPC_URL=http://:7546 +HEDERA_LOCAL_CONSENSUS_URL=http://:50211 +``` + +These are the default values for the local Hedera devnet. Make sure to replace `` with the actual host address (`localhost` or the server's host). diff --git a/contracts/test/TestERC20MintableBurnable.sol b/contracts/test/TestERC20MintableBurnable.sol new file mode 100644 index 00000000..078d215b --- /dev/null +++ b/contracts/test/TestERC20MintableBurnable.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import { ERC20 } from '../interchain-token/ERC20.sol'; +import { IERC20Named } from '../interfaces/IERC20Named.sol'; +import { IERC20MintableBurnable } from '../interfaces/IERC20MintableBurnable.sol'; +import { Minter } from '../utils/Minter.sol'; + +/** + * @title TestERC20MintableBurnable + * @notice A simple ERC20 token implementation with minting and burning capabilities + * @dev Extends the base ERC20 contract and implements named token interface + */ +contract TestERC20MintableBurnable is ERC20, IERC20Named, IERC20MintableBurnable, Minter { + string public override name; + string public override symbol; + uint8 public override decimals; + + /** + * @notice Constructor to initialize the token with name, symbol, and decimals + * @param tokenName The name of the token + * @param tokenSymbol The symbol of the token + * @param tokenDecimals The number of decimals for the token + */ + constructor(string memory tokenName, string memory tokenSymbol, uint8 tokenDecimals) { + name = tokenName; + symbol = tokenSymbol; + decimals = tokenDecimals; + + // Add the deployer as the initial minter + _addMinter(msg.sender); + } + + /** + * @notice Function to mint new tokens + * @dev Can only be called by addresses with minter role + * @param to The address that will receive the minted tokens + * @param amount The amount of tokens to mint + */ + function mint(address to, uint256 amount) external override onlyRole(uint8(Roles.MINTER)) { + _mint(to, amount); + } + + /** + * @notice Function to burn tokens + * @dev Can only be called by addresses with minter role + * @param from The address that will have its tokens burnt + * @param amount The amount of tokens to burn + */ + function burn(address from, uint256 amount) external override onlyRole(uint8(Roles.MINTER)) { + _burn(from, amount); + } +} diff --git a/hardhat.config.js b/hardhat.config.js index a5bb957b..3363c94a 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -10,14 +10,6 @@ const chains = require(`@axelar-network/axelar-chains-config/info/${env}.json`); const keys = readJSON(`${__dirname}/keys.json`); const { networks, etherscan } = importNetworks(chains, keys); -if (typeof process.env.HEDERA_TESTNET_PK_HEX === 'string') { - networks.testnet = { - url: 'https://testnet.hashio.io/api', - accounts: [process.env.HEDERA_TESTNET_PK_HEX], - chainId: 296, - }; -} - const optimizerSettings = { enabled: true, runs: 1000, @@ -83,11 +75,16 @@ module.exports = { 'contracts/InterchainTokenService.sol': itsCompilerSettings, }, }, - defaultNetwork: 'local', + defaultNetwork: 'hedera-local', networks: { ...networks, - local: { - url: process.env.HEDERA_RPC_URL ?? 'http://localhost:7546', + 'hedera-local': { + url: process.env.HEDERA_LOCAL_RPC_URL ?? 'http://localhost:7546', + consensusUrl: process.env.HEDERA_LOCAL_CONSENSUS_URL ?? 'http://localhost:50211', + nodeId: process.env.HEDERA_LOCAL_NODE_ID ?? '0.0.3', + operatorKey: process.env.HEDERA_PK ?? '0x105d050185ccb907fba04dd92d8de9e32c18305e097ab41dadda21489a211524', + operatorId: process.env.HEDERA_ACCOUNT_ID ?? '0.0.1012', + name: 'Hedera Local', accounts: [ '0x105d050185ccb907fba04dd92d8de9e32c18305e097ab41dadda21489a211524', '0x2e1d968b041d84dd120a5860cee60cd83f9374ef527ca86996317ada3d0d03e7', diff --git a/hedera-failing-tests.txt b/hedera-failing-tests.txt deleted file mode 100644 index 659dd40f..00000000 --- a/hedera-failing-tests.txt +++ /dev/null @@ -1,852 +0,0 @@ -~/P/c/h/interchain-token-service on  hedera-its [!] via ⬢ v23.8.0 took 9m53s ❯ npm test - -> @axelar-network/interchain-token-service@2.1.0 test -> npx hardhat test - -WARNING: You are currently using Node.js v23.8.0, which is not supported by Hardhat. This can lead to unexpected behavior. See https://hardhat.org/nodejs-versions - - - ·----------------------------|--------------------------------|--------------------------------· - | Solc version: 0.8.27 · Optimizer enabled: true · Runs: 1000 │ - ·····························|································|································· - | Contract Name · Deployed size (KiB) (change) · Initcode size (KiB) (change) │ - ·····························|································|································· - | Create3AddressFixed · 0.062 (0.000) · 0.090 (0.000) │ - ·····························|································|································· - | Create3Fixed · 0.062 (0.000) · 0.090 (0.000) │ - ·····························|································|································· - | RolesConstants · 0.062 (0.000) · 0.090 (0.000) │ - ·····························|································|································· - | ReentrancyGuard · 0.062 (0.000) · 0.090 (0.000) │ - ·····························|································|································· - | HederaResponseCodes · 0.084 (0.000) · 0.138 (0.000) │ - ·····························|································|································· - | AddressBytes · 0.084 (0.000) · 0.138 (0.000) │ - ·····························|································|································· - | SafeTokenCall · 0.084 (0.000) · 0.138 (0.000) │ - ·····························|································|································· - | SafeNativeTransfer · 0.084 (0.000) · 0.138 (0.000) │ - ·····························|································|································· - | StringStorage · 0.084 (0.000) · 0.138 (0.000) │ - ·····························|································|································· - | SafeTokenTransfer · 0.084 (0.000) · 0.138 (0.000) │ - ·····························|································|································· - | SafeTokenTransferFrom · 0.084 (0.000) · 0.138 (0.000) │ - ·····························|································|································· - | ContractAddress · 0.084 (0.000) · 0.138 (0.000) │ - ·····························|································|································· - | Pausable · 0.149 (0.000) · 0.178 (0.000) │ - ·····························|································|································· - | TokenCreationPricing · 0.227 (0.000) · 0.256 (0.000) │ - ·····························|································|································· - | CreateDeploy · 0.354 (0.000) · 0.384 (0.000) │ - ·····························|································|································· - | RolesBase · 0.383 (0.000) · 0.413 (0.000) │ - ·····························|································|································· - | InterchainProxy · 0.411 (0.000) · 1.162 (0.000) │ - ·····························|································|································· - | Proxy · 0.413 (0.000) · 1.164 (0.000) │ - ·····························|································|································· - | FlowLimit · 0.453 (0.000) · 0.483 (0.000) │ - ·····························|································|································· - | Multicall · 0.859 (0.000) · 0.890 (0.000) │ - ·····························|································|································· - | TokenManagerProxy · 1.038 (0.000) · 3.765 (0.000) │ - ·····························|································|································· - | ERC20 · 1.289 (0.000) · 1.319 (0.000) │ - ·····························|································|································· - | InterchainAddressTracker · 1.294 (0.000) · 1.324 (0.000) │ - ·····························|································|································· - | Minter · 1.486 (0.000) · 1.517 (0.000) │ - ·····························|································|································· - | Operator · 1.487 (0.000) · 1.518 (0.000) │ - ·····························|································|································· - | InterchainTokenDeployer · 1.929 (0.000) · 1.959 (0.000) │ - ·····························|································|································· - | WHBAR · 2.197 (0.000) · 2.672 (0.000) │ - ·····························|································|································· - | TokenHandler · 3.913 (0.000) · 3.943 (0.000) │ - ·····························|································|································· - | TokenManagerDeployer · 5.448 (0.000) · 5.479 (0.000) │ - ·····························|································|································· - | InterchainToken · 7.070 (0.000) · 7.308 (0.000) │ - ·····························|································|································· - | TokenManager · 9.205 (0.000) · 9.447 (0.000) │ - ·····························|································|································· - | HTS · 9.800 (0.000) · 9.855 (0.000) │ - ·····························|································|································· - | InterchainTokenFactory · 11.295 (0.000) · 11.890 (0.000) │ - ·····························|································|································· - | AxelarGasService · 11.644 (0.000) · 11.991 (0.000) │ - ·····························|································|································· - | InterchainTokenService · 18.561 (0.000) · 19.631 (0.000) │ - ·----------------------------|--------------------------------|--------------------------------· - - - Interchain Token Service -Deployed MockGateway to 0x8A7fa94487d0d0460550e5F3F80A663c39Ac8B10 -Deployed AxelarGasService to 0x2825a2eBD7F17Ae448900992D6293eF599B75C46 -Deployed TokenManagerDeployer to 0x009d6C5A3b5Ba38121cD18b8B987eB226176Dd04 -Deployed InterchainToken to 0x3Db0338922CDE54A66E0c585011249915d32d225 -Deploying HTS library for InterchainTokenDeployer -HTS library deployed at: 0x3658ACCAb6Ab0FE6eeDe58c67812AB43b137CB41 -Deployed InterchainTokenDeployer to 0xb5d100d1be8c360665CD5E250a70Df0e41f95466 -Deployed TokenManager to 0x53f9A96E09fbAfE4220b43D2d5aA3A5251E131aE -Deployed TokenHandler to 0xB3e022eBC7D5C5B1f4ca50b3D4A55173b34ceD49 -Deployed InterchainTokenService to 0xD0647968cC4eA1cB57167428eACE50a416f540dD -Deployed InterchainTokenFactory to 0x3a4c3d9B3e78ED01D4fcC22b490FC70C42b29F60 -Deployed TestInterchainTokenStandard to 0x59487EfbC26c4d300305b1e0aBBf8d98DC25d436 - Interchain Token Service Deployment -Deployed TestInterchainTokenService to 0xFf8F0650334d857F575623f5B925D06054891Ab5 - ✔ Should clear previously set addresses (8717ms) - ✔ Should test setup revert cases (98ms) - ✔ Should revert on invalid interchain token factory - ✔ Should revert on invalid gas service - ✔ Should revert on invalid chain name - ✔ Should revert on invalid token manager deployer - ✔ Should revert on invalid interchain token deployer - ✔ Should revert on invalid gateway - ✔ Should revert on invalid token manager implementation - ✔ Should revert on invalid token handler - ✔ Should revert on invalid its hub address - ✔ Should return the correct contract id - ✔ Should return the token manager implementation - 1) Should revert on TokenManagerProxy deployment with invalid constructor parameters - ✔ Should revert when deploying a remote interchain token to self as not the factory - ✔ Should revert when deploying a remote token manager to self - Owner functions - ✔ Should revert on set pause status when not called by the owner - Operator functions - ✔ Should revert on set trusted chain when not called by the owner - ✔ Should set trusted chain (4103ms) - ✔ Should revert on remove trusted address when not called by the owner (41ms) - ✔ Should remove trusted address (4103ms) - Token Handler - ✔ Should revert on give token with non existing token id (4070ms) - ✔ Should revert on take token with non existing token id (4079ms) - ✔ Should revert on transfer token from non existing token id (4115ms) - Deploy and Register Interchain Token - ✔ Should revert when registering an interchain token when service is paused (8309ms) - Deploy and Register remote Interchain Token - 2) "before all" hook for "Should revert on remote interchain token deployment if paused" - Receive Remote Interchain Token Deployment - ✔ Should revert on receiving a remote interchain token deployment if not approved by the gateway - 3) Should be able to receive a remote interchain token deployment with a mint/burn token manager with empty minter and operator - Register Token Metadata -Deployed TestInterchainTokenStandard to 0xEB7A35F115Dd688905683D986265556BBA8c5dDf - ✔ Should revert on registering token metadata with empty token address - ✔ Should successfully register token metadata (4105ms) - Custom Token Manager Deployment -Deployed TestInterchainTokenStandard to 0xB0E8DEF1bf24Fde0f3Dd679Ea4Ba3a22B32b73A2 - ✔ Should revert when calling registerCustomToken as not the factory (103ms) - ✔ Should revert on deploying an invalid token manager (4397ms) - ✔ Should revert on deploying a local token manager with invalid params (104ms) - ✔ Should revert on deploying a local token manager with interchain token manager type - ✔ Should revert on deploying a local token manager with invalid params - ✔ Should revert on linking a token with empty token address - ✔ Should revert on deploying a remote token manager with interchain token manager type - ✔ Should revert when deploying a custom token manager if paused (8388ms) - Initialize remote custom token manager deployment -Deployed TestInterchainTokenStandard to 0xB02FcA4FD6c591c82d212E465010B85E774CB502 - 4) "before all" hook for "Should initialize a remote custom token manager deployment" - Receive Remote Token Manager Deployment -Deployed TestInterchainTokenStandard to 0xb5e1B586606D96Ff47DB6895Ad41c19BbE1CE9d7 - 5) Should be able to receive a remote lock/unlock token manager deployment -Deployed TestInterchainTokenStandard to 0x4035edA37BdfE7C4e659687591A0CdeFFb9Ff948 - 6) Should be able to receive a remote mint/burn token manager deployment -Deployed TestInterchainTokenStandard to 0x2642601660515B06e198e9436e737eD4a3006c94 - ✔ Should not be able to receive a remote interchain token manager deployment (8273ms) - Send Token -Deployed TestInterchainTokenStandard to 0xB3787d6810D6Ab8e68A2448aE377aE188edcdab7 - 7) "before all" hook for "Should be able to initiate an interchain token transfer for lockUnlockFee with a normal ERC20 token" - Execute checks - ✔ Should revert on execute if remote address validation fails (4218ms) - ✔ Should revert on execute if the service is paused (12295ms) - ✔ Should revert on execute with invalid messageType (4176ms) - Receive Remote Tokens - ✔ Should revert with InvalidPayload (4136ms) -Deployed TestInterchainTokenStandard to 0x3AdE29C269197a1e4673c3E5b667c4b29e7B5404 - 8) Should be able to receive lock/unlock token -Deployed TestInterchainTokenStandard to 0x951e93C1E0206F892Dea7ECF881DF2A03a876620 - 9) Should be able to receive mint/burn token -Deployed TestFeeOnTransferToken to 0xdFE64B5a249A6DE6a9c5a9cDf7D1c11438f3404B - 10) Should be able to receive lock/unlock with fee on transfer token -Deployed TestFeeOnTransferTokenNoFee to 0x208e94081B32e87097b7dDE9B0dce643691B4351 - 11) Should be able to receive lock/unlock with fee on transfer token with normal ERC20 token - Send Token With Data -Deployed TestInterchainTokenStandard to 0x6BF9c73953166817Ce4A0CC0C8A3deD8BD790837 - 12) "before all" hook for "Should initiate an interchain token transfer via the interchainTransfer standard contract call & express call [lockUnlock]" - Receive Remote Token with Data -Deployed TestInterchainExecutable to 0x9Fb8F5E78F1d9f3e64B3c021A4E75feF3E4df802 -Deployed TestInvalidInterchainExecutable to 0xEA2565D5A21633e55d8a3eFcA2c9F7ef83A5242E -Deployed TestInterchainTokenStandard to 0xDCd4FC85dcD6050331ddA149EfA70C165B47c7df - 13) Should be able to receive lock/unlock token -Deployed TestInterchainTokenStandard to 0x814d379C35ac00B5C5FAa72123d4B2D8A15999dE - 14) Should be able to receive lock/unlock token with empty data and not call destination contract -Deployed TestInterchainTokenStandard to 0xc691B34F449A5E5DD22306AD241d2B2E25FE90C1 - 15) Should be able to receive mint/burn token -Deployed TestInterchainTokenStandard to 0x8844a0D5C40AE955326C4B7826F0e768f4a32bb8 - 16) Should be able to receive mint/burn from token -Deployed TestFeeOnTransferToken to 0xc83180Eca96B02b8d9f4383052Ab6B7aE7a5c8d0 - 17) Should be able to receive lock/unlock with fee on transfer token -Deployed TestInterchainTokenStandard to 0x373E3486214E401582e50599360857525B47C9B3 - 18) Should revert if token handler transfer token from fails -Deployed TestInterchainTokenStandard to 0x3eaa43C517B6418c8b0A7Ea0B5Ed64a0B9Ee13C5 - 19) Should revert if execute with interchain token fails - ✔ Should revert with UntrustedChain when the message type is RECEIVE_FROM_HUB and untrusted original source chain (4094ms) - ✔ Should revert with InvalidPayload when the message type is RECEIVE_FROM_HUB and has invalid inner payload. (8483ms) -Deployed TestInterchainTokenStandard to 0xbDB6782DaC4521BE6Ddb8593E895f22eb48d2de9 - 20) Should receive a message wrapped with RECEIVE_FROM_HUB and has MESSAGE_TYPE_DEPLOY_TOKEN_MANAGER type. - ✔ Should revert with UntrustedChain when receiving a direct message from the ITS Hub. Not supported yet (4112ms) - Send Interchain Token -Deployed TestInterchainTokenStandard to 0x90B8566d98D847Fd48bf83cBC5489394f502B445 - 21) Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [mintBurn] -Deployed TestInterchainTokenStandard to 0x24fBdE19491E3FdD9c2c43C1F898e19fcCD6927A - 22) Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [mintBurnFrom] -Deployed TestFeeOnTransferToken to 0x8BA9B2A89a1F149E063f53f42A799AC90f8d541C - 23) Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [lockUnlockFee] -Deployed TestInterchainTokenStandard to 0xAd138600464117275B3a80Fa3b35778bf1f921ec - 24) Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [lockUnlock] -Deployed TestInterchainTokenStandard to 0xFf7B446BB64f9A3Cfb301e00062732F8DA9D01e7 - 25) Should be able to initiate an interchain token transfer via interchainTransfer [mintBurn] without native gas -Deployed TestInterchainTokenStandard to 0x84034b6CF3C1197A031F179EF66a9e68F14bb8C5 - 26) Should be able to initiate an interchain token transfer via interchainTransfer [mintBurnFrom] without native gas -Deployed TestFeeOnTransferToken to 0x46e0aD69E7ed13bFF651b24b43e7b48232835F30 - 27) Should be able to initiate an interchain token transfer via interchainTransfer [lockUnlockFee] without native gas -Deployed TestInterchainTokenStandard to 0xfCa52A9aA40c24959dD5918E13aFD9D507Ecc8ce - 28) Should be able to initiate an interchain token transfer via interchainTransfer [lockUnlock] without native gas - 29) Should be able to initiate an interchain token transfer using interchainTransferFrom with max possible allowance - 30) Should revert using interchainTransferFrom with zero amount - Send Interchain Token With Data -Deployed TestInterchainTokenStandard to 0x22958B6AA8D0B01f04a4bafF4F4a535F5e64622E - 31) Should be able to initiate an interchain token transfer [lockUnlock] -Deployed TestInterchainTokenStandard to 0xBAdf703D3e9f55778C6b23C03597C073E18Ecf7e - 32) Should be able to initiate an interchain token transfer [mintBurn] -Deployed TestInterchainTokenStandard to 0x50F778D3eD1B91Bd2C5b66575fD339400bAc9672 - 33) Should be able to initiate an interchain token transfer [mintBurnFrom] -Deployed TestFeeOnTransferToken to 0x1BE6841d4a99E627de7721173BFED9B8640B28a6 - 34) Should be able to initiate an interchain token transfer [lockUnlockFee] - Express Execute -Deployed TestInterchainTokenStandard to 0x5131D2fbB38d29901b650195B8fd2f72281a508f - 35) "before all" hook for "Should revert on executeWithInterchainToken when not called by the service" - Interchain Executable -Deployed TestInterchainTokenStandard to 0x02aA74D60886931A448eE67B11182C16bF00236F - 36) "before all" hook for "Should revert on executeWithInterchainToken when not called by the service" - Express Receive Remote Token -Deployed TestInterchainTokenStandard to 0xb2A2AFE56A954c6079e35B6cB7909C9EC2A47D22 - 37) "before all" hook for "Should revert if command is already executed by gateway" - Express Receive Remote Token with Data -Deployed TestInterchainExecutable to 0xd726F1c8CFC9EB2928E390c4fAaeBe71B1921B03 -Deployed TestInterchainTokenStandard to 0x448DF94110105C527083894BD5749B0d40d790F4 - 38) Should be able to receive lock_unlock token - 39) Should be able to receive native_interchain token -Deployed TestInterchainTokenStandard to 0xEd23156eA19623e8E36A2bcB1eC30Fe92dCbBF92 - 40) Should be able to receive mint_burn token -Deployed TestFeeOnTransferToken to 0x7a7A6422eDD5ca7C59717Bc2aF89796a17d633bB - 41) Should be able to receive lock_unlock_with_fee token - Flow Limits -Deployed TestInterchainTokenStandard to 0x26cd0706C2F8cC5A3202c71615B668e56Eb9f69d - 42) "before all" hook for "Should be able to send token only if it does not trigger the mint limit" - Flow Limiters -Deployed TestInterchainTokenStandard to 0x61C8E8170bB77730eFA749069Adb8ca6aF6f57e9 - 43) "before all" hook for "Should have only the owner be a flow limiter" - Call contract value - ✔ Should revert on contractCallValue if not called by remote service - ✔ Should revert on contractCallValue if service is paused (8165ms) - ✔ Should revert on invalid message type - ✔ Should revert on invalid express message type -Deployed TestInterchainTokenStandard to 0x752799a3b4e1F8D28aC4149354c17041C286E221 - 44) Should return correct token address and amount - Interchain Token Migration - 45) Should migrate a token succesfully - 46) Should not be able to migrate a token twice - 47) Should not be able to migrate a token as not the owner - Bytecode checks [ @skip-on-coverage ] - ✔ Should preserve the same proxy bytecode for each EVM - - - 48 passing (10m) - 47 failing - - 1) Interchain Token Service - Interchain Token Service Deployment - Should revert on TokenManagerProxy deployment with invalid constructor parameters: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 905562a2-3894-43cf-8c42-c5edd15f1e14] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","data":"0x61010060405234801561001157600080fd5b50604051610f07380380610f078339810160408190526100309161082b565b838383836001600160a01b03841661005b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03841660805260a083905260c0829052600061007e85856106d3565b90506001600160a01b0381166100a75760405163340aafcd60e11b815260040160405180910390fd5b836104c1576000806000806000856001600160a01b031663ee30075b886040518263ffffffff1660e01b81526004016100e091906108b9565b600060405180830381865afa1580156100fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261012591908101906108cc565b9450945094509450945060006080516001600160a01b0316634f9ae6086040518163ffffffff1660e01b8152600401602060405180830381865afa158015610171573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101959190610986565b905060006080516001600160a01b031663500f6e146040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101fd9190610986565b6080516040516323b872dd60e01b81526001600160a01b039182166004820152306024820152604481018690529192508216906323b872dd906064016020604051808303816000875af1158015610258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061027c91906109a1565b50604051632e1a7d4d60e01b8152600481018490526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b1580156102bf57600080fd5b505af11580156102d3573d6000803e3d6000fd5b50505050600080836001600160a01b0316634e8e5ce060e01b8d8a8a8a8a6040516024016103059594939291906109c3565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516103439190610a06565b600060405180830381855af49150503d806000811461037e576040519150601f19603f3d011682016040523d82523d6000602084013e610383565b606091505b5091509150816103b1578060405163c226af8b60e01b81526004016103a891906108b9565b60405180910390fd5b6020818101516001600160a01b03811660e05260405190916000916103da918d91859101610a22565b604051602081830303815290604052905060008c6001600160a01b0316639ded06df60e01b8360405160240161041091906108b9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161044e9190610a06565b600060405180830381855af49150503d8060008114610489576040519150601f19603f3d011682016040523d82523d6000602084013e61048e565b606091505b50509050806104b0576040516397905dfb60e01b815260040160405180910390fd5b5050505050505050505050506106c5565b60e051604080516001600160a01b039283166024820152604480820188905282518083039091018152606490910182526020810180516001600160e01b031663082c78e360e21b1790529051600092606092908516916105219190610a06565b600060405180830381855af49150503d806000811461055c576040519150601f19603f3d011682016040523d82523d6000602084013e610561565b606091505b509092509050816105875780604051632d9606db60e11b81526004016103a891906108b9565b60405163f5983e8360e01b81526001600160a01b0384169063f5983e83906105b39087906004016108b9565b602060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190610986565b6001600160a01b0390811660e05260405190841690639ded06df60e01b906106209087906024016108b9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161065e9190610a06565b600060405180830381855af49150503d8060008114610699576040519150601f19603f3d011682016040523d82523d6000602084013e61069e565b606091505b505080925050816106c2576040516397905dfb60e01b815260040160405180910390fd5b50505b505050505050505050610a4c565b604051633f0a8fd360e11b8152600481018290526000906001600160a01b03841690637e151fa690602401602060405180830381865afa15801561071b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f9190610986565b9392505050565b80516001600160a01b038116811461075d57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561079357818101518382015260200161077b565b50506000910152565b600082601f8301126107ad57600080fd5b8151602083016000806001600160401b038411156107cd576107cd610762565b50604051601f19601f85018116603f011681018181106001600160401b03821117156107fb576107fb610762565b60405283815290508082840187101561081357600080fd5b610821846020830185610778565b9695505050505050565b6000806000806080858703121561084157600080fd5b61084a85610746565b60208601516040870151606088015192965090945092506001600160401b0381111561087557600080fd5b6108818782880161079c565b91505092959194509250565b600081518084526108a5816020860160208601610778565b601f01601f19169290920160200192915050565b60208152600061073f602083018461088d565b600080600080600060a086880312156108e457600080fd5b85516001600160401b038111156108fa57600080fd5b6109068882890161079c565b602088015190965090506001600160401b0381111561092457600080fd5b6109308882890161079c565b604088015190955090506001600160401b0381111561094e57600080fd5b61095a8882890161079c565b935050606086015160ff8116811461097157600080fd5b60809690960151949793965091949392915050565b60006020828403121561099857600080fd5b61073f82610746565b6000602082840312156109b357600080fd5b8151801515811461073f57600080fd5b85815260a0602082015260006109dc60a083018761088d565b82810360408401526109ee818761088d565b60ff9590951660608401525050608001529392505050565b60008251610a18818460208701610778565b9190910192915050565b604081526000610a35604083018561088d565b905060018060a01b03831660208301529392505050565b60805160a05160c05160e051610467610aa0600039600081816101e601526102720152600061012801526000818161019d0152818161023a01526102c501526000818160ca01526102a401526104676000f3fe60806040526004361061007f5760003560e01c80635c60da1b1161004e5780635c60da1b146101bf5780639d76ea58146101d45780639ded06df14610208578063d4ae3c421461022757610086565b806309c6bed9146100b8578063129d8188146101165780634788cabf146101585780634fdf7cb51461018b57610086565b3661008657005b600061009061029d565b90503660008037600080366000845af43d6000803e8080156100b1573d6000f35b3d6000fd5b005b3480156100c457600080fd5b506100ec7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561012257600080fd5b5061014a7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161010d565b34801561016457600080fd5b507fde5fa9c0ef6d18cdb8ef4461bfb45c94dc915629a2a1f311fb33838aff95436f61014a565b34801561019757600080fd5b5061014a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101cb57600080fd5b506100ec61029d565b3480156101e057600080fd5b506100ec7f000000000000000000000000000000000000000000000000000000000000000081565b34801561021457600080fd5b506100b6610223366004610387565b5050565b34801561023357600080fd5b50604080517f0000000000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201520161010d565b60006102e97f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006102ee565b905090565b6040517f7e151fa60000000000000000000000000000000000000000000000000000000081526004810182905260009073ffffffffffffffffffffffffffffffffffffffff841690637e151fa690602401602060405180830381865afa15801561035c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038091906103fb565b9392505050565b6000806020838503121561039a57600080fd5b823567ffffffffffffffff8111156103b157600080fd5b8301601f810185136103c257600080fd5b803567ffffffffffffffff8111156103d957600080fd5b8560208284010111156103eb57600080fd5b6020919091019590945092505050565b60006020828403121561040d57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461038057600080fdfea26469706673582212209788ef99a2bfdbd83c296713575c465567eb742ac0d11306a7fa3ca20f20b81264736f6c634300081b0033000000000000000000000000602ea66271618eb9f9b8d781daae7d955e0c148b00000000000000000000000000000000000000000000000000000000000000045cff84611ee274e284a1ef1aa62eabcf96fae844e7564bed4e8554455241fd410000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000003db0338922cde54a66e0c585011249915d32d2250000000000000000000000000000000000000000000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 905562a2-3894-43cf-8c42-c5edd15f1e14] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0x97905dfb"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 2) Interchain Token Service - Deploy and Register remote Interchain Token - "before all" hook for "Should revert on remote interchain token deployment if paused": - TypeError: service.interchainTokenAddress is not a function - at Context. (test/InterchainTokenService.js:736:48) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 3) Interchain Token Service - Receive Remote Interchain Token Deployment - Should be able to receive a remote interchain token deployment with a mint/burn token manager with empty minter and operator: - TypeError: service.interchainTokenAddress is not a function - at Context. (test/InterchainTokenService.js:797:48) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 4) Interchain Token Service - Initialize remote custom token manager deployment - "before all" hook for "Should initialize a remote custom token manager deployment": - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 31dfde05-148a-4225-a4c3-00c0933c0346] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658f919e0998db75a4c1f80f5751042d6e2fdc31a67da694aafd479bdb17cda9bf9000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005c3de9a91cdc324f268f0bec76891953d1b1ae2278349b79775c38da688ae6d55000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b02fca4fd6c591c82d212e465010b85e774cb502000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 31dfde05-148a-4225-a4c3-00c0933c0346] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 5) Interchain Token Service - Receive Remote Token Manager Deployment - Should be able to receive a remote lock/unlock token manager deployment: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: daac2bda-a04d-4462-85eb-7782c6cd93e7] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658a2f49febaca5bf132d0ed2ea46fdfe0d0c9d7740d9da3ca4f68c9ac67da66df1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000056e5e74accd834b29f8ed7b407236054c4195672d880e76c37f08a5b5583fda5e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b5e1b586606d96ff47db6895ad41c19bbe1ce9d7000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: daac2bda-a04d-4462-85eb-7782c6cd93e7] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 6) Interchain Token Service - Receive Remote Token Manager Deployment - Should be able to receive a remote mint/burn token manager deployment: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 1f463237-afd4-4b19-8a2c-1fe7bd1db132] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606589296714b596f7a98366d666a476fa5c6a30fe8625c4160a30a29725f8dbe275b000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005c48b830facd2bd297f7c3b7003b5c5d41d684b5edac7d7d0b3961909356b6def000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000144035eda37bdfe7c4e659687591a0cdeffb9ff948000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 1f463237-afd4-4b19-8a2c-1fe7bd1db132] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 7) Interchain Token Service - Send Token - "before all" hook for "Should be able to initiate an interchain token transfer for lockUnlockFee with a normal ERC20 token": - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 06dfc5bd-ba72-4958-b5e1-b2b7ee942064] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x4916065830887c1400b01025c2469670512332a473b361b2f898d8d4fb62ef40c9e24fc4000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000054ea35c0aaae7a4b44bdb32f76326b810cb7fda708f363c3b9f81d1b341b19b28000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b3787d6810d6ab8e68a2448ae377ae188edcdab7000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 06dfc5bd-ba72-4958-b5e1-b2b7ee942064] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 8) Interchain Token Service - Receive Remote Tokens - Should be able to receive lock/unlock token: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 575ada96-1214-41bd-b430-be31c4563079] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658879a8efc82b2a124ab2c76ec11a15e3cba17f0e5a5ded793e0ebd66a41a162f9000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005fe6b96889e77f9e03ba345ed254f6e611c1c73e6fcc18ed50d6518fad2fc01d9000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143ade29c269197a1e4673c3e5b667c4b29e7b5404000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 575ada96-1214-41bd-b430-be31c4563079] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 9) Interchain Token Service - Receive Remote Tokens - Should be able to receive mint/burn token: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 5c5d6e2a-c586-4a58-bdb7-25adc8c0e018] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606586f678488727c050579bb550d9af6272cf1fb2be793e155237633d0d69a16609d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000592853d60bc755102869fa44909befc99c65c71e2866a68ed14bce6166a910191000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014951e93c1e0206f892dea7ecf881df2a03a876620000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 5c5d6e2a-c586-4a58-bdb7-25adc8c0e018] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 10) Interchain Token Service - Receive Remote Tokens - Should be able to receive lock/unlock with fee on transfer token: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: f5d52e7d-1790-406d-b57d-00aa76c459da] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606589c989166a3a376a2a017390bcc77b20e856aa2fdaa327eab95a105bab8b873f0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000578d001c477686187109fc753466d16b388cdc5df229140ec65711c9d6bedbd1d000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014dfe64b5a249a6de6a9c5a9cdf7d1c11438f3404b000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: f5d52e7d-1790-406d-b57d-00aa76c459da] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 11) Interchain Token Service - Receive Remote Tokens - Should be able to receive lock/unlock with fee on transfer token with normal ERC20 token: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 05ebe582-b822-4633-b852-58f3b2b0f191] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658ca9af8a668218465986ef04481066e23e29fc7f96605324962e2514e58ad69a8000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005f23b7c697bec5689560ec7187dae081b153f2a6c2b9aa2f42f27fe2f5d198c55000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014208e94081b32e87097b7dde9b0dce643691b4351000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 05ebe582-b822-4633-b852-58f3b2b0f191] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 12) Interchain Token Service - Send Token With Data - "before all" hook for "Should initiate an interchain token transfer via the interchainTransfer standard contract call & express call [lockUnlock]": - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: bd84551f-4542-41aa-a238-d9b4b76c0edc] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606586a3ee923b18394d3fc1e174c73a242cd4dc1be9f01d6dfbd4846390a2b4f71aa000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005e2e64947067ebfa1e0d9177a86fddae6d0d09e375238c54c2f4bd70d0d4dde77000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000146bf9c73953166817ce4a0cc0c8a3ded8bd790837000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: bd84551f-4542-41aa-a238-d9b4b76c0edc] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 13) Interchain Token Service - Receive Remote Token with Data - Should be able to receive lock/unlock token: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 53ffbe04-46b4-4748-8dfe-3d16d05a5a87] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606582298302ee09432a9583fbc035dfe522ba227d03d60038065af1cb4edb422ada3000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000577b76e88d8f6f27ade01a441a75f68008b3a7f19f1a8956fbefcb907781493fd000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014dcd4fc85dcd6050331dda149efa70c165b47c7df000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 53ffbe04-46b4-4748-8dfe-3d16d05a5a87] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 14) Interchain Token Service - Receive Remote Token with Data - Should be able to receive lock/unlock token with empty data and not call destination contract: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 8e162eb8-2dae-4957-b8fd-f2c2532ff2d1] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606585cc4cfd19082080aca3901da0db5e08d0742bb289943f4c60f2721e47cd95b99000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000056bbc6bf464a9981954605ec9d8ef904941707ed968c43fb80eb6f7f0dbea60c3000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014814d379c35ac00b5c5faa72123d4b2d8a15999de000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 8e162eb8-2dae-4957-b8fd-f2c2532ff2d1] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 15) Interchain Token Service - Receive Remote Token with Data - Should be able to receive mint/burn token: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: fd957681-e93e-4dd6-bcfe-f58949cfdb90] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658459bf928c8098bfd933437ac4b06510c0cfe54b004cd501de91d275ceb91bca1000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005e213e41bbd4af7977d06cccade71ca02f2704141f54ebf0b730bfccd69354d65000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014c691b34f449a5e5dd22306ad241d2b2e25fe90c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: fd957681-e93e-4dd6-bcfe-f58949cfdb90] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 16) Interchain Token Service - Receive Remote Token with Data - Should be able to receive mint/burn from token: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: f3c67ab4-13ac-46ea-aa83-70712b098ed0] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658e883d991e893ebe8a7b6aedd18f980c1ad83aa0c9bc5bd75ec57ac7426950cd3000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005635c8ef89318328781d5ac31872a0935684bc966ccf18cb9d6719d260c7b5d16000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000148844a0d5c40ae955326c4b7826f0e768f4a32bb8000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: f3c67ab4-13ac-46ea-aa83-70712b098ed0] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 17) Interchain Token Service - Receive Remote Token with Data - Should be able to receive lock/unlock with fee on transfer token: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 96cc9f92-dd19-493c-996e-d679c2fadc70] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x4916065845901c75351f7fae2f94a8425a3f5ac73f3f2cc63325218e11aed0feba3c4a33000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005db8c4c76a4b789d898734748d249acf2c3e1b9db8927c464c13b6d645d96c6bf000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014c83180eca96b02b8d9f4383052ab6b7ae7a5c8d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 96cc9f92-dd19-493c-996e-d679c2fadc70] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 18) Interchain Token Service - Receive Remote Token with Data - Should revert if token handler transfer token from fails: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 9e7f2971-d18f-4f71-b9f7-7fdccb2a59fe] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606587bdf60d719c942ed2d143c3b36744928b9b386f71747e06132b971ac0ba55798000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000523ddb9676dda173e63939175c3a580218a2892c9b533a8f2ec8d345684ba106f000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014373e3486214e401582e50599360857525b47c9b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 9e7f2971-d18f-4f71-b9f7-7fdccb2a59fe] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 19) Interchain Token Service - Receive Remote Token with Data - Should revert if execute with interchain token fails: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 5ba997f3-9c7f-4865-a682-12d71a965908] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x4916065821d327397c84402d5ab7e2e6aa417c83e1010c8630c7acafc92f9a25a46bb6db000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005c152814a607037a47cb65c40b939e7fc8184f8a8604bbb3ee14851e07a48ca6b000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143eaa43c517b6418c8b0a7ea0b5ed64a0b9ee13c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 5ba997f3-9c7f-4865-a682-12d71a965908] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 20) Interchain Token Service - Receive Remote Token with Data - Should receive a message wrapped with RECEIVE_FROM_HUB and has MESSAGE_TYPE_DEPLOY_TOKEN_MANAGER type.: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 6e44d416-f2c2-4743-bea1-5c725950a4ce] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658bac9cea25f7e4f6f51ef21f7ac6842ca51426021f0239e8d46345e58f8a84721000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000b68756220636861696e2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000053f28672dc411c64eb27d5a7c295a9d5c941d0c755bc9b824930f7095e95db489000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014bdb6782dac4521be6ddb8593e895f22eb48d2de9000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 6e44d416-f2c2-4743-bea1-5c725950a4ce] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 21) Interchain Token Service - Send Interchain Token - Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [mintBurn]: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: db25fd50-78a7-46de-9d15-3c77f21f95b9] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658404c65c46035e25223162f4bdb04c1947854ae1498f6f6d70549f18a2dd11ad7000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005cf3e8d3f1c2413d34fede7ea3b9f162d17390d0bc20dc36ae2fec11209aca40b000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001490b8566d98d847fd48bf83cbc5489394f502b445000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: db25fd50-78a7-46de-9d15-3c77f21f95b9] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 22) Interchain Token Service - Send Interchain Token - Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [mintBurnFrom]: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 055a9348-5bb5-4ebb-a095-2b73ec29a1c1] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658a0c3e05a9027d8fd603a2bb401fcb82767e1eb642b0a46299e96268b6ae45983000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005c595455001e61c6cc863a3ce85c4169abc87828910b10ac406766901c88335e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001424fbde19491e3fdd9c2c43c1f898e19fccd6927a000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 055a9348-5bb5-4ebb-a095-2b73ec29a1c1] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 23) Interchain Token Service - Send Interchain Token - Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [lockUnlockFee]: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 6d7e5fec-49df-4311-ba8b-8bf265798020] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606583600c7be3a0a0c66aab471cbacc3cdd3ecf8dfd5aa5cf68f8c62b8a63e479b84000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000551ba3df5925aec241f05fcd8b96603990b4c1e9c42a0bd9fc5d55c0375f11c1a000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000148ba9b2a89a1f149e063f53f42a799ac90f8d541c000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 6d7e5fec-49df-4311-ba8b-8bf265798020] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 24) Interchain Token Service - Send Interchain Token - Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [lockUnlock]: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 43235e24-aee2-452b-a939-a1b51f9b2921] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x4916065896e99e55359f9bf0540886912f83e2a7ec223ff41b9703f348a514bcda070417000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000595fffe164f59ec85674474305bd6d20aa7e7fa64a11a1c5306ef52b2d26850e4000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ad138600464117275b3a80fa3b35778bf1f921ec000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 43235e24-aee2-452b-a939-a1b51f9b2921] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 25) Interchain Token Service - Send Interchain Token - Should be able to initiate an interchain token transfer via interchainTransfer [mintBurn] without native gas: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 75f18ee9-05ca-42c8-9212-4ebb91d9b792] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606589a0794a7678faf983b6ef7ba70e76c20cc287cbbed4812868acd57ce0e7c05c3000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000058387157a7e908d3fbe092b73cc140cea59e44e76a248f6971c240b6a21accd08000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ff7b446bb64f9a3cfb301e00062732f8da9d01e7000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 75f18ee9-05ca-42c8-9212-4ebb91d9b792] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 26) Interchain Token Service - Send Interchain Token - Should be able to initiate an interchain token transfer via interchainTransfer [mintBurnFrom] without native gas: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 0d17f604-62ca-4b6d-8f6b-6c5318b6253d] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658db13437bafc18608ba4100c77349a8232d99f8b4e27de78ec8b12a1da9cface0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000050d844a8e93259434ed48a0fe4257f88a3622415d6ab637e90105aafec6cfa1eb000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001484034b6cf3c1197a031f179ef66a9e68f14bb8c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 0d17f604-62ca-4b6d-8f6b-6c5318b6253d] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 27) Interchain Token Service - Send Interchain Token - Should be able to initiate an interchain token transfer via interchainTransfer [lockUnlockFee] without native gas: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 0943bc45-a815-4462-b9c4-ede54cb3a704] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658fe827d9a4de9aae4acd7488dbbcfb4f8db50fb635193914cf576fc7d966b9480000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005d11e67e973db50f1d87f36d73c610f135fd8a86ded83f58427aac976b002dc00000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001446e0ad69e7ed13bff651b24b43e7b48232835f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 0943bc45-a815-4462-b9c4-ede54cb3a704] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 28) Interchain Token Service - Send Interchain Token - Should be able to initiate an interchain token transfer via interchainTransfer [lockUnlock] without native gas: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: a1e9c971-ba77-4686-885b-9d1c5eff9d1b] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x4916065861441be1773517cff6462e88f73f3bfc1482d7eedaef03249aec5a9a0253c956000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000572d33813603baf54266e1acefa1e9fafa355fdda8ccc21d9a4509650a587a5b2000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014fca52a9aa40c24959dd5918e13afd9d507ecc8ce000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: a1e9c971-ba77-4686-885b-9d1c5eff9d1b] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 29) Interchain Token Service - Send Interchain Token - Should be able to initiate an interchain token transfer using interchainTransferFrom with max possible allowance: - TypeError: Cannot read properties of undefined (reading 'toHexString') - at isHexable (node_modules/@ethersproject/bytes/src.ts/index.ts:58:21) - at arrayify (node_modules/@ethersproject/bytes/src.ts/index.ts:115:9) - at FixedBytesCoder.encode (node_modules/@ethersproject/abi/src.ts/coders/fixed-bytes.ts:22:28) - at /Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@ethersproject/abi/src.ts/coders/array.ts:71:19 - at Array.forEach () - at pack (node_modules/@ethersproject/abi/src.ts/coders/array.ts:54:12) - at TupleCoder.encode (node_modules/@ethersproject/abi/src.ts/coders/tuple.ts:54:20) - at AbiCoder.encode (node_modules/@ethersproject/abi/src.ts/abi-coder.ts:111:15) - at encodeInterchainTransferMessage (test/utils.js:200:28) - at Context. (test/InterchainTokenService.js:2053:17) - - 30) Interchain Token Service - Send Interchain Token - Should revert using interchainTransferFrom with zero amount: - TypeError: Cannot read properties of undefined (reading 'approve') - at Context. (test/InterchainTokenService.js:2081:25) - at processImmediate (node:internal/timers:511:21) - - 31) Interchain Token Service - Send Interchain Token With Data - Should be able to initiate an interchain token transfer [lockUnlock]: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 44b77538-e163-4ebf-9b48-0004b620a7bc] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658659c687f018fe96a23905f73f5bc0771a2c666bfbba62cf31555f716c2b87fcb000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005ce4f063281c72258c38235907752f7a362a859c32cdfed1e6ba910b1a2e77dc1000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001422958b6aa8d0b01f04a4baff4f4a535f5e64622e000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 44b77538-e163-4ebf-9b48-0004b620a7bc] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 32) Interchain Token Service - Send Interchain Token With Data - Should be able to initiate an interchain token transfer [mintBurn]: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: e2fd9aef-0aaf-47a5-94c1-0dddf7895e81] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606588a1cca49eaf6a7a0aef4bf1cfcc194218404752d44595d989fd95004d1b9e2f0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005c6b02ce6c0e55241ed9f350938d1be622d353941c04c7ffc0a96781669235f71000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014badf703d3e9f55778c6b23c03597c073e18ecf7e000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: e2fd9aef-0aaf-47a5-94c1-0dddf7895e81] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 33) Interchain Token Service - Send Interchain Token With Data - Should be able to initiate an interchain token transfer [mintBurnFrom]: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 2430afb2-a184-41df-bd34-fa306e6b3808] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606582d8a88df65148fe26a05ce9b6f4961fbfcb87aed0ad86dd8fe514b36952d102d000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000055900895f635bf547e4f829d802f8db03b55fd8677ec1c336bea8789438c8f76b000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001450f778d3ed1b91bd2c5b66575fd339400bac9672000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 2430afb2-a184-41df-bd34-fa306e6b3808] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 34) Interchain Token Service - Send Interchain Token With Data - Should be able to initiate an interchain token transfer [lockUnlockFee]: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: f5f015c8-9339-48a3-a14d-d5ef4026e9f7] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658264e23d5c5471d47cf2277565c04def0838b3c71766c21016cc4d73fa9cc8a1a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005710e78296ca356aa0d53b0674642309e6cd6a7dea74bf6482978015a364eae24000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141be6841d4a99e627de7721173bfed9b8640b28a6000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: f5f015c8-9339-48a3-a14d-d5ef4026e9f7] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 35) Interchain Token Service - Express Execute - "before all" hook for "Should revert on executeWithInterchainToken when not called by the service": - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 0a62257b-d2e4-4d79-96a0-b2a3445bbaf9] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658a88e9ccd1bf51fdf41b9e32ae1eef2ca2367167efdde858a13b191e27d10e364000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005764bbee2ad06527f62ec804dbc8d9e6a12c6e8b2403e9c29c1cb4faa2075f502000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000145131d2fbb38d29901b650195b8fd2f72281a508f000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 0a62257b-d2e4-4d79-96a0-b2a3445bbaf9] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 36) Interchain Token Service - Interchain Executable - "before all" hook for "Should revert on executeWithInterchainToken when not called by the service": - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: f266e24f-b0ae-4a8d-857a-0718bce2f05a] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606585c41a331a90e6e89867ecfd58fa7f1ae3e2d0738f8c0fe40e9883acf8728f1ac000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000052ee838b6cef3559610be96a0061d7fb224f47d3fb2f6635b5efa6bd8282a592e000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001402aa74d60886931a448ee67b11182c16bf00236f000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: f266e24f-b0ae-4a8d-857a-0718bce2f05a] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 37) Interchain Token Service - Express Receive Remote Token - "before all" hook for "Should revert if command is already executed by gateway": - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 1ccc05f9-cd26-4ad9-88dd-7367c9d7f0c1] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658e7f39e931f07bc27ddb3a6e13bf76b5822e9570b70ab30995c62abc02534c714000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005d3958e7309ac7469789a04843ae092a3079f26828ae1faadac2c3a26708eb12e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014b2a2afe56a954c6079e35b6cb7909c9ec2a47d22000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 1ccc05f9-cd26-4ad9-88dd-7367c9d7f0c1] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 38) Interchain Token Service - Express Receive Remote Token with Data - Should be able to receive lock_unlock token: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 236a8a9c-4993-4e15-bfcb-6853a83fcca3] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658732e4440cb42da2a5b47286dc796928f0fd232676bee2f70497e562d2d51f95a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000057224d83c73f9d499de8c794678c0912d46e24a406ccc19be39ffea88f30dd36b000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014448df94110105c527083894bd5749b0d40d790f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 236a8a9c-4993-4e15-bfcb-6853a83fcca3] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 39) Interchain Token Service - Express Receive Remote Token with Data - Should be able to receive native_interchain token: - TypeError: service.interchainTokenAddress is not a function - at Object.deployNewInterchainToken [as interchainToken] (test/InterchainTokenService.js:236:44) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - at Context. (test/InterchainTokenService.js:2578:40) - - 40) Interchain Token Service - Express Receive Remote Token with Data - Should be able to receive mint_burn token: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 658d2d7f-836d-4503-a5d6-827f19fcd88f] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606582e09883225484fcb56c2d46f7001b4cda7c98950f2cceac377c7a9524a4e938c000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000058574827af729251a5c62489ecd547bd60fc970328916157912a26226fe954793000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ed23156ea19623e8e36a2bcb1ec30fe92dcbbf92000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 658d2d7f-836d-4503-a5d6-827f19fcd88f] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 41) Interchain Token Service - Express Receive Remote Token with Data - Should be able to receive lock_unlock_with_fee token: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 4cc715f1-8e32-4db5-a62b-e02b7c3eecc7] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x491606580fe211fecad7bcf78eb8003354873340e93de84ada1bf0cd89b01a5b711aee72000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005bd274a1d53441319cda89b2a23a865958a17c8d625e44086a5c16e8d1f0bc827000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000002123400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000147a7a6422edd5ca7c59717bc2af89796a17d633bb000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 4cc715f1-8e32-4db5-a62b-e02b7c3eecc7] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 42) Interchain Token Service - Flow Limits - "before all" hook for "Should be able to send token only if it does not trigger the mint limit": - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: c6d17be8-9b3b-47cd-b99e-c8cbb271dd04] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x4916065812b39537984b07b23669ef8f6e55130bf2f55951880c8ddac184bae7d5a35b2a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000054fa43dd556c49f9db6949db696d778f93adb2c6de587cefb3a86a21b61ed71f5000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001426cd0706c2f8cc5a3202c71615b668e56eb9f69d000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: c6d17be8-9b3b-47cd-b99e-c8cbb271dd04] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 43) Interchain Token Service - Flow Limiters - "before all" hook for "Should have only the owner be a flow limiter": - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 4ee9624d-5276-486b-bd72-d71acfa20dbf] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658dabf8484d02750235c810b98c17e483959e0d17e44f4fd749b4bb8132fa6775a000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000005a6b8498c1378f84858ea34a77fbca3a3e7fd752ea17559221fe380604a0519c9000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000021234000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001461c8e8170bb77730efa749069adb8ca6af6f57e9000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 4ee9624d-5276-486b-bd72-d71acfa20dbf] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 44) Interchain Token Service - Call contract value - Should return correct token address and amount: - Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="[Request ID: 12f9affe-a951-48d0-8fb1-d218926f61a1] execution reverted", method="estimateGas", transaction={"from":"0x67D8d32E9Bf1a9968a5ff53B87d777Aa8EBBEe69","to":"0x602ea66271618eb9F9B8d781DaAE7D955e0C148B","data":"0x49160658d59bc4ecd95fecf1666f35d5041cf69c34d39f75f6ea8d181fbc8363422dcb6e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000066178656c6172000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000416178656c617231323334353637383930313233343536373839303132333435363738393031323334353637383930313233343536373839303132333435363738390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000c736f7572636520636861696e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000058fda4c5a4a81da8b736cb24dcc94771933189c4f7b6327399056f8f81051a062000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000212340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014752799a3b4e1f8d28ac4149354c17041c286e221000000000000000000000000000000000000000000000000000000000000000000000000000000000000001467d8d32e9bf1a9968a5ff53b87d777aa8ebbee69000000000000000000000000","accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: [Request ID: 12f9affe-a951-48d0-8fb1-d218926f61a1] execution reverted\n at HttpProvider.request (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/hardhat/src/internal/core/providers/http.ts:107:21)\n at processTicksAndRejections (node:internal/process/task_queues:105:5)\n at EthersProviderWrapper.send (/Users/rista/Projects/commonprefix/hedera/interchain-token-service/node_modules/@nomiclabs/hardhat-ethers/src/internal/ethers-provider-wrapper.ts:13:20)","code":3,"_isProviderError":true,"data":"0xf9eef82a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2) - at Logger.makeError (node_modules/@ethersproject/logger/src.ts/index.ts:269:28) - at Logger.throwError (node_modules/@ethersproject/logger/src.ts/index.ts:281:20) - at checkError (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:78:20) - at EthersProviderWrapper. (node_modules/@ethersproject/providers/src.ts/json-rpc-provider.ts:642:20) - at step (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23) - at Object.throw (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53) - at rejected (node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - - 45) Interchain Token Service - Interchain Token Migration - Should migrate a token succesfully: - TypeError: service.interchainTokenAddress is not a function - at Object.deployNewInterchainToken [as interchainToken] (test/InterchainTokenService.js:236:44) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - at Context. (test/InterchainTokenService.js:2943:52) - - 46) Interchain Token Service - Interchain Token Migration - Should not be able to migrate a token twice: - TypeError: service.interchainTokenAddress is not a function - at Object.deployNewInterchainToken [as interchainToken] (test/InterchainTokenService.js:236:44) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - at Context. (test/InterchainTokenService.js:2957:52) - - 47) Interchain Token Service - Interchain Token Migration - Should not be able to migrate a token as not the owner: - TypeError: service.interchainTokenAddress is not a function - at Object.deployNewInterchainToken [as interchainToken] (test/InterchainTokenService.js:236:44) - at processTicksAndRejections (node:internal/process/task_queues:105:5) - at Context. (test/InterchainTokenService.js:2976:35) - - - - -Your solidity settings have viaIR enabled, which is not fully supported yet. You can still use Hardhat, but some features, like stack traces, might not work correctly. - -Learn more at https://hardhat.org/solc-viair -~/P/c/h/interchain-token-service on  hedera-its [!] via ⬢ v23.8.0 took 10m24s ❯ diff --git a/scripts/create-hts-token.js b/scripts/create-hts-token.js new file mode 100644 index 00000000..47c77b9d --- /dev/null +++ b/scripts/create-hts-token.js @@ -0,0 +1,33 @@ +const { AccountId, TokenCreateTransaction, TokenSupplyType, TokenType } = require('@hashgraph/sdk'); + +function evmAddressToAccountId(evmAddress) { + return AccountId.fromEvmAddress(evmAddress); +} + +async function createHtsToken(hederaClient, operatorPk, name, symbol, decimals = 8, intialSupply = 0) { + const tokenCreateTx = new TokenCreateTransaction() + .setTokenName(name) + .setTokenSymbol(symbol) + .setTokenType(TokenType.FungibleCommon) + .setDecimals(decimals) + .setInitialSupply(intialSupply) + .setTreasuryAccountId(hederaClient._operator.accountId) + .setSupplyType(TokenSupplyType.Infinite) + .setSupplyKey(operatorPk) + .freezeWith(hederaClient); + + const tokenCreateSign = await tokenCreateTx.sign(operatorPk); + const tokenCreateSubmit = await tokenCreateSign.execute(hederaClient); + const tokenCreateRx = await tokenCreateSubmit.getReceipt(hederaClient); + const tokenId = tokenCreateRx.tokenId; + const tokenAddress = `0x${tokenId.toSolidityAddress().toLowerCase()}`; + + // console.log(`Token created: ${tokenId.toString()} (EVM Address: ${tokenAddress})`); + + return [tokenAddress, tokenId]; +} + +module.exports = { + evmAddressToAccountId, + createHtsToken, +}; diff --git a/scripts/deploy-whbar.js b/scripts/deploy-whbar.js index 0955fbea..02b7aee0 100644 --- a/scripts/deploy-whbar.js +++ b/scripts/deploy-whbar.js @@ -15,7 +15,6 @@ async function fundWithWHBAR(whbar, targetAddress, amount, wallet) { const depositTx = await whbar.connect(wallet).deposit({ value: amount }); await depositTx.wait(); - console.log('Deposited funds.'); const ownBalance = await whbar.balanceOf(wallet.address); console.log(`${wallet.address} WHBAR balance: ${ethers.utils.formatUnits(ownBalance, 8)} WHBAR`); diff --git a/scripts/deploy.js b/scripts/deploy.js index 0f8ddfaf..5f4f54ea 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -3,6 +3,8 @@ const { Contract, utils: { defaultAbiCoder }, } = ethers; +const fs = require('fs'); +const path = require('path'); const Proxy = require('../artifacts/contracts/proxies/InterchainProxy.sol/InterchainProxy.json'); const Create3Deployer = require('@axelar-network/axelar-gmp-sdk-solidity/artifacts/contracts/deploy/Create3Deployer.sol/Create3Deployer.json'); const { create3DeployContract, getCreate3Address } = require('@axelar-network/axelar-gmp-sdk-solidity'); @@ -11,6 +13,7 @@ const { deployHTS } = require('./deploy-hts'); const { deployWHBAR, fundWithWHBAR } = require('./deploy-whbar'); const HTS_LIBRARY_NAME = 'contracts/hedera/HTS.sol:HTS'; +const DEPLOYMENT_FILE = path.join(__dirname, '..', 'deployment.json'); // List of contracts that depend on HTS library const HTS_DEPENDENT_CONTRACTS = [ @@ -31,47 +34,87 @@ const deploymentContext = { contracts: {}, }; -function getCurrentHTSAddress() { - return deploymentContext.htsAddress; +// Load deployment state from file +function loadDeploymentState() { + try { + if (fs.existsSync(DEPLOYMENT_FILE)) { + const data = JSON.parse(fs.readFileSync(DEPLOYMENT_FILE, 'utf8')); + deploymentContext.htsAddress = data.htsAddress || null; + deploymentContext.whbarAddress = data.whbarAddress || null; + deploymentContext.contracts = data.contracts || {}; + console.log(`\tLoaded deployment state`); + console.log(`\t- HTS Address: ${deploymentContext.htsAddress}`); + console.log(`\t- WHBAR Address: ${deploymentContext.whbarAddress}`); + console.log(`\t- Contracts: ${Object.keys(deploymentContext.contracts).length} found`); + } + } catch (error) { + console.warn('Failed to load deployment state:', error.message); + } } -function getCurrentWHBARAddress() { - return deploymentContext.whbarAddress; -} +loadDeploymentState(); + +// Save deployment state to file +function saveDeploymentState() { + try { + let data = {}; + + if (fs.existsSync(DEPLOYMENT_FILE)) { + data = JSON.parse(fs.readFileSync(DEPLOYMENT_FILE, 'utf8')); + } + + data = { + htsAddress: deploymentContext.htsAddress ?? data.htsAddress, + whbarAddress: deploymentContext.whbarAddress ?? data.whbarAddress, + contracts: { ...data.contracts, ...deploymentContext.contracts }, + }; -async function deployContract(wallet, contractName, args = [], additionalLibraries = {}, htsAddress = null) { - // Check if contract already exists in deployment context - if (deploymentContext.contracts[contractName]) { - console.log(`Using existing ${contractName} at ${deploymentContext.contracts[contractName]}`); - const contract = await ethers.getContractAt(contractName, deploymentContext.contracts[contractName], wallet); - return contract; + fs.writeFileSync(DEPLOYMENT_FILE, JSON.stringify(data, null, 2)); + console.log(`Deployment state saved to ${DEPLOYMENT_FILE}`); + } catch (error) { + console.error('Failed to save deployment state:', error.message); } +} + +function hasCompleteDeployment() { + const requiredContracts = [ + 'InterchainTokenServiceProxy', + 'InterchainTokenFactoryProxy', + 'MockGateway', + 'AxelarGasService', + 'Create3Deployer', + 'TokenManagerDeployer', + 'InterchainTokenDeployer', + 'TokenManager', + 'TokenHandler', + ]; + + return ( + requiredContracts.every((contract) => deploymentContext.contracts[contract]) && + deploymentContext.htsAddress && + deploymentContext.whbarAddress + ); +} - const libraries = { ...additionalLibraries }; +async function deployContract(wallet, contractName, args = [], usePredeployed = false) { + const libraries = {}; // Automatically add HTS library for dependent contracts if (HTS_DEPENDENT_CONTRACTS.includes(contractName)) { - let currentHtsAddress = htsAddress || deploymentContext.htsAddress; - - if (!currentHtsAddress) { - currentHtsAddress = await deployHTS(wallet); - console.log('Deployed HTS library to', currentHtsAddress); - deploymentContext.htsAddress = currentHtsAddress; + if (!deploymentContext.htsAddress) { + deploymentContext.htsAddress = await deployHTS(wallet); + console.log('Deployed HTS library to', deploymentContext.htsAddress); } - libraries[HTS_LIBRARY_NAME] = currentHtsAddress; + libraries[HTS_LIBRARY_NAME] = deploymentContext.htsAddress; } const factory = await ethers.getContractFactory(contractName, { signer: wallet, libraries, }); - const contract = await factory.deploy(...args).then((d) => d.deployed()); - - console.log(`Deployed ${contractName} to ${contract.address}`); - // Store the new address in deployment context - deploymentContext.contracts[contractName] = contract.address; + const contract = await factory.deploy(...args).then((d) => d.deployed()); return contract; } @@ -103,23 +146,33 @@ async function deployInterchainTokenService( ownerAddress = wallet.address, operatorAddress = wallet.address, ) { - const implementation = await deployContract(wallet, 'InterchainTokenService', [ - tokenManagerDeployerAddress, - interchainTokenDeployerAddress, - gatewayAddress, - gasServiceAddress, - interchainTokenFactoryAddress, - chainName, - itsHubAddress, - tokenManagerAddress, - tokenHandlerAddress, - ]); + const implementation = await deployContract( + wallet, + 'InterchainTokenService', + [ + tokenManagerDeployerAddress, + interchainTokenDeployerAddress, + gatewayAddress, + gasServiceAddress, + interchainTokenFactoryAddress, + chainName, + itsHubAddress, + tokenManagerAddress, + tokenHandlerAddress, + ], + true, + ); const proxy = await create3DeployContract(create3DeployerAddress, wallet, Proxy, deploymentKey, [ implementation.address, ownerAddress, defaultAbiCoder.encode(['address', 'string', 'string[]'], [operatorAddress, chainName, evmChains]), ]); console.log(`Deployed InterchainTokenServiceProxy to ${proxy.address}`); + + // Store proxy address in deployment context + deploymentContext.contracts['InterchainTokenServiceProxy'] = proxy.address; + saveDeploymentState(); + const service = new Contract(proxy.address, implementation.interface, wallet); return service; } @@ -132,6 +185,11 @@ async function deployInterchainTokenFactory(wallet, create3DeployerAddress, inte '0x', ]); console.log(`Deployed InterchainTokenFactoryProxy to ${proxy.address}`); + + // Store proxy address in deployment context + deploymentContext.contracts['InterchainTokenFactoryProxy'] = proxy.address; + saveDeploymentState(); + const factory = new Contract(proxy.address, implementation.interface, wallet); return factory; } @@ -145,19 +203,83 @@ async function deployAll( factoryDeploymentKey = deploymentKey + 'Factory', htsAddress = null, whbarAddress = null, - fundingAmount = '20', // Default 20 HBAR funding for ITS + fundingAmount = '300', // Default 300 HBAR funding for ITS ) { - // Print wallet balance - const balance = await wallet.getBalance(); - console.log(`Wallet balance: ${ethers.utils.formatEther(balance)} ETH`); + // Initialize deployment context with network info + deploymentContext.chainName = chainName; + deploymentContext.network = await wallet.provider.getNetwork().then((n) => n.name); + + // Load existing deployment state + loadDeploymentState(); + + // Override with provided addresses if specified + if (htsAddress) deploymentContext.htsAddress = htsAddress; + if (whbarAddress) deploymentContext.whbarAddress = whbarAddress; + + // Check if we have a complete deployment + if (hasCompleteDeployment()) { + console.log('Found complete deployment, reusing all contracts...'); + + // Instantiate existing contracts + const service = await ethers.getContractAt( + 'InterchainTokenService', + deploymentContext.contracts['InterchainTokenServiceProxy'], + wallet, + ); + const gateway = await ethers.getContractAt('MockGateway', deploymentContext.contracts['MockGateway'], wallet); + const gasService = await ethers.getContractAt('AxelarGasService', deploymentContext.contracts['AxelarGasService'], wallet); + const tokenFactory = await ethers.getContractAt( + 'InterchainTokenFactory', + deploymentContext.contracts['InterchainTokenFactoryProxy'], + wallet, + ); + const create3Deployer = new Contract(deploymentContext.contracts['Create3Deployer'], Create3Deployer.abi, wallet); + const tokenManagerDeployer = await ethers.getContractAt( + 'TokenManagerDeployer', + deploymentContext.contracts['TokenManagerDeployer'], + wallet, + ); + const interchainTokenDeployer = await ethers.getContractAt( + 'InterchainTokenDeployer', + deploymentContext.contracts['InterchainTokenDeployer'], + wallet, + ); + const tokenManager = await ethers.getContractAt('TokenManager', deploymentContext.contracts['TokenManager'], wallet); + const tokenHandler = await ethers.getContractAt('TokenHandler', deploymentContext.contracts['TokenHandler'], wallet); + const whbar = await ethers.getContractAt('WHBAR', deploymentContext.whbarAddress, wallet); + + console.log('All contracts reused from existing deployment'); + + return { + service, + gateway, + gasService, + tokenFactory, + create3Deployer, + tokenManagerDeployer, + interchainTokenDeployer, + tokenManager, + tokenHandler, + htsAddress: deploymentContext.htsAddress, + whbarAddress: deploymentContext.whbarAddress, + whbar, + }; + } - // Reset deployment context - deploymentContext.htsAddress = htsAddress; - deploymentContext.whbarAddress = whbarAddress; + // Deploy Create3Deployer or use existing + let create3Deployer; + if (deploymentContext.contracts['Create3Deployer']) { + console.log(`Using existing Create3Deployer at ${deploymentContext.contracts['Create3Deployer']}`); + create3Deployer = new Contract(deploymentContext.contracts['Create3Deployer'], Create3Deployer.abi, wallet); + } else { + create3Deployer = await new ethers.ContractFactory(Create3Deployer.abi, Create3Deployer.bytecode, wallet) + .deploy() + .then((d) => d.deployed()); + console.log(`Deployed Create3Deployer to ${create3Deployer.address}`); + deploymentContext.contracts['Create3Deployer'] = create3Deployer.address; + saveDeploymentState(); + } - const create3Deployer = await new ethers.ContractFactory(Create3Deployer.abi, Create3Deployer.bytecode, wallet) - .deploy() - .then((d) => d.deployed()); const gateway = await deployMockGateway(wallet); const gasService = await deployGasService(wallet); @@ -167,6 +289,7 @@ async function deployAll( if (!deploymentContext.whbarAddress) { whbar = await deployWHBAR(wallet); deploymentContext.whbarAddress = whbar.address; + saveDeploymentState(); } else { console.log('Using existing WHBAR at:', deploymentContext.whbarAddress); whbar = await ethers.getContractAt('WHBAR', deploymentContext.whbarAddress, wallet); @@ -248,6 +371,4 @@ module.exports = { deployInterchainTokenService, deployInterchainTokenFactory, deployAll, - getCurrentHTSAddress, - getCurrentWHBARAddress, }; diff --git a/test/HederaBasic.js b/test/HederaBasic.js deleted file mode 100644 index 41f6abc2..00000000 --- a/test/HederaBasic.js +++ /dev/null @@ -1,94 +0,0 @@ -'use strict'; - -const chai = require('chai'); -const { expect } = chai; -const { ethers } = require('hardhat'); -const { - Wallet, - constants: { MaxUint256, AddressZero, HashZero }, - utils: { defaultAbiCoder, solidityPack, keccak256, toUtf8Bytes, hexlify, id, randomBytes }, - getContractAt, -} = ethers; - -const { getCreate3Address } = require('@axelar-network/axelar-gmp-sdk-solidity'); -const { approveContractCall } = require('../scripts/utils'); -const { - getRandomBytes32, - getRandomInt, - expectRevert, - gasReporter, - getEVMVersion, - encodeInterchainTransferMessage, - encodeDeployInterchainTokenMessage, - encodeDeployTokenManagerMessage, - encodeSendHubMessage, - encodeReceiveHubMessage, - encodeLinkTokenMessage, - encodeRegisterTokenMetadataMessage, - expectNonZeroAddress, -} = require('./utils'); -const { deployAll, deployContract, deployInterchainTokenService } = require('../scripts/deploy'); -const { - MESSAGE_TYPE_INTERCHAIN_TRANSFER, - MESSAGE_TYPE_DEPLOY_TOKEN_MANAGER, - INVALID_MESSAGE_TYPE, - NATIVE_INTERCHAIN_TOKEN, - MINT_BURN_FROM, - LOCK_UNLOCK, - LOCK_UNLOCK_FEE_ON_TRANSFER, - MINT_BURN, - OPERATOR_ROLE, - FLOW_LIMITER_ROLE, - ITS_HUB_CHAIN, - ITS_HUB_ADDRESS, - MINTER_ROLE, - MESSAGE_TYPE_SEND_TO_HUB, - INTERCHAIN_TRANSFER, - INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE, -} = require('./constants'); -const { deployWHBAR, fundWithWHBAR } = require('../scripts/deploy-whbar'); - -describe.only('HederaBasic', () => { - let wallet, otherWallet; - let service, gateway, gasService, whbar; - - let create3Deployer; - let tokenManagerDeployer; - let interchainTokenDeployer; - let tokenManager; - let tokenHandler; - - const chainName = 'Test'; - - const destinationChain = 'destination chain'; - const sourceChain = 'source chain'; - - before(async () => { - const wallets = await ethers.getSigners(); - wallet = wallets[0]; - otherWallet = wallets[1]; - - ({ - service, - gateway, - gasService, - create3Deployer, - tokenManagerDeployer, - interchainTokenDeployer, - tokenManager, - tokenHandler, - whbar, - } = await deployAll(wallet, 'Test', ITS_HUB_ADDRESS, [sourceChain, destinationChain])); - }); - - it('should deploy InterchainTokenService', async () => { - const chainNameHash = await service.chainNameHash(); - console.log('Chain Name Hash:', chainNameHash); - expect(chainNameHash).to.equal(keccak256(chainName)); - }); - - it('should be funded with WHBAR', async () => { - const balance = await whbar.balanceOf(service.address); - expect(balance).to.be.gt(0, 'Service should have a non-zero WHBAR balance'); - }); -}); diff --git a/test/InterchainToken.js b/test/InterchainToken.js index 76cae12a..4533a993 100644 --- a/test/InterchainToken.js +++ b/test/InterchainToken.js @@ -10,7 +10,7 @@ const { expect } = require('chai'); const { getRandomBytes32, expectRevert, getEVMVersion } = require('./utils'); const { deployContract } = require('../scripts/deploy'); -describe('InterchainToken', () => { +describe.skip('InterchainToken [unsupported]', () => { let interchainToken, interchainTokenDeployer; const name = 'tokenName'; diff --git a/test/InterchainTokenService.js b/test/InterchainTokenService.js index 066d5be9..57659fe0 100644 --- a/test/InterchainTokenService.js +++ b/test/InterchainTokenService.js @@ -2,7 +2,7 @@ const chai = require('chai'); const { expect } = chai; -const { ethers } = require('hardhat'); +const { ethers, network } = require('hardhat'); const { Wallet, constants: { MaxUint256, AddressZero, HashZero }, @@ -40,21 +40,43 @@ const { FLOW_LIMITER_ROLE, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, - MINTER_ROLE, + MAX_INT64, MESSAGE_TYPE_SEND_TO_HUB, INTERCHAIN_TRANSFER, INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE, } = require('./constants'); +const { createHtsToken } = require('../scripts/create-hts-token'); + +const { Client: HederaClient, PrivateKey: HederaPrivateKey, AccountId: HederaAccountId } = require('@hashgraph/sdk'); + +const hederaConsensusUrl = network.config.consensusUrl; +const hederaPk = HederaPrivateKey.fromStringECDSA(network.config.operatorKey); +const hederaOperatorId = HederaAccountId.fromString(network.config.operatorId); +const hederaNodeId = HederaAccountId.fromString(network.config.nodeId); + +const hederaConsensusHost = hederaConsensusUrl.replace('http://', '').replace('https://', ''); +const hederaClient = HederaClient.forNetwork({ + [hederaConsensusHost]: hederaNodeId, +}); +hederaClient.setOperator(hederaOperatorId, hederaPk); + +console.log(`Using Hedera Client Configuration:`); +console.log(`\tMirror Node URL: ${network.config.url}`); +console.log(`\tConsensus URL: ${hederaConsensusUrl}`); +console.log(`\tOperator PK: ${network.config.operatorKey}`); +console.log(`\tOperator ID: ${hederaOperatorId.toString()}`); +console.log(`\tOperator Address: ${hederaOperatorId.toSolidityAddress()}`); +console.log(`\tNode ID: ${hederaNodeId.toString()}`); + const reportGas = gasReporter('Interchain Token Service'); -describe('Interchain Token Service', () => { +describe.only('Interchain Token Service', () => { let wallet, otherWallet; - let service, gateway, gasService, testToken; + let service, gateway, gasService, testErc20Token; let create3Deployer; let tokenManagerDeployer; - let interchainToken; let interchainTokenDeployer; let tokenManager; let tokenHandler; @@ -76,13 +98,43 @@ describe('Interchain Token Service', () => { const sourceTokenAddress = '0x1234'; const minter = wallet.address; - const token = await deployContract(wallet, 'TestInterchainTokenStandard', [ - tokenName, - tokenSymbol, - tokenDecimals, - service.address, - tokenId, - ]); + const [tokenAddress] = await createHtsToken(hederaClient, hederaPk, tokenName, tokenSymbol, tokenDecimals, mintAmount); + + const params = defaultAbiCoder.encode(['bytes', 'address'], [wallet.address, tokenAddress]); + const { payload } = encodeReceiveHubMessage( + sourceChain, + encodeLinkTokenMessage(tokenId, tokenManagerType, sourceTokenAddress, tokenAddress, minter), + ); + const commandId = await approveContractCall(gateway, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, service.address, payload); + const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); + + await expect(reportGas(service.execute(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payload), 'Receive GMP DEPLOY_TOKEN_MANAGER')) + .to.emit(service, 'TokenManagerDeployed') + .withArgs(tokenId, expectedTokenManagerAddress, tokenManagerType, params); + + const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); + const tmTokenAddress = await tokenManager.tokenAddress(); + expect(tmTokenAddress.toLowerCase()).to.equal(tokenAddress); + expect(await tokenManager.hasRole(wallet.address, OPERATOR_ROLE)).to.be.true; + + const token = await getContractAt('IERC20Named', tokenAddress, wallet); + + if (mintAmount > 0) { + if (!skipApprove) await token.approve(service.address, mintAmount).then((tx) => tx.wait()); + } + + return [token, tokenManager, tokenId, salt]; + } + + async function deployNewLockUnlockErc20(service, tokenName, tokenSymbol, tokenDecimals, mintAmount = 0, skipApprove = false) { + const salt = getRandomBytes32(); + const tokenId = await service.interchainTokenId(wallet.address, salt); + const tokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManagerType = LOCK_UNLOCK; + const sourceTokenAddress = '0x1234'; + const minter = wallet.address; + + const token = await deployContract(wallet, 'TestERC20MintableBurnable', [tokenName, tokenSymbol, tokenDecimals]); const params = defaultAbiCoder.encode(['bytes', 'address'], [wallet.address, token.address]); const { payload } = encodeReceiveHubMessage( @@ -97,7 +149,8 @@ describe('Interchain Token Service', () => { .withArgs(tokenId, expectedTokenManagerAddress, tokenManagerType, params); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); - expect(await tokenManager.tokenAddress()).to.equal(token.address); + const tmTokenAddress = await tokenManager.tokenAddress(); + expect(tmTokenAddress.toLowerCase()).to.equal(token.address); expect(await tokenManager.hasRole(wallet.address, OPERATOR_ROLE)).to.be.true; if (mintAmount > 0) { @@ -188,13 +241,7 @@ describe('Interchain Token Service', () => { const sourceTokenAddress = '0x1234'; const minter = wallet.address; - const token = await deployContract(wallet, 'TestInterchainTokenStandard', [ - tokenName, - tokenSymbol, - tokenDecimals, - service.address, - tokenId, - ]); + const token = await deployContract(wallet, 'TestERC20MintableBurnable', [tokenName, tokenSymbol, tokenDecimals]); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); @@ -240,19 +287,30 @@ describe('Interchain Token Service', () => { ); const commandId = await approveContractCall(gateway, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, service.address, payload); - await expect(service.execute(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payload)) + let tokenAddress; + + const tx = service.execute(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payload); + + await expect(tx) .to.emit(service, 'InterchainTokenDeployed') .withArgs(tokenId, expectNonZeroAddress, wallet.address, tokenName, tokenSymbol, tokenDecimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, tokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, params); + .withArgs(tokenId, tokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, (params) => { + const [minter_, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(minter_.toLowerCase()).to.equal(wallet.address.toLowerCase()); + expectNonZeroAddress(tokenAddress_); + tokenAddress = tokenAddress_; + return true; + }); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); expect(await tokenManager.hasRole(service.address, OPERATOR_ROLE)).to.be.true; + const token = await getContractAt('IERC20Named', tokenAddress, wallet); + if (mintAmount > 0) { - await tokenManager.mint(wallet.address, mintAmount).then((tx) => tx.wait()); - // TODO(hedera) support this - if (!skipApprove) await tokenManager.approve(service.address, mintAmount).then((tx) => tx.wait()); + await tokenManager.mint(tokenAddress, wallet.address, mintAmount).then((tx) => tx.wait()); + if (!skipApprove) await token.approve(service.address, mintAmount).then((tx) => tx.wait()); } if (minter) { @@ -263,8 +321,9 @@ describe('Interchain Token Service', () => { } deployFunctions.lockUnlock = deployNewLockUnlock; + deployFunctions.lockUnlockErc20 = deployNewLockUnlockErc20; deployFunctions.lockUnlockFee = deployNewLockUnlockFee; - deployFunctions.mintBurn = makeDeployNewMintBurn(MINT_BURN); + deployFunctions.mintBurnErc20 = makeDeployNewMintBurn(MINT_BURN); deployFunctions.mintBurnFrom = makeDeployNewMintBurn(MINT_BURN_FROM); deployFunctions.interchainToken = deployNewInterchainToken; @@ -273,25 +332,16 @@ describe('Interchain Token Service', () => { wallet = wallets[0]; otherWallet = wallets[1]; - ({ - service, - gateway, - gasService, - create3Deployer, - tokenManagerDeployer, - interchainToken, - interchainTokenDeployer, - tokenManager, - tokenHandler, - } = await deployAll(wallet, 'Test', ITS_HUB_ADDRESS, [sourceChain, destinationChain])); - - testToken = await deployContract(wallet, 'TestInterchainTokenStandard', [ - 'Test Token', - 'TST', - 18, - service.address, - getRandomBytes32(), - ]); + const wallet1Balance = await wallet.getBalance(); + const wallet2Balance = await otherWallet.getBalance(); + + console.log(`\tWallet #1 ${wallet.address} with ${ethers.utils.formatEther(wallet1Balance)} HBAR`); + console.log(`\tWallet #2 ${otherWallet.address} with ${ethers.utils.formatEther(wallet2Balance)} HBAR`); + + ({ service, gateway, gasService, create3Deployer, tokenManagerDeployer, interchainTokenDeployer, tokenManager, tokenHandler } = + await deployAll(wallet, 'Test', ITS_HUB_ADDRESS, [sourceChain, destinationChain])); + + testErc20Token = await deployContract(wallet, 'TestERC20MintableBurnable', ['Test Token', 'TST', 18]); }); describe('Interchain Token Service Deployment', () => { @@ -573,13 +623,13 @@ describe('Interchain Token Service', () => { expect(tokenManagerImplementation).to.eq(tokenManager.address); }); - it('Should revert on TokenManagerProxy deployment with invalid constructor parameters', async () => { + it.only('Should revert on TokenManagerProxy deployment with invalid constructor parameters', async () => { const salt = getRandomBytes32(); const tokenId = await service.interchainTokenId(wallet.address, salt); - const validParams = defaultAbiCoder.encode(['bytes', 'address'], ['0x', interchainToken.address]); + const validParams = defaultAbiCoder.encode(['bytes', 'address'], ['0x', wallet.address]); const tokenManagerProxy = await deployContract(wallet, 'TestTokenManagerProxy', [ service.address, - MINT_BURN, + LOCK_UNLOCK, tokenId, validParams, ]); @@ -635,19 +685,21 @@ describe('Interchain Token Service', () => { const salt = getRandomBytes32(); await expectRevert( - (gasOptions) => serviceTest.linkToken(salt, chainName, testToken.address, LOCK_UNLOCK, '0x', 0, gasOptions), + (gasOptions) => serviceTest.linkToken(salt, chainName, testErc20Token.address, LOCK_UNLOCK, '0x', 0, gasOptions), serviceTest, 'CannotDeployRemotelyToSelf', ); }); }); + // Hedera ✅ describe('Owner functions', () => { it('Should revert on set pause status when not called by the owner', async () => { await expectRevert((gasOptions) => service.connect(otherWallet).setPauseStatus(true, gasOptions), service, 'NotOwner'); }); }); + // Hedera ✅ describe('Operator functions', () => { const chain = 'Test'; @@ -678,6 +730,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Token Handler', () => { const amount = 1234; @@ -696,6 +749,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Deploy and Register Interchain Token', () => { const tokenName = 'Token Name'; const tokenSymbol = 'TN'; @@ -716,6 +770,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Deploy and Register remote Interchain Token', () => { const tokenName = 'Token Name'; const tokenSymbol = 'TN'; @@ -736,11 +791,18 @@ describe('Interchain Token Service', () => { ); const commandId = await approveContractCall(gateway, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, service.address, payload); + let tokenAddress; await expect(service.execute(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payload)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, tokenAddress, AddressZero, tokenName, tokenSymbol, tokenDecimals) + .withArgs(tokenId, expectNonZeroAddress, AddressZero, tokenName, tokenSymbol, tokenDecimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, tokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, params); + .withArgs(tokenId, tokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, (params) => { + const [minter_, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(minter_).to.equal(minter); + expectNonZeroAddress(tokenAddress_); + tokenAddress = tokenAddress_; + return true; + }); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); expect(await tokenManager.tokenAddress()).to.equal(tokenAddress); expect(await tokenManager.hasRole(service.address, OPERATOR_ROLE)).to.be.true; @@ -763,6 +825,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Receive Remote Interchain Token Deployment', () => { const tokenName = 'Token Name'; const tokenSymbol = 'TN'; @@ -795,11 +858,18 @@ describe('Interchain Token Service', () => { ); const commandId = await approveContractCall(gateway, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, service.address, payload); + let tokenAddress; await expect(service.execute(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payload)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, tokenAddress, AddressZero, tokenName, tokenSymbol, tokenDecimals) + .withArgs(tokenId, expectNonZeroAddress, AddressZero, tokenName, tokenSymbol, tokenDecimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, tokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, params); + .withArgs(tokenId, tokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, (params) => { + const [minter_, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(minter_).to.equal(minter); + expectNonZeroAddress(tokenAddress_); + tokenAddress = tokenAddress_; + return true; + }); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); expect(await tokenManager.tokenAddress()).to.equal(tokenAddress); @@ -807,12 +877,15 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Register Token Metadata', () => { const decimals = 18; - let token; + let tokenAddress, erc20TokenAddress; before(async () => { - token = await deployContract(wallet, 'TestInterchainTokenStandard', ['Test', 'TEST', decimals, service.address, HashZero]); + [tokenAddress] = await createHtsToken(hederaClient, hederaPk, 'Test', 'TEST', decimals); + const token = await deployContract(wallet, 'TestERC20MintableBurnable', ['Test', 'TEST', decimals]); + erc20TokenAddress = token.address; }); it('Should revert on registering token metadata with empty token address', async () => { @@ -821,32 +894,37 @@ describe('Interchain Token Service', () => { it('Should successfully register token metadata', async () => { const gasValue = 0; - const { payload, payloadHash } = encodeRegisterTokenMetadataMessage(token.address, decimals); + const { payload, payloadHash } = encodeRegisterTokenMetadataMessage(tokenAddress, decimals); - await expect(reportGas(service.registerTokenMetadata(token.address, gasValue), 'registerTokenMetadata')) + await expect(reportGas(service.registerTokenMetadata(tokenAddress, gasValue), 'registerTokenMetadata')) .to.emit(service, 'TokenMetadataRegistered') - .withArgs(token.address, decimals) + .withArgs(tokenAddress, decimals) + .to.emit(gateway, 'ContractCall') + .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, payload); + }); + + it('Should successfully register token metadata for ERC20', async () => { + const gasValue = 0; + const { payload, payloadHash } = encodeRegisterTokenMetadataMessage(erc20TokenAddress, decimals); + + await expect(reportGas(service.registerTokenMetadata(erc20TokenAddress, gasValue), 'registerTokenMetadata')) + .to.emit(service, 'TokenMetadataRegistered') + .withArgs(erc20TokenAddress, decimals) .to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, payload); }); }); + // Hedera ✅ describe('Custom Token Manager Deployment', () => { const tokenName = 'Token Name'; const tokenSymbol = 'TN'; const tokenDecimals = 13; - let token, salt, tokenId; + let tokenAddress, salt; before(async () => { salt = getRandomBytes32(); - tokenId = await service.interchainTokenId(wallet.address, salt); - token = await deployContract(wallet, 'TestInterchainTokenStandard', [ - tokenName, - tokenSymbol, - tokenDecimals, - service.address, - tokenId, - ]); + [tokenAddress] = await createHtsToken(hederaClient, hederaPk, tokenName, tokenSymbol, tokenDecimals); }); it('Should revert when calling registerCustomToken as not the factory', async () => { @@ -859,12 +937,12 @@ describe('Interchain Token Service', () => { }); it('Should revert on deploying an invalid token manager', async () => { - await expectRevert((gasOptions) => service.linkToken(salt, '', token.address, 6, wallet.address, 0, gasOptions)); + await expectRevert((gasOptions) => service.linkToken(salt, '', tokenAddress, 6, wallet.address, 0, gasOptions)); }); it('Should revert on deploying a local token manager with invalid params', async () => { await expectRevert( - (gasOptions) => service.linkToken(salt, '', token.address, NATIVE_INTERCHAIN_TOKEN, '0x', 0, gasOptions), + (gasOptions) => service.linkToken(salt, '', tokenAddress, NATIVE_INTERCHAIN_TOKEN, '0x', 0, gasOptions), service, 'CannotDeploy', ); @@ -872,7 +950,7 @@ describe('Interchain Token Service', () => { it('Should revert on deploying a local token manager with interchain token manager type', async () => { await expectRevert( - (gasOptions) => service.linkToken(salt, '', token.address, NATIVE_INTERCHAIN_TOKEN, wallet.address, 0, gasOptions), + (gasOptions) => service.linkToken(salt, '', tokenAddress, NATIVE_INTERCHAIN_TOKEN, wallet.address, 0, gasOptions), service, 'CannotDeploy', [NATIVE_INTERCHAIN_TOKEN], @@ -881,7 +959,7 @@ describe('Interchain Token Service', () => { it('Should revert on deploying a local token manager with invalid params', async () => { await expectRevert( - (gasOptions) => service.linkToken(salt, '', token.address, LOCK_UNLOCK, '0x12', 0, gasOptions), + (gasOptions) => service.linkToken(salt, '', tokenAddress, LOCK_UNLOCK, '0x12', 0, gasOptions), service, 'NotSupported', ); @@ -898,7 +976,7 @@ describe('Interchain Token Service', () => { it('Should revert on deploying a remote token manager with interchain token manager type', async () => { await expectRevert( (gasOptions) => - service.linkToken(salt, destinationChain, token.address, NATIVE_INTERCHAIN_TOKEN, wallet.address, 0, gasOptions), + service.linkToken(salt, destinationChain, tokenAddress, NATIVE_INTERCHAIN_TOKEN, wallet.address, 0, gasOptions), service, 'CannotDeploy', [NATIVE_INTERCHAIN_TOKEN], @@ -909,7 +987,7 @@ describe('Interchain Token Service', () => { await service.setPauseStatus(true).then((tx) => tx.wait()); await expectRevert( - (gasOptions) => service.linkToken(salt, '', token.address, LOCK_UNLOCK, wallet.address, 0, gasOptions), + (gasOptions) => service.linkToken(salt, '', tokenAddress, LOCK_UNLOCK, wallet.address, 0, gasOptions), service, 'Pause', ); @@ -923,22 +1001,23 @@ describe('Interchain Token Service', () => { before(async () => { [, , tokenId, salt] = await deployFunctions.lockUnlock(service, 'Name', 'symbol', 6); }); - it('Should initialize a remote custom token manager deployment', async () => { + it.skip('Should initialize a remote custom token manager deployment', async () => { const tokenAddress = await service.registeredTokenAddress(tokenId); const remoteTokenAddress = '0x1234'; - const minter = '0x5789'; + const minter = wallet.address; const type = LOCK_UNLOCK; const { payload, payloadHash } = encodeSendHubMessage( destinationChain, encodeLinkTokenMessage(tokenId, type, tokenAddress, remoteTokenAddress, minter), ); - await expect( - reportGas( - service.linkToken(salt, destinationChain, remoteTokenAddress, type, minter, gasValue, { value: gasValue }), - 'Send deployTokenManager to remote chain', - ), - ) + await expect(service.setTrustedChain(destinationChain)).to.emit(service, 'TrustedChainSet').withArgs(destinationChain); + + const tx = service.linkToken(salt, destinationChain, remoteTokenAddress, type, minter, gasValue, { + value: gasValue, + }); + + await expect(reportGas(tx, 'Send deployTokenManager to remote chain')) .to.emit(service, 'InterchainTokenIdClaimed') .withArgs(tokenId, wallet.address, salt) .to.emit(service, 'LinkTokenStarted') @@ -990,6 +1069,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Receive Remote Token Manager Deployment', () => { const tokenName = 'Token Name'; const tokenSymbol = 'TN'; @@ -1002,18 +1082,12 @@ describe('Interchain Token Service', () => { const sourceTokenAddress = '0x1234'; const minter = wallet.address; - const token = await deployContract(wallet, 'TestInterchainTokenStandard', [ - tokenName, - tokenSymbol, - tokenDecimals, - service.address, - tokenId, - ]); + const [tokenAddress] = await createHtsToken(hederaClient, hederaPk, tokenName, tokenSymbol, tokenDecimals); - const params = defaultAbiCoder.encode(['bytes', 'address'], [wallet.address, token.address]); + const params = defaultAbiCoder.encode(['bytes', 'address'], [wallet.address, tokenAddress]); const { payload } = encodeReceiveHubMessage( sourceChain, - encodeLinkTokenMessage(tokenId, tokenManagerType, sourceTokenAddress, token.address, minter), + encodeLinkTokenMessage(tokenId, tokenManagerType, sourceTokenAddress, tokenAddress, minter), ); const commandId = await approveContractCall(gateway, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, service.address, payload); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); @@ -1023,29 +1097,23 @@ describe('Interchain Token Service', () => { .withArgs(tokenId, expectedTokenManagerAddress, tokenManagerType, params); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); - expect(await tokenManager.tokenAddress()).to.equal(token.address); + expect((await tokenManager.tokenAddress()).toLowerCase()).to.equal(tokenAddress); expect(await tokenManager.hasRole(wallet.address, OPERATOR_ROLE)).to.be.true; }); - it('Should be able to receive a remote mint/burn token manager deployment', async () => { + it.skip('Should be able to receive a remote mint/burn token manager deployment [unsupported]', async () => { const tokenId = getRandomBytes32(); const tokenManagerAddress = await service.tokenManagerAddress(tokenId); const tokenManagerType = MINT_BURN; const sourceTokenAddress = '0x1234'; const minter = wallet.address; - const token = await deployContract(wallet, 'TestInterchainTokenStandard', [ - tokenName, - tokenSymbol, - tokenDecimals, - service.address, - tokenId, - ]); + const [tokenAddress] = await createHtsToken(hederaClient, hederaPk, tokenName, tokenSymbol, tokenDecimals); - const params = defaultAbiCoder.encode(['bytes', 'address'], [wallet.address, token.address]); + const params = defaultAbiCoder.encode(['bytes', 'address'], [wallet.address, tokenAddress]); const { payload } = encodeReceiveHubMessage( sourceChain, - encodeLinkTokenMessage(tokenId, tokenManagerType, sourceTokenAddress, token.address, minter), + encodeLinkTokenMessage(tokenId, tokenManagerType, sourceTokenAddress, tokenAddress, minter), ); const commandId = await approveContractCall(gateway, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, service.address, payload); @@ -1054,27 +1122,43 @@ describe('Interchain Token Service', () => { .to.emit(service, 'TokenManagerDeployed') .withArgs(tokenId, expectedTokenManagerAddress, tokenManagerType, params); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); - expect(await tokenManager.tokenAddress()).to.equal(token.address); + expect(await tokenManager.tokenAddress()).to.equal(tokenAddress); expect(await tokenManager.hasRole(wallet.address, OPERATOR_ROLE)).to.be.true; }); + it('Should not be able to deploy a mint/burn token manager', async () => { + const tokenId = getRandomBytes32(); + const tokenManagerType = MINT_BURN; + const sourceTokenAddress = '0x1234'; + const minter = wallet.address; + + const [tokenAddress] = await createHtsToken(hederaClient, hederaPk, tokenName, tokenSymbol, tokenDecimals); + + const { payload } = encodeReceiveHubMessage( + sourceChain, + encodeLinkTokenMessage(tokenId, tokenManagerType, sourceTokenAddress, tokenAddress, minter), + ); + const commandId = await approveContractCall(gateway, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, service.address, payload); + + await expectRevert( + (gasOptions) => service.execute(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payload, gasOptions), + service, + 'TokenManagerDeploymentFailed', + ['0x'], + ); + }); + it('Should not be able to receive a remote interchain token manager deployment', async () => { const tokenId = getRandomBytes32(); const tokenManagerType = NATIVE_INTERCHAIN_TOKEN; const sourceTokenAddress = '0x1234'; const minter = wallet.address; - const token = await deployContract(wallet, 'TestInterchainTokenStandard', [ - tokenName, - tokenSymbol, - tokenDecimals, - service.address, - tokenId, - ]); + const [tokenAddress] = await createHtsToken(hederaClient, hederaPk, tokenName, tokenSymbol, tokenDecimals); const { payload } = encodeReceiveHubMessage( sourceChain, - encodeLinkTokenMessage(tokenId, tokenManagerType, sourceTokenAddress, token.address, minter), + encodeLinkTokenMessage(tokenId, tokenManagerType, sourceTokenAddress, tokenAddress, minter), ); const commandId = await approveContractCall(gateway, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, service.address, payload); @@ -1087,13 +1171,14 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Send Token', () => { const amount = 1234; const destAddress = '0x5678'; let token, tokenId, tokenManager; before(async () => { - [token, , tokenId] = await deployFunctions.lockUnlock(service, 'Test Token lockUnlock', 'TT', 12, amount); + await service.setPauseStatus(false).then((tx) => tx.wait()); }); it(`Should be able to initiate an interchain token transfer for lockUnlockFee with a normal ERC20 token`, async () => { @@ -1113,7 +1198,7 @@ describe('Interchain Token Service', () => { ); const transferToAddress = tokenManager.address; - await expect(service[INTERCHAIN_TRANSFER](...[tokenId, destinationChain, destAddress, amount, { value: gasValue }])) + await expect(service[INTERCHAIN_TRANSFER](...[tokenId, destinationChain, destAddress, amount, { value: gasValue * 10 ** 10 }])) .and.to.emit(token, 'Transfer') .withArgs(wallet.address, transferToAddress, amount) .and.to.emit(gateway, 'ContractCall') @@ -1143,7 +1228,7 @@ describe('Interchain Token Service', () => { await expect( service[INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE]( - ...[tokenId, destinationChain, destAddress, amount, '0x', gasValue, { value: gasValue }], + ...[tokenId, destinationChain, destAddress, amount, '0x', gasValue, { value: gasValue * 10 ** 10 }], ), ) .and.to.emit(token, 'Transfer') @@ -1174,6 +1259,8 @@ describe('Interchain Token Service', () => { }); it('Should revert on initiate interchain token transfer with zero amount', async () => { + [token, , tokenId] = await deployFunctions.lockUnlock(service, 'Test Token lockUnlock', 'TT', 12, amount); + await expectRevert( (gasOptions) => service[INTERCHAIN_TRANSFER](tokenId, destinationChain, destAddress, 0, { @@ -1214,6 +1301,8 @@ describe('Interchain Token Service', () => { }); it('Should revert on initiate interchain token transfer when service is paused', async () => { + [token, , tokenId] = await deployFunctions.lockUnlock(service, 'Test Token lockUnlock', 'TT', 12, amount); + await service.setPauseStatus(true).then((tx) => tx.wait()); await expectRevert( @@ -1225,9 +1314,11 @@ describe('Interchain Token Service', () => { service, 'Pause', ); + + await service.setPauseStatus(false).then((tx) => tx.wait()); }); - it('Should revert on transmit send token when service is paused', async () => { + it.skip('Should revert on transmit send token when service is paused [unsupported]', async () => { await expectRevert( (gasOptions) => service.transmitInterchainTransfer(tokenId, wallet.address, destinationChain, destAddress, amount, '0x', { @@ -1241,7 +1332,7 @@ describe('Interchain Token Service', () => { await service.setPauseStatus(false).then((tx) => tx.wait()); }); - it('Should revert on transmit send token when destination address is zero address', async () => { + it.skip('Should revert on transmit send token when destination address is zero address [unsupported]', async () => { await expectRevert( (gasOptions) => service.transmitInterchainTransfer(tokenId, wallet.address, destinationChain, '0x', amount, '0x', { @@ -1253,7 +1344,7 @@ describe('Interchain Token Service', () => { ); }); - it('Should revert on transmit send token when not called by interchain token', async () => { + it.skip('Should revert on transmit send token when not called by interchain token [unsupported]', async () => { const errorSignatureHash = id('NotToken(address,address)'); const selector = errorSignatureHash.substring(0, 10); const errorData = defaultAbiCoder.encode(['address', 'address'], [wallet.address, token.address]); @@ -1271,6 +1362,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Execute checks', () => { const sourceChain = 'source chain'; const amount = 1234; @@ -1323,6 +1415,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Receive Remote Tokens', () => { const amount = 1234; let destAddress; @@ -1368,7 +1461,7 @@ describe('Interchain Token Service', () => { }); it('Should be able to receive mint/burn token', async () => { - const [token, , tokenId] = await deployFunctions.mintBurn(service, 'Test Token Mint Burn', 'TT', 12, 0); + const [token, , tokenId] = await deployFunctions.mintBurnErc20(service, 'Test Token Mint Burn', 'TT', 12, 0); const { payload } = encodeReceiveHubMessage( sourceChain, encodeInterchainTransferMessage(tokenId, hexlify(wallet.address), destAddress, amount, '0x'), @@ -1433,6 +1526,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Send Token With Data', () => { const amount = 1234; const destAddress = '0x5678'; @@ -1445,7 +1539,9 @@ describe('Interchain Token Service', () => { [token, tokenManager, tokenId] = await deployFunctions.lockUnlock(service, 'Test Token lockUnlock', 'TT', 12, amount); }); - for (const type of ['lockUnlock', 'mintBurn', 'lockUnlockFee', 'mintBurnFrom']) { + const supportedTypes = ['lockUnlock', 'mintBurnErc20', 'lockUnlockFee', 'lockUnlockErc20']; + + for (const type of supportedTypes) { it(`Should initiate an interchain token transfer via the interchainTransfer standard contract call & express call [${type}]`, async () => { const [token, tokenManager, tokenId] = await deployFunctions[type](service, `Test Token ${type}`, 'TT', 12, amount * 2); const sendAmount = type === 'lockUnlockFee' ? amount - 10 : amount; @@ -1464,14 +1560,11 @@ describe('Interchain Token Service', () => { await txApprove.wait(); } - await expect( - reportGas( - service[INTERCHAIN_TRANSFER](tokenId, destinationChain, destAddress, amount, { - value: gasValue, - }), - `Call service.interchainTransfer ${type}`, - ), - ) + const tx = service[INTERCHAIN_TRANSFER](tokenId, destinationChain, destAddress, amount, { + value: gasValue * 10 ** 10, + }); + + await expect(reportGas(tx, `Call service.interchainTransfer ${type}`)) .to.emit(token, 'Transfer') .withArgs(wallet.address, transferToAddress, amount) .and.to.emit(gateway, 'ContractCall') @@ -1531,7 +1624,7 @@ describe('Interchain Token Service', () => { metadata, gasValue, { - value: gasValue, + value: gasValue * 10 ** 10, }, ), `Call service.interchainTransfer ${type}`, @@ -1559,7 +1652,7 @@ describe('Interchain Token Service', () => { await expect( reportGas( service.callContractWithInterchainToken(tokenId, destinationChain, destAddress, amount, data, { - value: gasValue, + value: gasValue * 10 ** 10, }), `Call service.callContractWithInterchainToken ${type}`, ), @@ -1573,7 +1666,7 @@ describe('Interchain Token Service', () => { }); it('Should initiate an interchain token transfer via the callContractWithInterchainToken function on the service with large data', async () => { - const type = 'mintBurn'; + const type = 'mintBurnErc20'; const [token, , tokenId] = await deployFunctions[type](service, `Test Token ${type}`, 'TT', 12, amount); const largeData = hexlify(randomBytes(8 * 1024)); // 8 KB const { payload, payloadHash } = encodeSendHubMessage( @@ -1585,7 +1678,7 @@ describe('Interchain Token Service', () => { await expect( reportGas( service.callContractWithInterchainToken(tokenId, destinationChain, destAddress, amount, largeData, { - value: gasValue, + value: gasValue * 10 ** 10, }), `Call service.callContractWithInterchainToken ${type}`, ), @@ -1688,6 +1781,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Receive Remote Token with Data', () => { const sourceAddressForService = '0x1234'; const amount = 1234; @@ -1745,7 +1839,7 @@ describe('Interchain Token Service', () => { }); it('Should be able to receive mint/burn token', async () => { - const [token, , tokenId] = await deployFunctions.mintBurn(service, 'Test Token Mint Burn', 'TT', 12, amount); + const [token, , tokenId] = await deployFunctions.mintBurnErc20(service, 'Test Token Mint Burn', 'TT', 12, amount); const msg = 'mint/burn'; const data = defaultAbiCoder.encode(['address', 'string'], [wallet.address, msg]); @@ -1801,7 +1895,7 @@ describe('Interchain Token Service', () => { expect(await executable.lastMessage()).to.equal(msg); }); - it('Should be able to receive lock/unlock with fee on transfer token', async () => { + it.skip('Should be able to receive lock/unlock with fee on transfer token [todo hts token custom fee]', async () => { const [token, tokenManager, tokenId] = await deployFunctions.lockUnlockFee( service, 'Test Token Lock Unlock', @@ -1910,13 +2004,7 @@ describe('Interchain Token Service', () => { const tokenDecimals = 53; const tokenId = getRandomBytes32(); - const token = await deployContract(wallet, 'TestInterchainTokenStandard', [ - tokenName, - tokenSymbol, - tokenDecimals, - service.address, - tokenId, - ]); + const token = await deployContract(wallet, 'TestERC20MintableBurnable', [tokenName, tokenSymbol, tokenDecimals]); const tokenManagerAddress = await service.tokenManagerAddress(tokenId); const tokenManagerType = LOCK_UNLOCK; @@ -1957,13 +2045,14 @@ describe('Interchain Token Service', () => { }); }); - describe('Send Interchain Token', () => { + // Not supported in Hedera + describe.skip('Send Interchain Token [unsupported]', () => { const amount = 1234; const destAddress = '0x5678'; const metadata = '0x'; let token, tokenManager, tokenId; - for (const type of ['mintBurn', 'mintBurnFrom', 'lockUnlockFee', 'lockUnlock']) { + for (const type of ['mintBurnErc20', 'lockUnlockFee', 'lockUnlock', 'lockUnlockErc20']) { it(`Should be able to initiate an interchain token transfer via interchainTransfer & interchainTransferFrom [${type}]`, async () => { [token, tokenManager, tokenId] = await deployFunctions[type](service, `Test Token ${type}`, 'TT', 12, amount * 3, true); const sendAmount = type === 'lockUnlockFee' ? amount - 10 : amount; @@ -2010,7 +2099,7 @@ describe('Interchain Token Service', () => { }); } - for (const type of ['mintBurn', 'mintBurnFrom', 'lockUnlockFee', 'lockUnlock']) { + for (const type of ['mintBurnErc20', 'lockUnlockFee', 'lockUnlock']) { it(`Should be able to initiate an interchain token transfer via interchainTransfer [${type}] without native gas`, async () => { [token, tokenManager, tokenId] = await deployFunctions[type](service, `Test Token ${type}`, 'TT', 12, amount * 3, true); const sendAmount = type === 'lockUnlockFee' ? amount - 10 : amount; @@ -2085,7 +2174,8 @@ describe('Interchain Token Service', () => { }); }); - describe('Send Interchain Token With Data', () => { + // Not supported in Hedera + describe.skip('Send Interchain Token With Data [unsupported]', () => { const amount = 1234; const destAddress = '0x5678'; let sourceAddress; @@ -2123,6 +2213,7 @@ describe('Interchain Token Service', () => { } }); + // Hedera ✅ describe('Express Execute', () => { const commandId = getRandomBytes32(); const sourceAddress = '0x1234'; @@ -2260,6 +2351,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Interchain Executable', () => { const commandId = getRandomBytes32(); const sourceAddress = '0x1234'; @@ -2275,7 +2367,7 @@ describe('Interchain Token Service', () => { let token; before(async () => { - [token, , tokenId] = await deployFunctions.mintBurn(service, tokenName, tokenSymbol, tokenDecimals, amount * 2, true); + [token, , tokenId] = await deployFunctions.mintBurnErc20(service, tokenName, tokenSymbol, tokenDecimals, amount * 2, true); data = defaultAbiCoder.encode(['address', 'string'], [destinationAddress, message]); executable = await deployContract(wallet, 'TestInterchainExecutable', [service.address]); }); @@ -2331,6 +2423,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Express Receive Remote Token', () => { const amount = 1234; const destAddress = new Wallet(getRandomBytes32()).address; @@ -2393,9 +2486,8 @@ describe('Interchain Token Service', () => { }); it('Should be able to receive native_interchain token', async () => { - const [token, , tokenId] = await deployFunctions.interchainToken(service, 'Test Token Mint Burn', 'TT', 12); - - await (await token.mint(wallet.address, amount)).wait(); + const [token, tokenManager, tokenId] = await deployFunctions.interchainToken(service, 'Test Token Mint Burn', 'TT', 12); + await (await tokenManager.mintToken(token.address, wallet.address, amount)).wait(); await (await token.approve(service.address, amount)).wait(); const { payload, payloadHash } = encodeReceiveHubMessage( @@ -2408,15 +2500,19 @@ describe('Interchain Token Service', () => { expect(await service.getExpressExecutor(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash)).to.equal(wallet.address); await approveContractCall(gateway, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, service.address, payload, getRandomBytes32(), 0, commandId); - await expect(service.execute(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payload)) - .to.emit(token, 'Transfer') - .withArgs(AddressZero, wallet.address, amount) + + const interchainTransferTx = service.execute(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payload); + + await expect(interchainTransferTx) + // HTS doesn't emit Transfer event for Mint and Burn operations + // .to.emit(token, 'Transfer') + // .withArgs(AddressZero, wallet.address, amount) .and.to.emit(service, 'ExpressExecutionFulfilled') .withArgs(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, wallet.address); }); it('Should be able to receive mint_burn token', async () => { - const [token, , tokenId] = await deployFunctions.mintBurn(service, 'Test Token Mint Burn', 'TT', 12, amount); + const [token, , tokenId] = await deployFunctions.mintBurnErc20(service, 'Test Token Mint Burn', 'TT', 12, amount); await token.approve(service.address, amount).then((tx) => tx.wait()); @@ -2522,6 +2618,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Express Receive Remote Token with Data', () => { let sourceAddress; const sourceAddressForService = '0x1234'; @@ -2568,9 +2665,9 @@ describe('Interchain Token Service', () => { }); it('Should be able to receive native_interchain token', async () => { - const [token, , tokenId] = await deployFunctions.interchainToken(service, 'Test Token Mint Burn', 'TT', 12); + const [token, tokenManager, tokenId] = await deployFunctions.interchainToken(service, 'Test Token Mint Burn', 'TT', 12); - await (await token.mint(wallet.address, amount)).wait(); + await (await tokenManager.mintToken(token.address, wallet.address, amount)).wait(); await (await token.approve(service.address, amount)).wait(); const msg = 'mint/burn'; @@ -2585,8 +2682,9 @@ describe('Interchain Token Service', () => { await approveContractCall(gateway, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, service.address, payload, getRandomBytes32(), 0, commandId); await expect(service.execute(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payload)) - .to.emit(token, 'Transfer') - .withArgs(AddressZero, wallet.address, amount) + // HTS doesn't emit Transfer event for Mint and Burn operations + // .to.emit(token, 'Transfer') + // .withArgs(AddressZero, wallet.address, amount) .and.to.emit(service, 'ExpressExecutionFulfilled') .withArgs(commandId, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, wallet.address); @@ -2594,7 +2692,7 @@ describe('Interchain Token Service', () => { }); it('Should be able to receive mint_burn token', async () => { - const [token, , tokenId] = await deployFunctions.mintBurn(service, 'Test Token Mint Burn', 'TT', 12, amount); + const [token, , tokenId] = await deployFunctions.mintBurnErc20(service, 'Test Token Mint Burn', 'TT', 12, amount); await token.approve(service.address, amount).then((tx) => tx.wait()); const msg = 'mint/burn'; @@ -2640,6 +2738,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Flow Limits', () => { const destinationAddress = '0x1234'; let tokenManager, tokenId; @@ -2648,7 +2747,7 @@ describe('Interchain Token Service', () => { const mintAmount = MaxUint256; before(async () => { - [, tokenManager, tokenId] = await deployFunctions.mintBurn(service, 'Test Token Lock Unlock', 'TT', 12, mintAmount); + [, tokenManager, tokenId] = await deployFunctions.mintBurnErc20(service, 'Test Token Lock Unlock', 'TT', 12, mintAmount); await tokenManager.setFlowLimit(flowLimit).then((tx) => tx.wait()); }); @@ -2736,7 +2835,13 @@ describe('Interchain Token Service', () => { const tokenIds = []; const tokenManagers = []; - for (const type of ['lockUnlock', 'mintBurn', 'lockUnlockFee']) { + // Note: The flow limit is set to MAX_INT64 for lockUnlock since that + // is the maximum supply for an HTS token. + for (const [type, mintAmount] of [ + ['lockUnlock', MAX_INT64], + ['mintBurnErc20', MaxUint256], + ['lockUnlockFee', MaxUint256], + ]) { const [, tokenManager, tokenId] = await deployFunctions[type](service, `Test Token ${type}`, 'TT', 12, mintAmount); tokenIds.push(tokenId); tokenManagers.push(tokenManager); @@ -2765,6 +2870,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Flow Limiters', () => { let tokenManager; const sendAmount = 1234; @@ -2772,7 +2878,7 @@ describe('Interchain Token Service', () => { const mintAmount = flowLimit * 3; before(async () => { - [, tokenManager] = await deployFunctions.mintBurn(service, 'Test Token Lock Unlock', 'TT', 12, mintAmount); + [, tokenManager] = await deployFunctions.mintBurnErc20(service, 'Test Token Lock Unlock', 'TT', 12, mintAmount); }); it('Should have only the owner be a flow limiter', async () => { @@ -2854,6 +2960,7 @@ describe('Interchain Token Service', () => { }); }); + // Hedera ✅ describe('Call contract value', () => { const untrustedAddress = 'untrusted address'; const amount = 100; @@ -2922,11 +3029,12 @@ describe('Interchain Token Service', () => { const { payload } = encodeReceiveHubMessage(sourceChain, encodeInterchainTransferMessage(tokenId, '0x', '0x', amount, '0x')); const [tokenAddress, returnedAmount] = await service.contractCallValue(ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payload); - expect(tokenAddress).to.eq(token.address); + expect(tokenAddress.toLowerCase()).to.eq(token.address.toLowerCase()); expect(returnedAmount).to.eq(amount); }); }); + // Hedera ✅ describe('Bytecode checks [ @skip-on-coverage ]', () => { it('Should preserve the same proxy bytecode for each EVM', async () => { const proxyFactory = await ethers.getContractFactory('InterchainProxy', wallet); diff --git a/test/TokenManager.js b/test/TokenManager.js index 18fd33de..3c3dd5be 100644 --- a/test/TokenManager.js +++ b/test/TokenManager.js @@ -11,6 +11,7 @@ const { expectRevert, getEVMVersion } = require('./utils'); const { deployContract } = require('../scripts/deploy'); describe('Token Manager', () => { + const MINTER_ROLE = 0; const FLOW_LIMITER_ROLE = 2; let owner, other; let TestTokenManager; @@ -18,7 +19,7 @@ describe('Token Manager', () => { before(async () => { [owner, other] = await ethers.getSigners(); - TestTokenManager = await deployContract(owner, `TestTokenManager`, [other.address]); + TestTokenManager = await deployContract(owner, `TestTokenManager`, [other.address], true); }); it('Should revert on token manager deployment with invalid service address', async () => { @@ -65,8 +66,8 @@ describe('Token Manager', () => { await expectRevert( (gasOptions) => TestTokenManager.mintToken(other.address, owner.address, 1234, gasOptions), TestTokenManager, - 'NotService', - [owner.address], + 'MissingRole', + [owner.address, MINTER_ROLE], ); }); @@ -74,8 +75,8 @@ describe('Token Manager', () => { await expectRevert( (gasOptions) => TestTokenManager.burnToken(other.address, owner.address, 1234, gasOptions), TestTokenManager, - 'NotService', - [owner.address], + 'MissingRole', + [owner.address, MINTER_ROLE], ); }); @@ -92,7 +93,7 @@ describe('Token Manager', () => { const proxyBytecodeHash = keccak256(proxyBytecode); const expected = { - london: '0x8080880884e00735cc1a34bdf5c1ea6c023db60a01cfa1e951ca41ecf5fd8836', + london: '0x0ac950376eb76906473d551108bbf9b43939c9ac67f03d1fae3c91878ae66ff7', }[getEVMVersion()]; expect(proxyBytecodeHash).to.be.equal(expected); diff --git a/test/UtilsTest.js b/test/UtilsTest.js index c83aa812..d3a325b7 100644 --- a/test/UtilsTest.js +++ b/test/UtilsTest.js @@ -8,7 +8,7 @@ const { constants: { AddressZero }, } = ethers; const { expect } = chai; -const { getRandomBytes32, expectRevert } = require('./utils'); +const { getRandomBytes32, expectRevert, expectNonZeroAddress } = require('./utils'); const { deployContract, deployAll } = require('../scripts/deploy'); let ownerWallet, otherWallet; @@ -191,22 +191,18 @@ describe('ChainTracker', async () => { describe('TokenCreationPricing', async () => { let test; - let whbarContract; const tokenPrice = 100; // 100 tinycents before(async () => { - test = await deployContract(ownerWallet, 'TestTokenCreationPricing'); - whbarContract = await deployContract(ownerWallet, 'WHBAR'); - }); - - it('Should calculate hardcoded constants correctly', async () => { - await expect(deployContract(ownerWallet, `TestTokenCreationPricing`, [])).to.not.be.reverted; + test = await deployContract(ownerWallet, 'TestTokenCreationPricing', []); }); it('Should set and query token creation price properly', async () => { + expect(await test.setTokenCreationPriceTest(0)); + expect(await test.tokenCreationPrice()).to.equal(0); - await expect(test.setTokenCreationPriceTest(tokenPrice)).to.emit(test, 'TokenCreationPriceSet').withArgs(tokenPrice); + expect(await test.setTokenCreationPriceTest(tokenPrice)); expect(await test.tokenCreationPrice()).to.equal(tokenPrice); }); @@ -214,9 +210,11 @@ describe('TokenCreationPricing', async () => { it('Should set and query WHBAR address properly', async () => { expect(await test.whbarAddress()).to.equal(AddressZero); - await expect(test.setWhbarAddressTest(whbarContract.address)).to.emit(test, 'WhbarAddressSet').withArgs(whbarContract.address); + const randomWhbarAddress = new Wallet(getRandomBytes32()).address; + + expect(await test.setWhbarAddressTest(randomWhbarAddress)); - expect(await test.whbarAddress()).to.equal(whbarContract.address); + expect(await test.whbarAddress()).to.equal(randomWhbarAddress); }); it('Should revert when setting invalid WHBAR address', async () => { @@ -225,63 +223,43 @@ describe('TokenCreationPricing', async () => { }); describe('InterchainTokenDeployer', () => { - let interchainToken, interchainTokenDeployer; - const service = new Wallet(getRandomBytes32()).address; + let interchainTokenDeployer; const name = 'tokenName'; const symbol = 'tokenSymbol'; const decimals = 18; - const price = 1000; // 1000 tinybars - const MINTER_ROLE = 0; + const price = ethers.BigNumber.from(10000000000); before(async () => { - interchainToken = await deployContract(ownerWallet, 'InterchainToken', [service]); - interchainTokenDeployer = await deployContract(ownerWallet, 'InterchainTokenDeployer', [interchainToken.address]); + interchainTokenDeployer = await deployContract(ownerWallet, 'InterchainTokenDeployer', [], true); }); - it('Should revert on deployment with invalid implementation address', async () => { - await expectRevert( - (gasOptions) => deployContract(ownerWallet, 'InterchainTokenDeployer', [AddressZero, gasOptions]), - interchainTokenDeployer, - 'AddressZero', - ); - }); + it.skip('Should deploy an HTS token', async () => { + const [wallet] = await ethers.getSigners(); + console.log('sending amount to token deployer'); + console.log('I am ', wallet.address); + console.log('contract is ', interchainTokenDeployer); + // const depositTx = await wallet.sendTransaction({ + // to: interchainTokenDeployer.address, + // value: price, + // gasLimit: 500000, + // }); + // console.log('deposit', depositTx); + // await depositTx.wait(); - it('Should deploy a mint burn token only once', async () => { - const salt = getRandomBytes32(); const tokenId = getRandomBytes32(); - const tokenAddress = await interchainTokenDeployer.deployedAddress(salt); - - const token = await getContractAt('InterchainToken', tokenAddress, ownerWallet); + const tokenAddress = await interchainTokenDeployer + .deployInterchainToken(tokenId, name, symbol, decimals, price, { + gasLimit: 1000000, + }) + .then((tx) => tx.wait()); - await expect(interchainTokenDeployer.deployInterchainToken(salt, tokenId, ownerWallet.address, name, symbol, decimals, price)) - .to.emit(token, 'RolesAdded') - .withArgs(service, 1 << MINTER_ROLE) - .and.to.emit(token, 'RolesAdded') - .withArgs(ownerWallet.address, 1 << MINTER_ROLE); + console.log(tokenAddress); - expect(await token.name()).to.equal(name); - expect(await token.symbol()).to.equal(symbol); - expect(await token.decimals()).to.equal(decimals); - expect(await token.hasRole(service, MINTER_ROLE)).to.be.true; - expect(await token.hasRole(ownerWallet.address, MINTER_ROLE)).to.be.true; - expect(await token.interchainTokenId()).to.equal(tokenId); - expect(await token.interchainTokenService()).to.equal(service); + expectNonZeroAddress(tokenAddress); - await expectRevert( - (gasOptions) => - interchainTokenDeployer.deployInterchainToken( - salt, - tokenId, - ownerWallet.address, - name, - symbol, - decimals, - price, - gasOptions, - ), - interchainTokenDeployer, - 'AlreadyDeployed', - ); + // expect(await token.name()).to.equal(name); + // expect(await token.symbol()).to.equal(symbol); + // expect(await token.decimals()).to.equal(decimals); }); }); @@ -354,42 +332,3 @@ describe('Create3Deployer', () => { }); }); }); - -describe('WHBAR Integration', () => { - let deployment; - let whbar; - - before(async () => { - deployment = await deployAll( - ownerWallet, - 'test-chain', - undefined, // itsHubAddress - [], // evmChains - 'TestITS', - 'TestITSFactory', - undefined, // htsAddress - undefined, // whbarAddress - '50', // Fund ITS with 5 HBAR worth of WHBAR - ); - whbar = deployment.whbar; - }); - - it('Should deploy ITS with WHBAR integration', async () => { - expect(deployment.service.address).to.not.equal(AddressZero); - expect(deployment.whbarAddress).to.not.equal(AddressZero); - }); - - it('Should set WHBAR address on ITS', async () => { - const whbarAddressFromITS = await deployment.service.whbarAddress(); - expect(whbarAddressFromITS).to.equal(deployment.whbarAddress); - }); - - it('Should fund ITS with WHBAR balance', async () => { - const itsWhbarBalance = await whbar.balanceOf(deployment.service.address); - expect(itsWhbarBalance).to.be.gt(0); - - // Should have 5 HBAR worth of WHBAR (50 * 10^8 tinybars) - const expectedBalance = ethers.utils.parseUnits('50', 8); - expect(itsWhbarBalance).to.equal(expectedBalance); - }); -}); diff --git a/test/constants.js b/test/constants.js index 7bd83def..ac4663ac 100644 --- a/test/constants.js +++ b/test/constants.js @@ -1,5 +1,7 @@ 'use strict'; +const { BigNumber } = require('@ethersproject/bignumber'); + const MESSAGE_TYPE_INTERCHAIN_TRANSFER = 0; const MESSAGE_TYPE_DEPLOY_INTERCHAIN_TOKEN = 1; const MESSAGE_TYPE_DEPLOY_TOKEN_MANAGER = 2; @@ -34,6 +36,8 @@ const DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN_WITH_ORIGINAL_CHAIN = 'deployRemo const INTERCHAIN_TRANSFER = 'interchainTransfer(bytes32,string,bytes,uint256)'; const INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE = 'interchainTransfer(bytes32,string,bytes,uint256,bytes,uint256)'; +const MAX_INT64 = BigNumber.from('0x7FFFFFFFFFFFFFFF'); + module.exports = { MESSAGE_TYPE_INTERCHAIN_TRANSFER, MESSAGE_TYPE_DEPLOY_INTERCHAIN_TOKEN, @@ -60,4 +64,5 @@ module.exports = { DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN_WITH_ORIGINAL_CHAIN, INTERCHAIN_TRANSFER, INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE, + MAX_INT64, }; diff --git a/test/utils.js b/test/utils.js index 50736a90..bc08296e 100644 --- a/test/utils.js +++ b/test/utils.js @@ -133,12 +133,13 @@ const gasReporter = (contact) => (tx, message) => { if (process.env.REPORT_GAS === undefined) return tx; if (message) { - tx.then((tx) => - tx.wait().then((receipt) => { + tx.then((tx) => { + console.log(tx); + return tx.wait().then((receipt) => { if (!gasReports[contact]) gasReports[contact] = {}; gasReports[contact][message] = receipt.gasUsed.toNumber(); - }), - ); + }); + }); } if (!gasReportScheduled) { @@ -146,6 +147,8 @@ const gasReporter = (contact) => (tx, message) => { process.on('exit', writeGasReport); } + console.log({ tx }); + return tx; }; From 2e83bc7faa5aa1ec09085ec9bff9e6f2f13823a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Fri, 18 Jul 2025 15:35:45 +0200 Subject: [PATCH 23/49] add note about WHBAR balance of ITS --- contracts/hedera/README.md | 1 + test/InterchainTokenService.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index 951b6b43..977f7bcc 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -8,6 +8,7 @@ New HTS Interchain Tokens will have their Token Manager as the sole Supply Key ( Since the `createFungibleToken` precompile in Hedera requires a fee to be sent as value, an `WHBAR` contract (`WETH` equivalent) is used to hold the HBAR used for token creation. `InterchainTokenService` transfers certain amount of `WHBAR` to the newly deploying `TokenManagerProxy` contract. The `TokenManagerProxy` contract, during constructor, withdraws HBAR from `WHBAR`, and sends it to `InterchainTokenDeployer`, which finally uses it to pay for the token creation. +The responsibility of keeping ITS funded on the WHBAR contract lies with the deployer, it is assumed that a top-up mechanism is in place to ensure the contract has enough WHBAR to create new tokens. ### Hedera-related Notes diff --git a/test/InterchainTokenService.js b/test/InterchainTokenService.js index 57659fe0..fb59cac1 100644 --- a/test/InterchainTokenService.js +++ b/test/InterchainTokenService.js @@ -623,7 +623,7 @@ describe.only('Interchain Token Service', () => { expect(tokenManagerImplementation).to.eq(tokenManager.address); }); - it.only('Should revert on TokenManagerProxy deployment with invalid constructor parameters', async () => { + it.skip('Should revert on TokenManagerProxy deployment with invalid constructor parameters', async () => { const salt = getRandomBytes32(); const tokenId = await service.interchainTokenId(wallet.address, salt); const validParams = defaultAbiCoder.encode(['bytes', 'address'], ['0x', wallet.address]); From da7fc6634616781f81712af26dfd9d9a1a05fa7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Fri, 18 Jul 2025 16:07:34 +0200 Subject: [PATCH 24/49] rm cross-invokation deployment context + review fixes --- contracts/InterchainTokenService.sol | 3 + contracts/hedera/HTS.sol | 2 +- contracts/hedera/WHBAR.sol | 2 + contracts/proxies/TokenManagerProxy.sol | 2 +- contracts/token-manager/TokenManager.sol | 1 - scripts/deploy-whbar.js | 3 - scripts/deploy.js | 149 +---------------------- test/InterchainTokenService.js | 5 +- 8 files changed, 14 insertions(+), 153 deletions(-) diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index fcd75d91..e1a2f260 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -943,6 +943,9 @@ contract InterchainTokenService is /** * @notice Deploys a token manager. * @param tokenId The ID of the token. + * @param name Name of the token. + * @param symbol Symbol of the token. + * @param decimals Decimals of the token. * @param operator The operator of the token manager. */ function _deployTokenManagerWithInterchainToken( diff --git a/contracts/hedera/HTS.sol b/contracts/hedera/HTS.sol index 1c3d7897..fbd610a0 100644 --- a/contracts/hedera/HTS.sol +++ b/contracts/hedera/HTS.sol @@ -216,7 +216,7 @@ library HTS { } } - /// Associates the provided account with the provided tokens. Must be signed by the provided + /// Associates the provided account with the provided token. Must be signed by the provided /// Account's key or called from the accounts contract key /// If the provided account is not found, the transaction will resolve to INVALID_ACCOUNT_ID. /// If the provided account has been deleted, the transaction will resolve to ACCOUNT_DELETED. diff --git a/contracts/hedera/WHBAR.sol b/contracts/hedera/WHBAR.sol index 18fe2951..a2a2775d 100644 --- a/contracts/hedera/WHBAR.sol +++ b/contracts/hedera/WHBAR.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; +// Copied from https://github.com/hashgraph/hedera-smart-contracts/blob/main/contracts/wrapped-tokens/WHBAR.sol +// Unmodified except the solidity version. contract WHBAR { string public name = 'Wrapped HBAR'; string public symbol = 'WHBAR'; diff --git a/contracts/proxies/TokenManagerProxy.sol b/contracts/proxies/TokenManagerProxy.sol index 40ce8fd1..f324dfe9 100644 --- a/contracts/proxies/TokenManagerProxy.sol +++ b/contracts/proxies/TokenManagerProxy.sol @@ -37,7 +37,7 @@ contract TokenManagerProxy is BaseProxy, ITokenManagerType, ITokenManagerProxy { * @param tokenId The identifier for the token. * @param params The initialization parameters for the token manager contract. */ - constructor(address interchainTokenService_, uint256 implementationType_, bytes32 tokenId, bytes memory params) payable { + constructor(address interchainTokenService_, uint256 implementationType_, bytes32 tokenId, bytes memory params) { if (interchainTokenService_ == address(0)) revert ZeroAddress(); interchainTokenService = interchainTokenService_; diff --git a/contracts/token-manager/TokenManager.sol b/contracts/token-manager/TokenManager.sol index db69e3e8..fea7fd9d 100644 --- a/contracts/token-manager/TokenManager.sol +++ b/contracts/token-manager/TokenManager.sol @@ -96,7 +96,6 @@ contract TokenManager is ITokenManager, Minter, Operator, FlowLimit, Implementat /** * @notice Reverts if the token manager type is not supported, or if the token is not supported. - * If the token is a supported HTS token, the Token Manager will associate itself with the token. * @param tokenAddress_ The address of the token to check. * @param implementationType_ The implementation type to check. * @return isHtsToken True if the token is an HTS token, false otherwise. diff --git a/scripts/deploy-whbar.js b/scripts/deploy-whbar.js index 02b7aee0..9160aae2 100644 --- a/scripts/deploy-whbar.js +++ b/scripts/deploy-whbar.js @@ -15,9 +15,6 @@ async function fundWithWHBAR(whbar, targetAddress, amount, wallet) { const depositTx = await whbar.connect(wallet).deposit({ value: amount }); await depositTx.wait(); - const ownBalance = await whbar.balanceOf(wallet.address); - console.log(`${wallet.address} WHBAR balance: ${ethers.utils.formatUnits(ownBalance, 8)} WHBAR`); - // Transfer WHBAR if target is different from wallet if (targetAddress.toLowerCase() !== wallet.address.toLowerCase()) { // See https://docs.hedera.com/hedera/core-concepts/smart-contracts/wrapped-hbar-whbar diff --git a/scripts/deploy.js b/scripts/deploy.js index 5f4f54ea..b0e5e0b9 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -13,7 +13,6 @@ const { deployHTS } = require('./deploy-hts'); const { deployWHBAR, fundWithWHBAR } = require('./deploy-whbar'); const HTS_LIBRARY_NAME = 'contracts/hedera/HTS.sol:HTS'; -const DEPLOYMENT_FILE = path.join(__dirname, '..', 'deployment.json'); // List of contracts that depend on HTS library const HTS_DEPENDENT_CONTRACTS = [ @@ -34,68 +33,6 @@ const deploymentContext = { contracts: {}, }; -// Load deployment state from file -function loadDeploymentState() { - try { - if (fs.existsSync(DEPLOYMENT_FILE)) { - const data = JSON.parse(fs.readFileSync(DEPLOYMENT_FILE, 'utf8')); - deploymentContext.htsAddress = data.htsAddress || null; - deploymentContext.whbarAddress = data.whbarAddress || null; - deploymentContext.contracts = data.contracts || {}; - console.log(`\tLoaded deployment state`); - console.log(`\t- HTS Address: ${deploymentContext.htsAddress}`); - console.log(`\t- WHBAR Address: ${deploymentContext.whbarAddress}`); - console.log(`\t- Contracts: ${Object.keys(deploymentContext.contracts).length} found`); - } - } catch (error) { - console.warn('Failed to load deployment state:', error.message); - } -} - -loadDeploymentState(); - -// Save deployment state to file -function saveDeploymentState() { - try { - let data = {}; - - if (fs.existsSync(DEPLOYMENT_FILE)) { - data = JSON.parse(fs.readFileSync(DEPLOYMENT_FILE, 'utf8')); - } - - data = { - htsAddress: deploymentContext.htsAddress ?? data.htsAddress, - whbarAddress: deploymentContext.whbarAddress ?? data.whbarAddress, - contracts: { ...data.contracts, ...deploymentContext.contracts }, - }; - - fs.writeFileSync(DEPLOYMENT_FILE, JSON.stringify(data, null, 2)); - console.log(`Deployment state saved to ${DEPLOYMENT_FILE}`); - } catch (error) { - console.error('Failed to save deployment state:', error.message); - } -} - -function hasCompleteDeployment() { - const requiredContracts = [ - 'InterchainTokenServiceProxy', - 'InterchainTokenFactoryProxy', - 'MockGateway', - 'AxelarGasService', - 'Create3Deployer', - 'TokenManagerDeployer', - 'InterchainTokenDeployer', - 'TokenManager', - 'TokenHandler', - ]; - - return ( - requiredContracts.every((contract) => deploymentContext.contracts[contract]) && - deploymentContext.htsAddress && - deploymentContext.whbarAddress - ); -} - async function deployContract(wallet, contractName, args = [], usePredeployed = false) { const libraries = {}; @@ -167,11 +104,6 @@ async function deployInterchainTokenService( ownerAddress, defaultAbiCoder.encode(['address', 'string', 'string[]'], [operatorAddress, chainName, evmChains]), ]); - console.log(`Deployed InterchainTokenServiceProxy to ${proxy.address}`); - - // Store proxy address in deployment context - deploymentContext.contracts['InterchainTokenServiceProxy'] = proxy.address; - saveDeploymentState(); const service = new Contract(proxy.address, implementation.interface, wallet); return service; @@ -184,11 +116,6 @@ async function deployInterchainTokenFactory(wallet, create3DeployerAddress, inte wallet.address, '0x', ]); - console.log(`Deployed InterchainTokenFactoryProxy to ${proxy.address}`); - - // Store proxy address in deployment context - deploymentContext.contracts['InterchainTokenFactoryProxy'] = proxy.address; - saveDeploymentState(); const factory = new Contract(proxy.address, implementation.interface, wallet); return factory; @@ -205,80 +132,14 @@ async function deployAll( whbarAddress = null, fundingAmount = '300', // Default 300 HBAR funding for ITS ) { - // Initialize deployment context with network info - deploymentContext.chainName = chainName; - deploymentContext.network = await wallet.provider.getNetwork().then((n) => n.name); - - // Load existing deployment state - loadDeploymentState(); - // Override with provided addresses if specified if (htsAddress) deploymentContext.htsAddress = htsAddress; if (whbarAddress) deploymentContext.whbarAddress = whbarAddress; - // Check if we have a complete deployment - if (hasCompleteDeployment()) { - console.log('Found complete deployment, reusing all contracts...'); - - // Instantiate existing contracts - const service = await ethers.getContractAt( - 'InterchainTokenService', - deploymentContext.contracts['InterchainTokenServiceProxy'], - wallet, - ); - const gateway = await ethers.getContractAt('MockGateway', deploymentContext.contracts['MockGateway'], wallet); - const gasService = await ethers.getContractAt('AxelarGasService', deploymentContext.contracts['AxelarGasService'], wallet); - const tokenFactory = await ethers.getContractAt( - 'InterchainTokenFactory', - deploymentContext.contracts['InterchainTokenFactoryProxy'], - wallet, - ); - const create3Deployer = new Contract(deploymentContext.contracts['Create3Deployer'], Create3Deployer.abi, wallet); - const tokenManagerDeployer = await ethers.getContractAt( - 'TokenManagerDeployer', - deploymentContext.contracts['TokenManagerDeployer'], - wallet, - ); - const interchainTokenDeployer = await ethers.getContractAt( - 'InterchainTokenDeployer', - deploymentContext.contracts['InterchainTokenDeployer'], - wallet, - ); - const tokenManager = await ethers.getContractAt('TokenManager', deploymentContext.contracts['TokenManager'], wallet); - const tokenHandler = await ethers.getContractAt('TokenHandler', deploymentContext.contracts['TokenHandler'], wallet); - const whbar = await ethers.getContractAt('WHBAR', deploymentContext.whbarAddress, wallet); - - console.log('All contracts reused from existing deployment'); - - return { - service, - gateway, - gasService, - tokenFactory, - create3Deployer, - tokenManagerDeployer, - interchainTokenDeployer, - tokenManager, - tokenHandler, - htsAddress: deploymentContext.htsAddress, - whbarAddress: deploymentContext.whbarAddress, - whbar, - }; - } - - // Deploy Create3Deployer or use existing - let create3Deployer; - if (deploymentContext.contracts['Create3Deployer']) { - console.log(`Using existing Create3Deployer at ${deploymentContext.contracts['Create3Deployer']}`); - create3Deployer = new Contract(deploymentContext.contracts['Create3Deployer'], Create3Deployer.abi, wallet); - } else { - create3Deployer = await new ethers.ContractFactory(Create3Deployer.abi, Create3Deployer.bytecode, wallet) - .deploy() - .then((d) => d.deployed()); - console.log(`Deployed Create3Deployer to ${create3Deployer.address}`); - deploymentContext.contracts['Create3Deployer'] = create3Deployer.address; - saveDeploymentState(); - } + // Deploy Create3Deployer + const create3Deployer = await new ethers.ContractFactory(Create3Deployer.abi, Create3Deployer.bytecode, wallet) + .deploy() + .then((d) => d.deployed()); const gateway = await deployMockGateway(wallet); const gasService = await deployGasService(wallet); @@ -289,9 +150,7 @@ async function deployAll( if (!deploymentContext.whbarAddress) { whbar = await deployWHBAR(wallet); deploymentContext.whbarAddress = whbar.address; - saveDeploymentState(); } else { - console.log('Using existing WHBAR at:', deploymentContext.whbarAddress); whbar = await ethers.getContractAt('WHBAR', deploymentContext.whbarAddress, wallet); } diff --git a/test/InterchainTokenService.js b/test/InterchainTokenService.js index fb59cac1..ca78449c 100644 --- a/test/InterchainTokenService.js +++ b/test/InterchainTokenService.js @@ -61,7 +61,7 @@ const hederaClient = HederaClient.forNetwork({ }); hederaClient.setOperator(hederaOperatorId, hederaPk); -console.log(`Using Hedera Client Configuration:`); +console.log(` Using Hedera Client Configuration:`); console.log(`\tMirror Node URL: ${network.config.url}`); console.log(`\tConsensus URL: ${hederaConsensusUrl}`); console.log(`\tOperator PK: ${network.config.operatorKey}`); @@ -623,7 +623,8 @@ describe.only('Interchain Token Service', () => { expect(tokenManagerImplementation).to.eq(tokenManager.address); }); - it.skip('Should revert on TokenManagerProxy deployment with invalid constructor parameters', async () => { + // TODO(hedera) fix this test + it.skip('Should revert on TokenManagerProxy deployment with invalid constructor parameters [todo(hedera)]', async () => { const salt = getRandomBytes32(); const tokenId = await service.interchainTokenId(wallet.address, salt); const validParams = defaultAbiCoder.encode(['bytes', 'address'], ['0x', wallet.address]); From b121dd270d6c2e579818b9cad394b3e7e5975f0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Fri, 18 Jul 2025 16:36:13 +0200 Subject: [PATCH 25/49] add deploy interchain token diagram --- contracts/hedera/README.md | 2 ++ .../diagrams/deploy_interchain_token.png | Bin 0 -> 822225 bytes 2 files changed, 2 insertions(+) create mode 100644 contracts/hedera/diagrams/deploy_interchain_token.png diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index 977f7bcc..f1b649c2 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -10,6 +10,8 @@ Since the `createFungibleToken` precompile in Hedera requires a fee to be sent a The responsibility of keeping ITS funded on the WHBAR contract lies with the deployer, it is assumed that a top-up mechanism is in place to ensure the contract has enough WHBAR to create new tokens. +![Deploy New Interchain Token Flow](./diagrams/deploy_interchain_token.png) + ### Hedera-related Notes - Hedera contract and token "rent" and "expiry" are disabled on Hedera and not supported in this implementation. diff --git a/contracts/hedera/diagrams/deploy_interchain_token.png b/contracts/hedera/diagrams/deploy_interchain_token.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b7d4c3b628bf4794dcea6f2878ed90eb32164f GIT binary patch literal 822225 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%0DX0;+uY1M(;|DH)_-q{l$YX%wTNHH` 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

98D$=N+V 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�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�|0^-NG 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

Jm@yn9Q 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

Hk}J)@HJH8wKHh%3_W?%iA;6wz@H4vwIS z^NOjQIebrND;7-UC*zJ{W9S#y#TrV=*6M>;5r;-VF(^}_VUpw*A(p+$;4jA^rG(ws z)I@RZ+U<;t3^9CVab6&fC^ZpYyr@SZ=as(cQb?)5pg111>7tXHkGdSgjz?lW!E>}^w-Bke}?;a0gbnrjobg(tL~cv_P!7dxyR#ErU~ ztoh#Lu&{qE*qj?9GFZy@uP=!n=N@(#wR038&F;G6U(b}hRx%-Qd%{^)1!LWnY`hfQ zU{#!6VpW)o&P;Jh>2RuVoU#c}URshSbef(dpDKuJZ*MQcG~2C?=z`QLbVu(4&(cv( z@7hzrH(0Aq+Tz!X!T3i#2F!pAGI$QK4kz?UK5Sc4x!Z!%-yDEn^sJ=)McyUmtfl(^ z1HO?TJkAMccW#)p|!l8@&2Q z3C+zAuGy7F$-z)LjesZ9ZfTTpTtROP+ z4lYsUktZcXTP4ednscs40Ic&QC@mz!H89ocx|vA}$K<6EN#=5XXh z$$Ej^4OFas>k(|b3h_vOvg$6ATyc?6tc}%EcEcedHnk}RO1-bbRXb6(ohWneR7ujo zn5}dX%&XiKxrXP5CYgxa6k>WzI$Ljt7j0acPA~}GlDerIX;+Ez8ao^zRwUPHrK{KS z?&`ZFCJfrly6e5eYIcMDQNMa7G?jc8w{Zj8>F2XKd>g$-?sPb;(f6|I?fkrB{)u#P9~F7HoR6QU+02;S8I_!oux|q z8E!Yb$&&f{cny(BPjRy2N);hK;RE_q?_<06clRShSJI#pfz)Y-V192Pw72~#XcTuL z%-7QeL1#$SVKN&L$wC;70C+FJ*PsvFZ9MLeOLnj6FDE!19>i%D9TOY-x0TycpG&Fm zg-gxk&$fNX*;%*WUQ} zUkP5Vu01Qs*OV2$P)j$NsooKhUX;@ksIywM5t7zHq#Jk%L<)QQd}8?zWrS}cDJK?21Qs_-0Nv3mws;}_h%2{nHUvFv=W;>0AM zFuC41?(VhVW#FM(>!-|-+I~yNP~9b|eWCq=XH!mYR%h%Ky_G6~wZ)5wvXW~KLtShZ zgOQ|LYV~oEv@L%V;NuUv9wB)HDT!O}VMV!9_#z7aHX)e3OcOEsY3HDN_WT4Xf057{ z>B^|L&d;E?6d^U_`(LnNnYbnLOb_LsS`?l%e|YapS^V8#KBVvX%Pt)%t8fa znBkyTAS+Q)%q#IBWankz4P!wc4h6D;RsIUa`oB@)`OtZWW$4~gWZ(i z*L~2rLKYen(}>WCq)1kIP{0uvhRo^No&`8#3llE}0ou=iI&RzB>*ek^#*_hE4(OH!cPQb25<$ZQfiLDwE*9Z3`Jgo6noY@@wVs93v zmSfG6C7f>V3(cSE5_uOxBg}5L8fwsxGKSD=&~FvhN<09pU_Kx*g-E?*;m9znaHyV# zXdV86#;$w$m2oi-Q++ zZG09s1ujyj3J9oOP2Mv7^VOK9VEj3Y;M~>eOfe^Xc6{Z>|#P z$tB(?vpBl{Kq4z0brm}Y8t_nNMJD{zfIHR!NR_Yu7ea>XA0sSwBBV1|h>)OKDJI4! zG^a5|jRz5&vz%y0WXfoN%!eH$njSn)ct>emVPH-*Nat$9So@ok1~98{wySTGeK&uX zr9UK2$7eAthBVNhZ(2|)CXBcINdDYd7jtt`6z!b6Dm~(BFTLj5Da}$6KrWklWyTDb z^21|8F*Y|hFP{^%G#2`uG^qHMiF_8{V1Jt6j@Fv%nX}bNMLFe>lDYV|L&?959B&qn z)S_!ICin&F60|!$ND-NX5>s(8*8efq9;E2znWNqs=^ar3wywoeZ0%ik%0|oQdeP+5 zLY#pSl&iY&n|AiI^TJ%#*^9QB#hHFW@;L!`+ep$^yYPJZFyb_*%Dy+vTedJ z`*lpf@_p54?S*qj(di}_Ypi9FM$ zm>DKTQ`2J%u(@;dICE!a$5BTc7RFbV+jz3G(_Dgxa*K(T8>;GjWT+&oTIst6=M!W- zYk3|$(u%Q5Jl~jZa8EMQhOa4YyjLeFw&$npnH*ti)QWyH1Z{ouYQ-!fWTwet=E$vx_$(Vk6t5hn2M=9?}(rQ?a3c+Yi<3=7_z^%M7z3A5%c zatgr;kYS<0_(SH$k`L(2!y%G*e+CcxoxhYnHiDA#6+y&$Z>m{?5Vkfz-2s%`6g7Ni zJL!;Gz~UJ{|E{$@@3s;o*1L&dWoJinD(B2vcx5VS){}KT(4y; zDz=|H56pI1eOFLEtOTi59dM%f=g!F`q_VZUUwdnr_UQ9L#4X{2ejw{3`mBCWjyz!c zHrp>yE=uJq5?JZIf49lX9TL}^tQFs)A(TvC5brH_x#p$cvS`asJF3(t&{S3lNNf*1WzC@uVVrLfGikz4C= zU(t}oh&a!M_EiEW=(y)U%CCgG4UDRl>`T_ZkC`oYJ+O1?WpsPewaM%j5D@_F&bz5S z9If+;O!X@`3Z}J8W-C4`Yz{ipV$=4%Y8mcfe z&L86Y^Ma+GNT_?TRZLV+-E!b_U}YOQHM@Gep*B)0RYTJ#aAU}GM9t!b;?{6r<-hk6 zJ^ZLQ#*z&T?MPOq&y0v}*=2Rr7xawKWoBfMU%U2cJ%3c5do9dr!$P*JzJ%SVGpNQ8 z*i@iy*}Bg49ybOG6T7eBzy2gbbptV;uH$3S$7V8g5WKRo}Pvz%=&uu2>~d}4kR z4Z)49ICe@wdC%{V_muw>>z2??J(`5rtIMTFA&jUtcn?{ z^h39Ta^#xUf{GZ`YFLKHGXK78)S#xa;8r_s zt$gU#N&ZA*Cn^peDq5G?f>)e83Tu33O07Y05fn-t5s+ndUD8@|5b7GufHUr2x&MFy2dMG1rst4w!Dg~Y}NTdfhw7(J~dnKFfH;tzCiA{N8)~uuoL7k zL_c*-cnDr`7RGT`BcaVL9yfP)6ojDFq+84PP|ZbBe;ufN?q(SK4G;XA+$~MO86vX< zJJKHBmTFt8yyjiW=se>dHH`Pm@?_%#FsNNe2C^fwRLBEUI=84z7k*u4`CL34)RnCe zWT+=ZZY!QzQBi;4qL15uJ=m)2UudtzIx%+h6_Nx2s)!j}HzHhcK$@F^}c;Id@sTJx{M( znd-bin-7&6wTiJnBbVQwB@4q*ciFH)ri+Dv)VBTn=oR2%rb42|9meQZ{L4B@O<_s$ z&b&ZMTsOmY0a=T5`t;!cQgb_PD^0NX8Be}l1(kL;I*k%lW@b=f{Piua*Qvi|>Pmt% zj)M@veGcev9y{h&M}d+mFubgEQ1l~S$`!KHDo_R#v8q2aVB&K{fJps4ThM``lfO(q z1ZT6WTB#zlQ=e{X^vk4f3Ew@LM>T3E_FqSxI`}CiiXV{wPhfF+?Q5p5LWPCdsFO88 zqqL;&!r%X86@LBO(R;4Y&#O5?>PQ9wwtraIWjAl{Kp?uSlQ_*kfH2O9Qyt&oSKlt` zBQ`?YLfShqXf%#vJw$_{F^#}MI&FJuhiJr!GanHL<VtH~-@UJLmDEct5DCARTjrMl?Dyy!fEl-pUSC zqz7LT8K)Ie@1iZe%Yb;Q12X}U4I^-7ss}l{LvLS^n3Kl*%5hxDaA2S%Bg~Jv;f7vl zh()3^816d+%pUXgWixQ1xaN00?p!a57aIhl(2y)O#)=co36=s@Nf-z@Xz1S$nQ^zy zUlY8gCvd~^prijz_A{__{mv%Tiv#r&=?ijvc_NAwLTvOOytg{I-v*MNdG2Zfd}q9& zTTVDz<(?^OdF7q6fIOv_vugCU=s$zeT}$%;_ldN}bm>+vIjZ#tKA{yb41gnaSQ}6j zcm84ezpEgE?YJPE_sMZHS-9NM8#>}O5U`@5Ku~f!Yj+v%^#4Ps{w7e}zDnn_OB+(v zhJXnXSKPYkv6Fh-#Y#v>@C^u{3~}WCRidq}4r!O3_IV9<5HCplfv)5@20ODC9e^XvKh?1ekIEBb2kPwRSYt_&L>;;&-q#WfBV z3lvirl&C62)0QmFe4G7znBYF8+EqTvgTRDs8%;s*Rl5-wQ2x-xDQ@3pl)-R;INrr} ztuN*HyYK1`uK<4)qfo8X6L?wp4JR7@aa+9{iI zP7L>yVV6~IW5-AmPuo}L+(6<1_Tf~?E!U%#wHFQACZ*d<6GJ61ulS5Bup3FwoO$>v zKcJqi2W!2KF{O{o7=EEa3;wglx{^X-9T`wxz&AWGm)vC$hPH^v?8{9VS(?o3`ryH( z)ib{R+6$jY~Rfum>Cb$^Cv_8Dma7n?aM2?gV203 zyy|Vqyiu8xx^*FP?~O{fYUw&k9wm0qCPv;bj$IJVK9Abjq}vvS%n`fQDf2FW&^#lT zf0%T%xVMve*!t9_hWmoSAby?h!D`8`*CF^5tE#FBtaR2>Ut!F6psKl>C9rgs37G!x zblDZ}JkpMXnd1eNs8*x6*w|`-SdlX^Jpi9`=A**L)*Z7>>`G*uchlF`S4?^gD9?0J zo|8R=3P=rM1=_KUFf1MS$*G$=`vK1$E93+_H+N^zEfbrGUD!<+)&ohUSDDXu4fjqJ zM{pSznRg=*!Ak=gT(m92C>zp%FVl=~^k-UPtd?@n%I;PB_ZeO%)`(;zs-vOg8mZ)_ zAVXNORCL|uU8Lj>q*Yfg-cR+x3Ub)7n)NWhN7r>UYBLTIp0L1rBX(EFW@9+x+y$ zF5KQHQcPGOV)h{Lzzj6^D2WRM1lNEvcuN1&uO7{T$KPq49DPxMbk-+&3Ue!sAmEn+ zK~l!x;NUyud!3Dc5Sj};snfiVyssJmJE6j{#@x`_pqY^QF?(^hVV3{c5Q0(KSQO%v$+`xeSqa_tnB?K5DheK+ z%>Q-nJH8t4D7`Dvp#~(14(x$D#&lFv_YkISIJXr7);)KzhHNL$ID7sHOk(b~YEwg8 zuTrVA)AzpuBS43}5}2!00K!6uuZ2Qi4=~KP7YTia?5(BVe9&GqY5S18h!TXAjM*6$ zSyfw0w{XgPf}c)QK$W~oUMcaRQ9@I^aYCE+?yYX`lXyi}wZz<-3E}BVT}CHzs?(9w zGgT%|{ZzA^?oH^Mb*mKW&kwTAc3$^~<9?LESrN&1+|Qd=5Zk~wH_M+?y1$1_?e2=5 z1N;}(73wt0G3gb^Da6cce&pnu^zkE8pFz4dBTuS)&-s#Fy?X2KQW(- zdm5^1PM1()hEr%Vt(0~R&-O>FB{k=MoSbcVwMog?yB3xdnVa*OO27Gi`npxQ=z`2NR|2;ySH=%ec_k85wF;)?}>{23C|=H=!2is_y@5L_N`j8|xWLT%w5 z)XRv!_5$6GzRzhX9JCmjqimn;JWiQfKQ#CKV`9kXqW)g`_hT_s&{I4vFx>+9l%nk$ zlKoEnmmTvFY?f(#5FIRbFjK-is)wj6S54;jG1z}<>ddB)ysXfFHTl&RNtcT(YySNE zhQOMY%n`K20CbaBN(3*Q+<)ynTO^m%9(&~uK|%>dU(qJ|a*s`nY-qk!v!r&bL1v6W zVLe*;)d5Sq`>-F5U*@qEdt4tzgOKY1<}z_>FJ2)B zv@nJ>-!gl=WdiTOsET+&*JM$SDupKBLC-!3)WTe=$auO8n%kj)-)%OxbW`qbpIxcY zoxA?}^ppo9=wF5qo6!`^f*mF~7YS;8eSFTWWA$DHAJX{l-sy`sGzHz-G!GI-c2|1) z^KZ%1U}n|IDkgOZKp}@rL`i?djQ+1mr%ak#Qz8rGTo)-x02KMt%GwA&^70i(2yRE4<+`Nkz1a>VF4 ztDYE{NQTC&+jHi8gzo#EQ>q1row1jUh%ku*H%5|Jn1;ZsmAJF=(`i0Bfs&PbIvFJH zdzRzZf^7d4n=z^?2BIShh&oR$yXS7!OUFqN=MQ-C404pNc$VU={&8FTEW%M*P}5r< zK?bJdYzUSYP8EnkE=g4vIu{<7X8);!4mqTP_m7WG=Tb?8QENEP+$md|0HKhTdJ8CJ z@7rg;?`-fmY@NPmyGYqzKairpo)<1QajWW^ZoLvZr|xuN^8;dYFT3#wTazB1DK}cqdjqvDlUCtInOR(V zu5-4nixF*R&dDJbwl(V?9lX|0oy6%l8Kxd% z=_BoE4$jmur4L(@ZGwd?S6w3By$@dzPYmd*^j>PcdR6uBI=^+hGX+nHAAbpbzx2w& zzE_#Do9E_0b_hp9SB`uY#wKNmNFmDTe9rKgYD0}7ed?4_)5NFwF}+F7J|;;Qp_tre z&cu3GLC)h7eOU_DDZLCl^2Vr>bEULRqIx|gp6iD5iurSkJT;bT=l3HhcTd|VvqooAK8uR}e(#B(F5R82iTn+5N{f4WH9)HU{CzLuuyhd?$7deLSXp z+Yb3>|9k!K6H}Nq_&0%$ItW9x1Cmv81G>J1L-dj88xR^8K_08@!HQ|V6=L<|if0#_ z&t0R?`=8_kMJ8WbRU4hA^C?&3Q6S#>ZpL@jCTpM_Wa(r5J=RM0-?y*&Mkd+YlKZ zOkY)48h9HxM5}gvRW^M|47tgR1*^yMrz0G62LJULvOaZwKcIVW3yBG$G>f)2*O;}+ zPtdq)H`=!XT^K^dyP8B~2j@Q@u=03>%YZE#g2FUK=MV({wKfR_)|1ykS%>c1r9Jm) z126(xK^PCC1M;8aDOR zVU+0ls%jr7m`O4VnPA;XpXIT~Pv%A?ttO}_jEDNQpkB0a%)Do*x2X*sZ5gy)Xl6@D z5pLGsxPb}P&Zy_J9dPt5)K8+ilG+gzY_K}yb#jb_iGOak z!GxjQ!kJ(|?OtKB_4kEvr(TR@y+!j}gF&j2sRmBlQW#@HS-Mw6m4kZV<}HiMO!a(& ziW_!qS{3a&y=&il5+gUUa9^oCl8yY8Rk|KKm$u0t<3fmA^{JtkRWBES$P(|WJ14gZ3Ga}hZOh4ACYkKGpe zAQ7C)w*wN&z6zIAmLNpC!gw2C2+tCaUYLaNSS*B97!=>fM$rd_C=rXaiG81XQu3wq z{uoU#>NW1Dr|i~hTd6iky~|Bh=c{7leSI-;CG@FZ?l#kh%=FNv6G@)jIj_r{Pohqc zvLliKS3p!zPVw16X40<<-x4LGpt!RM8GNXABNPu(LK7i{MH=l$xC$YKm8TiTuqoD4 zEa=8fkOCNF7dtr2>p)-v^_tVV%`Y0!E1NPPW-$mIg;(>_eFBClp`O3g$?&|epcNUh zqGlC!+BF_ZL&DejfZb+Vq`G*ZUX6I`e~t;sk9KfgJQ!aKRvsH=R79{c-#$aQ`gj9WYhHFI~|1Vrqr?ws9xCL-vvPN`G`%2YL&P1 z{54<4?7DAX^7NvBmq6oYX#cK*!%Xsa^_ZLA1YL)BE zK?(2!i}9V|C!ou!>%)0OtuBHBo9ujec4 zhHwwP-8dyzJH^WNm90(n8loUw1lSLxnvRTM972*1$YJGbDLD@gd;0ZEf@M%MSZ$IN zV5^EbP0T&WEs46>XZq=+d6PIt74Y-av|f)lH+bOV-r^*;Z~ES63_yrlS84HsRnL^g4uV(ZMNY* zvS++gNU0f#S*xJaJyhm;I7OvZyAdh4LPM3$eEH`?V1`8)s6Ge}ky38^)6eYNuh5V} zNRk!aq#R3U0~fgi=v65DT(*kgXuZu6W!kN=VBy&UMYC>+7%99~coEZDmqT2y0|Pmc z*#07?sb=~N_OF-mdn-$|fGJXI=`~B)#Zvux0n~4wItwdl*ppLHZBxrYk2V7uU>$j8 z?_%QO0!?*dx2wvsS%M&?F3kQO_uc~9&C^L#H?mc3aEjKj~{}A>p4nyGtbN*OtXbiaSXe)6_Vj`kYQo+3m#rqe{5Sul49u#+t zeT5CMPUK#@a^)saTeuN=Q!@;wf@xyo=j9C}H`N8(e(d|)z6cfB*|7G=w22NN@0JBd zEmZ>lTUJ_HdJudM&M?fCl4woUU_|EEf^Rv0;oWXUZs^(#WMV}}W}H|U=YtY}kUf$# zpC5gY4{^>AbXm|4_Lj8UV(sqs-9r>Ff<^9^A_BnggHFTG2dQb+qMR1SN*2?d)~vrl zJEst#QXn(`xGYEC2=g0NNNtQA7(ko!l|a$R`SCokXlsC<*>lT%(%s98 z@~vgM$p37rz3ug)pzOo*BgZLTGUzv?r>C0((6Ji6xXvcRQEO|hZ>u`$=5z3b$8Z1Y z9JrdFMTEEQf@Wz`i>?Ao{@AD(W6{rNhMieepF!k-DvIk5mL-6kI&feEcl13>Iq1XV z$z0*kxR*G3L(KIp?ypErvs>`ugi0?v0URHZ`&WfYBFro-;?hms-KuW?{)@~Ngg&Sb zh`qQu3v|8%pMnSr5xeWOtcum@_*q9|^jipiWzOVRZtmxh+xTPZcW8|FaDQU>L< zp&G_g)~c9=hsDOPHY2ity#(veZ)*r%it=q%*YpPKMUXmT8w4bzv1o7un)R+g*Z*%H zt8O>!L!>%O7+Kz6zB=4r`0fea8FO*!;>UHD=EA9*(ys0LJK3bNJhOoqaBGO_O$Ure zNT+J+%QWfE`$q0xGF5Cc=*A+1}oSZ-)VTq zD1Nu@fs~+0KqgAF3vCjuZ$uba*4d|8*r&9bGJTm=uQ;i-8Pm+yj_H`xG`>zpEr#Tf z@fQw>->oT4yj~uX>F4=$vqy}eWmMFpG8a>yqf*)vhn~}EuvpZ?zYIi&`Vy)8zPGQA zWvq<2{aILq1Ls;z2BnD7)p1&sm_0}Zr3A*DrZ0pesx#4^9$Q;k`39siD?!#(b$~4x z1}P+OQ2MnVSsfqIRt6XFKh@Elr^QRbB6VJVyS!%D)5kVe9A`D&>;v4Ujx0S?7$CO= zMcEfFfv9weW=CvI_8wgP@|zxahcQ>W1)u5cxYh;2*gE*ILsd zYrQ^YZggO+;ocOnLO$O>S~GvmFltf-vdqBJBH}m(`~gp(1j|Xub1t?dkJdtp8 zEMhh3?Ox|k`x=#dn?Ts$^8ayJ*Mel}_gM`!k>@YD!mF6mb2V`&$rpnGz(CK@|ZtqLar(&dQhWEj_> zdX=MFjVw?51VaO{;3cIW^HJtfo|dfSNU2N^moe3d6}D9gSsugr}U z*6TIL`#=Z}m62twHnYj*2DTNfWDS!48vycAP*6atuhgX!BQc#faB2mpng+fitADrS zq7le9f*+Yq(=+MFxC0HpG48umJ8LH!_H;A27ceiua2AqO^E28BT!55mCyZYBQ1?Gi zBFlE@KVYvrKC=3zAgZ(zSF+}zT>#y+L*n-hsY0wNQ*+k3MI5{=YNs;Wj%FF9z75oB zpm~3SRiZ6T>p8vCNXS1$0uxNSkro?*Ym=NCeQtBq!YWHKa})XXjk!~;ttCIyL(+UzP^mYfx&XUyMQY61t2F#Ut#; zX)dzq%l=ms7>q=L!M)-s2hm46kL-FCdxHE!NLJu(cJpW0g8W{!f*?xR1<*0jc(jCg zDHBu0`u{ll?s%-<@Beq+6!mG@kto?K5{1wpdqnmqTSBt3yW80_D>I_3tcFLEn6Rdb@@#1Vj2!Q*a zK;|0A0U~L&>ZWkjBjcO+;sajTdKX#ZIWaLmh5Q?Y8)_HpmmPDJSS|Z<(D$|+d1$WN zZvGN#W(|po^!2r`JG{}o?J_bCWRkB4F$`4D=yRF=au04x#-Lv8n|N>?0ahC}Fq=5_ zzKkYJ!4dowijnK@ajsI-f4g}FGW@sumB=~`Q#T5~u79jeEJPF-P~Z?@pA4Z8(Cd+8 z!2}7wECb*X6;(U=+ZE`}7L(3FNv8@#Vs=cJ(ev@Cppjtynka>;%gsDf%uY>9JMuji zE1~hHw}(9XBO$syptPbjl@yi2Z`SAJmfvz25ESljFy175S>k6fMg34ufi}2b#I=3cj^mi(R-$-q z)Ba6qdW2RO1mA%Q*f+>>QU!lNPS%*F+XZhQK@>l^#dDEZ!PwBS5-uL3Zs^*ghkaI7 zooE0T5!&eRJ-q@?Ucp$~b_41F<%h!w?aQgpw`7Ka`eh{4i6UhPIw&@6F z3>fY#d@0Fz^6KZ3)7;P(odFV&peJe>!!5g~&F zWh{I^coKs|+k=4ma}F$&q^{R>>Sfo1qT_#_@5J|bGf}Rpy-8nJr9(G90*G#0K!nj{ zrtq2FCl4bSA9#K*%hwFzIoA_lN$unsNj>SK(OcNqhPUFUPn9@&YXJsWbCYIJn;H(%p#6BMN*CD?U9 zh#Ahq_}q!>sMdbz&0R4IZ4xO#61gGc@3SWg+hV5bhx+ERSJ9p@JfKhbLE(00)W>aq z-PXxVd-=PZGoj?o@VmT=wWvLW{BU92YZEMY-3Z^Tz;Jt*;hJJxfG#8Gr7Sil)&e@0 zlFs!n1ObV$o^r2vaIMYC&yg6KV}r&=4`Em1=R8HJor`7-dMTC-D7TR54f-V|#@p3o~ zF7)0lo;3#b78pPb35cc4JcYB;f#hcK1-uA*fO4y?uiWb9g9Ak2JaDVtkJSGAsgcWV zMj8oH{7b~JVI~O5Or9ft$X^}$*yqAzkbMLkBIYa!+?N4}fTW?J@hQ@?3HulRHvPog zcr|e4w$4$#x@c+yyRkAJZ5mqi88 zRP%f~civt7s?!S5V02?pf2jn0xqn+bpf#FNWTsLc&HLU`MzW#%49o;LTBP$6f{pg? z7ID94^m}~X`m@M@Cn2$5TeK+RAeH%#`09dkNvMn?ID^#fc02=c7n6s|Xo#e>aHYCV zHmRl#l~z=Q$2EdGgBst76S2D=un%wXgW7wn^?x)@5K>@3s`M?YF63x}%Z4!(s-kcY z9d&g189TxaMFTX@#xkehcmytjKp+c|Qa#3oQ>T?aKVXXVg%%qL7^LLh5iOk64Fq9d zGzRRW+Fu|Mp)K+@vx23#7bNlG7FkdSd-EU3>Wv#OfdSt9wH766aHR9Mn#Q^VpybXN zPy~#2ZT;^x(2}G6;!5b1wingItO|&)!u#q@>eG9|ygX1-0BNrsr89iIigy`X{uByY zXDW32@m11v%>4z1&X9F@1C%WR36~a$*j#xd#F%#- z9udG`k4|ns9=*7yFVy2-ANJT~aCEoG{BxAJVQv#+Nu*dm0)+$8#R)-!oT_r%RR0G^8PN=S||m_zYBuE8@@lh)U|diLCbxlOhh4?xEV4w5>?&hGCrqOs(&0TN2Dc0XMnI-e zp@q^oA$10X5mZ60`uq2qBwfdWcpgwv0%oLoE!xYS1i#vYUxa>zp$pZkDkB zGvC_|)K*oEQPb|*H^3h=aY0r48-M**5V&Q1X+QEp{uDN*zr=X8!?vXo(v5FW)Fd+L zn|$oicjF1R()VKx)C|d*V z7Wt527RX<20%q)Ca=sra9|K26yCoSq^|ag;CL4f`kJkg0jw$8FmlnNy-(!insd)PevZ11@fRBRse%A=G6V6;C8jk>2^q7y2Hl-raeI?+v z8i(jm-(M1tk22e0xK?0Z$Xj@0Eq!M}pg*EcW&gmyuYv}x5HFyyBXBbop#V(^!Y9~>?I7D#sL@uzh;l~QG)_Ao2)vi;0!1M7 zs;5u%=YD_I1ESQdUh%(=uyv*lhKt!lQio5zXz^@kdP)Y(X2AlW0~bC+$prE}Apl*W zB|NpS!Jq-^Cl4;H0K^d+KjxDy(JI;X`#}Fxqs^vCSeom}+f4>Q_6a_&k zl!4d$>xNIF5`_K6ong77(BA1f^#P`mn!?NulS3wbiVe3L^2Gs$;Jxy(E>BCx<<(7s zYao(dz(~XRFNWSTV-XSu1Z6te<8-XNHOdE2DsEh*~o)xACq*@h4%$_JKgvt#qnDC^V5V#e`u#+ ziSAhHT3U#jaan-M1g@LMog8i+F%N6p;o@nnlCGWE2aC*K+{0zwD~}vXWDVz#i*pccK{il-*zFe$7i&zGtDH{bExO4V zzgcx>pr^V7ANv7rOaj=;LzLKW+!Kk1@<1eS3TlN~-w9C5JW4eno@C>D_|KmwfK>wu z`(zw7GaF6~_BJ83+ETc;rK>vkV3F;At<6&cAQ~`1*bD`FxQ~bOBaenoK=bx3DaMqj zSF|wXM0jc58ZpPSiWqZDV4&Rp4hZGeg>=La@j%;{CBODNI6{Ct+S5GVAlI?ssW1wA zkO%;TVd6knSg_~=HN#-Y&D|OA|2jDVh{~{wkEbU)PfS*7Q=yYRbUR{3GM+3z8{7j% ze;Ijsdzu97m%mnuhPFl2CiM2Pk1$moLA&eR52TKW>oy`o$I9KmSLkm;2Gh9x;6^d^ zR)6i_98HZP~R$DJ+JSDLG^ z(N>MNq~Fql4!%I$7J5FlY4@+MqNd6D7RV3yEwg~Zw$Zn@QFZ|%vcM*vHm zn;6-K#T?d*_4Z8^qkPf6xcl#?Knvn~gE0`gsR#=XUcm|1q9utwji5(&GB(6PjwNDm z-zCe~0aA$IeF5q^#T3wd495SkN4fk8g@VeqxR_p0ux-TINzTTG zmnh!+e;dfr>#qllFUfJ+!9a8tU@(2Rz2#17zCgg+q+wdPw*JKUHMglEv(p3J-r!}V zQ4|erh^aBNPPY)Q%`LF%MCs-U03CLOM&nx(@E1RNplWuW?nUUMK&@ycOU5H|B`K`$ z%B@8Dj#M$Mx9Zg4bs>Z_30raE z$Dj22KB2ow7<*z*A~O$RcZtp2B?tZkLa#fAu6%yqr=uEP*gPjZV#Af1^k(d2?IF<{ z|7^j-Cj`~y8~f%WUXL)8%1^q5VAQ_bGzMR z^$7N&g;;wf%q+35LVl6Kr1ZKUuKsCs=yqil74g~QD~q@GZ?GRk&Gx84Qp{OtEycJ1 zSaYxTwQ7R~+L^cK#>z>RrmNV}N}-NT&+xFu9)y(yfxxl{=F3*A78bEHRH(t^-q|5% zCR6Z%_BE>Up1+?7`~Ay5;msFye5LPb5owDq^4W<2r6Y$6Z=~0CP6ggZnAyd)LH9rf zN64R2ik!Qq0BP?@uQ=cVS59GCJHg6V)s5i`Pd=3|=m{B&i>I2237A3nUUn(_emvyKtP8Fzys_4)Z>`(h7ZYH{gG z#N8$l9M08$WL3V;s@I;h1KU}ejZe6?eI}$Bs0Wrp0M>&VNRBT8gGwJ5bD_2QnUTT456Oe& z9z(I88wf@H(1_fb7k9e>dfeV?Cit#Azll1Y({P?KD%|Wk{`rOm#V=@2r~vZDHIWaE zRP28kL}R+Bm3+z2b%lA70=-iev4-FcSqaaLFD$;5z*!7h3Pf z?ZW&e6K<2Sgie6KLVW>u8Tk_flAI1Z%>t0pa|j2w!L|zoTtC{inU6QCQam}^z;a65 z{NC+`Y@(-3>uq>#eK0T!d7}QDHJ9^yM~80cu8(zFTJ#H|%r7V?_}n?w$eCn5*{byZ z{$Bd+!cn?eCW=C%r6lQq{thx05v@1~a?YO>B8%Lv6OU=hva5h|$HQ4T(eU@N$w$W~ z_3-4GKUN98CHfAbfq9krLFugj;a&(jUlNH*TA(UX!4dA1ILzQn3H>9Sp%X+*kDe=6mo=cgerI->WVZWlWrxAd2rg*L@SW4TkxNI`S=nutRBg zna7SAfx@3w6aDq|(A{;D`{|*RTwGa8g+S_WiWmW%0zaMkkP!*VBwDBM=}4|@>;fD8 z%ED?SmcS{Z-YxV~R59r#wCC%!XxnqJs{C7)nmAORtdC42O}9ANS4$gKrJuo*za}&T zs|8TT7yv44#*+Zr-3N(azL5~9?ifMaK0SzqgyrZQTzUMu41!dk#7+OObkl4+1fbr} z+@G&^c({|D-S_}}s?k4s`5L`(*e|A+%{Pcw!2DSX$6m2z5%XZs zxCvy?LI=Qnnc3Jp00A%MuGmik{hCuw7|pA{TFuhRBJ4Z&K@|V4O*-ri@KULv`OLa= z*7;8M$qM-gT<3WP;DCKIOWpMPaW4Vr#hUAq3{lt)8mJyUfGVRHAc;HfBy-ia&P5VS zB~Tn8clw^)qLX*K!PJ}jz(C$ST-e>u-|X@LZ9#LjA7QKRmH-bFHm(Blck~xwVFi+I1 z499^+Q9!g6{`vF0fQg@N&D81t2zY}Yz!H8sk!o#zI;84}X|l4+9mQ@-A6=$8tZOI7 z844nWT^tKQu_+xMf$UgLYj0}g>T}EPCV6zL=Eq!d=_$69Y&h_y|Zd zM!ZLWgnfstDzt|2a$N$cbUjEcxSgke7EI1;SK=86#HSxJX-SQ^-JmWyh&vF9enrr5 z;1}ThrLXVoI9dTy+!w65+}{7sF^9)&WbO$7s9a_seN?CqK}xmY1k7~MhmegRYNpRT z4to{*;h|zlcdgr^wW66IJYCNY-RaYc={Gn2O3`$@PcJJyeu(YgxBx5GQ!PcucF9I1 zW56g|B7kAz@~v&C7xQz#Wswog59uzk9`}IGtkO&OXviV-WT6a5iw(Km0A-SQEz0|F z{SNpZ2t0s`QUT{e9|*(*6JDtcZYXuO@D?xh@x?hEs5=&lA;7tv%@ShiFQ;VLTLxah-!ZL=e&3 z0nM`DV2XC-w%3&G_i#8B^b(EXC2$?~48I)V3{gA8@CG*jo zp&VWJ@7FKaU2GsG2z!C%D)kfESlXkp^RD2!Ys`RMkccTU$XEY zn|hi;>X67{pZzCz;Hrwq8Gtb>dd=Q<;fI^uXoE5rq4a45NjN%)VjH?LOxVP3EqHJ!fsO}tDf3;HLa}#)p-Pxxg$RZY=u{s0I;Tpl9qdNUl%o>+`pTX^q!qwqF>^U((~a6t zD^3d{*5KQ4ysq2?NGbdVL*Uv5tbGub-pib2%9jGlNDr?Cr`%fmgAE_3&Rm4kIQsr* zZK=r8Ozq7#Qz(Ew@zu8<4(qFsWN7zmkdS=3gJ!d3Mr+}9@Ce*-Y7iQ~iUAF&p?2$W zpbe0DR;s4MJ=wlE}KvF$~fV zOGOq(ebk;`Jk@z3&Y%`u?E9~lY;hR!V1e!@S!jq#zi0xD!t@MXS2sp!YYUGlCkN)) z1+XrVq2)Xt1o(a_1lwpL5`q5Mg}7j$CxxT74spQ(;5v%xf$&q%Q3Oh3+)x--dvQg5 zE#n3hnXBk{j%76EgAa0o9C9Zo8}&|?ZTzj6NwDy=gsZ3jHoE9ZLQ*Nl2>c9x*_;Ch z**0_C;het2s;E>t3fTbZm4a%%wy*w@QzKo)7iG-Jz~iWBnqN4=&XDp@A)gLJtT(#S z)n98Oih(MVfDQ;&F>`U%3SI`Bx*I%&7YYR|T~xk6AUq@#V?$*LFwz4W`*!Yz@n1WA zvMAi(Xs3g0`pzURY+Tm7BQDqw<&O}Ky(mhqs{|qiEdsV*yPp=V+OWMB>A{inA5z5O zU!%Y6h?7kQM-FajY^0cs_>Wj<To~Y{ zwv~~Lha|ME;7kHs`DRsZ64>~bm7t+^Cqz7Uie|LjdS}}~&sD5!`$l}JnFBodP|=c# z{9l_~Cq|+b=YpujcD_NlJ->s}9k;<--<#ZJ%Aoeh z2MF~eeqM%fIa_t2gmFIQRX@AY*x;)MPtmc>Tr)K_-S5~R!wt-|YN`__!{z6?hI%Aw z$Khav=L|s=t{m?19*B}FHPcpu5jq8>&(P841LK?Gj1*suLthiW-0?5BZ%(pqJjkMu z1h;nmi^I-R6i_76st`^r_s8M??Xxi5NRe;y`e)2GJs{yYP{+qn3Vwfn2AXJuEg=hj za=Sr0-=?xH4(djr4CYf{yM2R2{a#_wGuwrh=Ep~Yi&YNwgRxzLz)JiGQ3>B1!vmHW zo952xf?MS3xo|Yg0AGI$#VG1*38&#GNZ}-w%uBG>0JC_sZm}y$82bUbOZkHGtHP^~ z>lSZm2=3WvNgO(WZj-xtaA4PL-5-~fJ!2k|@8xtJ$BAEg_&9(+Sjr2h zIyLvuGu!}#un++_1p4kN5OQjF;*&phkzy`{V@}!@bR5Srqm!Xvi6?(@Qkh*nvwYM7v9Ogo}^|v#+I0H7K|K;_a@T2DDD;tSXVLt*b4bu(5 zMaqGwI|LC_nEy=kvpC`CYPKxA(7^EsCosvk>%V>b=D`0wb`?C>Xe4OE$9AARZE>d7 z4O!dxHszpS10R?WAQ&I7S>(dc5D5H9r_S`lfi>@9ajYo%4yse1A^h+_g{zUbDE{(< zxC5PqoT8A|vog#P<+P9|PYktijVQx-77ELPQSnZJRYde33_GUQW!O6JI5xo05*V;T@xG2_=|21coy&;Bdg#qeKl24PV`EfUPDN z>TG$i1IG$2uNmD#F5Lr={$CZEYPTjhc0Tq&Amw9Vr4i`!#UEnu8iu3X$w(~KXQ;S| zS}%Z0g0t&Wi8127O%ezI9-+uI>5ay*{nD=Ep+*n;~GrQ zB*~_PIg?~8E!jQlH8jj~bj7gTw1jF^+VDG=T^dF1{ ze#7_#)HV@Zq<(~l;SH2{P**2~=ch;RFU;G-rAq5TaBb=s7Y7GI9nS&+)TKJS2?$Hb zn^gknGs0{^GQ}~O))Ae5CHa%bw(dSqP;^CFjtZtMgmnQ}72wp|1-3LLYY#z(N4|5+ z*Es?E)%z$*3X`?%i)PoXilUjki0Z=6dm`+A`DS*^3l6grDme1v8=~BJ(B$kVJmVdB zMS$&#O%dOwxtyvZG|={I}e#5IFF zMt}t6V*8;0VpVr)8v<@)fphE^8P(FHsIDGrKjK7{l$Dj0dbe^ib13y?IRS;%9^*$= z;;AE$uAT!fM=aFOYz4e)uy!noMh)k=5P{&E78;Kj%DjV|{cYj*S*X2v`Z#~34^7{A zo}&#@AiJ^XTsY{T(cIj9pY$R*dEkag>%N%s?~-Q^H%>jQU* zz)AAKVUQ7|L1nI2AskQp8{(xo)hA)yXwfAIX&Cq2T{KjX6}0j5HKi%9<{mYLDgc7q!K8OYZGOfQE*PMY$SPI9BaLvqpRCPD-7LWzm@l}9!W$@$17YU@CKsw@|{R6B&_ zsD;tQuFF!0_XFJh=mhe zhmuBm*(`cj{t(a>=dpk&&v474yu^d9z-%jrfT0_t^4S0M=DhOY&BOa#j+)^(ewv4U z{lzH+4hM1`e*6fxJ0?7ft{ZNEv)=0#eTUsbffQ_!`(_yU9+QhGDF^6er_i%6SlgRq zdJa{*ip*MJY7~v7+yWj2yEkYQta|s3 z{{L`Ndn9U`bzNt^E)7N1~%NAYSVYL!lc5f}p>mj0wQ++_5S)GcU4rc@(^E^_dcqpS@O5 z@BP>B=jxG(*d7;Gf5$r`g9lXTzcAw{xgn>k!uAtLz!X+qnBLe6Q#mU&^*FD*X2Kh$cz^XbAfm~sq{6(W) ze?rKjAJDx&&_Qx^!(Oa>iNXlV$(s*uhOdK3nV91(SDr0ia&!W(?WS~>Q8-jqZ}tMH zuX;p$6F>r%q{U>Bm4vvDn(M`q-k;p@fLTuv`>VEvqb zxpf-k)@urn;EJktGAgL6?;B9+hdSrGWUfZJ6PvjhQ#>}+R8IuVqO#~sX)`Eqe9!Ii zMiB>@ry>^W`0KW7j1YBjaCmicgjlL2A~SMj=P|uZKOt!s4pz$#2^9gdgwdasW^!4T`Jv zViaY-CG2jH=JEpGQ41Bi1N4HR8KU+9FG15NqR5)$1^LcW9L9c!F_~5j%%D9qt zWRaOGgnFI!g_m@xUnHfbai*ORx9zxV*z~Q*EG0F~LEA-VAwut2?YK)qM%cHemNMsr zm#Q?XE=4E0p2{}+l_v@}I6x1W{y>4+;6puHH0>IlcrF5dx0 zDyp;x8qyr%YJv3F4L6WG*oNTLNr33Cg9KI&FohoghS^IT&#CsD4ghKr7EH#94e}ae z2ID>sIK7eAXt`@hUEbpP)GpB?AQf5+XaL`@o(w30xeJsiQ30ZO8DHBK5=gVXm-!$N z-XT87a3(O3U?RrJSolXn0hy{(KVG^*o|#IkT8P8>nl#`Iq$I1Ko7B|I)N91P?H`MS zdC2(_@e%-7_nV7(AE7$YMFb6qoh<0p;c%74jBc<)t1omn*>BR%2+5nL(VRkJkI`Sz=dEM@8dZ3J9H4q=%OI*^_ zDvIv*7ov1OJ^(_jVv*Ji*(u2qOvSJ!daMf0hM@4W)Jnd?`=kUeT{6foy7J13{Q!x8f`9o?a%3DI`ou+8|1ak$jzGNL&CokoS`&tKgBz_F`zV_5b(tt#1y z=RwZl4$`-5z@^DQRqYgv>=BBF=UU%?|I0@&A1ZhaDmgl{TEt&Ef4<>r05|dK3Pqf7@JzWTk7gwh1{x&2mWQR;Y9 zj$!rfey`eUl%|k_?p-AwQ=p)M6y9o3_-=1*f2@ZdDlZw7Y;UMg#7Uk9Dqm)6(0_{B)F(!X=`T;%nJTCygrR2BJ+7Cm6 z5qc#KS@^RvE-iZ?)Yy6#7fUon3=V3I6l+9w-ivHXbtc@8pQVF=QgH=X6%AMb>wSny zL8FfsE%ARwrF$iuI$;FKm>p+~jSl%5x;=@9AOH|PIFJ|D;3Kj)Jv(-q35}Zp*2O-n zPlmzYeo2wKD?u=e3Bvff+ooPxqdXxPb%I@nOVcVPPSHW5nb zX!YFfHvOg^FshqBG&JwrZbO;3f7&ocAkDHhbk8u{9n4C>G^1aM|?6#+CdyseQQ`*nASzGuASv_fEj z7=<<|I+Q6%;XpUye9#6JLaL}~(2Dn>fIDP}G-UE?@^mq^rF&&g2eGt{Zo}cd4bt~p zbIfT0e$<`PwvBvg(Z<=T8k8+4p}lJYGel)5mV zpFi36G>XsMdUWVrXQ2gDngbsOiifFAPUTZD1gU5TD+d)%6{G<_2IFqpfuC~52aj(}%rQ>_Cue`??^)*XpMRTHHc4mw%(^4Za>Yk)=YA!2yDv9nT@#?^Ucsam7`I7(}MI0{}VsA+}Y!dICC|d?q}C;AFD=ck&D#yVFw&fPhwtvB zCWpRj*6HyJwp;^K#7e|Dpn`Z-ioLK&Me~B{45Mf?*$(9brG0KQ&<4;W%U`OWnZO%T z`tu;Y-cLJ0@g;Nn`>rSF&UNW5#E$SS#Mbh;SQEukUpchZQ9hdWl3CNzg|Gf339kdE zvs}Gr2XkDF+9sS*T<@M=(7s;I5-a;Efx8cSKHE}7zToXrJ|D z;2)?Wg@|6@?8@M0)o+T;wyMrfH&>$mACkJ{1?N`l~eKx`;^3?$%sc}0f{BVKmPqJ`VzPL6_rs`~q}{qgbf z4pL-m;jRG@st+K#R|v1^dDJAV9+Q`k>SYzeztX3xREvoF9$Cw!j6(I%WD$?$!9-XK zt6p_?)pSQ!syl7_&j+msL7HmhMD?<3J- zoiI~hP*Rt1lSNa zr+VOt`U?=HQt#voz){D2Zir{vb0wxa^J!mJ-isG;A2j*?O~FxDLRXdO2VzvjK&%|A zrG+VDxnxKfP;^8I(yT_0q&6{F(db2dKsdRM}r-Z2P0bw1D@i7qx} z<(?4`@IgUZE?juAQ0o=T-h1|j==k2m)o_g zOA}6d1MUprCr4o-`Z0u!e$(+DM<~E9U}sbhC*|?}=UG*+jQeoJ)Y{yf+x9q(_L^C& zz2Nc(j5x*hg~=A{$~Yu8aMKzzkY!=SCf%-+6LtR?|4_Vb9oNy&UhovYGfFLHBL+d1>4M z;4JCg5ob`Z4yTl_#bPm01Dn#Vg+41EFi%*XLsoYkfUj;qF5f-62;>m`#ze(*C=wZ! z|3~DciWm!@Bd4K)GE1X1vYJ+5ROpUe`}#IS$l)4LQlTfuI)zOq-^TQjZL@mbS91!T z>z7teXBZw?61_?_n@>}kilJYsXUNoG`}A7^5ve~Tok>=MPZKOuXk`oi zZa2s->k%{;KAx5X^1F1qh+~)$uDDTFt$!M#a|=da{}+ZTxTyAE2ym$oqXDCdm;W zC{I8+Cy)q^-rY@GWED@msmnS=0Q`gP!w-TL@=sabd9`YtDs;;%1Ws~8!{)~XmUqHrFJ6!Meqxci2Fq(Ax^d&xCx#2gYmP(nf>{S!(FqrRBWj{} zYNf7^tCqdqgrLCl0vLSZX4IxtcQ-3LP99pe9Y{yIVaVj$@5SI=;~@+pkwV|2^@ES@1I!BrcCQF1NE^EtgO8p9x#5m?T6cQp_TDyLI-FnQ3}|YplacNWaV{7meFu2 zDJmmkacluTiwB7@l+^;%cN~a%9y&8#{GB1vrx*Gk`;d2t)1d`@{%f-8y8dPLWc94! zDKEGAzL7H1uEp!`9ltz?-B$c1Jm)L1ByGmjbZi?THb}hkpd{qvF3&Elp9#6sAG*BF zbA}5mwO#rIyDAH(jRL6oUTr0o;(rycCxyd41~sFha@3Ge=Lde+3zMbRH2J z2R!=o&2Cid3_mf6s$Zb%duTx~ZY?JN^Q1wI4$5j0QO@V2m^q%>2=6mo{d!FP-s2D| z^dRsPF{_)t07;AjMZxp)eIi`TMS)4S=VKydqs{L#619}}$uAhIICqEBdUdt`dKbHG z;l~|*ScwsVizfBv_*erSJpY-VR!Df!Zsw#__dVhC$_^c9YC%zA1;82ndFD!&p&+G{ zPu+`yix`ao;<01`i-CEnc{B^vU7TKHx$@(f*Nxbs;KHl+CqVf$9b)2A(EIwYqq399 z_g4W$D~0azt^KBBJN;@*kfMAMW+!kvjD1CIO7(bMGd1?zo=0ntTm;#&QP?sms87m8 z<`@N6JahP#CuccdLEH1yazAxuUk&?Z-w!^*g257wr8V>(?iAQAvqX7}9F0I3K~%wU z*ReZE`l3;oaNb6Qvp`Mc8rsV6##9yppc)4b-_6??m8{r39VWRt({y`w6Mr4=PF%bi zv_6BfbmsrK0^g%2)Ht$oKWemH=5)X?)c<2KboQ$=$JjtI;Eiml1lB54*z2GdG#BKm zd&Z-doa?tE^idy12U|gF`N|2=+D70U%Od0+1uW-KP8#$o(pa>X1^%=%&GuBsdK!OA> z9l&AzR0?$Fk2ta%_+%d^C$nc3ZArMyyvfy|(1$lr<_-cd9>4;j&m4hhWw~kf7VZ3h z#=w^d8ZsA8J9R_x?9BOryM?sk*#6U;5{jaqceL~d0x#x==#O@njee?i+bFb?FN# zqtzd{d?cfohwtobvVO#^FaF4`)inLux2nNdqjBhI$;`XJxQYX>w~gpw{D$67$@FH{ z<|=}=I2LQ!Rh%FMAo$31JkR8& z!roye)1y85V_z$|E!uNqxnWAXZYgw()509rE6WG}`2)P5y_U5)!7`4Wua`;(x@NA= zn>F7Ov%S_is{3Gv{EX4M?lIX@pX1Jm>?@wF8hLE*BP=Fw47jgVZ>TXjO_wqrL!bq# z{cE9>`yBiGm%RXQ^fK)e&I1*?Nw0?8#Zg;b4lisueRZB4hq?^Z8U=ag5H5zmXhh*O z{ErZoN(VvNa2n!#)|_edB?6c{Oo0HsM=rlUiR~5wj&jIxE4_A@ULuyWR|3uJwG>f0 zV5Xbqnb0RfX6!l=czrnDjiPCqI>CiW*!HWj`|rL}6Dhp8T{I*u^KSg5+wOWYJ8DdI zxw$#Rg0c$~vEWNFcaRR>Jh6VaSNCR__98GOQOSGRqw;bZu8vi-SiBcj`r4ra69T1$ zUQ)o!$YHL-a-ZRU-IPDkO$lp1J$LEs>cJ9~#f;aAh`7#vh!Te&-;A6>2wK3+oxic^ zK4^sMPx8e_5YF<+UTi9GSIc~UsP}z1&60JQY5LWHBr)5oGoMt;xwkEdU*J^Y5qsg;vYe{#rv?b~@HOBB!1 zkip3@gF@|-en|u%AnIR;fbHdFyZ6<-_@kjp?L?Z8j@nNx=f$ep@&+>Lv27L#peI24 zV#JR+FdrKr@QPq|{SYXXFS>fclh*cZeE{k|+mAAy`cbca;D+@Fsl#!-J5l39c7Y~} zR;@M(B|i2IM`G-?C17SLP`_0>Fd~-gjIUr=CG|a8*XyV}^k1fa98aAnURp}( zkjwrx=P7&UbF2raJMH4nd-c$%7t1t}V(G#rJol-#90W|=m*3hJZ$wCmJm^B(V^G>1 zAB|G&BQG19A*u1v-!*Tt&dRH0KaXXmdfu8kpxc;*D!jT2gQ_0x=I=qkXVd&(xjc0q zvL*4bj7yuqJ0;{q1wi`)>Vy1OVRahw>?ReE{e1orQm4$5L!GSx!%A^@P z?(>(|VefgocCU>d@mcEKC<0n_t zBBo|bce@-~bn4#cF!a0X>s~_Ew+Qtj^WxZtM-8h2r=gUot9(VDK$5vbZLAze!c%vD z71c7;K)&3n^)3$RYuT5Fb3AvR8M_XqgBlKkn@m-)S^#;s>sd@~ifW;uq#I&)B>s8j zmm1Y3<^o|on*t(z$U85G!3(oP5v!-|`3XFzdYYkbZ>uVn1k#RqV3l|rtvOE53C;w? z_;nfttnUtWI>ZR27LK=!=D02DD*g{Sati0M?seRsuuM@?NmJ*k@3a-sKkV2q??a8$ zdZ6ejR>mi;&{j^_7_w$^>pt+NiZ=It;ynuXF||mEeXNa{GX9`WG!S&tfh<)4d~O~= zi0+&ax_MN5)2d`$?kXDy9D944z75u~KPh1d*7A2EnvRnU*j{wl;LR??dng07s2-?d zc|<@M^5$|2KA|!Zpa?<-q88NVKhIiHe5=n^%9(C;b4&W&8jX2K_gpq7ax|q@XK#Xz zF7F>sBMLSJqS%#_-a{#1a@~1+ z;$6>8UFY=XZ*jq`^T7OduXXM{nqAIkBWikPw}}w;m#=?9D&60;*imE4Rn+Bghrj7h z>cR*zeicB^iN91%Z!t|XmJLX;+}OLUZWPS<3uX4sAm-{Fcwb;arXM&E5hc%pt9rJz zxG+V!41~r?cvIV-mf1i4Wu4t>gq7@lEV4f;OijzbpLYK9w)E?x-HhiTO$&I*z=%y} z)`2+Div*Y3m=$$&ERKpTbZy0gpX+RT-A4am$jg4b#0asSIXQx)^p8p$!{+9^?xK!+ z--0ggfncp`m5g3)AU9eD^E34!LJV(|JA!%0te}2iv|r>&`N(i?e&RRtm$oC*-I5gR zI&13A6VwQPVN0*Im}|-}Kr|sAxA`889x8znrJr}n`46n$l$ARL!$`MEX#-o-O!T^j zYyZ$+z4!qi5RIkMuEk$D)0OhB#H!l17eF7&(C+8=%-V9$t(}tKx@)t^yJMQ!eItV? zT1le(iJz7NBLxx=`ji?gntwJdVQl>I*=>8Dt zfeIw3DO2_`QwS9Fa=+~6FYl?9;kbNaoAX7j{e?^E>snrc5f<^Hi(#>=f|LDnD4M(J z?rxTdZd|F><2cMR3>1NwBZ8C#Ad4c=xce0QAb%_u#)tuR(4qbA(WjkL6N1J!>gomP z!1hKd{Nu4elUd+WEEx=XR?SWLw1GFr^u4yg&wW1o&5L-7; zMgyb+9Q#r{RveuP2OhM5JEC-o8(OGigXe)NRBoCOLEbgjIfWuGQEQ6nNiJ6su0p=z zM8o}auX^;SefO^4dqzwx&C<8nhfd2qb}f5O0g!MzgZq!YTsD1f3;@pW4agws2>*Cq zW;2lvUIz@Y(zt`C9e}fvU6T#1xYT9I(DCv(WAG-TiPeC$zjc4=J-ONO(Qp@Sj+|;Z z|CCpw%H_o>r6<~U2Q*;`Fv>^nKSyKR$ardgWNFdT`MW-?2NWeO&I`W64~q~rEFD=K z3y)1$cuFs#X_LHm`Ir&I<>PaF^8N=i?J)o?DWSn8@mT6XJRt&0LPPz(7947tdZ?kU z8T|AC(_5Q~H4yIk$b;0|pnV^xdTGtxsCN+N+b@Y*-P*RhGcnod6;jwlQLGvH3Ea%~ zEqELnbYRuMjDd+34HauVw7Pi$n3+rk`akme4RMm;Ss}<;mLtt~x{DdhRxO9;Hv3~| z`o+#ihhU{F_z z-%$SPbhz;cWhiCwrN@Wt`rG3#|HLE%4 z0VembZa;nR2dCP8sQnhB5j7*1;QB)O(f%sqE2NrZ={BcnBy&a?fRasj9~ht7|GgBC zN^TPD=$`KJ@qu=CLGR<;_m9IC(+3@!7)5fK2_VpT{acVK&pqM(=v&?1g2VTr-e6Ro z4bqoLCm(e~@$~4RF09@#GamiTN;41}qdM4;m@EU}Jnz!Pa-QjmMS;xG0~6!jxd2O> z`FDGu@MNQs6_oeNQR5HZUUwp1E=>61HS2nk#k5-@D(js9#j*on$ero!b|X*9&aD0) zsJtEh!i%Hfz0RKi)%7h>%`1mq@Zk<>Ogiz3=Q>7Ek}^awirB!=Jos`kKSr(yevByA zNAF2P8J+7m0IA20rskvZ0A4VGg&SIDw6z1L=1?IL<)!N~LaZfYueOJWe6#ybG6X(U z&W~?59m1a4uN22e3dXNh#(Z#fmpxH5Q*Bue+(;520(J!&=@G3+pyqySE+#vcuvgH> zv(WBS!tc~$3*O!eFG23D6Z--st)R8D3^tWVfAA$J>dcZii~N1)F^tTeQYs zWTb)L{(=8KtE@n3Q0ZGZ#hhhmQ%AJ)Xg;bjE^ms_G@OqmYTR+Mve3B0x=Zp4_ao;& z2U0AHTBH9{pd;}7RZ7CFO&4{|VogN;ISEp>G=xU!*k6}&&x3&BL8z_zLn$|x$Fqp= zx@QT9e=)GIR6d=wF`s*`w9x;1F3QielAftwi&JO&`T7 zCGgug62g2yht(fOT2}M1;?zH1{u*XNyurfjg;PB)&i5Ob32V8h)}HA&y#ny_$0^)) z9}xN&Ivna!^XLRU49yFGAqB?GRyS_s5CZG7^=bUp*=>@2e7jFH1^Z@&_Is??#;?kH3QXh~oz8U}Jv3^&iwpLUPuCvw0L37hBL8Q^B>#3LBVa z(E{h;9caBgX_NbRGtu{d@H#m!X7v>+#GH7`~KRZh;AYIIXN11uWj;3K@xPjYr@P$ z(~lJqUieZkm4fqdZqiSME!hsuiInE4$EeOxZ}z}9?1_N9pdH3*dT6S{J_>07Hssry zp@A^=9k)r6yg*4jR<#DH>V}AfB=SoGhA&1Sw{7dzL0hY*i_m@H@9Vp#gBu``pos~a z4m+y9HM_Cf@zZF_zxi_ZQ@?1m4PPDQ&9(Em zW{-4WaXX-{c&5=ur}FLFBUf6e&z;=MA!Bk~PCb$^Sy za8@&6wt)z{$f6}W(Ndo-U+d$rZ{t^Mnt$<&KPj`|~C1NH2>foICzni zF@-#luSKWWwS&I7>d>ZpcuiNdaJP^}`|;`rFjUJB6lJb~9&xpuWpaVz}=g)58U@ZqzWCz*nPr{?$b=hY4tBwpXa_un>>-KA}*Ti~->k*agPJ;M&G zvros54?V3cpc)eN`SZo#C*dM)MM5BS0#iYD1((5 zJB~~3o2 zdif^3cy3tmgwwC&CvTz2BJO;=RG9gRl!?j7W7}>~uqsPfKl7sIuL6f~tSu4efRYtw z7Y>(9LDE$9WT)U%uanV_-@iVU2t~*l&NJ8YpkqmkDi;8FBzzCzRu$+hm2}{-CSQdy z$8y@eHJZa#&uAm|Ff-#trG^}2<6{p>YjHkUD|7w4ca(^Rf`!-I^1Hu1hnWlee}uht zSk!CxJuE23sGuk!0s<;6A<`|V2uPQ-DBaQ>Dxjc*bT?^KXeW0RVqv^kw1Bzi6`8LnIQeQNgk{YQ$SAEUV$(NYw% zJCw)r+ouK#=sAu#IXh2dHgUi@ux|5maQP8~f!{Qs9PA6Tb8o?5E&y6zQOwF40OKsa zwNtFM!M>a+@T7Pb5<&&?osjqM1y3Om@8E{4`IRq&@tMzRC%xn55&@fQZ^8^%|I7Cp zmPElq0JZAF14q#Z4{{?looQr?-~iTVzeW7vqrvZ6sqkLEt-{X_Z`sEYb)l*JNBqX( zI0Xt`#cS8D-C$vn?dZ@7Kz}Mo!Pg zk#^+BrV9vu)HLQXixy!h@A;t}jQ@J0O5mx<=4*?#6c1&~_YrZL$H9oE-_(#GtO_Cy z=!jmc6BGRFJpc06F2hYGj#V@NTUHw#>i&-lGDIJ@Ve!(-D^fTaNK|v{pF!?ViHVNj zQ(OI?t)g#Uha zD_60K46MP=Waiw&>U0x|kr%cqmM{nq%eSMUoC6&d1192x^Enn{tU>!i3mwpg!(2Tx zqi}o;iv^&dh(Ir;vzEtn@Rb_z{po^W?kvw=kxkG*D0w)oZRp3dblXI*>bDDGj;sB| zYihOX*D$Kr1f7t{NY2FS>G6|1dGUt(n>SV!gIqRCuhdBi zP7a;HKGip&(=~E-b$D5`sqE`*j#>swzmuivW4@|O?3G{Onw%XR?)WzAD;oZX)g!#B zg3cM~J00|Yoim3?LqYx)gwpX?0)Ev+~d-lv`@t*g^01$Hw^i&ii2zel8jFtw9nwD6g zHY%tDLXZtw{+GJ{Utw@83;Vv~h%+o*M;AZh_!%Juubu)IJ&ljGwbMY$w4L*YI$mi`tA*7Ai1;!*{w>v;uUi}OgqIP%j; zNy+su+v*xStw-z8#CM__aoAWeI1rVT zWUmn+xp*-sGPFLptomTb$R4ow8+?3xN;8(MqQDZGZs8d1UM$vaxzbV$6ZKa)IXSwK zJoL*I%lsYC@xu<1D9&d>>55tNtxdQ8eqR6jM~`6JQ;k6c+>w<){CuWIumIqV!=W;c-Si#UeJe~*;%Y-&?=DJ=W!6UtQIwY<)PBgPRpKW!vthxY8eR#_Cp z)DVjIRd9cKO4cb#t@0wnw1j4>^o>%aBH_HLtb6bI65^4v-UE|btg`k8aaN4vEI7Y> z+P@#@2vr<*@>`)~Qj=_S@vctQ-~Z=duUbzZJARydlnc)>eY2>}k8HV^c@EmAM%bJ2 zGFr7jYG>)=48ho&7r=zL~Yzz#G6>>Dx3r2>68B~kAt3JW57aa(!<%_KU{K0?y zm&PRE&`w|u?VREx`kxcC=80-IgNx5>A$ zvk_6;){SWt5{4X>e^oX5*!(F>A>}dCDHGXWbkoK!x<6;gHJw#yA+9tmI{h~0KHE0pUcmv|i8Z%y z%#=!rOk*9bgve>gAE>bEGemBfwl7rK`mJe7Cvx3kr#ltYdi;v;zoY1132DU!i{P?} zeD}=2n>S}HzZLGB!20zl{rWiIN-v#z)oScS?ucCt}7a(rICtW(puzGHM$6IMGd&g_Ey>Zzb&xp?e9=0#PU z?ijnGW%Uds-^#*^zIXAsKmSxv{C!)S6!b#c2l%T%V%E3r$Qp!g^kDgVZ^UU$0+xjN znF?GvSD)rK!k?VE#-81C!-!z^EU0hq&p@y8_e2w=Xbg5{flGWk$Vo2dJIiBqzA5jxc>7@ z{p(^wG=b)}9zYl!$a4A5CciYNk=ak359fTAu(h+J+pA25#9N+D0y>Liw-g9-lfc1$ zVsbJtaIX0&tlCNC5`oU04K=Ku#!itTJqKt0tGXd@#S=cVSxin4nrJ6CVw4$Xy^TnH}x z_25SNXJ7qrx3Bw$MbT9FEd>R3)J=ldo?$+RYazav zk{~o_R-C`K!p=qLs2GHUgGJe1Xlg0^3Jkm+!2YzeyHmPPTWxx0XT-w(P=2jGd@mDL zsPd}g_#m$;4dHKb9L&#Xt}+Jgifp_P4y`=Wzw4<*Vj@D}08Ct`pgNNM-?B|squz&> zhUgC|K)bGo6`%_PHQO`9GFn|^PAl%}k?Ax_*-^)ih4HUz%}*N2XmtZP(V`FuO@=7= zWX{MohA?C(#}WoRxOYO#f)#;xEW>OxGG7?|M|hINg0?hg3SATYE$hWE8$*{bV2r1< zKYJ6*NY6pVQ*Lz>l$`-!CeZ-asZ%gHv^BUHect@WxeJq=mpLl$Ul-|WkMY9JQ+hhJ zydSB9I*`cUA5-MAnDJMui9a08H#DHjEiy^u(OKxaK-qkeRpOZj`FjEBiNNfEGtwW1 ziTZAvHj=9mpOiF3xIF1D+m{rnG0zi8UA>7)l_kgV>VI6IW@TYlg3 zx_O;WN=_DquwA=p(PM&qJP8YH#i7M)xzk$fg%=9hV5XlGmy}x`Y&;mj+u>dKZ9Opn zZMEUf*!21N_yhv5`RMk;flhlsNb~hOt~I5#Bm(r-9K$zALTA$Tm>YJ!-x_tbv$N}^ zTC)$hcF%(Cp^5}-ktAp_N^69EXPDiVqdP-MY7>86*yrLuO8$QY2E=o>4i{VW^6{5q zgfI2N9e*|nt0LqyG!MYko(>qA7WP=wl2QI}$HVI?c*C$xUOtJeQt}mhVR+uRynRX6 z{gctD)&1DfhWEC+4|YRUn&`=@Xf$)Sg>a+!$Cw|gFi3ci9acYm%e$@1@!FSXd8X%5 z=G@WKC%z8*BUU7t`KT`*Gd=Fk9gHet;8ph!uQ^2DontP1Tghe{#6^Cn%dD_jAN!f3 z>GtBDGkdmmhUqN$I?WfC{r^->P|0)CL1{YiP(Wm@-S=N1?&sUFC^v+E%xyj2LbFi~ zm^566U6h@9Per&~_DYwIH8eD=!Z5}M@kEglRx(~<(tt^oRRAy;=Y5;9j-&4+gNsCy zZaLt56@mun7>o%tH7u0LpUbdj0Zi!i+qXT2?||(sJku7-1ORss7|At3{$YaYf-f-S z?!Yb>`f%7GKU3P?F5R*dB@d5T!L~FuHr6z8a*hMzIwG^=D6en0}q~AA4=u% zd=DXx^ts$i`i~Ox&}l7s9WkzvzGYVLTq}Ak=Z=T{dm;S)GOijSL=8_QSz^LRzF*+u zA7Au;KO`4nsonPkaOS+%orrkl0!k&=WL{@F0r#vPG|ndTn~Q^bxKA|lo_Ih8gU!O5 z_Fi~ojDsbEX7!36I-#Zr#^9^EZ$@4t95f2`1GrYWczM-g>}QCovf0sqBNTI$M8T%& zW($26D2@}1he|tAB$w|xZy5k6gW2wAWMj~upRE44C^-=!hkNGCMS?;Tb$NBuP#7Bw z)3yQL-;<$)L5hUIOra%*AZv3QkA!oqRs6pzY=CfMWGpFuT;j2mOZu=(ecNZ``t|EN z;6uTv48wm#%(Bq=rk-nnM4_56LIh}UmG6xEUikC)jd~p9D zTOq4{>NEo*;5SoFLtM}mB1!n2-;e7Rvr*ehmo0ByJ;A46eCZ^G^gzUm$;gL~M_==; z4kcB;i-?J^pPd#93Jp1LlKd=7HCd)bHA$@j@noB?p)`g?>muYmuqX~IE&=BlwEVo?^Gx))p5D6%)hnb0k)@XNek&& z0Pux_xqgBvKfX97aIKhQiD-2iZX3SH+KK;TYMOfZ7#ue-`!~a=m8%?z_TawF;CU;z zrSq>?E)8*^(wiq?uF(iXxg-#>g)!!M5J8pn=GwcrYDh zs??yVp`Wj>4QunXP2%Q&R1_x#WI=2D)}hPi&YdGCpp$3zdZ8CBQ^-q1-&?GPvP$CX)X__UP7TK`*h*et;w4;}kW5lV=eP)6@4%l2Bp%O5DM3upj z6GZ>Ic=tKO(=4*C&Mxh}y<3pTM_2D3e#ajp(;rqN_ni#PzVvE$jLJePPNT?txFLT@ zvu`m>{49SND_+;{e^58VQ=9{W8K(CIz+00I?>p|H9 zOhr?cAne_ClG*?Q7yCZohV)=npO@Cfop(&xs7QHUKF+F_83iFx+`*wd*=IZv!PKg9 zlk72UItT-wq~?{8d|!pxM(T=4Lnv|$Ii}$PPeadYgXT(OMkH{$?Ab}Cw0{3er;x7S zdj7(NL}e+;A64tW5D0iXa$`(CwxYvvYs4xxli+{R?VRBIf@3kR2ln9{W-;47)#~bC zZR1RZ$G7ee!-Be=_;r!@H~rtedqN{q@WiCn=88JuS8L-`iLgS{?XSKkanG=Ox%6er zD@Al0P?d00ix04siKyHw48HbZ!*Rq|#B$~VIVbbo0&y`q_s$4r`Ae7G8#Lb*oDNjv z*xZ(~yfNwE*|nKAB2|%WBS+LfE3s`qf1F5Qh0j1Gr%Z0rb!e+A!)U$5)WLtJ_HeR%FSXz@ai z@>fo6C{z96DfusB1H{;(R(r6&+d{_Plxc2mKGRG@#G?I5Zh4$hwYd3%@jwfm9Vhod z+1p{Lf@}hjZ>Q;y4$w;{^kg50tNF<^%K9^0-z=$Ue#K=oqu{Bjq5a3NAfNW?G+WPe zwX`J=(nJF^9Ll8G+Lrvxo`Slx*4DeC)?DJA!=$94U$dVdJhi z^fYWLZ!?O`Mj0^^Y}kZz**1v)>nv8$avic8Dcyt&FLpYIR86j4FHH^Q3bLL~8r80C zcGd22bgiF2l4-Z1PV4NnE3Y1ilQq2=x18QRRrBEP+b`R>jn6F`+T)~KB1J`S<38;p zxl4(yaU+iKiZlC6;R0_ZgR1Ss@+?!d3Lj1EeHYqM-(8uj#=E%}H|UKy`$i@!k~dZT z9#{?8*Sd`K+I?@lXQs-6YB}oepg{ahV|s79a+kDyv?05K_YZTY_k%c~ry5_mL}HR} z&51?&$M9r@1Iz4L2Ejy-$$_FiJo>=aKPH9|$XPbr7q_5+Ou$A0rzgys&TH22ZR;Dk z@h)ZY2M=CVf)WP6`uI$VnKhXDG{B`w2F#?h%ui>uIasM5Y5DJ2CHkkwT+bR|(_U9c+ zi~TRwEqSw(tqo(FG4DLgT$mu_MmSeySscEuO8A)HGg^?EAXOi5+iU7uf33yD-mNn8 zxyq#QgEul-gV4`XGLt`e{!jo$2%W{xcntccMzANxOxhwV`Z8RYiWdfv_TkVh-x{dP z;-ZNRJ|?Dj!B^|=!~M%Ey8<^vkj+K9tb=F$GGu1#kAIo0{qkqzZh|g|t(}9z`*WkN zhw9ya1=HXUk7@Y028V~t;AeyZ0zW^0#9G?fELfA=ZCoHvMM>EJQ{mYm}S_ZQVu}iS5+9Cn6s%%?5wn!d;CBsOO=S=9YBLGvY!m{_2r2*D$yvu%Vn8sh3P`Wq%?zTQ}GO2oxiPP zDR1{}b|$yDvJO^dt?r=D%x!z3unxt08A3)j1t@E;I<^d&hNHPDq^l|qLhq|p+I74p zvPkvWpgv-uXR7;45%B9N$0IOb$E!2!KPKk*EwC>C_m?(K@T6L~m1uVx__j@~?*r>Z z1u(N|D_3z50vZ!}Z`kmp65k2q1LiBbranGCmS5}2Um&zFHSwd5NeYAT)6&MrZ;;K@ zFL@3?uZa@Zy_%Yus&{qv%N;>Mx2^5%IY~5(B)=7xRZwtpKH9{mpr9x>`7faJEOuXx zCgJ}PA!-Ziul%U}+@DjlS35f@S38vf)YLjn%=0O?cvfBP-#Lh#N7 z=}5h|?Ct5h)`bnlapC3y|F}s%`%*VS4Ge-Srs1-!!{vHVDHqBIusrNxk}p|yJy;`y zEvuEf6^W1aH8nM5;yaa_pu5Xg?2oSd@@1fBP664jPe7%fp~w))IKKn6f41KEG(PxnZrI2g>Zn2qq-gC?rLV+E$PVsQJXK@8u2r7bQ}`29DZ98s-zS`Xq2I{jE?i8J~2dUPnoWzdzF@v|>Wff}Mny*4CXHJHmxIaX>|3!c*r`1lB z%9%~FRgE_qCBDW);*YXqiPt+R&!{S4O98-fr%BV|aqMJE)u8R)-jo$=ED>V;9tLe~ zZO${%8_!jBUjN~zauY$oUZJ}#`)H-qz762ziV6um*F6LpzAUJmuK{AvVJu+3nxtE0 ztpjZJEUA_{)e_U9j3yN*8Uu^OHl0AiZll#1(poZ_y+0la{>qQaIrou-DGSD&Xc)!) zH35ftk$8#e@EL*3RQ_{FrH$oLCMcGAjBJdmV%*DV+&fK^^(=n=8vjaz?!4!ucgM|! zO5+_VKPLSHPB2e=524^1rj3BDIAu-*MSe)2l&r$;#ZsUEaCo^vqFs8cNTVR?Tg>Dn>;-{MYVHo*;_C$ zzT3nm5L4)``UW}!t3iv34@@Q0+Wf!&f-6oKW|#iatn#Bp4ZY!G25mK}im(28a(`Cj zc7B3TtWCk93Q49?P(k7o5a=vn_FT&dz`G)%9KyRM!=gZ+JED!UfPPUXQUzc-Lv<5N zr|%Q@A}y-|LEk10dm_;h$-u>nFqv(O4TX}^sCZ7n)6>(C{c~NNQLm~JT?Q;fZUFS5 zrKh8#gT-Wk)qZ!eB&$N_YDPN-6W5N>QY%ojlywH1+p!$giSEhxwHUmhn6 zcy~`+bU%F@Uook)_Pa9A#okl7l+xT87iS%?y`;#3YV~j%J;XcS`Cnv8_6ZFD3{Nym z%$o8B^Ifw?)qR9#I}Wd%MhRqGI>;BKa{8{T`{iYM>MYq+D!!$;>CRAmHSsd4+o6)d z$*4=HkqV2oqy!7Ll$#DBEZKUcI?Bnljjs?J*_sS$bivs-2_yuHB#uK-Q)a_w=IlIk z#f?w`FuQ7ARR;G?`}-{(zrVyJe<23R00f2~l8rwvw)c)~G@B@LgRwqFBfzW{U zrbS}bfZeW5VmO*EpLPvUfa0hKvL3G%5&{C6ECqJcp)fe#K;R=6t%`wK7V_mqq3j&M;e0Q`wKWxr-G=M8!yCi_5NhY4v_${ zq!mMygH1B9DQ5fAbYu*hQHXupo1J&tK$5HAjlsf^Bjvnu9s7$d@RMNH^L=WpMk2z_q4?{s>w<=(y4V~iTrQM5NnE6P~9|p_geFQ|AMtbjq8OP zJ8{KK&1)~p&jv%*AVlw`DkV&|Hs!b;-iT$4rGVMNdU-fX;c^Xi@P&@LseIZ}eh#q* z(#Y=gMK4~&}CI9gF#GK_-UOVQt5SR)73b6fJP#xnH5!`({qNv`xyopr&d7FaPVxwda7is7pvg zN=!@-VL%pW*-hpZB2|KO03D0V>*s5fnU6o$2rT2japMz7>B91|*;lFInw=w22>)Ve zd5!b;U@eK2A_Di7R+yoSHR*roy0gGmpGcF&GN1PTseQ1!Oxq-%76JZ=GNy$#ta zvX+1X6=4Zot_B9p`R(Pv^yihL?>jWMG7nuQBsRaO{HVOJjv;(8vNy_W*MzQJzmDNz zCle2rTW0_}qJczgxIj-T^h;;iV+4#|=SLou;ZIu)>YMusO1rtdFXWJ_vy4;|XZ z8hR#Xwa~b~q(jYC)2EeXDZF7~HnN~zl;CQ`Ufc3rkIr<#Z{Nf_F#T_A^@azneyPk1 z`YkSuwHv)gB?2f>mzu1*_UD699NA4HPb-=Q1WZ&YE}W1E&6lkF;_STs!W^AFO^cp) z_U$gb*tK@`aS1hRPG8s)l{zL>#Rgl{rH0X64n2)(@j+9-u1Y@lkymmS6!@Glm@}~0 z`6$|jny(C^SJp@m$%>)Ib$pmpz`^e*fg3$wR{8|JXFRl)%FC`>Wo6JMaewpeyN@n0 z7aqF|7xGu(Z`HJKN;qy7zoU}8gBN~%|)6~ndwN`8-mwFtG z@7O!5jLO~NVU(-PRAb(E4l6>A##YjC?GEzgC^lIC{s@pO;mAKKOiUO-S`~Kmc90Za z|JTv}`IeKK*?dgUV5l^24>lL$o(Q6m5yBMWG8E0q;;`lnGx1Z-(1E|a zBd#z}a2C_arL;Rap?j3>d8qNoU12xYC#0zYCdis&PxdhZ8nP^loppmO!^raMBEDav zGA^LCZe}qXh}VJNlMsir3ObzMxqJxJRS|8WI=(|Lyg(S838Fg^`P&NnucQy;X5{|L zeaGRR8v4>zv(qC>A9nse+q_C~aD~F-J0m#`iJRw|y?YLqoq-~AcQKZT!xZME$2f1l z;m47WgKb~swu&j7?w#eFriRk)ZLJr@Iaf6+4lkk$VDxKgS9trWLafP&l6qOWBbI%G zWC6GK>v+!GDo7LY|KSDTyf~>94xsg(RHTbP%!$Ic_6m)0uu>z0vIUek+;2WYry=9C zQ17A~Bp|{8Cb^zxDKcGVyNgM~y>gtqBldO`>#n=E!b!J1f|!&$a$P-J^=1_WOHzZ? zMQkG$Lh8ePQXk%FOr0`rHjwG%PsyEmLh(6CJ5M$xwo`Usy(`W^*nTRzt_5qPzs&Dj z>Dp?GnP!8G9J%>)zCyBkpyO1?fCO7=x!v~jGZ90Yw;wCxcxSYuPPIw&kf02c5i**q zyM3#G7EVohTwvF#gX&v0$FQ{UjM?>lGCOwF9CZ;?_~xW>c=?ukB#Qe=;)u`AL7Q32 zGS^$@c~X(#wM=#8c>?h;r#EwD*7Ds(I>EG`_^9vU_=)gyQBlji;&Bm>Uomr|&E-SI zK5e}zPvpY9(8cSVlSf{~AAM`1mtUbtq3;Z=yxgUb=4L7?yY$-_eDzw~!H17f0ji`V zN)%tUpuc(aUnTI5w<`|rpn`3{Pz%fP$jHdT*-avXFk!L=k=#oMzH5G3afKR>Ees9Q zd#%E)@4I)>4V6P-8176;iWHp7oCe_EVrxY!4Tz_`RKsiF!eLm`|;U+BBnnt zs~P_PfmUV??8-k$K+-EXhOlA?!=>XGu@eU6+~n%nj6B#M6N*IA81$qEH%$^rGarL7 zg_T*7)gvMxm=9fld~wWy^1HY3*CNT@#YaXimGA7h>UP z=9*J%bckM#)t>LWp!4-F9MXA{h-gQvLixlewK5u!RuX&y@(k>^3c1frLyl5!HbA7l zRmI+`FX=dZ@r)BKf9sy**7_aGSOVgZ#sp0P&{;i-$U?t~U>l;+R`YmKbJ+Q?tm?Zu zyHP2LtLToeWA{Z1=Yf=wox392Sn5QSWA2RE1PQ^RZ9XP6mlm9Jj8Y{t_J9$RqA_^=<^RhX;kQV9`~40 z4zs%BvH(o*8L>33E6FaAdi9M^59(`tXxCebisn^mDh zwsv=UtOe-ocA#PCTO2Gjko&&276|bqlAo^oEAktTn3v}jvuje4lD*MjtD850LS+ob z6j1;R*(iA12~5Wral}F)WLsWEf8a(Rlq$Zu`{YRi*mS6^HCa3nMAO)D0Q;kc3_H#gBSW_(X=vpnqoj-)@2>Hof=xtE(m&8WUqrNgoY zYV_z(-ldsec>C{_v7mU~Fui;Kz8EMB3Tm78y9x6JHoiVx1!Z+(+?^MHH7XR+m8CBJ zrVUS$Pk)hc7*j|3>t?Nf?=;9aoV1V`?+{H{Q7zIF5B@ZDjLT}?jq^fbCR>io@JyAf z4o{|aHSOIkh-cGFDWq>01Nw`BNn$^pNO;dfj5zoTfgurFcnOuXkxbYw@6+`@Q6(WP9)1@QFRtW36U}$EejAO zmz`k^FZYgnrg-2vxi~A0;OARA&GZ#}rIOq42v#Ta+56V>xF-LgA_HL`03`&^cfKgV zS?0jG$np9Qop-777$EGSupE=eIvCbk8i_=i`;&eG+_!lP{6@S|pFDj!4I59J7xcI|0b&75 zTPfVDy!vU4PG`=X3Bv45h(VDS8gzXjxt!IP&CkrLU4KsIL(dZ9?&fkRs2mJ6Qb5HN zftLR%qWVWyi1{Kw#0-gJtYW)Bl|?Q5w@6CRp9 z;!JPlgAlPQbJWdYE2%oCE3~su+P)QMcusX2;j@_)LJ{z+mf1i+?!ltZuvg^KP&AeN zo%b(B9qH--JK84P-zh_mJ*~ngxt!Ubgk6IcOGqxkZLSfCw)7Eb7negas;Hvxch{dqrq7K&WUuixp|h6E zju7f5gf2c+p~j&tPknWz-j~rsR8?25MoEAh^2>}+(V@b zD$;|paqs`<*Z-^jHD5ak0k{dE6l2p;VCb;VhFl=n+Jo(W-hO_QS+M}|<(+AAdIRLG zt*x!*wagPR+&`CPj+2OYEsYEGk`dN)mNe_oQDG)pNIWKe=SQX>|4jH87tNrhrB$vD z$B_vt$St^~x?JqP4oCyO`--B=#9oE5oMWAz|Aht&qaj)%xQhgO{ z9kpXBP>&(NN60Cq%ZqleJ^aIX0Ae)E^+*=2l@4d((aTpyTt+j=epViFk53}^?}&#o z2E+H$L3t|XXqX)2Z$f*igE`C)73Mn2Pcz9BCYchS<+{N6?BG!=l{qsvU_I%<85AWw zX0)WLHUW$#6%Fbo#i3Nz5&bxk>=}I@&5H#O$!p(#-Ac+>U0t80q-3~f88bQSCziuO z7Gl=xlDxZZK}M!&UpoABb+MEz*>zU$bE^M_%a^J;TVf4y2J*}Y&*lc_h_-iHrt=*d z9kv(HIZ0A=sgyV69S>s>ERt;x`qV1Y&mh`ygL+R-D7wFQPAHFj@xhv!jScyDp}$Fh zWjwyPZJ7`xuXxxG4T-`nF^M@L@v=v9^8MA6IUXEi3f z_h$Av>DPwBUla|xK1)&6B_p8Phw0wkaJ>?wqm0f$x)kNoe9f+?Uo_vf9H*`4T3<`A zY;L-@u;_H~%u5%r0#WUzuZot-+4Rw-$6cs2)S_R#lG)8*ucdF}2$cA6Dv@FFv{W%duvLX^aN4hGyR%ejBg{ypOEbY7ZRpEMZ8@WZYvmaHK^ zb%g(bJm8kNyW-F(W^OIN?&)yDI*K8)E3#cnH-l|t+8|pFN8h<~XB8ay#2VhUI@tAGnrHyGp@7mQ#;Yw~u_ zY`hU_itb1F}U6B-S3(HGs^DFyuXMt8a0G)Tw8QIZV5w67HRz#JgyKoA4i{HQq%Gvus?$ z_G1#?is)0(zpuUxHehGBm#1ZR&D0of-MYmBjqjS@4!)Jx2f~wQ&U9Bb#2pzNQy%tZ zExqX2k)0D(Kf&*-0qMvA#Xpkwma*gNL zGS3YXk5W!b7%||hv0A3Hd~RyYvNjE@h_vyqo^;SZu&t?yb=5u0JVAHlQN|-LYSjU} zs3B@d4PsGey`%HA(^<{h#pJ)`7Tm*mj2HD)bt5`=IM9Gk!((kkwjymi)uKOLHvJK; z4Ayr5T_ao?>k|{n{Do8T9^nPx)kIz!UUHJpKQ1|FmCsG9nqR3VT4}6s-J<29RhBp6 zAsL&|%ao!Px0}>nl8d2GP$dh|*6rS9(CVaX9|}*CUHd>qI z7cR5fH7<+vQeHZBa5!dxazGEfz2za6A#ik92C;+cBGrvyN!@w!a*q+R#OCey=-(E% z^(X$C1-+9O^qLp>V|c9(7XD0FYdM6dh+RHWHlHg_nZwW&*>`wwnqi>#&@vo zEV8X&O<>-kjc+pwW3O*%2WIBU4~b?up6u@Icq34X$GK=ROvcsad2U}13tDP(E-n%CXS`788ZAX^RKM)oD9`pHew~2 zB^Yq>qBY;yBsDUgkv8fjPUN1)$w<}PBSvQIEb>-L9G95ayBw3XqfAI}cdx^Cxv4Ja z>(bGprKiqOPY_$AENEr8ZW|@mLF0aYLHU%8%6Kijia9lbgp%4Zs<`rk8#$^<;})~-Z49}-4SIKADl|4Amy z3J_^t^!tL&Mc=Cl*eVL`n}GFbPcEVJwTJs;KVK})YJ~sLLh)6Fu-oxKVbr7Mray)< zaP|V47fEgdpjeaJXQP@zk^$b{>;)p%WvWz-0_9NjYwNhebfzn^4|Q>4sh{${4GMN; zC|EMI&D7X5T&i1g?#yPOCWu+z4M6kfJ17qXo)xNKaL(U-)UFxZZ~fi#nO1!E;w{@c zzU|VdvcEQLzb1yZOXgHG+_md?+O6wr3p_g3|2`@I8&e4$oQ7&$_A0m{HhW--CP)Y% zdcRT7y7M0Y6)$EA2DS?7h`{3JHJExd`cnuuyLYE&KM1%sldC6Q(ff3BY4~1Nk1T?a z@h0He1yNV{)1?j2aQKyx4Z~qoj1aPL^RMcF*{2Q7Ahqf z{~=1jGP{V8)H)6;Fu#+j58@cPZS+&WdXAL%(#H!NIHfwzlkkp{o^i_U>+hk1%?POo!8~X%dfw?~W zxM}&d?_JZkr_g?yA$nB22A8Q8 z%eZR+p8dLl9K4Y86^MXVia zPcMlayKh5nV`H<4sj`k=<#D_#D;vl*`>1OBM2kaK<5&7Tn;yE% zy_y1zfJ8mK!J;&87!EeT+0+4e7s~X- ziF%($zz8=`kyH$1V>4*g2Iyd#yk8q>@3i;NJcChUF0ok}Qab(JboPs|&(R z-VS_M2ncNUM*DNbR2(8?I6?<_=QgjSKBAZ8nr@-KE<}x<$!S|CwQCA{avZR|3`!<% zO%1h|e~`Mk>77Eh6x;_QfFUW+PcwO*u>IlSyXl?A_=bQ8?*;|M9Sk!!K0e-5a|M7# zjMfk13PB4h9Hg6mV!{9+gUSs|2MXKbU+?6qfY9TuXK6A6GqW@%-UCxZw$kpqvAXbI z>A@bLbM-5(VBpsXsU#WPju_t-EDZt5KKC^*aSsFvy*=!8ATbF9tAxLrlzB@Fd@?d7 zaA9kYngGNo6jH)}TGyo8 zViYd!aXBYuHC4^K=EjGVmC1w;_eedZPv9I=^&I5g+1ZL{+l>86-zG6n{kjj|ctD+N zTX#{ZGxz?}T8hZceah3WJtK9qz{Q(9QB6%6VapOF%$7Y^cE6;}bJ#UZI8TAOP^K)z zLgJlVPQP_O!0hVL$wD5YZQgro@?Z1mY8~!2o|ZfQDB?C*n;LJpeWvva9O(p?H)4>5 zSnO9$;9rryTcY})y~fc5{vdfUM|Q3;!oZ2v-$J*Ndj zjo;6qZj7i=GV(Q%W)SiY(+G``ekXedJ2}V5Yao5I4JgT7#rn@;$=-oR3}Jg3`AAL_xsm2MvkMyg|GQtHQnC5XB1#4Wvj6; zNF}Wz9?Sh(%xSqMPk6kDNO&bIX6Ad8|>t&RnJGPzd-+o7rqTwlpv)I ziejhUyB~$Eb84m17~Z?#vKTbOm;$7Y0HlP=v5`JXQKtc(ujYG5(aFcN9w7T!Y<6GB zI-9e6lv7kfDwvG@@(B^6vr3z{EI;w4DWv%-7MKnfA02Q+J0Z3obi0X8&>ZP^n1D8x zR+FW^ym93bj$=AXtww8?Xh$fe+%ivZ3i3N8|6KYKi3Ex*RHkb59Td;?8Mie$_ulLS zKzO?^gIS|$^&sI?#M7Rz*Dq2Uh9!8uoh?c`G#O-KpY5fF*<$`d>?rARIZf}r(Hece z*y%@b5`FiC z&lYP^SWx%Yu(+uBd4jJ-@*xpIeLa3EA|A5AH{#6Q)NbRjlJVHe+lKkg6|tx1eBYnL zwGkGUwMbaXBqEwCH%Y&P^M%O;b%Ka*mtgzptjcipAxS@lRQ2{NC(Z@A$Ud*7BhkmD zcJ|vai9J zxk+nQvtNv+Wb@N&jiQAOON|}7-=TGzVK%NBGj?@#EdzZIYtDZX^l2U!wyE#$y2<1Q za*QzjlHyCtj=`orMGO(q3f0S?%HaYE$+?lL3Zye_(DUmc(HRj4)wB9&$jaSO1ty6$5z9DPdnm_e zy@JDS!2W1%i^T|6-v_1$9K9m%)2=4&BA;G_3f?mM?jRA4*1G52R7eq9-+nd68`0ED zulH0^d>Ofvpb^_o8?&(+Z;j`E;I7gGEP!<7*ucifX>|C7>r!MH)wzN>Fkh>r*`crZ z$*?^8+t78co)9bXY+(qFj<&YG%hB}YXp!Il9p?P-s>gxp$12Fe8vqENhK45u_%L@d zQasF<&k5EDV;JW$?oCTHbf2~X&9mV|18IF4@MW8?QW>?tsca^@I#gksqgYUuEfvd; zf8|R0e|w!#nNNDsUTa+cRj3mehk%(f#^PuS96Zg6&19U3b|7X=LmSo~^TIvm`Z-e4 zMJ}H*QAH3Z4Cm<(Vn$t^y9cRBnzQa#32&I}uOpcs6VNRhr>SI@Hxrdf(}iZuFPw{X z5p6gHSY+VJ{8g~rcoN7iT6j@PZ$~%mAuiKuDX2>=R?iH%7h6kLH6P zjurd(WzXNu9o#rha~8NOdPo}W*M@V9av1&5r=*k%=lP2l$@hFNB?!eVSFTBdx~t*B zNdjGUSY7GWCrfsO_u0hDT9;l@=mLfD__R5*@4m)g1u3=)-sI(<&GD~Y(_e=(hwyPu zMW2Aj(BB`=Ef5=)-vn)ocViq1rcMr;0>zNUb$kbSgeJtCYuxUq2@7ASRxRDH)c=sm z6xFF_;vq}GhTzRY5(nZiq5A#9yVRf%ZB zr))wkY$efFfMU@Mh2-foL8}-R->Zx6%N(_NoS|ElPO>t#CYvheJZw|t*-x+gs@HM> z3M`W=Bk^3uFc`2w&)Z*K{YEdFVy9feo`@hQ-GiFE(UHmN1}GEWl+W0!VmQ7zM2>9t zOC&Pl@7WP=KWUatQ%}o=E5^vcCvo3pHUHs`Vdacv0!Mq7i$Gy75lK>2$s?Qy9=h~4 zda`Qrn&n5=2_>{pAS(@&sy-C7{R(HI8;9oH*`3#&uV1%%_|FEp3(iF$Sbm>?m@b%8 zJyaRSk2J1Yc&+nOGW++B^S@VDspFn!2<&{je(KB_Ry9>IF>lx|+m-8=EQ2P!_2lI? zH5XUEY}Ph%hk!vvzToYDk*pL17hm_$^Yeew|JE=4H@A8$8hc*6TM7Ix@%XnM7n_oE zbE_ObbD130!qoTL9k=&<|JkP%r`F+%;ps1Qt)IT05X+G62Ll5Q%NH1ZEtNA@YZ^Mn zkB3@wkF_t^?Q7-*6pqMY;ha~dy5&AE|M&DR%k*;-4KD=z8+FpZ`5KTutI!>+o^)hI zDNF;te0PbVq}|H#;B~&bD_n7ClB4L>AE?L$}q|a z408W$mD`fj3gubivs2YePnWs;iC zGkyp6mkbRo0 zUN#Ha=))YTipUyKIn>xu!W&;Zo+X7qrYWSfFyqsE7a;7AOj4#sJDFdp_7wS79T0g-kB@oXH$l` zOtko=^D$g+*&8jPD=e1J>y)L-EDXY>UpuTzvCN87tGG8Ok32GBkYfHM@zAA}d%b{6 zw=w4FVLeY<6_cSvc1WDt;}#0c<%8i(fKtq5hQ@Z%X^RQU)Kus3fKZGa`0Or6de7bJ z9i3|RSZH=AJJxx1olSww`(UW&QN_U_$%v`LS+#e$*9Ptsg<#FAEW4bi>@!m_$6 z0t1>TAHM70veCWZI4)bLTa_%kzx{nFZf;^ZmF!5?4)l9s!;R>v*z3huor8D>44wTf zgEfA1Njr6Kn+~&bxn;2`is*U+T%u2?^ca$*$4xYxu502js_9&MoW9tu_7p2+XDi9B zrq>srxQc(18Svk~1z2OJ#ayt38kZgu5X&T7&kdDtbY&F)N+e<5VuFraE zz?kx-Mxa&|!YfuAp&nbbCmar_`cmw543-U~kVdF@^gVr587E%XkcAW}3tVE7?c8Bq z_U4 z^B?sRA_%bFY$YeBsM8yr#8Q8cx{qMT+{BRoPT}E&f?=Elc&*N@%7U{l4LBi$0Obf% z3j^h7%pRLkBEB|gh)_EAb9K^r+^CQk48c3lh*tDn5csc%vXW|Eu;eUEW8k|!OoHz` z-f1tRRh|8k%V_u>@PxU#Hx~6q13_PBV4asC_aTd}a(i&}(m)XxnDsm%BkSrRp&|xu z!);-fUF6Cz^jHANk~vk)obES4WL*7<#wknuuKsRN^LVmQWHc?t25xyb*5+%G!SKus zo31mi!q{5x(a34AdMpkX#<@s%mX=CMVmz<+9v|6gmg)@*NTnWapZW2PfXZt1&E3h! zW^UArvG*-Bit@Kw0)9buVNDY6zk8m_g?cjkK+L!P4bzTCbL8|0@E^OUgAbZ+v0M{yo!F4l+Z>9EAw*4MJ@HfTD# z>Yy)cmba_;7o`#MpU)0gG-L=GjGXFoM*QAoV(jp11>P1-dez&>Lsp^FFR%KK$ehEP ztMZP&?vQ7Zr}mltU+@+al1n;y@)hfxx}d{pNswk8Uy^-b)@C>i#1EmE6DYn1zr5C5n9B_LhW226?ZoPzu)$|n$t9@ zB;hU&mJw(Is?6_|Iu&eKs)pqts)q|_mA3ca>-Imhi(KF;7MFjJJK|bm*pjA17`(V9ZP*ksROWo*BW)IvDnGq80 zt|zuzER4GJ*l(N=781!JwU`~3FDvyXq`PX<#xfte)gNp1mboqVQw2$KPSg)4zOs*2iqD zX$kchccU!y*OlU(80>RuU^O`q+A3rjbzAXpisTDek#>|Th7WW$WV!afY;jScJamPR zh9M@MiRYem4mscDsAq+K3Qx|}oetQlr-qC9;{ghmtYztmXFBZ}juKwI=#JrTz+}Ls zFh5P<(uqG`I30PLPDG_jiGM!tn(dCIhDWmNTEnSS8$mqv*8^SVi*NFxPp`Uk(hsif zeNoYSd+}pI+SrWF?z;cEoR)LJRo}m`mAz%9?E&wUd8Cu|^Ys0@))~3W=(%_wR6S=OV+Ts4zq^jMME)oLn}v%ocTWM(;r6rRZ?`?( z0C7df!5tXTo7-l)uTYSS@CPc}$tzK*mk(~Fw#aqEsd*%LO;O^PHd}jDO6Z{+Z;qk| zZcwo8pnWZ^Hz-4hL5bf5fEm2L_v#!6>(M8F(TdzQ7nTwB>s zbba;{SJwL;e`H}xYq^%>x|;NPYn+TWw91cRXZ_yFs`tQ5bJ>k!K^mFcJyT@`lT?;f zF$Uceb*Lw~)C z0hOL1-)>P|rr+;RJ1-+oB&l@q^n_=9L+0ynu_@k99^D^Gp9b~1812WIn=@;b+Yx|13C8TE^uxs=x#wH~hSD`#-ky*Q#t z{ps2PPN_wXTaTH)c7O@Ki@!4GL95QK8wcrwy&@5*UsMULCOw@x8Tx&NCdjw~Yk3ri zCn3P5Be;@D3*dnNS+IY7$!~h!WsXFxhO}pTW!kBYFwsrN@zn21g>FHCY!U< za5V<1uP7Vgw36QzoIgb)5o;C9eL>Mot=`{0D(Xf;@t&j8=6GV8r5JTso_6VjP^+>d zWIBuVq6zi`3jQs8G2ZqwgkfwO&e9K>?@{%f3$=$ezK0 z+orFYQMLwc;!6|s_q!7?-?nJ-=qV26>1fte8;a)M?WhPp7GNr!T~NNZqMF)0*^`#N zp>n9GprM~a*Fb){%i7ebs^&oh-Ht+qDRXeAYes{T4p+8JR`}<0oRT<%G#Nc}J|ct~ zrgCzWMG7w@y+bar?8TF?Wp?sWcLdRr`;RqVB~aqma5W9juSk9}SKzYc9A>I2Vdr|7 zxN9#@bk{!Ldf&`ueGTk1vt4hy#mwiEWrfvFn~5Q-&gqIvZPT(Xl*!$s&iBYDDCS@H zweKZA7G!L?`}@QwCD-AOB8s$_&p7UFVaHkzBwM+;Sz;bKa@-HWi>*#|CW-{nF&lrq zh60F5QUFrs3(%WO7cN|oiMw;mV4!zP^ip=k73fJyM^c>ai&p=Lf&NZ#P_kp6oqh46 zyME#sIyQ{p8vU0nb*>lQ-hs_gToGhi-DXf3xwNy~(g@A|GrcJbrtVs|K2|uob68m) z6F%0HyHxGQUlK28pQ>6=nV&VJF=y5#OFp%b@|kowY`{V8<|3(=M$lUd{19BlmcD}I z%*obVU$KH`g6W&>!T7IA>lCvYg38hd0t!{u?N$qePQ?%;_hp?k49upQ_f;A;Pstxi zIQPn>a{S>9+%cxhEoLQGV$JM$Qo?LA-s|PKD7Or zatOmCPln@aMp^2Dg?$25EQQu4U6&pPF`RMuT6M3lQ%_+8dXH9bXi!(F-nNndnx!E9 z=4(v(PS9DbIHOlAvdNf%^nqFWUsvC5M+c^jr5UZg@Ts6`ktCz3no~*dF_jAo4Wy}} z_<9vr@o8iFa?NN@QH-CU#w>#wgG-aXQgC5V>#-=?bvXFU;;j=aQEh8 zX;5xZ1~9;-+mi=SzQNY;XPuUMKn4!i09jzb^g{84zvE(eHCidaNh47O)I8QfIb&35 zEjV-auy}Mpa1G(GC6C|to4|TW$T+^~HSSKYP!|8JZ(hdZoFcSwHw4o_e`R3KZXhGk zMaUqWB=kx5@gkx#+$y~^aXgr{&$S`H3MU|XV?{OY@%;jk68|wBch(iS8En^im+O0Z z(5_C2o=wvRi?AKkVdbKS1=5Piy*T4cG!?3Rp{B;Y3u9Jz zT>*lnJAD`W^1sVZPInvehGF(&bd^C%29vhUMGtec8~=Q#Xs%~$B_>1;z@ z&3JM$rV~EXS5(|5(p@yKNUq!Q4kT(gnI|y(v9laQoYb{$vd$#kQo^E>zq;isHgich zIH6-?YSrS>R_UZiU%K1k$J3PoV012R@ApPOhz{vLGx(3YJ50sh(+^N0W*OWS!t-0+OIn zr3KY|oz!xRL6nHCL06fK^0l1Uay>k5*O`J!|3zm%TJd`6=BhMVg6zbj&F&Ud+o8wliDCgGH^3;1S7O=t#Rdlq)xv zrY5=9XB#@(AGV)vfTu?Obyhj7$Vy^rA@=dzJ3QU@?iRFAYf_{jFxLu7^P1T^F8A|RToaS~AK>*W zbZ4HCk(blA_h!AZH8aMNyS`yMuzu$g$M@4br!Phkc4=RoYKcpBOgcf*^0l_d zlJN09YQs!t^0VI9m()Y4?PsydlC74K)&(2FWym{?<`=Uh8{sGrPPLeNwDK@J6z47Q zOC*yCEUPJlYUBP@-A4`92X};x7G`3*p}F_(*U-POFlYh5!!(pEAFQ+k%;E@%7T(YI z_t1U;w8o3)&;6jpLb=Q)Q&!X-I&ih25Rln^NjnuPS!FG+)v;jS#XU_ECExbIw~Fp| z65plPE-7Vs9Aa#L)wk@dOv&%%Bl>#;dOPMRUu9wx4ic;kl)5xHr-lp`W+IK@b6C)2YUE48L`cQOdm9c#4W!AKXucWl*- zrTS&+8)aK6HAX?xr`2Qp=NPs_9kS$N^Bg29mA6YGOIC_ZG**G6o9{W!Dwl{8BylXb zYgRjV1U2_0Bm0%+=-04I5Xzle^6&iQosDyjeCtb!l_H#&I=F_FPP_ilbuRQ;;BMxH z@^>;XqPnK(BAwlL1^*_8gBg&m13bQ02G_@U@7H#1mCp3$J0`W;^=)7J z{@Ag|g`an8k*7q9;9Sfju?GA5{IMz5P}>oxDhk=HB<^vKZoP(z@j}6PCSf5lv6Z^n zEv5a1(%IMak52x5w*7K^F5tLBm2^F5)-ypSk6ld?^f7cmcCOGYo^3|x-*S5Y%YOJJ zLM1=-6 zJ+x;huDF9=XwaN*_x@C>>Z&Oe38@oHy?IyWV_bwqS5#j1iuL&B38OEQ#qy^fkJ89L0gANW@RhH3-lV=|q>iijIUsDPJYws-;p(Hr zxi|Q}Dm723mG;XQEOpL>d`csjBfZXUJkn3s|5f&G#TB_PB`n!`W=^hGmG=wE3-4## zc4C++D12sDWsLVCd+tkdV6#2c-dJRpj4gttJH;um%`yofS0J*R1`nmV25Y+G{(cJG z6pw}O`jm{0YG3c`PB-=Y`1`m0r@0zc!6;}^H_I-=$^M0iS7KVAsE3Opuu9O2 z!OsJArn;O5HHd90WU_u_hj~Q1#0`fnNjr-FZS1$U$_Eo2xc#bSsVNj@Gy^It!6#fo zb&3M%bkZAU9*k&EfFM%V9;t@MU@6N+AsmOJo0Yd`)zmWeyJO>xL-W)nG&V%FzQrXz z$o!O)Ecd1>bI#Og`#MkE9YMm$^J*1uUPRB$ew&*RGqYxYXllsDn$<3r$D7xHvCenN znyx!2r=;eN$Jw&P4BW`xf=i?SCWgq<$%0@rjnI@*PizT3$#n5K_ZIZ{0 z{n%NPXz?Ba{#u81jBT@BwrB7 zUHqs9h<2QNWQc!6=am~yUc#ujyUXlWV_Xo0Xg+KI%|tl{MRneDtEq>N5{jmNYkh_3 zfpaF9E7SeMnHKE+=apIZ7xWG#c4~`H-3S?*&k9KF${D^(Kha2Q#9thr2wsPQjUKLQ zu~XAaYdi6qIH8BOwzoD^_OGg6o_FF^u2f%7yiBbsqc{tq9fBv6xVFW9cYqzL{KvPDc$jsc(0Iu1PKBanuTm&^83CJ1C zfe}B1i%)lUv_HYSVG)zAV=Z0yH8Y<@){eb#NWRe*;piz|A)LcRb&Knt@F-&so8A#L z5V(=nsgyTptOE;e>HfChD25Tub~aacU8#Ci9mN>_cV+pAiuTUC|z=hMVU)r^00rs0qR>)c-~ z08N_4Iqz=0;MP*-ZwcDFU-U5(2b!Cn{`4l$U&S8o7*~c`7g~`irqEY={v3%EzUV*y z}G>jhMT9UB?94A2WW`02~d+Q z(e#e8_ON#}y(Wcb?Ui`jtWz|aX^+LuZa8F>QUkX8jC(qJR>Jut-ZaV~3#!KC=rW7g zy&dE3oPb$so#>6HH(%r)Il8^MseJnh?&&Ylm;g7I7jnI16k42&n=L8n#pS}|MYVk> zakGfOHirG)Z>^wTJeHhLei*+2M5k$*KA-L{{>S6~_OHNralkO}aX)C|m`c@t`}1$~ zP<{ah58}fCV~fjq6;YYe*H6h%Eow$_oYmJr#Jk41+7TU`Ix2*FlwTG=HG0=gCMB4!M=R%ut>V|N;D1N1_i=?Up_s27gLwL`4r9UUCDEzXc@-8EeB!| zEJEFI0(@Zfhg`OsIvV6dtss+W;@*~YWzA&tR>`XGPt`5fu;1!AxSywt-NXDSmXg2a*CtkV z-n{YZ$zOaxG}~AG1oOp<7l_Kj=4gNXY*Aknol zYF;z?N9*XbdU_J3&@g2M>I6RHHGDCG)>0@{qeE^8z)I@qukIL#iFrpt@SCRCLiR2m zIC4we7Zs7-{Qk?aytNz_Te0W)Y{d-aQ!W9Jr_pMhC1gLi`0zFpXNryB+=eBO>>r$< zN7aps%sQ#_g*Yy=&)rc0*NJ}{++*8Sx%Hf&kmrN4-Th5%544YpzBS#7jzPOnJ*YZ~ zc?uKLNbw^j7VG_%zC{B#(+8~HTKxL8z!ZQt`UGMEArRO7t$}r-?5|KPt zkZY?G;*%F1j^hXMKAaEG8*~thGrddF?65G(+q9N826D1bkvm3iMn8Swj*6rnG2($^ zVr&b-#lkeDzZHh?Q~k@HuM5Xoy*zxdE!V|@+Lckzoy~=o%DmgqJ97t7Tm`uB4W4H{ z2aF}+DEirAG54LG2O$>QN5z&ux5HsI0;vaI5Sd6fw?C5glymO8Bew?-G<;t<-;A$T zU>GD8!N#y^tIwofdKuuo!4$4Ltv$3AT548S`HC4&?jp11gPqc1rV-69u*Y3UKagW` zw6JbL`N`$$!hGJ=-LJ_|pHcz@uy90sPT79#lttVvZBKsxcQFrim(=>->cUC)rtbW2 zKm4cwhSx{`t&s7Og|%WTw2zHu&%g*>C3ybwr9apRai8-XT83-Dw-SZ^phS?TN!n`v zxd{GgDG09Nj8ck)cOOMttXanpQ~=O15`exZA(`*EZi*B!IBlVlVWoVohOSb1%dgO! zbYt35gvz~*V=PQ73Wiu=IAk_md;i!h6Y*EL-9^IXLdU7MR6Q5zi|!>wC!g<^t$4Fg zBKh(NOt9Yo<_n@-DW~|B?12(f7=qM#wciiH9~i46@nI(@0|ElXR~s>kKA-x1o)#XC zn=-aCWdV#vu3;x#yCS`EZUWLR4&YW(hvQ@i{u&rFGh9g9Q!CM!Rk0O2{v79Z?2c4f zL6?n@qxPWltrl*+v$4o*H7T_yM`;22Ki1uLOo{^2U z0sTeS?ORDMn-0BneTx%(41tZ(#IsYRou*off{4zRpE~9XVc1aZ*589q)2ZO>beygZso6m`#GYY=Uxc@t-_5QNNU7(8zY_w@Zm#KLQqgv*&>cHf1dJm-N*`GL$)P8kUB; zEqw}ghnR+#W;OLM2Jn(l2WyKOsy5t$q;Z02=N4@;H-gvbVe|`4prDyejU>WM%-hvD z0LieBfgB#k0@r4i-*^7}@V~rrkGyLB{S#gfvH&os@DM zphe$@!yFidSIB^!NvGBu#B4n!hiF>@py^YP!SPzt-u(KU3ZRsOHs)8M*nDR6j@l}@cCIT1azSdQFAXN;dmoJBVGrwLDu%WN7vfC2t`__q#$ zJNHE>UM9DXEBQSp2=>}-OuGCL*rNz)q+JoDm{V?;4XS}WpW(l6_&+eHV%I)Q&w8yd zE@J#*AajL=p>YRX{G{R=+u^K636P#DbTbUO!hCjTb0UT`|K;Zh_LiK1zH{HdeJeK+ z&NvE>bB$_2XaZxYA;3(?&DAY+PbDfXF#QUT>T0K99HNf~kNY9v!+$?6QdYs>{!y!S zKs%z4q85E3{@SlUzGtsG3_TvXz|sVUsxK`zkd9N8-o{zY_4oYOemB5c0pbY-A&q#7 zl?sCono%^*u72pta|HxD;`{9|mUtQ0YFLx#Zq0|5?v{>%A5NQ{2;~cY14(I1 zvVU4SWIGC-yhchB6&WcOYlU;}U=JW1bBbjGe3d#tjoo#YeiL@;%$dv31a5%}Y51(> z$$Q|CfxSf}LqD9p62%o`Irnp~SC<{0E14iiVjNF$hq^=$4^K}~kW|$HJ~LxeJnK!6 zR!iqB$btt?tsQg$dD$Yq+ZiW*EOUtW$~p9(IbE}O6UeA=C2uZuc9zs8Si!bPlxG5Y zss$qVJ5S)To$t*~Gn~yh0KCS1DfV$((;3XfCYn}cIiWeke_N`$KExwO^s9Rcj6w{a zLlF%Clf6)T|8CdXa8mdU0FBSdP5AXq(UB>%`L4so+}qn*YUY}+Gs>4<{ajFf0AQP4YHB zU{!Y}4_b{`cq6A-t{CNY+FQ1!lFq#1vH5ed{D;syjGvQauUf73_Ic~QzVghPfdk9i zXxyPwza9!ME?>CiDr>Bg3i>o6z*S5D`A>s%j(;gm#yBj7o8mk-W6j=l7rneQSMEME zp5_8>HWgH!+q{lmwP96XYr+(BQva8|xSDaL}Fh$z@%veQ?0UDtk9 zJm)4%(C|LiW89;S`S0c%H(Vuy!Migm9c@wMA9Qd@I>R6*mluW9yi=B8L3Z6buI{GyUI%!BFf?*0Ql4L}Grl@1Wz zO@P|bqAeNM22@|sr}W9P7%L2>^wRByd43WMG9*B#;J?#R>vj-~Mp&AZYuK zsk})y{QXT1zF_xVSG1M06wd$dF_unOhB6|#7h<{#r{)r1RvMt;Z?28oZ~^2qttY<1 zfpVVPPO6B9ixfMsS;9H%6|!P-wkPpX-1#2)jw2fO=1#UfE_FM54^{~3GBIBS-x*L{ z21C-3rd}p==w&<=%G0{03T_9VP2}g+@IeJtS(TxSPR8sAi-}=RW*#`4_{8%EV>1MspKSUduI!<>) z58=+8rz?}KHHluv1EuoFsh*x)Y2iR#uwI`6QW+g79ICxA*F-jqFOj)k*vBl=GE2-W zKIyDJez!a(%jfiASUmo~d)14J=CKSaU;AuP_1pQgd+XK%t-81{$BU=y+t5A<`d)B1 zCO~8eGgJyhKweR6YRbjMMJ82-3I&zvse4wxJrn=hK+LDjwI!W&Eq^WOi#~~sgX0hW zuc(qzs3@_Rm{=gx64!@bfB2y%cI@>f!KthfI2l8pK0Q3JHluI8#+&yrQ|*UhJLUSZ zjm_TLF4Muh3+n?kwoly-{aDh2m0J7Jt+O)%PxP|By~iZ^F*LvI&>tf(M+ibCO{TH( zuJy)+*^Y|!#=jjHWM2+mApqFK(G%o>NCtPMt%K?Dfa83HOqq?zf9>eA$Ii|^g7D<} zIT2DcdyTD~R}FpM)QFOsT!vC>Vvy6~M`9$U38`UAyJ%t!yLaYd;1M71;~5BzjGRG< zTJZe2hh(svoOfk>W${h#Xi9R7o^c?V5jY&|$(Xe5>J(KpUzmAwh!G&Mps7cT|5#-hcV2%%`Os`+Fv$!%m?i z7woe6A*li4#%)B{vki2h-$w)a+W=qQt-28dA95bUo4SBqdo~+wJX+<-o!V6JWA!oP zY#2WMe&sTiP~5Fp(@z{X1u2V;T~_h8GOO>d<$bDNl!uE*DZ154{noZv#JOE^eFSlc zgwr!+7WAS2`_O~~#Kj#J76%B=z^%Z$l~Ir&^oK%%zO{!A1pk(4Lei*CPEL1rrO-D@ zbs5%6A_h9}a)Vmq1`DGB<$!dNC%nsaHw|v?fCuQgHf_z2(Eq5VU$5W+OyCID*fj6lT-fZE%LXg#2qK656$p@0ADTWyIKsJ?4XooKw6=)lR};t>Pc!>?k|y)mZJlU>Yg-eMF}^W^$KgQ!H|s2v z-vhU@VxE%!>l^&C;WP4hHrD6e6tBr`x6KpW%e@{8PxshPRUtSOoJge)~8EDmsBDFWoCHUjQTCc*&RhB4{bsS!E#z@&VhS%)WVW zOgl{CLAUNsrN(j?2<7zpd|OC8wA9aaNPBpCcMPfxP2RQJM5RCu{QL!ibSNX!7H&8> zt@j#R+r#bS@ap{ZcX|sh`mAsliD~&?oPV@Qb}RhDy{(tA;~>nf{oNl+fSiZUs4L^T zb0Y)|aW1WCz})(;1Ns_$EN0@WK%(ziDYH2YU~MxZhf$G#AVL4 z;E|i>PV$4>@$HlrE3qsTt0M5aQLG>N2dKm>nRPF>29oQ0`d5y>b(tw&xeb2mxuGs| zf`Q0u?p|Mq#CbG(hc;f|FN~_VBT5@^`8$SO(apbwX8$%QZ>NQY@n4x%bh`%!1~gVW zo`L)#aAF@Fy9`Rw&p><_7?X`w(aL$cDCnu_KnQ>)EmM$S%~J{8R6qG#(wm)C4NC~x zwOWa2c40LntS;k?y;~g6X?TAu*Ry&lmH1(*yMU&S91J|Hm94LuzNznWkeTy2MYSH z2tEg&E@g=8Xg zjk*~JfG0Yo)3=?_{RY;cgSfIri|d3o$8}=!Td{VpPf5IzsEoQQC_xbj1X;%0dOXy# z8pVo8E*`F7M6A^EWi6SpVPu#H%4`U?YS;HdEAV09Yg`Unb!$aI!g|hc{I? z;0ns8so{vG<~Pi|wvZC_)A}}wqTN?E_FJJ24k?Rd)}50w*cW(6!u*{t*J)Ws`avNm z!kepCYvFnDF0Efcng(A$?fA;m>xaB?T;O2Qhy1%|`+*TPW&w_Ay}ZLDJqIXnA4( zanM#vyMJD*fjA(A27RKSp#*Xsq7dRDY2h&skW)`*wp+Mg0%X^5HH4H2%!=cXulV60 zXFzI?GhI8Zn+#Ju!X{+gTD9b1S_j7||5Kx2WwmEKYZ7a`nnnw-9_n5B@#Gtoh*N)DB2r-$Khd`YmHY!KV(c6*-%6Xd`=`6-ow43Bb)- zUlSn_k*;D$;YF^sd#O?aIGBT1uQ_hiGA}`M|NXtkrkc7|GYrbPdq$h%q&XbLur7inLtMID=+7ei_zkA%15zr=?M0Wzct* zF0wKKwNaTYH4gB}ElV9FevbP;U%6)x+>dcoNMWW%^MMDMuEG6h7@un;T#>}ePVc~w%&(fxT`VV7cQ(@$sX(|7wu%*+9jr%QV7&_6wxtuGH!TK zT6@vsaeI{IV}6a(Lb;RF_tIS%Az9X~ak3vho%PdtlM|S0e+SJ9ayxtI5wzF($lQ3C*t#IiG_-U!HmNJ*+i(uv9fM2wBN>pQkGmEIGPPKM2 zJ8xMb*!vVWRG>_$m4N|-Xbq_Y-$j`!v=u{w2whzElsR}TFAcMS;ful@}d|u@8 zx|4;yvAor5tYq+Z!h@zy-;D4EtnznCjb5$9e37kGT~Ca^jq>G>K7~Z<9ljbRXRM_^ zIo}YFE6&#t78ChmOs5jcZyoaJmhLnU+`cF+(YUwFfcIiU&S93D*Z5q!zpma_`GcW zNmc*Dy`MUEjlL;{PxBc*+0;@K%z{Lz_4E}0t&2w?#h~ImU7S*miQEdum#_n_3X`iI zAr^qBBEI{(pUb60fiMxMZ>BX+OAcd@a@hOIq}`N}$&3oKO?Vi;oxp$J{WIh1-st;y zB~dH&H%TaXMZTT>CNs?euHyc&GqiFmuGE}@r2A^r-zQ%A!wq#fkKEu>1zJNb)67R5 z7yL*MdkcK++}+&VQazNIwpZfnWEUkY3^W$G8d%wdpy)BQk*7 z_!^4)Gj*rXM&;-D{Pn5`Cv@P%e3ut93A!b)%S5QukY11hLi+I1IZ&%)g8sc==j}CN z*s6DDU$xQmIIMgzvM{P>o!`821^mf*Y z%ZMzz6DR;S2<cs zfzr?Oa9n)64oFBBQsfnpojpqfUa5bQctkjv03Z4~`fHs2`d&2^qDMnaH~anj_qP7y z=r?Tck+cM-PF)0msvohYQ|lP%*AmNQ5W8yt7gZZbtIwA4NSHt543NDl3J9=H78bfF zr9$j^#1|)JUxLqNEp(i9T0T8nIYwCrnhwV*lLkgt^^zNEAH;|TS#(-?8t+&}l@|`{ z4A`6_s7uGh*uyx*yTxKZiz-SKTO?3_7Fv9^sqm}a>{gt|OM|}#jQH%v=4SnDLZ7n4 zE$F^JZTb7-uw0bi?0ZHRU1t#ySDU60{=sX;;@Mx94giZab9hH38XSmE#wi3%OJe_Z z(el!*mE0D&U(cs6{c#uie=Czx4;RrCdS6pBkQ)PHagUgRZ%)E$7|7V*%eO~U>r2sX zVk>w%mo-H(`|{=Rq3J~SqpR4(w}(HERl)A-GNoG`nq2QP)m5C=zZ{QBBcO?XB+wb_4HjQ2Kdcb!_M8rB|NXTvH+0pRbqUNHClN>4?WKy&PPv4g2L~ zDX%c9s0-pU7RZu3rR5MFKM z1zKfup1j19%l~WOa%HM( zYpLmz^-TZT!^jC_&OZ#*l1N!}eF#&`q4@rGR;ZaIx~fD8eO3X`5>VPa&~VrNFWgwRn|&d>Tq991G{DYQZJ z9<64YK<|YlU*A1vC7)=HtHjyreyZ2m6A|!M`?+HE3MU5Iz$!nKeIzQ>FOYKEXPQdi{DsJT1f0>lSyQTAW3hF+TPr1H1XOaew;8p^ZrE@?!$v}`y5hk{HXIA32(L0hY`&@QsQF4^|MY( zG*2$*G(t~~W||Zqi7Rb=ON%6(V%Ak?V96)Fjnwy{O)PT7^7Bi-Af#pT()PDJ3x>}> zuG;?k*&3#%^J7~rntt&}NSQg5rcYqqIaTZ`NlXZg|-Qa6)@00T?)c7BVfmP}lVo7r@h+>f3C zV%*oDFCYv+M75GTS!dIY3+IL|drFW6S}HaRjbPrAd1H0gz($cCy4yC5D+CGCvgA9? zsnhoC4w~!Cdf%n|Ub*Fc(J*FrHo?1Kj*nWZcQ@(tZ|_gt6mf6n+ABEw8Gr|(;T(Sz zDc3@q?w@X4bzn8zh$B*-7LcB@+U;bbO~K1liO}#mLwiv?{KjiY*(Q_Lpchf1Px@a| zjP|`zb$5{UL{z9}{`mIon>HeqMbR00YN;Rgd|BmO)+Ahf}v8Z(OJAq z7>Xf3Yg|!W5fu_4SandznYnG`x1!wSSej>{j_TiVLA9o32VPYX$&*x27;LjYafI;d zw-ued<%*G&IFjf5=iEp8KJ8~LEEnA487kas>20d5;Mg@#xF8T~#fg7FkV}~f5s3lo zfoMaE7`Lsvncxc6LxN$(w7I)m5%%C^Ha0f(2%K<6Fv%eMM5WF{jW(lboBYrDcB4M* z{l0_yk@K%8r7cWEipNZ>Jy)-V+#ck#WsQ#DpGWSt^04@l6-pOljR61xsjWJwZA7l` zO(Qp5Wm7AZpe~>SU=S0oL31~ApEXSdf&W->W$NTYC_ij8=sA^Hc0h0nNJE^!Ca$o# z)O90DQv*2B^3^Kr<+Zfp$3B!igto1?aV0@|3jJ=)tpeAZ1J^XCT?8}Z9y`f4q*M65 zt{ZX@;$U6118`OiKgxstz0NrM{Mlz5dgXpwR73GR61(6s(i1do~B_tR7kMS0}hparERQR}Jyewkea*%o-Kr zKxX{sM*jJVvin#{l^AoGdl#fI=OU(K(Fh#BngPla*gr}XGF7O+nHIGzq7&oPtaR$q z)Xf=MP$@QlVDKgOR`BkULaB%OFZqD~T^!m32$De{5jNwN?PwSX@Xnr`85Ve@%z0won{)yuk9Jff;xZg{JguD#aL zXFk|nmfYf|80Q!!K+hN?D;87k42V@F-$+!SUj!1yn6lCH)u#)s_#VP~k!IP}yGR!L zNiyFhLk4AasEE6Zb%oTqD=_z2@lz!dp7pyW`-z2ZsE^}?j@CEwxpWv;${fa$G|DOGTU1(+_DEc0bB-yb74MPruEN$uzc7A_+>be4 zG1*m_yEguNA&<{W+|PZ@ZxA45^;@5evIskL6Zci1qr5X2Du&tT;M>f3;^)4;A-mh_ zjX+Y@Em8tzdVLIERSGYOD5ReIp@amaQbOLoKyNJh$00)52<4|GfD;r*%-f+IM)wFN zagZt`BAm>=cXw)_3Qc>o?lqDh?^A=yTYumKiO9(Kzi17!MJhf)BDD8$I?Md5oiE6T zaq`yPe+sebC#p{*-U-JrTCh`MCuiv1-TF8hwci}v9TP?8Qn}`M?$DtnBSwbibIoPD zU*_X56Ui8$TRXTAkJAv}(P+_VX|n~FwNHl5+1ZI@cSdV5ZIgCDoX?ai=Wev~_M;c2 zggOr13blFA`PAaFcPG6*OJa9(rAHEX)IDTABy*dsr+`cK?Spj{6xSN>G2hVXwTwfA zl$p_&3dWOK`l&LHu=;skS@CNpmY8Bx^x)W^$gI`r?9wUZRWwx#P9&`g5Y(K#v@Nld z$|aG0%Og#4PdoDR<=xYUS)H{hjBLCLpIS(1vl;AqP#oUlEnkz$nS+6|z@nhz5FIuD zN{m?W=;8B_m_ptAI5Z!_Z*aXiiY@%TT;IOtM>)*{x*zx%34|mh*mjAjiM&2q4XN?h zF#N-K|DV@pFEZSgD2j9(N&6aj;k;CM&^EO^>Yd2%j%m@YZYvBFJ7%^=2c|CmdGOn- zQG)G2bmAJomXCQ-xR`t0v$HEsp^#T8G^Pa)G7ze}ML`NHD!K{|g53M>FcGpN!dOPx z=N}>Gb5TQX2@tVP+9K;@=?lqc4(F=E&Ob!1E+F;pVq3W>J<7^V(LlZ`>dX!7A_kS4 zN|q+AU4H%SL=|a0NtG#6l~)E5ZpSkgPH${u)os%2jeQ<#mnr7=>sPOEPm!AR)&Y>s zQYVuai$ZdA`rDS3o$M8({Tv3Vt%;!!)h7|e4G-|DmK9s-QC`Uj0;rd%-(TU&2`!4w z?<#&f{ry#Gn5pdgqT2k0@CyU90g-v(2>*qyj+6dnX-LnIco6(%L!)GQumSe^*mQ_7 z#>kX(1smi`I-H`nD$W~5EvuDMQE)g*X@oC7c3PY|VY8kgkVoyrt@5M6>a2C#YSwX&lTRhS>LZd2t9* z1ZhnX2y2i@G?q`5Ey?PaFNqE;dUiGaiyq5e4{_qpno?TdwA!rq;a;OHDmgOc%S8RY zy<#uxWT=deV+OF{QYb2N!OSr4rn9exC%UXYTN;l=$rOGdOLcZAn4=z0U3)DY;~hY8 zqiebLU1kzy;`)98d;2xiaI98a+3J&1y&0Ym-Gx*!MftCCxxS`gccParn%Q@%gnYOE zRbiWv23oHw9lX&wc1F24*7wh3w-TJMLRk2;aFTYtL;tcn#^%`9u$tV7uckfLR-S4; zrJ;rC1B*pQRRmtv4BwARv>tyhL6T$Fi7D+YkI<}Ucyn)SkS~CPIV+vH{k~usH6Nt=46hwIX*mX5z9u$3x)8{S z(gmk#*;ahGto-B+%b?jOdjLVOCA7t7KZ$Pi}f25z?y0Js?0++(E@(9pA zjYUZ{0{5O0BqaRGt=D`WX`NJ^+k%n+M5wjTH#`UKK??7qK$1xq0DEGZ@sP+VltRJr z*1%M?qvfEcOGaTodUA7XI-6x$_d>Q={9i19uP$6Yy~Ybh@1UP{sdW+qLp1l}Iee!N zDEic#iL^08p+vuiu7y#N!kkGik>C)Et{9N5Aw7Z}QK4TSmpCTZuNh`@0?L2v9} zTYeYnqAxmn=A62Rc{n#<-&vArbcxhfkg;BUX>0XS#nAln?p|fp{JMP!0aM7j`lf1$ zQ%9#(QPfLbvcU=CZu!8Te)+u7StiX8JTBK19*?PqgnwjJ67t%#w|5rwa&fJhEYmo1 zuHP3>6vbo6XO#NS%Y3*P!piC`@6VeiVJvh2h`-|WIPi`A&c zq7(e)QNt7aQCnG46ECcOe|zHo<&4w?%F1UVr)kK-eXr-C=c3V_^v{Roq*kEvb*#^< zs?!P=(uKvvH)&~TzT{I;Q#XP-7!?$9wcmqkqJOw%e@6uRG#HvgCx)b!M>x?P_u&XP zhy7M)jv6mbWvSerGK$w{@cm`<%A%cI`5 z1HoCElQ_W|g^wQ1nr3}(iF(s^X)F5sRC?d7A%fR8Rst2^c`OuU>LoJG@g506Asrx#ug@zkgiJdK^X zmDXMF!al~kIl0Ib`DSKzAbH!$b>r&=4kbVO%+r16)|jl0NOupO_sQv{8uOc=ls`csdl999+FCE;B}EXD0CSL^fs}rKd^5&x|H=QYp)X%Br+60c&3h?6 z5Y%-S#N$!S`o(5{!knrQnp?kQ(qAkMtQApvs9Jv|xe%`dS9@`$*_B&qm!SpWaiX9v zIl~kYlnvf&<5};&E@YQwe~N|-pI@tES2$z+E{dsXZU_ukBE`2qK{jhGn6uxOO?XvNU3sEf;5kbiLRyBl)Kwr+nA1$+w-7xeO# z@bk>>K5>nWr?qFJerEly$L5p?96SNkgWDBXHP)l#I&hd3Osh7x$(ANg>?PQytxSFu z)r$WH(2$QLqE%-IH`0p=tdH37Io5jdmLwOUF0;h!OXNmJFb!4a%IH=V-#Ma#-$`0n z+Lh_7yXrC91qjcYj+2Y&k#Jf5C z9ZlV{A0_v%4wP5SpTR)6&_Cal%xEp2>ZC@ZQHgpC$VGQijEVNHO-Z(I3E?+ zw+s4%(fiHsPZi2ytPZb$LCDQ!yYUeLQn)mQW0rTQhF2-r3Iuz zMOwO>5dTqazG>YtuaTVLV);XzVb~lmj;YHlqMOau}y^rN|^&}5L{2Q{EcD!$96b9 z-EvpGOnuAEe_>6hRY1USc6!Jt*BT)mefRp9(}rJbte{%;?l&J8{tEd$zf==LG5{S& zJ7YjZi2%#Ll%$Tdz-FJyqwQhTBBxlJt5#dj+9|l&0ryJ%-k^bj0asM(4pUo{j|A9( zOp;JsjcGHhyQuj>;W!_*RZoA*0W9!XJJb^Q83=We$^JrGl6l{XR1mz_a4Ge=4wd=nWC}g%IH>EscP2x7q(-@u1j5%)`jkG^Bx(* zTs7$bI$N?xcPRJbhPLxcF5JAEHb`eQ641kT9!hPzUY!+>lRo0KuKL{d8J)pwlrm~R zUbE1|cqKz+y@OQVdbrhFZRb_!hoj9gJ;#JJS&Q|}IHt+-ai-i^Vrr|t)$5sYV>GS@ zy9WL+KKfkxuz8>AfW?jqm7Wyr3wKx^I2$V{+9T@>IRFDw-bNU5^O^an{;>M3x6|g(l0=to}LCY@9hO) z&y4a;0P}bU8c~U2{{74q+fSVV{;?ZKY)X+~{*Rmn68{ks(Edt0-+RUq!cTU>p!=8J zzJDJICV$GB4)e54?d>QTeX*SKnMgMc(09;5(Euy%C(}uWQ={;LS)g8UI0U+RE!I** z78>wnkZFYgVx$%T6wGYMJ|&vb@R9Iof@P z$f5Vn!&A1Vqq*r7I3&0g$}YBbaU))oJHydnTk&vcv=l5?$67yx6=XTS(mmN)^M?*n z(vP}~hs%trOf-m|)*3rWzD{wLc+XuljChPGvS_TBY42;SEzGkyBZ&uvVBgh>;ihP( zpx0okL2O3%7;w7Yifw-z?S6VOc8_JeBTDZ=@WlnMz@}4yqQIwJE?l{Cr4j5#*7(?6 zEaM9#T>vz5u+%h8EXbk97A#3eEjpsKzIb}1`I*F?Y;{9DiLVMe6bWqg%IBEP|F{<_ zmbp>jKS)ac^SX0NW?LOD+Z-qqf&frlDsbAfcmh8J%!9M*lo_CaYeI1y06L*e#!~T~ z2WXY$KP_@-0DNS&pErlykLskAc*h;7kM*< zaLsUPj|?%%!uDdss9GsyV>W0XQfMc*uql*c}t6shQ*2!d|H?9^STc^SG9f~5lDJq7J0QOjSu2zkk zx>>_}3U;05E9FZCEiVW1p09&bYmwqX+ypzswIKCzeAXEN1@@#rSIbmLQ#8aN-pZT- z+CAe|)L&Zr=};XZq2Oh(P{RG{&h?Tv6POJbW1kJoWIsP@r{dJ;g{@Y9L#q)9>02ZX zx+NW2gV@XP;Q!1uxj=NIE@89zGAU)c8ve_*mrWNC6TSOqw}x7ITJ+{L6OB}D5isGe zpkUeU(O{*rE*5Y)n#?Kw`ta*JSl=i%-s`ldHPMxb;);s*{;~7{24hERrEOUQiHR=y zWlzkC9kU+9K;}ni&g0JNU0Kjjwi*#kT5$$GXGJG^3F?L&u2%xGZ+IWB#oAeJLiFUb z51SyTCQO`yXz0mNquR~hr~690JvOXt^co$DOHCb5@5 z=jTQ7dZ;`e`Tq*7SbS(is#ns+6XMm#34ft5ia;p^9U7;af~G-q4M5%MC}|Cl@7-Qn zm8k>l(`n#XA2M@b;;6`r8s>u(e~-h%WDM}2S};k}saI=`t4%5xGpO&+x=vp$AqgR% zH-0N3QiT&7688As^Xe7rW~OFq5L?l?r!Fd(nxBh>R%d`W4-2*E@?j=mjf|y)$F;A{T}Hszd6){y}Q=*EeNKqsGvC4 zf5g(Rw&j;KRG_}Y=~@?WgrCq}a}-#C@=Ut-l_MbWDio=hDvI>VaZa3lZP?n>(!Xg- z5^J}L|7}$}6l93bum)$*)SSI^_0$-KhH+oKHZDNlb>H&}deEs-N#Nf_esFWh=Hcg8(`^m^ zsA3HYH9#h51~gDkV?ZkI&QxLp8gg+dekV5?{lj)TmC>I*9lgPS%}5t;eNSAfukXc! zTX@|^>+rKR6Fq$ZiY`CX8bO0vJp)Gfd{X&EMZH{_G3V0F3-(u|#3=0_fT=AFN`Dh9 z27&7zF~|<>ed2wnhVsFO+`WrhKK5Z5ol#+^>C@Ms2o>@0{hakEOE|XMZ z6F!~jUI=xZa(jg+d<^ocmQi=!b{iin6ZlhDaYyh9g~Qvv7lPU6nb-xycPdTctshd6 zYiR;zZL42jEyL&zlsO%op2lxhi#R4p$?;Q(b=#T(z6T?5SdRW7Hc4~)5=;H-UC1^WYA>7f|d}`piQlp*4eQz-himB;YL&KH( z$vsOGJT5eQ4gQTGvznRZp%q$f2kw~rlW+J1j`7m%-w%N%T8@SVMeab+16K2MdhpQ< z5pyFhayIsh!52MeA7;;6yoHQoR#plvyR6vFE6&=J9xp1+ekA?f`D;Ml_~!lY+QjlG zsYMOVK*CbsQZ*X|@5=xZ87S@zsuS6ELtb7Ur6`?nKXvf*XmIMgLS+d7uOy&_wW8Hp z-jyTselnu8va&K>r9Cyyg)vhpHx&G@>N$K$CqvElEHxjXT=(Pxv^zC#z(^meP51tq zCVO}_cN=;X0P)2?PN}|2{LPyOZ&%J}dNUHJIh%IlT&Xz@XQiF;eO@}1pV&(dDByfSPnR5D__ zAUHJ4fg5SHIbQ59UNOaq;MVfyk={+-lw73&jk>KNK@i{t91ncHUG&VhzaM6UcsWy$ zYZ$72uxOhVV!7|%)%$dyXfWk@nSG2P*$F`nMo@fI z#xM2&ivyZ45#!(|S!^RfiR#@0mc*=J+Ip&yS$Xnt>tVE?7JvYiPf9vmY+`7QC*oqo^I3cg zI8JFZExw=a8&1~>-S#e2UOpcwan9 z`toRQ7+?IcLB5IOasq57Yno#!LyRr3#&uh%Zlj&d;-k92w}PS61E=WGlpsmi%L19B zr&xO&L7KO5ZB|0Mlx)d~zGasZg+%u<85x2VDRhKX*O+n-XYF|>aE<$igR>V>OWzE( zolPd34BC|LarS-MVCL>-xCK*3uF=4>G3!7L{Ng_~aI}6@+xBE%rFGV1w2OCk&Ln;G zZ^oe4X`XG*3=a8FOTtR9eg}4k=wC<^W>qb>NIv{thadT_;p^AOs;ZHw?e#q=uTvU) zNoiPAi#m&*oXl`fM(Gm<_VXq8HJ*WnY=Q~C;AQ}*X+-}UwSih5*HAYg_I``30~|)z zXm{-3lB?&%Q5P*jAD@^cbdt{RY;u^X>W!MR@sfDif=B_c5`OnwuN~flqM5;TW0Ju< zqnMcyp42L4Ju3?8voO5=BFuu$Z08i*W^%?B9@aY)HgG7#`hu%w+Dan2Ymb`V-I`M6 zYCDl`N0fnpOfAk=>R#fyrdV_PrzLwOEj! zi5@yH?~>_&!n*rbdQ4_|WrF%P#SjgzeFZHYk6OvfAoJMWx+IWNnZ;!|j)BmAh^(ix z8g^n40xkV-EM|j(q1dsMLmSLHA7`pf!;mjZ2Su|}XG%=G0F7;REVFNC3w(_mRP9bm z4z_$E`!+%%z1k%Vj#W-I#vv^^Gh9Y1jt8pJ1|L)l9k*O0A4qPww8ad}*}-e>IZ!Q? zSdQ7W!95N}>Rn9AWFB&s5|eXA8aoNWo0olu4oyx`;pr3C{LgxF_6d#G|yixEnjOEMzw4-2F&{bkpcfb7kXO@R; zDO=|59dNv0RtBaIO>85KrpRsQ`L6u1`K#8(PUDedEi5uxlUxDiGuH3p1a29X=BBH# zBgTTO?u{NTNR_W1Q*O`MuGFq|^X2=YB17Ve(15F5?%{MDod%EXZb2Vuf$IDr?7JS> zplJ~*zJsiMzQcghxr5@i<~hCC`6nEFveyx%hf5a|b(I7e1;hb0gqjJ6na-6O>^S&q z@7z?P2rhkEXpcI;}Eda5#<(9%A64A6KY zKsD5-x_0Z-o#dc?wj;U=mWgMn6xLg3B6wL@r2#vG8t^eP5jRl^bbvGd2(+@ejIW&L z@4xvSG=(`JFz|+wrhRhdT0I#`I?sMFyL2kjDCbgCo8oEGq37Y(fUg{KQcMk*s|EtCY&DJIZorvmZ&gUUvOT1`zE2t=iI+8(-nQ=$FR1#(CfEAm6nx>zEec)ypfUBWfQD#TlJ&-2 z8>+PLFNrjbx1He#+rt2yk&3<@%!Un7HvOus$|9J*W2$9E4*S+e|C_}+Ot$kys}!K4 zzXi{Ii=ECrET>k|e-waTxWQMtoWVbpKt&Ad>N_AS_Y6uzgPtQWbM45oK$0uPMQ!t2 zI&1pnpAMdj@50PDwCno-nSbb77Jho$1B=>h2pyo4!{&QZCCtt98?H`FOe7$`rzIsl zxJW55*QHxJOiM!}0(Lb{Klve;chXY+S7_HaL0>phU>x5|PmK*kEe&uzKF~tR5~g*| zLyQ^IR1u!Iq&HA1&uM9C3m-G1?JJ36sNoA2+bM`fT09}zfKsKNDD`G4BVhR1Kmtty z?Z~AZej-PT*WZ@8D^O)CY%(JOnq!*$))N$6N!1@`>ItAS!^q5T=E0_Ro5w!4Bojx9BDhvMz?!Vi0h-`-bv5G+Y< zUcMsh%)b++cS~?p{!HP@nR8z$DIA;B@Lk5&xo|LY?H!o(lnX{}5cWKeho@{PrNF?e zu}|Cddzz?+XtR&4%!g3(ca+wN?l@i=H}apDN6vtPI#M-xUsuyezQez$_u_g9hXPD~ zn6+5dSy)oSfNfQ1{oUrWlP5f=cOzcyKvJsai`^vk!iS^wzD=b!Z-iUJM8pKg+?Q6a zGJ`>_Q<)fbCpt0P+5LUzmX_O^QOlZ+oxd5HMh3fK2XAvJfGB@!tF!Rx>5*6eAv&E* zY%qYaH3K;luFUtKg$dw`WkW_hw{G5S?EEM~D=1iHL-@P2;D>2JWU<1ls77C`5zk(_ zBJu3<$ZnX|j#$yL~hrPK(|Cf^wH}aGVrxg_x8UgE$RWJG@;kkuY z>SEO_U0{x&5=((__D4Z_2G`ik%!t;n?bIAikWWi zrN~I(H&BFEqsK>*$Nhl@o~bOuWy(1Yn>P%idZiVxY`qjo6YfXK5XS{Ldu=zvD8^cl zbqBZ|xr4HDigFuy4#EuAMK!|@Va#J?4}>C)s#`U5@e=P~)kaRZ?_y z*B@?CG09UQA88&O(yG8*K0X&V#Z%0bI>#%>#(RKGD!hxnw!;;>Cc+v3N`~4=_9p4D zC|4UVu{LM3)nh^C?C4M3WHHYX&)egt$vSGDcB|=?MOBT8d5SexDGA;L@u)G;bY=8isp(suw@k0#mE5ddfyuhqtDp=a0ol(d@O5z-0Vx(3ipKzrat zu_}s)L1~;38X9^Fpz=5VFdO-qdis%k@In^J8w=@l}QLDK3P9 zUU=3(k))!j3hSb6jy0wdm5{?D#y%dR7%9QfJ5Ta2lM&Ieyik4Au_@GDGfYhi5;-NQ z*(?5XsCwP+U@V9#dSYNB`gy-mNlu`3`{KeIKe)ghA-;R(tf-i24&Db^Mt|zPaOVP7 z)X@-Cr*U31&(!^h{7nhC{qybH_M0iGv>-dMC6C%zt3g&qS%bV$8g$*s?-po{Mj$=Y z@>atemFGWtz zy+I{$b*oCT3bykkcs0GGZb;!-c!Qjhtrz0D-j>ktcLgFwmmbX0CbeV7r#(Qj1HTO~ zW!6)7{R%;vyIZM0r$R^HpDZU$i@O*3#=UD(A)fOWjjWUB{G+OnRxLG&LGh|M)^>O8 z<_GcAuLqVi`7^ZcEAk8{Tsob5{ zN-ik)eDFB6Ytp+5{-|`jx~is7^pylD|C|84&6y#DO;%Ntak{h zjnS4J(w(cLD~@`bMAq_ZZ+f0@toY>+ta>+Fq)H@bro2|1jQP}+ty&UV6nwEg-OfjM z%cf6$xnl(R8g(mLB$Ua1OZZ01$3CN=Ex0Tdc~=EBvbl1F_${`UB3fH9k55l&M)Stv z{Wo^-(GmX$i{X6JD9cu-$KEnF=Zs6u{1B|kRlQtkifyae=Y<2Z9l2XF+FFtwyf+mUB-Wdtl@8r5VY_oXe{b?m4nsSUXxw}p5Fi0jeNQ<=u64?+*>AeC19h)kup z)FW0o#FvYw78qEZqG(!mNqs|oY`Rz>Cf-_@D0%ABGQ`LNh>1xKYDGE_C|Sst^s2j_ zo}LcCm9!x5+|ZXdZ8QbsMPD+W_CItQ2wtJE9>_{Ip@EqWr;~3LKaYblwO%P>US8hy z&p2$2dU4Jv6=p;a1;I8v1b4dCIdL^mcKe7+FT_a@fkaI9-WS*ENl}$5o#dOeHzj6E zG|pZlAaA6_o#R%nwwoav3@RPwdeyNx3MJPx3I8t9v@{?=>99=6>$D_WTffp<;&b@z z_3+f^=Y)%#DGqV^Wi%t!nLQAp*sRz7j&}unv#*zy&DlLE^&C+!D^{^9?lV|Dv{}iY z#}u#NPa8MW0z}o>UB|Ix4W1`FTHIW4lGWH74KkELg6A#Oufv-zFjPk`ED$aMP!Gv{ zF$|Z>d2j6rTr}LroZsA%9a3W0KUrV>%nv(pF|mS7Jn{J?P6u*91BmHaSwr#2xElj$ zB{&yRO}NcXE0j25iqsp)o%x;y>mE+I|CuM=e*k$ylTP+)NFZQF2P5nC5zCHp6CE8L z3y}Rc1I5!R(4_AMmq3J|W66Xy8CNQ=#CEO5+7cF_=Qw1F?#a28k#B;m@=B?eAo5(SV1nR&KmsJ2L zPN6_=^)VRfiB({KSm{di0xsM6Czm%wM^FIT=kR#m zgoRP#hQiV9`eHV^x{UHtb(`Np17Bd`jKC4H% z9kDFs<>jE!qR#F8Wg%9d;hHWx9%J6#LZaLAT9!vK!x}`DWARGLN`%5fk=3+K$pFVorBqx5p=~n zGTtSsuDHIo)e0K9Y8!sZxk`%XPE81@?Jz;hC>Ll#iJxDcY-~N%Pk_!xBzkgka)JGZ zF2E+=Yb!9)!W7ke`LYp+NTXECD3?)fqhcea|1WJLWgwj??3C9YXa8$Z6T-QBHrZG) z%3$aJ!UgJ4Ujy`a_7rov+P+H=>Ui|fIP}D=bH#jTr(&q=ceUjO>4e}L-yK>KPd&&p z=pRvA57GqWT7PJj{__wcD{3d|ymSB=tiX0v6CXQs11~dMwKxz!`kR49y1-EHy%#SM zqMf$~10y3d{@~djk#1kt<(0+Kq@wqJ60CC$IuhRxD&Mmk7hp`8TZvHWtlbhePr zJBl1?LmD_!N9jzM77F#h%&31RLeN{+fyD*cT~+ywP7>#H==!<^>UaQRY*;&l*hdsh z*ic7=jg9?sb+n3dnLDbD=%%1<>s5cg^M5_FfBpoa$0A^)!1ljvc~XQB%7^l!<@Ozi z2xD3uTHUsyA8y830I|5Ap?j|4;!?2qRyrC$>JnI>bBQDx$&Avx8Zt~rkaubW7(jE= zvwyx5xWz!g6*i5gmF3%|lF>bt{(T0$O%3u!lnsm+N=(OA&^~J7NI!o3VFgivI!8g^ zN~j9q8s{S*OqB8mS2|gApsvu)UG(-+=({#Uo|s2qTw}oR_v1tQF?D`?D%OV4yR$;! zSZc5Ux|r0vn9RhJ^s|xAdu}1n3m#3XV7#@?>w@6f6p#|aRrwvpy?HW zT2%;|sGK*!-iW~1Sk|v!+j*i_2PV2q@|AxCe6aA~&!-h$MW=a0>4Eo)zv{E2w?hmn z+9cwwR2~PZu;QRTYh(f>wM4@@jLUHv4zuW#YIqs18{Vg4LjX=VdLQRiA3GKWZOSc6Rco`fxcm6I)ECeluW(q z?qvWU#0+Pk6+M|H^+hZTxMz3HHZA=vxc=w=VsQbbpk<>pPH6YX?K$?73XLaTug{7O zK6%)5OIXYP)*_dL31CN{R4s^ERFmulQ7cv)wwLA&;n9zN(`x*`H$y}5GpNudo&)nb zk^8wRp%p?5tSt;w(&2aJe*A~dGIV!#uLbFG(7~JQX8`M_zGEwA*FWwe_JlZ*F7Z?(ftdfE4+uqnnU|j>qR#J`t zNCXN+X`mAF??x1$&Go1@LPWomSCURaRrAG=^pC3sGKqt`Y#+LEvs&ejNXaT9WB4IZ zg?}wyt4hNO+s4ffmA~Fi?6}-tO9==v$}$g6y=3DbgSM3c_bi0yFOzuk71!On?0+<9?XlPMV2kJI5!-j%H8?WxH%&cgp9>^K^N}OKZgR8j70NrhK0LXUBng*BbkR?;RKc7`OFh z%Re{+9lw${?@?EwXPAH2)$YKcFx>Ul+lpa>F+zIhA*<+9?i+&Y76hPolpe_Xr=Fok-d3{FdUl%ale^487WiHS0LNF_xEZ+l4sT81<-lqNx zQu>L#vV-^9n@#Q*E-q~Fkt@+tpxx^|i#_f9K2V0_eteK$Ggy<|{q+T)4#fYHEA{ER*?27)fawHIHuyVAf^Z_q&d!cnI=8-% znd?xL?hfd9C}~2Vnj-p#?DwxH^`D0^sH<9{81C;hzP@@uJCt;-o zninr+XJqqLj6ZSQ(*=NgP0Ux^le1Z(N8e{gn766ildCQ&dR+v7Uo?ODQ-i+#0s#EN zGBPsK*@CuyE%W}egvp7+^+%vI>>Nls6a;og)5wzn)<=p7y{baO!^N08mA2c zx_YhdB`*MfrFIPtMSyfa1ZMj`1{0ImKl*c^8Dnp6Pf3_Ryo^fIf#77o{~bYNb(!qjNtotuTN$97ZyK>~=BlBK<2C{PGh@o75m31+4a{mA^Mqo=A8$4;-9LpbbprSoP=LA-KF+pjzLByfEb+k_;UuKe;euzT%tH@Chq*@fW7~H6o+_T ziZze6ccMGHo~8W87C?@RA{+uvp*pm?SdWy1gbuJo%|n!O)Kw}}!0zOifQ}Ft9-j7x zlkg~T`}*R-^gM^{FBe#?9-2?xjpy5DJ;;!!7~)arf4K!`fE&N;&}GHr+~>n&`cmqs z#czKP;~@2T4Lb882ZRJt@m2u>W|F7xL-fohX#KAi07hgC1mHbefl4r7I|}xj6ssnK zJEgnE)ir|4C={UhdlL~8W{&{<@gG{VcrCmA9Jp{I0?FYa=qk+EMF=V!K>WIu*Jxk$0 z*Ny{aZrxn?a)ssb#V4gIErnC{x?8imwlo#aX-(a@3=!pvFvomi?_e9 zOGcofqQZcT?WugA!gBh3Kuur=ef=6;1t^{{DZsYpfKGJiC-?I$U(;+G*6`p4

^R(e@aI{m_rgzyxFrQRjNEz9$+Pr4)`;eyz2q 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 Ysrj{f`g6rs&cWYyot<0KwQWxQ4@eVLKL7v# literal 0 HcmV?d00001 From a64202d604c9d9d9039e456be738f91e6ca5ae6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Fri, 18 Jul 2025 16:51:21 +0200 Subject: [PATCH 26/49] add todo note about auto associations --- contracts/hedera/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index f1b649c2..6923045f 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -32,5 +32,5 @@ The responsibility of keeping ITS funded on the WHBAR contract lies with the dep - `interchainTokenAddress` was removed from `InterchainTokenService.sol`, since HTS tokens don't have deterministic addresses. `registeredTokenAddress` should be used instead. - `transmitInterchainTransfer` was removed from `InterchainTokenService.sol` since it's meant to be called from an `InterchainToken` contract, which is not used. - When creating a new interchain token, `InterchainTokenService` and `TokenManager` are associated with the token. -- `initialSupply` isn't supported when deploying a new interchain token. To receive tokens, an account needs to previously associate with the token, thus it cannot immediately receive tokens after creation. +- `initialSupply` isn't supported when deploying a new interchain token. To receive tokens, an account needs to previously associate with the token, thus it cannot immediately receive tokens after creation. (TODO explain why auto associations aren't used.) - Both HTS tokens and ERC20 tokens are supported for registration. From 2ecb8e01c1d4ccbc1e23891e9952ddd97dbb32db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 21 Jul 2025 12:03:26 +0200 Subject: [PATCH 27/49] add auto association explanation to the docs --- contracts/InterchainTokenFactory.sol | 2 +- contracts/hedera/README.md | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/contracts/InterchainTokenFactory.sol b/contracts/InterchainTokenFactory.sol index 96357296..c26ff769 100644 --- a/contracts/InterchainTokenFactory.sol +++ b/contracts/InterchainTokenFactory.sol @@ -127,7 +127,7 @@ contract InterchainTokenFactory is IInterchainTokenFactory, Multicall, Upgradabl * @param name The name of the token. * @param symbol The symbol of the token. * @param decimals The number of decimals for the token. - * @param initialSupply The amount of tokens to mint initially (can be zero), allocated to the msg.sender. + * @param initialSupply The amount of tokens to mint initially (can be zero), allocated to the msg.sender. Not supported for HTS tokens. * @param minter The address to receive the minter and operator role of the token, in addition to ITS. If it is set to `address(0)`, * the additional minter isn't set, and can't be added later. This allows creating tokens that are managed only by ITS, reducing trust assumptions. * Reverts if the minter is the ITS address since it's already added as a minter. diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index 6923045f..22c5959b 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -12,6 +12,18 @@ The responsibility of keeping ITS funded on the WHBAR contract lies with the dep ![Deploy New Interchain Token Flow](./diagrams/deploy_interchain_token.png) +### Deploying with Initial Supply + +Initial supply is not supported when deploying a new Interchain Token on Hedera. To receive tokens, an account needs to previously associate with the token, thus it cannot immediately receive tokens after creation. + +However there is an [Automatic Token Associations](https://docs.hedera.com/hedera/core-concepts/accounts/account-properties#automatic-token-associations) feature in Hedera, which allows accounts to approve a number of automatic token associations (airdrops) without needing to explicitly associate with each token. The only way to reliably tell if an account can receive a new token is by reading the property for the account and checking if the value is `-1` (unlimited associations). + +There is an optimistic approach to this, where it is assumed the account has unlimited associations and can receive the token. However if the transaction reverts due to it not being able to receive the token, [gas will be nonetheless charged](https://docs.hedera.com/hedera/core-concepts/smart-contracts/gas-and-fees). This is undesirable, since Hedera charges at minimum 80% of the gas limit. + +Another approach is to have the Relayer [check](https://docs.hedera.com/hedera/sdks-and-apis/rest-api/accounts#get-api-v1-accounts-idoraliasorevmaddress) if the account can receive the token before deploying it, but this requires customisations to the Relayer, which is again not desirable. + +This behaviour can be changed in the future by upgrading the `InterchainTokenFactory` contract to support initial supply, but for now it is not supported. + ### Hedera-related Notes - Hedera contract and token "rent" and "expiry" are disabled on Hedera and not supported in this implementation. @@ -31,6 +43,5 @@ The responsibility of keeping ITS funded on the WHBAR contract lies with the dep - `InterchainTokenDeployer.sol` `deployedAddress` is not supported, since HTS tokens don't have deterministic addresses. - `interchainTokenAddress` was removed from `InterchainTokenService.sol`, since HTS tokens don't have deterministic addresses. `registeredTokenAddress` should be used instead. - `transmitInterchainTransfer` was removed from `InterchainTokenService.sol` since it's meant to be called from an `InterchainToken` contract, which is not used. -- When creating a new interchain token, `InterchainTokenService` and `TokenManager` are associated with the token. -- `initialSupply` isn't supported when deploying a new interchain token. To receive tokens, an account needs to previously associate with the token, thus it cannot immediately receive tokens after creation. (TODO explain why auto associations aren't used.) +- When creating a new interchain token, `TokenManager` is automatically associated with the token, as the creator. - Both HTS tokens and ERC20 tokens are supported for registration. From ffd885df71436f9691b7a1e716e2704c3341298c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 21 Jul 2025 12:32:02 +0200 Subject: [PATCH 28/49] add register and mint diagram to docs --- contracts/InterchainTokenFactory.sol | 2 +- contracts/hedera/README.md | 2 ++ .../hedera/diagrams/native_token_minting.png | Bin 0 -> 330871 bytes .../diagrams/register_custom_hts_token.png | Bin 0 -> 386569 bytes 4 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 contracts/hedera/diagrams/native_token_minting.png create mode 100644 contracts/hedera/diagrams/register_custom_hts_token.png diff --git a/contracts/InterchainTokenFactory.sol b/contracts/InterchainTokenFactory.sol index c26ff769..82b05dd9 100644 --- a/contracts/InterchainTokenFactory.sol +++ b/contracts/InterchainTokenFactory.sol @@ -510,7 +510,7 @@ contract InterchainTokenFactory is IInterchainTokenFactory, Multicall, Upgradabl } /** - * @notice Register an existing ERC20 token under a `tokenId` computed from the provided `salt`. + * @notice Register an existing ERC20 or HTS token under a `tokenId` computed from the provided `salt`. * A token metadata registration message will also be sent to the ITS Hub. * This token can then be linked to remote tokens on different chains by submitting the `linkToken` function from the same `msg.sender` and using the same `salt`. * @dev This function is marked as payable since it can be called within a multicall with other payable methods. diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index 22c5959b..a3561cde 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -11,6 +11,8 @@ Since the `createFungibleToken` precompile in Hedera requires a fee to be sent a The responsibility of keeping ITS funded on the WHBAR contract lies with the deployer, it is assumed that a top-up mechanism is in place to ensure the contract has enough WHBAR to create new tokens. ![Deploy New Interchain Token Flow](./diagrams/deploy_interchain_token.png) +![Mint Native Interchain Token](./diagrams/native_token_minting.png) +![Register Custom HTS Token](./diagrams/register_custom_hts_token.png) ### Deploying with Initial Supply diff --git a/contracts/hedera/diagrams/native_token_minting.png b/contracts/hedera/diagrams/native_token_minting.png new file mode 100644 index 0000000000000000000000000000000000000000..ec5985dfe82f7902f0c798bfc92319c6001cf9c8 GIT binary patch literal 330871 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 literal 0 HcmV?d00001 diff --git a/contracts/hedera/diagrams/register_custom_hts_token.png b/contracts/hedera/diagrams/register_custom_hts_token.png new file mode 100644 index 0000000000000000000000000000000000000000..27aab59202817ac618e1e2431d840d22a9b7d1d1 GIT binary patch literal 386569 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�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 literal 0 HcmV?d00001 From c311f2014896f3ccea803031ca2c3a0f178b5ea9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 21 Jul 2025 12:36:05 +0200 Subject: [PATCH 29/49] add note on test suite time --- contracts/hedera/README.md | 2 ++ contracts/hedera/TESTING.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index a3561cde..a2b5f42e 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -11,7 +11,9 @@ Since the `createFungibleToken` precompile in Hedera requires a fee to be sent a The responsibility of keeping ITS funded on the WHBAR contract lies with the deployer, it is assumed that a top-up mechanism is in place to ensure the contract has enough WHBAR to create new tokens. ![Deploy New Interchain Token Flow](./diagrams/deploy_interchain_token.png) + ![Mint Native Interchain Token](./diagrams/native_token_minting.png) + ![Register Custom HTS Token](./diagrams/register_custom_hts_token.png) ### Deploying with Initial Supply diff --git a/contracts/hedera/TESTING.md b/contracts/hedera/TESTING.md index 583bbdff..29734de9 100644 --- a/contracts/hedera/TESTING.md +++ b/contracts/hedera/TESTING.md @@ -4,6 +4,8 @@ Follow [instructions for setting up a local Hedera devnet](https://github.com/hi If starting the local node on a server, you can use the `--host` option to specify the host address. For example, `hedera start --dev --verbose=trace --host=`. Before that, make the following env var available: `export DOCKER_LOCAL_MIRROR_NODE_URL="http://:5551"` to be able to inspect the local node in the Hedera explorer, available at `http://:8090`. +Keep in mind test suites might take a while to run on the Hedera Local Node, sometimes a few dozen minutes. + ## Test Configuration Create a `.env` file in the root directory with the following content: From 0e48ce6a961f2382896807b59b246b1365ada919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 21 Jul 2025 13:42:14 +0200 Subject: [PATCH 30/49] don't add its as a minter in TM not needed because the mintToken can always be called by the service --- contracts/token-manager/TokenManager.sol | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/contracts/token-manager/TokenManager.sol b/contracts/token-manager/TokenManager.sol index fea7fd9d..2be0833f 100644 --- a/contracts/token-manager/TokenManager.sol +++ b/contracts/token-manager/TokenManager.sol @@ -158,12 +158,9 @@ contract TokenManager is ITokenManager, Minter, Operator, FlowLimit, Implementat } /** - * @dev Set the token service as a minter to allow it to mint and burn tokens. - * Also add the provided address as a minter. If `address(0)` was provided, + * Add the provided address as a minter. If `address(0)` was provided, * add it as a minter to allow anyone to easily check that no custom minter was set. */ - // TODO(hedera) should we add the service as a minter? - _addMinter(interchainTokenService); _addMinter(operator); // If an operator is not provided, set `address(0)` as the operator. From e67e8683178e72024483a605c2160d5566d66fab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 21 Jul 2025 13:57:41 +0200 Subject: [PATCH 31/49] rm unused `centsToTinybars` from HTS lib --- contracts/hedera/HTS.sol | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/contracts/hedera/HTS.sol b/contracts/hedera/HTS.sol index fbd610a0..940d0e23 100644 --- a/contracts/hedera/HTS.sol +++ b/contracts/hedera/HTS.sol @@ -18,10 +18,6 @@ library HTS { address private constant PRECOMPILE = address(0x167); address private constant EXCHANGE_RATE_PRECOMPILE = address(0x168); - // 1 whole is divided into 100_000_000 tiny parts - // Applicable for tinybars and tinycents - used for exchange rate calculations - uint256 constant TINY_PARTS_PER_WHOLE = 100_000_000; - // See `TokenKey` struct, `keyType`. // 0th bit: adminKey uint256 private constant ADMIN_KEY_BIT = 1 << 0; @@ -247,18 +243,22 @@ library HTS { // // Exchange rate functionality + // See https://github.com/hashgraph/hedera-smart-contracts/blob/b4365714dccdd7e949c84fb325e8e878c60ddc91/contracts/system-contracts/exchange-rate/IExchangeRate.sol // - function centsToTinybars(uint256 cents) public returns (uint256 tinybars) { - uint256 tinycents = cents * TINY_PARTS_PER_WHOLE; - - (bool success, bytes memory result) = EXCHANGE_RATE_PRECOMPILE.call( - abi.encodeWithSelector(IExchangeRate.tinycentsToTinybars.selector, tinycents) - ); - require(success); - tinybars = abi.decode(result, (uint256)); - } - + // Given a value in tinycents (1e-8 US cents or 1e-10 USD), returns the + // equivalent value in tinybars (1e-8 HBAR) at the current exchange rate + // stored in system file 0.0.112. + // + // This rate is a weighted median of the the recent" HBAR-USD exchange + // rate on major exchanges, but should _not_ be treated as a live price + // oracle! It is important primarily because the network will use it to + // compute the tinybar fees for the active transaction. + // + // So a "self-funding" contract can use this rate to compute how much + // tinybar its users must send to cover the Hedera fees for the transaction. + // + // See https://github.com/hashgraph/hedera-smart-contracts/blob/b4365714dccdd7e949c84fb325e8e878c60ddc91/contracts/system-contracts/exchange-rate/IExchangeRate.sol#L16 function tinycentsToTinybars(uint256 tinycents) public returns (uint256 tinybars) { if (tinycents == 0) { return 0; From 7fec12679d1db9b968dc788f5ba4d6b33ee18ea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 21 Jul 2025 14:19:59 +0200 Subject: [PATCH 32/49] explain why we add one tinybar to token creation price --- contracts/hedera/IExchangeRate.sol | 1 + contracts/utils/TokenCreationPricing.sol | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/contracts/hedera/IExchangeRate.sol b/contracts/hedera/IExchangeRate.sol index 142cb11b..85c9dcf4 100644 --- a/contracts/hedera/IExchangeRate.sol +++ b/contracts/hedera/IExchangeRate.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +// Copied from: https://github.com/hashgraph/hedera-smart-contracts/blob/b4365714dccdd7e949c84fb325e8e878c60ddc91/contracts/system-contracts/exchange-rate/IExchangeRate.sol interface IExchangeRate { // Given a value in tinycents (1e-8 US cents or 1e-10 USD), returns the // equivalent value in tinybars (1e-8 HBAR) at the current exchange rate diff --git a/contracts/utils/TokenCreationPricing.sol b/contracts/utils/TokenCreationPricing.sol index 12a22cea..b3c0bb32 100644 --- a/contracts/utils/TokenCreationPricing.sol +++ b/contracts/utils/TokenCreationPricing.sol @@ -35,7 +35,8 @@ contract TokenCreationPricing is ITokenCreationPricing { function _tokenCreationPriceTinybars() internal returns (uint256 price) { uint256 priceTinycents = _tokenCreationPricingStorage().tokenCreationPrice; - // TODO(hedera) explain why + 1 (for rounding) + // Add 1 tinybar to ensure we meet the minimum value after rounding from + // USD → HBAR (avoids underpayment due to truncation) price = HTS.tinycentsToTinybars(priceTinycents) + 1; } From 123e921ef6ca53266e413f24630a12b290548f50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 21 Jul 2025 15:11:33 +0200 Subject: [PATCH 33/49] fix deploy TM proxy invalid params test --- test/InterchainTokenService.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/test/InterchainTokenService.js b/test/InterchainTokenService.js index ca78449c..3fb5fac8 100644 --- a/test/InterchainTokenService.js +++ b/test/InterchainTokenService.js @@ -623,8 +623,7 @@ describe.only('Interchain Token Service', () => { expect(tokenManagerImplementation).to.eq(tokenManager.address); }); - // TODO(hedera) fix this test - it.skip('Should revert on TokenManagerProxy deployment with invalid constructor parameters [todo(hedera)]', async () => { + it('Should revert on TokenManagerProxy deployment with invalid constructor parameters', async () => { const salt = getRandomBytes32(); const tokenId = await service.interchainTokenId(wallet.address, salt); const validParams = defaultAbiCoder.encode(['bytes', 'address'], ['0x', wallet.address]); @@ -657,13 +656,8 @@ describe.only('Interchain Token Service', () => { [], ); - await expectRevert( - (gasOptions) => - deployContract(wallet, 'TokenManagerProxy', [service.address, LOCK_UNLOCK, tokenId, invalidParams, gasOptions]), - tokenManagerProxy, - 'SetupFailed', - [], - ); + await expect(deployContract(wallet, 'TokenManagerProxy', [service.address, LOCK_UNLOCK, tokenId, invalidParams])).to.be + .reverted; await deployContract(wallet, 'TokenManagerProxy', [service.address, LOCK_UNLOCK, tokenId, validParams]); }); From 35719b80a22b374808daa928eb93f235fbd569f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 21 Jul 2025 19:53:51 +0200 Subject: [PATCH 34/49] fix ITF tests + revert on empty name and symbol --- contracts/InterchainTokenService.sol | 3 + scripts/hedera-client.js | 28 ++++ test/InterchainTokenFactory.js | 217 +++++++++++++-------------- test/InterchainTokenService.js | 33 ++-- test/utils.js | 32 ---- 5 files changed, 149 insertions(+), 164 deletions(-) create mode 100644 scripts/hedera-client.js diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index e1a2f260..6e2e60c3 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -955,6 +955,9 @@ contract InterchainTokenService is uint8 decimals, bytes memory operator ) internal { + if (bytes(name).length == 0) revert EmptyTokenName(); + if (bytes(symbol).length == 0) revert EmptyTokenSymbol(); + // Price in tinybars uint256 tokenCreatePrice = _tokenCreationPriceTinybars(); diff --git a/scripts/hedera-client.js b/scripts/hedera-client.js new file mode 100644 index 00000000..87fa46d4 --- /dev/null +++ b/scripts/hedera-client.js @@ -0,0 +1,28 @@ +const { Client: HederaClient, PrivateKey: HederaPrivateKey, AccountId: HederaAccountId } = require('@hashgraph/sdk'); + +function hederaClientFromHardhatConfig(networkConfig) { + const hederaConsensusUrl = networkConfig.consensusUrl; + const hederaPk = HederaPrivateKey.fromStringECDSA(networkConfig.operatorKey); + const hederaOperatorId = HederaAccountId.fromString(networkConfig.operatorId); + const hederaNodeId = HederaAccountId.fromString(networkConfig.nodeId); + + const hederaConsensusHost = hederaConsensusUrl.replace('http://', '').replace('https://', ''); + const hederaClient = HederaClient.forNetwork({ + [hederaConsensusHost]: hederaNodeId, + }); + hederaClient.setOperator(hederaOperatorId, hederaPk); + + console.log(` Using Hedera Client Configuration:`); + console.log(`\tMirror Node URL: ${networkConfig.url}`); + console.log(`\tConsensus URL: ${hederaConsensusUrl}`); + console.log(`\tOperator PK: ${networkConfig.operatorKey}`); + console.log(`\tOperator ID: ${hederaOperatorId.toString()}`); + console.log(`\tOperator Address: ${hederaOperatorId.toSolidityAddress()}`); + console.log(`\tNode ID: ${hederaNodeId.toString()}`); + + return { hederaClient, hederaPk, hederaOperatorId }; +} + +module.exports = { + hederaClientFromHardhatConfig, +}; diff --git a/test/InterchainTokenFactory.js b/test/InterchainTokenFactory.js index 5933f435..6e15de05 100644 --- a/test/InterchainTokenFactory.js +++ b/test/InterchainTokenFactory.js @@ -2,7 +2,7 @@ const chai = require('chai'); const { expect } = chai; -const { ethers } = require('hardhat'); +const { ethers, network } = require('hardhat'); const { getContractAt, Wallet, @@ -18,14 +18,10 @@ const { encodeSendHubMessage, encodeLinkTokenMessage, expectNonZeroAddress, - validateTokenManagerParams, } = require('./utils'); const { NATIVE_INTERCHAIN_TOKEN, LOCK_UNLOCK, - MINTER_ROLE, - OPERATOR_ROLE, - FLOW_LIMITER_ROLE, MINT_BURN, MINT_BURN_FROM, LOCK_UNLOCK_FEE_ON_TRANSFER, @@ -38,9 +34,12 @@ const { } = require('./constants'); const { getBytecodeHash } = require('@axelar-network/axelar-chains-config'); +const { createHtsToken } = require('../scripts/create-hts-token.js'); +const { hederaClientFromHardhatConfig } = require('../scripts/hedera-client.js'); + const reportGas = gasReporter('Interchain Token Factory'); -describe('InterchainTokenFactory', () => { +describe.only('InterchainTokenFactory', () => { let wallet, otherWallet; let service, gateway, gasService, tokenFactory; const chainName = 'Test'; @@ -49,6 +48,13 @@ describe('InterchainTokenFactory', () => { const decimals = 18; const destinationChain = 'destination chain'; + let hederaClient, hederaPk; + before(() => { + const hederaClientInfo = hederaClientFromHardhatConfig(network.config); + hederaClient = hederaClientInfo.hederaClient; + hederaPk = hederaClientInfo.hederaPk; + }); + before(async () => { [wallet, otherWallet] = await ethers.getSigners(); ({ service, gateway, gasService, tokenFactory } = await deployAll(wallet, chainName, ITS_HUB_ADDRESS, [destinationChain])); @@ -109,17 +115,10 @@ describe('InterchainTokenFactory', () => { const tokenCap = BigInt(1e18); async function deployToken() { - token = await deployContract(wallet, 'TestInterchainTokenStandard', [ - name, - symbol, - decimals, - service.address, - getRandomBytes32(), - ]); + const [tokenAddress] = await createHtsToken(hederaClient, hederaPk, name, symbol, decimals, tokenCap); + token = await getContractAt('IERC20Named', tokenAddress, wallet); tokenId = await tokenFactory.canonicalInterchainTokenId(token.address); tokenManagerAddress = await service.tokenManagerAddress(tokenId); - await token.mint(wallet.address, tokenCap).then((tx) => tx.wait()); - await token.setTokenId(tokenId).then((tx) => tx.wait()); } before(async () => { @@ -152,7 +151,7 @@ describe('InterchainTokenFactory', () => { await expect( tokenFactory[DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN_WITH_ORIGINAL_CHAIN]('', token.address, destinationChain, gasValue, { - value: gasValue, + value: gasValue * 10 ** 10, }), ) .to.emit(service, 'InterchainTokenDeploymentStarted') @@ -164,7 +163,7 @@ describe('InterchainTokenFactory', () => { await expect( tokenFactory[DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN](token.address, destinationChain, gasValue, { - value: gasValue, + value: gasValue * 10 ** 10, }), ) .to.emit(service, 'InterchainTokenDeploymentStarted') @@ -190,7 +189,7 @@ describe('InterchainTokenFactory', () => { destinationChain, gasValue, { - value: gasValue, + value: gasValue * 10 ** 10, }, ), tokenFactory, @@ -199,7 +198,7 @@ describe('InterchainTokenFactory', () => { await expect( tokenFactory[DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN](token.address, destinationChain, gasValue, { - value: gasValue, + value: gasValue * 10 ** 10, }), ) .to.emit(service, 'InterchainTokenDeploymentStarted') @@ -217,9 +216,7 @@ describe('InterchainTokenFactory', () => { const minter = new Wallet(getRandomBytes32()).address; const checkRoles = async (tokenManager, minter) => { - const token = await getContractAt('InterchainToken', await tokenManager.tokenAddress(), wallet); - expect(await token.isMinter(minter)).to.be.true; - expect(await token.isMinter(tokenManager.address)).to.be.true; + expect(await tokenManager.isMinter(minter)).to.be.true; expect(await tokenManager.isOperator(minter)).to.be.true; expect(await tokenManager.isOperator(service.address)).to.be.true; @@ -248,12 +245,12 @@ describe('InterchainTokenFactory', () => { .to.emit(service, 'InterchainTokenDeployed') .withArgs(tokenId, expectNonZeroAddress, minter, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs( - tokenId, - expectedTokenManagerAddress, - NATIVE_INTERCHAIN_TOKEN, - validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', minter, name, symbol, decimals), - ); + .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, (params) => { + const [operator, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(operator.toLowerCase()).to.equal(minter.toLowerCase()); + expectNonZeroAddress(tokenAddress_); + return true; + }); await checkRoles(tokenManager, minter); }); @@ -270,7 +267,7 @@ describe('InterchainTokenFactory', () => { ); }); - it('Should register a token if the mint amount is greater than zero and the minter is the zero address', async () => { + it.skip('Should register a token if the mint amount is greater than zero and the minter is the zero address [unsupported]', async () => { const salt = keccak256('0x12345678'); tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); @@ -280,62 +277,65 @@ describe('InterchainTokenFactory', () => { .to.emit(service, 'InterchainTokenDeployed') .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs( - tokenId, - expectedTokenManagerAddress, - NATIVE_INTERCHAIN_TOKEN, - validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), - ); + .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, (params) => { + const [operator, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(operator.toLowerCase()).to.equal(minter.toLowerCase()); + expectNonZeroAddress(tokenAddress_); + return true; + }); await checkRoles(tokenManager, AddressZero); }); it('Should register a token', async () => { + const mintAmount = 0; + const salt = keccak256('0x'); tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, mintAmount, minter)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, minter, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs( - tokenId, - expectedTokenManagerAddress, - NATIVE_INTERCHAIN_TOKEN, - validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), - ); + .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, (params) => { + const [operator, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(operator.toLowerCase()).to.equal(minter.toLowerCase()); + expectNonZeroAddress(tokenAddress_); + return true; + }); + const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); // Get token address from the deployed token manager const tokenAddress = await tokenManager.tokenAddress(); - const token = await getContractAt('InterchainToken', tokenAddress, wallet); + const token = await getContractAt('IERC20Named', tokenAddress, wallet); expect(await token.balanceOf(tokenFactory.address)).to.equal(0); expect(await token.balanceOf(wallet.address)).to.equal(mintAmount); - await checkRoles(tokenManager, AddressZero); + await checkRoles(tokenManager, minter); }); it('Should initiate a remote interchain token deployment with the same minter', async () => { const gasValue = 1234; - const mintAmount = 5678; + const mintAmount = 0; const salt = keccak256('0x12'); tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); - await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, mintAmount, wallet.address)) + const minter = wallet.address; + + await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, mintAmount, minter)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, minter, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs( - tokenId, - expectedTokenManagerAddress, - NATIVE_INTERCHAIN_TOKEN, - validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), - ); + .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, (params) => { + const [operator, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(operator.toLowerCase()).to.equal(minter.toLowerCase()); + expectNonZeroAddress(tokenAddress_); + return true; + }); const { payload, payloadHash } = encodeSendHubMessage( destinationChain, @@ -352,7 +352,7 @@ describe('InterchainTokenFactory', () => { gasValue, { ...gasOptions, - value: gasValue, + value: gasValue * 10 ** 10, }, ), tokenFactory, @@ -369,7 +369,7 @@ describe('InterchainTokenFactory', () => { gasValue, { ...gasOptions, - value: gasValue, + value: gasValue * 10 ** 10, }, ), tokenFactory, @@ -387,7 +387,7 @@ describe('InterchainTokenFactory', () => { gasValue, { ...gasOptions, - value: gasValue, + value: gasValue * 10 ** 10, }, ), tokenFactory, @@ -403,7 +403,7 @@ describe('InterchainTokenFactory', () => { destinationChain, gasValue, { - value: gasValue, + value: gasValue * 10 ** 10, }, ), ) @@ -418,7 +418,7 @@ describe('InterchainTokenFactory', () => { (gasOptions) => tokenFactory.deployRemoteInterchainTokenWithMinter(salt, wallet.address, destinationChain, wallet.address, gasValue, { ...gasOptions, - value: gasValue, + value: gasValue * 10 ** 10, }), tokenFactory, 'RemoteDeploymentNotApproved', @@ -429,7 +429,7 @@ describe('InterchainTokenFactory', () => { (gasOptions) => tokenFactory.deployRemoteInterchainTokenWithMinter(salt, AddressZero, destinationChain, wallet.address, gasValue, { ...gasOptions, - value: gasValue, + value: gasValue * 10 ** 10, }), tokenFactory, 'InvalidMinter', @@ -466,7 +466,7 @@ describe('InterchainTokenFactory', () => { (gasOptions) => tokenFactory.deployRemoteInterchainTokenWithMinter(salt, wallet.address, destinationChain, wallet.address, gasValue, { ...gasOptions, - value: gasValue, + value: gasValue * 10 ** 10, }), tokenFactory, 'RemoteDeploymentNotApproved', @@ -479,7 +479,7 @@ describe('InterchainTokenFactory', () => { await expect( tokenFactory.deployRemoteInterchainTokenWithMinter(salt, wallet.address, destinationChain, wallet.address, gasValue, { - value: gasValue, + value: gasValue * 10 ** 10, }), ) .to.emit(service, 'InterchainTokenDeploymentStarted') @@ -492,22 +492,24 @@ describe('InterchainTokenFactory', () => { it('Should initiate a remote interchain token deployment without the same minter', async () => { const gasValue = 1234; + const mintAmount = 0; const salt = keccak256('0x1245'); tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); - await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, mintAmount, wallet.address)) + const minter = wallet.address; + + await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, mintAmount, minter)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, minter, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs( - tokenId, - expectedTokenManagerAddress, - NATIVE_INTERCHAIN_TOKEN, - validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), - ); + .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, (params) => { + const [operator, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(operator.toLowerCase()).to.equal(minter.toLowerCase()); + expectNonZeroAddress(tokenAddress_); + return true; + }); // Get token address and check roles/transfers // const tokenAddress = await tokenManager.tokenAddress(); @@ -525,7 +527,7 @@ describe('InterchainTokenFactory', () => { destinationChain, gasValue, { - value: gasValue, + value: gasValue * 10 ** 10, }, ), ) @@ -538,7 +540,7 @@ describe('InterchainTokenFactory', () => { await expect( tokenFactory[DEPLOY_REMOTE_INTERCHAIN_TOKEN](salt, destinationChain, gasValue, { - value: gasValue, + value: gasValue * 10 ** 10, }), ) .to.emit(service, 'InterchainTokenDeploymentStarted') @@ -550,7 +552,7 @@ describe('InterchainTokenFactory', () => { await expect( tokenFactory.deployRemoteInterchainTokenWithMinter(salt, AddressZero, destinationChain, '0x', gasValue, { - value: gasValue, + value: gasValue * 10 ** 10, }), ) .to.emit(service, 'InterchainTokenDeploymentStarted') @@ -578,6 +580,19 @@ describe('InterchainTokenFactory', () => { ); }); + it('Should revert when deploying an interchain token with initial supply', async () => { + const salt = getRandomBytes32(); + const tokenName = 'name'; + const tokenDecimals = 9; + const initailSupply = 1000; + + await expectRevert( + (gasOptions) => tokenFactory.deployInterchainToken(salt, tokenName, '', tokenDecimals, initailSupply, minter, gasOptions), + tokenFactory, + 'InitialSupplyUnsupported', + ); + }); + it('Should revert on remote interchain token deployment with invalid token symbol', async () => { const salt = getRandomBytes32(); const tokenName = 'name'; @@ -591,13 +606,13 @@ describe('InterchainTokenFactory', () => { }); it('Should revert on remote interchain token deployment if destination chain is not trusted', async () => { + const salt = getRandomBytes32(); const tokenName = 'Token Name'; const tokenSymbol = 'TN'; - const tokenDecimals = 13; - const salt = getRandomBytes32(); + const tokenDecimals = 8; await tokenFactory - .deployInterchainToken(salt, tokenName, tokenSymbol, tokenDecimals, 0, wallet.address) + .deployInterchainToken(salt, tokenName, tokenSymbol, tokenDecimals, 0, wallet.address, { gasLimit: 1000000 }) .then((tx) => tx.wait()); await expectRevert( @@ -630,13 +645,8 @@ describe('InterchainTokenFactory', () => { before(async () => { salt = getRandomBytes32(); tokenId = await tokenFactory.linkedTokenId(wallet.address, salt); - token = await deployContract(wallet, 'TestInterchainTokenStandard', [ - tokenName, - tokenSymbol, - tokenDecimals, - service.address, - tokenId, - ]); + const [tokenAddress] = await createHtsToken(hederaClient, hederaPk, name, symbol, decimals, 0); + token = await getContractAt('IERC20Named', tokenAddress, wallet); factorySalt = await tokenFactory.linkedTokenDeploySalt(wallet.address, salt); }); @@ -746,13 +756,13 @@ describe('InterchainTokenFactory', () => { expect(await tokenManager.isFlowLimiter(service.address)).to.be.true; const tokenAddress = await service.registeredTokenAddress(tokenId); - expect(tokenAddress).to.eq(token.address); + expect(tokenAddress.toLowerCase()).to.eq(token.address.toLowerCase()); tokenManagerProxy = await getContractAt('TokenManagerProxy', tokenManagerAddress, wallet); const [implementation, tokenAddressFromProxy] = await tokenManagerProxy.getImplementationTypeAndTokenAddress(); expect(implementation).to.eq(LOCK_UNLOCK); - expect(tokenAddressFromProxy).to.eq(token.address); + expect(tokenAddressFromProxy.toLowerCase()).to.eq(token.address.toLowerCase()); }); it('Should revert when linking a token twice', async () => { @@ -781,7 +791,7 @@ describe('InterchainTokenFactory', () => { ); }); - it('Should register a token with mint_burn type', async () => { + it.skip('Should register a token with mint_burn type [unsupported]', async () => { const salt = getRandomBytes32(); const tokenId = await tokenFactory.linkedTokenId(wallet.address, salt); const tokenManagerAddress = await service.tokenManagerAddress(tokenId); @@ -796,14 +806,7 @@ describe('InterchainTokenFactory', () => { const tx = tokenFactory.registerCustomToken(salt, token.address, MINT_BURN, wallet.address); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - await expect(tx) - .to.emit(service, 'TokenManagerDeployed') - .withArgs( - tokenId, - expectedTokenManagerAddress, - MINT_BURN, - validateTokenManagerParams('MINT_BURN', wallet.address, undefined, undefined, undefined, token.address), - ); + await expect(tx).to.emit(service, 'TokenManagerDeployed').withArgs(tokenId, expectedTokenManagerAddress, MINT_BURN, params); expect(tokenManagerAddress).to.not.equal(AddressZero); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); @@ -823,7 +826,7 @@ describe('InterchainTokenFactory', () => { expect(tokenAddressFromProxy).to.eq(token.address); }); - it('Should register a token with mint_burn_from type', async () => { + it.skip('Should register a token with mint_burn_from type [unsupported]', async () => { const salt = getRandomBytes32(); const tokenId = await tokenFactory.linkedTokenId(wallet.address, salt); const tokenManagerAddress = await service.tokenManagerAddress(tokenId); @@ -919,17 +922,11 @@ describe('InterchainTokenFactory', () => { async function deployAndRegisterToken() { salt = getRandomBytes32(); - token = await deployContract(wallet, 'TestInterchainTokenStandard', [ - name, - symbol, - decimals, - service.address, - getRandomBytes32(), - ]); + const [tokenAddress] = await createHtsToken(hederaClient, hederaPk, name, symbol, decimals, 0); + token = await getContractAt('IERC20Named', tokenAddress, wallet); tokenId = await tokenFactory.linkedTokenId(wallet.address, salt); await tokenFactory.registerCustomToken(salt, token.address, tokenManagerType, operator).then((tx) => tx.wait()); - await token.setTokenId(tokenId).then((tx) => tx.wait()); } it('Should initialize a remote custom token manager deployment', async () => { @@ -950,7 +947,9 @@ describe('InterchainTokenFactory', () => { await expect( reportGas( - tokenFactory.linkToken(salt, destinationChain, remoteTokenAddress, type, minter, gasValue, { value: gasValue }), + tokenFactory.linkToken(salt, destinationChain, remoteTokenAddress, type, minter, gasValue, { + value: gasValue * 10 ** 10, + }), 'Send deployTokenManager to remote chain', ), ) @@ -971,7 +970,7 @@ describe('InterchainTokenFactory', () => { .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, payload); }); - it('Should revert on a remote custom token manager deployment if the token manager does does not exist', async () => { + it('Should revert on a remote custom token manager deployment if the token manager does not exist', async () => { const salt = getRandomBytes32(); const tokenId = await service.interchainTokenId(wallet.address, salt); const tokenAddress = '0x1234'; @@ -979,7 +978,7 @@ describe('InterchainTokenFactory', () => { const type = LOCK_UNLOCK; await expect( - tokenFactory.linkToken(salt, destinationChain, tokenAddress, type, minter, gasValue, { value: gasValue }), + tokenFactory.linkToken(salt, destinationChain, tokenAddress, type, minter, gasValue, { value: gasValue * 10 ** 10 }), ).to.be.revertedWithCustomError(service, 'TokenManagerDoesNotExist', [tokenId]); }); @@ -995,7 +994,7 @@ describe('InterchainTokenFactory', () => { (gasOptions) => tokenFactory.linkToken(salt, destinationChain, tokenAddress, type, minter, gasValue, { ...gasOptions, - value: gasValue, + value: gasValue * 10 ** 10, }), service, 'Pause', diff --git a/test/InterchainTokenService.js b/test/InterchainTokenService.js index 3fb5fac8..40ed0795 100644 --- a/test/InterchainTokenService.js +++ b/test/InterchainTokenService.js @@ -46,32 +46,12 @@ const { INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE, } = require('./constants'); -const { createHtsToken } = require('../scripts/create-hts-token'); - -const { Client: HederaClient, PrivateKey: HederaPrivateKey, AccountId: HederaAccountId } = require('@hashgraph/sdk'); - -const hederaConsensusUrl = network.config.consensusUrl; -const hederaPk = HederaPrivateKey.fromStringECDSA(network.config.operatorKey); -const hederaOperatorId = HederaAccountId.fromString(network.config.operatorId); -const hederaNodeId = HederaAccountId.fromString(network.config.nodeId); - -const hederaConsensusHost = hederaConsensusUrl.replace('http://', '').replace('https://', ''); -const hederaClient = HederaClient.forNetwork({ - [hederaConsensusHost]: hederaNodeId, -}); -hederaClient.setOperator(hederaOperatorId, hederaPk); - -console.log(` Using Hedera Client Configuration:`); -console.log(`\tMirror Node URL: ${network.config.url}`); -console.log(`\tConsensus URL: ${hederaConsensusUrl}`); -console.log(`\tOperator PK: ${network.config.operatorKey}`); -console.log(`\tOperator ID: ${hederaOperatorId.toString()}`); -console.log(`\tOperator Address: ${hederaOperatorId.toSolidityAddress()}`); -console.log(`\tNode ID: ${hederaNodeId.toString()}`); +const { createHtsToken } = require('../scripts/create-hts-token.js'); +const { hederaClientFromHardhatConfig } = require('../scripts/hedera-client.js'); const reportGas = gasReporter('Interchain Token Service'); -describe.only('Interchain Token Service', () => { +describe('Interchain Token Service', () => { let wallet, otherWallet; let service, gateway, gasService, testErc20Token; @@ -81,6 +61,13 @@ describe.only('Interchain Token Service', () => { let tokenManager; let tokenHandler; + let hederaClient, hederaPk; + before(() => { + const hederaClientInfo = hederaClientFromHardhatConfig(network.config); + hederaClient = hederaClientInfo.hederaClient; + hederaPk = hederaClientInfo.hederaPk; + }); + const chainName = 'Test'; const deploymentKey = 'InterchainTokenService'; const factoryDeploymentKey = 'factoryKey'; diff --git a/test/utils.js b/test/utils.js index bc08296e..931d1fe0 100644 --- a/test/utils.js +++ b/test/utils.js @@ -37,37 +37,6 @@ const expectNonZeroAddress = (v) => { return expect(v).to.be.a('string') && v !== ethers.constants.AddressZero && v !== ''; }; -const validateTokenManagerParams = ( - tokenManagerType, - expectedOperator, - expectedName, - expectedSymbol, - expectedDecimals, - expectedTokenAddress, -) => { - return (params) => { - if (tokenManagerType === 'NATIVE_INTERCHAIN_TOKEN') { - // For native interchain tokens: abi.encode(operator, name, symbol, decimals, tokenCreatePrice) - const [operator, name, symbol, decimals, price] = defaultAbiCoder.decode( - ['bytes', 'string', 'string', 'uint8', 'uint256'], - params, - ); - expect(operator).to.equal(expectedOperator); - expect(name).to.equal(expectedName); - expect(symbol).to.equal(expectedSymbol); - expect(decimals).to.equal(expectedDecimals); - expect(price).to.be.a('number'); - } else { - // For other token manager types: abi.encode(operator, tokenAddress) - const [operator, tokenAddress] = defaultAbiCoder.decode(['bytes', 'address'], params); - expect(operator).to.equal(expectedOperator); - expect(tokenAddress).to.equal(expectedTokenAddress); - } - - return true; - }; -}; - const expectRevert = async (txFunc, contract, error, args) => { if (network.config.skipRevertTests || contract === undefined) { await expect(txFunc(getGasOptions())).to.be.reverted; @@ -292,7 +261,6 @@ module.exports = { getGasOptions, expectRevert, expectNonZeroAddress, - validateTokenManagerParams, getPayloadAndProposalHash, waitFor, gasReporter, From b97bb76d6122e734d066bd74a5c2c422110c328a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 21 Jul 2025 19:56:17 +0200 Subject: [PATCH 35/49] skip ERC20 tests --- test/ERC20.js | 2 +- test/ERC20Permit.js | 2 +- test/InterchainTokenFactory.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/ERC20.js b/test/ERC20.js index 4be1f595..e4e6cc82 100644 --- a/test/ERC20.js +++ b/test/ERC20.js @@ -9,7 +9,7 @@ const { expect } = require('chai'); const { getRandomBytes32, expectRevert } = require('./utils'); const { deployContract } = require('../scripts/deploy'); -describe('ERC20', () => { +describe.skip('ERC20', () => { let interchainToken, interchainTokenDeployer; const name = 'tokenName'; diff --git a/test/ERC20Permit.js b/test/ERC20Permit.js index e74639d9..fe942f1d 100644 --- a/test/ERC20Permit.js +++ b/test/ERC20Permit.js @@ -10,7 +10,7 @@ const { expect } = require('chai'); const { getRandomBytes32, expectRevert, getChainId } = require('./utils'); const { deployContract } = require('../scripts/deploy'); -describe('ERC20 Permit', () => { +describe.skip('ERC20 Permit', () => { let interchainToken, interchainTokenDeployer; const name = 'tokenName'; diff --git a/test/InterchainTokenFactory.js b/test/InterchainTokenFactory.js index 6e15de05..02045421 100644 --- a/test/InterchainTokenFactory.js +++ b/test/InterchainTokenFactory.js @@ -39,7 +39,7 @@ const { hederaClientFromHardhatConfig } = require('../scripts/hedera-client.js') const reportGas = gasReporter('Interchain Token Factory'); -describe.only('InterchainTokenFactory', () => { +describe('InterchainTokenFactory', () => { let wallet, otherWallet; let service, gateway, gasService, tokenFactory; const chainName = 'Test'; From 6bdd53e6cad754372cda8683c460597fe2ff9b8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 21 Jul 2025 22:39:10 +0200 Subject: [PATCH 36/49] fix canonical interchain token full flow tests --- test/InterchainTokenServiceFullFlow.js | 186 ++++++++++++++++++------- 1 file changed, 136 insertions(+), 50 deletions(-) diff --git a/test/InterchainTokenServiceFullFlow.js b/test/InterchainTokenServiceFullFlow.js index f069e220..ae154ac0 100644 --- a/test/InterchainTokenServiceFullFlow.js +++ b/test/InterchainTokenServiceFullFlow.js @@ -2,7 +2,7 @@ const chai = require('chai'); const { expect } = chai; -const { ethers } = require('hardhat'); +const { ethers, network } = require('hardhat'); const { AddressZero } = ethers.constants; const { @@ -22,7 +22,6 @@ const { encodeLinkTokenMessage, encodeRegisterTokenMetadataMessage, expectNonZeroAddress, - validateTokenManagerParams, } = require('./utils'); const { deployAll, deployContract } = require('../scripts/deploy'); const { approveContractCall } = require('../scripts/utils'); @@ -39,7 +38,10 @@ const { INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE, } = require('./constants'); -describe('Interchain Token Service Full Flow', () => { +const { createHtsToken } = require('../scripts/create-hts-token.js'); +const { hederaClientFromHardhatConfig } = require('../scripts/hedera-client.js'); + +describe.only('Interchain Token Service Full Flow', () => { let wallet; let service, gateway, gasService, tokenFactory, tokenId; const name = 'tokenName'; @@ -48,6 +50,13 @@ describe('Interchain Token Service Full Flow', () => { const decimals = 6; const chainName = 'Test'; + let hederaClient, hederaPk; + before(() => { + const hederaClientInfo = hederaClientFromHardhatConfig(network.config); + hederaClient = hederaClientInfo.hederaClient; + hederaPk = hederaClientInfo.hederaPk; + }); + before(async () => { const wallets = await ethers.getSigners(); wallet = wallets[0]; @@ -62,28 +71,33 @@ describe('Interchain Token Service Full Flow', () => { * - Deploy Canonical Interchain token to each remote chain via the factory * - Transfer tokens via ITS between chains after deployment */ + // Hedera ✅ describe('Canonical Interchain Token', () => { - let token; + let erc20TokenId, htsTokenId; + let erc20Token, htsToken; const gasValues = [1234, 5678]; const tokenCap = 1e9; const transferAmount = 1e6; before(async () => { // Any ERC20 can be used here - token = await deployContract(wallet, 'TestMintableBurnableERC20', [name, symbol, decimals]); - await token.mint(wallet.address, tokenCap + transferAmount).then((tx) => tx.wait()); + erc20Token = await deployContract(wallet, 'TestMintableBurnableERC20', [name, symbol, decimals]); + await erc20Token.mint(wallet.address, tokenCap + transferAmount).then((tx) => tx.wait()); + + const [htsTokenAddress] = await createHtsToken(hederaClient, hederaPk, name, symbol, decimals, tokenCap); + htsToken = await getContractAt('IERC20Named', htsTokenAddress, wallet); }); - it('Should register the token and initiate its deployment on other chains', async () => { - tokenId = await tokenFactory.canonicalInterchainTokenId(token.address); + it('Should register the token and initiate its deployment on other chains [ERC20]', async () => { + const tokenId = await tokenFactory.canonicalInterchainTokenId(erc20Token.address); - let tx = await tokenFactory.populateTransaction.registerCanonicalInterchainToken(token.address); + let tx = await tokenFactory.populateTransaction.registerCanonicalInterchainToken(erc20Token.address); const calls = [tx.data]; let value = 0; for (const i in otherChains) { tx = await tokenFactory.populateTransaction[DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN]( - token.address, + erc20Token.address, otherChains[i], gasValues[i], ); @@ -91,13 +105,13 @@ describe('Interchain Token Service Full Flow', () => { value += gasValues[i]; } - const params = defaultAbiCoder.encode(['bytes', 'address'], ['0x', token.address]); + const params = defaultAbiCoder.encode(['bytes', 'address'], ['0x', erc20Token.address]); const payloads = otherChains.map((chain) => encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, '0x')), ); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - const multicall = await tokenFactory.multicall(calls, { value }); + const multicall = await tokenFactory.multicall(calls, { value: value * 10 ** 10 }); await expect(multicall) .to.emit(service, 'TokenManagerDeployed') @@ -114,6 +128,52 @@ describe('Interchain Token Service Full Flow', () => { .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[1].payloadHash, gasValues[1], wallet.address) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[1].payloadHash, payloads[1].payload); + + erc20TokenId = tokenId; + }); + + it('Should register the token and initiate its deployment on other chains [HTS]', async () => { + const tokenId = await tokenFactory.canonicalInterchainTokenId(htsToken.address); + + let tx = await tokenFactory.populateTransaction.registerCanonicalInterchainToken(htsToken.address); + const calls = [tx.data]; + let value = 0; + + for (const i in otherChains) { + tx = await tokenFactory.populateTransaction[DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN]( + htsToken.address, + otherChains[i], + gasValues[i], + ); + calls.push(tx.data); + value += gasValues[i]; + } + + const params = defaultAbiCoder.encode(['bytes', 'address'], ['0x', htsToken.address]); + const payloads = otherChains.map((chain) => + encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, '0x')), + ); + const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); + + const multicall = await tokenFactory.multicall(calls, { value: value * 10 ** 10 }); + + await expect(multicall) + .to.emit(service, 'TokenManagerDeployed') + .withArgs(tokenId, expectedTokenManagerAddress, LOCK_UNLOCK, params) + .and.to.emit(service, 'InterchainTokenDeploymentStarted') + .withArgs(tokenId, name, symbol, decimals, '0x', otherChains[0]) + .and.to.emit(gasService, 'NativeGasPaidForContractCall') + .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[0].payloadHash, gasValues[0], wallet.address) + .and.to.emit(gateway, 'ContractCall') + .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[0].payloadHash, payloads[0].payload) + .and.to.emit(service, 'InterchainTokenDeploymentStarted') + .withArgs(tokenId, name, symbol, decimals, '0x', otherChains[1]) + .and.to.emit(gasService, 'NativeGasPaidForContractCall') + .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[1].payloadHash, gasValues[1], wallet.address) + .and.to.emit(gateway, 'ContractCall') + .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[1].payloadHash, payloads[1].payload); + + htsTokenId = tokenId; }); describe('Interchain transfer', () => { @@ -122,31 +182,58 @@ describe('Interchain Token Service Full Flow', () => { const destChain = otherChains[0]; const gasValue = 6789; - it('Should send some tokens to another chain via ITS', async () => { + it('Should send some tokens to another chain via ITS [ERC20]', async () => { const { payload, payloadHash } = encodeSendHubMessage( destChain, - encodeInterchainTransferMessage(tokenId, arrayify(wallet.address), destAddress, amount, '0x'), + encodeInterchainTransferMessage(erc20TokenId, arrayify(wallet.address), destAddress, amount, '0x'), ); - const tokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManagerAddress = await service.tokenManagerAddress(erc20TokenId); // Canonical (pre-existing) token requires an approval due to locking - await expect(token.approve(service.address, amount)) - .to.emit(token, 'Approval') + await expect(erc20Token.approve(service.address, amount)) + .to.emit(erc20Token, 'Approval') .withArgs(wallet.address, service.address, amount); await expect( - service[INTERCHAIN_TRANSFER](tokenId, destChain, destAddress, amount, { - value: gasValue, + service[INTERCHAIN_TRANSFER](erc20TokenId, destChain, destAddress, amount, { + value: gasValue * 10 ** 10, }), ) - .and.to.emit(token, 'Transfer') + .and.to.emit(erc20Token, 'Transfer') .withArgs(wallet.address, tokenManagerAddress, amount) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, payload) .and.to.emit(gasService, 'NativeGasPaidForContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, gasValue, wallet.address) .to.emit(service, 'InterchainTransfer') - .withArgs(tokenId, wallet.address, destChain, destAddress, amount, HashZero); + .withArgs(erc20TokenId, wallet.address, destChain, destAddress, amount, HashZero); + }); + + it('Should send some tokens to another chain via ITS [HTS]', async () => { + const { payload, payloadHash } = encodeSendHubMessage( + destChain, + encodeInterchainTransferMessage(htsTokenId, arrayify(wallet.address), destAddress, amount, '0x'), + ); + const tokenManagerAddress = await service.tokenManagerAddress(htsTokenId); + + // Canonical (pre-existing) token requires an approval due to locking + await expect(htsToken.approve(service.address, amount)) + .to.emit(htsToken, 'Approval') + .withArgs(wallet.address, service.address, amount); + + await expect( + service[INTERCHAIN_TRANSFER](htsTokenId, destChain, destAddress, amount, { + value: gasValue * 10 ** 10, + }), + ) + .and.to.emit(htsToken, 'Transfer') + .withArgs(wallet.address, tokenManagerAddress, amount) + .and.to.emit(gateway, 'ContractCall') + .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, payload) + .and.to.emit(gasService, 'NativeGasPaidForContractCall') + .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, gasValue, wallet.address) + .to.emit(service, 'InterchainTransfer') + .withArgs(htsTokenId, wallet.address, destChain, destAddress, amount, HashZero); }); }); }); @@ -174,15 +261,15 @@ describe('Interchain Token Service Full Flow', () => { const tokenManagerAddress = await service.tokenManagerAddress(tokenId); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); const tokenAddress = await tokenManager.tokenAddress(); - token = await getContractAt('InterchainToken', tokenAddress, wallet); + token = await getContractAt('IERC20Named', tokenAddress, wallet); }); it('Should register the token and initiate its deployment on other chains', async () => { const totalMint = tokenCap; + const minter = wallet.address; // Deploy a new Interchain token on the local chain. - // The initial mint occurs on the factory contract, so it can be moved to other chains within the same multicall. - let tx = await tokenFactory.populateTransaction.deployInterchainToken(salt, name, symbol, decimals, totalMint, wallet.address); + let tx = await tokenFactory.populateTransaction.deployInterchainToken(salt, name, symbol, decimals, totalMint, minter); const calls = [tx.data]; let value = 0; @@ -190,7 +277,7 @@ describe('Interchain Token Service Full Flow', () => { for (const i in otherChains) { tx = await tokenFactory.populateTransaction['deployRemoteInterchainTokenWithMinter(bytes32,address,string,bytes,uint256)']( salt, - wallet.address, + minter, otherChains[i], '0x', gasValues[i], @@ -199,25 +286,24 @@ describe('Interchain Token Service Full Flow', () => { value += gasValues[i]; } - const params = defaultAbiCoder.encode(['bytes', 'address'], [tokenFactory.address, token.address]); const payloads = otherChains.map((chain) => - encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, wallet.address)), + encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, minter)), ); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); const multicall = await tokenFactory.multicall(calls, { value }); await expect(multicall) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, minter, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs( - tokenId, - expectedTokenManagerAddress, - NATIVE_INTERCHAIN_TOKEN, - validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), - ) + .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, (params) => { + const [operator, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(operator.toLowerCase()).to.equal(minter.toLowerCase()); + expectNonZeroAddress(tokenAddress_); + return true; + }) .and.to.emit(service, 'InterchainTokenDeploymentStarted') - .withArgs(tokenId, name, symbol, decimals, wallet.address.toLowerCase(), otherChains[0]) + .withArgs(tokenId, name, symbol, decimals, minter.toLowerCase(), otherChains[0]) .and.to.emit(gasService, 'NativeGasPaidForContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[0].payloadHash, gasValues[0], wallet.address) .and.to.emit(gateway, 'ContractCall') @@ -265,7 +351,7 @@ describe('Interchain Token Service Full Flow', () => { await expect( service[INTERCHAIN_TRANSFER](tokenId, destChain, destAddress, amount, { - value: gasValue, + value: gasValue * 10 ** 10, }), ) .and.to.emit(token, 'Transfer') @@ -491,7 +577,7 @@ describe('Interchain Token Service Full Flow', () => { await expect( service[INTERCHAIN_TRANSFER](tokenId, destChain, destAddress, amount, { - value: gasValue, + value: gasValue * 10 ** 10, }), ) .and.to.emit(token, 'Transfer') @@ -529,7 +615,7 @@ describe('Interchain Token Service Full Flow', () => { const tokenManagerAddress = await service.tokenManagerAddress(tokenId); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); const tokenAddress = await tokenManager.tokenAddress(); - token = await getContractAt('InterchainToken', tokenAddress, wallet); + token = await getContractAt('IERC20Named', tokenAddress, wallet); }); // To get a fixed supply InterchainToken, simply set the minter to address(0) during deployment. @@ -547,9 +633,9 @@ describe('Interchain Token Service Full Flow', () => { value += gasValues[i]; } - const params = defaultAbiCoder.encode(['bytes', 'address'], [tokenFactory.address, token.address]); + const minter = '0x'; const payloads = otherChains.map((chain) => - encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, '0x')), + encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, minter)), ); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); @@ -558,12 +644,12 @@ describe('Interchain Token Service Full Flow', () => { .to.emit(service, 'InterchainTokenDeployed') .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs( - tokenId, - expectedTokenManagerAddress, - NATIVE_INTERCHAIN_TOKEN, - validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), - ) + .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, (params) => { + const [operator, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(operator.toLowerCase()).to.equal(minter.toLowerCase()); + expectNonZeroAddress(tokenAddress_); + return true; + }) .and.to.emit(service, 'InterchainTokenDeploymentStarted') .withArgs(tokenId, name, symbol, decimals, '0x', otherChains[0]) .and.to.emit(gasService, 'NativeGasPaidForContractCall') @@ -659,7 +745,7 @@ describe('Interchain Token Service Full Flow', () => { const tokenManagerAddress = await service.tokenManagerAddress(tokenId); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); const tokenAddress = await tokenManager.tokenAddress(); - token = await getContractAt('InterchainToken', tokenAddress, wallet); + token = await getContractAt('IERC20Named', tokenAddress, wallet); executable = await deployContract(wallet, 'TestInterchainExecutable', [service.address]); }); @@ -747,11 +833,11 @@ describe('Interchain Token Service Full Flow', () => { tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); // Deploy token first to get address - await tokenFactory.deployInterchainToken(salt, name, symbol, decimals, mintAmount, wallet.address); + await tokenFactory.deployInterchainToken(salt, name, symbol, decimals, 0, wallet.address); const tokenManagerAddress = await service.tokenManagerAddress(tokenId); const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); const tokenAddress = await tokenManager.tokenAddress(); - token = await getContractAt('InterchainToken', tokenAddress, wallet); + token = await getContractAt('IERC20Named', tokenAddress, wallet); executable = await deployContract(wallet, 'TestInterchainExecutable', [service.address]); @@ -843,7 +929,7 @@ describe('Interchain Token Service Full Flow', () => { await expect( service[INTERCHAIN_TRANSFER](tokenId, destChain, destAddress, amount, { - value: gasValue, + value: gasValue * 10 ** 10, }), ) .and.to.emit(token, 'Transfer') From 84130d12c3a5876590ce8b6bcba22b089cc3a30f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Tue, 22 Jul 2025 17:34:15 +0200 Subject: [PATCH 37/49] fix some full flow tests + IHRC719 interface for executable + docs --- contracts/hedera/IHRC719.sol | 21 ++ contracts/hedera/README.md | 26 +- contracts/test/TestInterchainExecutable.sol | 8 + scripts/create-hts-token.js | 2 - scripts/hedera-client.js | 11 +- scripts/token-associate.js | 41 ++- test/InterchainTokenServiceFullFlow.js | 346 +++++++++++--------- test/constants.js | 2 + 8 files changed, 284 insertions(+), 173 deletions(-) create mode 100644 contracts/hedera/IHRC719.sol diff --git a/contracts/hedera/IHRC719.sol b/contracts/hedera/IHRC719.sol new file mode 100644 index 00000000..bad0752d --- /dev/null +++ b/contracts/hedera/IHRC719.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.0; + +// Copied from https://github.com/hashgraph/hedera-smart-contracts/blob/b4365714dccdd7e949c84fb325e8e878c60ddc91/contracts/system-contracts/hedera-token-service/IHRC719.sol +// See more here: https://hips.hedera.com/hip/hip-719 +interface IHRC719 { + /// @notice Associates the calling account with the token + /// @dev This function allows an account to opt-in to receive the token + /// @return responseCode The response code indicating the result of the operation + function associate() external returns (uint256 responseCode); + + /// @notice Dissociates the calling account from the token + /// @dev This function allows an account to opt-out from receiving the token + /// @return responseCode The response code indicating the result of the operation + function dissociate() external returns (uint256 responseCode); + + /// @notice Checks if the calling account is associated with the token + /// @dev This function returns the association status of the calling account + /// @return associated True if the account is associated, false otherwise + function isAssociated() external view returns (bool associated); +} diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index a2b5f42e..351ff29e 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -18,7 +18,7 @@ The responsibility of keeping ITS funded on the WHBAR contract lies with the dep ### Deploying with Initial Supply -Initial supply is not supported when deploying a new Interchain Token on Hedera. To receive tokens, an account needs to previously associate with the token, thus it cannot immediately receive tokens after creation. +Initial supply is currently not supported when deploying a new Interchain Token on Hedera. To receive tokens, an account needs to previously associate with the token, thus it cannot immediately receive tokens after creation. Associating an account using a smart contract [is not supported](https://hedera.com/blog/get-ready-for-the-updated-security-model-of-the-hedera-smart-contract-service-by-july-2023). However there is an [Automatic Token Associations](https://docs.hedera.com/hedera/core-concepts/accounts/account-properties#automatic-token-associations) feature in Hedera, which allows accounts to approve a number of automatic token associations (airdrops) without needing to explicitly associate with each token. The only way to reliably tell if an account can receive a new token is by reading the property for the account and checking if the value is `-1` (unlimited associations). @@ -28,16 +28,34 @@ Another approach is to have the Relayer [check](https://docs.hedera.com/hedera/s This behaviour can be changed in the future by upgrading the `InterchainTokenFactory` contract to support initial supply, but for now it is not supported. +### Hedera Tokens as ERC20 + +Hedera tokens support so-called facades, which allow them to be used as ERC20 tokens. A number of standard methods are supported, like `name`, `balanceOf`, `transfer`, `transferFrom`, `approve`, `allowance`, etc. See [hip-218](https://hips.hedera.com/hip/hip-218) and [hip-376](https://hips.hedera.com/hip/hip-376). `mint` and `burn` are not supported. + +Unlike a regular ERC20 token, HTS tokens don't emit `Transfer` to and from the zero address on mint and burn. + +Association-related methods are also supported, like `associate`, `dissociate`, and `isAssociated`. See [hip-719](https://hips.hedera.com/hip/hip-719) for more details. + +### `InterchainTokenExecutable` + +To receive tokens, an `InterchainTokenExecutable` contract needs to previously be associated with the token. The mechanism is left to the end contract, but one possible way is to have a function like so: + +```solidity +function associateWithToken(address tokenAddress_) external { + IHRC719(tokenAddress_).associate(); +} +``` + +It uses the [`IHRC719`](./IHRC719.sol) interface to call the `associate` method on the token contract, which will associate the contract with the token. There is no need to interact with the `HTS` library or the precompile directly, as the `IHRC719` interface abstracts that away. + ### Hedera-related Notes - Hedera contract and token "rent" and "expiry" are disabled on Hedera and not supported in this implementation. -- `IERC20` standard methods are supported, including `allowance` and `approve`. See [hip-218](https://hips.hedera.com/hip/hip-218) and [hip-376](https://hips.hedera.com/hip/hip-376). `mint` and `burn` are not supported. -- Unlike an EVM token, the [maximum supply for an HTS token is 2^63](https://docs.hedera.com/hedera/sdks-and-apis/sdks/token-service/define-a-token#token-properties). There's planned support for decimal translation in ITS. +- Unlike a regular ERC20 token, the [maximum supply for an HTS token is 2^63](https://docs.hedera.com/hedera/sdks-and-apis/sdks/token-service/define-a-token#token-properties). There's planned support for decimal translation in ITS. - HTS tokens with the following keys are not supported by ITS: `kycKey`, `wipeKey`, `freezeKey`, `pauseKey`. `adminKey` can update existing keys, but cannot add new keys if they were not set during the creation of the token ([see here](https://docs.hedera.com/hedera/sdks-and-apis/sdks/token-service/update-a-token)). - `HTS.sol` library is a subset of the Hedera provided system library [HederaTokenService](https://github.com/hashgraph/hedera-smart-contracts/blob/bc3a549c0ca062c51b0045fd1916fdaa0558a360/contracts/system-contracts/hedera-token-service/HederaTokenService.sol). Functions are modified to revert instead of returning response codes. - Currently new tokens created via HTS EVM system contract can have **only one** Supply Key (Minter). - Currently new tokens created via HTS EVM system contract must have the Treasury be the creator of the token. -- `createFungibleToken` in `HTS.sol` uses `msg.value` to pay for token creation, alongside regular gas fee. - `WHBAR` contracts used can be found [here](https://docs.hedera.com/hedera/core-concepts/smart-contracts/wrapped-hbar-whbar#contract-deployments). ### ITS-related Notes diff --git a/contracts/test/TestInterchainExecutable.sol b/contracts/test/TestInterchainExecutable.sol index 1a10e574..4f68f756 100644 --- a/contracts/test/TestInterchainExecutable.sol +++ b/contracts/test/TestInterchainExecutable.sol @@ -4,6 +4,7 @@ pragma solidity ^0.8.0; import { InterchainTokenExpressExecutable } from '../executable/InterchainTokenExpressExecutable.sol'; import { IERC20 } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IERC20.sol'; +import { IHRC719 } from '../hedera/IHRC719.sol'; contract TestInterchainExecutable is InterchainTokenExpressExecutable { event MessageReceived( @@ -16,6 +17,8 @@ contract TestInterchainExecutable is InterchainTokenExpressExecutable { uint256 amount ); + event TokenAssociated(address tokenAddress); + constructor(address interchainTokenService_) InterchainTokenExpressExecutable(interchainTokenService_) {} string public lastMessage; @@ -34,4 +37,9 @@ contract TestInterchainExecutable is InterchainTokenExpressExecutable { emit MessageReceived(commandId, sourceChain, sourceAddress, receiver, message, tokenId, amount); IERC20(token).transfer(receiver, amount); } + + function associateWithToken(address tokenAddress_) external { + IHRC719(tokenAddress_).associate(); + emit TokenAssociated(tokenAddress_); + } } diff --git a/scripts/create-hts-token.js b/scripts/create-hts-token.js index 47c77b9d..9d575671 100644 --- a/scripts/create-hts-token.js +++ b/scripts/create-hts-token.js @@ -22,8 +22,6 @@ async function createHtsToken(hederaClient, operatorPk, name, symbol, decimals = const tokenId = tokenCreateRx.tokenId; const tokenAddress = `0x${tokenId.toSolidityAddress().toLowerCase()}`; - // console.log(`Token created: ${tokenId.toString()} (EVM Address: ${tokenAddress})`); - return [tokenAddress, tokenId]; } diff --git a/scripts/hedera-client.js b/scripts/hedera-client.js index 87fa46d4..1c8fa4c7 100644 --- a/scripts/hedera-client.js +++ b/scripts/hedera-client.js @@ -1,13 +1,13 @@ -const { Client: HederaClient, PrivateKey: HederaPrivateKey, AccountId: HederaAccountId } = require('@hashgraph/sdk'); +const { Client, PrivateKey, AccountId } = require('@hashgraph/sdk'); function hederaClientFromHardhatConfig(networkConfig) { const hederaConsensusUrl = networkConfig.consensusUrl; - const hederaPk = HederaPrivateKey.fromStringECDSA(networkConfig.operatorKey); - const hederaOperatorId = HederaAccountId.fromString(networkConfig.operatorId); - const hederaNodeId = HederaAccountId.fromString(networkConfig.nodeId); + const hederaPk = PrivateKey.fromStringECDSA(networkConfig.operatorKey); + const hederaOperatorId = AccountId.fromString(networkConfig.operatorId); + const hederaNodeId = AccountId.fromString(networkConfig.nodeId); const hederaConsensusHost = hederaConsensusUrl.replace('http://', '').replace('https://', ''); - const hederaClient = HederaClient.forNetwork({ + const hederaClient = Client.forNetwork({ [hederaConsensusHost]: hederaNodeId, }); hederaClient.setOperator(hederaOperatorId, hederaPk); @@ -17,7 +17,6 @@ function hederaClientFromHardhatConfig(networkConfig) { console.log(`\tConsensus URL: ${hederaConsensusUrl}`); console.log(`\tOperator PK: ${networkConfig.operatorKey}`); console.log(`\tOperator ID: ${hederaOperatorId.toString()}`); - console.log(`\tOperator Address: ${hederaOperatorId.toSolidityAddress()}`); console.log(`\tNode ID: ${hederaNodeId.toString()}`); return { hederaClient, hederaPk, hederaOperatorId }; diff --git a/scripts/token-associate.js b/scripts/token-associate.js index a313e682..3a205dc0 100644 --- a/scripts/token-associate.js +++ b/scripts/token-associate.js @@ -1,17 +1,6 @@ require('dotenv').config(); -const { Client, PrivateKey, TokenAssociateTransaction, TokenId, AccountId } = require('@hashgraph/sdk'); - -// Configure accounts and client -const accPk = PrivateKey.fromStringECDSA(process.env.HEDERA_PK); -console.log('Account EVM address: 0x%s', accPk.publicKey.toEvmAddress()); - -// const accId = accPk.toAccountId(0, 0); -const accId = AccountId.fromString('0.0.1012'); -console.log('Account ID: ', accId.toString()); - -// TODO allow change from local node to testnet/mainnet -const client = Client.forLocalNode().setOperator(accId, accPk); +const { Client, PrivateKey, TokenAssociateTransaction, AccountAllowanceApproveTransaction, TokenId, AccountId } = require('@hashgraph/sdk'); /** * Convert EVM address to Hedera token ID format @@ -37,12 +26,24 @@ async function associateToken(client, tokenId, accountId, privateKey) { const submitTx = await signTx.execute(client); const receipt = await submitTx.getReceipt(client); - console.log('Token associated with account successfully'); - console.log('Receipt status:', receipt.status.toString()); + console.log(`Token ${tokenId.toSolidityAddress()} associated with account ${accountId.toSolidityAddress()} successfully`); return receipt; } +async function approveToken(client, ownerPrivateKey, tokenId, ownerId, spenderId, amount) { + const tx = new AccountAllowanceApproveTransaction().approveTokenAllowance(tokenId, ownerId, spenderId, amount); + + const signTx = await tx.sign(ownerPrivateKey); + const submitTx = await signTx.execute(client); + const receipt = await submitTx.getReceipt(client); + + console.log( + `Token allowance approved: ${amount} of token ${tokenId.toSolidityAddress()} from ${ownerId.toSolidityAddress()} to ${spenderId.toSolidityAddress()}`, + ); + return receipt; +} + // CLI functionality async function main() { const args = process.argv.slice(2); @@ -53,6 +54,17 @@ async function main() { process.exit(1); } + // Configure accounts and client + const accPk = PrivateKey.fromStringECDSA(process.env.HEDERA_PK); + console.log('Account EVM address: 0x%s', accPk.publicKey.toEvmAddress()); + + // const accId = accPk.toAccountId(0, 0); + const accId = AccountId.fromString('0.0.1012'); + console.log('Account ID: ', accId.toString()); + + // TODO allow change from local node to testnet/mainnet + const client = Client.forLocalNode().setOperator(accId, accPk); + const tokenEvmAddress = args[0]; try { @@ -74,6 +86,7 @@ async function main() { // Export functions for use as module module.exports = { associateToken, + approveToken, evmAddressToTokenId, }; diff --git a/test/InterchainTokenServiceFullFlow.js b/test/InterchainTokenServiceFullFlow.js index ae154ac0..a772337d 100644 --- a/test/InterchainTokenServiceFullFlow.js +++ b/test/InterchainTokenServiceFullFlow.js @@ -34,32 +34,41 @@ const { ITS_HUB_ADDRESS, DEPLOY_REMOTE_INTERCHAIN_TOKEN, DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN, + DEPLOY_REMOTE_INTERCHAIN_TOKEN_WITH_MINTER, INTERCHAIN_TRANSFER, INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE, + MAX_INT64, } = require('./constants'); const { createHtsToken } = require('../scripts/create-hts-token.js'); +const { evmAddressToTokenId, associateToken, approveToken } = require('../scripts/token-associate.js'); const { hederaClientFromHardhatConfig } = require('../scripts/hedera-client.js'); describe.only('Interchain Token Service Full Flow', () => { let wallet; let service, gateway, gasService, tokenFactory, tokenId; + let serviceHederaId; const name = 'tokenName'; const symbol = 'tokenSymbol'; const otherChains = ['chain 1', 'chain 2']; const decimals = 6; const chainName = 'Test'; - let hederaClient, hederaPk; + let hederaClient, hederaPk, hederaId; before(() => { const hederaClientInfo = hederaClientFromHardhatConfig(network.config); hederaClient = hederaClientInfo.hederaClient; hederaPk = hederaClientInfo.hederaPk; + hederaId = hederaClientInfo.hederaOperatorId; }); before(async () => { const wallets = await ethers.getSigners(); wallet = wallets[0]; + + const wallet1Balance = await wallet.getBalance(); + console.log(`\tWallet ${wallet.address} with ${ethers.utils.formatEther(wallet1Balance)} HBAR`); + ({ service, gateway, gasService, tokenFactory } = await deployAll(wallet, chainName, ITS_HUB_ADDRESS, otherChains)); }); @@ -246,6 +255,7 @@ describe.only('Interchain Token Service Full Flow', () => { * - Transfer tokens via ITS between chains after deployment * - Transfers mint/burn role from original deployer wallet to another address */ + // Hedera ✅ describe('New Interchain token', () => { let token; let tokenId; @@ -256,12 +266,12 @@ describe.only('Interchain Token Service Full Flow', () => { before(async () => { tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); - // Deploy token first to get address - await tokenFactory.deployInterchainToken(salt, name, symbol, decimals, 0, wallet.address); - const tokenManagerAddress = await service.tokenManagerAddress(tokenId); - const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); - const tokenAddress = await tokenManager.tokenAddress(); - token = await getContractAt('IERC20Named', tokenAddress, wallet); + // // Deploy token first to get address + // await tokenFactory.deployInterchainToken(salt, name, symbol, decimals, 0, wallet.address); + // const tokenManagerAddress = await service.tokenManagerAddress(tokenId); + // const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); + // const tokenAddress = await tokenManager.tokenAddress(); + // token = await getContractAt('IERC20Named', tokenAddress, wallet); }); it('Should register the token and initiate its deployment on other chains', async () => { @@ -269,7 +279,7 @@ describe.only('Interchain Token Service Full Flow', () => { const minter = wallet.address; // Deploy a new Interchain token on the local chain. - let tx = await tokenFactory.populateTransaction.deployInterchainToken(salt, name, symbol, decimals, totalMint, minter); + let tx = await tokenFactory.populateTransaction.deployInterchainToken(salt, name, symbol, decimals, 0, minter); const calls = [tx.data]; let value = 0; @@ -291,7 +301,7 @@ describe.only('Interchain Token Service Full Flow', () => { ); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - const multicall = await tokenFactory.multicall(calls, { value }); + const multicall = await tokenFactory.multicall(calls, { value: value * 10 ** 10 }); await expect(multicall) .to.emit(service, 'InterchainTokenDeployed') .withArgs(tokenId, expectNonZeroAddress, minter, name, symbol, decimals) @@ -315,9 +325,27 @@ describe.only('Interchain Token Service Full Flow', () => { .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[1].payloadHash, payloads[1].payload); + expect(await service.deployedTokenManager(tokenId)).to.equal(expectedTokenManagerAddress); + const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); + const tokenAddress = await tokenManager.tokenAddress(); + token = await getContractAt('IERC20Named', tokenAddress, wallet); + + // associate the wallet and mint + + await associateToken(hederaClient, evmAddressToTokenId(token.address), hederaId, hederaPk); + await (await tokenManager.mintToken(token.address, wallet.address, totalMint)).wait(); + expect(await token.balanceOf(wallet.address)).to.equal(totalMint); - expect(await service.deployedTokenManager(tokenId)).to.equal(expectedTokenManagerAddress); + // approve ITS and TM + + await expect(token.approve(service.address, MAX_INT64)) + .to.emit(token, 'Approval') + .withArgs(wallet.address, service.address, MAX_INT64); + + await expect(token.approve(tokenManager.address, MAX_INT64)) + .to.emit(token, 'Approval') + .withArgs(wallet.address, tokenManager.address, MAX_INT64); }); describe('Interchain transfer', () => { @@ -326,36 +354,17 @@ describe.only('Interchain Token Service Full Flow', () => { const destChain = otherChains[0]; const gasValue = 6789; - it('Should send some tokens to another chain via the token', async () => { - const { payload, payloadHash } = encodeSendHubMessage( - destChain, - encodeInterchainTransferMessage(tokenId, arrayify(wallet.address), destAddress, amount, '0x'), - ); - - await expect(token.interchainTransfer(destChain, destAddress, amount, '0x', { value: gasValue })) - .and.to.emit(token, 'Transfer') - .withArgs(wallet.address, AddressZero, amount) - .and.to.emit(gateway, 'ContractCall') - .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, payload) - .and.to.emit(gasService, 'NativeGasPaidForContractCall') - .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, gasValue, wallet.address) - .to.emit(service, 'InterchainTransfer') - .withArgs(tokenId, wallet.address, destChain, destAddress, amount, HashZero); - }); - it('Should send some tokens to another chain via ITS', async () => { const { payload, payloadHash } = encodeSendHubMessage( destChain, encodeInterchainTransferMessage(tokenId, arrayify(wallet.address), destAddress, amount, '0x'), ); - await expect( - service[INTERCHAIN_TRANSFER](tokenId, destChain, destAddress, amount, { - value: gasValue * 10 ** 10, - }), - ) - .and.to.emit(token, 'Transfer') - .withArgs(wallet.address, AddressZero, amount) + const tx = service[INTERCHAIN_TRANSFER](tokenId, destChain, destAddress, amount, { + value: gasValue * 10 ** 10, + }); + + await expect(tx) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, payload) .and.to.emit(gasService, 'NativeGasPaidForContractCall') @@ -386,18 +395,14 @@ describe.only('Interchain Token Service Full Flow', () => { encodeSendHubMessage(chain, encodeInterchainTransferMessage(tokenId, wallet.address, destAddress, amount, '0x')), ); - const multicall = await service.multicall(calls, { value }); + const multicall = await service.multicall(calls, { value: value * 10 ** 10 }); await expect(multicall) - .to.emit(token, 'Transfer') - .withArgs(wallet.address, AddressZero, amount) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[0].payloadHash, payloads[0].payload) .and.to.emit(gasService, 'NativeGasPaidForContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[0].payloadHash, gasValues[0], wallet.address) .and.to.emit(service, 'InterchainTransfer') .withArgs(tokenId, wallet.address, otherChains[0], destAddress, amount, HashZero) - .and.to.emit(token, 'Transfer') - .withArgs(wallet.address, AddressZero, amount) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[1].payloadHash, payloads[1].payload) .and.to.emit(gasService, 'NativeGasPaidForContractCall') @@ -414,23 +419,28 @@ describe.only('Interchain Token Service Full Flow', () => { const newAddress = new Wallet(getRandomBytes32()).address; const amount = 1234; - await expect(token.mint(newAddress, amount)).to.emit(token, 'Transfer').withArgs(AddressZero, newAddress, amount); - await expect(token.burn(newAddress, amount)).to.emit(token, 'Transfer').withArgs(newAddress, AddressZero, amount); + const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); + const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); + const tokenAddress = await tokenManager.tokenAddress(); - await expect(token.transferMintership(newAddress)) - .to.emit(token, 'RolesRemoved') + await expect(tokenManager.transferMintership(newAddress)) + .to.emit(tokenManager, 'RolesRemoved') .withArgs(wallet.address, 1 << MINTER_ROLE) - .to.emit(token, 'RolesAdded') + .to.emit(tokenManager, 'RolesAdded') .withArgs(newAddress, 1 << MINTER_ROLE); - await expectRevert((gasOptions) => token.mint(newAddress, amount, gasOptions), token, 'MissingRole', [ - wallet.address, - MINTER_ROLE, - ]); - await expectRevert((gasOptions) => token.burn(newAddress, amount, gasOptions), token, 'MissingRole', [ - wallet.address, - MINTER_ROLE, - ]); + await expectRevert( + (gasOptions) => tokenManager.mintToken(tokenAddress, newAddress, amount, gasOptions), + tokenManager, + 'MissingRole', + [wallet.address, MINTER_ROLE], + ); + await expectRevert( + (gasOptions) => tokenManager.burnToken(tokenAddress, newAddress, amount, gasOptions), + tokenManager, + 'MissingRole', + [wallet.address, MINTER_ROLE], + ); }); }); @@ -442,8 +452,9 @@ describe.only('Interchain Token Service Full Flow', () => { * - Give/transfer mint/burn permission to the corresponding token manager on each chain * - Transfer tokens via ITS between chains */ - describe('Pre-existing Token as Mint/Burn', () => { - let token; + // Hedera ✅ + describe('Pre-existing Token as Mint/Burn [ERC20]', () => { + let erc20Token; const otherChains = ['chain 1', 'chain 2']; const gasValues = [1234, 5678]; const registrationGasValue = 1234; @@ -451,20 +462,22 @@ describe.only('Interchain Token Service Full Flow', () => { const salt = getRandomBytes32(); before(async () => { - token = await deployContract(wallet, 'TestMintableBurnableERC20', [name, symbol, decimals]); + erc20Token = await deployContract(wallet, 'TestMintableBurnableERC20', [name, symbol, decimals]); tokenId = await tokenFactory.linkedTokenId(wallet.address, salt); - await token.mint(wallet.address, tokenCap).then((tx) => tx.wait()); + await erc20Token.mint(wallet.address, tokenCap).then((tx) => tx.wait()); }); it('Should register token metadata', async () => { - const { payload, payloadHash } = encodeRegisterTokenMetadataMessage(token.address, decimals); + const { payload, payloadHash } = encodeRegisterTokenMetadataMessage(erc20Token.address, decimals); // Register token metadata being linked from the source chain // Similarly, submit this registration from ITS contract of all chains for the corresponding token addresses being linked - await expect(service.registerTokenMetadata(token.address, registrationGasValue, { value: registrationGasValue })) + await expect( + service.registerTokenMetadata(erc20Token.address, registrationGasValue, { value: registrationGasValue * 10 ** 10 }), + ) .to.emit(service, 'TokenMetadataRegistered') - .withArgs(token.address, decimals) + .withArgs(erc20Token.address, decimals) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, payload); }); @@ -473,14 +486,14 @@ describe.only('Interchain Token Service Full Flow', () => { const tokenManagerImplementationAddress = await service.tokenManager(); const tokenManagerImplementation = await getContractAt('TokenManager', tokenManagerImplementationAddress, wallet); - const params = await tokenManagerImplementation.params(wallet.address, token.address); - let tx = await tokenFactory.populateTransaction.registerCustomToken(salt, token.address, MINT_BURN, wallet.address); + const params = await tokenManagerImplementation.params(wallet.address, erc20Token.address); + let tx = await tokenFactory.populateTransaction.registerCustomToken(salt, erc20Token.address, MINT_BURN, wallet.address); const calls = [tx.data]; let value = 0; for (const i in otherChains) { // This should be replaced with the existing token address on each chain being linked - const remoteTokenAddress = token.address; + const remoteTokenAddress = erc20Token.address; tx = await tokenFactory.populateTransaction.linkToken( salt, @@ -497,19 +510,22 @@ describe.only('Interchain Token Service Full Flow', () => { } const payloads = otherChains.map((chain) => - encodeSendHubMessage(chain, encodeLinkTokenMessage(tokenId, MINT_BURN, token.address, token.address, wallet.address)), + encodeSendHubMessage( + chain, + encodeLinkTokenMessage(tokenId, MINT_BURN, erc20Token.address, erc20Token.address, wallet.address), + ), ); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - await expect(tokenFactory.multicall(calls, { value })) + await expect(tokenFactory.multicall(calls, { value: value * 10 ** 10 })) .to.emit(service, 'TokenManagerDeployed') .withArgs(tokenId, expectedTokenManagerAddress, MINT_BURN, params) .and.to.emit(service, 'LinkTokenStarted') .withArgs( tokenId, otherChains[0], - token.address.toLowerCase(), - token.address.toLowerCase(), + erc20Token.address.toLowerCase(), + erc20Token.address.toLowerCase(), MINT_BURN, wallet.address.toLowerCase(), ) @@ -521,8 +537,8 @@ describe.only('Interchain Token Service Full Flow', () => { .withArgs( tokenId, otherChains[1], - token.address.toLowerCase(), - token.address.toLowerCase(), + erc20Token.address.toLowerCase(), + erc20Token.address.toLowerCase(), MINT_BURN, wallet.address.toLowerCase(), ) @@ -540,20 +556,20 @@ describe.only('Interchain Token Service Full Flow', () => { const newAddress = new Wallet(getRandomBytes32()).address; const amount = 1234; - await expect(token.mint(newAddress, amount)).to.emit(token, 'Transfer').withArgs(AddressZero, newAddress, amount); - await expect(token.burn(newAddress, amount)).to.emit(token, 'Transfer').withArgs(newAddress, AddressZero, amount); + await expect(erc20Token.mint(newAddress, amount)).to.emit(erc20Token, 'Transfer').withArgs(AddressZero, newAddress, amount); + await expect(erc20Token.burn(newAddress, amount)).to.emit(erc20Token, 'Transfer').withArgs(newAddress, AddressZero, amount); - await expect(token.transferMintership(tokenManagerAddress)) - .to.emit(token, 'RolesRemoved') + await expect(erc20Token.transferMintership(tokenManagerAddress)) + .to.emit(erc20Token, 'RolesRemoved') .withArgs(wallet.address, 1 << MINTER_ROLE) - .to.emit(token, 'RolesAdded') + .to.emit(erc20Token, 'RolesAdded') .withArgs(tokenManagerAddress, 1 << MINTER_ROLE); - await expectRevert((gasOptions) => token.mint(newAddress, amount, gasOptions), token, 'MissingRole', [ + await expectRevert((gasOptions) => erc20Token.mint(newAddress, amount, gasOptions), erc20Token, 'MissingRole', [ wallet.address, MINTER_ROLE, ]); - await expectRevert((gasOptions) => token.burn(newAddress, amount, gasOptions), token, 'MissingRole', [ + await expectRevert((gasOptions) => erc20Token.burn(newAddress, amount, gasOptions), erc20Token, 'MissingRole', [ wallet.address, MINTER_ROLE, ]); @@ -580,7 +596,7 @@ describe.only('Interchain Token Service Full Flow', () => { value: gasValue * 10 ** 10, }), ) - .and.to.emit(token, 'Transfer') + .and.to.emit(erc20Token, 'Transfer') .withArgs(wallet.address, AddressZero, amount) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, payload) @@ -599,7 +615,7 @@ describe.only('Interchain Token Service Full Flow', () => { * - Transfer from the fixed supply to additional chains * - Transfer tokens via ITS between chains */ - describe('Fixed Supply Interchain Token', () => { + describe.skip('Fixed Supply Interchain Token [unsupported]', () => { let token; let tokenId; const salt = getRandomBytes32(); @@ -639,7 +655,7 @@ describe.only('Interchain Token Service Full Flow', () => { ); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - const multicall = await tokenFactory.multicall(calls, { value }); + const multicall = await tokenFactory.multicall(calls, { value: value * 10 ** 10 }); await expect(multicall) .to.emit(service, 'InterchainTokenDeployed') .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) @@ -692,7 +708,7 @@ describe.only('Interchain Token Service Full Flow', () => { encodeSendHubMessage(chain, encodeInterchainTransferMessage(tokenId, wallet.address, destAddress, tokenCap, '0x')), ); - const multicall = await service.multicall(calls, { value }); + const multicall = await service.multicall(calls, { value: value * 10 ** 10 }); await expect(multicall) .to.emit(token, 'Transfer') .withArgs(wallet.address, AddressZero, tokenCap) @@ -721,32 +737,50 @@ describe.only('Interchain Token Service Full Flow', () => { * - Call the executable with an interchain transfer * - Execute the application, TestInterchainExecutable */ + // Hedera ✅ describe('Executable Example', () => { - let token, tokenId, executable; + let token, tokenId, tokenManager, executable; const totalMint = 1e9; before(async () => { const salt = getRandomBytes32(); tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); + const minter = wallet.address; - await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, totalMint, AddressZero)) + await expect(tokenFactory.deployInterchainToken(salt, name, symbol, decimals, 0, minter)) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, minter, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs( - tokenId, - expectedTokenManagerAddress, - NATIVE_INTERCHAIN_TOKEN, - validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', tokenFactory.address, name, symbol, decimals), - ); + .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, (params) => { + const [operator, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(operator.toLowerCase()).to.equal(minter.toLowerCase()); + expectNonZeroAddress(tokenAddress_); + return true; + }); // Get token address from deployed token manager const tokenManagerAddress = await service.tokenManagerAddress(tokenId); - const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); + tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); const tokenAddress = await tokenManager.tokenAddress(); token = await getContractAt('IERC20Named', tokenAddress, wallet); + + // Associate and mint + await associateToken(hederaClient, evmAddressToTokenId(token.address), hederaId, hederaPk); + await (await tokenManager.mintToken(token.address, wallet.address, totalMint)).wait(); + expect(await token.balanceOf(wallet.address)).to.equal(totalMint); + + await expect(token.approve(service.address, MAX_INT64)) + .to.emit(token, 'Approval') + .withArgs(wallet.address, service.address, MAX_INT64); + + await expect(token.approve(tokenManager.address, MAX_INT64)) + .to.emit(token, 'Approval') + .withArgs(wallet.address, tokenManager.address, MAX_INT64); + executable = await deployContract(wallet, 'TestInterchainExecutable', [service.address]); + + await expect(executable.associateWithToken(token.address)).to.emit(executable, 'TokenAssociated').withArgs(token.address); }); it('Should execute an application with interchain transfer', async () => { @@ -775,11 +809,9 @@ describe.only('Interchain Token Service Full Flow', () => { amount, metadata, gasValue, - { value: gasValue }, + { value: gasValue * 10 ** 10 }, ), ) - .and.to.emit(token, 'Transfer') - .withArgs(wallet.address, AddressZero, amount) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, outgoingPayload.payloadHash, outgoingPayload.payload) .and.to.emit(gasService, 'NativeGasPaidForContractCall') @@ -803,8 +835,6 @@ describe.only('Interchain Token Service Full Flow', () => { .to.emit(service, 'InterchainTransferReceived') .withArgs(commandId, tokenId, sourceChain, sourceAddress, executable.address, amount, keccak256(data)) .and.to.emit(token, 'Transfer') - .withArgs(AddressZero, executable.address, amount) - .and.to.emit(token, 'Transfer') .withArgs(executable.address, wallet.address, amount) .and.to.emit(executable, 'MessageReceived') .withArgs(commandId, sourceChain, sourceAddress, wallet.address, message, tokenId, amount); @@ -818,7 +848,7 @@ describe.only('Interchain Token Service Full Flow', () => { * - Transfer token via native method on the token * - Transfer tokens via ITS between chains after deployment */ - describe('New Interchain token via ITS Hub', () => { + describe.only('New Interchain token via ITS Hub', () => { let token; let tokenId; let executable; @@ -831,14 +861,6 @@ describe.only('Interchain Token Service Full Flow', () => { before(async () => { tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); - - // Deploy token first to get address - await tokenFactory.deployInterchainToken(salt, name, symbol, decimals, 0, wallet.address); - const tokenManagerAddress = await service.tokenManagerAddress(tokenId); - const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); - const tokenAddress = await tokenManager.tokenAddress(); - token = await getContractAt('IERC20Named', tokenAddress, wallet); - executable = await deployContract(wallet, 'TestInterchainExecutable', [service.address]); // Route via ITS Hub for the following chain @@ -849,53 +871,110 @@ describe.only('Interchain Token Service Full Flow', () => { it('Should register the token and initiate its deployment on other chains', async () => { const totalMint = tokenCap; - const params = defaultAbiCoder.encode(['bytes', 'address'], [tokenFactory.address, token.address]); + const minter = wallet.address; // Deploy a new Interchain token on the local chain. // The initial mint occurs on the factory contract, so it can be moved to other chains within the same multicall. - let tx = await tokenFactory.populateTransaction.deployInterchainToken(salt, name, symbol, decimals, totalMint, wallet.address); + let tx = await tokenFactory.populateTransaction.deployInterchainToken(salt, name, symbol, decimals, 0, minter); const calls = [tx.data]; let value = 0; // Deploy a linked Interchain token to remote chains. for (const i in otherChains) { - tx = await tokenFactory.populateTransaction[DEPLOY_REMOTE_INTERCHAIN_TOKEN](salt, otherChains[i], gasValues[i]); + tx = await tokenFactory.populateTransaction[DEPLOY_REMOTE_INTERCHAIN_TOKEN_WITH_MINTER]( + salt, + minter, + otherChains[i], + minter, + gasValues[i], + ); calls.push(tx.data); value += gasValues[i]; } const payloads = otherChains.map((chain) => - encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, '0x')), + encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, minter)), ); + console.log(payloads); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); - const multicall = await tokenFactory.multicall(calls, { value }); + const multicall = await tokenFactory.multicall(calls, { value: value * 10 ** 10 }); + + const receipt = await multicall.wait(); + // console.log(receipt); + + // Log expected values + console.log('Expected args for first NativeGasPaidForContractCall:', [ + service.address, + ITS_HUB_CHAIN, + ITS_HUB_ADDRESS, + payloads[0].payloadHash, + gasValues[0].toString(), + wallet.address, + ]); + + // Log actual events + const gasEvents = receipt.logs + .filter((log) => log.address === gasService.address) + .map((log) => gasService.interface.parseLog(log)) + .filter((event) => event.name === 'NativeGasPaidForContractCall'); + + console.log('Actual NativeGasPaidForContractCall events:'); + gasEvents.forEach((event, i) => { + console.log( + `Event ${i}:`, + event.args.map((arg) => arg.toString()), + ); + }); + await expect(multicall) .to.emit(service, 'InterchainTokenDeployed') - .withArgs(tokenId, expectNonZeroAddress, tokenFactory.address, name, symbol, decimals) + .withArgs(tokenId, expectNonZeroAddress, minter, name, symbol, decimals) .and.to.emit(service, 'TokenManagerDeployed') - .withArgs( - tokenId, - expectedTokenManagerAddress, - NATIVE_INTERCHAIN_TOKEN, - validateTokenManagerParams('NATIVE_INTERCHAIN_TOKEN', '0x', name, symbol, decimals), - ) + .withArgs(tokenId, expectedTokenManagerAddress, NATIVE_INTERCHAIN_TOKEN, (params) => { + const [operator, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(operator.toLowerCase()).to.equal(minter.toLowerCase()); + expectNonZeroAddress(tokenAddress_); + return true; + }) .and.to.emit(service, 'InterchainTokenDeploymentStarted') - .withArgs(tokenId, name, symbol, decimals, '0x', otherChains[0]) + .withArgs(tokenId, name, symbol, decimals, minter, otherChains[0]) .and.to.emit(gasService, 'NativeGasPaidForContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[0].payloadHash, gasValues[0], wallet.address) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[0].payloadHash, payloads[0].payload) .and.to.emit(service, 'InterchainTokenDeploymentStarted') - .withArgs(tokenId, name, symbol, decimals, '0x', otherChains[1]) + .withArgs(tokenId, name, symbol, decimals, minter, otherChains[1]) .and.to.emit(gasService, 'NativeGasPaidForContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[1].payloadHash, gasValues[1], wallet.address) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[1].payloadHash, payloads[1].payload); + expect(await service.deployedTokenManager(tokenId)).to.equal(expectedTokenManagerAddress); + const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); + const tokenAddress = await tokenManager.tokenAddress(); + token = await getContractAt('IERC20Named', tokenAddress, wallet); + + // associate wallet and mint + + await associateToken(hederaClient, evmAddressToTokenId(token.address), hederaId, hederaPk); + await (await tokenManager.mintToken(token.address, wallet.address, totalMint)).wait(); + expect(await token.balanceOf(wallet.address)).to.equal(totalMint); - expect(await service.deployedTokenManager(tokenId)).to.equal(expectedTokenManagerAddress); + // approve ITS and TM + + await expect(token.approve(service.address, MAX_INT64)) + .to.emit(token, 'Approval') + .withArgs(wallet.address, service.address, MAX_INT64); + + await expect(token.approve(tokenManager.address, MAX_INT64)) + .to.emit(token, 'Approval') + .withArgs(wallet.address, tokenManager.address, MAX_INT64); + + // associate executable with token + + await expect(executable.associateWithToken(token.address)).to.emit(executable, 'TokenAssociated').withArgs(token.address); }); describe('Interchain transfer', () => { @@ -904,23 +983,6 @@ describe.only('Interchain Token Service Full Flow', () => { const destChain = otherChains[0]; const gasValue = 6789; - it('Should send some tokens to another chain via the token', async () => { - const { payload, payloadHash } = encodeSendHubMessage( - destChain, - encodeInterchainTransferMessage(tokenId, arrayify(wallet.address), destAddress, amount, '0x'), - ); - - await expect(token.interchainTransfer(destChain, destAddress, amount, '0x', { value: gasValue })) - .and.to.emit(token, 'Transfer') - .withArgs(wallet.address, AddressZero, amount) - .and.to.emit(gateway, 'ContractCall') - .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, payload) - .and.to.emit(gasService, 'NativeGasPaidForContractCall') - .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, gasValue, wallet.address) - .to.emit(service, 'InterchainTransfer') - .withArgs(tokenId, wallet.address, destChain, destAddress, amount, HashZero); - }); - it('Should send some tokens to another chain via ITS', async () => { const { payload, payloadHash } = encodeSendHubMessage( destChain, @@ -932,8 +994,6 @@ describe.only('Interchain Token Service Full Flow', () => { value: gasValue * 10 ** 10, }), ) - .and.to.emit(token, 'Transfer') - .withArgs(wallet.address, AddressZero, amount) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, payload) .and.to.emit(gasService, 'NativeGasPaidForContractCall') @@ -964,18 +1024,14 @@ describe.only('Interchain Token Service Full Flow', () => { encodeSendHubMessage(chain, encodeInterchainTransferMessage(tokenId, wallet.address, destAddress, amount, '0x')), ); - const multicall = await service.multicall(calls, { value }); + const multicall = await service.multicall(calls, { value: value * 10 ** 10 }); await expect(multicall) - .to.emit(token, 'Transfer') - .withArgs(wallet.address, AddressZero, amount) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[0].payloadHash, payloads[0].payload) .and.to.emit(gasService, 'NativeGasPaidForContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[0].payloadHash, gasValues[0], wallet.address) .and.to.emit(service, 'InterchainTransfer') .withArgs(tokenId, wallet.address, otherChains[0], destAddress, amount, HashZero) - .and.to.emit(token, 'Transfer') - .withArgs(wallet.address, AddressZero, amount) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[1].payloadHash, payloads[1].payload) .and.to.emit(gasService, 'NativeGasPaidForContractCall') @@ -1011,11 +1067,9 @@ describe.only('Interchain Token Service Full Flow', () => { amount, metadata, gasValue, - { value: gasValue }, + { value: gasValue * 10 ** 10 }, ), ) - .and.to.emit(token, 'Transfer') - .withArgs(wallet.address, AddressZero, amount) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, sendPayload.payloadHash, sendPayload.payload) .and.to.emit(gasService, 'NativeGasPaidForContractCall') @@ -1039,8 +1093,6 @@ describe.only('Interchain Token Service Full Flow', () => { .to.emit(service, 'InterchainTransferReceived') .withArgs(commandId, tokenId, sourceChain, sourceAddress, executable.address, amount, keccak256(data)) .and.to.emit(token, 'Transfer') - .withArgs(AddressZero, executable.address, amount) - .and.to.emit(token, 'Transfer') .withArgs(executable.address, wallet.address, amount) .and.to.emit(executable, 'MessageReceived') .withArgs(commandId, sourceChain, sourceAddress, wallet.address, message, tokenId, amount); diff --git a/test/constants.js b/test/constants.js index ac4663ac..43ae0561 100644 --- a/test/constants.js +++ b/test/constants.js @@ -29,6 +29,7 @@ const ITS_HUB_ADDRESS = 'axelar1234567890123456789012345678901234567890123456789 const DEPLOY_REMOTE_INTERCHAIN_TOKEN = 'deployRemoteInterchainToken(bytes32,string,uint256)'; const DEPLOY_REMOTE_INTERCHAIN_TOKEN_WITH_ORIGINAL_CHAIN_NAME_AND_MINTER = 'deployRemoteInterchainToken(string,bytes32,address,string,uint256)'; +const DEPLOY_REMOTE_INTERCHAIN_TOKEN_WITH_MINTER = 'deployRemoteInterchainTokenWithMinter(bytes32,address,string,bytes,uint256)'; const DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN = 'deployRemoteCanonicalInterchainToken(address,string,uint256)'; const DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN_WITH_ORIGINAL_CHAIN = 'deployRemoteCanonicalInterchainToken(string,address,string,uint256)'; @@ -62,6 +63,7 @@ module.exports = { DEPLOY_REMOTE_INTERCHAIN_TOKEN_WITH_ORIGINAL_CHAIN_NAME_AND_MINTER, DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN, DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN_WITH_ORIGINAL_CHAIN, + DEPLOY_REMOTE_INTERCHAIN_TOKEN_WITH_MINTER, INTERCHAIN_TRANSFER, INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE, MAX_INT64, From 2198e2720444aec9bd85c0f3ae9ded26403bb1c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 23 Jul 2025 15:48:32 +0200 Subject: [PATCH 38/49] fix full flow and upgrade tests --- scripts/token-associate.js | 18 +------- test/InterchainTokenServiceFullFlow.js | 51 ++++------------------- test/InterchainTokenServiceUpgradeFlow.js | 30 ++++++------- test/constants.js | 2 - 4 files changed, 25 insertions(+), 76 deletions(-) diff --git a/scripts/token-associate.js b/scripts/token-associate.js index 3a205dc0..a7d06d4e 100644 --- a/scripts/token-associate.js +++ b/scripts/token-associate.js @@ -1,6 +1,6 @@ require('dotenv').config(); -const { Client, PrivateKey, TokenAssociateTransaction, AccountAllowanceApproveTransaction, TokenId, AccountId } = require('@hashgraph/sdk'); +const { Client, PrivateKey, TokenAssociateTransaction, TokenId, AccountId } = require('@hashgraph/sdk'); /** * Convert EVM address to Hedera token ID format @@ -26,24 +26,11 @@ async function associateToken(client, tokenId, accountId, privateKey) { const submitTx = await signTx.execute(client); const receipt = await submitTx.getReceipt(client); - console.log(`Token ${tokenId.toSolidityAddress()} associated with account ${accountId.toSolidityAddress()} successfully`); + // console.log(`Token ${tokenId.toSolidityAddress()} associated with account ${accountId.toSolidityAddress()} successfully`); return receipt; } -async function approveToken(client, ownerPrivateKey, tokenId, ownerId, spenderId, amount) { - const tx = new AccountAllowanceApproveTransaction().approveTokenAllowance(tokenId, ownerId, spenderId, amount); - - const signTx = await tx.sign(ownerPrivateKey); - const submitTx = await signTx.execute(client); - const receipt = await submitTx.getReceipt(client); - - console.log( - `Token allowance approved: ${amount} of token ${tokenId.toSolidityAddress()} from ${ownerId.toSolidityAddress()} to ${spenderId.toSolidityAddress()}`, - ); - return receipt; -} - // CLI functionality async function main() { const args = process.argv.slice(2); @@ -86,7 +73,6 @@ async function main() { // Export functions for use as module module.exports = { associateToken, - approveToken, evmAddressToTokenId, }; diff --git a/test/InterchainTokenServiceFullFlow.js b/test/InterchainTokenServiceFullFlow.js index a772337d..aa7eabc9 100644 --- a/test/InterchainTokenServiceFullFlow.js +++ b/test/InterchainTokenServiceFullFlow.js @@ -34,20 +34,18 @@ const { ITS_HUB_ADDRESS, DEPLOY_REMOTE_INTERCHAIN_TOKEN, DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN, - DEPLOY_REMOTE_INTERCHAIN_TOKEN_WITH_MINTER, INTERCHAIN_TRANSFER, INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE, MAX_INT64, } = require('./constants'); const { createHtsToken } = require('../scripts/create-hts-token.js'); -const { evmAddressToTokenId, associateToken, approveToken } = require('../scripts/token-associate.js'); +const { evmAddressToTokenId, associateToken } = require('../scripts/token-associate.js'); const { hederaClientFromHardhatConfig } = require('../scripts/hedera-client.js'); -describe.only('Interchain Token Service Full Flow', () => { +describe('Interchain Token Service Full Flow', () => { let wallet; let service, gateway, gasService, tokenFactory, tokenId; - let serviceHederaId; const name = 'tokenName'; const symbol = 'tokenSymbol'; const otherChains = ['chain 1', 'chain 2']; @@ -848,7 +846,8 @@ describe.only('Interchain Token Service Full Flow', () => { * - Transfer token via native method on the token * - Transfer tokens via ITS between chains after deployment */ - describe.only('New Interchain token via ITS Hub', () => { + // Hedera ✅ + describe('New Interchain token via ITS Hub', () => { let token; let tokenId; let executable; @@ -881,52 +880,18 @@ describe.only('Interchain Token Service Full Flow', () => { // Deploy a linked Interchain token to remote chains. for (const i in otherChains) { - tx = await tokenFactory.populateTransaction[DEPLOY_REMOTE_INTERCHAIN_TOKEN_WITH_MINTER]( - salt, - minter, - otherChains[i], - minter, - gasValues[i], - ); + tx = await tokenFactory.populateTransaction[DEPLOY_REMOTE_INTERCHAIN_TOKEN](salt, otherChains[i], gasValues[i]); calls.push(tx.data); value += gasValues[i]; } const payloads = otherChains.map((chain) => - encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, minter)), + encodeSendHubMessage(chain, encodeDeployInterchainTokenMessage(tokenId, name, symbol, decimals, '0x')), ); - console.log(payloads); const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); const multicall = await tokenFactory.multicall(calls, { value: value * 10 ** 10 }); - const receipt = await multicall.wait(); - // console.log(receipt); - - // Log expected values - console.log('Expected args for first NativeGasPaidForContractCall:', [ - service.address, - ITS_HUB_CHAIN, - ITS_HUB_ADDRESS, - payloads[0].payloadHash, - gasValues[0].toString(), - wallet.address, - ]); - - // Log actual events - const gasEvents = receipt.logs - .filter((log) => log.address === gasService.address) - .map((log) => gasService.interface.parseLog(log)) - .filter((event) => event.name === 'NativeGasPaidForContractCall'); - - console.log('Actual NativeGasPaidForContractCall events:'); - gasEvents.forEach((event, i) => { - console.log( - `Event ${i}:`, - event.args.map((arg) => arg.toString()), - ); - }); - await expect(multicall) .to.emit(service, 'InterchainTokenDeployed') .withArgs(tokenId, expectNonZeroAddress, minter, name, symbol, decimals) @@ -938,13 +903,13 @@ describe.only('Interchain Token Service Full Flow', () => { return true; }) .and.to.emit(service, 'InterchainTokenDeploymentStarted') - .withArgs(tokenId, name, symbol, decimals, minter, otherChains[0]) + .withArgs(tokenId, name, symbol, decimals, '0x', otherChains[0]) .and.to.emit(gasService, 'NativeGasPaidForContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[0].payloadHash, gasValues[0], wallet.address) .and.to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[0].payloadHash, payloads[0].payload) .and.to.emit(service, 'InterchainTokenDeploymentStarted') - .withArgs(tokenId, name, symbol, decimals, minter, otherChains[1]) + .withArgs(tokenId, name, symbol, decimals, '0x', otherChains[1]) .and.to.emit(gasService, 'NativeGasPaidForContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloads[1].payloadHash, gasValues[1], wallet.address) .and.to.emit(gateway, 'ContractCall') diff --git a/test/InterchainTokenServiceUpgradeFlow.js b/test/InterchainTokenServiceUpgradeFlow.js index a8f85a3b..d95b98fa 100644 --- a/test/InterchainTokenServiceUpgradeFlow.js +++ b/test/InterchainTokenServiceUpgradeFlow.js @@ -21,9 +21,9 @@ const { const { getBytecodeHash } = require('@axelar-network/axelar-chains-config'); const AxelarServiceGovernance = getContractJSON('AxelarServiceGovernance'); const Create3Deployer = getContractJSON('Create3Deployer'); -const { MINT_BURN, ITS_HUB_ADDRESS } = require('./constants'); +const { ITS_HUB_ADDRESS, LOCK_UNLOCK } = require('./constants'); -describe('Interchain Token Service Upgrade Flow', () => { +describe.only('Interchain Token Service Upgrade Flow', () => { let wallet, otherWallet, operator; let service, gateway, gasService, tokenFactory; let tokenManagerDeployer, interchainTokenDeployer, tokenManager, tokenHandler; @@ -49,18 +49,12 @@ describe('Interchain Token Service Upgrade Flow', () => { const tokenId = await tokenFactory.linkedTokenId(wallet.address, salt); const tokenManager = await getContractAt('TokenManager', await service.tokenManagerAddress(tokenId), wallet); - const token = await deployContract(wallet, 'TestInterchainTokenStandard', [ - tokenName, - tokenSymbol, - tokenDecimals, - service.address, - tokenId, - ]); + const token = await deployContract(wallet, 'TestERC20MintableBurnable', [tokenName, tokenSymbol, tokenDecimals]); const params = defaultAbiCoder.encode(['bytes', 'address'], [wallet.address, token.address]); - await expect(tokenFactory.registerCustomToken(salt, token.address, MINT_BURN, wallet.address)) + await expect(tokenFactory.registerCustomToken(salt, token.address, LOCK_UNLOCK, wallet.address)) .to.emit(service, 'TokenManagerDeployed') - .withArgs(tokenId, tokenManager.address, MINT_BURN, params); + .withArgs(tokenId, tokenManager.address, LOCK_UNLOCK, params); } before(async () => { @@ -72,12 +66,11 @@ describe('Interchain Token Service Upgrade Flow', () => { const create3DeployerFactory = await ethers.getContractFactory(Create3Deployer.abi, Create3Deployer.bytecode, wallet); const create3Deployer = await create3DeployerFactory.deploy().then((d) => d.deployed()); const interchainTokenServiceAddress = await getCreate3Address(create3Deployer.address, wallet, deploymentKey); - const interchainToken = await deployContract(wallet, 'InterchainToken', [interchainTokenServiceAddress]); gateway = await deployMockGateway(wallet); gasService = await deployGasService(wallet); tokenManagerDeployer = await deployContract(wallet, 'TokenManagerDeployer', []); - interchainTokenDeployer = await deployContract(wallet, 'InterchainTokenDeployer', [interchainToken.address]); + interchainTokenDeployer = await deployContract(wallet, 'InterchainTokenDeployer', []); tokenManager = await deployContract(wallet, 'TokenManager', [interchainTokenServiceAddress]); tokenHandler = await deployContract(wallet, 'TokenHandler', []); interchainTokenFactoryAddress = await getCreate3Address(create3Deployer.address, wallet, deploymentKey + 'Factory'); @@ -165,7 +158,11 @@ describe('Interchain Token Service Upgrade Flow', () => { await expect(txExecute) .to.emit(axelarServiceGovernance, 'ProposalScheduled') - .withArgs(proposalHash, target, calldata, nativeValue, finalEta); + .withArgs(proposalHash, target, calldata, nativeValue, (eta) => { + // allow for a small buffer + expect(Math.abs(eta - finalEta)).to.be.lte(10); + return true; + }); await waitFor(timeDelay); @@ -175,7 +172,10 @@ describe('Interchain Token Service Upgrade Flow', () => { await expect(tx) .to.emit(axelarServiceGovernance, 'ProposalExecuted') - .withArgs(proposalHash, target, calldata, nativeValue, executionTimestamp) + .withArgs(proposalHash, target, calldata, nativeValue, (timestamp) => { + expect(Math.abs(timestamp - executionTimestamp)).to.be.lte(10); + return true; + }) .and.to.emit(service, 'Upgraded') .withArgs(newServiceImplementation.address); diff --git a/test/constants.js b/test/constants.js index 43ae0561..ac4663ac 100644 --- a/test/constants.js +++ b/test/constants.js @@ -29,7 +29,6 @@ const ITS_HUB_ADDRESS = 'axelar1234567890123456789012345678901234567890123456789 const DEPLOY_REMOTE_INTERCHAIN_TOKEN = 'deployRemoteInterchainToken(bytes32,string,uint256)'; const DEPLOY_REMOTE_INTERCHAIN_TOKEN_WITH_ORIGINAL_CHAIN_NAME_AND_MINTER = 'deployRemoteInterchainToken(string,bytes32,address,string,uint256)'; -const DEPLOY_REMOTE_INTERCHAIN_TOKEN_WITH_MINTER = 'deployRemoteInterchainTokenWithMinter(bytes32,address,string,bytes,uint256)'; const DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN = 'deployRemoteCanonicalInterchainToken(address,string,uint256)'; const DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN_WITH_ORIGINAL_CHAIN = 'deployRemoteCanonicalInterchainToken(string,address,string,uint256)'; @@ -63,7 +62,6 @@ module.exports = { DEPLOY_REMOTE_INTERCHAIN_TOKEN_WITH_ORIGINAL_CHAIN_NAME_AND_MINTER, DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN, DEPLOY_REMOTE_CANONICAL_INTERCHAIN_TOKEN_WITH_ORIGINAL_CHAIN, - DEPLOY_REMOTE_INTERCHAIN_TOKEN_WITH_MINTER, INTERCHAIN_TRANSFER, INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE, MAX_INT64, From acfaf206998a4f1f9292cd12f42aa3f301ea3a84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 18 Aug 2025 20:24:47 +0200 Subject: [PATCH 39/49] require approval of WHBAR for local deployment - transfer WHBAR from the deploying user to ITS. the user needs to approve the ITF for appropriate amount, which they could get from `tokenCreationPriceTinybars`. - update tests - mention local vs remote deployment in docs --- contracts/InterchainTokenFactory.sol | 9 +++++++-- contracts/InterchainTokenService.sol | 2 +- contracts/hedera/README.md | 8 +++++++- contracts/interfaces/ITokenCreationPricing.sol | 6 ++++++ contracts/utils/TokenCreationPricing.sol | 6 +++++- scripts/deploy.js | 1 + test/AddressDerivation.js | 9 ++++++++- test/InterchainTokenFactory.js | 14 +++++++++++++- test/InterchainTokenService.js | 4 ++-- test/InterchainTokenServiceFullFlow.js | 8 +++++++- test/InterchainTokenServiceUpgradeFlow.js | 2 +- test/TokenManager.js | 2 +- test/UtilsTest.js | 8 ++++---- 13 files changed, 63 insertions(+), 16 deletions(-) diff --git a/contracts/InterchainTokenFactory.sol b/contracts/InterchainTokenFactory.sol index 82b05dd9..2f159c99 100644 --- a/contracts/InterchainTokenFactory.sol +++ b/contracts/InterchainTokenFactory.sol @@ -13,6 +13,7 @@ import { IERC20Named } from './interfaces/IERC20Named.sol'; import { IMinter } from './interfaces/IMinter.sol'; import { HTS, IHederaTokenService } from './hedera/HTS.sol'; +import { IWHBAR } from './hedera/IWHBAR.sol'; /** * @title InterchainTokenFactory @@ -141,8 +142,7 @@ contract InterchainTokenFactory is IInterchainTokenFactory, Multicall, Upgradabl uint256 initialSupply, address minter ) external payable returns (bytes32 tokenId) { - address sender = msg.sender; - bytes32 deploySalt = interchainTokenDeploySalt(sender, salt); + bytes32 deploySalt = interchainTokenDeploySalt(msg.sender, salt); bytes memory minterBytes = new bytes(0); string memory currentChain = ''; uint256 gasValue = 0; @@ -162,6 +162,11 @@ contract InterchainTokenFactory is IInterchainTokenFactory, Multicall, Upgradabl revert ZeroSupplyToken(); } + // Ensure that the deployer (sender) approved ITF to transfer WHBAR on its behalf + // WHBAR is transferred to pay for token creation + uint256 price = interchainTokenService.tokenCreationPriceTinybars(); + IWHBAR(interchainTokenService.whbarAddress()).transferFrom(msg.sender, address(interchainTokenService), price); + tokenId = _deployInterchainToken(deploySalt, currentChain, name, symbol, decimals, minterBytes, gasValue); } diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index 6e2e60c3..927b6a52 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -959,7 +959,7 @@ contract InterchainTokenService is if (bytes(symbol).length == 0) revert EmptyTokenSymbol(); // Price in tinybars - uint256 tokenCreatePrice = _tokenCreationPriceTinybars(); + uint256 tokenCreatePrice = tokenCreationPriceTinybars(); // TokenManagerProxy deploy params bytes memory params = abi.encode(operator, name, symbol, decimals, tokenCreatePrice); diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index 351ff29e..44d24982 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -8,7 +8,13 @@ New HTS Interchain Tokens will have their Token Manager as the sole Supply Key ( Since the `createFungibleToken` precompile in Hedera requires a fee to be sent as value, an `WHBAR` contract (`WETH` equivalent) is used to hold the HBAR used for token creation. `InterchainTokenService` transfers certain amount of `WHBAR` to the newly deploying `TokenManagerProxy` contract. The `TokenManagerProxy` contract, during constructor, withdraws HBAR from `WHBAR`, and sends it to `InterchainTokenDeployer`, which finally uses it to pay for the token creation. -The responsibility of keeping ITS funded on the WHBAR contract lies with the deployer, it is assumed that a top-up mechanism is in place to ensure the contract has enough WHBAR to create new tokens. +For local deployments, the deploying user must ensure it has enough balance in the `WHBAR` contract and appropriate allowance to the `InterchainTokenFactory` contract, which will transfer the `WHBAR` to the `InterchainTokenService` contract. + +For remote deployments, the balance of `InterchainTokenService` is used. The responsibility of keeping ITS funded on the `WHBAR` contract lies with the contract deployer (Axelar), it is assumed that a top-up mechanism is in place to ensure the contract has enough WHBAR to create new tokens. + +> _Why not send coins directly to the `InterchainTokenService` contract?_ +> +> We don't want to change the relayer to send value directly to the `execute` method of the `InterchainTokenService` contract. Users _could_ send value directly via the factory, however to simplify the ITS contract the same WHBAR procedure is used, thus making it consistent regardless of whether the deployment is local or remote. ![Deploy New Interchain Token Flow](./diagrams/deploy_interchain_token.png) diff --git a/contracts/interfaces/ITokenCreationPricing.sol b/contracts/interfaces/ITokenCreationPricing.sol index 20e51913..6e7b5b0e 100644 --- a/contracts/interfaces/ITokenCreationPricing.sol +++ b/contracts/interfaces/ITokenCreationPricing.sol @@ -23,6 +23,12 @@ interface ITokenCreationPricing { */ function tokenCreationPrice() external view returns (uint256 price); + /** + * @notice Returns the token creation price in tinybars. + * @return price The token creation price in tinybars. + */ + function tokenCreationPriceTinybars() external returns (uint256 price); + /** * @notice Returns the WHBAR contract address * @return whbarAddress The WHBAR contract address diff --git a/contracts/utils/TokenCreationPricing.sol b/contracts/utils/TokenCreationPricing.sol index b3c0bb32..87667cda 100644 --- a/contracts/utils/TokenCreationPricing.sol +++ b/contracts/utils/TokenCreationPricing.sol @@ -24,6 +24,10 @@ contract TokenCreationPricing is ITokenCreationPricing { _tokenCreationPricingStorage().whbarAddress = whbarAddress_; } + /** + * @notice Returns the token creation price in tinycents + * @return price The token creation price in tinycents + */ function tokenCreationPrice() public view returns (uint256 price) { price = _tokenCreationPricingStorage().tokenCreationPrice; } @@ -32,7 +36,7 @@ contract TokenCreationPricing is ITokenCreationPricing { * @notice Returns the token creation price in tinybars. * @return price The token creation price in tinybars. */ - function _tokenCreationPriceTinybars() internal returns (uint256 price) { + function tokenCreationPriceTinybars() public returns (uint256 price) { uint256 priceTinycents = _tokenCreationPricingStorage().tokenCreationPrice; // Add 1 tinybar to ensure we meet the minimum value after rounding from diff --git a/scripts/deploy.js b/scripts/deploy.js index b0e5e0b9..f2190242 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -22,6 +22,7 @@ const HTS_DEPENDENT_CONTRACTS = [ 'TokenManager', // Test 'TestInterchainTokenService', + 'TestTokenCreationPricing', 'TestInterchainTokenDeployer', 'TestTokenManager', ]; diff --git a/test/AddressDerivation.js b/test/AddressDerivation.js index b0c3caf5..c5dbd389 100644 --- a/test/AddressDerivation.js +++ b/test/AddressDerivation.js @@ -20,6 +20,7 @@ const { const { create3DeployContract } = require('@axelar-network/axelar-gmp-sdk-solidity'); const Token = getContractJSON('TestInterchainTokenStandard'); const { NATIVE_INTERCHAIN_TOKEN, ITS_HUB_ADDRESS, ITS_HUB_CHAIN } = require('./constants'); +const { fundWithWHBAR } = require('../scripts/deploy-whbar.js'); if (isHardhat) { describe('Token Address Derivation [ @skip-on-coverage ]', () => { @@ -36,11 +37,12 @@ if (isHardhat) { const tokenSymbol = 'TN'; const tokenDecimals = 18; + let whbar; before(async () => { const wallets = await ethers.getSigners(); wallet = wallets[0]; - ({ service, gateway, tokenFactory, create3Deployer } = await deployAll(wallet, 'Test', ITS_HUB_ADDRESS, [ + ({ service, gateway, tokenFactory, create3Deployer, whbar } = await deployAll(wallet, 'Test', ITS_HUB_ADDRESS, [ sourceChain, destinationChain, ])); @@ -113,6 +115,11 @@ if (isHardhat) { const params = defaultAbiCoder.encode(['bytes', 'address'], [tokenFactory.address, expectedTokenAddress]); + // Fund the user that will deploy the token + await fundWithWHBAR(whbar, wallet.address, ethers.utils.parseEther('10'), wallet); + // Approve the factory to spend WHBAR + await whbar.connect(wallet).approve(tokenFactory.address, ethers.constants.MaxUint256); + await expect(tokenFactory.deployInterchainToken(salt, tokenName, tokenSymbol, tokenDecimals, initialSupply, wallet.address)) .to.emit(service, 'InterchainTokenDeployed') .withArgs(tokenId, expectedTokenAddress, tokenFactory.address, tokenName, tokenSymbol, tokenDecimals) diff --git a/test/InterchainTokenFactory.js b/test/InterchainTokenFactory.js index 02045421..7517efed 100644 --- a/test/InterchainTokenFactory.js +++ b/test/InterchainTokenFactory.js @@ -36,9 +36,13 @@ const { getBytecodeHash } = require('@axelar-network/axelar-chains-config'); const { createHtsToken } = require('../scripts/create-hts-token.js'); const { hederaClientFromHardhatConfig } = require('../scripts/hedera-client.js'); +const { fundWithWHBAR } = require('../scripts/deploy-whbar'); const reportGas = gasReporter('Interchain Token Factory'); +// Amount of WHBAR to fund self for deployments via the factory +const SELF_FUND_AMOUNT_WHBAR = '200'; + describe('InterchainTokenFactory', () => { let wallet, otherWallet; let service, gateway, gasService, tokenFactory; @@ -55,9 +59,17 @@ describe('InterchainTokenFactory', () => { hederaPk = hederaClientInfo.hederaPk; }); + let whbar; before(async () => { [wallet, otherWallet] = await ethers.getSigners(); - ({ service, gateway, gasService, tokenFactory } = await deployAll(wallet, chainName, ITS_HUB_ADDRESS, [destinationChain])); + ({ service, gateway, gasService, tokenFactory, whbar } = await deployAll(wallet, chainName, ITS_HUB_ADDRESS, [destinationChain])); + + // Fund self with 200 WHBAR + console.log(`Funding ${wallet.address} with ${SELF_FUND_AMOUNT_WHBAR} WHBAR for factory deployments...`); + await fundWithWHBAR(whbar, wallet.address, ethers.utils.parseEther(SELF_FUND_AMOUNT_WHBAR), wallet); + + // Approve the factory to spend WHBAR + await whbar.connect(wallet).approve(tokenFactory.address, ethers.constants.MaxUint256); }); describe('Token Factory Deployment', async () => { diff --git a/test/InterchainTokenService.js b/test/InterchainTokenService.js index 40ed0795..75a11d7b 100644 --- a/test/InterchainTokenService.js +++ b/test/InterchainTokenService.js @@ -137,7 +137,7 @@ describe('Interchain Token Service', () => { const tokenManager = await getContractAt('TokenManager', tokenManagerAddress, wallet); const tmTokenAddress = await tokenManager.tokenAddress(); - expect(tmTokenAddress.toLowerCase()).to.equal(token.address); + expect(tmTokenAddress.toLowerCase()).to.equal(token.address.toLowerCase()); expect(await tokenManager.hasRole(wallet.address, OPERATOR_ROLE)).to.be.true; if (mintAmount > 0) { @@ -880,7 +880,7 @@ describe('Interchain Token Service', () => { await expect(reportGas(service.registerTokenMetadata(tokenAddress, gasValue), 'registerTokenMetadata')) .to.emit(service, 'TokenMetadataRegistered') - .withArgs(tokenAddress, decimals) + .withArgs(tokenAddress.toLowerCase(), decimals) .to.emit(gateway, 'ContractCall') .withArgs(service.address, ITS_HUB_CHAIN, ITS_HUB_ADDRESS, payloadHash, payload); }); diff --git a/test/InterchainTokenServiceFullFlow.js b/test/InterchainTokenServiceFullFlow.js index aa7eabc9..c867f78e 100644 --- a/test/InterchainTokenServiceFullFlow.js +++ b/test/InterchainTokenServiceFullFlow.js @@ -42,6 +42,7 @@ const { const { createHtsToken } = require('../scripts/create-hts-token.js'); const { evmAddressToTokenId, associateToken } = require('../scripts/token-associate.js'); const { hederaClientFromHardhatConfig } = require('../scripts/hedera-client.js'); +const { fundWithWHBAR } = require('../scripts/deploy-whbar.js'); describe('Interchain Token Service Full Flow', () => { let wallet; @@ -60,6 +61,7 @@ describe('Interchain Token Service Full Flow', () => { hederaId = hederaClientInfo.hederaOperatorId; }); + let whbar; before(async () => { const wallets = await ethers.getSigners(); wallet = wallets[0]; @@ -67,7 +69,11 @@ describe('Interchain Token Service Full Flow', () => { const wallet1Balance = await wallet.getBalance(); console.log(`\tWallet ${wallet.address} with ${ethers.utils.formatEther(wallet1Balance)} HBAR`); - ({ service, gateway, gasService, tokenFactory } = await deployAll(wallet, chainName, ITS_HUB_ADDRESS, otherChains)); + ({ service, gateway, gasService, tokenFactory, whbar } = await deployAll(wallet, chainName, ITS_HUB_ADDRESS, otherChains)); + + await fundWithWHBAR(whbar, wallet.address, ethers.utils.parseEther('100'), wallet); + // Approve the factory to spend wallet's WHBAR + await whbar.connect(wallet).approve(tokenFactory.address, ethers.constants.MaxUint256); }); /** diff --git a/test/InterchainTokenServiceUpgradeFlow.js b/test/InterchainTokenServiceUpgradeFlow.js index d95b98fa..947355d1 100644 --- a/test/InterchainTokenServiceUpgradeFlow.js +++ b/test/InterchainTokenServiceUpgradeFlow.js @@ -23,7 +23,7 @@ const AxelarServiceGovernance = getContractJSON('AxelarServiceGovernance'); const Create3Deployer = getContractJSON('Create3Deployer'); const { ITS_HUB_ADDRESS, LOCK_UNLOCK } = require('./constants'); -describe.only('Interchain Token Service Upgrade Flow', () => { +describe('Interchain Token Service Upgrade Flow', () => { let wallet, otherWallet, operator; let service, gateway, gasService, tokenFactory; let tokenManagerDeployer, interchainTokenDeployer, tokenManager, tokenHandler; diff --git a/test/TokenManager.js b/test/TokenManager.js index 3c3dd5be..a384c897 100644 --- a/test/TokenManager.js +++ b/test/TokenManager.js @@ -93,7 +93,7 @@ describe('Token Manager', () => { const proxyBytecodeHash = keccak256(proxyBytecode); const expected = { - london: '0x0ac950376eb76906473d551108bbf9b43939c9ac67f03d1fae3c91878ae66ff7', + london: '0x3be03e83ab0dbd547cf77cf64ce7c060b7498d1dfee919d0f9ac5b2ac3f74dba', }[getEVMVersion()]; expect(proxyBytecodeHash).to.be.equal(expected); diff --git a/test/UtilsTest.js b/test/UtilsTest.js index d3a325b7..357a3a2f 100644 --- a/test/UtilsTest.js +++ b/test/UtilsTest.js @@ -323,12 +323,12 @@ describe('Create3Deployer', () => { const bytecode = tokenFactory.getDeployTransaction(name, symbol, decimals).data; - await expect(deployer.deploy(bytecode, salt, { value: 10 })) - .to.emit(deployer, 'Deployed') - .withArgs(address); + const value = 10 * 10 ** 10; // 10 tinybars + + await expect(deployer.deploy(bytecode, salt, { value })).to.emit(deployer, 'Deployed').withArgs(address); expect(await ethers.provider.getBalance(address)).to.equal(0); - expect(await ethers.provider.getBalance(deployer.address)).to.equal(10); + expect(await ethers.provider.getBalance(deployer.address)).to.equal(value); }); }); }); From 1088024e0c02294d6cd3df607bb82cde47e1f56e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 20 Aug 2025 18:39:10 +0200 Subject: [PATCH 40/49] make whbar address immutable - lint errors - add tests for whbar allowance for ITF - add tests for unsupporting token keys --- contracts/InterchainTokenFactory.sol | 2 - contracts/InterchainTokenService.sol | 17 +-- contracts/TokenHandler.sol | 1 - contracts/hedera/HTS.sol | 1 + contracts/hedera/IWHBAR.sol | 4 +- contracts/hedera/WHBAR.sol | 1 + contracts/test/TestInterchainTokenService.sol | 6 +- .../test/utils/TestTokenCreationPricing.sol | 6 +- contracts/utils/TokenCreationPricing.sol | 18 +-- scripts/create-hts-token.js | 51 +++++++ scripts/deploy.js | 26 ++-- test/InterchainTokenFactory.js | 125 +++++++++++++++++- test/InterchainTokenService.js | 47 ++++++- test/InterchainTokenServiceUpgradeFlow.js | 10 ++ test/UtilsTest.js | 3 +- 15 files changed, 254 insertions(+), 64 deletions(-) diff --git a/contracts/InterchainTokenFactory.sol b/contracts/InterchainTokenFactory.sol index 2f159c99..89e68ac2 100644 --- a/contracts/InterchainTokenFactory.sol +++ b/contracts/InterchainTokenFactory.sol @@ -8,9 +8,7 @@ import { Upgradable } from '@axelar-network/axelar-gmp-sdk-solidity/contracts/up import { IInterchainTokenService } from './interfaces/IInterchainTokenService.sol'; import { IInterchainTokenFactory } from './interfaces/IInterchainTokenFactory.sol'; import { ITokenManager } from './interfaces/ITokenManager.sol'; -import { IInterchainToken } from './interfaces/IInterchainToken.sol'; import { IERC20Named } from './interfaces/IERC20Named.sol'; -import { IMinter } from './interfaces/IMinter.sol'; import { HTS, IHederaTokenService } from './hedera/HTS.sol'; import { IWHBAR } from './hedera/IWHBAR.sol'; diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index 927b6a52..e3594f6e 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -15,12 +15,10 @@ import { InterchainAddressTracker } from '@axelar-network/axelar-gmp-sdk-solidit import { IInterchainTokenService } from './interfaces/IInterchainTokenService.sol'; import { ITokenHandler } from './interfaces/ITokenHandler.sol'; import { ITokenManagerDeployer } from './interfaces/ITokenManagerDeployer.sol'; -import { IInterchainTokenDeployer } from './interfaces/IInterchainTokenDeployer.sol'; import { IInterchainTokenExecutable } from './interfaces/IInterchainTokenExecutable.sol'; import { IInterchainTokenExpressExecutable } from './interfaces/IInterchainTokenExpressExecutable.sol'; import { ITokenManager } from './interfaces/ITokenManager.sol'; import { IERC20Named } from './interfaces/IERC20Named.sol'; -import { IMinter } from './interfaces/IMinter.sol'; import { Create3AddressFixed } from './utils/Create3AddressFixed.sol'; import { Operator } from './utils/Operator.sol'; import { ChainTracker } from './utils/ChainTracker.sol'; @@ -133,8 +131,9 @@ contract InterchainTokenService is string memory chainName_, string memory itsHubAddress_, address tokenManagerImplementation_, - address tokenHandler_ - ) ItsHubAddressTracker(itsHubAddress_) { + address tokenHandler_, + address whbarAddress_ + ) ItsHubAddressTracker(itsHubAddress_) TokenCreationPricing(whbarAddress_) { if ( gasService_ == address(0) || tokenManagerDeployer_ == address(0) || @@ -609,14 +608,6 @@ contract InterchainTokenService is _setTokenCreationPrice(price); } - /** - * @notice Used to set the WHBAR contract address. - * @param whbarAddress_ The new WHBAR contract address. - */ - function setWhbarAddress(address whbarAddress_) external onlyOperatorOrOwner { - _setWhbarAddress(whbarAddress_); - } - /** * @notice Allows the owner to pause/unpause the token service. * @param paused Boolean value representing whether to pause or unpause. @@ -970,7 +961,7 @@ contract InterchainTokenService is address tokenManager_ = tokenManagerAddress(tokenId); // Approve the token manager deployer to spend the token creation price - IWHBAR(whbarAddress()).approve(tokenManager_, tokenCreatePrice); + IWHBAR(whbarAddress).approve(tokenManager_, tokenCreatePrice); (bool success, bytes memory returnData) = tokenManagerDeployer.delegatecall( abi.encodeWithSelector(ITokenManagerDeployer.deployTokenManager.selector, tokenId, tokenManagerType, params) diff --git a/contracts/TokenHandler.sol b/contracts/TokenHandler.sol index d4216c69..0149e899 100644 --- a/contracts/TokenHandler.sol +++ b/contracts/TokenHandler.sol @@ -12,7 +12,6 @@ import { ITokenManagerType } from './interfaces/ITokenManagerType.sol'; import { ITokenManager } from './interfaces/ITokenManager.sol'; import { ITokenManagerProxy } from './interfaces/ITokenManagerProxy.sol'; import { IERC20BurnableFrom } from './interfaces/IERC20BurnableFrom.sol'; -import { IMinter } from './interfaces/IMinter.sol'; /** * @title TokenHandler diff --git a/contracts/hedera/HTS.sol b/contracts/hedera/HTS.sol index 940d0e23..a6e1c56c 100644 --- a/contracts/hedera/HTS.sol +++ b/contracts/hedera/HTS.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: MIT +// solhint-disable pragma solidity ^0.8.0; import { HederaResponseCodes } from './HederaResponseCodes.sol'; diff --git a/contracts/hedera/IWHBAR.sol b/contracts/hedera/IWHBAR.sol index 2720f59e..9ac76428 100644 --- a/contracts/hedera/IWHBAR.sol +++ b/contracts/hedera/IWHBAR.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT - +// solhint-disable pragma solidity ^0.8.0; /** @@ -126,4 +126,4 @@ interface IWHBAR { * @return True if successful */ function transferFrom(address src, address dst, uint wad) external returns (bool); -} \ No newline at end of file +} diff --git a/contracts/hedera/WHBAR.sol b/contracts/hedera/WHBAR.sol index a2a2775d..9b45d6b5 100644 --- a/contracts/hedera/WHBAR.sol +++ b/contracts/hedera/WHBAR.sol @@ -1,4 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 +// solhint-disable pragma solidity ^0.8.0; // Copied from https://github.com/hashgraph/hedera-smart-contracts/blob/main/contracts/wrapped-tokens/WHBAR.sol diff --git a/contracts/test/TestInterchainTokenService.sol b/contracts/test/TestInterchainTokenService.sol index 191a9d93..2ed8e675 100644 --- a/contracts/test/TestInterchainTokenService.sol +++ b/contracts/test/TestInterchainTokenService.sol @@ -14,7 +14,8 @@ contract TestInterchainTokenService is InterchainTokenService { string memory chainName_, string memory itsHubAddress_, address tokenManager_, - address tokenHandler_ + address tokenHandler_, + address whbarAddress_ ) InterchainTokenService( tokenManagerDeployer_, @@ -25,7 +26,8 @@ contract TestInterchainTokenService is InterchainTokenService { chainName_, itsHubAddress_, tokenManager_, - tokenHandler_ + tokenHandler_, + whbarAddress_ ) {} diff --git a/contracts/test/utils/TestTokenCreationPricing.sol b/contracts/test/utils/TestTokenCreationPricing.sol index 2b35b2a6..be1ca0d2 100644 --- a/contracts/test/utils/TestTokenCreationPricing.sol +++ b/contracts/test/utils/TestTokenCreationPricing.sol @@ -7,7 +7,7 @@ import { TokenCreationPricing } from '../../utils/TokenCreationPricing.sol'; contract TestTokenCreationPricing is TokenCreationPricing { error Invalid(); - constructor() { + constructor(address whbarAddress_) TokenCreationPricing(whbarAddress_) { if (TOKEN_CREATION_PRICING_SLOT != uint256(keccak256('TokenCreationPricing.Slot')) - 1) revert Invalid(); } @@ -15,10 +15,6 @@ contract TestTokenCreationPricing is TokenCreationPricing { _setTokenCreationPrice(price); } - function setWhbarAddressTest(address whbarAddress_) external { - _setWhbarAddress(whbarAddress_); - } - function getTokenCreationPricingSlot() external pure returns (uint256) { return TOKEN_CREATION_PRICING_SLOT; } diff --git a/contracts/utils/TokenCreationPricing.sol b/contracts/utils/TokenCreationPricing.sol index 87667cda..df869cd9 100644 --- a/contracts/utils/TokenCreationPricing.sol +++ b/contracts/utils/TokenCreationPricing.sol @@ -9,19 +9,19 @@ contract TokenCreationPricing is ITokenCreationPricing { // uint256(keccak256('TokenCreationPricing.Slot')) - 1 uint256 internal constant TOKEN_CREATION_PRICING_SLOT = 0xb92579529e766822ba0a44394069682b56cba9d6058dc6334ef7fe967101807d; + address public immutable whbarAddress; + struct TokenCreationPricingStorage { uint256 tokenCreationPrice; - address whbarAddress; - } - - function _setTokenCreationPrice(uint256 price) internal { - _tokenCreationPricingStorage().tokenCreationPrice = price; } - function _setWhbarAddress(address whbarAddress_) internal { + constructor(address whbarAddress_) { if (whbarAddress_ == address(0)) revert InvalidWhbarAddress(); + whbarAddress = whbarAddress_; + } - _tokenCreationPricingStorage().whbarAddress = whbarAddress_; + function _setTokenCreationPrice(uint256 price) internal { + _tokenCreationPricingStorage().tokenCreationPrice = price; } /** @@ -44,10 +44,6 @@ contract TokenCreationPricing is ITokenCreationPricing { price = HTS.tinycentsToTinybars(priceTinycents) + 1; } - function whbarAddress() public view returns (address whbarAddress_) { - whbarAddress_ = _tokenCreationPricingStorage().whbarAddress; - } - /** * @notice Gets the specific storage location for preventing upgrade collisions * @return slot containing the storage struct diff --git a/scripts/create-hts-token.js b/scripts/create-hts-token.js index 9d575671..09b1a05c 100644 --- a/scripts/create-hts-token.js +++ b/scripts/create-hts-token.js @@ -25,7 +25,58 @@ async function createHtsToken(hederaClient, operatorPk, name, symbol, decimals = return [tokenAddress, tokenId]; } +/** + * Creates an HTS token with specified keys that may make it unsupported by ITS + * @param {Object} hederaClient - The Hedera client + * @param {PrivateKey} operatorPk - The operator private key + * @param {string} name - Token name + * @param {string} symbol - Token symbol + * @param {number} decimals - Token decimals + * @param {number} initialSupply - Initial token supply + * @param {Object} keys - Object specifying which keys to set: { kyc: boolean, freeze: boolean, wipe: boolean, pause: boolean } + * @returns {Promise<[string, TokenId]>} Returns [tokenAddress, tokenId] + */ +async function createHtsTokenWithKeys(hederaClient, operatorPk, name, symbol, decimals = 8, initialSupply = 0, keys = {}) { + const tokenCreateTx = new TokenCreateTransaction() + .setTokenName(name) + .setTokenSymbol(symbol) + .setTokenType(TokenType.FungibleCommon) + .setDecimals(decimals) + .setInitialSupply(initialSupply) + .setTreasuryAccountId(hederaClient._operator.accountId) + .setSupplyType(TokenSupplyType.Infinite) + .setSupplyKey(operatorPk); + + // Add keys that make the token unsupported by ITS + if (keys.kyc) { + tokenCreateTx.setKycKey(operatorPk); + } + + if (keys.freeze) { + tokenCreateTx.setFreezeKey(operatorPk); + } + + if (keys.wipe) { + tokenCreateTx.setWipeKey(operatorPk); + } + + if (keys.pause) { + tokenCreateTx.setPauseKey(operatorPk); + } + + tokenCreateTx.freezeWith(hederaClient); + + const tokenCreateSign = await tokenCreateTx.sign(operatorPk); + const tokenCreateSubmit = await tokenCreateSign.execute(hederaClient); + const tokenCreateRx = await tokenCreateSubmit.getReceipt(hederaClient); + const tokenId = tokenCreateRx.tokenId; + const tokenAddress = `0x${tokenId.toSolidityAddress().toLowerCase()}`; + + return [tokenAddress, tokenId]; +} + module.exports = { evmAddressToAccountId, createHtsToken, + createHtsTokenWithKeys, }; diff --git a/scripts/deploy.js b/scripts/deploy.js index f2190242..19734a90 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -3,8 +3,6 @@ const { Contract, utils: { defaultAbiCoder }, } = ethers; -const fs = require('fs'); -const path = require('path'); const Proxy = require('../artifacts/contracts/proxies/InterchainProxy.sol/InterchainProxy.json'); const Create3Deployer = require('@axelar-network/axelar-gmp-sdk-solidity/artifacts/contracts/deploy/Create3Deployer.sol/Create3Deployer.json'); const { create3DeployContract, getCreate3Address } = require('@axelar-network/axelar-gmp-sdk-solidity'); @@ -13,6 +11,8 @@ const { deployHTS } = require('./deploy-hts'); const { deployWHBAR, fundWithWHBAR } = require('./deploy-whbar'); const HTS_LIBRARY_NAME = 'contracts/hedera/HTS.sol:HTS'; +// $1 = 100 cents = 100 * 10^8 tinycents +const DEFAULT_TOKEN_CREATION_PRICE = 100 * 10 ** 8; // List of contracts that depend on HTS library const HTS_DEPENDENT_CONTRACTS = [ @@ -83,6 +83,8 @@ async function deployInterchainTokenService( deploymentKey, ownerAddress = wallet.address, operatorAddress = wallet.address, + whbarAddress, + tokenCreationPrice = DEFAULT_TOKEN_CREATION_PRICE, ) { const implementation = await deployContract( wallet, @@ -97,13 +99,14 @@ async function deployInterchainTokenService( itsHubAddress, tokenManagerAddress, tokenHandlerAddress, + whbarAddress, ], true, ); const proxy = await create3DeployContract(create3DeployerAddress, wallet, Proxy, deploymentKey, [ implementation.address, ownerAddress, - defaultAbiCoder.encode(['address', 'string', 'string[]'], [operatorAddress, chainName, evmChains]), + defaultAbiCoder.encode(['address', 'string', 'string[]', 'uint256'], [operatorAddress, chainName, evmChains, tokenCreationPrice]), ]); const service = new Contract(proxy.address, implementation.interface, wallet); @@ -178,22 +181,11 @@ async function deployAll( itsHubAddress, evmChains, deploymentKey, + wallet.address, + wallet.address, + whbar.address, ); - // Set WHBAR address on ITS - console.log('Setting WHBAR address on ITS...'); - const setWhbarTx = await service.setWhbarAddress(whbar.address); - await setWhbarTx.wait(); - console.log(`WHBAR address set on ITS: ${whbar.address}`); - - // Set WHBAR address on ITS - console.log('Setting token creation price on ITS...'); - // $1 = 100 cents = 100 * 10^8 tinycents - const price = 100 * 10 ** 8; - const setTokenCreationPrice = await service.setTokenCreationPrice(price); - await setTokenCreationPrice.wait(); - console.log(`Token creation price set on ITS: ${price} tinycents`); - // Fund ITS with WHBAR if funding amount is specified if (fundingAmount && parseFloat(fundingAmount) > 0) { const fundingAmountWei = ethers.utils.parseEther(fundingAmount); diff --git a/test/InterchainTokenFactory.js b/test/InterchainTokenFactory.js index 7517efed..8bac6730 100644 --- a/test/InterchainTokenFactory.js +++ b/test/InterchainTokenFactory.js @@ -34,7 +34,8 @@ const { } = require('./constants'); const { getBytecodeHash } = require('@axelar-network/axelar-chains-config'); -const { createHtsToken } = require('../scripts/create-hts-token.js'); +const { createHtsToken, createHtsTokenWithKeys } = require('../scripts/create-hts-token.js'); + const { hederaClientFromHardhatConfig } = require('../scripts/hedera-client.js'); const { fundWithWHBAR } = require('../scripts/deploy-whbar'); @@ -59,19 +60,117 @@ describe('InterchainTokenFactory', () => { hederaPk = hederaClientInfo.hederaPk; }); - let whbar; + let whbar, htsAddress, hts; before(async () => { [wallet, otherWallet] = await ethers.getSigners(); - ({ service, gateway, gasService, tokenFactory, whbar } = await deployAll(wallet, chainName, ITS_HUB_ADDRESS, [destinationChain])); + ({ service, gateway, gasService, tokenFactory, whbar, htsAddress } = await deployAll(wallet, chainName, ITS_HUB_ADDRESS, [ + destinationChain, + ])); + + hts = await getContractAt('HTS', htsAddress, wallet); // Fund self with 200 WHBAR - console.log(`Funding ${wallet.address} with ${SELF_FUND_AMOUNT_WHBAR} WHBAR for factory deployments...`); await fundWithWHBAR(whbar, wallet.address, ethers.utils.parseEther(SELF_FUND_AMOUNT_WHBAR), wallet); // Approve the factory to spend WHBAR await whbar.connect(wallet).approve(tokenFactory.address, ethers.constants.MaxUint256); }); + describe.only('Unsupported HTS Token Registration', async () => { + const tokenManagerType = LOCK_UNLOCK; + let operator; + + before(() => { + operator = wallet.address; + }); + + it('Should revert when registering HTS token with KYC key', async () => { + const salt = getRandomBytes32(); + const [tokenAddress] = await createHtsTokenWithKeys(hederaClient, hederaPk, 'KYC Token', 'KYC', decimals, 0, { kyc: true }); + + await expectRevert( + (gasOptions) => tokenFactory.registerCustomToken(salt, tokenAddress, tokenManagerType, operator, gasOptions), + // hts, + // 'TokenUnsupported', + ); + }); + + it('Should revert when registering HTS token with Freeze key', async () => { + const salt = getRandomBytes32(); + const [tokenAddress] = await createHtsTokenWithKeys(hederaClient, hederaPk, 'Freeze Token', 'FREEZE', decimals, 0, { + freeze: true, + }); + + await expectRevert( + (gasOptions) => tokenFactory.registerCustomToken(salt, tokenAddress, tokenManagerType, operator, gasOptions), + // hts, + // 'TokenUnsupported', + ); + }); + + it('Should revert when registering HTS token with Wipe key', async () => { + const salt = getRandomBytes32(); + const [tokenAddress] = await createHtsTokenWithKeys(hederaClient, hederaPk, 'Wipe Token', 'WIPE', decimals, 0, { + wipe: true, + }); + + await expectRevert( + (gasOptions) => tokenFactory.registerCustomToken(salt, tokenAddress, tokenManagerType, operator, gasOptions), + // hts, + // 'TokenUnsupported', + ); + }); + + it('Should revert when registering HTS token with Pause key', async () => { + const salt = getRandomBytes32(); + const [tokenAddress] = await createHtsTokenWithKeys(hederaClient, hederaPk, 'Pause Token', 'PAUSE', decimals, 0, { + pause: true, + }); + + await expectRevert( + (gasOptions) => tokenFactory.registerCustomToken(salt, tokenAddress, tokenManagerType, operator, gasOptions), + // hts, + // 'TokenUnsupported', + ); + }); + + it('Should revert when registering HTS token with multiple unsupported keys', async () => { + const salt = getRandomBytes32(); + const [tokenAddress] = await createHtsTokenWithKeys(hederaClient, hederaPk, 'Multi Key Token', 'MULTI', decimals, 0, { + kyc: true, + freeze: true, + wipe: true, + }); + + await expectRevert( + (gasOptions) => tokenFactory.registerCustomToken(salt, tokenAddress, tokenManagerType, operator, gasOptions), + // hts, + // 'TokenUnsupported', + ); + }); + + it('Should successfully register HTS token without unsupported keys', async () => { + const salt = getRandomBytes32(); + const [tokenAddress] = await createHtsToken(hederaClient, hederaPk, 'Supported Token', 'SUPPORTED', decimals, 0); + const tokenId = await tokenFactory.linkedTokenId(wallet.address, salt); + const expectedTokenManagerAddress = await service.tokenManagerAddress(tokenId); + + await expect(tokenFactory.registerCustomToken(salt, tokenAddress, tokenManagerType, operator)) + .to.emit(service, 'TokenManagerDeployed') + .withArgs(tokenId, expectedTokenManagerAddress, tokenManagerType, (params) => { + const [operator_, tokenAddress_] = defaultAbiCoder.decode(['bytes', 'address'], params); + expect(operator_).to.equal(operator === AddressZero ? '0x' : operator.toLowerCase()); + expect(tokenAddress_).to.equal(tokenAddress); + return true; + }); + + // Verify the token manager was actually deployed and configured correctly + const tokenManager = await getContractAt('TokenManager', expectedTokenManagerAddress, wallet); + expect(await tokenManager.tokenAddress()).to.equal(tokenAddress); + expect(await tokenManager.implementationType()).to.equal(tokenManagerType); + }); + }); + describe('Token Factory Deployment', async () => { it('Should revert on invalid interchain token service address', async () => { await expectRevert( @@ -279,6 +378,24 @@ describe('InterchainTokenFactory', () => { ); }); + it('Should revert when deploying a token without WHBAR approval', async () => { + const salt = keccak256('0x123457'); + const mintAmount = 0; + + // Fund otherWallet with 20 WHBAR + await fundWithWHBAR(whbar, otherWallet.address, ethers.utils.parseEther('20'), wallet); + + // Try to deploy without approving the token factory for WHBAR + await expectRevert( + (gasOptions) => + tokenFactory + .connect(otherWallet) + .deployInterchainToken(salt, name, symbol, decimals, mintAmount, otherWallet.address, gasOptions), + whbar, + 'InsufficientAllowance', + ); + }); + it.skip('Should register a token if the mint amount is greater than zero and the minter is the zero address [unsupported]', async () => { const salt = keccak256('0x12345678'); tokenId = await tokenFactory.interchainTokenId(wallet.address, salt); diff --git a/test/InterchainTokenService.js b/test/InterchainTokenService.js index 75a11d7b..ea216bea 100644 --- a/test/InterchainTokenService.js +++ b/test/InterchainTokenService.js @@ -46,6 +46,7 @@ const { INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE, } = require('./constants'); +const { deployWHBAR } = require('../scripts/deploy-whbar.js'); const { createHtsToken } = require('../scripts/create-hts-token.js'); const { hederaClientFromHardhatConfig } = require('../scripts/hedera-client.js'); @@ -314,6 +315,7 @@ describe('Interchain Token Service', () => { deployFunctions.mintBurnFrom = makeDeployNewMintBurn(MINT_BURN_FROM); deployFunctions.interchainToken = deployNewInterchainToken; + let whbar; before(async () => { const wallets = await ethers.getSigners(); wallet = wallets[0]; @@ -325,8 +327,17 @@ describe('Interchain Token Service', () => { console.log(`\tWallet #1 ${wallet.address} with ${ethers.utils.formatEther(wallet1Balance)} HBAR`); console.log(`\tWallet #2 ${otherWallet.address} with ${ethers.utils.formatEther(wallet2Balance)} HBAR`); - ({ service, gateway, gasService, create3Deployer, tokenManagerDeployer, interchainTokenDeployer, tokenManager, tokenHandler } = - await deployAll(wallet, 'Test', ITS_HUB_ADDRESS, [sourceChain, destinationChain])); + ({ + service, + gateway, + gasService, + create3Deployer, + tokenManagerDeployer, + interchainTokenDeployer, + tokenManager, + tokenHandler, + whbar, + } = await deployAll(wallet, 'Test', ITS_HUB_ADDRESS, [sourceChain, destinationChain])); testErc20Token = await deployContract(wallet, 'TestERC20MintableBurnable', ['Test Token', 'TST', 18]); }); @@ -347,6 +358,7 @@ describe('Interchain Token Service', () => { ITS_HUB_ADDRESS, tokenManager.address, tokenHandler.address, + whbar.address, ]); }); @@ -408,6 +420,9 @@ describe('Interchain Token Service', () => { [], deploymentKey, gasOptions, + wallet.address, + wallet.address, + whbar.address, ), service, 'ZeroAddress', @@ -432,6 +447,9 @@ describe('Interchain Token Service', () => { [], deploymentKey, gasOptions, + wallet.address, + wallet.address, + whbar.address, ), service, 'ZeroAddress', @@ -456,6 +474,9 @@ describe('Interchain Token Service', () => { [], deploymentKey, gasOptions, + wallet.address, + wallet.address, + whbar.address, ), service, 'InvalidChainName', @@ -479,6 +500,9 @@ describe('Interchain Token Service', () => { [], deploymentKey, gasOptions, + wallet.address, + wallet.address, + whbar.address, ), ); }); @@ -501,6 +525,9 @@ describe('Interchain Token Service', () => { [], deploymentKey, gasOptions, + wallet.address, + wallet.address, + whbar.address, ), service, 'ZeroAddress', @@ -525,6 +552,9 @@ describe('Interchain Token Service', () => { [], deploymentKey, gasOptions, + wallet.address, + wallet.address, + whbar.address, ), service, 'ZeroAddress', @@ -549,6 +579,9 @@ describe('Interchain Token Service', () => { [], deploymentKey, gasOptions, + wallet.address, + wallet.address, + whbar.address, ), service, 'ZeroAddress', @@ -573,6 +606,9 @@ describe('Interchain Token Service', () => { [], deploymentKey, gasOptions, + wallet.address, + wallet.address, + whbar.address, ), service, 'ZeroAddress', @@ -595,6 +631,9 @@ describe('Interchain Token Service', () => { '', [], deploymentKey, + wallet.address, + wallet.address, + whbar.address, ), ); }); @@ -766,7 +805,6 @@ describe('Interchain Token Service', () => { const tokenManagerAddress = await service.tokenManagerAddress(tokenId); const minter = '0x'; - const operator = '0x'; const { payload } = encodeReceiveHubMessage( destinationChain, encodeDeployInterchainTokenMessage(tokenId, tokenName, tokenSymbol, tokenDecimals, minter), @@ -833,7 +871,6 @@ describe('Interchain Token Service', () => { const tokenId = getRandomBytes32(); const tokenManagerAddress = await service.tokenManagerAddress(tokenId); const minter = '0x'; - const operator = '0x'; const { payload } = encodeReceiveHubMessage( destinationChain, encodeDeployInterchainTokenMessage(tokenId, tokenName, tokenSymbol, tokenDecimals, minter), @@ -1533,7 +1570,7 @@ describe('Interchain Token Service', () => { ); let transferToAddress = AddressZero; - if (type === 'lockUnlock' || type === 'lockUnlockFee') { + if (type === 'lockUnlock' || type === 'lockUnlockFee' || type === 'lockUnlockErc20') { transferToAddress = tokenManager.address; } diff --git a/test/InterchainTokenServiceUpgradeFlow.js b/test/InterchainTokenServiceUpgradeFlow.js index 947355d1..ef02decc 100644 --- a/test/InterchainTokenServiceUpgradeFlow.js +++ b/test/InterchainTokenServiceUpgradeFlow.js @@ -18,6 +18,7 @@ const { deployInterchainTokenService, deployInterchainTokenFactory, } = require('../scripts/deploy'); +const { deployWHBAR } = require('../scripts/deploy-whbar.js'); const { getBytecodeHash } = require('@axelar-network/axelar-chains-config'); const AxelarServiceGovernance = getContractJSON('AxelarServiceGovernance'); const Create3Deployer = getContractJSON('Create3Deployer'); @@ -57,6 +58,13 @@ describe('Interchain Token Service Upgrade Flow', () => { .withArgs(tokenId, tokenManager.address, LOCK_UNLOCK, params); } + let whbar; + before(async () => { + [wallet, otherWallet] = await ethers.getSigners(); + + whbar = await deployWHBAR(wallet); + }); + before(async () => { [wallet, otherWallet, operator] = await ethers.getSigners(); governanceAddress = otherWallet.address; @@ -100,6 +108,8 @@ describe('Interchain Token Service Upgrade Flow', () => { [], deploymentKey, wallet.address, + wallet.address, + whbar.address, ); tokenFactory = await deployInterchainTokenFactory(wallet, create3Deployer.address, service.address, deploymentKey + 'Factory'); diff --git a/test/UtilsTest.js b/test/UtilsTest.js index 357a3a2f..74167a19 100644 --- a/test/UtilsTest.js +++ b/test/UtilsTest.js @@ -4,12 +4,11 @@ const chai = require('chai'); const { ethers } = require('hardhat'); const { Wallet, - getContractAt, constants: { AddressZero }, } = ethers; const { expect } = chai; const { getRandomBytes32, expectRevert, expectNonZeroAddress } = require('./utils'); -const { deployContract, deployAll } = require('../scripts/deploy'); +const { deployContract } = require('../scripts/deploy'); let ownerWallet, otherWallet; From 01ac9020896b6e16577a9d922f6b7e23baae9145 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Thu, 21 Aug 2025 15:44:39 +0200 Subject: [PATCH 41/49] revert removal of `transmitInterchainTransfer` method --- contracts/InterchainTokenService.sol | 29 ++++++++++++++++++++++++++++ contracts/hedera/README.md | 1 - test/InterchainTokenFactory.js | 6 ++++-- test/InterchainTokenService.js | 9 +++++---- 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/contracts/InterchainTokenService.sol b/contracts/InterchainTokenService.sol index e3594f6e..1442b108 100644 --- a/contracts/InterchainTokenService.sol +++ b/contracts/InterchainTokenService.sol @@ -565,6 +565,35 @@ contract InterchainTokenService is _interchainTransfer(tokenId, destinationChain, destinationAddress, amount, data, gasValue); } + /******************\ + TOKEN ONLY FUNCTIONS + \******************/ + + /** + * @notice Transmit an interchain transfer for the given tokenId. + * @dev Only callable by a token registered under a tokenId. + * @param tokenId The tokenId of the token (which must be the msg.sender). + * @param sourceAddress The address where the token is coming from. + * @param destinationChain The name of the chain to send tokens to. + * @param destinationAddress The destinationAddress for the interchainTransfer. + * @param amount The amount of token to give. + * @param metadata Optional metadata for the call for additional effects (such as calling a destination contract). + */ + function transmitInterchainTransfer( + bytes32 tokenId, + address sourceAddress, + string calldata destinationChain, + bytes memory destinationAddress, + uint256 amount, + bytes calldata metadata + ) external payable whenNotPaused { + amount = _takeToken(tokenId, sourceAddress, amount, true); + + bytes memory data = _decodeMetadata(metadata); + + _transmitInterchainTransfer(tokenId, sourceAddress, destinationChain, destinationAddress, amount, data, msg.value); + } + /*************\ OWNER FUNCTIONS \*************/ diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index 44d24982..f7703caf 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -70,6 +70,5 @@ It uses the [`IHRC719`](./IHRC719.sol) interface to call the `associate` method - When registering a canonical token, only the `TokenManager` is associated with the token. - `InterchainTokenDeployer.sol` `deployedAddress` is not supported, since HTS tokens don't have deterministic addresses. - `interchainTokenAddress` was removed from `InterchainTokenService.sol`, since HTS tokens don't have deterministic addresses. `registeredTokenAddress` should be used instead. -- `transmitInterchainTransfer` was removed from `InterchainTokenService.sol` since it's meant to be called from an `InterchainToken` contract, which is not used. - When creating a new interchain token, `TokenManager` is automatically associated with the token, as the creator. - Both HTS tokens and ERC20 tokens are supported for registration. diff --git a/test/InterchainTokenFactory.js b/test/InterchainTokenFactory.js index 8bac6730..b5de2366 100644 --- a/test/InterchainTokenFactory.js +++ b/test/InterchainTokenFactory.js @@ -60,7 +60,9 @@ describe('InterchainTokenFactory', () => { hederaPk = hederaClientInfo.hederaPk; }); - let whbar, htsAddress, hts; + let whbar; + // eslint-disable-next-line no-unused-vars + let htsAddress, hts; before(async () => { [wallet, otherWallet] = await ethers.getSigners(); ({ service, gateway, gasService, tokenFactory, whbar, htsAddress } = await deployAll(wallet, chainName, ITS_HUB_ADDRESS, [ @@ -76,7 +78,7 @@ describe('InterchainTokenFactory', () => { await whbar.connect(wallet).approve(tokenFactory.address, ethers.constants.MaxUint256); }); - describe.only('Unsupported HTS Token Registration', async () => { + describe('Unsupported HTS Token Registration', async () => { const tokenManagerType = LOCK_UNLOCK; let operator; diff --git a/test/InterchainTokenService.js b/test/InterchainTokenService.js index ea216bea..636884ef 100644 --- a/test/InterchainTokenService.js +++ b/test/InterchainTokenService.js @@ -46,7 +46,6 @@ const { INTERCHAIN_TRANSFER_WITH_METADATA_AND_GAS_VALUE, } = require('./constants'); -const { deployWHBAR } = require('../scripts/deploy-whbar.js'); const { createHtsToken } = require('../scripts/create-hts-token.js'); const { hederaClientFromHardhatConfig } = require('../scripts/hedera-client.js'); @@ -1337,7 +1336,9 @@ describe('Interchain Token Service', () => { await service.setPauseStatus(false).then((tx) => tx.wait()); }); - it.skip('Should revert on transmit send token when service is paused [unsupported]', async () => { + it('Should revert on transmit send token when service is paused', async () => { + await service.setPauseStatus(true).then((tx) => tx.wait()); + await expectRevert( (gasOptions) => service.transmitInterchainTransfer(tokenId, wallet.address, destinationChain, destAddress, amount, '0x', { @@ -1351,7 +1352,7 @@ describe('Interchain Token Service', () => { await service.setPauseStatus(false).then((tx) => tx.wait()); }); - it.skip('Should revert on transmit send token when destination address is zero address [unsupported]', async () => { + it('Should revert on transmit send token when destination address is zero address', async () => { await expectRevert( (gasOptions) => service.transmitInterchainTransfer(tokenId, wallet.address, destinationChain, '0x', amount, '0x', { @@ -1363,7 +1364,7 @@ describe('Interchain Token Service', () => { ); }); - it.skip('Should revert on transmit send token when not called by interchain token [unsupported]', async () => { + it('Should revert on transmit send token when not called by interchain token', async () => { const errorSignatureHash = id('NotToken(address,address)'); const selector = errorSignatureHash.substring(0, 10); const errorData = defaultAbiCoder.encode(['address', 'address'], [wallet.address, token.address]); From b04a12923fef15a032fb03dc488b4f6062f8fed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Mon, 25 Aug 2025 18:16:23 +0200 Subject: [PATCH 42/49] mention non-deterministic token addresses in the overview --- contracts/hedera/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index f7703caf..30018de5 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -4,7 +4,9 @@ ITS contracts in this repo are modified to support Hedera Token Service. All new Interchain Token will be created via HTS, while existing HTS and ERC20 tokens are supported for registration. -New HTS Interchain Tokens will have their Token Manager as the sole Supply Key ("MinterBurner" equivalent in Hedera) and Treasury (the contract that gets the newly minted coins). After minting, the Treasury transfers the tokens to the designated account. Before burning, the tokens are transfered back to the Treasury. Token Managers use typical `allowance` and `transferFrom` to move tokens before burning. Token Manager keeps track of minters and allows for external minting and burning (see `Minter.sol`). Certain ITS features are not supported due to HTS limitations, such as deploying a new Interchain Token with initial supply. +New HTS Interchain Tokens will have their Token Manager as the sole Supply Key ("MinterBurner" equivalent in Hedera) and Treasury (the contract that gets the newly minted coins). After minting, the Treasury transfers the tokens to the designated account. Before burning, the tokens are transfered back to the Treasury. Token Managers use typical `allowance` and `transferFrom` to move tokens before burning. Token Manager keeps track of minters and allows for external minting and burning (see `Minter.sol`). + +Certain ITS features are not supported due to HTS limitations, such as deploying a new Interchain Token with initial supply (more info below). Furthermore, HTS tokens don't have deterministic addresses, so users won't have the same token address as in other EVM chains. You can query the token address using `registeredTokenAddress(tokenId)` method in `InterchainTokenService`, or via the Token Manager. Since the `createFungibleToken` precompile in Hedera requires a fee to be sent as value, an `WHBAR` contract (`WETH` equivalent) is used to hold the HBAR used for token creation. `InterchainTokenService` transfers certain amount of `WHBAR` to the newly deploying `TokenManagerProxy` contract. The `TokenManagerProxy` contract, during constructor, withdraws HBAR from `WHBAR`, and sends it to `InterchainTokenDeployer`, which finally uses it to pay for the token creation. From 70c2fedcf94e2bb377f67d20ef179a4f1271c57a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 10 Sep 2025 12:40:23 +0200 Subject: [PATCH 43/49] docs: add info about the token creation price --- contracts/hedera/README.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index 30018de5..6a34c654 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -8,22 +8,34 @@ New HTS Interchain Tokens will have their Token Manager as the sole Supply Key ( Certain ITS features are not supported due to HTS limitations, such as deploying a new Interchain Token with initial supply (more info below). Furthermore, HTS tokens don't have deterministic addresses, so users won't have the same token address as in other EVM chains. You can query the token address using `registeredTokenAddress(tokenId)` method in `InterchainTokenService`, or via the Token Manager. +### Token Deployments + Since the `createFungibleToken` precompile in Hedera requires a fee to be sent as value, an `WHBAR` contract (`WETH` equivalent) is used to hold the HBAR used for token creation. `InterchainTokenService` transfers certain amount of `WHBAR` to the newly deploying `TokenManagerProxy` contract. The `TokenManagerProxy` contract, during constructor, withdraws HBAR from `WHBAR`, and sends it to `InterchainTokenDeployer`, which finally uses it to pay for the token creation. -For local deployments, the deploying user must ensure it has enough balance in the `WHBAR` contract and appropriate allowance to the `InterchainTokenFactory` contract, which will transfer the `WHBAR` to the `InterchainTokenService` contract. +For **local deployments**, the deploying user must ensure it has enough balance in the `WHBAR` contract and appropriate allowance to the `InterchainTokenFactory` contract, which will transfer the `WHBAR` to the `InterchainTokenService` contract as the payment. + +For **remote deployments**, the balance of `InterchainTokenService` is used. The responsibility of keeping ITS funded on the `WHBAR` contract lies with the contract deployer (Axelar), it is assumed that a top-up mechanism is in place to ensure the contract has enough WHBAR to create new tokens. -For remote deployments, the balance of `InterchainTokenService` is used. The responsibility of keeping ITS funded on the `WHBAR` contract lies with the contract deployer (Axelar), it is assumed that a top-up mechanism is in place to ensure the contract has enough WHBAR to create new tokens. +The price of creating a new HTS token can be queried from `InterchainTokenService` via `tokenCreationPriceTinybars()(uint256)`. See `TokenCreationPricing.sol` for more details. > _Why not send coins directly to the `InterchainTokenService` contract?_ > > We don't want to change the relayer to send value directly to the `execute` method of the `InterchainTokenService` contract. Users _could_ send value directly via the factory, however to simplify the ITS contract the same WHBAR procedure is used, thus making it consistent regardless of whether the deployment is local or remote. +### Flows + ![Deploy New Interchain Token Flow](./diagrams/deploy_interchain_token.png) +Above you can see the general flow for deploying a new Interchain Token on Hedera. For local deployments however the user would deploy via the `InterchainTokenFactory`. + ![Mint Native Interchain Token](./diagrams/native_token_minting.png) +Above you can see the flow for minting an existing native Interchain Token on Hedera. The minting must happen via the Token Manager. ITS and a custom minter are allowed to mint. + ![Register Custom HTS Token](./diagrams/register_custom_hts_token.png) +Above you can see the flow for registering an existing HTS token as an Interchain Token on Hedera. A new Token Manager contract is deployed as a `LOCK/UNLOCK` manager. + ### Deploying with Initial Supply Initial supply is currently not supported when deploying a new Interchain Token on Hedera. To receive tokens, an account needs to previously associate with the token, thus it cannot immediately receive tokens after creation. Associating an account using a smart contract [is not supported](https://hedera.com/blog/get-ready-for-the-updated-security-model-of-the-hedera-smart-contract-service-by-july-2023). @@ -42,7 +54,7 @@ Hedera tokens support so-called facades, which allow them to be used as ERC20 to Unlike a regular ERC20 token, HTS tokens don't emit `Transfer` to and from the zero address on mint and burn. -Association-related methods are also supported, like `associate`, `dissociate`, and `isAssociated`. See [hip-719](https://hips.hedera.com/hip/hip-719) for more details. +Association-related methods are also supported, like `associate`, `dissociate`, and `isAssociated`. See [hip-719](https://hips.hedera.com/hip/hip-719) and [`IHRC719`](./IHRC719.sol) for more details. ### `InterchainTokenExecutable` @@ -59,7 +71,7 @@ It uses the [`IHRC719`](./IHRC719.sol) interface to call the `associate` method ### Hedera-related Notes - Hedera contract and token "rent" and "expiry" are disabled on Hedera and not supported in this implementation. -- Unlike a regular ERC20 token, the [maximum supply for an HTS token is 2^63](https://docs.hedera.com/hedera/sdks-and-apis/sdks/token-service/define-a-token#token-properties). There's planned support for decimal translation in ITS. +- Unlike a regular ERC20 token, the [maximum supply for an HTS token is 2^63](https://docs.hedera.com/hedera/sdks-and-apis/sdks/token-service/define-a-token#token-properties). - HTS tokens with the following keys are not supported by ITS: `kycKey`, `wipeKey`, `freezeKey`, `pauseKey`. `adminKey` can update existing keys, but cannot add new keys if they were not set during the creation of the token ([see here](https://docs.hedera.com/hedera/sdks-and-apis/sdks/token-service/update-a-token)). - `HTS.sol` library is a subset of the Hedera provided system library [HederaTokenService](https://github.com/hashgraph/hedera-smart-contracts/blob/bc3a549c0ca062c51b0045fd1916fdaa0558a360/contracts/system-contracts/hedera-token-service/HederaTokenService.sol). Functions are modified to revert instead of returning response codes. - Currently new tokens created via HTS EVM system contract can have **only one** Supply Key (Minter). From 4a934f63abf80521b341840a1ffe452e3c8bb74b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 10 Sep 2025 12:41:56 +0200 Subject: [PATCH 44/49] docs: use h2 for sections --- contracts/hedera/README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index 6a34c654..46d484e0 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -8,7 +8,7 @@ New HTS Interchain Tokens will have their Token Manager as the sole Supply Key ( Certain ITS features are not supported due to HTS limitations, such as deploying a new Interchain Token with initial supply (more info below). Furthermore, HTS tokens don't have deterministic addresses, so users won't have the same token address as in other EVM chains. You can query the token address using `registeredTokenAddress(tokenId)` method in `InterchainTokenService`, or via the Token Manager. -### Token Deployments +## Token Deployments Since the `createFungibleToken` precompile in Hedera requires a fee to be sent as value, an `WHBAR` contract (`WETH` equivalent) is used to hold the HBAR used for token creation. `InterchainTokenService` transfers certain amount of `WHBAR` to the newly deploying `TokenManagerProxy` contract. The `TokenManagerProxy` contract, during constructor, withdraws HBAR from `WHBAR`, and sends it to `InterchainTokenDeployer`, which finally uses it to pay for the token creation. @@ -22,7 +22,7 @@ The price of creating a new HTS token can be queried from `InterchainTokenServic > > We don't want to change the relayer to send value directly to the `execute` method of the `InterchainTokenService` contract. Users _could_ send value directly via the factory, however to simplify the ITS contract the same WHBAR procedure is used, thus making it consistent regardless of whether the deployment is local or remote. -### Flows +## Flows ![Deploy New Interchain Token Flow](./diagrams/deploy_interchain_token.png) @@ -36,7 +36,7 @@ Above you can see the flow for minting an existing native Interchain Token on He Above you can see the flow for registering an existing HTS token as an Interchain Token on Hedera. A new Token Manager contract is deployed as a `LOCK/UNLOCK` manager. -### Deploying with Initial Supply +## Deploying with Initial Supply Initial supply is currently not supported when deploying a new Interchain Token on Hedera. To receive tokens, an account needs to previously associate with the token, thus it cannot immediately receive tokens after creation. Associating an account using a smart contract [is not supported](https://hedera.com/blog/get-ready-for-the-updated-security-model-of-the-hedera-smart-contract-service-by-july-2023). @@ -48,7 +48,7 @@ Another approach is to have the Relayer [check](https://docs.hedera.com/hedera/s This behaviour can be changed in the future by upgrading the `InterchainTokenFactory` contract to support initial supply, but for now it is not supported. -### Hedera Tokens as ERC20 +## Hedera Tokens as ERC20 Hedera tokens support so-called facades, which allow them to be used as ERC20 tokens. A number of standard methods are supported, like `name`, `balanceOf`, `transfer`, `transferFrom`, `approve`, `allowance`, etc. See [hip-218](https://hips.hedera.com/hip/hip-218) and [hip-376](https://hips.hedera.com/hip/hip-376). `mint` and `burn` are not supported. @@ -56,7 +56,7 @@ Unlike a regular ERC20 token, HTS tokens don't emit `Transfer` to and from the z Association-related methods are also supported, like `associate`, `dissociate`, and `isAssociated`. See [hip-719](https://hips.hedera.com/hip/hip-719) and [`IHRC719`](./IHRC719.sol) for more details. -### `InterchainTokenExecutable` +## `InterchainTokenExecutable` To receive tokens, an `InterchainTokenExecutable` contract needs to previously be associated with the token. The mechanism is left to the end contract, but one possible way is to have a function like so: @@ -68,7 +68,7 @@ function associateWithToken(address tokenAddress_) external { It uses the [`IHRC719`](./IHRC719.sol) interface to call the `associate` method on the token contract, which will associate the contract with the token. There is no need to interact with the `HTS` library or the precompile directly, as the `IHRC719` interface abstracts that away. -### Hedera-related Notes +## Hedera-related Notes - Hedera contract and token "rent" and "expiry" are disabled on Hedera and not supported in this implementation. - Unlike a regular ERC20 token, the [maximum supply for an HTS token is 2^63](https://docs.hedera.com/hedera/sdks-and-apis/sdks/token-service/define-a-token#token-properties). @@ -78,7 +78,7 @@ It uses the [`IHRC719`](./IHRC719.sol) interface to call the `associate` method - Currently new tokens created via HTS EVM system contract must have the Treasury be the creator of the token. - `WHBAR` contracts used can be found [here](https://docs.hedera.com/hedera/core-concepts/smart-contracts/wrapped-hbar-whbar#contract-deployments). -### ITS-related Notes +## ITS-related Notes - `MINT_BURN` and `MINT_BURN_FROM` Token Manager types are currently unsupported, due to missing support of transferring the Treasury role. If this gets supported in the future, the `TokenManager` can be upgraded. - When registering a canonical token, only the `TokenManager` is associated with the token. From cdc6e99fead1b0d2646b61f22ae90d441b5cfe01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 10 Sep 2025 12:42:50 +0200 Subject: [PATCH 45/49] docs: add lines between diagrams --- contracts/hedera/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index 46d484e0..7e6e55cb 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -28,10 +28,14 @@ The price of creating a new HTS token can be queried from `InterchainTokenServic Above you can see the general flow for deploying a new Interchain Token on Hedera. For local deployments however the user would deploy via the `InterchainTokenFactory`. +--- + ![Mint Native Interchain Token](./diagrams/native_token_minting.png) Above you can see the flow for minting an existing native Interchain Token on Hedera. The minting must happen via the Token Manager. ITS and a custom minter are allowed to mint. +--- + ![Register Custom HTS Token](./diagrams/register_custom_hts_token.png) Above you can see the flow for registering an existing HTS token as an Interchain Token on Hedera. A new Token Manager contract is deployed as a `LOCK/UNLOCK` manager. From 73bb1b79299e8ee1be23d106331a29b980737ce2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 10 Sep 2025 12:50:18 +0200 Subject: [PATCH 46/49] docs: add hedera links --- contracts/hedera/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index 7e6e55cb..580c2735 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -1,5 +1,12 @@ # Hedera ITS Support +> [!NOTE] +> It is advised to read the following documents first: +> - [`For EVM Developers Migrating to Hedera`](https://docs.hedera.com/hedera/core-concepts/smart-contracts/understanding-hederas-evm-differences-and-compatibility/for-evm-developers-migrating-to-hedera) +> - [`Tokens on Hedera`](https://docs.hedera.com/hedera/core-concepts/tokens) +> - [`Gas and Fees on Hedera`](https://docs.hedera.com/hedera/core-concepts/smart-contracts/gas-and-fees) +> - [`JSON-RPC Relay`](https://docs.hedera.com/hedera/core-concepts/smart-contracts/json-rpc-relay) + ## Overview ITS contracts in this repo are modified to support Hedera Token Service. All new Interchain Token will be created via HTS, while existing HTS and ERC20 tokens are supported for registration. From 56665154449fea024f63d3d064921ce6143e3819 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 10 Sep 2025 17:03:26 +0200 Subject: [PATCH 47/49] docs: add note about canonical ITS --- contracts/hedera/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index 580c2735..d6e8a4e4 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -1,15 +1,17 @@ # Hedera ITS Support > [!NOTE] -> It is advised to read the following documents first: +> It is advised to read the following Hedera documents first: > - [`For EVM Developers Migrating to Hedera`](https://docs.hedera.com/hedera/core-concepts/smart-contracts/understanding-hederas-evm-differences-and-compatibility/for-evm-developers-migrating-to-hedera) > - [`Tokens on Hedera`](https://docs.hedera.com/hedera/core-concepts/tokens) > - [`Gas and Fees on Hedera`](https://docs.hedera.com/hedera/core-concepts/smart-contracts/gas-and-fees) > - [`JSON-RPC Relay`](https://docs.hedera.com/hedera/core-concepts/smart-contracts/json-rpc-relay) +> +> This document also assumes familiarity with the canonical [Interchain Token Service](https://github.com/axelarnetwork/interchain-token-service) and its concepts, and will mainly focus on the differences and specifics of the Hedera implementation. The fork was done from commit [fce4ba2f122bf6bd568f1a08186842937b6fa1ca](https://github.com/axelarnetwork/interchain-token-service/commit/fce4ba2f122bf6bd568f1a08186842937b6fa1ca); ## Overview -ITS contracts in this repo are modified to support Hedera Token Service. All new Interchain Token will be created via HTS, while existing HTS and ERC20 tokens are supported for registration. +ITS contracts in this repo are modified to support Hedera Token Service. All new Interchain Token will be created via [HTS](./HTS.sol), while existing HTS and ERC20 tokens are supported for registration. New HTS Interchain Tokens will have their Token Manager as the sole Supply Key ("MinterBurner" equivalent in Hedera) and Treasury (the contract that gets the newly minted coins). After minting, the Treasury transfers the tokens to the designated account. Before burning, the tokens are transfered back to the Treasury. Token Managers use typical `allowance` and `transferFrom` to move tokens before burning. Token Manager keeps track of minters and allows for external minting and burning (see `Minter.sol`). From 18065369e30c110882c9e5cefe83d3becd94515e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Wed, 10 Sep 2025 17:04:27 +0200 Subject: [PATCH 48/49] docs: link to tree view instead of commit --- contracts/hedera/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/hedera/README.md b/contracts/hedera/README.md index d6e8a4e4..d7aa1ab2 100644 --- a/contracts/hedera/README.md +++ b/contracts/hedera/README.md @@ -7,7 +7,7 @@ > - [`Gas and Fees on Hedera`](https://docs.hedera.com/hedera/core-concepts/smart-contracts/gas-and-fees) > - [`JSON-RPC Relay`](https://docs.hedera.com/hedera/core-concepts/smart-contracts/json-rpc-relay) > -> This document also assumes familiarity with the canonical [Interchain Token Service](https://github.com/axelarnetwork/interchain-token-service) and its concepts, and will mainly focus on the differences and specifics of the Hedera implementation. The fork was done from commit [fce4ba2f122bf6bd568f1a08186842937b6fa1ca](https://github.com/axelarnetwork/interchain-token-service/commit/fce4ba2f122bf6bd568f1a08186842937b6fa1ca); +> This document also assumes familiarity with the canonical [Interchain Token Service](https://github.com/axelarnetwork/interchain-token-service) and its concepts, and will mainly focus on the differences and specifics of the Hedera implementation. The fork was done from commit [fce4ba2f122bf6bd568f1a08186842937b6fa1ca](https://github.com/axelarnetwork/interchain-token-service/tree/fce4ba2f122bf6bd568f1a08186842937b6fa1ca); ## Overview From c6fda1781dfb0a00d9e74e420cca7beba9bbcda8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Risti=C4=87?= Date: Thu, 25 Sep 2025 19:52:37 +0200 Subject: [PATCH 49/49] fix: support registration of native tokens with lower max supply --- contracts/token-manager/TokenManager.sol | 18 ++++++++++++++++-- scripts/create-hts-token.js | 22 ++++++++++++++++------ scripts/deploy.js | 5 ++++- test/InterchainTokenFactory.js | 20 ++++++++++++++++++++ 4 files changed, 56 insertions(+), 9 deletions(-) diff --git a/contracts/token-manager/TokenManager.sol b/contracts/token-manager/TokenManager.sol index 2be0833f..cc49a924 100644 --- a/contracts/token-manager/TokenManager.sol +++ b/contracts/token-manager/TokenManager.sol @@ -15,7 +15,7 @@ import { IERC20MintableBurnable } from '../interfaces/IERC20MintableBurnable.sol import { Operator } from '../utils/Operator.sol'; import { FlowLimit } from '../utils/FlowLimit.sol'; -import { HTS } from '../hedera/HTS.sol'; +import { HTS, IHederaTokenService } from '../hedera/HTS.sol'; import { Minter } from '../utils/Minter.sol'; /** @@ -236,7 +236,21 @@ contract TokenManager is ITokenManager, Minter, Operator, FlowLimit, Implementat function approveService() external onlyService { address tokenAddress_ = this.tokenAddress(); bool isHTSToken = HTS.isToken(tokenAddress_); - uint256 amount = isHTSToken ? INT64_MAX : UINT256_MAX; + uint256 amount; + if (isHTSToken) { + IHederaTokenService.FungibleTokenInfo memory info = HTS.getFungibleTokenInfo(tokenAddress_); + uint256 maxSupply = uint256(uint64(info.tokenInfo.token.maxSupply)); + + // If maxSupply is 0, the token has no max supply + // thus we approve the maximum value + if (maxSupply != 0 && maxSupply < INT64_MAX) { + amount = maxSupply; + } else { + amount = INT64_MAX; + } + } else { + amount = UINT256_MAX; + } /** * @dev Some tokens may not obey the infinite approval. * Even so, it is unexpected to run out of allowance in practice. diff --git a/scripts/create-hts-token.js b/scripts/create-hts-token.js index 09b1a05c..c80360f9 100644 --- a/scripts/create-hts-token.js +++ b/scripts/create-hts-token.js @@ -4,19 +4,29 @@ function evmAddressToAccountId(evmAddress) { return AccountId.fromEvmAddress(evmAddress); } -async function createHtsToken(hederaClient, operatorPk, name, symbol, decimals = 8, intialSupply = 0) { - const tokenCreateTx = new TokenCreateTransaction() +async function createHtsToken(hederaClient, operatorPk, name, symbol, decimals = 8, intialSupply = 0, maxSupply = 0) { + let tx = new TokenCreateTransaction() .setTokenName(name) .setTokenSymbol(symbol) .setTokenType(TokenType.FungibleCommon) .setDecimals(decimals) .setInitialSupply(intialSupply) .setTreasuryAccountId(hederaClient._operator.accountId) - .setSupplyType(TokenSupplyType.Infinite) - .setSupplyKey(operatorPk) - .freezeWith(hederaClient); + .setSupplyKey(operatorPk); - const tokenCreateSign = await tokenCreateTx.sign(operatorPk); + if (maxSupply > 0) { + if (intialSupply > maxSupply) { + throw new Error('Initial supply cannot be greater than max supply'); + } + + tx = tx.setSupplyType(TokenSupplyType.Finite).setMaxSupply(maxSupply); + } else { + tx = tx.setSupplyType(TokenSupplyType.Infinite); + } + + tx = tx.freezeWith(hederaClient); + + const tokenCreateSign = await tx.sign(operatorPk); const tokenCreateSubmit = await tokenCreateSign.execute(hederaClient); const tokenCreateRx = await tokenCreateSubmit.getReceipt(hederaClient); const tokenId = tokenCreateRx.tokenId; diff --git a/scripts/deploy.js b/scripts/deploy.js index 19734a90..809eb0b6 100644 --- a/scripts/deploy.js +++ b/scripts/deploy.js @@ -10,6 +10,9 @@ const { ITS_HUB_ADDRESS } = require('../test/constants'); const { deployHTS } = require('./deploy-hts'); const { deployWHBAR, fundWithWHBAR } = require('./deploy-whbar'); +// Amount of WHBAR to fund ITS with +const ITS_FUND_AMOUNT_WHBAR = '300'; +// HTS library path+name const HTS_LIBRARY_NAME = 'contracts/hedera/HTS.sol:HTS'; // $1 = 100 cents = 100 * 10^8 tinycents const DEFAULT_TOKEN_CREATION_PRICE = 100 * 10 ** 8; @@ -134,7 +137,7 @@ async function deployAll( factoryDeploymentKey = deploymentKey + 'Factory', htsAddress = null, whbarAddress = null, - fundingAmount = '300', // Default 300 HBAR funding for ITS + fundingAmount = ITS_FUND_AMOUNT_WHBAR, ) { // Override with provided addresses if specified if (htsAddress) deploymentContext.htsAddress = htsAddress; diff --git a/test/InterchainTokenFactory.js b/test/InterchainTokenFactory.js index b5de2366..f1f38fd5 100644 --- a/test/InterchainTokenFactory.js +++ b/test/InterchainTokenFactory.js @@ -246,6 +246,26 @@ describe('InterchainTokenFactory', () => { .withArgs(tokenId, tokenManagerAddress, LOCK_UNLOCK, params); }); + it('Should register a token with lower max-supply', async () => { + const maxSupply = 10000; + const [maxSupplyTokenAddress] = await createHtsToken( + hederaClient, + hederaPk, + 'Max Supply Token', + 'MAXSPL', + 8, + maxSupply, + maxSupply, + ); + const maxSupplyToken = await getContractAt('IERC20Named', maxSupplyTokenAddress, wallet); + + const params = defaultAbiCoder.encode(['bytes', 'address'], ['0x', maxSupplyToken.address]); + + await expect(tokenFactory.registerCanonicalInterchainToken(maxSupplyToken.address)) + .to.emit(service, 'TokenManagerDeployed') + .withArgs(tokenId, tokenManagerAddress, LOCK_UNLOCK, params); + }); + it('Should not register a non-existing token', async () => { await expectRevert( (gasOptions) => tokenFactory.registerCanonicalInterchainToken(tokenFactory.address, { gasOptions }),