From 9a224a3175ef8910a424e975631ab0fae7aa77a1 Mon Sep 17 00:00:00 2001 From: Marko Gracin Date: Mon, 27 Jan 2025 16:14:05 +0100 Subject: [PATCH 1/4] =?UTF-8?q?feat(contracts):=20=F0=9F=8E=B8=20update=20?= =?UTF-8?q?contracts=20repository=20with=20Blokk=20template?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/.env.example | 12 - contracts/.gitignore | 7 - contracts/LICENSE | 21 + contracts/Makefile | 20 + contracts/README.md | 276 +- contracts/SECURITY.md | 5 + .../Create2DeployerLocal.json | 34 + .../contracts/src/Greeter.sol/Greeter.json | 5 + .../src/contracts/CreateX.sol/CreateX.json | 34 + contracts/arguments.js | 7 + .../NFTContract.sol/NFTContract.dbg.json | 4 - .../NFTContract.sol/NFTContract.json | 403 - .../ExpiryHelper.sol/ExpiryHelper.dbg.json | 4 - .../utils/ExpiryHelper.sol/ExpiryHelper.json | 10 - .../HederaResponseCodes.dbg.json | 4 - .../HederaResponseCodes.json | 10 - .../HederaTokenService.dbg.json | 4 - .../HederaTokenService.json | 127 - .../IHederaTokenService.dbg.json | 4 - .../IHederaTokenService.json | 3398 --------- .../utils/KeyHelper.sol/Bits.dbg.json | 4 - .../contracts/utils/KeyHelper.sol/Bits.json | 10 - .../utils/KeyHelper.sol/KeyHelper.dbg.json | 4 - .../utils/KeyHelper.sol/KeyHelper.json | 10 - contracts/contracts/NFTContract.sol | 137 - .../contracts/src/Create2DeployerLocal.sol | 6 + contracts/contracts/src/Greeter.sol | 18 + contracts/contracts/test/Greeter.t.sol | 19 + contracts/contracts/utils/ExpiryHelper.sol | 20 - .../contracts/utils/HederaResponseCodes.sol | 311 - .../contracts/utils/HederaTokenService.sol | 707 -- .../contracts/utils/IHederaTokenService.sol | 869 --- contracts/contracts/utils/KeyHelper.sol | 166 - contracts/deploy-args.ts | 6 + contracts/deploy/deploy-zksync.ts | 51 + contracts/eslint.config.js | 47 + contracts/foundry.toml | 26 + contracts/hardhat.config.ts | 2286 +++++- contracts/index.ts | 6 - contracts/package.json | 237 +- contracts/remappings.txt | 4 + contracts/renovate.json | 16 + contracts/scripts/client.ts | 56 - contracts/scripts/deploy.sh | 26 + contracts/scripts/deploy.ts | 136 +- contracts/scripts/deploy_local.sh | 29 + contracts/scripts/flatten.sh | 11 + contracts/scripts/interact.ts | 37 + contracts/scripts/minter/add.ts | 57 - contracts/scripts/minter/remove.ts | 56 - contracts/scripts/verify.sh | 38 + contracts/slither.config.json | 11 + contracts/test/Greeter.test.ts | 39 + contracts/tsconfig.json | 27 +- pnpm-lock.yaml | 6518 +++++++++++++++-- 55 files changed, 9357 insertions(+), 7033 deletions(-) delete mode 100644 contracts/.env.example delete mode 100644 contracts/.gitignore create mode 100644 contracts/LICENSE create mode 100644 contracts/Makefile create mode 100644 contracts/SECURITY.md create mode 100644 contracts/abis/contracts/src/Create2DeployerLocal.sol/Create2DeployerLocal.json create mode 100644 contracts/abis/contracts/src/Greeter.sol/Greeter.json create mode 100644 contracts/abis/xdeployer/src/contracts/CreateX.sol/CreateX.json create mode 100644 contracts/arguments.js delete mode 100644 contracts/artifacts/contracts/NFTContract.sol/NFTContract.dbg.json delete mode 100644 contracts/artifacts/contracts/NFTContract.sol/NFTContract.json delete mode 100644 contracts/artifacts/contracts/utils/ExpiryHelper.sol/ExpiryHelper.dbg.json delete mode 100644 contracts/artifacts/contracts/utils/ExpiryHelper.sol/ExpiryHelper.json delete mode 100644 contracts/artifacts/contracts/utils/HederaResponseCodes.sol/HederaResponseCodes.dbg.json delete mode 100644 contracts/artifacts/contracts/utils/HederaResponseCodes.sol/HederaResponseCodes.json delete mode 100644 contracts/artifacts/contracts/utils/HederaTokenService.sol/HederaTokenService.dbg.json delete mode 100644 contracts/artifacts/contracts/utils/HederaTokenService.sol/HederaTokenService.json delete mode 100644 contracts/artifacts/contracts/utils/IHederaTokenService.sol/IHederaTokenService.dbg.json delete mode 100644 contracts/artifacts/contracts/utils/IHederaTokenService.sol/IHederaTokenService.json delete mode 100644 contracts/artifacts/contracts/utils/KeyHelper.sol/Bits.dbg.json delete mode 100644 contracts/artifacts/contracts/utils/KeyHelper.sol/Bits.json delete mode 100644 contracts/artifacts/contracts/utils/KeyHelper.sol/KeyHelper.dbg.json delete mode 100644 contracts/artifacts/contracts/utils/KeyHelper.sol/KeyHelper.json delete mode 100644 contracts/contracts/NFTContract.sol create mode 100644 contracts/contracts/src/Create2DeployerLocal.sol create mode 100644 contracts/contracts/src/Greeter.sol create mode 100644 contracts/contracts/test/Greeter.t.sol delete mode 100644 contracts/contracts/utils/ExpiryHelper.sol delete mode 100644 contracts/contracts/utils/HederaResponseCodes.sol delete mode 100644 contracts/contracts/utils/HederaTokenService.sol delete mode 100644 contracts/contracts/utils/IHederaTokenService.sol delete mode 100644 contracts/contracts/utils/KeyHelper.sol create mode 100644 contracts/deploy-args.ts create mode 100644 contracts/deploy/deploy-zksync.ts create mode 100644 contracts/eslint.config.js create mode 100644 contracts/foundry.toml delete mode 100644 contracts/index.ts create mode 100644 contracts/remappings.txt create mode 100644 contracts/renovate.json delete mode 100644 contracts/scripts/client.ts create mode 100644 contracts/scripts/deploy.sh create mode 100644 contracts/scripts/deploy_local.sh create mode 100644 contracts/scripts/flatten.sh create mode 100644 contracts/scripts/interact.ts delete mode 100644 contracts/scripts/minter/add.ts delete mode 100644 contracts/scripts/minter/remove.ts create mode 100644 contracts/scripts/verify.sh create mode 100644 contracts/slither.config.json create mode 100644 contracts/test/Greeter.test.ts diff --git a/contracts/.env.example b/contracts/.env.example deleted file mode 100644 index aa4d33f..0000000 --- a/contracts/.env.example +++ /dev/null @@ -1,12 +0,0 @@ -HEDERA_ACCOUNT_ID= -HEDERA_PRIVATE_KEY= -# the type of key used (ed25519 or ecdsa). we can't analyze the key to figure this out, so you need to provide what type your private key is. -HEDERA_PRIVATE_KEY_TYPE=ed25519 - -# testnet / mainnet -HEDERA_ENVIRONMENT=testnet - -# dummy ipfs, needs to be replaced with a real one -NFT_METADATA_BASE_URL=ipfs://bafyreie3ichmqul4xa7e6xcy34tylbuq2vf3gnjf7c55trg3b6xyjr4bku/metadata.json - - diff --git a/contracts/.gitignore b/contracts/.gitignore deleted file mode 100644 index 7303215..0000000 --- a/contracts/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Hardhat files -cache/ -typechain-types/ -artifacts/ - -# Dependency directories -node_modules/ \ No newline at end of file diff --git a/contracts/LICENSE b/contracts/LICENSE new file mode 100644 index 0000000..0e6178b --- /dev/null +++ b/contracts/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/contracts/Makefile b/contracts/Makefile new file mode 100644 index 0000000..74a75ca --- /dev/null +++ b/contracts/Makefile @@ -0,0 +1,20 @@ +# dependencies +update :; forge update + +# install latest stable solc version +solc :; sudo add-apt-repository ppa:ethereum/ethereum && sudo apt-get update && sudo apt-get install solc + +# build & test +build :; forge build +build-optimised :; forge build --optimize +test-forge :; forge test +test-gasreport :; forge test --gas-report +trace :; forge test -vvvvv +clean :; forge clean +snapshot :; forge snapshot + +# chmod scripts +scripts :; chmod +x ./scripts/* + +# fork mainnet with Hardhat +mainnet-fork :; npx hardhat node --fork ${ETH_MAINNET_RPC_URL} diff --git a/contracts/README.md b/contracts/README.md index 340df6f..514d47c 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -1,90 +1,186 @@ -# Contract is work in progress - -## What is covered? -- a simple and clean way to create a NFT via smart contract, in the Hedera way. -- as there is no way to send NFT to user wallets during mint (as it's possible in Eth), we are assigning the target wallet id upon mint. Later on, only the assigned wallet will be able to claim the NFT. - -## What's needed? -- create BIDI fungible token and lock a certain amount on the NFT, upon minting. The contract will be re-deployed after that's done. - -## Deploy the contract -To deploy the project as it is: -- to clear previous contract generations and artifacts ``pnpm run clear`` -- to compile a fresh contract ``pnpm run compile`` -- before deploying the contract, we have to make sure we added ``NFT_METADATA_URI`` in env variables as future NFT metadata will be saved under that folder. (https://pinata.cloud/ would be a nice place to start..) -- when everything is ready, run ``pnm run deploy`` and the contract will be deployed, and NFT collection created. - -Logs after the deployment: -```html -> ts-node scripts/deploy.ts - -Client setup complete. - ------ Account Information ----- -💰 Account Balance: - - 198.56787986 ℏ (HBAR) - ------ Deployment Configuration ----- -Operator Account: 0.0.4425801 -Network: Testnet -Metadata URI: ipfs://bafyreie3ichmqul4xa7e6xcy34tylbuq2vf3gnjf7c55trg3b6xyjr4bku/metadata.json -HashScan Explorer: https://hashscan.io/testnet - ------ Reading Contract ----- -Contract bytecode size: 10689 bytes - ------ Deploying Contract ----- -Initiating contract deployment... -Contract deployed successfully! -Contract ID: 0.0.5266745 -View Contract: https://hashscan.io/testnet/contract/0.0.5266745 - ------ Creating NFT Collection ----- -Initiating NFT collection creation... -NFT Collection created successfully! -Collection Details: - - Token ID: 0.0.5266746 - - Name: Fall Collection - - Symbol: LEAF - - Max Supply: 250 -View Token: https://hashscan.io/testnet/token/0.0.5266746 - ------ Minting NFT ----- -Initiating NFT minting... -NFT Minted successfully! -NFT Details: - - Serial Number: 1 - - Token ID: 0.0.5266746 - - Metadata: ipfs://bafyreie3ichmqul4xa7e6xcy34tylbuq2vf3gnjf7c55trg3b6xyjr4bku/metadata.json - - Allowed Claimer: 000000000000000000000000000000000001e240 -View NFT: https://hashscan.io/testnet/token/0.0.5266746/1 - ------ Deployment Summary ----- -Contract ID: 0.0.5266745 -Token ID: 0.0.5266746 -NFT Serial: 1 - -``` - -### Claim logs: - -on successful claim: -```html ------ Claiming NFT ----- -Initiating claim for NFT #1 -NFT claimed successfully! -Claim Details: - - Token ID: 0.0.5266928 - - Serial Number: 1 - - New Owner: 0.0.4425801 -View NFT: https://hashscan.io/testnet/token/0.0.5266928/1 - -``` - -if trying to claim a NFT assigned to another wallet -```html ------ Claiming NFT ----- -Initiating claim for NFT #1 -Error claiming NFT: receipt for transaction 0.0.4425801@1734219979.978556893 contained error status CONTRACT_REVERT_EXECUTED - -``` \ No newline at end of file +# Fully-Fledged Hardhat Project Template Based on TypeScript + +[![🕵️‍♂️ Test smart contracts](https://github.com/blokk-studio/hardhat-project-template-ts/actions/workflows/test-contracts.yml/badge.svg)](https://github.com/blokk-studio/hardhat-project-template-ts/actions/workflows/test-contracts.yml) +[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/license/mit) + +## Installation + +It is recommended to install [`pnpm`](https://pnpm.io) through the `npm` package manager, which comes bundled with [Node.js](https://nodejs.org/en) when you install it on your system. It is recommended to use a Node.js version `>= 22.0.0`. + +Once you have `npm` installed, you can run the following both to install and upgrade `pnpm`: + +```console +npm install -g pnpm +``` + +After having installed `pnpm`, simply run: + +```console +pnpm install +``` + +## Running Deployments + +> [!NOTE] +> The deployment script [`deploy.ts`](./scripts/deploy.ts) attempts to automatically verify the contract on the target chain after deployment. If you have not configured an API key, the verification will fail. + +**Example Goerli:** + +```console +pnpm deploy:goerli +``` + +> The deployment script [`deploy.ts`](./scripts/deploy.ts) includes the `tenderly` Hardhat Runtime Environment (HRE) extension with the `verify` method. Please consider uncommenting and configuring the Tenderly `project`, `username`, `forkNetwork`, `privateVerification`, and `deploymentsDir` attributes in the [`hardhat.config.ts`](./hardhat.config.ts) file before deploying or remove this call. Also, for this plugin to function you need to create a `config.yaml` file at `$HOME/.tenderly/config.yaml` or `%HOMEPATH%\.tenderly\config.yaml` and add an `access_key` field to it. For further information, see [here](https://github.com/Tenderly/hardhat-tenderly/tree/master/packages/hre-extender-v2#installing-tenderly-cli). + +> For the deployment on the [ZKsync Era](https://docs.zksync.io/) test network, you must add your to-be-deployed contract artifact to [`deploy-zksync.ts`](./deploy/deploy-zksync.ts), enable `zksync` in the [`hardhat.config.ts`](./hardhat.config.ts#L121) file, and then run `pnpm compile` (in case you face any compilation issues, disable all configurations associated with the [`@tenderly/hardhat-tenderly`](https://github.com/Tenderly/hardhat-tenderly) plugin, including the `import` statement itself; see also [here](https://github.com/matter-labs/hardhat-zksync/issues/998) and [here](https://github.com/matter-labs/hardhat-zksync/issues/1174)). Next, fund your deployer account on ZKsync Era Testnet, setup the ZKsync-related configuration variables accordingly, and simply run `pnpm deploy:zksynctestnet`. Eventually, to verify the contract you can invoke: `npx hardhat verify --network zkSyncTestnet --constructor-args arguments.js `. The same approach applies if you want to deploy on the production network, except that you need to run `pnpm deploy:zksyncmain` and use `--network zkSyncMain` for the contract verification. + +## Running `CREATE2` Deployments + +```console +pnpm xdeploy +``` + +This template uses the [`xdeployer`](https://github.com/pcaversaccio/xdeployer) Hardhat plugin. Check out the documentation for more information on the specifics of the deployments. + +## Configuration Variables + +Run `npx hardhat vars set PRIVATE_KEY` to set the private key of your wallet. This allows secure access to your wallet to use with both testnet and mainnet funds during Hardhat deployments. + +You can also run `npx hardhat vars setup` to see which other [configuration variables](https://hardhat.org/hardhat-runner/docs/guides/configuration-variables) are available. + +## Using a Ledger Hardware Wallet + +This template implements the [`hardhat-ledger`](https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-ledger) plugin. Run `npx hardhat set LEDGER_ACCOUNT` and enter the address of the Ledger account you want to use. + +## Using the Truffle Dashboard + +> [!IMPORTANT] +> Truffle has been [sunsetted](https://consensys.io/blog/consensys-announces-the-sunset-of-truffle-and-ganache-and-new-hardhat) by Consensys, but I still keep it in the template as I find it a very valuable tool. Please note that due to the lengthy loading time of Truffle Dashboard's `npm` package [`@truffle/dashboard-hardhat-plugin`](https://www.npmjs.com/package/@truffle/dashboard-hardhat-plugin), the module is disabled by default in the [`hardhat.config.ts`](./hardhat.config.ts) file. If you want to use it, you must uncomment the module import and the `truffle` configuration accordingly. + +[Truffle](https://archive.trufflesuite.com) developed the [Truffle Dashboard](https://archive.trufflesuite.com/docs/truffle/how-to/use-the-truffle-dashboard/) to provide an easy way to use your existing MetaMask wallet for your deployments and for other transactions that you need to send from a command line context. Because the Truffle Dashboard connects directly to MetaMask it is also possible to use it in combination with hardware wallets like [Ledger](https://www.ledger.com) or [Trezor](https://trezor.io). + +First, it is recommended that you install Truffle globally by running: + +```console +npm install -g truffle +``` + +> If you have already installed Truffle, you need to ensure that you have at least version [`5.11.5`](https://github.com/trufflesuite/truffle/releases/tag/v5.11.5) installed and otherwise upgrade. + +To start a Truffle Dashboard, you need to run the following command in a separate terminal window: + +```console +truffle dashboard +``` + +By default, the command above starts a Truffle Dashboard at `http://localhost:24012` and opens the Dashboard in a new tab in your default browser. The Dashboard then prompts you to connect your wallet and confirm that you're connected to the right network. **You should double check your connected network at this point, since switching to a different network during a deployment can have unintended consequences.** + +Eventually, in order to deploy with the Truffle Dashboard, you can simply run: + +```console +pnpm deploy:dashboard +``` + +## Mainnet Forking + +You can start an instance of the Hardhat network that forks the mainnet. This means that it will simulate having the same state as the mainnet, but it will work as a local development network. That way you can interact with deployed protocols and test complex interactions locally. To use this feature, you need to connect to an archive node. + +This template is currently configured via the [`hardhat.config.ts`](./hardhat.config.ts) as follows: + +```ts +forking: { + url: vars.get("ETH_MAINNET_URL", ethMainnetUrl), + // The Hardhat network will by default fork from the latest mainnet block + // To pin the block number, specify it below + // You will need access to a node with archival data for this to work! + // blockNumber: 14743877, + // If you want to do some forking, set `enabled` to true + enabled: false, +}, +``` + +## Contract Verification + +Change the contract address to your contract after the deployment has been successful. This works for both testnet and mainnet. You will need to get an API key from [etherscan](https://etherscan.io), [snowtrace](https://snowtrace.io) etc. + +**Example:** + +```console +npx hardhat verify --network fantomMain --constructor-args arguments.js +``` + +## Contract Interaction + +This template includes an [example script](./scripts/interact.ts) that shows how to interact programmatically with a deployed contract. You must customise it according to your contract's specifications. The script can be simply invoked via: + +```console +npx hardhat run scripts/interact.ts --network +``` + +## Foundry + +This template repository also includes the [Foundry](https://github.com/foundry-rs/foundry) toolkit as well as the [`@nomicfoundation/hardhat-foundry`](https://hardhat.org/hardhat-runner/docs/advanced/hardhat-and-foundry) plugin. + +> If you need help getting started with Foundry, I recommend reading the [📖 Foundry Book](https://book.getfoundry.sh). + +### Dependencies + +```console +make update +``` + +or + +```console +forge update +``` + +### Compilation + +```console +make build +``` + +or + +```console +forge build +``` + +### Testing + +To run only TypeScript tests: + +```console +pnpm test:hh +``` + +To run only Solidity tests: + +```console +pnpm test:forge +``` + +or + +```console +make test-forge +``` + +To additionally display the gas report, you can run: + +```console +make test-gasreport +``` + +### Deployment and Etherscan Verification + +Inside the [`scripts/`](./scripts) folder are a few preconfigured scripts that can be used to deploy and verify contracts via Foundry. These scripts are required to be _executable_ meaning they must be made executable by running: + +```console +make scripts +``` + +## Acknowledgement + +This template is a public fork of [pcaversaccio](https://github.com/pcaversaccio)'s [template](https://github.com/pcaversaccio/hardhat-project-template-ts), licensed under the [MIT License](https://github.com/pcaversaccio/hardhat-project-template-ts/blob/main/LICENSE). diff --git a/contracts/SECURITY.md b/contracts/SECURITY.md new file mode 100644 index 0000000..b0cfa4f --- /dev/null +++ b/contracts/SECURITY.md @@ -0,0 +1,5 @@ +# 🛡️ Security Policy + +## 📬 Reporting a Vulnerability + +Please report any security issues you find to [email@address.com](mailto:email@address.com). diff --git a/contracts/abis/contracts/src/Create2DeployerLocal.sol/Create2DeployerLocal.json b/contracts/abis/contracts/src/Create2DeployerLocal.sol/Create2DeployerLocal.json new file mode 100644 index 0000000..527fc1d --- /dev/null +++ b/contracts/abis/contracts/src/Create2DeployerLocal.sol/Create2DeployerLocal.json @@ -0,0 +1,34 @@ +[ + "error FailedContractCreation(address)", + "error FailedContractInitialisation(address,bytes)", + "error FailedEtherTransfer(address,bytes)", + "error InvalidNonceValue(address)", + "error InvalidSalt(address)", + "event ContractCreation(address indexed,bytes32 indexed)", + "event ContractCreation(address indexed)", + "event Create3ProxyContractCreation(address indexed,bytes32 indexed)", + "function computeCreate2Address(bytes32,bytes32) view returns (address)", + "function computeCreate2Address(bytes32,bytes32,address) pure returns (address)", + "function computeCreate3Address(bytes32,address) pure returns (address)", + "function computeCreate3Address(bytes32) view returns (address)", + "function computeCreateAddress(uint256) view returns (address)", + "function computeCreateAddress(address,uint256) view returns (address)", + "function deployCreate(bytes) payable returns (address)", + "function deployCreate2(bytes32,bytes) payable returns (address)", + "function deployCreate2(bytes) payable returns (address)", + "function deployCreate2AndInit(bytes32,bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", + "function deployCreate2AndInit(bytes,bytes,tuple(uint256,uint256)) payable returns (address)", + "function deployCreate2AndInit(bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", + "function deployCreate2AndInit(bytes32,bytes,bytes,tuple(uint256,uint256)) payable returns (address)", + "function deployCreate2Clone(bytes32,address,bytes) payable returns (address)", + "function deployCreate2Clone(address,bytes) payable returns (address)", + "function deployCreate3(bytes) payable returns (address)", + "function deployCreate3(bytes32,bytes) payable returns (address)", + "function deployCreate3AndInit(bytes32,bytes,bytes,tuple(uint256,uint256)) payable returns (address)", + "function deployCreate3AndInit(bytes,bytes,tuple(uint256,uint256)) payable returns (address)", + "function deployCreate3AndInit(bytes32,bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", + "function deployCreate3AndInit(bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", + "function deployCreateAndInit(bytes,bytes,tuple(uint256,uint256)) payable returns (address)", + "function deployCreateAndInit(bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", + "function deployCreateClone(address,bytes) payable returns (address)" +] diff --git a/contracts/abis/contracts/src/Greeter.sol/Greeter.json b/contracts/abis/contracts/src/Greeter.sol/Greeter.json new file mode 100644 index 0000000..52f774d --- /dev/null +++ b/contracts/abis/contracts/src/Greeter.sol/Greeter.json @@ -0,0 +1,5 @@ +[ + "constructor(string)", + "function greet() view returns (string)", + "function setGreeting(string)" +] diff --git a/contracts/abis/xdeployer/src/contracts/CreateX.sol/CreateX.json b/contracts/abis/xdeployer/src/contracts/CreateX.sol/CreateX.json new file mode 100644 index 0000000..527fc1d --- /dev/null +++ b/contracts/abis/xdeployer/src/contracts/CreateX.sol/CreateX.json @@ -0,0 +1,34 @@ +[ + "error FailedContractCreation(address)", + "error FailedContractInitialisation(address,bytes)", + "error FailedEtherTransfer(address,bytes)", + "error InvalidNonceValue(address)", + "error InvalidSalt(address)", + "event ContractCreation(address indexed,bytes32 indexed)", + "event ContractCreation(address indexed)", + "event Create3ProxyContractCreation(address indexed,bytes32 indexed)", + "function computeCreate2Address(bytes32,bytes32) view returns (address)", + "function computeCreate2Address(bytes32,bytes32,address) pure returns (address)", + "function computeCreate3Address(bytes32,address) pure returns (address)", + "function computeCreate3Address(bytes32) view returns (address)", + "function computeCreateAddress(uint256) view returns (address)", + "function computeCreateAddress(address,uint256) view returns (address)", + "function deployCreate(bytes) payable returns (address)", + "function deployCreate2(bytes32,bytes) payable returns (address)", + "function deployCreate2(bytes) payable returns (address)", + "function deployCreate2AndInit(bytes32,bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", + "function deployCreate2AndInit(bytes,bytes,tuple(uint256,uint256)) payable returns (address)", + "function deployCreate2AndInit(bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", + "function deployCreate2AndInit(bytes32,bytes,bytes,tuple(uint256,uint256)) payable returns (address)", + "function deployCreate2Clone(bytes32,address,bytes) payable returns (address)", + "function deployCreate2Clone(address,bytes) payable returns (address)", + "function deployCreate3(bytes) payable returns (address)", + "function deployCreate3(bytes32,bytes) payable returns (address)", + "function deployCreate3AndInit(bytes32,bytes,bytes,tuple(uint256,uint256)) payable returns (address)", + "function deployCreate3AndInit(bytes,bytes,tuple(uint256,uint256)) payable returns (address)", + "function deployCreate3AndInit(bytes32,bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", + "function deployCreate3AndInit(bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", + "function deployCreateAndInit(bytes,bytes,tuple(uint256,uint256)) payable returns (address)", + "function deployCreateAndInit(bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", + "function deployCreateClone(address,bytes) payable returns (address)" +] diff --git a/contracts/arguments.js b/contracts/arguments.js new file mode 100644 index 0000000..36a38b1 --- /dev/null +++ b/contracts/arguments.js @@ -0,0 +1,7 @@ +// JavaScript module that exports the constructor as an argument list +// Required by the Hardhat plugin `hardhat-etherscan` +// See also here: https://hardhat.org/plugins/nomiclabs-hardhat-etherscan.html#complex-arguments + +module.exports = [ + "Hello, Hardhat!", // The example Greeter.sol file needs a string +]; diff --git a/contracts/artifacts/contracts/NFTContract.sol/NFTContract.dbg.json b/contracts/artifacts/contracts/NFTContract.sol/NFTContract.dbg.json deleted file mode 100644 index 4faec2d..0000000 --- a/contracts/artifacts/contracts/NFTContract.sol/NFTContract.dbg.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/e0d27f44f97abb5534e508a66a390154.json" -} diff --git a/contracts/artifacts/contracts/NFTContract.sol/NFTContract.json b/contracts/artifacts/contracts/NFTContract.sol/NFTContract.json deleted file mode 100644 index c4c415a..0000000 --- a/contracts/artifacts/contracts/NFTContract.sol/NFTContract.json +++ /dev/null @@ -1,403 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "NFTContract", - "sourceName": "contracts/NFTContract.sol", - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "CallResponseEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "minter", - "type": "address" - } - ], - "name": "MinterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "minter", - "type": "address" - } - ], - "name": "MinterRemoved", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "minter", - "type": "address" - } - ], - "name": "addMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "authorizedMinters", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "int64", - "name": "serial", - "type": "int64" - } - ], - "name": "claimNft", - "outputs": [ - { - "internalType": "int256", - "name": "", - "type": "int256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "int64", - "name": "", - "type": "int64" - } - ], - "name": "claimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "memo", - "type": "string" - }, - { - "internalType": "int64", - "name": "maxSupply", - "type": "int64" - }, - { - "internalType": "int64", - "name": "autoRenewPeriod", - "type": "int64" - } - ], - "name": "createNft", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "int64", - "name": "serial", - "type": "int64" - } - ], - "name": "getClaimerAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isMinter", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "int64", - "name": "serial", - "type": "int64" - } - ], - "name": "isNftClaimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "bytes[]", - "name": "metadata", - "type": "bytes[]" - }, - { - "internalType": "address", - "name": "allowedClaimer", - "type": "address" - } - ], - "name": "mintNftForUser", - "outputs": [ - { - "internalType": "int64", - "name": "", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "int64", - "name": "", - "type": "int64" - } - ], - "name": "nftClaimRights", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "bytes", - "name": "encodedFunctionSelector", - "type": "bytes" - } - ], - "name": "redirectForToken", - "outputs": [ - { - "internalType": "int256", - "name": "responseCode", - "type": "int256" - }, - { - "internalType": "bytes", - "name": "response", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "minter", - "type": "address" - } - ], - "name": "removeMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serialNumber", - "type": "uint256" - } - ], - "name": "transferFromNFT", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b5060018060008060068111156200002d576200002c6200028a565b5b60068111156200004257620000416200028a565b5b815260200190815260200160002081905550600260016000600160068111156200007157620000706200028a565b5b60068111156200008657620000856200028a565b5b81526020019081526020016000208190555060046001600060026006811115620000b557620000b46200028a565b5b6006811115620000ca57620000c96200028a565b5b81526020019081526020016000208190555060086001600060036006811115620000f957620000f86200028a565b5b60068111156200010e576200010d6200028a565b5b815260200190815260200160002081905550601060016000600460068111156200013d576200013c6200028a565b5b60068111156200015257620001516200028a565b5b815260200190815260200160002081905550602060016000600560068111156200018157620001806200028a565b5b60068111156200019657620001956200028a565b5b815260200190815260200160002081905550604060016000600680811115620001c457620001c36200028a565b5b6006811115620001d957620001d86200028a565b5b81526020019081526020016000208190555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b612fbd80620002c96000396000f3fe6080604052600436106100e85760003560e01c80639b23d3d91161008a578063c985c65211610059578063c985c65214610346578063d689332f14610383578063e0a6ad65146103c0578063f1d9d8df146103fd576100e8565b80639b23d3d91461025f578063aa271e1a1461029c578063aa2fe91b146102d9578063b6c907a614610316576100e8565b8063618dc65e116100c6578063618dc65e14610190578063836993e2146101ce5780638da5cb5b1461020b578063983b2d5614610236576100e8565b806302f6ef87146100ed57806315dacbea1461012a5780633092afd514610167575b600080fd5b3480156100f957600080fd5b50610114600480360381019061010f9190611a1b565b61043a565b6040516101219190611a89565b60405180910390f35b34801561013657600080fd5b50610151600480360381019061014c9190611b06565b61046d565b60405161015e9190611b7c565b60405180910390f35b34801561017357600080fd5b5061018e60048036038101906101899190611b97565b61058b565b005b34801561019c57600080fd5b506101b760048036038101906101b29190611d0a565b6107d5565b6040516101c5929190611dfe565b60405180910390f35b3480156101da57600080fd5b506101f560048036038101906101f09190611a1b565b610931565b6040516102029190611e49565b60405180910390f35b34801561021757600080fd5b50610220610961565b60405161022d9190611a89565b60405180910390f35b34801561024257600080fd5b5061025d60048036038101906102589190611b97565b610987565b005b34801561026b57600080fd5b5061028660048036038101906102819190611b06565b610bb1565b6040516102939190611b7c565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190611b97565b610ccf565b6040516102d09190611e49565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190611b97565b610d25565b60405161030d9190611e49565b60405180910390f35b610330600480360381019061032b9190611f05565b610d45565b60405161033d9190611a89565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190611a1b565b610f6d565b60405161037a9190611a89565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190611a1b565b610fb0565b6040516103b79190611e49565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906120ba565b610fd0565b6040516103f49190611b7c565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f9190612129565b611152565b6040516104319190612169565b60405180910390f35b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600061016773ffffffffffffffffffffffffffffffffffffffff166315dacbea60e01b888888886040516024016104aa9493929190612193565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516105149190612214565b6000604051808303816000865af19150503d8060008114610551576040519150601f19603f3d011682016040523d82523d6000602084013e610556565b606091505b50915091508161056757601561057c565b8080602001905181019061057b9190612264565b5b60030b92505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290612314565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a290612380565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e906123ec565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b6000606060008061016773ffffffffffffffffffffffffffffffffffffffff1663618dc65e60e01b878760405160240161081092919061240c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161087a9190612214565b6000604051808303816000865af19150503d80600081146108b7576040519150601f19603f3d011682016040523d82523d6000602084013e6108bc565b606091505b50915091507f4af4780e06fe8cb9df64b0794fa6f01399af979175bb988e35e0e57e594567bc82826040516108f292919061243c565b60405180910390a1816109165760156040518060200160405280600081525061091a565b6016815b8160030b9150809450819550505050509250929050565b6000600560008360070b60070b815260200190815260200160002060009054906101000a900460ff169050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e90612314565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7d906124b8565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90612524565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b600080600061016773ffffffffffffffffffffffffffffffffffffffff16639b23d3d960e01b88888888604051602401610bee9493929190612193565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c589190612214565b6000604051808303816000865af19150503d8060008114610c95576040519150601f19603f3d011682016040523d82523d6000602084013e610c9a565b606091505b509150915081610cab576015610cc0565b80806020019051810190610cbf9190612264565b5b60030b92505050949350505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90612314565b60405180910390fd5b6000600167ffffffffffffffff811115610df457610df3611bdf565b5b604051908082528060200260200182016040528015610e2d57816020015b610e1a6118a5565b815260200190600190039081610e125790505b509050610e3d60046001306112f4565b81600081518110610e5157610e50612544565b5b6020026020010181905250610e646118c5565b87816000018190525086816020018190525085816060018190525030816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506001816080019015159081151581525050848160a0019060070b908160070b81525050818160e0018190525060008160c0019015159081151581525050610efe308561132b565b816101000181905250600080610f1383611383565b91509150601660030b8214610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f54906125e5565b60405180910390fd5b8094505050505095945050505050565b6000600460008360070b60070b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60056020528060005260406000206000915054906101000a900460ff1681565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590612677565b60405180910390fd5b60008061106d866000876114f2565b9250509150601660030b82146110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90612709565b60405180910390fd5b8360046000836000815181106110d1576110d0612544565b5b602002602001015160070b60070b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060008151811061113f5761113e612544565b5b6020026020010151925050509392505050565b60003373ffffffffffffffffffffffffffffffffffffffff16600460008460070b60070b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f29061279b565b60405180910390fd5b600560008360070b60070b815260200190815260200160002060009054906101000a900460ff1615611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990612807565b60405180910390fd5b60006112708430338661166a565b9050601660030b81146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90612899565b60405180910390fd5b6001600560008560070b60070b815260200190815260200160002060006101000a81548160ff0219169083151502179055508091505092915050565b6112fc6118a5565b604051806040016040528061131086611788565b815260200161131f85856117c9565b81525090509392505050565b611333611934565b82816020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816040019060070b908160070b8152505092915050565b6000808260008161010001516000015160070b1480156113af575060008161010001516040015160070b145b156113d2576276a70060030b8161010001516040019060070b908160070b815250505b60008061016773ffffffffffffffffffffffffffffffffffffffff163463ea83f29360e01b886040516024016114089190612c2c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516114729190612214565b60006040518083038185875af1925050503d80600081146114af576040519150601f19603f3d011682016040523d82523d6000602084013e6114b4565b606091505b5091509150816114c757601560006114dc565b808060200190518101906114db9190612c8c565b5b8160030b91508095508196505050505050915091565b600080606060008061016773ffffffffffffffffffffffffffffffffffffffff1663e0f4059a60e01b89898960405160240161153093929190612d8e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161159a9190612214565b6000604051808303816000865af19150503d80600081146115d7576040519150601f19603f3d011682016040523d82523d6000602084013e6115dc565b606091505b50915091508161163857601560008067ffffffffffffffff81111561160457611603611bdf565b5b6040519080825280602002602001820160405280156116325781602001602082028036833780820191505090505b5061164d565b8080602001905181019061164c9190612ea4565b5b8260030b9250809550819650829750505050505093509350939050565b600080600061016773ffffffffffffffffffffffffffffffffffffffff16635cfc901160e01b888888886040516024016116a79493929190612f13565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516117119190612214565b6000604051808303816000865af19150503d806000811461174e576040519150601f19603f3d011682016040523d82523d6000602084013e611753565b606091505b509150915081611764576015611779565b808060200190518101906117789190612264565b5b60030b92505050949350505050565b6000600160008360068111156117a1576117a0612f58565b5b60068111156117b3576117b2612f58565b5b8152602001908152602001600020549050919050565b6117d1611971565b600160048111156117e5576117e4612f58565b5b8360048111156117f8576117f7612f58565b5b0361183a5781816020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061189f565b60048081111561184d5761184c612f58565b5b8360048111156118605761185f612f58565b5b0361189e5781816080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b5b92915050565b6040518060400160405280600081526020016118bf611971565b81525090565b6040518061012001604052806060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600015158152602001600060070b81526020016000151581526020016060815260200161192e611934565b81525090565b6040518060600160405280600060070b8152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060070b81525090565b6040518060a00160405280600015158152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60008160070b9050919050565b6119f8816119e2565b8114611a0357600080fd5b50565b600081359050611a15816119ef565b92915050565b600060208284031215611a3157611a306119d8565b5b6000611a3f84828501611a06565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a7382611a48565b9050919050565b611a8381611a68565b82525050565b6000602082019050611a9e6000830184611a7a565b92915050565b611aad81611a68565b8114611ab857600080fd5b50565b600081359050611aca81611aa4565b92915050565b6000819050919050565b611ae381611ad0565b8114611aee57600080fd5b50565b600081359050611b0081611ada565b92915050565b60008060008060808587031215611b2057611b1f6119d8565b5b6000611b2e87828801611abb565b9450506020611b3f87828801611abb565b9350506040611b5087828801611abb565b9250506060611b6187828801611af1565b91505092959194509250565b611b76816119e2565b82525050565b6000602082019050611b916000830184611b6d565b92915050565b600060208284031215611bad57611bac6119d8565b5b6000611bbb84828501611abb565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c1782611bce565b810181811067ffffffffffffffff82111715611c3657611c35611bdf565b5b80604052505050565b6000611c496119ce565b9050611c558282611c0e565b919050565b600067ffffffffffffffff821115611c7557611c74611bdf565b5b611c7e82611bce565b9050602081019050919050565b82818337600083830152505050565b6000611cad611ca884611c5a565b611c3f565b905082815260208101848484011115611cc957611cc8611bc9565b5b611cd4848285611c8b565b509392505050565b600082601f830112611cf157611cf0611bc4565b5b8135611d01848260208601611c9a565b91505092915050565b60008060408385031215611d2157611d206119d8565b5b6000611d2f85828601611abb565b925050602083013567ffffffffffffffff811115611d5057611d4f6119dd565b5b611d5c85828601611cdc565b9150509250929050565b6000819050919050565b611d7981611d66565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611db9578082015181840152602081019050611d9e565b60008484015250505050565b6000611dd082611d7f565b611dda8185611d8a565b9350611dea818560208601611d9b565b611df381611bce565b840191505092915050565b6000604082019050611e136000830185611d70565b8181036020830152611e258184611dc5565b90509392505050565b60008115159050919050565b611e4381611e2e565b82525050565b6000602082019050611e5e6000830184611e3a565b92915050565b600067ffffffffffffffff821115611e7f57611e7e611bdf565b5b611e8882611bce565b9050602081019050919050565b6000611ea8611ea384611e64565b611c3f565b905082815260208101848484011115611ec457611ec3611bc9565b5b611ecf848285611c8b565b509392505050565b600082601f830112611eec57611eeb611bc4565b5b8135611efc848260208601611e95565b91505092915050565b600080600080600060a08688031215611f2157611f206119d8565b5b600086013567ffffffffffffffff811115611f3f57611f3e6119dd565b5b611f4b88828901611ed7565b955050602086013567ffffffffffffffff811115611f6c57611f6b6119dd565b5b611f7888828901611ed7565b945050604086013567ffffffffffffffff811115611f9957611f986119dd565b5b611fa588828901611ed7565b9350506060611fb688828901611a06565b9250506080611fc788828901611a06565b9150509295509295909350565b600067ffffffffffffffff821115611fef57611fee611bdf565b5b602082029050602081019050919050565b600080fd5b600061201861201384611fd4565b611c3f565b9050808382526020820190506020840283018581111561203b5761203a612000565b5b835b8181101561208257803567ffffffffffffffff8111156120605761205f611bc4565b5b80860161206d8982611cdc565b8552602085019450505060208101905061203d565b5050509392505050565b600082601f8301126120a1576120a0611bc4565b5b81356120b1848260208601612005565b91505092915050565b6000806000606084860312156120d3576120d26119d8565b5b60006120e186828701611abb565b935050602084013567ffffffffffffffff811115612102576121016119dd565b5b61210e8682870161208c565b925050604061211f86828701611abb565b9150509250925092565b600080604083850312156121405761213f6119d8565b5b600061214e85828601611abb565b925050602061215f85828601611a06565b9150509250929050565b600060208201905061217e6000830184611d70565b92915050565b61218d81611ad0565b82525050565b60006080820190506121a86000830187611a7a565b6121b56020830186611a7a565b6121c26040830185611a7a565b6121cf6060830184612184565b95945050505050565b600081905092915050565b60006121ee82611d7f565b6121f881856121d8565b9350612208818560208601611d9b565b80840191505092915050565b600061222082846121e3565b915081905092915050565b60008160030b9050919050565b6122418161222b565b811461224c57600080fd5b50565b60008151905061225e81612238565b92915050565b60006020828403121561227a576122796119d8565b5b60006122888482850161224f565b91505092915050565b600082825260208201905092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006122fe602183612291565b9150612309826122a2565b604082019050919050565b6000602082019050818103600083015261232d816122f1565b9050919050565b7f43616e6e6f742072656d6f7665206f776e6572206173206d696e746572000000600082015250565b600061236a601d83612291565b915061237582612334565b602082019050919050565b600060208201905081810360008301526123998161235d565b9050919050565b7f41646472657373206973206e6f742061206d696e746572000000000000000000600082015250565b60006123d6601783612291565b91506123e1826123a0565b602082019050919050565b60006020820190508181036000830152612405816123c9565b9050919050565b60006040820190506124216000830185611a7a565b81810360208301526124338184611dc5565b90509392505050565b60006040820190506124516000830185611e3a565b81810360208301526124638184611dc5565b90509392505050565b7f496e76616c6964206d696e746572206164647265737300000000000000000000600082015250565b60006124a2601683612291565b91506124ad8261246c565b602082019050919050565b600060208201905081810360008301526124d181612495565b9050919050565b7f4164647265737320697320616c72656164792061206d696e7465720000000000600082015250565b600061250e601b83612291565b9150612519826124d8565b602082019050919050565b6000602082019050818103600083015261253d81612501565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4661696c656420746f20637265617465206e6f6e2d66756e6769626c6520746f60008201527f6b656e0000000000000000000000000000000000000000000000000000000000602082015250565b60006125cf602383612291565b91506125da82612573565b604082019050919050565b600060208201905081810360008301526125fe816125c2565b9050919050565b7f4f6e6c7920617574686f72697a6564206d696e746572732063616e2063616c6c60008201527f20746869732066756e6374696f6e000000000000000000000000000000000000602082015250565b6000612661602e83612291565b915061266c82612605565b604082019050919050565b6000602082019050818103600083015261269081612654565b9050919050565b7f4661696c656420746f206d696e74206e6f6e2d66756e6769626c6520746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006126f3602183612291565b91506126fe82612697565b604082019050919050565b60006020820190508181036000830152612722816126e6565b9050919050565b7f596f7520617265206e6f7420617574686f72697a656420746f20636c61696d2060008201527f74686973204e4654000000000000000000000000000000000000000000000000602082015250565b6000612785602883612291565b915061279082612729565b604082019050919050565b600060208201905081810360008301526127b481612778565b9050919050565b7f4e46542068617320616c7265616479206265656e20636c61696d656400000000600082015250565b60006127f1601c83612291565b91506127fc826127bb565b602082019050919050565b60006020820190508181036000830152612820816127e4565b9050919050565b7f4661696c656420746f207472616e73666572206e6f6e2d66756e6769626c652060008201527f746f6b656e000000000000000000000000000000000000000000000000000000602082015250565b6000612883602583612291565b915061288e82612827565b604082019050919050565b600060208201905081810360008301526128b281612876565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006128e0826128b9565b6128ea81856128c4565b93506128fa818560208601611d9b565b61290381611bce565b840191505092915050565b61291781611a68565b82525050565b61292681611e2e565b82525050565b612935816119e2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61297081611ad0565b82525050565b600082825260208201905092915050565b600061299282611d7f565b61299c8185612976565b93506129ac818560208601611d9b565b6129b581611bce565b840191505092915050565b600060a0830160008301516129d8600086018261291d565b5060208301516129eb602086018261290e565b5060408301518482036040860152612a038282612987565b91505060608301518482036060860152612a1d8282612987565b9150506080830151612a32608086018261290e565b508091505092915050565b6000604083016000830151612a556000860182612967565b5060208301518482036020860152612a6d82826129c0565b9150508091505092915050565b6000612a868383612a3d565b905092915050565b6000602082019050919050565b6000612aa68261293b565b612ab08185612946565b935083602082028501612ac285612957565b8060005b85811015612afe5784840389528151612adf8582612a7a565b9450612aea83612a8e565b925060208a01995050600181019050612ac6565b50829750879550505050505092915050565b606082016000820151612b26600085018261292c565b506020820151612b39602085018261290e565b506040820151612b4c604085018261292c565b50505050565b6000610160830160008301518482036000860152612b7082826128d5565b91505060208301518482036020860152612b8a82826128d5565b9150506040830151612b9f604086018261290e565b5060608301518482036060860152612bb782826128d5565b9150506080830151612bcc608086018261291d565b5060a0830151612bdf60a086018261292c565b5060c0830151612bf260c086018261291d565b5060e083015184820360e0860152612c0a8282612a9b565b915050610100830151612c21610100860182612b10565b508091505092915050565b60006020820190508181036000830152612c468184612b52565b905092915050565b6000612c5982611a48565b9050919050565b612c6981612c4e565b8114612c7457600080fd5b50565b600081519050612c8681612c60565b92915050565b60008060408385031215612ca357612ca26119d8565b5b6000612cb18582860161224f565b9250506020612cc285828601612c77565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000612d048383612987565b905092915050565b6000602082019050919050565b6000612d2482612ccc565b612d2e8185612cd7565b935083602082028501612d4085612ce8565b8060005b85811015612d7c5784840389528151612d5d8582612cf8565b9450612d6883612d0c565b925060208a01995050600181019050612d44565b50829750879550505050505092915050565b6000606082019050612da36000830186611a7a565b612db06020830185611b6d565b8181036040830152612dc28184612d19565b9050949350505050565b600081519050612ddb816119ef565b92915050565b600067ffffffffffffffff821115612dfc57612dfb611bdf565b5b602082029050602081019050919050565b6000612e20612e1b84612de1565b611c3f565b90508083825260208201905060208402830185811115612e4357612e42612000565b5b835b81811015612e6c5780612e588882612dcc565b845260208401935050602081019050612e45565b5050509392505050565b600082601f830112612e8b57612e8a611bc4565b5b8151612e9b848260208601612e0d565b91505092915050565b600080600060608486031215612ebd57612ebc6119d8565b5b6000612ecb8682870161224f565b9350506020612edc86828701612dcc565b925050604084015167ffffffffffffffff811115612efd57612efc6119dd565b5b612f0986828701612e76565b9150509250925092565b6000608082019050612f286000830187611a7a565b612f356020830186611a7a565b612f426040830185611a7a565b612f4f6060830184611b6d565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea26469706673582212202b8e1ead4affc5f9e5d2366f4ff19116648612c325cc3d4a355b259501ed9db264736f6c63430008120033", - "deployedBytecode": "0x6080604052600436106100e85760003560e01c80639b23d3d91161008a578063c985c65211610059578063c985c65214610346578063d689332f14610383578063e0a6ad65146103c0578063f1d9d8df146103fd576100e8565b80639b23d3d91461025f578063aa271e1a1461029c578063aa2fe91b146102d9578063b6c907a614610316576100e8565b8063618dc65e116100c6578063618dc65e14610190578063836993e2146101ce5780638da5cb5b1461020b578063983b2d5614610236576100e8565b806302f6ef87146100ed57806315dacbea1461012a5780633092afd514610167575b600080fd5b3480156100f957600080fd5b50610114600480360381019061010f9190611a1b565b61043a565b6040516101219190611a89565b60405180910390f35b34801561013657600080fd5b50610151600480360381019061014c9190611b06565b61046d565b60405161015e9190611b7c565b60405180910390f35b34801561017357600080fd5b5061018e60048036038101906101899190611b97565b61058b565b005b34801561019c57600080fd5b506101b760048036038101906101b29190611d0a565b6107d5565b6040516101c5929190611dfe565b60405180910390f35b3480156101da57600080fd5b506101f560048036038101906101f09190611a1b565b610931565b6040516102029190611e49565b60405180910390f35b34801561021757600080fd5b50610220610961565b60405161022d9190611a89565b60405180910390f35b34801561024257600080fd5b5061025d60048036038101906102589190611b97565b610987565b005b34801561026b57600080fd5b5061028660048036038101906102819190611b06565b610bb1565b6040516102939190611b7c565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190611b97565b610ccf565b6040516102d09190611e49565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190611b97565b610d25565b60405161030d9190611e49565b60405180910390f35b610330600480360381019061032b9190611f05565b610d45565b60405161033d9190611a89565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190611a1b565b610f6d565b60405161037a9190611a89565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190611a1b565b610fb0565b6040516103b79190611e49565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906120ba565b610fd0565b6040516103f49190611b7c565b60405180910390f35b34801561040957600080fd5b50610424600480360381019061041f9190612129565b611152565b6040516104319190612169565b60405180910390f35b60046020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600061016773ffffffffffffffffffffffffffffffffffffffff166315dacbea60e01b888888886040516024016104aa9493929190612193565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516105149190612214565b6000604051808303816000865af19150503d8060008114610551576040519150601f19603f3d011682016040523d82523d6000602084013e610556565b606091505b50915091508161056757601561057c565b8080602001905181019061057b9190612264565b5b60030b92505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290612314565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a290612380565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e906123ec565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b6000606060008061016773ffffffffffffffffffffffffffffffffffffffff1663618dc65e60e01b878760405160240161081092919061240c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161087a9190612214565b6000604051808303816000865af19150503d80600081146108b7576040519150601f19603f3d011682016040523d82523d6000602084013e6108bc565b606091505b50915091507f4af4780e06fe8cb9df64b0794fa6f01399af979175bb988e35e0e57e594567bc82826040516108f292919061243c565b60405180910390a1816109165760156040518060200160405280600081525061091a565b6016815b8160030b9150809450819550505050509250929050565b6000600560008360070b60070b815260200190815260200160002060009054906101000a900460ff169050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0e90612314565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7d906124b8565b60405180910390fd5b600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90612524565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b600080600061016773ffffffffffffffffffffffffffffffffffffffff16639b23d3d960e01b88888888604051602401610bee9493929190612193565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610c589190612214565b6000604051808303816000865af19150503d8060008114610c95576040519150601f19603f3d011682016040523d82523d6000602084013e610c9a565b606091505b509150915081610cab576015610cc0565b80806020019051810190610cbf9190612264565b5b60030b92505050949350505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce90612314565b60405180910390fd5b6000600167ffffffffffffffff811115610df457610df3611bdf565b5b604051908082528060200260200182016040528015610e2d57816020015b610e1a6118a5565b815260200190600190039081610e125790505b509050610e3d60046001306112f4565b81600081518110610e5157610e50612544565b5b6020026020010181905250610e646118c5565b87816000018190525086816020018190525085816060018190525030816040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506001816080019015159081151581525050848160a0019060070b908160070b81525050818160e0018190525060008160c0019015159081151581525050610efe308561132b565b816101000181905250600080610f1383611383565b91509150601660030b8214610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f54906125e5565b60405180910390fd5b8094505050505095945050505050565b6000600460008360070b60070b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60056020528060005260406000206000915054906101000a900460ff1681565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661105e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105590612677565b60405180910390fd5b60008061106d866000876114f2565b9250509150601660030b82146110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90612709565b60405180910390fd5b8360046000836000815181106110d1576110d0612544565b5b602002602001015160070b60070b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060008151811061113f5761113e612544565b5b6020026020010151925050509392505050565b60003373ffffffffffffffffffffffffffffffffffffffff16600460008460070b60070b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f29061279b565b60405180910390fd5b600560008360070b60070b815260200190815260200160002060009054906101000a900460ff1615611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990612807565b60405180910390fd5b60006112708430338661166a565b9050601660030b81146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90612899565b60405180910390fd5b6001600560008560070b60070b815260200190815260200160002060006101000a81548160ff0219169083151502179055508091505092915050565b6112fc6118a5565b604051806040016040528061131086611788565b815260200161131f85856117c9565b81525090509392505050565b611333611934565b82816020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505081816040019060070b908160070b8152505092915050565b6000808260008161010001516000015160070b1480156113af575060008161010001516040015160070b145b156113d2576276a70060030b8161010001516040019060070b908160070b815250505b60008061016773ffffffffffffffffffffffffffffffffffffffff163463ea83f29360e01b886040516024016114089190612c2c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516114729190612214565b60006040518083038185875af1925050503d80600081146114af576040519150601f19603f3d011682016040523d82523d6000602084013e6114b4565b606091505b5091509150816114c757601560006114dc565b808060200190518101906114db9190612c8c565b5b8160030b91508095508196505050505050915091565b600080606060008061016773ffffffffffffffffffffffffffffffffffffffff1663e0f4059a60e01b89898960405160240161153093929190612d8e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161159a9190612214565b6000604051808303816000865af19150503d80600081146115d7576040519150601f19603f3d011682016040523d82523d6000602084013e6115dc565b606091505b50915091508161163857601560008067ffffffffffffffff81111561160457611603611bdf565b5b6040519080825280602002602001820160405280156116325781602001602082028036833780820191505090505b5061164d565b8080602001905181019061164c9190612ea4565b5b8260030b9250809550819650829750505050505093509350939050565b600080600061016773ffffffffffffffffffffffffffffffffffffffff16635cfc901160e01b888888886040516024016116a79493929190612f13565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516117119190612214565b6000604051808303816000865af19150503d806000811461174e576040519150601f19603f3d011682016040523d82523d6000602084013e611753565b606091505b509150915081611764576015611779565b808060200190518101906117789190612264565b5b60030b92505050949350505050565b6000600160008360068111156117a1576117a0612f58565b5b60068111156117b3576117b2612f58565b5b8152602001908152602001600020549050919050565b6117d1611971565b600160048111156117e5576117e4612f58565b5b8360048111156117f8576117f7612f58565b5b0361183a5781816020019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061189f565b60048081111561184d5761184c612f58565b5b8360048111156118605761185f612f58565b5b0361189e5781816080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b5b92915050565b6040518060400160405280600081526020016118bf611971565b81525090565b6040518061012001604052806060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600015158152602001600060070b81526020016000151581526020016060815260200161192e611934565b81525090565b6040518060600160405280600060070b8152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060070b81525090565b6040518060a00160405280600015158152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60008160070b9050919050565b6119f8816119e2565b8114611a0357600080fd5b50565b600081359050611a15816119ef565b92915050565b600060208284031215611a3157611a306119d8565b5b6000611a3f84828501611a06565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a7382611a48565b9050919050565b611a8381611a68565b82525050565b6000602082019050611a9e6000830184611a7a565b92915050565b611aad81611a68565b8114611ab857600080fd5b50565b600081359050611aca81611aa4565b92915050565b6000819050919050565b611ae381611ad0565b8114611aee57600080fd5b50565b600081359050611b0081611ada565b92915050565b60008060008060808587031215611b2057611b1f6119d8565b5b6000611b2e87828801611abb565b9450506020611b3f87828801611abb565b9350506040611b5087828801611abb565b9250506060611b6187828801611af1565b91505092959194509250565b611b76816119e2565b82525050565b6000602082019050611b916000830184611b6d565b92915050565b600060208284031215611bad57611bac6119d8565b5b6000611bbb84828501611abb565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c1782611bce565b810181811067ffffffffffffffff82111715611c3657611c35611bdf565b5b80604052505050565b6000611c496119ce565b9050611c558282611c0e565b919050565b600067ffffffffffffffff821115611c7557611c74611bdf565b5b611c7e82611bce565b9050602081019050919050565b82818337600083830152505050565b6000611cad611ca884611c5a565b611c3f565b905082815260208101848484011115611cc957611cc8611bc9565b5b611cd4848285611c8b565b509392505050565b600082601f830112611cf157611cf0611bc4565b5b8135611d01848260208601611c9a565b91505092915050565b60008060408385031215611d2157611d206119d8565b5b6000611d2f85828601611abb565b925050602083013567ffffffffffffffff811115611d5057611d4f6119dd565b5b611d5c85828601611cdc565b9150509250929050565b6000819050919050565b611d7981611d66565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611db9578082015181840152602081019050611d9e565b60008484015250505050565b6000611dd082611d7f565b611dda8185611d8a565b9350611dea818560208601611d9b565b611df381611bce565b840191505092915050565b6000604082019050611e136000830185611d70565b8181036020830152611e258184611dc5565b90509392505050565b60008115159050919050565b611e4381611e2e565b82525050565b6000602082019050611e5e6000830184611e3a565b92915050565b600067ffffffffffffffff821115611e7f57611e7e611bdf565b5b611e8882611bce565b9050602081019050919050565b6000611ea8611ea384611e64565b611c3f565b905082815260208101848484011115611ec457611ec3611bc9565b5b611ecf848285611c8b565b509392505050565b600082601f830112611eec57611eeb611bc4565b5b8135611efc848260208601611e95565b91505092915050565b600080600080600060a08688031215611f2157611f206119d8565b5b600086013567ffffffffffffffff811115611f3f57611f3e6119dd565b5b611f4b88828901611ed7565b955050602086013567ffffffffffffffff811115611f6c57611f6b6119dd565b5b611f7888828901611ed7565b945050604086013567ffffffffffffffff811115611f9957611f986119dd565b5b611fa588828901611ed7565b9350506060611fb688828901611a06565b9250506080611fc788828901611a06565b9150509295509295909350565b600067ffffffffffffffff821115611fef57611fee611bdf565b5b602082029050602081019050919050565b600080fd5b600061201861201384611fd4565b611c3f565b9050808382526020820190506020840283018581111561203b5761203a612000565b5b835b8181101561208257803567ffffffffffffffff8111156120605761205f611bc4565b5b80860161206d8982611cdc565b8552602085019450505060208101905061203d565b5050509392505050565b600082601f8301126120a1576120a0611bc4565b5b81356120b1848260208601612005565b91505092915050565b6000806000606084860312156120d3576120d26119d8565b5b60006120e186828701611abb565b935050602084013567ffffffffffffffff811115612102576121016119dd565b5b61210e8682870161208c565b925050604061211f86828701611abb565b9150509250925092565b600080604083850312156121405761213f6119d8565b5b600061214e85828601611abb565b925050602061215f85828601611a06565b9150509250929050565b600060208201905061217e6000830184611d70565b92915050565b61218d81611ad0565b82525050565b60006080820190506121a86000830187611a7a565b6121b56020830186611a7a565b6121c26040830185611a7a565b6121cf6060830184612184565b95945050505050565b600081905092915050565b60006121ee82611d7f565b6121f881856121d8565b9350612208818560208601611d9b565b80840191505092915050565b600061222082846121e3565b915081905092915050565b60008160030b9050919050565b6122418161222b565b811461224c57600080fd5b50565b60008151905061225e81612238565b92915050565b60006020828403121561227a576122796119d8565b5b60006122888482850161224f565b91505092915050565b600082825260208201905092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f60008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006122fe602183612291565b9150612309826122a2565b604082019050919050565b6000602082019050818103600083015261232d816122f1565b9050919050565b7f43616e6e6f742072656d6f7665206f776e6572206173206d696e746572000000600082015250565b600061236a601d83612291565b915061237582612334565b602082019050919050565b600060208201905081810360008301526123998161235d565b9050919050565b7f41646472657373206973206e6f742061206d696e746572000000000000000000600082015250565b60006123d6601783612291565b91506123e1826123a0565b602082019050919050565b60006020820190508181036000830152612405816123c9565b9050919050565b60006040820190506124216000830185611a7a565b81810360208301526124338184611dc5565b90509392505050565b60006040820190506124516000830185611e3a565b81810360208301526124638184611dc5565b90509392505050565b7f496e76616c6964206d696e746572206164647265737300000000000000000000600082015250565b60006124a2601683612291565b91506124ad8261246c565b602082019050919050565b600060208201905081810360008301526124d181612495565b9050919050565b7f4164647265737320697320616c72656164792061206d696e7465720000000000600082015250565b600061250e601b83612291565b9150612519826124d8565b602082019050919050565b6000602082019050818103600083015261253d81612501565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4661696c656420746f20637265617465206e6f6e2d66756e6769626c6520746f60008201527f6b656e0000000000000000000000000000000000000000000000000000000000602082015250565b60006125cf602383612291565b91506125da82612573565b604082019050919050565b600060208201905081810360008301526125fe816125c2565b9050919050565b7f4f6e6c7920617574686f72697a6564206d696e746572732063616e2063616c6c60008201527f20746869732066756e6374696f6e000000000000000000000000000000000000602082015250565b6000612661602e83612291565b915061266c82612605565b604082019050919050565b6000602082019050818103600083015261269081612654565b9050919050565b7f4661696c656420746f206d696e74206e6f6e2d66756e6769626c6520746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b60006126f3602183612291565b91506126fe82612697565b604082019050919050565b60006020820190508181036000830152612722816126e6565b9050919050565b7f596f7520617265206e6f7420617574686f72697a656420746f20636c61696d2060008201527f74686973204e4654000000000000000000000000000000000000000000000000602082015250565b6000612785602883612291565b915061279082612729565b604082019050919050565b600060208201905081810360008301526127b481612778565b9050919050565b7f4e46542068617320616c7265616479206265656e20636c61696d656400000000600082015250565b60006127f1601c83612291565b91506127fc826127bb565b602082019050919050565b60006020820190508181036000830152612820816127e4565b9050919050565b7f4661696c656420746f207472616e73666572206e6f6e2d66756e6769626c652060008201527f746f6b656e000000000000000000000000000000000000000000000000000000602082015250565b6000612883602583612291565b915061288e82612827565b604082019050919050565b600060208201905081810360008301526128b281612876565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006128e0826128b9565b6128ea81856128c4565b93506128fa818560208601611d9b565b61290381611bce565b840191505092915050565b61291781611a68565b82525050565b61292681611e2e565b82525050565b612935816119e2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61297081611ad0565b82525050565b600082825260208201905092915050565b600061299282611d7f565b61299c8185612976565b93506129ac818560208601611d9b565b6129b581611bce565b840191505092915050565b600060a0830160008301516129d8600086018261291d565b5060208301516129eb602086018261290e565b5060408301518482036040860152612a038282612987565b91505060608301518482036060860152612a1d8282612987565b9150506080830151612a32608086018261290e565b508091505092915050565b6000604083016000830151612a556000860182612967565b5060208301518482036020860152612a6d82826129c0565b9150508091505092915050565b6000612a868383612a3d565b905092915050565b6000602082019050919050565b6000612aa68261293b565b612ab08185612946565b935083602082028501612ac285612957565b8060005b85811015612afe5784840389528151612adf8582612a7a565b9450612aea83612a8e565b925060208a01995050600181019050612ac6565b50829750879550505050505092915050565b606082016000820151612b26600085018261292c565b506020820151612b39602085018261290e565b506040820151612b4c604085018261292c565b50505050565b6000610160830160008301518482036000860152612b7082826128d5565b91505060208301518482036020860152612b8a82826128d5565b9150506040830151612b9f604086018261290e565b5060608301518482036060860152612bb782826128d5565b9150506080830151612bcc608086018261291d565b5060a0830151612bdf60a086018261292c565b5060c0830151612bf260c086018261291d565b5060e083015184820360e0860152612c0a8282612a9b565b915050610100830151612c21610100860182612b10565b508091505092915050565b60006020820190508181036000830152612c468184612b52565b905092915050565b6000612c5982611a48565b9050919050565b612c6981612c4e565b8114612c7457600080fd5b50565b600081519050612c8681612c60565b92915050565b60008060408385031215612ca357612ca26119d8565b5b6000612cb18582860161224f565b9250506020612cc285828601612c77565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000612d048383612987565b905092915050565b6000602082019050919050565b6000612d2482612ccc565b612d2e8185612cd7565b935083602082028501612d4085612ce8565b8060005b85811015612d7c5784840389528151612d5d8582612cf8565b9450612d6883612d0c565b925060208a01995050600181019050612d44565b50829750879550505050505092915050565b6000606082019050612da36000830186611a7a565b612db06020830185611b6d565b8181036040830152612dc28184612d19565b9050949350505050565b600081519050612ddb816119ef565b92915050565b600067ffffffffffffffff821115612dfc57612dfb611bdf565b5b602082029050602081019050919050565b6000612e20612e1b84612de1565b611c3f565b90508083825260208201905060208402830185811115612e4357612e42612000565b5b835b81811015612e6c5780612e588882612dcc565b845260208401935050602081019050612e45565b5050509392505050565b600082601f830112612e8b57612e8a611bc4565b5b8151612e9b848260208601612e0d565b91505092915050565b600080600060608486031215612ebd57612ebc6119d8565b5b6000612ecb8682870161224f565b9350506020612edc86828701612dcc565b925050604084015167ffffffffffffffff811115612efd57612efc6119dd565b5b612f0986828701612e76565b9150509250925092565b6000608082019050612f286000830187611a7a565b612f356020830186611a7a565b612f426040830185611a7a565b612f4f6060830184611b6d565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea26469706673582212202b8e1ead4affc5f9e5d2366f4ff19116648612c325cc3d4a355b259501ed9db264736f6c63430008120033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/artifacts/contracts/utils/ExpiryHelper.sol/ExpiryHelper.dbg.json b/contracts/artifacts/contracts/utils/ExpiryHelper.sol/ExpiryHelper.dbg.json deleted file mode 100644 index 15e432f..0000000 --- a/contracts/artifacts/contracts/utils/ExpiryHelper.sol/ExpiryHelper.dbg.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "_format": "hh-sol-dbg-1", - "buildInfo": "../../../build-info/e0d27f44f97abb5534e508a66a390154.json" -} diff --git a/contracts/artifacts/contracts/utils/ExpiryHelper.sol/ExpiryHelper.json b/contracts/artifacts/contracts/utils/ExpiryHelper.sol/ExpiryHelper.json deleted file mode 100644 index 5fe1a70..0000000 --- a/contracts/artifacts/contracts/utils/ExpiryHelper.sol/ExpiryHelper.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ExpiryHelper", - "sourceName": "contracts/utils/ExpiryHelper.sol", - "abi": [], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/artifacts/contracts/utils/HederaResponseCodes.sol/HederaResponseCodes.dbg.json b/contracts/artifacts/contracts/utils/HederaResponseCodes.sol/HederaResponseCodes.dbg.json deleted file mode 100644 index 15e432f..0000000 --- a/contracts/artifacts/contracts/utils/HederaResponseCodes.sol/HederaResponseCodes.dbg.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "_format": "hh-sol-dbg-1", - "buildInfo": "../../../build-info/e0d27f44f97abb5534e508a66a390154.json" -} diff --git a/contracts/artifacts/contracts/utils/HederaResponseCodes.sol/HederaResponseCodes.json b/contracts/artifacts/contracts/utils/HederaResponseCodes.sol/HederaResponseCodes.json deleted file mode 100644 index 22acd96..0000000 --- a/contracts/artifacts/contracts/utils/HederaResponseCodes.sol/HederaResponseCodes.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "HederaResponseCodes", - "sourceName": "contracts/utils/HederaResponseCodes.sol", - "abi": [], - "bytecode": "0x60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fb2fafd6a6cd587088248aac4830529368760ee60014d1b92986fd995a2a0e7964736f6c63430008120033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220fb2fafd6a6cd587088248aac4830529368760ee60014d1b92986fd995a2a0e7964736f6c63430008120033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/artifacts/contracts/utils/HederaTokenService.sol/HederaTokenService.dbg.json b/contracts/artifacts/contracts/utils/HederaTokenService.sol/HederaTokenService.dbg.json deleted file mode 100644 index 15e432f..0000000 --- a/contracts/artifacts/contracts/utils/HederaTokenService.sol/HederaTokenService.dbg.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "_format": "hh-sol-dbg-1", - "buildInfo": "../../../build-info/e0d27f44f97abb5534e508a66a390154.json" -} diff --git a/contracts/artifacts/contracts/utils/HederaTokenService.sol/HederaTokenService.json b/contracts/artifacts/contracts/utils/HederaTokenService.sol/HederaTokenService.json deleted file mode 100644 index 52f6969..0000000 --- a/contracts/artifacts/contracts/utils/HederaTokenService.sol/HederaTokenService.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "HederaTokenService", - "sourceName": "contracts/utils/HederaTokenService.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "", - "type": "bool" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "CallResponseEvent", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "bytes", - "name": "encodedFunctionSelector", - "type": "bytes" - } - ], - "name": "redirectForToken", - "outputs": [ - { - "internalType": "int256", - "name": "responseCode", - "type": "int256" - }, - { - "internalType": "bytes", - "name": "response", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serialNumber", - "type": "uint256" - } - ], - "name": "transferFromNFT", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/artifacts/contracts/utils/IHederaTokenService.sol/IHederaTokenService.dbg.json b/contracts/artifacts/contracts/utils/IHederaTokenService.sol/IHederaTokenService.dbg.json deleted file mode 100644 index 15e432f..0000000 --- a/contracts/artifacts/contracts/utils/IHederaTokenService.sol/IHederaTokenService.dbg.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "_format": "hh-sol-dbg-1", - "buildInfo": "../../../build-info/e0d27f44f97abb5534e508a66a390154.json" -} diff --git a/contracts/artifacts/contracts/utils/IHederaTokenService.sol/IHederaTokenService.json b/contracts/artifacts/contracts/utils/IHederaTokenService.sol/IHederaTokenService.json deleted file mode 100644 index 4d99499..0000000 --- a/contracts/artifacts/contracts/utils/IHederaTokenService.sol/IHederaTokenService.json +++ /dev/null @@ -1,3398 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "IHederaTokenService", - "sourceName": "contracts/utils/IHederaTokenService.sol", - "abi": [ - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "accountID", - "type": "address" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "bool", - "name": "isApproval", - "type": "bool" - } - ], - "internalType": "struct IHederaTokenService.AccountAmount[]", - "name": "transfers", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "senderAccountID", - "type": "address" - }, - { - "internalType": "address", - "name": "receiverAccountID", - "type": "address" - }, - { - "internalType": "int64", - "name": "serialNumber", - "type": "int64" - }, - { - "internalType": "bool", - "name": "isApproval", - "type": "bool" - } - ], - "internalType": "struct IHederaTokenService.NftTransfer[]", - "name": "nftTransfers", - "type": "tuple[]" - } - ], - "internalType": "struct IHederaTokenService.TokenTransferList[]", - "name": "tokenTransfers", - "type": "tuple[]" - } - ], - "name": "airdropTokens", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "uint256", - "name": "allowance", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serialNumber", - "type": "uint256" - } - ], - "name": "approveNFT", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "associateToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address[]", - "name": "tokens", - "type": "address[]" - } - ], - "name": "associateTokens", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "int64[]", - "name": "serialNumbers", - "type": "int64[]" - } - ], - "name": "burnToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "int64", - "name": "newTotalSupply", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "int64", - "name": "serial", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.PendingAirdrop[]", - "name": "pendingAirdrops", - "type": "tuple[]" - } - ], - "name": "cancelAirdrops", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "int64", - "name": "serial", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.PendingAirdrop[]", - "name": "pendingAirdrops", - "type": "tuple[]" - } - ], - "name": "claimAirdrops", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "treasury", - "type": "address" - }, - { - "internalType": "string", - "name": "memo", - "type": "string" - }, - { - "internalType": "bool", - "name": "tokenSupplyType", - "type": "bool" - }, - { - "internalType": "int64", - "name": "maxSupply", - "type": "int64" - }, - { - "internalType": "bool", - "name": "freezeDefault", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bool", - "name": "inheritAccountKey", - "type": "bool" - }, - { - "internalType": "address", - "name": "contractId", - "type": "address" - }, - { - "internalType": "bytes", - "name": "ed25519", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "ECDSA_secp256k1", - "type": "bytes" - }, - { - "internalType": "address", - "name": "delegatableContractId", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.KeyValue", - "name": "key", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.TokenKey[]", - "name": "tokenKeys", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "second", - "type": "int64" - }, - { - "internalType": "address", - "name": "autoRenewAccount", - "type": "address" - }, - { - "internalType": "int64", - "name": "autoRenewPeriod", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.Expiry", - "name": "expiry", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.HederaToken", - "name": "token", - "type": "tuple" - }, - { - "internalType": "int64", - "name": "initialTotalSupply", - "type": "int64" - }, - { - "internalType": "int32", - "name": "decimals", - "type": "int32" - } - ], - "name": "createFungibleToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "treasury", - "type": "address" - }, - { - "internalType": "string", - "name": "memo", - "type": "string" - }, - { - "internalType": "bool", - "name": "tokenSupplyType", - "type": "bool" - }, - { - "internalType": "int64", - "name": "maxSupply", - "type": "int64" - }, - { - "internalType": "bool", - "name": "freezeDefault", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bool", - "name": "inheritAccountKey", - "type": "bool" - }, - { - "internalType": "address", - "name": "contractId", - "type": "address" - }, - { - "internalType": "bytes", - "name": "ed25519", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "ECDSA_secp256k1", - "type": "bytes" - }, - { - "internalType": "address", - "name": "delegatableContractId", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.KeyValue", - "name": "key", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.TokenKey[]", - "name": "tokenKeys", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "second", - "type": "int64" - }, - { - "internalType": "address", - "name": "autoRenewAccount", - "type": "address" - }, - { - "internalType": "int64", - "name": "autoRenewPeriod", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.Expiry", - "name": "expiry", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.HederaToken", - "name": "token", - "type": "tuple" - }, - { - "internalType": "int64", - "name": "initialTotalSupply", - "type": "int64" - }, - { - "internalType": "int32", - "name": "decimals", - "type": "int32" - }, - { - "components": [ - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "bool", - "name": "useCurrentTokenForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FixedFee[]", - "name": "fixedFees", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "numerator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "denominator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "minimumAmount", - "type": "int64" - }, - { - "internalType": "int64", - "name": "maximumAmount", - "type": "int64" - }, - { - "internalType": "bool", - "name": "netOfTransfers", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FractionalFee[]", - "name": "fractionalFees", - "type": "tuple[]" - } - ], - "name": "createFungibleTokenWithCustomFees", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "treasury", - "type": "address" - }, - { - "internalType": "string", - "name": "memo", - "type": "string" - }, - { - "internalType": "bool", - "name": "tokenSupplyType", - "type": "bool" - }, - { - "internalType": "int64", - "name": "maxSupply", - "type": "int64" - }, - { - "internalType": "bool", - "name": "freezeDefault", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bool", - "name": "inheritAccountKey", - "type": "bool" - }, - { - "internalType": "address", - "name": "contractId", - "type": "address" - }, - { - "internalType": "bytes", - "name": "ed25519", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "ECDSA_secp256k1", - "type": "bytes" - }, - { - "internalType": "address", - "name": "delegatableContractId", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.KeyValue", - "name": "key", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.TokenKey[]", - "name": "tokenKeys", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "second", - "type": "int64" - }, - { - "internalType": "address", - "name": "autoRenewAccount", - "type": "address" - }, - { - "internalType": "int64", - "name": "autoRenewPeriod", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.Expiry", - "name": "expiry", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.HederaToken", - "name": "token", - "type": "tuple" - } - ], - "name": "createNonFungibleToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "treasury", - "type": "address" - }, - { - "internalType": "string", - "name": "memo", - "type": "string" - }, - { - "internalType": "bool", - "name": "tokenSupplyType", - "type": "bool" - }, - { - "internalType": "int64", - "name": "maxSupply", - "type": "int64" - }, - { - "internalType": "bool", - "name": "freezeDefault", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bool", - "name": "inheritAccountKey", - "type": "bool" - }, - { - "internalType": "address", - "name": "contractId", - "type": "address" - }, - { - "internalType": "bytes", - "name": "ed25519", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "ECDSA_secp256k1", - "type": "bytes" - }, - { - "internalType": "address", - "name": "delegatableContractId", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.KeyValue", - "name": "key", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.TokenKey[]", - "name": "tokenKeys", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "second", - "type": "int64" - }, - { - "internalType": "address", - "name": "autoRenewAccount", - "type": "address" - }, - { - "internalType": "int64", - "name": "autoRenewPeriod", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.Expiry", - "name": "expiry", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.HederaToken", - "name": "token", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "bool", - "name": "useCurrentTokenForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FixedFee[]", - "name": "fixedFees", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "numerator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "denominator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.RoyaltyFee[]", - "name": "royaltyFees", - "type": "tuple[]" - } - ], - "name": "createNonFungibleTokenWithCustomFees", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "accountID", - "type": "address" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "bool", - "name": "isApproval", - "type": "bool" - } - ], - "internalType": "struct IHederaTokenService.AccountAmount[]", - "name": "transfers", - "type": "tuple[]" - } - ], - "internalType": "struct IHederaTokenService.TransferList", - "name": "transferList", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "components": [ - { - "internalType": "address", - "name": "accountID", - "type": "address" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "bool", - "name": "isApproval", - "type": "bool" - } - ], - "internalType": "struct IHederaTokenService.AccountAmount[]", - "name": "transfers", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "senderAccountID", - "type": "address" - }, - { - "internalType": "address", - "name": "receiverAccountID", - "type": "address" - }, - { - "internalType": "int64", - "name": "serialNumber", - "type": "int64" - }, - { - "internalType": "bool", - "name": "isApproval", - "type": "bool" - } - ], - "internalType": "struct IHederaTokenService.NftTransfer[]", - "name": "nftTransfers", - "type": "tuple[]" - } - ], - "internalType": "struct IHederaTokenService.TokenTransferList[]", - "name": "tokenTransfers", - "type": "tuple[]" - } - ], - "name": "cryptoTransfer", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "deleteToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "dissociateToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address[]", - "name": "tokens", - "type": "address[]" - } - ], - "name": "dissociateTokens", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "freezeToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serialNumber", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "address", - "name": "approved", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getFungibleTokenInfo", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "components": [ - { - "components": [ - { - "components": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "treasury", - "type": "address" - }, - { - "internalType": "string", - "name": "memo", - "type": "string" - }, - { - "internalType": "bool", - "name": "tokenSupplyType", - "type": "bool" - }, - { - "internalType": "int64", - "name": "maxSupply", - "type": "int64" - }, - { - "internalType": "bool", - "name": "freezeDefault", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bool", - "name": "inheritAccountKey", - "type": "bool" - }, - { - "internalType": "address", - "name": "contractId", - "type": "address" - }, - { - "internalType": "bytes", - "name": "ed25519", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "ECDSA_secp256k1", - "type": "bytes" - }, - { - "internalType": "address", - "name": "delegatableContractId", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.KeyValue", - "name": "key", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.TokenKey[]", - "name": "tokenKeys", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "second", - "type": "int64" - }, - { - "internalType": "address", - "name": "autoRenewAccount", - "type": "address" - }, - { - "internalType": "int64", - "name": "autoRenewPeriod", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.Expiry", - "name": "expiry", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.HederaToken", - "name": "token", - "type": "tuple" - }, - { - "internalType": "int64", - "name": "totalSupply", - "type": "int64" - }, - { - "internalType": "bool", - "name": "deleted", - "type": "bool" - }, - { - "internalType": "bool", - "name": "defaultKycStatus", - "type": "bool" - }, - { - "internalType": "bool", - "name": "pauseStatus", - "type": "bool" - }, - { - "components": [ - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "bool", - "name": "useCurrentTokenForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FixedFee[]", - "name": "fixedFees", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "numerator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "denominator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "minimumAmount", - "type": "int64" - }, - { - "internalType": "int64", - "name": "maximumAmount", - "type": "int64" - }, - { - "internalType": "bool", - "name": "netOfTransfers", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FractionalFee[]", - "name": "fractionalFees", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "numerator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "denominator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.RoyaltyFee[]", - "name": "royaltyFees", - "type": "tuple[]" - }, - { - "internalType": "string", - "name": "ledgerId", - "type": "string" - } - ], - "internalType": "struct IHederaTokenService.TokenInfo", - "name": "tokenInfo", - "type": "tuple" - }, - { - "internalType": "int32", - "name": "decimals", - "type": "int32" - } - ], - "internalType": "struct IHederaTokenService.FungibleTokenInfo", - "name": "fungibleTokenInfo", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "int64", - "name": "serialNumber", - "type": "int64" - } - ], - "name": "getNonFungibleTokenInfo", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "components": [ - { - "components": [ - { - "components": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "treasury", - "type": "address" - }, - { - "internalType": "string", - "name": "memo", - "type": "string" - }, - { - "internalType": "bool", - "name": "tokenSupplyType", - "type": "bool" - }, - { - "internalType": "int64", - "name": "maxSupply", - "type": "int64" - }, - { - "internalType": "bool", - "name": "freezeDefault", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bool", - "name": "inheritAccountKey", - "type": "bool" - }, - { - "internalType": "address", - "name": "contractId", - "type": "address" - }, - { - "internalType": "bytes", - "name": "ed25519", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "ECDSA_secp256k1", - "type": "bytes" - }, - { - "internalType": "address", - "name": "delegatableContractId", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.KeyValue", - "name": "key", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.TokenKey[]", - "name": "tokenKeys", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "second", - "type": "int64" - }, - { - "internalType": "address", - "name": "autoRenewAccount", - "type": "address" - }, - { - "internalType": "int64", - "name": "autoRenewPeriod", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.Expiry", - "name": "expiry", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.HederaToken", - "name": "token", - "type": "tuple" - }, - { - "internalType": "int64", - "name": "totalSupply", - "type": "int64" - }, - { - "internalType": "bool", - "name": "deleted", - "type": "bool" - }, - { - "internalType": "bool", - "name": "defaultKycStatus", - "type": "bool" - }, - { - "internalType": "bool", - "name": "pauseStatus", - "type": "bool" - }, - { - "components": [ - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "bool", - "name": "useCurrentTokenForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FixedFee[]", - "name": "fixedFees", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "numerator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "denominator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "minimumAmount", - "type": "int64" - }, - { - "internalType": "int64", - "name": "maximumAmount", - "type": "int64" - }, - { - "internalType": "bool", - "name": "netOfTransfers", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FractionalFee[]", - "name": "fractionalFees", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "numerator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "denominator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.RoyaltyFee[]", - "name": "royaltyFees", - "type": "tuple[]" - }, - { - "internalType": "string", - "name": "ledgerId", - "type": "string" - } - ], - "internalType": "struct IHederaTokenService.TokenInfo", - "name": "tokenInfo", - "type": "tuple" - }, - { - "internalType": "int64", - "name": "serialNumber", - "type": "int64" - }, - { - "internalType": "address", - "name": "ownerId", - "type": "address" - }, - { - "internalType": "int64", - "name": "creationTime", - "type": "int64" - }, - { - "internalType": "bytes", - "name": "metadata", - "type": "bytes" - }, - { - "internalType": "address", - "name": "spenderId", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.NonFungibleTokenInfo", - "name": "nonFungibleTokenInfo", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getTokenCustomFees", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "components": [ - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "bool", - "name": "useCurrentTokenForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FixedFee[]", - "name": "fixedFees", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "numerator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "denominator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "minimumAmount", - "type": "int64" - }, - { - "internalType": "int64", - "name": "maximumAmount", - "type": "int64" - }, - { - "internalType": "bool", - "name": "netOfTransfers", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FractionalFee[]", - "name": "fractionalFees", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "numerator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "denominator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.RoyaltyFee[]", - "name": "royaltyFees", - "type": "tuple[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getTokenDefaultFreezeStatus", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "bool", - "name": "defaultFreezeStatus", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getTokenDefaultKycStatus", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "bool", - "name": "defaultKycStatus", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getTokenExpiryInfo", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "components": [ - { - "internalType": "int64", - "name": "second", - "type": "int64" - }, - { - "internalType": "address", - "name": "autoRenewAccount", - "type": "address" - }, - { - "internalType": "int64", - "name": "autoRenewPeriod", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.Expiry", - "name": "expiry", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getTokenInfo", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "components": [ - { - "components": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "treasury", - "type": "address" - }, - { - "internalType": "string", - "name": "memo", - "type": "string" - }, - { - "internalType": "bool", - "name": "tokenSupplyType", - "type": "bool" - }, - { - "internalType": "int64", - "name": "maxSupply", - "type": "int64" - }, - { - "internalType": "bool", - "name": "freezeDefault", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bool", - "name": "inheritAccountKey", - "type": "bool" - }, - { - "internalType": "address", - "name": "contractId", - "type": "address" - }, - { - "internalType": "bytes", - "name": "ed25519", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "ECDSA_secp256k1", - "type": "bytes" - }, - { - "internalType": "address", - "name": "delegatableContractId", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.KeyValue", - "name": "key", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.TokenKey[]", - "name": "tokenKeys", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "second", - "type": "int64" - }, - { - "internalType": "address", - "name": "autoRenewAccount", - "type": "address" - }, - { - "internalType": "int64", - "name": "autoRenewPeriod", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.Expiry", - "name": "expiry", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.HederaToken", - "name": "token", - "type": "tuple" - }, - { - "internalType": "int64", - "name": "totalSupply", - "type": "int64" - }, - { - "internalType": "bool", - "name": "deleted", - "type": "bool" - }, - { - "internalType": "bool", - "name": "defaultKycStatus", - "type": "bool" - }, - { - "internalType": "bool", - "name": "pauseStatus", - "type": "bool" - }, - { - "components": [ - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "bool", - "name": "useCurrentTokenForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FixedFee[]", - "name": "fixedFees", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "numerator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "denominator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "minimumAmount", - "type": "int64" - }, - { - "internalType": "int64", - "name": "maximumAmount", - "type": "int64" - }, - { - "internalType": "bool", - "name": "netOfTransfers", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FractionalFee[]", - "name": "fractionalFees", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "numerator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "denominator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.RoyaltyFee[]", - "name": "royaltyFees", - "type": "tuple[]" - }, - { - "internalType": "string", - "name": "ledgerId", - "type": "string" - } - ], - "internalType": "struct IHederaTokenService.TokenInfo", - "name": "tokenInfo", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - } - ], - "name": "getTokenKey", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "components": [ - { - "internalType": "bool", - "name": "inheritAccountKey", - "type": "bool" - }, - { - "internalType": "address", - "name": "contractId", - "type": "address" - }, - { - "internalType": "bytes", - "name": "ed25519", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "ECDSA_secp256k1", - "type": "bytes" - }, - { - "internalType": "address", - "name": "delegatableContractId", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.KeyValue", - "name": "key", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "getTokenType", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "int32", - "name": "tokenType", - "type": "int32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantTokenKyc", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isFrozen", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "bool", - "name": "frozen", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isKyc", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "bool", - "name": "kycGranted", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "isToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "bool", - "name": "isToken", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "bytes[]", - "name": "metadata", - "type": "bytes[]" - } - ], - "name": "mintToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "int64", - "name": "newTotalSupply", - "type": "int64" - }, - { - "internalType": "int64[]", - "name": "serialNumbers", - "type": "int64[]" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "pauseToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "bytes", - "name": "encodedFunctionSelector", - "type": "bytes" - } - ], - "name": "redirectForToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - }, - { - "internalType": "bytes", - "name": "response", - "type": "bytes" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "rejectingAddress", - "type": "address" - }, - { - "internalType": "address[]", - "name": "ftAddresses", - "type": "address[]" - }, - { - "components": [ - { - "internalType": "address", - "name": "nft", - "type": "address" - }, - { - "internalType": "int64", - "name": "serial", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.NftID[]", - "name": "nftIDs", - "type": "tuple[]" - } - ], - "name": "rejectTokens", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeTokenKyc", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "serialNumber", - "type": "uint256" - } - ], - "name": "transferFromNFT", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "int64", - "name": "serialNumber", - "type": "int64" - } - ], - "name": "transferNFT", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address[]", - "name": "sender", - "type": "address[]" - }, - { - "internalType": "address[]", - "name": "receiver", - "type": "address[]" - }, - { - "internalType": "int64[]", - "name": "serialNumber", - "type": "int64[]" - } - ], - "name": "transferNFTs", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - } - ], - "name": "transferToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address[]", - "name": "accountId", - "type": "address[]" - }, - { - "internalType": "int64[]", - "name": "amount", - "type": "int64[]" - } - ], - "name": "transferTokens", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "unfreezeToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "unpauseToken", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "components": [ - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "bool", - "name": "useCurrentTokenForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FixedFee[]", - "name": "fixedFees", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "numerator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "denominator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "minimumAmount", - "type": "int64" - }, - { - "internalType": "int64", - "name": "maximumAmount", - "type": "int64" - }, - { - "internalType": "bool", - "name": "netOfTransfers", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FractionalFee[]", - "name": "fractionalFees", - "type": "tuple[]" - } - ], - "name": "updateFungibleTokenCustomFees", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "components": [ - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "bool", - "name": "useCurrentTokenForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.FixedFee[]", - "name": "fixedFees", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "numerator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "denominator", - "type": "int64" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - }, - { - "internalType": "address", - "name": "tokenId", - "type": "address" - }, - { - "internalType": "bool", - "name": "useHbarsForPayment", - "type": "bool" - }, - { - "internalType": "address", - "name": "feeCollector", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.RoyaltyFee[]", - "name": "royaltyFees", - "type": "tuple[]" - } - ], - "name": "updateNonFungibleTokenCustomFees", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "components": [ - { - "internalType": "int64", - "name": "second", - "type": "int64" - }, - { - "internalType": "address", - "name": "autoRenewAccount", - "type": "address" - }, - { - "internalType": "int64", - "name": "autoRenewPeriod", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.Expiry", - "name": "expiryInfo", - "type": "tuple" - } - ], - "name": "updateTokenExpiryInfo", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "components": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "treasury", - "type": "address" - }, - { - "internalType": "string", - "name": "memo", - "type": "string" - }, - { - "internalType": "bool", - "name": "tokenSupplyType", - "type": "bool" - }, - { - "internalType": "int64", - "name": "maxSupply", - "type": "int64" - }, - { - "internalType": "bool", - "name": "freezeDefault", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bool", - "name": "inheritAccountKey", - "type": "bool" - }, - { - "internalType": "address", - "name": "contractId", - "type": "address" - }, - { - "internalType": "bytes", - "name": "ed25519", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "ECDSA_secp256k1", - "type": "bytes" - }, - { - "internalType": "address", - "name": "delegatableContractId", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.KeyValue", - "name": "key", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.TokenKey[]", - "name": "tokenKeys", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "int64", - "name": "second", - "type": "int64" - }, - { - "internalType": "address", - "name": "autoRenewAccount", - "type": "address" - }, - { - "internalType": "int64", - "name": "autoRenewPeriod", - "type": "int64" - } - ], - "internalType": "struct IHederaTokenService.Expiry", - "name": "expiry", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.HederaToken", - "name": "tokenInfo", - "type": "tuple" - } - ], - "name": "updateTokenInfo", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "keyType", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "bool", - "name": "inheritAccountKey", - "type": "bool" - }, - { - "internalType": "address", - "name": "contractId", - "type": "address" - }, - { - "internalType": "bytes", - "name": "ed25519", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "ECDSA_secp256k1", - "type": "bytes" - }, - { - "internalType": "address", - "name": "delegatableContractId", - "type": "address" - } - ], - "internalType": "struct IHederaTokenService.KeyValue", - "name": "key", - "type": "tuple" - } - ], - "internalType": "struct IHederaTokenService.TokenKey[]", - "name": "keys", - "type": "tuple[]" - } - ], - "name": "updateTokenKeys", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "int64", - "name": "amount", - "type": "int64" - } - ], - "name": "wipeTokenAccount", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "int64[]", - "name": "serialNumbers", - "type": "int64[]" - } - ], - "name": "wipeTokenAccountNFT", - "outputs": [ - { - "internalType": "int64", - "name": "responseCode", - "type": "int64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/artifacts/contracts/utils/KeyHelper.sol/Bits.dbg.json b/contracts/artifacts/contracts/utils/KeyHelper.sol/Bits.dbg.json deleted file mode 100644 index 15e432f..0000000 --- a/contracts/artifacts/contracts/utils/KeyHelper.sol/Bits.dbg.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "_format": "hh-sol-dbg-1", - "buildInfo": "../../../build-info/e0d27f44f97abb5534e508a66a390154.json" -} diff --git a/contracts/artifacts/contracts/utils/KeyHelper.sol/Bits.json b/contracts/artifacts/contracts/utils/KeyHelper.sol/Bits.json deleted file mode 100644 index a2f58cf..0000000 --- a/contracts/artifacts/contracts/utils/KeyHelper.sol/Bits.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Bits", - "sourceName": "contracts/utils/KeyHelper.sol", - "abi": [], - "bytecode": "0x60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d7dfa46a2c8ea80795b16a97d989816432f70f4a92a17a4bc36ee6c9eda5a1c364736f6c63430008120033", - "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d7dfa46a2c8ea80795b16a97d989816432f70f4a92a17a4bc36ee6c9eda5a1c364736f6c63430008120033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/artifacts/contracts/utils/KeyHelper.sol/KeyHelper.dbg.json b/contracts/artifacts/contracts/utils/KeyHelper.sol/KeyHelper.dbg.json deleted file mode 100644 index 15e432f..0000000 --- a/contracts/artifacts/contracts/utils/KeyHelper.sol/KeyHelper.dbg.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "_format": "hh-sol-dbg-1", - "buildInfo": "../../../build-info/e0d27f44f97abb5534e508a66a390154.json" -} diff --git a/contracts/artifacts/contracts/utils/KeyHelper.sol/KeyHelper.json b/contracts/artifacts/contracts/utils/KeyHelper.sol/KeyHelper.json deleted file mode 100644 index be1f8b7..0000000 --- a/contracts/artifacts/contracts/utils/KeyHelper.sol/KeyHelper.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "KeyHelper", - "sourceName": "contracts/utils/KeyHelper.sol", - "abi": [], - "bytecode": "0x", - "deployedBytecode": "0x", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/contracts/contracts/NFTContract.sol b/contracts/contracts/NFTContract.sol deleted file mode 100644 index b81333e..0000000 --- a/contracts/contracts/NFTContract.sol +++ /dev/null @@ -1,137 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity >=0.5.0 <0.9.0; - -import "./utils/HederaResponseCodes.sol"; -import "./utils/IHederaTokenService.sol"; -import "./utils/HederaTokenService.sol"; -import "./utils/ExpiryHelper.sol"; -import "./utils/KeyHelper.sol"; - -contract NFTContract is ExpiryHelper, KeyHelper, HederaTokenService { - address public owner; - - // Mapping to track authorized minters - mapping(address => bool) public authorizedMinters; - - // Mapping to track which wallet can claim which NFT serial number - mapping(int64 => address) public nftClaimRights; - // Mapping to track if an NFT has been claimed - mapping(int64 => bool) public claimed; - - // Events - event MinterAdded(address indexed minter); - event MinterRemoved(address indexed minter); - - constructor() { - owner = msg.sender; - // Make the owner an authorized minter by default - authorizedMinters[msg.sender] = true; - } - - modifier onlyOwner() { - require(msg.sender == owner, "Only owner can call this function"); - _; - } - - modifier onlyMinter() { - require(authorizedMinters[msg.sender], "Only authorized minters can call this function"); - _; - } - - // Function to add a new minter - function addMinter(address minter) external onlyOwner { - require(minter != address(0), "Invalid minter address"); - require(!authorizedMinters[minter], "Address is already a minter"); - authorizedMinters[minter] = true; - emit MinterAdded(minter); - } - - // Function to remove a minter - function removeMinter(address minter) external onlyOwner { - require(minter != owner, "Cannot remove owner as minter"); - require(authorizedMinters[minter], "Address is not a minter"); - authorizedMinters[minter] = false; - emit MinterRemoved(minter); - } - - // Function to check if an address is an authorized minter - function isMinter(address account) external view returns (bool) { - return authorizedMinters[account]; - } - - function createNft( - string memory name, - string memory symbol, - string memory memo, - int64 maxSupply, - int64 autoRenewPeriod - ) external payable onlyOwner returns (address) { - IHederaTokenService.TokenKey[] memory keys = new IHederaTokenService.TokenKey[](1); - keys[0] = getSingleKey(KeyType.SUPPLY, KeyValueType.CONTRACT_ID, address(this)); - - IHederaTokenService.HederaToken memory token; - token.name = name; - token.symbol = symbol; - token.memo = memo; - token.treasury = address(this); - token.tokenSupplyType = true; - token.maxSupply = maxSupply; - token.tokenKeys = keys; - token.freezeDefault = false; - token.expiry = createAutoRenewExpiry(address(this), autoRenewPeriod); - - (int responseCode, address createdToken) = HederaTokenService.createNonFungibleToken(token); - - if(responseCode != HederaResponseCodes.SUCCESS){ - revert("Failed to create non-fungible token"); - } - return createdToken; - } - - function mintNftForUser( - address token, - bytes[] memory metadata, - address allowedClaimer - ) external onlyMinter returns(int64) { - (int response, , int64[] memory serial) = HederaTokenService.mintToken(token, 0, metadata); - - if(response != HederaResponseCodes.SUCCESS){ - revert("Failed to mint non-fungible token"); - } - - // Assign claim rights to the specified wallet - nftClaimRights[serial[0]] = allowedClaimer; - - return serial[0]; - } - - function claimNft( - address token, - int64 serial - ) external returns(int) { - // Check if the caller is the allowed claimer for this NFT - require(nftClaimRights[serial] == msg.sender, "You are not authorized to claim this NFT"); - // Check if the NFT hasn't been claimed yet - require(!claimed[serial], "NFT has already been claimed"); - - int response = HederaTokenService.transferNFT(token, address(this), msg.sender, serial); - - if(response != HederaResponseCodes.SUCCESS){ - revert("Failed to transfer non-fungible token"); - } - - // Mark the NFT as claimed - claimed[serial] = true; - - return response; - } - - // View functions to check NFT status - function getClaimerAddress(int64 serial) external view returns (address) { - return nftClaimRights[serial]; - } - - function isNftClaimed(int64 serial) external view returns (bool) { - return claimed[serial]; - } -} \ No newline at end of file diff --git a/contracts/contracts/src/Create2DeployerLocal.sol b/contracts/contracts/src/Create2DeployerLocal.sol new file mode 100644 index 0000000..cec327d --- /dev/null +++ b/contracts/contracts/src/Create2DeployerLocal.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import {CreateX} from "xdeployer/src/contracts/CreateX.sol"; + +contract Create2DeployerLocal is CreateX {} diff --git a/contracts/contracts/src/Greeter.sol b/contracts/contracts/src/Greeter.sol new file mode 100644 index 0000000..a420bf0 --- /dev/null +++ b/contracts/contracts/src/Greeter.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.28; + +contract Greeter { + string private greeting; + + constructor(string memory greeting_) { + greeting = greeting_; + } + + function greet() public view returns (string memory) { + return greeting; + } + + function setGreeting(string memory newGreeting) public { + greeting = newGreeting; + } +} diff --git a/contracts/contracts/test/Greeter.t.sol b/contracts/contracts/test/Greeter.t.sol new file mode 100644 index 0000000..2674b75 --- /dev/null +++ b/contracts/contracts/test/Greeter.t.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.28; + +import {Greeter} from "../src/Greeter.sol"; +import {Test} from "forge-std/Test.sol"; + +contract GreeterTest is Test { + Greeter public greeter; + + function setUp() public { + greeter = new Greeter("Hello, Hardhat!"); + } + + function testCreateGreeter() public { + assertEq(greeter.greet(), "Hello, Hardhat!"); + greeter.setGreeting("Hola, mundo!"); + assertEq(greeter.greet(), "Hola, mundo!"); + } +} diff --git a/contracts/contracts/utils/ExpiryHelper.sol b/contracts/contracts/utils/ExpiryHelper.sol deleted file mode 100644 index e353034..0000000 --- a/contracts/contracts/utils/ExpiryHelper.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity >=0.5.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./HederaTokenService.sol"; - -abstract contract ExpiryHelper { - - function createAutoRenewExpiry( - address autoRenewAccount, - int64 autoRenewPeriod - ) internal pure returns (IHederaTokenService.Expiry memory expiry) { - expiry.autoRenewAccount = autoRenewAccount; - expiry.autoRenewPeriod = autoRenewPeriod; - } - - function createSecondExpiry(int64 second) internal pure returns (IHederaTokenService.Expiry memory expiry) { - expiry.second = second; - } -} \ No newline at end of file diff --git a/contracts/contracts/utils/HederaResponseCodes.sol b/contracts/contracts/utils/HederaResponseCodes.sol deleted file mode 100644 index 229dfb6..0000000 --- a/contracts/contracts/utils/HederaResponseCodes.sol +++ /dev/null @@ -1,311 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity >=0.4.9 <0.9.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. -} \ No newline at end of file diff --git a/contracts/contracts/utils/HederaTokenService.sol b/contracts/contracts/utils/HederaTokenService.sol deleted file mode 100644 index 9bf73de..0000000 --- a/contracts/contracts/utils/HederaTokenService.sol +++ /dev/null @@ -1,707 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity >=0.5.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./HederaResponseCodes.sol"; -import "./IHederaTokenService.sol"; - -abstract contract HederaTokenService { - address constant precompileAddress = address(0x167); - // 90 days in seconds - int32 constant defaultAutoRenewPeriod = 7776000; - - modifier nonEmptyExpiry(IHederaTokenService.HederaToken memory token) - { - if (token.expiry.second == 0 && token.expiry.autoRenewPeriod == 0) { - token.expiry.autoRenewPeriod = defaultAutoRenewPeriod; - } - _; - } - - /// Generic event - event CallResponseEvent(bool, bytes); - - /// Performs transfers among combinations of tokens and hbars - /// @param transferList the list of hbar transfers to do - /// @param tokenTransfers the list of transfers to do - /// @return responseCode The response code for the status of the request. SUCCESS is 22. - /// @custom:version 0.3.0 the signature of the previous version was cryptoTransfer(TokenTransferList[] memory tokenTransfers) - function cryptoTransfer(IHederaTokenService.TransferList memory transferList, IHederaTokenService.TokenTransferList[] memory tokenTransfers) internal - returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.cryptoTransfer.selector, transferList, tokenTransfers)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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, otherwise empty. - function mintToken(address token, int64 amount, bytes[] memory metadata) internal - returns (int responseCode, int64 newTotalSupply, int64[] memory serialNumbers) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.mintToken.selector, - token, amount, metadata)); - (responseCode, newTotalSupply, serialNumbers) = - success - ? abi.decode(result, (int32, int64, int64[])) - : (HederaResponseCodes.UNKNOWN, int64(0), new int64[](0)); - } - - /// 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) internal - returns (int responseCode, int64 newTotalSupply) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.burnToken.selector, - token, amount, serialNumbers)); - (responseCode, newTotalSupply) = - success - ? abi.decode(result, (int32, int64)) - : (HederaResponseCodes.UNKNOWN, int64(0)); - } - - /// 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) internal returns (int responseCode) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.associateTokens.selector, - account, tokens)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - function associateToken(address account, address token) internal returns (int responseCode) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.associateToken.selector, - account, token)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) internal returns (int responseCode) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.dissociateTokens.selector, - account, tokens)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - function dissociateToken(address account, address token) internal returns (int responseCode) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.dissociateToken.selector, - account, token)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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( - IHederaTokenService.HederaToken memory token, - int64 initialTotalSupply, - int32 decimals) nonEmptyExpiry(token) - internal returns (int responseCode, address tokenAddress) { - (bool success, bytes memory result) = precompileAddress.call{value : msg.value}( - abi.encodeWithSelector(IHederaTokenService.createFungibleToken.selector, - token, initialTotalSupply, decimals)); - - - (responseCode, tokenAddress) = success ? abi.decode(result, (int32, address)) : (HederaResponseCodes.UNKNOWN, address(0)); - } - - /// 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( - IHederaTokenService.HederaToken memory token, - int64 initialTotalSupply, - int32 decimals, - IHederaTokenService.FixedFee[] memory fixedFees, - IHederaTokenService.FractionalFee[] memory fractionalFees) nonEmptyExpiry(token) - internal returns (int responseCode, address tokenAddress) { - (bool success, bytes memory result) = precompileAddress.call{value : msg.value}( - abi.encodeWithSelector(IHederaTokenService.createFungibleTokenWithCustomFees.selector, - token, initialTotalSupply, decimals, fixedFees, fractionalFees)); - (responseCode, tokenAddress) = success ? abi.decode(result, (int32, address)) : (HederaResponseCodes.UNKNOWN, address(0)); - } - - /// 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(IHederaTokenService.HederaToken memory token) nonEmptyExpiry(token) - internal returns (int responseCode, address tokenAddress) { - (bool success, bytes memory result) = precompileAddress.call{value : msg.value}( - abi.encodeWithSelector(IHederaTokenService.createNonFungibleToken.selector, token)); - (responseCode, tokenAddress) = success ? abi.decode(result, (int32, address)) : (HederaResponseCodes.UNKNOWN, address(0)); - } - - /// 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( - IHederaTokenService.HederaToken memory token, - IHederaTokenService.FixedFee[] memory fixedFees, - IHederaTokenService.RoyaltyFee[] memory royaltyFees) nonEmptyExpiry(token) - internal returns (int responseCode, address tokenAddress) { - (bool success, bytes memory result) = precompileAddress.call{value : msg.value}( - abi.encodeWithSelector(IHederaTokenService.createNonFungibleTokenWithCustomFees.selector, - token, fixedFees, royaltyFees)); - (responseCode, tokenAddress) = success ? abi.decode(result, (int32, address)) : (HederaResponseCodes.UNKNOWN, address(0)); - } - - /// Retrieves fungible specific token info for a fungible token - /// @param token The ID of the token as a solidity address - /// @dev This function reverts if the call is not successful - function getFungibleTokenInfo(address token) internal returns (int responseCode, IHederaTokenService.FungibleTokenInfo memory tokenInfo) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.getFungibleTokenInfo.selector, token)); - IHederaTokenService.FungibleTokenInfo memory defaultTokenInfo; - (responseCode, tokenInfo) = success ? abi.decode(result, (int32, IHederaTokenService.FungibleTokenInfo)) : (HederaResponseCodes.UNKNOWN, defaultTokenInfo); - } - - /// Retrieves general token info for a given token - /// @param token The ID of the token as a solidity address - /// @dev This function reverts if the call is not successful - function getTokenInfo(address token) internal returns (int responseCode, IHederaTokenService.TokenInfo memory tokenInfo) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.getTokenInfo.selector, token)); - IHederaTokenService.TokenInfo memory defaultTokenInfo; - (responseCode, tokenInfo) = success ? abi.decode(result, (int32, IHederaTokenService.TokenInfo)) : (HederaResponseCodes.UNKNOWN, defaultTokenInfo); - } - - /// Retrieves non-fungible specific token info for a given NFT - /// @param token The ID of the token as a solidity address - /// @dev This function reverts if the call is not successful - function getNonFungibleTokenInfo(address token, int64 serialNumber) internal returns (int responseCode, IHederaTokenService.NonFungibleTokenInfo memory tokenInfo) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.getNonFungibleTokenInfo.selector, token, serialNumber)); - IHederaTokenService.NonFungibleTokenInfo memory defaultTokenInfo; - (responseCode, tokenInfo) = success ? abi.decode(result, (int32, IHederaTokenService.NonFungibleTokenInfo)) : (HederaResponseCodes.UNKNOWN, defaultTokenInfo); - } - - /// 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` - /// @dev This function reverts if the call is not successful - function getTokenCustomFees(address token) internal returns (int64 responseCode, - IHederaTokenService.FixedFee[] memory fixedFees, - IHederaTokenService.FractionalFee[] memory fractionalFees, - IHederaTokenService.RoyaltyFee[] memory royaltyFees) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.getTokenCustomFees.selector, token)); - IHederaTokenService.FixedFee[] memory defaultFixedFees; - IHederaTokenService.FractionalFee[] memory defaultFractionalFees; - IHederaTokenService.RoyaltyFee[] memory defaultRoyaltyFees; - (responseCode, fixedFees, fractionalFees, royaltyFees) = - success ? abi.decode - (result, (int32, IHederaTokenService.FixedFee[], IHederaTokenService.FractionalFee[], IHederaTokenService.RoyaltyFee[])) - : (HederaResponseCodes.UNKNOWN, defaultFixedFees, defaultFractionalFees, defaultRoyaltyFees); - } - - /// 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 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) internal returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.approve.selector, - token, spender, amount)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.transferFrom.selector, - token, from, to, amount)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.transferFromNFT.selector, - token, from, to, serialNumber)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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. - function allowance(address token, address owner, address spender) internal returns (int responseCode, uint256 amount) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.allowance.selector, - token, owner, spender)); - (responseCode, amount) = success ? abi.decode(result, (int32, uint256)) : (HederaResponseCodes.UNKNOWN, 0); - } - - /// 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) internal returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.approveNFT.selector, - token, approved, serialNumber)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) internal returns (int responseCode, address approved) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.getApproved.selector, - token, serialNumber)); - (responseCode, approved) = - success - ? abi.decode(result, (int32, address)) - : (HederaResponseCodes.UNKNOWN, address(0)); - } - - /// 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` - /// @dev This function reverts if the call is not successful - function isFrozen(address token, address account) internal returns (int64 responseCode, bool frozen){ - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.isFrozen.selector, token, account)); - (responseCode, frozen) = success ? abi.decode(result, (int32, bool)) : (HederaResponseCodes.UNKNOWN, false); - } - - /// 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` - /// @dev This function reverts if the call is not successful - function isKyc(address token, address account) internal returns (int64 responseCode, bool kycGranted){ - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.isKyc.selector, token, account)); - (responseCode, kycGranted) = success ? abi.decode(result, (int32, bool)) : (HederaResponseCodes.UNKNOWN, false); - } - - /// 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) internal returns (int64 responseCode){ - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.freezeToken.selector, token, account)); - (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) internal returns (int64 responseCode){ - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.unfreezeToken.selector, token, account)); - (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) internal returns (int64 responseCode){ - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.grantTokenKyc.selector, token, account)); - (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) internal returns (int64 responseCode){ - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.revokeTokenKyc.selector, token, account)); - (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) internal returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.setApprovalForAll.selector, - token, operator, approved)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) internal returns (int responseCode, bool approved) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.isApprovedForAll.selector, - token, owner, operator)); - (responseCode, approved) = - success - ? abi.decode(result, (int32, bool)) - : (HederaResponseCodes.UNKNOWN, false); - } - - /// 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. - /// @dev This function reverts if the call is not successful - function getTokenDefaultFreezeStatus(address token) internal returns (int responseCode, bool defaultFreezeStatus) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.getTokenDefaultFreezeStatus.selector, token)); - (responseCode, defaultFreezeStatus) = success ? abi.decode(result, (int32, bool)) : (HederaResponseCodes.UNKNOWN, false); - } - - /// 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. - /// @dev This function reverts if the call is not successful - function getTokenDefaultKycStatus(address token) internal returns (int responseCode, bool defaultKycStatus) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.getTokenDefaultKycStatus.selector, token)); - (responseCode, defaultKycStatus) = success ? abi.decode(result, (int32, bool)) : (HederaResponseCodes.UNKNOWN, false); - } - - /********************** - * ABI v1 calls * - **********************/ - - /// Initiates a Fungible Token Transfer - /// @param token The ID of the token as a solidity address - /// @param accountIds account to do a transfer to/from - /// @param amounts The amount from the accountId at the same index - function transferTokens(address token, address[] memory accountIds, int64[] memory amounts) internal - returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.transferTokens.selector, - token, accountIds, amounts)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) - internal returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.transferNFTs.selector, - token, sender, receiver, serialNumber)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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, int64 amount) internal - returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.transferToken.selector, - token, sender, receiver, amount)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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 serialNumber The serial number of the NFT to transfer. - function transferNFT(address token, address sender, address receiver, int64 serialNumber) internal - returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.transferNFT.selector, - token, sender, receiver, serialNumber)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) internal returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.pauseToken.selector, token)); - (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) internal returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.unpauseToken.selector, token)); - (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) internal returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.wipeTokenAccount.selector, token, account, amount)); - (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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) internal - returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.wipeTokenAccountNFT.selector, token, account, serialNumbers)); - (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// Operation to delete token - /// @param token The token address - /// @return responseCode The response code for the status of the request. SUCCESS is 22. - function deleteToken(address token) internal returns (int responseCode) - { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.deleteToken.selector, token)); - (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// Operation to update token keys - /// @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, IHederaTokenService.TokenKey[] memory keys) - internal returns (int64 responseCode){ - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.updateTokenKeys.selector, token, keys)); - (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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` - /// @dev This function reverts if the call is not successful - function getTokenKey(address token, uint keyType) - internal returns (int64 responseCode, IHederaTokenService.KeyValue memory key){ - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.getTokenKey.selector, token, keyType)); - IHederaTokenService.KeyValue memory defaultKeyValueInfo; - (responseCode, key) = success ? abi.decode(result, (int32,IHederaTokenService.KeyValue) ) : (HederaResponseCodes.UNKNOWN, defaultKeyValueInfo); - } - - - /// 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 isTokenFlag True if valid token found for the given address - /// @dev This function reverts if the call is not successful - function isToken(address token) internal returns (int64 responseCode, bool isTokenFlag) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.isToken.selector, token)); - (responseCode, isTokenFlag) = success ? abi.decode(result, (int32, bool)) : (HederaResponseCodes.UNKNOWN, false); - } - - /// 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 - /// @dev This function reverts if the call is not successful - function getTokenType(address token) internal returns (int64 responseCode, int32 tokenType) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.getTokenType.selector, token)); - (responseCode, tokenType) = success ? abi.decode(result, (int32, int32)) : (HederaResponseCodes.UNKNOWN, - 1); - } - - /// Operation to get token expiry info - /// @param token The token address - /// @return responseCode The response code for the status of the request. SUCCESS is 22. - /// @return expiryInfo The expiry info of the token - /// @dev This function reverts if the call is not successful - function getTokenExpiryInfo(address token) internal returns (int responseCode, IHederaTokenService.Expiry memory expiryInfo){ - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.getTokenExpiryInfo.selector, token)); - IHederaTokenService.Expiry memory defaultExpiryInfo; - (responseCode, expiryInfo) = success ? abi.decode(result, (int32, IHederaTokenService.Expiry)) : (HederaResponseCodes.UNKNOWN, defaultExpiryInfo); - } - - /// Operation to update token expiry info - /// @param token The token address - /// @return responseCode The response code for the status of the request. SUCCESS is 22. - function updateTokenExpiryInfo(address token, IHederaTokenService.Expiry memory expiryInfo) internal returns (int responseCode){ - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.updateTokenExpiryInfo.selector, token, expiryInfo)); - (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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, IHederaTokenService.HederaToken memory tokenInfo) internal returns (int responseCode) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.updateTokenInfo.selector, token, tokenInfo)); - (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// 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 (int responseCode, bytes memory response) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.redirectForToken.selector, token, encodedFunctionSelector) - ); - - emit CallResponseEvent(success, result); - (responseCode, response) = success ? (HederaResponseCodes.SUCCESS, result) : (HederaResponseCodes.UNKNOWN, bytes("")); - } - - /// Update the custom fees for a fungible token - /// @param token The token address - /// @param fixedFees Set of fixed fees for `token` - /// @param fractionalFees Set of fractional fees for `token` - /// @return responseCode The response code for the status of the request. SUCCESS is 22. - function updateFungibleTokenCustomFees(address token, IHederaTokenService.FixedFee[] memory fixedFees, IHederaTokenService.FractionalFee[] memory fractionalFees) internal returns (int64 responseCode) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.updateFungibleTokenCustomFees.selector, token, fixedFees, fractionalFees)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } - - /// Update the custom fees for a non-fungible token - /// @param token The token address - /// @param fixedFees Set of fixed fees for `token` - /// @param royaltyFees Set of royalty fees for `token` - /// @return responseCode The response code for the status of the request. SUCCESS is 22. - function updateNonFungibleTokenCustomFees(address token, IHederaTokenService.FixedFee[] memory fixedFees, IHederaTokenService.RoyaltyFee[] memory royaltyFees) internal returns (int64 responseCode) { - (bool success, bytes memory result) = precompileAddress.call( - abi.encodeWithSelector(IHederaTokenService.updateNonFungibleTokenCustomFees.selector, token, fixedFees, royaltyFees)); - responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; - } -} \ No newline at end of file diff --git a/contracts/contracts/utils/IHederaTokenService.sol b/contracts/contracts/utils/IHederaTokenService.sol deleted file mode 100644 index 51eb0c5..0000000 --- a/contracts/contracts/utils/IHederaTokenService.sol +++ /dev/null @@ -1,869 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity >=0.4.9 <0.9.0; -pragma experimental ABIEncoderV2; - -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. - /// @custom:version 0.3.0 previous version did not include isApproval - struct AccountAmount { - // The Account ID, as a solidity address, that sends/receives cryptocurrency or tokens - 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. - /// @custom:version 0.3.0 previous version did not include isApproval - 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 - 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 - uint 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; - } - - /// Represents a pending airdrop of a token or NFT to a receiver - /// @param sender The address of the account sending the airdrop - /// @param receiver The address of the account receiving the airdrop - /// @param token The address of the token being airdropped - /// @param serial For NFT airdrops, the serial number of the NFT. For fungible tokens, this should be 0 - struct PendingAirdrop { - address sender; - address receiver; - address token; - int64 serial; - } - - /// Represents a unique NFT by its token address and serial number - /// @param nft The address of the NFT token - /// @param serial The serial number that uniquely identifies this NFT within its token type - struct NftID { - address nft; - int64 serial; - } - - /********************** - * 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 - /// @custom:version 0.3.0 the signature of the previous version was cryptoTransfer(TokenTransferList[] memory tokenTransfers) - 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, uint 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); - - /// Update the custom fees for a fungible token - /// @param token The token address - /// @param fixedFees Set of fixed fees for `token` - /// @param fractionalFees Set of fractional fees for `token` - /// @return responseCode The response code for the status of the request. SUCCESS is 22. - function updateFungibleTokenCustomFees(address token, IHederaTokenService.FixedFee[] memory fixedFees, IHederaTokenService.FractionalFee[] memory fractionalFees) external returns (int64 responseCode); - - /// Update the custom fees for a non-fungible token - /// @param token The token address - /// @param fixedFees Set of fixed fees for `token` - /// @param royaltyFees Set of royalty fees for `token` - /// @return responseCode The response code for the status of the request. SUCCESS is 22. - function updateNonFungibleTokenCustomFees(address token, IHederaTokenService.FixedFee[] memory fixedFees, IHederaTokenService.RoyaltyFee[] memory royaltyFees) external returns (int64 responseCode); - - /// @notice Airdrop one or more tokens to one or more accounts - /// @notice Recipients will receive tokens in one of these ways: - /// @notice - Immediately if already associated with the token - /// @notice - Immediately with auto-association if they have available slots - /// @notice - As a pending airdrop requiring claim if they have "receiver signature required" - /// @notice - As a pending airdrop requiring claim if they have no available auto-association slots - /// @notice Immediate airdrops are irreversible, pending airdrops can be canceled - /// @notice All transfer fees and auto-renewal rent costs are charged to the transaction submitter - /// @param tokenTransfers Array of token transfer lists containing token addresses and recipient details - /// @return responseCode The response code for the status of the request. SUCCESS is 22. - function airdropTokens(TokenTransferList[] memory tokenTransfers) external returns (int64 responseCode); - - /// @notice Cancels pending airdrops that have not yet been claimed - /// @param pendingAirdrops Array of pending airdrops to cancel - /// @return responseCode The response code for the status of the request. SUCCESS is 22. - function cancelAirdrops(PendingAirdrop[] memory pendingAirdrops) external returns (int64 responseCode); - - /// @notice Claims pending airdrops that were sent to the calling account - /// @param pendingAirdrops Array of pending airdrops to claim - /// @return responseCode The response code for the status of the request. SUCCESS is 22. - function claimAirdrops(PendingAirdrop[] memory pendingAirdrops) external returns (int64 responseCode); - - /// @notice Rejects one or more tokens by transferring their full balance from the requesting account to the treasury - /// @notice This transfer does not charge any custom fees or royalties defined for the tokens - /// @notice For fungible tokens, the requesting account's balance will become 0 and the treasury balance will increase by that amount - /// @notice For non-fungible tokens, the requesting account will no longer hold the rejected serial numbers and they will be transferred to the treasury - /// @param rejectingAddress The address rejecting the tokens - /// @param ftAddresses Array of fungible token addresses to reject - /// @param nftIDs Array of NFT IDs to reject - /// @return responseCode The response code for the status of the request. SUCCESS is 22. - function rejectTokens(address rejectingAddress, address[] memory ftAddresses, NftID[] memory nftIDs) external returns (int64 responseCode); -} \ No newline at end of file diff --git a/contracts/contracts/utils/KeyHelper.sol b/contracts/contracts/utils/KeyHelper.sol deleted file mode 100644 index 5696937..0000000 --- a/contracts/contracts/utils/KeyHelper.sol +++ /dev/null @@ -1,166 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -pragma solidity >=0.5.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./HederaTokenService.sol"; - -abstract contract KeyHelper { - using Bits for uint256; - address supplyContract; - - mapping(KeyType => uint256) keyTypes; - - enum KeyType { - ADMIN, - KYC, - FREEZE, - WIPE, - SUPPLY, - FEE, - PAUSE - } - enum KeyValueType { - INHERIT_ACCOUNT_KEY, - CONTRACT_ID, - ED25519, - SECP256K1, - DELEGETABLE_CONTRACT_ID - } - - constructor() { - keyTypes[KeyType.ADMIN] = 1; - keyTypes[KeyType.KYC] = 2; - keyTypes[KeyType.FREEZE] = 4; - keyTypes[KeyType.WIPE] = 8; - keyTypes[KeyType.SUPPLY] = 16; - keyTypes[KeyType.FEE] = 32; - keyTypes[KeyType.PAUSE] = 64; - } - - function getDefaultKeys() internal view returns (IHederaTokenService.TokenKey[] memory keys) { - keys = new IHederaTokenService.TokenKey[](2); - keys[0] = getSingleKey(KeyType.KYC, KeyValueType.CONTRACT_ID, ''); - keys[1] = IHederaTokenService.TokenKey( - getDuplexKeyType(KeyType.SUPPLY, KeyType.PAUSE), - getKeyValueType(KeyValueType.CONTRACT_ID, '') - ); - } - - function getAllTypeKeys(KeyValueType keyValueType, bytes memory key) - internal - view - returns (IHederaTokenService.TokenKey[] memory keys) - { - keys = new IHederaTokenService.TokenKey[](1); - keys[0] = IHederaTokenService.TokenKey(getAllKeyTypes(), getKeyValueType(keyValueType, key)); - } - - function getCustomSingleTypeKeys( - KeyType keyType, - KeyValueType keyValueType, - bytes memory key - ) internal view returns (IHederaTokenService.TokenKey[] memory keys) { - keys = new IHederaTokenService.TokenKey[](1); - keys[0] = IHederaTokenService.TokenKey(getKeyType(keyType), getKeyValueType(keyValueType, key)); - } - - function getCustomDuplexTypeKeys( - KeyType firstType, - KeyType secondType, - KeyValueType keyValueType, - bytes memory key - ) internal view returns (IHederaTokenService.TokenKey[] memory keys) { - keys = new IHederaTokenService.TokenKey[](1); - keys[0] = IHederaTokenService.TokenKey( - getDuplexKeyType(firstType, secondType), - getKeyValueType(keyValueType, key) - ); - } - - function getSingleKey( - KeyType keyType, - KeyValueType keyValueType, - bytes memory key - ) internal view returns (IHederaTokenService.TokenKey memory tokenKey) { - tokenKey = IHederaTokenService.TokenKey(getKeyType(keyType), getKeyValueType(keyValueType, key)); - } - - function getSingleKey( - KeyType keyType, - KeyValueType keyValueType, - address key - ) internal view returns (IHederaTokenService.TokenKey memory tokenKey) { - tokenKey = IHederaTokenService.TokenKey(getKeyType(keyType), getKeyValueType(keyValueType, key)); - } - - function getSingleKey( - KeyType firstType, - KeyType secondType, - KeyValueType keyValueType, - bytes memory key - ) internal view returns (IHederaTokenService.TokenKey memory tokenKey) { - tokenKey = IHederaTokenService.TokenKey( - getDuplexKeyType(firstType, secondType), - getKeyValueType(keyValueType, key) - ); - } - - function getDuplexKeyType(KeyType firstType, KeyType secondType) internal pure returns (uint256 keyType) { - keyType = keyType.setBit(uint8(firstType)); - keyType = keyType.setBit(uint8(secondType)); - } - - function getAllKeyTypes() internal pure returns (uint256 keyType) { - keyType = keyType.setBit(uint8(KeyType.ADMIN)); - keyType = keyType.setBit(uint8(KeyType.KYC)); - keyType = keyType.setBit(uint8(KeyType.FREEZE)); - keyType = keyType.setBit(uint8(KeyType.WIPE)); - keyType = keyType.setBit(uint8(KeyType.SUPPLY)); - keyType = keyType.setBit(uint8(KeyType.FEE)); - keyType = keyType.setBit(uint8(KeyType.PAUSE)); - } - - function getKeyType(KeyType keyType) internal view returns (uint256) { - return keyTypes[keyType]; - } - - function getKeyValueType(KeyValueType keyValueType, bytes memory key) - internal - view - returns (IHederaTokenService.KeyValue memory keyValue) - { - if (keyValueType == KeyValueType.INHERIT_ACCOUNT_KEY) { - keyValue.inheritAccountKey = true; - } else if (keyValueType == KeyValueType.CONTRACT_ID) { - keyValue.contractId = supplyContract; - } else if (keyValueType == KeyValueType.ED25519) { - keyValue.ed25519 = key; - } else if (keyValueType == KeyValueType.SECP256K1) { - keyValue.ECDSA_secp256k1 = key; - } else if (keyValueType == KeyValueType.DELEGETABLE_CONTRACT_ID) { - keyValue.delegatableContractId = supplyContract; - } - } - - function getKeyValueType(KeyValueType keyValueType, address keyAddress) - internal - pure - returns (IHederaTokenService.KeyValue memory keyValue) - { - if (keyValueType == KeyValueType.CONTRACT_ID) { - keyValue.contractId = keyAddress; - } else if (keyValueType == KeyValueType.DELEGETABLE_CONTRACT_ID) { - keyValue.delegatableContractId = keyAddress; - } - } -} - -library Bits { - uint256 internal constant ONE = uint256(1); - - // Sets the bit at the given 'index' in 'self' to '1'. - // Returns the modified value. - function setBit(uint256 self, uint8 index) internal pure returns (uint256) { - return self | (ONE << index); - } -} \ No newline at end of file diff --git a/contracts/deploy-args.ts b/contracts/deploy-args.ts new file mode 100644 index 0000000..a7933cf --- /dev/null +++ b/contracts/deploy-args.ts @@ -0,0 +1,6 @@ +// Input the arguments for the constructor +const data = [ + "Hello, Hardhat!", // The example Greeter.sol file needs a string +]; +// Export the arguments to be picked up by the `hardhat.config.ts` deployment script +export { data }; diff --git a/contracts/deploy/deploy-zksync.ts b/contracts/deploy/deploy-zksync.ts new file mode 100644 index 0000000..2e14251 --- /dev/null +++ b/contracts/deploy/deploy-zksync.ts @@ -0,0 +1,51 @@ +// Note that the deployment scripts must be placed in the `deploy` folder for `hardhat deploy-zksync` +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import { Wallet } from "zksync-ethers"; +import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; + +// Colour codes for terminal prints +const RESET = "\x1b[0m"; +const GREEN = "\x1b[32m"; + +function delay(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +export default async function main(hre: HardhatRuntimeEnvironment) { + // Get the private key from the configured network + // This assumes that a private key is configured for the selected network + const accounts = hre.network.config.accounts; + if (!Array.isArray(accounts)) { + throw new Error( + `No private key configured for network ${hre.network.name}`, + ); + } + const PRIVATE_KEY = accounts[0]; + if (typeof PRIVATE_KEY !== "string") { + throw new Error( + `No private key configured for network ${hre.network.name}`, + ); + } + + const wallet = new Wallet(PRIVATE_KEY); + const deployer = new Deployer(hre, wallet); + + const constructorArgs = ["Hello, Hardhat!"]; + const artifact = await deployer.loadArtifact("Greeter"); + const contract = await deployer.deploy(artifact, constructorArgs); + + await contract.waitForDeployment(); + const contractAddress = await contract.getAddress(); + + console.log("Greeter deployed to: " + `${GREEN}${contractAddress}${RESET}\n`); + + console.log( + "Waiting 30 seconds before beginning the contract verification to allow the block explorer to index the contract...\n", + ); + await delay(30000); // Wait for 30 seconds before verifying the contract + + await hre.run("verify:verify", { + address: contractAddress, + constructorArguments: constructorArgs, + }); +} diff --git a/contracts/eslint.config.js b/contracts/eslint.config.js new file mode 100644 index 0000000..00c241d --- /dev/null +++ b/contracts/eslint.config.js @@ -0,0 +1,47 @@ +/* eslint-disable @typescript-eslint/no-require-imports */ +const eslint = require("@eslint/js"); +const tseslint = require("typescript-eslint"); +const eslintConfigPrettier = require("eslint-config-prettier"); +/* eslint-enable @typescript-eslint/no-require-imports */ + +module.exports = tseslint.config( + { + files: ["**/*.{js,ts}"], + extends: [ + eslint.configs.recommended, + ...tseslint.configs.recommended, + ...tseslint.configs.stylistic, + eslintConfigPrettier, + ], + plugins: { + "@typescript-eslint": tseslint.plugin, + }, + languageOptions: { + ecmaVersion: "latest", + parser: tseslint.parser, + parserOptions: { + project: true, + }, + }, + }, + { + ignores: [ + "node_modules/**", + "pnpm-lock.yaml", + "lib/**", + "cache/**", + "cache_hardhat/**", + "cache_hardhat-zk/**", + "artifacts/**", + "artifacts-zk/**", + "typechain-types/**", + "coverage/**", + "deployments/**", + "deployments-zk/**", + "deployments_tenderly/**", + "forge-artifacts/**", + "bin/**", + "out/**", + ], + }, +); diff --git a/contracts/foundry.toml b/contracts/foundry.toml new file mode 100644 index 0000000..34816ee --- /dev/null +++ b/contracts/foundry.toml @@ -0,0 +1,26 @@ +# Defaults for all profiles. +[profile.default] +src = "contracts/src" # Set the source directory. +test = "contracts/test" # Set the test directory. +out = "forge-artifacts" # Set the output directory for the artifacts. +libs = ["contracts/lib"] # Configure an array of library directories. +cache = true # Enable caching. +cache_path = "cache" # Set the path to the cache. +force = false # Do not ignore the cache. +solc_version = "0.8.28" # Set the Solidity compiler version. +evm_version = "paris" # Set the EVM target version. +optimizer = true # Enable the Solidity compiler optimiser. +optimizer_runs = 999_999 # Configure the number of optimiser runs. +via_ir = false # Prevent the compilation pipeline from running through the Yul intermediate representation. +verbosity = 3 # Set the verbosity level for the tests. +ffi = false # Enable the foreign function interface (ffi) cheatcode. +fs_permissions = [{ access = "read-write", path = "./" }] # Configure read-write access to the project root. +fuzz = { runs = 256, max_test_rejects = 65_536 } # Configure the number of fuzz runs and maximum number of combined inputs that may be rejected for the tests. +invariant = { runs = 256, depth = 15 } # Configure the number of runs and calls (executed in one run) for each invariant test group. + +# Default overrides for the CI runs. +[profile.ci] +force = true # Perform always a clean build. +verbosity = 4 # Increase the verbosity level for the tests. +fuzz = { runs = 10_000, max_test_rejects = 150_000 } # Increase the number of fuzz runs and maximum number of combined inputs that may be rejected for the tests. +invariant = { runs = 375, depth = 500 } # Increase the number of runs (while preserving the default depth) for each invariant test group. diff --git a/contracts/hardhat.config.ts b/contracts/hardhat.config.ts index 9560b83..c2fec94 100644 --- a/contracts/hardhat.config.ts +++ b/contracts/hardhat.config.ts @@ -1,15 +1,2279 @@ -// hardhat.config.ts -import { HardhatUserConfig } from "hardhat/config"; -import "@nomicfoundation/hardhat-toolbox"; +import { HardhatUserConfig, task, vars } from "hardhat/config"; -const config: HardhatUserConfig = { - solidity: "0.8.18", - paths: { - sources: "./contracts", - tests: "./test", - cache: "./cache", - artifacts: "./artifacts" +import "@nomicfoundation/hardhat-ethers"; +import "@nomicfoundation/hardhat-verify"; +import "@nomicfoundation/hardhat-ledger"; +import "@nomicfoundation/hardhat-foundry"; +import "@nomicfoundation/hardhat-chai-matchers"; +import "@nomicfoundation/hardhat-ignition-ethers"; +import "@typechain/hardhat"; + +import "xdeployer"; +import "@matterlabs/hardhat-zksync-solc"; +import "@matterlabs/hardhat-zksync-deploy"; +import "@matterlabs/hardhat-zksync-verify"; +import "@matterlabs/hardhat-zksync-ethers"; +// Uncomment if you want to use the Truffle Dashboard module +// You must also uncomment the subsequent `truffle` configuration in this file accordingly +// import "@truffle/dashboard-hardhat-plugin"; +import "hardhat-gas-reporter"; +import "hardhat-abi-exporter"; +import "solidity-coverage"; +import "hardhat-contract-sizer"; +// Uncomment if you want to use the Hardhat Tenderly module +// You must also uncomment the subsequent `tenderly` configuration in this file accordingly +// import "@tenderly/hardhat-tenderly"; + +const ethMainnetUrl = vars.get("ETH_MAINNET_URL", "https://rpc.ankr.com/eth"); +const accounts = [ + vars.get( + "PRIVATE_KEY", + // `keccak256("DEFAULT_VALUE")` + "0x0d1706281056b7de64efd2088195fa8224c39103f578c9b84f951721df3fa71c", + ), +]; +const ledgerAccounts = [ + vars.get( + "LEDGER_ACCOUNT", + // `bytes20(uint160(uint256(keccak256("DEFAULT_VALUE"))))` + "0x8195fa8224c39103f578c9b84f951721df3fa71c", + ), +]; + +task("accounts", "Prints the list of accounts", async (_, hre) => { + const accounts = await hre.ethers.getSigners(); + + for (const account of accounts) { + console.log(account.address); + } +}); + +task("evm", "Prints the configured EVM version", async (_, hre) => { + console.log(hre.config.solidity.compilers[0].settings.evmVersion); +}); + +task( + "balances", + "Prints the list of accounts and their balances", + async (_, hre) => { + const accounts = await hre.ethers.getSigners(); + + for (const account of accounts) { + console.log( + account.address + + " " + + (await hre.ethers.provider.getBalance(account.address)), + ); } + }, +); + +const config: HardhatUserConfig = { + paths: { + sources: "./contracts/src", + }, + solidity: { + // Only use Solidity default versions `>=0.8.25` for EVM networks that support the new `cancun` opcodes: + // https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/cancun.md + // Only use Solidity default versions `>=0.8.20` for EVM networks that support the opcode `PUSH0` + // Otherwise, use the versions `<=0.8.19` + version: "0.8.28", + settings: { + optimizer: { + enabled: true, + runs: 999_999, + }, + evmVersion: "paris", // Prevent using the `PUSH0` and `cancun` opcodes + }, + }, + zksolc: { + version: "1.5.10", + compilerSource: "binary", + settings: { + enableEraVMExtensions: false, + forceEVMLA: false, + optimizer: { + enabled: true, + mode: "3", + fallback_to_optimizing_for_size: false, + }, + }, + }, + // Uncomment if you want to use the Truffle Dashboard module + // truffle: { + // dashboardNetworkName: "truffleDashboard", // Truffle's default value is "truffleDashboard" + // dashboardNetworkConfig: { + // // Truffle's default value is 0 (i.e. no timeout), while Hardhat's default + // // value is 40000 (40 seconds) + // timeout: 0, + // }, + // }, + networks: { + hardhat: { + initialBaseFeePerGas: 0, + chainId: 31337, + hardfork: "cancun", + forking: { + url: vars.get("ETH_MAINNET_URL", ethMainnetUrl), + // The Hardhat network will by default fork from the latest mainnet block + // To pin the block number, specify it below + // You will need access to a node with archival data for this to work! + // blockNumber: 14743877, + // If you want to do some forking, set `enabled` to true + enabled: false, + }, + ledgerAccounts, + // zksync: true, // Enable ZKsync in the Hardhat local network + }, + localhost: { + url: "http://127.0.0.1:8545", + ledgerAccounts, + }, + tenderly: { + // Add your own Tenderly fork ID + url: `https://rpc.tenderly.co/fork/${vars.get("TENDERLY_FORK_ID", "")}`, + ledgerAccounts, + }, + devnet: { + // Add your own Tenderly DevNet ID + url: `https://rpc.vnet.tenderly.co/devnet/${vars.get( + "TENDERLY_DEVNET_ID", + "", + )}`, + accounts, + ledgerAccounts, + }, + goerli: { + chainId: 5, + url: vars.get( + "ETH_GOERLI_TESTNET_URL", + "https://rpc.ankr.com/eth_goerli", + ), + accounts, + ledgerAccounts, + }, + sepolia: { + chainId: 11155111, + url: vars.get("ETH_SEPOLIA_TESTNET_URL", "https://rpc.sepolia.org"), + accounts, + ledgerAccounts, + }, + holesky: { + chainId: 17000, + url: vars.get( + "ETH_HOLESKY_TESTNET_URL", + "https://holesky.rpc.thirdweb.com", + ), + accounts, + ledgerAccounts, + }, + ethMain: { + chainId: 1, + url: ethMainnetUrl, + accounts, + ledgerAccounts, + }, + bscTestnet: { + chainId: 97, + url: vars.get( + "BSC_TESTNET_URL", + "https://data-seed-prebsc-1-s1.binance.org:8545", + ), + accounts, + ledgerAccounts, + }, + bscMain: { + chainId: 56, + url: vars.get("BSC_MAINNET_URL", "https://bsc-dataseed1.binance.org"), + accounts, + ledgerAccounts, + }, + optimismTestnet: { + chainId: 420, + url: vars.get("OPTIMISM_TESTNET_URL", "https://goerli.optimism.io"), + accounts, + ledgerAccounts, + }, + optimismSepolia: { + chainId: 11155420, + url: vars.get("OPTIMISM_SEPOLIA_URL", "https://sepolia.optimism.io"), + accounts, + ledgerAccounts, + }, + optimismMain: { + chainId: 10, + url: vars.get("OPTIMISM_MAINNET_URL", "https://mainnet.optimism.io"), + accounts, + ledgerAccounts, + }, + arbitrumSepolia: { + chainId: 421614, + url: vars.get( + "ARBITRUM_SEPOLIA_URL", + "https://sepolia-rollup.arbitrum.io/rpc", + ), + accounts, + ledgerAccounts, + }, + arbitrumMain: { + chainId: 42161, + url: vars.get("ARBITRUM_MAINNET_URL", "https://arb1.arbitrum.io/rpc"), + accounts, + ledgerAccounts, + }, + arbitrumNova: { + chainId: 42170, + url: vars.get("ARBITRUM_NOVA_URL", "https://nova.arbitrum.io/rpc"), + accounts, + ledgerAccounts, + }, + amoy: { + chainId: 80002, + url: vars.get( + "POLYGON_TESTNET_URL", + "https://rpc-amoy.polygon.technology", + ), + accounts, + ledgerAccounts, + }, + polygonZkEVMTestnet: { + chainId: 2442, + url: vars.get( + "POLYGON_ZKEVM_TESTNET_URL", + "https://rpc.cardona.zkevm-rpc.com", + ), + accounts, + ledgerAccounts, + }, + polygon: { + chainId: 137, + url: vars.get("POLYGON_MAINNET_URL", "https://polygon-rpc.com"), + accounts, + ledgerAccounts, + }, + polygonZkEVMMain: { + chainId: 1101, + url: vars.get("POLYGON_ZKEVM_MAINNET_URL", "https://zkevm-rpc.com"), + accounts, + ledgerAccounts, + }, + hecoMain: { + chainId: 128, + url: vars.get("HECO_MAINNET_URL", "https://http-mainnet.hecochain.com"), + accounts, + ledgerAccounts, + }, + fantomTestnet: { + chainId: 4002, + url: vars.get("FANTOM_TESTNET_URL", "https://rpc.testnet.fantom.network"), + accounts, + ledgerAccounts, + }, + fantomMain: { + chainId: 250, + url: vars.get("FANTOM_MAINNET_URL", "https://rpc.ankr.com/fantom"), + accounts, + ledgerAccounts, + }, + fuji: { + chainId: 43113, + url: vars.get( + "AVALANCHE_TESTNET_URL", + "https://api.avax-test.network/ext/bc/C/rpc", + ), + accounts, + ledgerAccounts, + }, + avalanche: { + chainId: 43114, + url: vars.get( + "AVALANCHE_MAINNET_URL", + "https://api.avax.network/ext/bc/C/rpc", + ), + accounts, + ledgerAccounts, + }, + chiado: { + chainId: 10200, + url: vars.get("GNOSIS_TESTNET_URL", "https://rpc.chiadochain.net"), + accounts, + ledgerAccounts, + }, + gnosis: { + chainId: 100, + url: vars.get("GNOSIS_MAINNET_URL", "https://rpc.gnosischain.com"), + accounts, + ledgerAccounts, + }, + moonbaseAlpha: { + chainId: 1287, + url: vars.get( + "MOONBEAM_TESTNET_URL", + "https://rpc.api.moonbase.moonbeam.network", + ), + accounts, + ledgerAccounts, + }, + moonriver: { + chainId: 1285, + url: vars.get( + "MOONRIVER_MAINNET_URL", + "https://moonriver.public.blastapi.io", + ), + accounts, + ledgerAccounts, + }, + moonbeam: { + chainId: 1284, + url: vars.get( + "MOONBEAM_MAINNET_URL", + "https://moonbeam.public.blastapi.io", + ), + accounts, + ledgerAccounts, + }, + alfajores: { + chainId: 44787, + url: vars.get( + "CELO_TESTNET_URL", + "https://alfajores-forno.celo-testnet.org", + ), + accounts, + ledgerAccounts, + }, + celo: { + chainId: 42220, + url: vars.get("CELO_MAINNET_URL", "https://forno.celo.org"), + accounts, + ledgerAccounts, + }, + auroraTestnet: { + chainId: 1313161555, + url: vars.get("AURORA_TESTNET_URL", "https://testnet.aurora.dev"), + accounts, + ledgerAccounts, + }, + auroraMain: { + chainId: 1313161554, + url: vars.get("AURORA_MAINNET_URL", "https://mainnet.aurora.dev"), + accounts, + ledgerAccounts, + }, + harmonyTestnet: { + chainId: 1666700000, + url: vars.get("HARMONY_TESTNET_URL", "https://api.s0.b.hmny.io"), + accounts, + ledgerAccounts, + }, + harmonyMain: { + chainId: 1666600000, + url: vars.get("HARMONY_MAINNET_URL", "https://api.harmony.one"), + accounts, + ledgerAccounts, + }, + spark: { + chainId: 123, + url: vars.get("FUSE_TESTNET_URL", "https://rpc.fusespark.io"), + accounts, + ledgerAccounts, + }, + fuse: { + chainId: 122, + url: vars.get("FUSE_MAINNET_URL", "https://rpc.fuse.io"), + accounts, + ledgerAccounts, + }, + cronosTestnet: { + chainId: 338, + url: vars.get("CRONOS_TESTNET_URL", "https://evm-t3.cronos.org"), + accounts, + ledgerAccounts, + }, + cronosMain: { + chainId: 25, + url: vars.get("CRONOS_MAINNET_URL", "https://evm.cronos.org"), + accounts, + ledgerAccounts, + }, + evmosTestnet: { + chainId: 9000, + url: vars.get("EVMOS_TESTNET_URL", "https://evmos-testnet.lava.build"), + accounts, + ledgerAccounts, + }, + evmosMain: { + chainId: 9001, + url: vars.get("EVMOS_MAINNET_URL", "https://evmos.lava.build"), + accounts, + ledgerAccounts, + }, + bobaTestnet: { + chainId: 2888, + url: vars.get("BOBA_TESTNET_URL", "https://goerli.boba.network"), + accounts, + ledgerAccounts, + }, + bobaMain: { + chainId: 288, + url: vars.get("BOBA_MAINNET_URL", "https://replica.boba.network"), + accounts, + ledgerAccounts, + }, + cantoTestnet: { + chainId: 7701, + url: vars.get("CANTO_TESTNET_URL", "https://canto-testnet.plexnode.wtf"), + accounts, + ledgerAccounts, + }, + cantoMain: { + chainId: 7700, + url: vars.get("CANTO_MAINNET_URL", "https://canto.slingshot.finance"), + accounts, + ledgerAccounts, + }, + baseTestnet: { + chainId: 84531, + url: vars.get("BASE_TESTNET_URL", "https://goerli.base.org"), + accounts, + ledgerAccounts, + }, + baseSepolia: { + chainId: 84532, + url: vars.get("BASE_SEPOLIA_URL", "https://sepolia.base.org"), + accounts, + ledgerAccounts, + }, + baseMain: { + chainId: 8453, + url: vars.get("BASE_MAINNET_URL", "https://mainnet.base.org"), + accounts, + ledgerAccounts, + }, + zkSyncTestnet: { + chainId: 300, + url: vars.get("ZKSYNC_TESTNET_URL", "https://sepolia.era.zksync.dev"), + ethNetwork: "sepolia", + zksync: true, + verifyURL: + "https://explorer.sepolia.era.zksync.dev/contract_verification", + browserVerifyURL: "https://sepolia.explorer.zksync.io", + enableVerifyURL: true, + accounts, + ledgerAccounts, + }, + zkSyncMain: { + chainId: 324, + url: vars.get("ZKSYNC_MAINNET_URL", "https://mainnet.era.zksync.io"), + ethNetwork: "mainnet", + zksync: true, + verifyURL: + "https://zksync2-mainnet-explorer.zksync.io/contract_verification", + browserVerifyURL: "https://explorer.zksync.io", + enableVerifyURL: true, + accounts, + ledgerAccounts, + }, + mantleTestnet: { + chainId: 5003, + url: vars.get("MANTLE_TESTNET_URL", "https://rpc.sepolia.mantle.xyz"), + accounts, + ledgerAccounts, + }, + mantleMain: { + chainId: 5000, + url: vars.get("MANTLE_MAINNET_URL", "https://rpc.mantle.xyz"), + accounts, + ledgerAccounts, + }, + filecoinTestnet: { + chainId: 314159, + url: vars.get( + "FILECOIN_TESTNET_URL", + "https://rpc.ankr.com/filecoin_testnet", + ), + accounts, + ledgerAccounts, + }, + filecoinMain: { + chainId: 314, + url: vars.get("FILECOIN_MAINNET_URL", "https://rpc.ankr.com/filecoin"), + accounts, + ledgerAccounts, + }, + scrollTestnet: { + chainId: 534351, + url: vars.get("SCROLL_TESTNET_URL", "https://sepolia-rpc.scroll.io"), + accounts, + ledgerAccounts, + }, + scrollMain: { + chainId: 534352, + url: vars.get("SCROLL_MAINNET_URL", "https://rpc.scroll.io"), + accounts, + ledgerAccounts, + }, + lineaTestnet: { + chainId: 59141, + url: vars.get("LINEA_TESTNET_URL", "https://rpc.sepolia.linea.build"), + accounts, + ledgerAccounts, + }, + lineaMain: { + chainId: 59144, + url: vars.get("LINEA_MAINNET_URL", "https://rpc.linea.build"), + accounts, + ledgerAccounts, + }, + shimmerEVMTestnet: { + chainId: 1071, + url: vars.get( + "SHIMMEREVM_TESTNET_URL", + "https://json-rpc.evm.testnet.shimmer.network", + ), + accounts, + ledgerAccounts, + }, + zoraTestnet: { + chainId: 999999999, + url: vars.get("ZORA_TESTNET_URL", "https://sepolia.rpc.zora.energy"), + accounts, + ledgerAccounts, + }, + zoraMain: { + chainId: 7777777, + url: vars.get("ZORA_MAINNET_URL", "https://rpc.zora.energy"), + accounts, + ledgerAccounts, + }, + luksoTestnet: { + chainId: 4201, + url: vars.get("LUKSO_TESTNET_URL", "https://rpc.testnet.lukso.network"), + accounts, + ledgerAccounts, + }, + luksoMain: { + chainId: 42, + url: vars.get("LUKSO_MAINNET_URL", "https://rpc.lukso.gateway.fm"), + accounts, + ledgerAccounts, + }, + mantaTestnet: { + chainId: 3441006, + url: vars.get( + "MANTA_TESTNET_URL", + "https://pacific-rpc.sepolia-testnet.manta.network/http", + ), + accounts, + ledgerAccounts, + }, + mantaMain: { + chainId: 169, + url: vars.get( + "MANTA_MAINNET_URL", + "https://pacific-rpc.manta.network/http", + ), + accounts, + ledgerAccounts, + }, + shardeumTestnet: { + chainId: 8081, + url: vars.get("SHARDEUM_TESTNET_URL", "https://dapps.shardeum.org"), + accounts, + ledgerAccounts, + }, + artheraTestnet: { + chainId: 10243, + url: vars.get("ARTHERA_TESTNET_URL", "https://rpc-test.arthera.net"), + accounts, + ledgerAccounts, + }, + frameTestnet: { + chainId: 68840142, + url: vars.get("FRAME_TESTNET_URL", "https://rpc.testnet.frame.xyz/http"), + accounts, + ledgerAccounts, + }, + enduranceTestnet: { + chainId: 6480, + url: vars.get( + "ENDURANCE_TESTNET_URL", + "https://myrpctestnet.fusionist.io", + ), + accounts, + ledgerAccounts, + }, + openduranceTestnet: { + chainId: 6480001001, + url: vars.get( + "OPENDURANCE_TESTNET_URL", + "https://rpc-l2-testnet.fusionist.io", + ), + accounts, + ledgerAccounts, + }, + enduranceMain: { + chainId: 648, + url: vars.get( + "ENDURANCE_MAINNET_URL", + "https://rpc-endurance.fusionist.io", + ), + accounts, + ledgerAccounts, + }, + blastTestnet: { + chainId: 168587773, + url: vars.get("BLAST_TESTNET_URL", "https://sepolia.blast.io"), + accounts, + ledgerAccounts, + }, + blastMain: { + chainId: 81457, + url: vars.get("BLAST_MAINNET_URL", "https://rpc.blast.io"), + accounts, + ledgerAccounts, + }, + kromaTestnet: { + chainId: 2358, + url: vars.get("KROMA_TESTNET_URL", "https://api.sepolia.kroma.network"), + accounts, + ledgerAccounts, + }, + kromaMain: { + chainId: 255, + url: vars.get("KROMA_MAINNET_URL", "https://api.kroma.network"), + accounts, + ledgerAccounts, + }, + dosTestnet: { + chainId: 3939, + url: vars.get("DOS_TESTNET_URL", "https://test.doschain.com"), + accounts, + ledgerAccounts, + }, + dosMain: { + chainId: 7979, + url: vars.get("DOS_MAINNET_URL", "https://main.doschain.com"), + accounts, + ledgerAccounts, + }, + fraxtalTestnet: { + chainId: 2522, + url: vars.get("FRAXTAL_TESTNET_URL", "https://rpc.testnet.frax.com"), + accounts, + ledgerAccounts, + }, + fraxtalMain: { + chainId: 252, + url: vars.get("FRAXTAL_MAINNET_URL", "https://rpc.frax.com"), + accounts, + ledgerAccounts, + }, + kavaMain: { + chainId: 2222, + url: vars.get("KAVA_MAINNET_URL", "https://evm.kava-rpc.com"), + accounts, + ledgerAccounts, + }, + metisTestnet: { + chainId: 59902, + url: vars.get("METIS_TESTNET_URL", "https://sepolia.metisdevops.link"), + accounts, + ledgerAccounts, + }, + metisMain: { + chainId: 1088, + url: vars.get( + "METIS_MAINNET_URL", + "https://andromeda.metis.io/?owner=1088", + ), + accounts, + ledgerAccounts, + }, + modeTestnet: { + chainId: 919, + url: vars.get("MODE_TESTNET_URL", "https://sepolia.mode.network"), + accounts, + ledgerAccounts, + }, + modeMain: { + chainId: 34443, + url: vars.get("MODE_MAINNET_URL", "https://mainnet.mode.network"), + accounts, + ledgerAccounts, + }, + seiTestnet: { + chainId: 713715, + url: vars.get("SEI_TESTNET_URL", "https://evm-rpc-arctic-1.sei-apis.com"), + accounts, + ledgerAccounts, + }, + xlayerTestnet: { + chainId: 195, + url: vars.get("XLAYER_TESTNET_URL", "https://testrpc.xlayer.tech"), + accounts, + ledgerAccounts, + }, + xlayerMain: { + chainId: 196, + url: vars.get("XLAYER_MAINNET_URL", "https://rpc.xlayer.tech"), + accounts, + ledgerAccounts, + }, + bobTestnet: { + chainId: 111, + url: vars.get("BOB_TESTNET_URL", "https://testnet.rpc.gobob.xyz"), + accounts, + ledgerAccounts, + }, + bobMain: { + chainId: 60808, + url: vars.get("BOB_MAINNET_URL", "https://rpc.gobob.xyz"), + accounts, + ledgerAccounts, + }, + coreTestnet: { + chainId: 1115, + url: vars.get("CORE_TESTNET_URL", "https://rpc.test.btcs.network"), + accounts, + ledgerAccounts, + }, + coreMain: { + chainId: 1116, + url: vars.get("CORE_MAINNET_URL", "https://rpc.coredao.org"), + accounts, + ledgerAccounts, + }, + telosTestnet: { + chainId: 41, + url: vars.get("TELOS_TESTNET_URL", "https://testnet.telos.net/evm"), + accounts, + ledgerAccounts, + }, + telosMain: { + chainId: 40, + url: vars.get("TELOS_MAINNET_URL", "https://mainnet.telos.net/evm"), + accounts, + ledgerAccounts, + }, + rootstockTestnet: { + chainId: 31, + url: vars.get( + "ROOTSTOCK_TESTNET_URL", + "https://public-node.testnet.rsk.co", + ), + accounts, + ledgerAccounts, + }, + rootstockMain: { + chainId: 30, + url: vars.get("ROOTSTOCK_MAINNET_URL", "https://public-node.rsk.co"), + accounts, + ledgerAccounts, + }, + chilizTestnet: { + chainId: 88882, + url: vars.get("CHILIZ_TESTNET_URL", "https://spicy-rpc.chiliz.com"), + accounts, + ledgerAccounts, + }, + chilizMain: { + chainId: 88888, + url: vars.get("CHILIZ_MAINNET_URL", "https://rpc.ankr.com/chiliz"), + accounts, + ledgerAccounts, + }, + taraxaTestnet: { + chainId: 842, + url: vars.get("TARAXA_TESTNET_URL", "https://rpc.testnet.taraxa.io"), + accounts, + ledgerAccounts, + }, + taraxaMain: { + chainId: 841, + url: vars.get("TARAXA_MAINNET_URL", "https://rpc.mainnet.taraxa.io"), + accounts, + ledgerAccounts, + }, + gravityAlphaTestnet: { + chainId: 13505, + url: vars.get( + "GRAVITY_ALPHA_TESTNET_URL", + "https://rpc-sepolia.gravity.xyz", + ), + accounts, + ledgerAccounts, + }, + gravityAlphaMain: { + chainId: 1625, + url: vars.get("GRAVITY_ALPHA_MAINNET_URL", "https://rpc.gravity.xyz"), + accounts, + ledgerAccounts, + }, + taikoTestnet: { + chainId: 167009, + url: vars.get("TAIKO_TESTNET_URL", "https://rpc.hekla.taiko.xyz"), + accounts, + ledgerAccounts, + }, + taikoMain: { + chainId: 167000, + url: vars.get("TAIKO_MAINNET_URL", "https://rpc.taiko.xyz"), + accounts, + ledgerAccounts, + }, + zetaChainTestnet: { + chainId: 7001, + url: vars.get("ZETA_CHAIN_TESTNET_URL", "https://7001.rpc.thirdweb.com"), + accounts, + ledgerAccounts, + }, + zetaChainMain: { + chainId: 7000, + url: vars.get("ZETA_CHAIN_MAINNET_URL", "https://7000.rpc.thirdweb.com"), + accounts, + ledgerAccounts, + }, + "5ireChainTestnet": { + chainId: 997, + url: vars.get( + "5IRE_CHAIN_TESTNET_URL", + "https://rpc.testnet.5ire.network", + ), + accounts, + ledgerAccounts, + }, + "5ireChainMain": { + chainId: 995, + url: vars.get("5IRE_CHAIN_MAINNET_URL", "https://rpc.5ire.network"), + accounts, + ledgerAccounts, + }, + sapphireTestnet: { + chainId: 23295, + url: vars.get( + "SAPPHIRE_TESTNET_URL", + "https://testnet.sapphire.oasis.io", + ), + accounts, + ledgerAccounts, + }, + sapphireMain: { + chainId: 23294, + url: vars.get("SAPPHIRE_MAINNET_URL", "https://sapphire.oasis.io"), + accounts, + ledgerAccounts, + }, + worldChainTestnet: { + chainId: 4801, + url: vars.get( + "WORLD_CHAIN_TESTNET_URL", + "https://worldchain-sepolia.g.alchemy.com/public", + ), + accounts, + ledgerAccounts, + }, + worldChainMain: { + chainId: 480, + url: vars.get( + "WORLD_CHAIN_MAINNET_URL", + "https://worldchain-mainnet.g.alchemy.com/public", + ), + accounts, + ledgerAccounts, + }, + plumeTestnet: { + chainId: 98864, + url: vars.get("PLUME_TESTNET_URL", "https://test-rpc.plumenetwork.xyz"), + accounts, + ledgerAccounts, + }, + plumeMain: { + chainId: 98865, + url: vars.get("PLUME_MAINNET_URL", "https://rpc.plumenetwork.xyz"), + accounts, + ledgerAccounts, + }, + unichainTestnet: { + chainId: 1301, + url: vars.get("UNICHAIN_TESTNET_URL", " https://sepolia.unichain.org"), + accounts, + ledgerAccounts, + }, + xdcTestnet: { + chainId: 51, + url: vars.get("XDC_TESTNET_URL", "https://erpc.apothem.network"), + accounts, + ledgerAccounts, + }, + xdcMain: { + chainId: 50, + url: vars.get("XDC_MAINNET_URL", "https://rpc.xinfin.network"), + accounts, + ledgerAccounts, + }, + sxTestnet: { + chainId: 79479957, + url: vars.get( + "SX_TESTNET_URL", + "https://rpc.sx-rollup-testnet.t.raas.gelato.cloud", + ), + accounts, + ledgerAccounts, + }, + sxMain: { + chainId: 4162, + url: vars.get("SX_MAINNET_URL", "https://rpc.sx-rollup.gelato.digital"), + accounts, + ledgerAccounts, + }, + liskTestnet: { + chainId: 4202, + url: vars.get("LISK_TESTNET_URL", "https://rpc.sepolia-api.lisk.com"), + accounts, + ledgerAccounts, + }, + liskMain: { + chainId: 1135, + url: vars.get("LISK_MAINNET_URL", "https://rpc.api.lisk.com"), + accounts, + ledgerAccounts, + }, + metalL2Testnet: { + chainId: 1740, + url: vars.get("METALL2_TESTNET_URL", "https://testnet.rpc.metall2.com"), + accounts, + ledgerAccounts, + }, + metalL2Main: { + chainId: 1750, + url: vars.get("METALL2_MAINNET_URL", "https://rpc.metall2.com"), + accounts, + ledgerAccounts, + }, + superseedTestnet: { + chainId: 53302, + url: vars.get("SUPERSEED_TESTNET_URL", "https://sepolia.superseed.xyz"), + accounts, + ledgerAccounts, + }, + superseedMain: { + chainId: 5330, + url: vars.get("SUPERSEED_MAINNET_URL", "https://mainnet.superseed.xyz"), + accounts, + ledgerAccounts, + }, + storyTestnet: { + chainId: 1516, + url: vars.get("STORY_TESTNET_URL", "https://odyssey.storyrpc.io"), + accounts, + ledgerAccounts, + }, + sonicTestnet: { + chainId: 57054, + url: vars.get("SONIC_TESTNET_URL", "https://rpc.blaze.soniclabs.com"), + accounts, + ledgerAccounts, + }, + sonicMain: { + chainId: 146, + url: vars.get("SONIC_MAINNET_URL", "https://rpc.soniclabs.com"), + accounts, + ledgerAccounts, + }, + flowTestnet: { + chainId: 545, + url: vars.get("FLOW_TESTNET_URL", "https://testnet.evm.nodes.onflow.org"), + accounts, + ledgerAccounts, + }, + flowMain: { + chainId: 747, + url: vars.get("FLOW_MAINNET_URL", "https://mainnet.evm.nodes.onflow.org"), + accounts, + ledgerAccounts, + }, + inkTestnet: { + chainId: 763373, + url: vars.get( + "INK_TESTNET_URL", + "https://rpc-gel-sepolia.inkonchain.com", + ), + accounts, + ledgerAccounts, + }, + inkMain: { + chainId: 57073, + url: vars.get("INK_MAINNET_URL", "https://rpc-gel.inkonchain.com"), + accounts, + ledgerAccounts, + }, + morphTestnet: { + chainId: 2810, + url: vars.get( + "MORPH_TESTNET_URL", + "https://rpc-quicknode-holesky.morphl2.io", + ), + accounts, + ledgerAccounts, + }, + morphMain: { + chainId: 2818, + url: vars.get("MORPH_MAINNET_URL", "https://rpc-quicknode.morphl2.io"), + accounts, + ledgerAccounts, + }, + shapeTestnet: { + chainId: 11011, + url: vars.get("SHAPE_TESTNET_URL", "https://sepolia.shape.network"), + accounts, + ledgerAccounts, + }, + shapeMain: { + chainId: 360, + url: vars.get("SHAPE_MAINNET_URL", "https://mainnet.shape.network"), + accounts, + ledgerAccounts, + }, + etherlinkTestnet: { + chainId: 128123, + url: vars.get( + "ETHERLINK_TESTNET_URL", + "https://node.ghostnet.etherlink.com", + ), + accounts, + ledgerAccounts, + }, + etherlinkMain: { + chainId: 42793, + url: vars.get( + "ETHERLINK_MAINNET_URL", + "https://node.mainnet.etherlink.com", + ), + accounts, + ledgerAccounts, + }, + soneiumTestnet: { + chainId: 1946, + url: vars.get("SONEIUM_TESTNET_URL", "https://rpc.minato.soneium.org"), + accounts, + ledgerAccounts, + }, + soneiumMain: { + chainId: 1868, + url: vars.get("SONEIUM_MAINNET_URL", "https://rpc.soneium.org"), + accounts, + ledgerAccounts, + }, + swellTestnet: { + chainId: 1924, + url: vars.get( + "SWELL_TESTNET_URL", + "https://swell-testnet.alt.technology", + ), + accounts, + ledgerAccounts, + }, + swellMain: { + chainId: 1923, + url: vars.get( + "SWELL_MAINNET_URL", + "https://swell-mainnet.alt.technology", + ), + accounts, + ledgerAccounts, + }, + }, + xdeploy: { + // Change this name to the name of your main contract + // Does not necessarily have to match the contract file name + contract: "Greeter", + + // Change to `undefined` if your constructor does not have any input arguments + constructorArgsPath: "./deploy-args.ts", + + // The salt must be the same for each EVM chain for which you want to have a single contract address + // Change the salt if you are doing a re-deployment with the same codebase + salt: vars.get( + "SALT", + // `keccak256("SALT")` + "0x087ee6a43229fddc3e140062b42bcff0c6d1c5a3bba8123976a59688e7024c25", + ), + + // This is your wallet's private key + signer: accounts[0], + + // Use the network names specified here: https://github.com/pcaversaccio/xdeployer#configuration + // Use `localhost` or `hardhat` for local testing + networks: ["hardhat", "sepolia", "optimismSepolia"], + + // Use the matching env URL with your chosen RPC in the `.env` file + rpcUrls: [ + "hardhat", + vars.get("ETH_SEPOLIA_TESTNET_URL", "https://rpc.sepolia.org"), + vars.get("OPTIMISM_SEPOLIA_URL", "https://sepolia.optimism.io"), + ], + + // Maximum limit is 15 * 10 ** 6 or 15,000,000. If the deployments are failing, try increasing this number + // However, keep in mind that this costs money in a production environment! + gasLimit: 1.2 * 10 ** 6, + }, + contractSizer: { + alphaSort: true, + runOnCompile: true, + disambiguatePaths: false, + strict: true, + only: [], + except: ["CreateX", "Create2DeployerLocal"], + }, + gasReporter: { + enabled: vars.has("REPORT_GAS") ? true : false, + currency: "USD", + }, + abiExporter: { + path: "./abis", + runOnCompile: true, + clear: true, + flat: false, + only: [], + spacing: 2, + pretty: true, + }, + sourcify: { + // Enable Sourcify verification by default + enabled: true, + apiUrl: "https://sourcify.dev/server", + browserUrl: "https://repo.sourcify.dev", + }, + blockscout: { + // Disable Blockscout verification by default + // You can use the `customChains` property as in the `etherscan` configuration to add further chains if desired + enabled: false, + }, + etherscan: { + // Add your own API key by getting an account at etherscan (https://etherscan.io), snowtrace (https://snowtrace.io) etc. + // This is used for verification purposes when you want to `npx hardhat verify` your contract using Hardhat + // The same API key works usually for both testnet and mainnet + apiKey: { + // For Ethereum testnets & mainnet + mainnet: vars.get("ETHERSCAN_API_KEY", ""), + goerli: vars.get("ETHERSCAN_API_KEY", ""), + sepolia: vars.get("ETHERSCAN_API_KEY", ""), + holesky: vars.get("ETHERSCAN_API_KEY", ""), + // For BSC testnet & mainnet + bsc: vars.get("BSC_API_KEY", ""), + bscTestnet: vars.get("BSC_API_KEY", ""), + // For Heco mainnet + heco: vars.get("HECO_API_KEY", ""), + // For Fantom testnet & mainnet + opera: vars.get("FANTOM_API_KEY", ""), + ftmTestnet: vars.get("FANTOM_API_KEY", ""), + // For Optimism testnets & mainnet + optimisticEthereum: vars.get("OPTIMISM_API_KEY", ""), + optimisticGoerli: vars.get("OPTIMISM_API_KEY", ""), + optimisticSepolia: vars.get("OPTIMISM_API_KEY", ""), + // For Polygon testnets & mainnets + polygon: vars.get("POLYGON_API_KEY", ""), + polygonZkEVM: vars.get("POLYGON_ZKEVM_API_KEY", ""), + polygonAmoy: vars.get("POLYGON_API_KEY", ""), + polygonZkEVMTestnet: vars.get("POLYGON_ZKEVM_API_KEY", ""), + // For Arbitrum testnet & mainnets + arbitrumOne: vars.get("ARBITRUM_API_KEY", ""), + arbitrumNova: vars.get("ARBITRUM_API_KEY", ""), + arbitrumSepolia: vars.get("ARBITRUM_API_KEY", ""), + // For Avalanche testnet & mainnet + avalanche: vars.get("AVALANCHE_API_KEY", ""), + avalancheFujiTestnet: vars.get("AVALANCHE_API_KEY", ""), + // For Moonbeam testnet & mainnets + moonbeam: vars.get("MOONBEAM_API_KEY", ""), + moonriver: vars.get("MOONBEAM_API_KEY", ""), + moonbaseAlpha: vars.get("MOONBEAM_API_KEY", ""), + // For Celo testnet & mainnet + celo: vars.get("CELO_API_KEY", ""), + alfajores: vars.get("CELO_API_KEY", ""), + // For Harmony testnet & mainnet + harmony: vars.get("HARMONY_API_KEY", ""), + harmonyTestnet: vars.get("HARMONY_API_KEY", ""), + // For Aurora testnet & mainnet + aurora: vars.get("AURORA_API_KEY", ""), + auroraTestnet: vars.get("AURORA_API_KEY", ""), + // For Cronos testnet & mainnet + cronos: vars.get("CRONOS_API_KEY", ""), + cronosTestnet: vars.get("CRONOS_API_KEY", ""), + // For Gnosis/xDai testnet & mainnets + gnosis: vars.get("GNOSIS_API_KEY", ""), + xdai: vars.get("GNOSIS_API_KEY", ""), + chiado: vars.get("GNOSIS_API_KEY", ""), + // For Fuse testnet & mainnet + fuse: vars.get("FUSE_API_KEY", ""), + spark: vars.get("FUSE_API_KEY", ""), + // For Evmos testnet & mainnet + evmos: vars.get("EVMOS_API_KEY", ""), + evmosTestnet: vars.get("EVMOS_API_KEY", ""), + // For Boba network testnet & mainnet + boba: vars.get("BOBA_API_KEY", ""), + bobaTestnet: vars.get("BOBA_API_KEY", ""), + // For Canto testnet & mainnet + canto: vars.get("CANTO_API_KEY", ""), + cantoTestnet: vars.get("CANTO_API_KEY", ""), + // For Base testnets & mainnet + base: vars.get("BASE_API_KEY", ""), + baseTestnet: vars.get("BASE_API_KEY", ""), + baseSepolia: vars.get("BASE_API_KEY", ""), + // For Mantle testnet & mainnet + mantle: vars.get("MANTLE_API_KEY", ""), + mantleTestnet: vars.get("MANTLE_API_KEY", ""), + // For Filecoin testnet & mainnet + filecoin: vars.get("FILECOIN_API_KEY", ""), + filecoinTestnet: vars.get("FILECOIN_API_KEY", ""), + // For Scroll testnet & mainnet + scroll: vars.get("SCROLL_API_KEY", ""), + scrollTestnet: vars.get("SCROLL_API_KEY", ""), + // For Linea testnet & mainnet + linea: vars.get("LINEA_API_KEY", ""), + lineaTestnet: vars.get("LINEA_API_KEY", ""), + // For ShimmerEVM testnet + shimmerEVMTestnet: vars.get("SHIMMEREVM_API_KEY", ""), + // For Zora testnet & mainnet + zora: vars.get("ZORA_API_KEY", ""), + zoraTestnet: vars.get("ZORA_API_KEY", ""), + // For Lukso testnet & mainnet + lukso: vars.get("LUKSO_API_KEY", ""), + luksoTestnet: vars.get("LUKSO_API_KEY", ""), + // For Manta testnet & mainnet + manta: vars.get("MANTA_API_KEY", ""), + mantaTestnet: vars.get("MANTA_API_KEY", ""), + // For Arthera testnet + artheraTestnet: vars.get("ARTHERA_API_KEY", ""), + // For Endurance testnets & mainnet + endurance: vars.get("ENDURANCE_API_KEY", ""), + enduranceTestnet: vars.get("ENDURANCE_API_KEY", ""), + openduranceTestnet: vars.get("OPENDURANCE_API_KEY", ""), + // For Blast testnet & mainnet + blast: vars.get("BLAST_API_KEY", ""), + blastTestnet: vars.get("BLAST_API_KEY", ""), + // For Kroma testnet & mainnet + kroma: vars.get("KROMA_API_KEY", ""), + kromaTestnet: vars.get("KROMA_API_KEY", ""), + // For DOS Chain testnet & mainnet + dos: vars.get("DOS_API_KEY", ""), + dosTestnet: vars.get("DOS_API_KEY", ""), + // For Fraxtal testnet & mainnet + fraxtal: vars.get("FRAXTAL_API_KEY", ""), + fraxtalTestnet: vars.get("FRAXTAL_API_KEY", ""), + // For Kava mainnet + kava: vars.get("KAVA_API_KEY", ""), + // For Metis testnet & mainnet + metis: vars.get("METIS_API_KEY", ""), + metisTestnet: vars.get("METIS_API_KEY", ""), + // For Mode testnet & mainnet + mode: vars.get("MODE_API_KEY", ""), + modeTestnet: vars.get("MODE_API_KEY", ""), + // For X Layer testnet & mainnet + xlayer: vars.get("OKLINK_API_KEY", ""), + xlayerTestnet: vars.get("OKLINK_API_KEY", ""), + // For BOB testnet & mainnet + bob: vars.get("BOB_API_KEY", ""), + bobTestnet: vars.get("BOB_API_KEY", ""), + // For Core testnet & mainnet + core: vars.get("CORE_MAINNET_API_KEY", ""), + coreTestnet: vars.get("CORE_TESTNET_API_KEY", ""), + // For Telos testnet & mainnet + telos: vars.get("TELOS_API_KEY", ""), + telosTestnet: vars.get("TELOS_API_KEY", ""), + // For Rootstock testnet & mainnet + rootstock: vars.get("ROOTSTOCK_API_KEY", ""), + rootstockTestnet: vars.get("ROOTSTOCK_API_KEY", ""), + // For Chiliz testnet & mainnet + chiliz: vars.get("CHILIZ_API_KEY", ""), + chilizTestnet: vars.get("CHILIZ_API_KEY", ""), + // For Gravity Alpha testnet & mainnet + gravityAlpha: vars.get("GRAVITY_ALPHA_API_KEY", ""), + gravityAlphaTestnet: vars.get("GRAVITY_ALPHA_API_KEY", ""), + // For Taiko testnet & mainnet + taiko: vars.get("TAIKO_API_KEY", ""), + taikoTestnet: vars.get("TAIKO_API_KEY", ""), + // For ZetaChain testnet & mainnet + zetaChain: vars.get("ZETA_CHAIN_API_KEY", ""), + zetaChainTestnet: vars.get("ZETA_CHAIN_API_KEY", ""), + // For 5ireChain testnet & mainnet + "5ireChain": vars.get("5IRE_CHAIN_API_KEY", ""), + "5ireChainTestnet": vars.get("5IRE_CHAIN_API_KEY", ""), + // For Oasis Sapphire testnet & mainnet + sapphire: vars.get("SAPPHIRE_API_KEY", ""), + sapphireTestnet: vars.get("SAPPHIRE_API_KEY", ""), + // For World Chain testnet & mainnet + worldChain: vars.get("WORLD_CHAIN_API_KEY", ""), + worldChainTestnet: vars.get("WORLD_CHAIN_API_KEY", ""), + // For Plume testnet & mainnet + plume: vars.get("PLUME_API_KEY", ""), + plumeTestnet: vars.get("PLUME_API_KEY", ""), + // For Unichain testnet + unichainTestnet: vars.get("UNICHAIN_API_KEY", ""), + // For XDC testnet & mainnet + xdc: vars.get("XDC_API_KEY", ""), + xdcTestnet: vars.get("XDC_API_KEY", ""), + // For SX testnet & mainnet + sx: vars.get("SX_API_KEY", ""), + sxTestnet: vars.get("SX_API_KEY", ""), + // For ZKsync testnet & mainnet + zkSync: vars.get("ZKSYNC_API_KEY", ""), + zkSyncTestnet: vars.get("ZKSYNC_API_KEY", ""), + // For Lisk testnet & mainnet + lisk: vars.get("LISK_API_KEY", ""), + liskTestnet: vars.get("LISK_API_KEY", ""), + // For Metal L2 testnet & mainnet + metalL2: vars.get("METALL2_API_KEY", ""), + metalL2Testnet: vars.get("METALL2_API_KEY", ""), + // For Superseed testnet & mainnet + superseed: vars.get("SUPERSEED_API_KEY", ""), + superseedTestnet: vars.get("SUPERSEED_API_KEY", ""), + // For Story testnet + storyTestnet: vars.get("STORY_API_KEY", ""), + // For Sonic testnet & mainnet + sonic: vars.get("SONIC_API_KEY", ""), + sonicTestnet: vars.get("SONIC_API_KEY", ""), + // For EVM on Flow testnet & mainnet + flow: vars.get("FLOW_API_KEY", ""), + flowTestnet: vars.get("FLOW_API_KEY", ""), + // For Ink testnet & mainnet + ink: vars.get("INK_API_KEY", ""), + inkTestnet: vars.get("INK_API_KEY", ""), + // For Morph testnet & mainnet + morph: vars.get("MORPH_API_KEY", ""), + morphTestnet: vars.get("MORPH_API_KEY", ""), + // For Shape testnet & mainnet + shape: vars.get("SHAPE_API_KEY", ""), + shapeTestnet: vars.get("SHAPE_API_KEY", ""), + // For Etherlink testnet & mainnet + etherlink: vars.get("ETHERLINK_API_KEY", ""), + etherlinkTestnet: vars.get("ETHERLINK_API_KEY", ""), + // For Soneium testnet & mainnet + soneium: vars.get("SONEIUM_API_KEY", ""), + soneiumTestnet: vars.get("SONEIUM_API_KEY", ""), + // For Swellchain testnet & mainnet + swell: vars.get("SWELL_API_KEY", ""), + swellTestnet: vars.get("SWELL_API_KEY", ""), + }, + customChains: [ + { + network: "holesky", + chainId: 17000, + urls: { + apiURL: "https://api-holesky.etherscan.io/api", + browserURL: "https://holesky.etherscan.io", + }, + }, + { + network: "optimisticSepolia", + chainId: 11155420, + urls: { + apiURL: "https://api-sepolia-optimistic.etherscan.io/api", + browserURL: "https://sepolia-optimism.etherscan.io", + }, + }, + { + network: "chiado", + chainId: 10200, + urls: { + apiURL: "https://gnosis-chiado.blockscout.com/api", + browserURL: "https://gnosis-chiado.blockscout.com", + }, + }, + { + network: "celo", + chainId: 42220, + urls: { + apiURL: "https://api.celoscan.io/api", + browserURL: "https://celoscan.io", + }, + }, + { + network: "alfajores", + chainId: 44787, + urls: { + apiURL: "https://api-alfajores.celoscan.io/api", + browserURL: "https://alfajores.celoscan.io", + }, + }, + { + network: "cronos", + chainId: 25, + urls: { + apiURL: "https://api.cronoscan.com/api", + browserURL: "https://cronoscan.com", + }, + }, + { + network: "cronosTestnet", + chainId: 338, + urls: { + apiURL: "https://cronos.org/explorer/testnet3/api", + browserURL: "https://cronos.org/explorer/testnet3", + }, + }, + { + network: "fuse", + chainId: 122, + urls: { + apiURL: "https://explorer.fuse.io/api", + browserURL: "https://explorer.fuse.io", + }, + }, + { + network: "spark", + chainId: 123, + urls: { + apiURL: "https://explorer.fusespark.io/api", + browserURL: "https://explorer.fusespark.io", + }, + }, + { + network: "evmos", + chainId: 9001, + urls: { + apiURL: "https://api.verify.mintscan.io/evm/api/0x2329", + browserURL: "https://www.mintscan.io/evmos", + }, + }, + { + network: "evmosTestnet", + chainId: 9000, + urls: { + apiURL: "https://api.verify.mintscan.io/evm/api/0x2328", + browserURL: "https://www.mintscan.io/evmos-testnet", + }, + }, + { + network: "boba", + chainId: 288, + urls: { + apiURL: + "https://api.routescan.io/v2/network/mainnet/evm/288/etherscan", + browserURL: "https://bobascan.com", + }, + }, + { + network: "bobaTestnet", + chainId: 2888, + urls: { + apiURL: + "https://api.routescan.io/v2/network/testnet/evm/2888/etherscan", + browserURL: "https://testnet.bobascan.com", + }, + }, + { + network: "arbitrumNova", + chainId: 42170, + urls: { + apiURL: "https://api-nova.arbiscan.io/api", + browserURL: "https://nova.arbiscan.io", + }, + }, + { + network: "arbitrumSepolia", + chainId: 421614, + urls: { + apiURL: "https://api-sepolia.arbiscan.io/api", + browserURL: "https://sepolia.arbiscan.io", + }, + }, + { + network: "canto", + chainId: 7700, + urls: { + apiURL: "https://tuber.build/api", + browserURL: "https://tuber.build", + }, + }, + { + network: "cantoTestnet", + chainId: 7701, + urls: { + apiURL: "https://testnet.tuber.build/api", + browserURL: "https://testnet.tuber.build", + }, + }, + { + network: "base", + chainId: 8453, + urls: { + apiURL: "https://api.basescan.org/api", + browserURL: "https://basescan.org", + }, + }, + { + network: "baseTestnet", + chainId: 84531, + urls: { + apiURL: "https://api-goerli.basescan.org/api", + browserURL: "https://goerli.basescan.org", + }, + }, + { + network: "baseSepolia", + chainId: 84532, + urls: { + apiURL: "https://api-sepolia.basescan.org/api", + browserURL: "https://sepolia.basescan.org", + }, + }, + { + network: "mantle", + chainId: 5000, + urls: { + apiURL: "https://api.mantlescan.xyz/api", + browserURL: "https://mantlescan.xyz", + }, + }, + { + network: "mantleTestnet", + chainId: 5003, + urls: { + apiURL: "https://api-sepolia.mantlescan.xyz/api", + browserURL: "https://sepolia.mantlescan.xyz", + }, + }, + { + network: "filecoin", + chainId: 314, + urls: { + apiURL: "https://filfox.info/api/v1/tools/verifyContract", + browserURL: "https://filfox.info/en", + }, + }, + { + network: "filecoinTestnet", + chainId: 314159, + urls: { + apiURL: "https://calibration.filfox.info/api/v1/tools/verifyContract", + browserURL: "https://calibration.filfox.info/en", + }, + }, + { + network: "scroll", + chainId: 534352, + urls: { + apiURL: "https://api.scrollscan.com/api", + browserURL: "https://scrollscan.com", + }, + }, + { + network: "scrollTestnet", + chainId: 534351, + urls: { + apiURL: "https://api-sepolia.scrollscan.com/api", + browserURL: "https://sepolia.scrollscan.com", + }, + }, + { + network: "polygonZkEVM", + chainId: 1101, + urls: { + apiURL: "https://api-zkevm.polygonscan.com/api", + browserURL: "https://zkevm.polygonscan.com", + }, + }, + { + network: "polygonAmoy", + chainId: 80002, + urls: { + apiURL: "https://api-amoy.polygonscan.com/api", + browserURL: "https://amoy.polygonscan.com", + }, + }, + { + network: "polygonZkEVMTestnet", + chainId: 2442, + urls: { + apiURL: "https://api-cardona-zkevm.polygonscan.com/api", + browserURL: "https://cardona-zkevm.polygonscan.com", + }, + }, + { + network: "linea", + chainId: 59144, + urls: { + apiURL: "https://api.lineascan.build/api", + browserURL: "https://lineascan.build", + }, + }, + { + network: "lineaTestnet", + chainId: 59141, + urls: { + apiURL: "https://api-sepolia.lineascan.build/api", + browserURL: "https://sepolia.lineascan.build", + }, + }, + { + network: "shimmerEVMTestnet", + chainId: 1071, + urls: { + apiURL: "https://explorer.evm.testnet.shimmer.network/api", + browserURL: "https://explorer.evm.testnet.shimmer.network", + }, + }, + { + network: "zora", + chainId: 7777777, + urls: { + apiURL: "https://explorer.zora.energy/api", + browserURL: "https://explorer.zora.energy", + }, + }, + { + network: "zoraTestnet", + chainId: 999999999, + urls: { + apiURL: "https://sepolia.explorer.zora.energy/api", + browserURL: "https://sepolia.explorer.zora.energy", + }, + }, + { + network: "lukso", + chainId: 42, + urls: { + apiURL: "https://explorer.execution.mainnet.lukso.network/api", + browserURL: "https://explorer.execution.mainnet.lukso.network", + }, + }, + { + network: "luksoTestnet", + chainId: 4201, + urls: { + apiURL: "https://explorer.execution.testnet.lukso.network/api", + browserURL: "https://explorer.execution.testnet.lukso.network", + }, + }, + { + network: "manta", + chainId: 169, + urls: { + apiURL: "https://pacific-explorer.manta.network/api", + browserURL: "https://pacific-explorer.manta.network", + }, + }, + { + network: "mantaTestnet", + chainId: 3441006, + urls: { + apiURL: "https://pacific-explorer.sepolia-testnet.manta.network/api", + browserURL: "https://pacific-explorer.sepolia-testnet.manta.network", + }, + }, + { + network: "artheraTestnet", + chainId: 10243, + urls: { + apiURL: "https://explorer-test.arthera.net/api", + browserURL: "https://explorer-test.arthera.net", + }, + }, + { + network: "endurance", + chainId: 648, + urls: { + apiURL: "https://explorer-endurance.fusionist.io/api", + browserURL: "https://explorer-endurance.fusionist.io", + }, + }, + { + network: "enduranceTestnet", + chainId: 6480, + urls: { + apiURL: "https://myexplorertestnet.fusionist.io/api", + browserURL: "https://myexplorertestnet.fusionist.io", + }, + }, + { + network: "openduranceTestnet", + chainId: 6480001001, + urls: { + apiURL: "https://explorer-l2-testnet.fusionist.io/api", + browserURL: "https://explorer-l2-testnet.fusionist.io", + }, + }, + { + network: "blast", + chainId: 81457, + urls: { + apiURL: "https://api.blastscan.io/api", + browserURL: "https://blastscan.io", + }, + }, + { + network: "blastTestnet", + chainId: 168587773, + urls: { + apiURL: "https://api-sepolia.blastscan.io/api", + browserURL: "https://sepolia.blastscan.io", + }, + }, + { + network: "kroma", + chainId: 255, + urls: { + apiURL: "https://api.kromascan.com/api", + browserURL: "https://kromascan.com", + }, + }, + { + network: "kromaTestnet", + chainId: 2358, + urls: { + apiURL: "https://api-sepolia.kromascan.com", + browserURL: "https://sepolia.kromascan.com", + }, + }, + { + network: "dos", + chainId: 7979, + urls: { + apiURL: "https://doscan.io/api", + browserURL: "https://doscan.io", + }, + }, + { + network: "dosTestnet", + chainId: 3939, + urls: { + apiURL: "https://test.doscan.io/api", + browserURL: "https://test.doscan.io", + }, + }, + { + network: "fraxtal", + chainId: 252, + urls: { + apiURL: "https://api.fraxscan.com/api", + browserURL: "https://fraxscan.com", + }, + }, + { + network: "fraxtalTestnet", + chainId: 2522, + urls: { + apiURL: "https://api-holesky.fraxscan.com/api", + browserURL: "https://holesky.fraxscan.com", + }, + }, + { + network: "kava", + chainId: 2222, + urls: { + apiURL: "https://kavascan.com/api", + browserURL: "https://kavascan.com", + }, + }, + { + network: "metis", + chainId: 1088, + urls: { + apiURL: "https://andromeda-explorer.metis.io/api", + browserURL: "https://andromeda-explorer.metis.io", + }, + }, + { + network: "metisTestnet", + chainId: 59902, + urls: { + apiURL: "https://sepolia-explorer.metisdevops.link/api", + browserURL: "https://sepolia-explorer.metisdevops.link", + }, + }, + { + network: "mode", + chainId: 34443, + urls: { + apiURL: "https://explorer.mode.network/api", + browserURL: "https://explorer.mode.network", + }, + }, + { + network: "modeTestnet", + chainId: 919, + urls: { + apiURL: "https://sepolia.explorer.mode.network/api", + browserURL: "https://sepolia.explorer.mode.network", + }, + }, + { + network: "xlayer", + chainId: 196, + urls: { + apiURL: + "https://www.oklink.com/api/v5/explorer/contract/verify-source-code-plugin/XLAYER", + browserURL: "https://www.oklink.com/xlayer", + }, + }, + { + network: "xlayerTestnet", + chainId: 195, + urls: { + apiURL: + "https://www.oklink.com/api/v5/explorer/contract/verify-source-code-plugin/XLAYER_TESTNET", + browserURL: "https://www.oklink.com/xlayer-test", + }, + }, + { + network: "bob", + chainId: 60808, + urls: { + apiURL: "https://explorer.gobob.xyz/api", + browserURL: "https://explorer.gobob.xyz", + }, + }, + { + network: "bobTestnet", + chainId: 111, + urls: { + apiURL: "https://testnet-explorer.gobob.xyz/api", + browserURL: "https://testnet-explorer.gobob.xyz", + }, + }, + { + network: "core", + chainId: 1116, + urls: { + apiURL: "https://openapi.coredao.org/api", + browserURL: "https://scan.coredao.org", + }, + }, + { + network: "coreTestnet", + chainId: 1115, + urls: { + apiURL: "https://api.test.btcs.network/api", + browserURL: "https://scan.test.btcs.network", + }, + }, + { + network: "telos", + chainId: 40, + urls: { + apiURL: "https://api.teloscan.io/api", + browserURL: "https://www.teloscan.io", + }, + }, + { + network: "telosTestnet", + chainId: 41, + urls: { + apiURL: "https://api.testnet.teloscan.io/api", + browserURL: "https://testnet.teloscan.io", + }, + }, + { + network: "rootstock", + chainId: 30, + urls: { + apiURL: "https://rootstock.blockscout.com/api", + browserURL: "https://rootstock.blockscout.com", + }, + }, + { + network: "rootstockTestnet", + chainId: 31, + urls: { + apiURL: "https://rootstock-testnet.blockscout.com/api", + browserURL: "https://rootstock-testnet.blockscout.com", + }, + }, + { + network: "chiliz", + chainId: 88888, + urls: { + apiURL: + "https://api.routescan.io/v2/network/mainnet/evm/88888/etherscan/api", + browserURL: "https://chiliscan.com", + }, + }, + { + network: "chilizTestnet", + chainId: 88882, + urls: { + apiURL: + "https://api.routescan.io/v2/network/testnet/evm/88882/etherscan/api", + browserURL: "https://testnet.chiliscan.com", + }, + }, + { + network: "harmony", + chainId: 1666600000, + urls: { + apiURL: "https://explorer.harmony.one/api", + browserURL: "https://explorer.harmony.one", + }, + }, + { + network: "harmonyTestnet", + chainId: 1666700000, + urls: { + apiURL: "https://explorer.testnet.harmony.one/api", + browserURL: "https://explorer.testnet.harmony.one", + }, + }, + { + network: "gravityAlpha", + chainId: 1625, + urls: { + apiURL: "https://explorer.gravity.xyz/api", + browserURL: "https://explorer.gravity.xyz", + }, + }, + { + network: "gravityAlphaTestnet", + chainId: 13505, + urls: { + apiURL: "https://explorer-sepolia.gravity.xyz/api", + browserURL: "https://explorer-sepolia.gravity.xyz", + }, + }, + { + network: "taiko", + chainId: 167000, + urls: { + apiURL: "https://api.taikoscan.io/api", + browserURL: "https://taikoscan.io", + }, + }, + { + network: "taikoTestnet", + chainId: 167009, + urls: { + apiURL: "https://api-hekla.taikoscan.io/api", + browserURL: "https://hekla.taikoscan.io", + }, + }, + { + network: "zetaChain", + chainId: 7000, + urls: { + apiURL: "https://zetachain.blockscout.com/api", + browserURL: "https://zetachain.blockscout.com", + }, + }, + { + network: "zetaChainTestnet", + chainId: 7001, + urls: { + apiURL: "https://zetachain-athens-3.blockscout.com/api", + browserURL: "https://zetachain-athens-3.blockscout.com", + }, + }, + { + network: "5ireChain", + chainId: 995, + urls: { + apiURL: "https://5irescan.io/api", + browserURL: "https://5irescan.io", + }, + }, + { + network: "5ireChainTestnet", + chainId: 997, + urls: { + apiURL: "https://testnet.5irescan.io/api", + browserURL: "https://testnet.5irescan.io", + }, + }, + { + network: "sapphire", + chainId: 23294, + urls: { + apiURL: "https://explorer.oasis.io/mainnet/sapphire/api", + browserURL: "https://explorer.oasis.io/mainnet/sapphire", + }, + }, + { + network: "sapphireTestnet", + chainId: 23295, + urls: { + apiURL: "https://explorer.oasis.io/testnet/sapphire/api", + browserURL: "https://explorer.oasis.io/testnet/sapphire", + }, + }, + { + network: "worldChain", + chainId: 480, + urls: { + apiURL: "https://worldchain-mainnet.explorer.alchemy.com/api", + browserURL: "https://worldchain-mainnet.explorer.alchemy.com", + }, + }, + { + network: "worldChainTestnet", + chainId: 4801, + urls: { + apiURL: "https://worldchain-sepolia.explorer.alchemy.com/api", + browserURL: "https://worldchain-sepolia.explorer.alchemy.com", + }, + }, + { + network: "plume", + chainId: 98865, + urls: { + apiURL: "https://explorer.plumenetwork.xyz/api", + browserURL: "https://explorer.plumenetwork.xyz", + }, + }, + { + network: "plumeTestnet", + chainId: 98864, + urls: { + apiURL: "https://test-explorer.plumenetwork.xyz/api", + browserURL: "https://test-explorer.plumenetwork.xyz", + }, + }, + { + network: "unichainTestnet", + chainId: 1301, + urls: { + apiURL: "https://api-sepolia.uniscan.xyz/api", + browserURL: "https://sepolia.uniscan.xyz", + }, + }, + { + network: "xdc", + chainId: 50, + urls: { + apiURL: "https://api.xdcscan.com/api", + browserURL: "https://xdcscan.com", + }, + }, + { + network: "xdcTestnet", + chainId: 51, + urls: { + apiURL: "https://api-testnet.xdcscan.com/api", + browserURL: "https://testnet.xdcscan.com", + }, + }, + { + network: "sx", + chainId: 4162, + urls: { + apiURL: "https://explorerl2.sx.technology/api", + browserURL: "https://explorerl2.sx.technology", + }, + }, + { + network: "sxTestnet", + chainId: 79479957, + urls: { + apiURL: "https://explorerl2.toronto.sx.technology/api", + browserURL: "https://explorerl2.toronto.sx.technology", + }, + }, + { + network: "zkSync", + chainId: 324, + urls: { + apiURL: "https://api-era.zksync.network/api", + browserURL: "https://era.zksync.network", + }, + }, + { + network: "zkSyncTestnet", + chainId: 300, + urls: { + apiURL: "https://api-sepolia-era.zksync.network/api", + browserURL: "https://sepolia-era.zksync.network", + }, + }, + { + network: "lisk", + chainId: 1135, + urls: { + apiURL: "https://blockscout.lisk.com/api", + browserURL: "https://blockscout.lisk.com", + }, + }, + { + network: "liskTestnet", + chainId: 4202, + urls: { + apiURL: "https://sepolia-blockscout.lisk.com/api", + browserURL: "https://sepolia-blockscout.lisk.com", + }, + }, + { + network: "metalL2", + chainId: 1750, + urls: { + apiURL: "https://explorer.metall2.com/api", + browserURL: "https://explorer.metall2.com", + }, + }, + { + network: "metalL2Testnet", + chainId: 1740, + urls: { + apiURL: "https://testnet.explorer.metall2.com/api", + browserURL: "https://testnet.explorer.metall2.com", + }, + }, + { + network: "superseed", + chainId: 5330, + urls: { + apiURL: "https://explorer.superseed.xyz/api", + browserURL: "https://explorer.superseed.xyz", + }, + }, + { + network: "superseedTestnet", + chainId: 53302, + urls: { + apiURL: "https://sepolia-explorer.superseed.xyz/api", + browserURL: "https://sepolia-explorer.superseed.xyz", + }, + }, + { + network: "storyTestnet", + chainId: 1516, + urls: { + apiURL: "https://odyssey.storyscan.xyz/api", + browserURL: "https://odyssey.storyscan.xyz", + }, + }, + { + network: "sonic", + chainId: 146, + urls: { + apiURL: "https://api.sonicscan.org/api", + browserURL: "https://sonicscan.org", + }, + }, + { + network: "sonicTestnet", + chainId: 57054, + urls: { + apiURL: "https://api-testnet.sonicscan.org/api", + browserURL: "https://testnet.sonicscan.org", + }, + }, + { + network: "flow", + chainId: 747, + urls: { + apiURL: "https://evm.flowscan.io/api", + browserURL: "https://evm.flowscan.io", + }, + }, + { + network: "flowTestnet", + chainId: 545, + urls: { + apiURL: "https://evm-testnet.flowscan.io/api", + browserURL: "https://evm-testnet.flowscan.io", + }, + }, + { + network: "ink", + chainId: 57073, + urls: { + apiURL: "https://explorer.inkonchain.com/api", + browserURL: "https://explorer.inkonchain.com", + }, + }, + { + network: "inkTestnet", + chainId: 763373, + urls: { + apiURL: "https://explorer-sepolia.inkonchain.com/api", + browserURL: "https://explorer-sepolia.inkonchain.com", + }, + }, + { + network: "morph", + chainId: 2818, + urls: { + apiURL: "https://explorer.morphl2.io/api", + browserURL: "https://explorer.morphl2.io", + }, + }, + { + network: "morphTestnet", + chainId: 2810, + urls: { + apiURL: "https://explorer-holesky.morphl2.io/api", + browserURL: "https://explorer-holesky.morphl2.io", + }, + }, + { + network: "shape", + chainId: 360, + urls: { + apiURL: "https://shapescan.xyz/api", + browserURL: "https://shapescan.xyz", + }, + }, + { + network: "shapeTestnet", + chainId: 11011, + urls: { + apiURL: "https://explorer-sepolia.shape.network/api", + browserURL: "https://explorer-sepolia.shape.network", + }, + }, + { + network: "etherlink", + chainId: 42793, + urls: { + apiURL: "https://explorer.etherlink.com/api", + browserURL: "https://explorer.etherlink.com", + }, + }, + { + network: "etherlinkTestnet", + chainId: 128123, + urls: { + apiURL: "https://testnet.explorer.etherlink.com/api", + browserURL: "https://testnet.explorer.etherlink.com", + }, + }, + { + network: "soneium", + chainId: 1868, + urls: { + apiURL: "https://soneium.blockscout.com/api", + browserURL: "https://soneium.blockscout.com", + }, + }, + { + network: "soneiumTestnet", + chainId: 1946, + urls: { + apiURL: "https://soneium-minato.blockscout.com/api", + browserURL: "https://soneium-minato.blockscout.com", + }, + }, + { + network: "swell", + chainId: 1923, + urls: { + apiURL: "https://explorer.swellnetwork.io/api", + browserURL: "https://explorer.swellnetwork.io", + }, + }, + { + network: "swellTestnet", + chainId: 1924, + urls: { + apiURL: "https://swell-testnet-explorer.alt.technology/api", + browserURL: "https://swell-testnet-explorer.alt.technology", + }, + }, + ], + }, + // tenderly: { + // username: "MyAwesomeUsername", + // project: "super-awesome-project", + // forkNetwork: "", + // privateVerification: false, + // deploymentsDir: "deployments_tenderly", + // }, }; -export default config; \ No newline at end of file +export default config; diff --git a/contracts/index.ts b/contracts/index.ts deleted file mode 100644 index 63d804b..0000000 --- a/contracts/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { abi, bytecode } from "./artifacts/contracts/NFTContract.sol/NFTContract.json"; - -export const NFTContract = { - abi, - bytecode -}; \ No newline at end of file diff --git a/contracts/package.json b/contracts/package.json index 219543a..2e1eadc 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -1,23 +1,234 @@ { "name": "@bidi/contracts", "version": "1.0.0", - "license": "GPL-3.0", + "description": "A fully-fledged Hardhat project template based on TypeScript.", + "keywords": [ + "template", + "typescript", + "ethereum", + "smart-contracts", + "solidity", + "foundry", + "hardhat" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/blokk-studio/hardhat-project-template-ts.git" + }, + "homepage": "https://github.com/blokk-studio/hardhat-project-template-ts#readme", + "bugs": { + "url": "https://github.com/blokk-studio/hardhat-project-template-ts/issues" + }, + "author": "Pascal Marco Caversaccio ", + "license": "MIT", "scripts": { - "clean": "npx hardhat clean && rm -rf cache artifacts typechain-types", - "compile": "hardhat compile", - "deploy": "ts-node scripts/deploy.ts" + "help": "npx hardhat help", + "accounts": "npx hardhat accounts", + "balances": "npx hardhat balances", + "node:hh": "npx hardhat node", + "clean": "npx hardhat clean && forge clean", + "snapshot": "forge snapshot --out forge-artifacts", + "coverage:hh": "npx hardhat coverage", + "coverage:forge": "forge coverage --report summary --out forge-artifacts --lcov-version 2.2", + "coverage:forge:report": "forge coverage --report lcov --out forge-artifacts --lcov-version 2.2 && lcov --branch-coverage --remove lcov.info \"test/*\" \"script/*\" \"node_modules/*\" --output-file lcov.info --ignore-errors unused,unused && genhtml lcov.info --branch-coverage --output-dir coverage", + "test:hh": "npx hardhat test", + "test:forge": "forge test -vvv --root . -C contracts/src --match-path \"contracts/test/*\" --out forge-artifacts", + "compile": "npx hardhat compile && forge build --root . -C contracts/src --optimize --out forge-artifacts", + "size": "npx hardhat size-contracts", + "xdeploy": "npx hardhat xdeploy", + "abi": "npx hardhat export-abi", + "vars:path": "npx hardhat vars path", + "evm": "npx hardhat evm", + "deploy:hh": "npx hardhat run --network hardhat scripts/deploy.ts", + "deploy:localhost": "npx hardhat run --network localhost scripts/deploy.ts", + "deploy:dashboard": "npx hardhat run --network truffleDashboard scripts/deploy.ts", + "deploy:tenderly": "npx hardhat run --network tenderly scripts/deploy.ts", + "deploy:devnet": "npx hardhat run --network devnet scripts/deploy.ts", + "deploy:goerli": "npx hardhat run --network goerli scripts/deploy.ts", + "deploy:sepolia": "npx hardhat run --network sepolia scripts/deploy.ts", + "deploy:holesky": "npx hardhat run --network holesky scripts/deploy.ts", + "deploy:ethmain": "npx hardhat run --network ethMain scripts/deploy.ts", + "deploy:bsctestnet": "npx hardhat run --network bscTestnet scripts/deploy.ts", + "deploy:bscmain": "npx hardhat run --network bscMain scripts/deploy.ts", + "deploy:optimismtestnet": "npx hardhat run --network optimismTestnet scripts/deploy.ts", + "deploy:optimismsepolia": "npx hardhat run --network optimismSepolia scripts/deploy.ts", + "deploy:optimismmain": "npx hardhat run --network optimismMain scripts/deploy.ts", + "deploy:arbitrumsepolia": "npx hardhat run --network arbitrumSepolia scripts/deploy.ts", + "deploy:arbitrummain": "npx hardhat run --network arbitrumMain scripts/deploy.ts", + "deploy:arbitrumnova": "npx hardhat run --network arbitrumNova scripts/deploy.ts", + "deploy:amoy": "npx hardhat run --network amoy scripts/deploy.ts", + "deploy:polygonzkevmtestnet": "npx hardhat run --network polygonZkEVMTestnet scripts/deploy.ts", + "deploy:polygon": "npx hardhat run --network polygon scripts/deploy.ts", + "deploy:polygonzkevmmain": "npx hardhat run --network polygonZkEVMMain scripts/deploy.ts", + "deploy:hecomain": "npx hardhat run --network hecoMain scripts/deploy.ts", + "deploy:fantomtestnet": "npx hardhat run --network fantomTestnet scripts/deploy.ts", + "deploy:fantommain": "npx hardhat run --network fantomMain scripts/deploy.ts", + "deploy:fuji": "npx hardhat run --network fuji scripts/deploy.ts", + "deploy:avalanche": "npx hardhat run --network avalanche scripts/deploy.ts", + "deploy:chiado": "npx hardhat run --network chiado scripts/deploy.ts", + "deploy:gnosis": "npx hardhat run --network gnosis scripts/deploy.ts", + "deploy:moonbasealpha": "npx hardhat run --network moonbaseAlpha scripts/deploy.ts", + "deploy:moonriver": "npx hardhat run --network moonriver scripts/deploy.ts", + "deploy:moonbeam": "npx hardhat run --network moonbeam scripts/deploy.ts", + "deploy:alfajores": "npx hardhat run --network alfajores scripts/deploy.ts", + "deploy:celo": "npx hardhat run --network celo scripts/deploy.ts", + "deploy:auroratestnet": "npx hardhat run --network auroraTestnet scripts/deploy.ts", + "deploy:auroramain": "npx hardhat run --network auroraMain scripts/deploy.ts", + "deploy:harmonytestnet": "npx hardhat run --network harmonyTestnet scripts/deploy.ts", + "deploy:harmonymain": "npx hardhat run --network harmonyMain scripts/deploy.ts", + "deploy:spark": "npx hardhat run --network spark scripts/deploy.ts", + "deploy:fuse": "npx hardhat run --network fuse scripts/deploy.ts", + "deploy:cronostestnet": "npx hardhat run --network cronosTestnet scripts/deploy.ts", + "deploy:cronosmain": "npx hardhat run --network cronosMain scripts/deploy.ts", + "deploy:evmostestnet": "npx hardhat run --network evmosTestnet scripts/deploy.ts", + "deploy:evmosmain": "npx hardhat run --network evmosMain scripts/deploy.ts", + "deploy:bobatestnet": "npx hardhat run --network bobaTestnet scripts/deploy.ts", + "deploy:bobamain": "npx hardhat run --network bobaMain scripts/deploy.ts", + "deploy:cantotestnet": "npx hardhat run --network cantoTestnet scripts/deploy.ts", + "deploy:cantomain": "npx hardhat run --network cantoMain scripts/deploy.ts", + "deploy:basetestnet": "npx hardhat run --network baseTestnet scripts/deploy.ts", + "deploy:basesepolia": "npx hardhat run --network baseSepolia scripts/deploy.ts", + "deploy:basemain": "npx hardhat run --network baseMain scripts/deploy.ts", + "deploy:zksynctestnet": "npx hardhat deploy-zksync --network zkSyncTestnet --script deploy-zksync.ts", + "deploy:zksyncmain": "npx hardhat deploy-zksync --network zkSyncMain --script deploy-zksync.ts", + "deploy:mantletestnet": "npx hardhat run --network mantleTestnet scripts/deploy.ts", + "deploy:mantlemain": "npx hardhat run --network mantleMain scripts/deploy.ts", + "deploy:filecointestnet": "npx hardhat run --network filecoinTestnet scripts/deploy.ts", + "deploy:filecoinmain": "npx hardhat run --network filecoinMain scripts/deploy.ts", + "deploy:scrolltestnet": "npx hardhat run --network scrollTestnet scripts/deploy.ts", + "deploy:scrollmain": "npx hardhat run --network scrollMain scripts/deploy.ts", + "deploy:lineatestnet": "npx hardhat run --network lineaTestnet scripts/deploy.ts", + "deploy:lineamain": "npx hardhat run --network lineaMain scripts/deploy.ts", + "deploy:shimmerevmtestnet": "npx hardhat run --network shimmerEVMTestnet scripts/deploy.ts", + "deploy:zoratestnet": "npx hardhat run --network zoraTestnet scripts/deploy.ts", + "deploy:zoramain": "npx hardhat run --network zoraMain scripts/deploy.ts", + "deploy:luksotestnet": "npx hardhat run --network luksoTestnet scripts/deploy.ts", + "deploy:luksomain": "npx hardhat run --network luksoMain scripts/deploy.ts", + "deploy:mantatestnet": "npx hardhat run --network mantaTestnet scripts/deploy.ts", + "deploy:mantamain": "npx hardhat run --network mantaMain scripts/deploy.ts", + "deploy:shardeumtestnet": "npx hardhat run --network shardeumTestnet scripts/deploy.ts", + "deploy:artheratestnet": "npx hardhat run --network artheraTestnet scripts/deploy.ts", + "deploy:frametestnet": "npx hardhat run --network frameTestnet scripts/deploy.ts", + "deploy:endurancetestnet": "npx hardhat run --network enduranceTestnet scripts/deploy.ts", + "deploy:opendurancetestnet": "npx hardhat run --network openduranceTestnet scripts/deploy.ts", + "deploy:endurancemain": "npx hardhat run --network enduranceMain scripts/deploy.ts", + "deploy:blasttestnet": "npx hardhat run --network blastTestnet scripts/deploy.ts", + "deploy:blastmain": "npx hardhat run --network blastMain scripts/deploy.ts", + "deploy:kromatestnet": "npx hardhat run --network kromaTestnet scripts/deploy.ts", + "deploy:kromamain": "npx hardhat run --network kromaMain scripts/deploy.ts", + "deploy:dostestnet": "npx hardhat run --network dosTestnet scripts/deploy.ts", + "deploy:dosmain": "npx hardhat run --network dosMain scripts/deploy.ts", + "deploy:fraxtaltestnet": "npx hardhat run --network fraxtalTestnet scripts/deploy.ts", + "deploy:fraxtalmain": "npx hardhat run --network fraxtalMain scripts/deploy.ts", + "deploy:kavamain": "npx hardhat run --network kavaMain scripts/deploy.ts", + "deploy:metistestnet": "npx hardhat run --network metisTestnet scripts/deploy.ts", + "deploy:metismain": "npx hardhat run --network metisMain scripts/deploy.ts", + "deploy:modetestnet": "npx hardhat run --network modeTestnet scripts/deploy.ts", + "deploy:modemain": "npx hardhat run --network modeMain scripts/deploy.ts", + "deploy:seitestnet": "npx hardhat run --network seiTestnet scripts/deploy.ts", + "deploy:xlayertestnet": "npx hardhat run --network xlayerTestnet scripts/deploy.ts", + "deploy:xlayermain": "npx hardhat run --network xlayerMain scripts/deploy.ts", + "deploy:bobtestnet": "npx hardhat run --network bobTestnet scripts/deploy.ts", + "deploy:bobmain": "npx hardhat run --network bobMain scripts/deploy.ts", + "deploy:coretestnet": "npx hardhat run --network coreTestnet scripts/deploy.ts", + "deploy:coremain": "npx hardhat run --network coreMain scripts/deploy.ts", + "deploy:telostestnet": "npx hardhat run --network telosTestnet scripts/deploy.ts", + "deploy:telosmain": "npx hardhat run --network telosMain scripts/deploy.ts", + "deploy:rootstocktestnet": "npx hardhat run --network rootstockTestnet scripts/deploy.ts", + "deploy:rootstockmain": "npx hardhat run --network rootstockMain scripts/deploy.ts", + "deploy:chiliztestnet": "npx hardhat run --network chilizTestnet scripts/deploy.ts", + "deploy:chilizmain": "npx hardhat run --network chilizMain scripts/deploy.ts", + "deploy:taraxatestnet": "npx hardhat run --network taraxaTestnet scripts/deploy.ts", + "deploy:taraxamain": "npx hardhat run --network taraxaMain scripts/deploy.ts", + "deploy:gravityalphatestnet": "npx hardhat run --network gravityAlphaTestnet scripts/deploy.ts", + "deploy:gravityalphamain": "npx hardhat run --network gravityAlphaMain scripts/deploy.ts", + "deploy:taikotestnet": "npx hardhat run --network taikoTestnet scripts/deploy.ts", + "deploy:taikomain": "npx hardhat run --network taikoMain scripts/deploy.ts", + "deploy:zetachaintestnet": "npx hardhat run --network zetaChainTestnet scripts/deploy.ts", + "deploy:zetachainmain": "npx hardhat run --network zetaChainMain scripts/deploy.ts", + "deploy:5irechaintestnet": "npx hardhat run --network 5ireChainTestnet scripts/deploy.ts", + "deploy:5irechainmain": "npx hardhat run --network 5ireChainMain scripts/deploy.ts", + "deploy:sapphiretestnet": "npx hardhat run --network sapphireTestnet scripts/deploy.ts", + "deploy:sapphiremain": "npx hardhat run --network sapphireMain scripts/deploy.ts", + "deploy:worldchaintestnet": "npx hardhat run --network worldChainTestnet scripts/deploy.ts", + "deploy:worldchainmain": "npx hardhat run --network worldChainMain scripts/deploy.ts", + "deploy:plumetestnet": "npx hardhat run --network plumeTestnet scripts/deploy.ts", + "deploy:plumemain": "npx hardhat run --network plumeMain scripts/deploy.ts", + "deploy:unichaintestnet": "npx hardhat run --network unichainTestnet scripts/deploy.ts", + "deploy:xdctestnet": "npx hardhat run --network xdcTestnet scripts/deploy.ts", + "deploy:xdcmain": "npx hardhat run --network xdcMain scripts/deploy.ts", + "deploy:sxtestnet": "npx hardhat run --network sxTestnet scripts/deploy.ts", + "deploy:sxmain": "npx hardhat run --network sxMain scripts/deploy.ts", + "deploy:lisktestnet": "npx hardhat run --network liskTestnet scripts/deploy.ts", + "deploy:liskmain": "npx hardhat run --network liskMain scripts/deploy.ts", + "deploy:metall2testnet": "npx hardhat run --network metalL2Testnet scripts/deploy.ts", + "deploy:metall2main": "npx hardhat run --network metalL2Main scripts/deploy.ts", + "deploy:superseedtestnet": "npx hardhat run --network superseedTestnet scripts/deploy.ts", + "deploy:superseedmain": "npx hardhat run --network superseedMain scripts/deploy.ts", + "deploy:storytestnet": "npx hardhat run --network storyTestnet scripts/deploy.ts", + "deploy:sonictestnet": "npx hardhat run --network sonicTestnet scripts/deploy.ts", + "deploy:sonicmain": "npx hardhat run --network sonicMain scripts/deploy.ts", + "deploy:flowtestnet": "npx hardhat run --network flowTestnet scripts/deploy.ts", + "deploy:flowmain": "npx hardhat run --network flowMain scripts/deploy.ts", + "deploy:inktestnet": "npx hardhat run --network inkTestnet scripts/deploy.ts", + "deploy:inkmain": "npx hardhat run --network inkMain scripts/deploy.ts", + "deploy:morphtestnet": "npx hardhat run --network morphTestnet scripts/deploy.ts", + "deploy:morphmain": "npx hardhat run --network morphMain scripts/deploy.ts", + "deploy:shapetestnet": "npx hardhat run --network shapeTestnet scripts/deploy.ts", + "deploy:shapemain": "npx hardhat run --network shapeMain scripts/deploy.ts", + "deploy:etherlinktestnet": "npx hardhat run --network etherlinkTestnet scripts/deploy.ts", + "deploy:etherlinkmain": "npx hardhat run --network etherlinkMain scripts/deploy.ts", + "deploy:soneiumtestnet": "npx hardhat run --network soneiumTestnet scripts/deploy.ts", + "deploy:soneiummain": "npx hardhat run --network soneiumMain scripts/deploy.ts", + "deploy:swelltestnet": "npx hardhat run --network swellTestnet scripts/deploy.ts", + "deploy:swellmain": "npx hardhat run --network swellMain scripts/deploy.ts", + "prettier:check": "npx prettier -c \"**/*.{js,ts,md,sol,json,yml,yaml}\"", + "prettier:fix": "npx prettier -w \"**/*.{js,ts,md,sol,json,yml,yaml}\"", + "solhint:check": "npx solhint \"contracts/**/*.sol\"", + "solhint:fix": "npx solhint \"contracts/**/*.sol\" --fix", + "lint:check": "pnpm prettier:check && pnpm solhint:check && npx eslint .", + "lint:fix": "pnpm prettier:fix && pnpm solhint:fix && npx eslint . --fix" }, - "files": [ - "dist", - "artifacts" - ], "devDependencies": { - "@hashgraph/sdk": "^2.56.0", - "@nomicfoundation/hardhat-toolbox": "^4.0.0", - "@types/node": "^22.10.6", - "dotenv": "^16.4.7", + "@eslint/js": "^9.19.0", + "@matterlabs/hardhat-zksync-deploy": "^1.6.0", + "@matterlabs/hardhat-zksync-ethers": "1.2.1", + "@matterlabs/hardhat-zksync-solc": "^1.2.5", + "@matterlabs/hardhat-zksync-verify": "^1.7.1", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.8", + "@nomicfoundation/hardhat-ethers": "^3.0.8", + "@nomicfoundation/hardhat-foundry": "^1.1.3", + "@nomicfoundation/hardhat-ignition": "^0.15.9", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.9", + "@nomicfoundation/hardhat-ledger": "^1.0.3", + "@nomicfoundation/hardhat-network-helpers": "^1.0.12", + "@nomicfoundation/hardhat-verify": "^2.0.12", + "@nomicfoundation/ignition-core": "^0.15.9", + "@openzeppelin/contracts": "^5.2.0", + "@tenderly/hardhat-tenderly": "^2.5.2", + "@truffle/dashboard-hardhat-plugin": "^0.2.15", + "@typechain/ethers-v6": "^0.5.1", + "@typechain/hardhat": "^9.1.0", + "@types/chai": "^4.3.20", + "@types/mocha": "^10.0.10", + "@types/node": "^22.10.10", + "chai": "^4.5.0", + "eslint": "^9.19.0", + "eslint-config-prettier": "^10.0.1", + "ethers": "^6.13.5", "hardhat": "^2.22.18", + "hardhat-abi-exporter": "^2.10.1", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-gas-reporter": "^2.2.2", + "prettier": "^3.4.2", + "prettier-plugin-solidity": "^1.4.2", + "solhint": "^5.0.5", + "solidity-coverage": "^0.8.14", "ts-node": "^10.9.2", - "typescript": "^5.7.3" + "typechain": "^8.3.2", + "typescript": "^5.7.3", + "typescript-eslint": "^8.21.0", + "xdeployer": "^3.1.10", + "zksync-ethers": "^6.15.4" } } diff --git a/contracts/remappings.txt b/contracts/remappings.txt new file mode 100644 index 0000000..bb0462d --- /dev/null +++ b/contracts/remappings.txt @@ -0,0 +1,4 @@ +hardhat/=node_modules/hardhat/ +xdeployer/=node_modules/xdeployer/ +forge-std/=contracts/lib/forge-std/src/ +@openzeppelin/=node_modules/@openzeppelin/ diff --git a/contracts/renovate.json b/contracts/renovate.json new file mode 100644 index 0000000..c33ecbc --- /dev/null +++ b/contracts/renovate.json @@ -0,0 +1,16 @@ +{ + "baseBranches": ["main"], + "labels": ["dependencies"], + "assignees": ["pcaversaccio"], + "separateMajorMinor": false, + "extends": [ + ":preserveSemverRanges", + "group:all", + "schedule:monthly", + ":maintainLockFilesMonthly" + ], + "lockFileMaintenance": { + "extends": ["group:all"], + "commitMessageAction": "Update" + } +} diff --git a/contracts/scripts/client.ts b/contracts/scripts/client.ts deleted file mode 100644 index a15136c..0000000 --- a/contracts/scripts/client.ts +++ /dev/null @@ -1,56 +0,0 @@ -// https://docs.hedera.com/hedera/getting-started/environment-set-up - -import { Client, Hbar, PrivateKey } from '@hashgraph/sdk' -import {config} from "dotenv"; - -config(); - -export const clientSetup = () => { - // Grab your Hedera testnet account ID and private key from your .env file - const myAccountId = process.env.HEDERA_ACCOUNT_ID - const myPrivateKey = process.env.HEDERA_PRIVATE_KEY - const environment = process.env.HEDERA_ENVIRONMENT - - // If we weren't able to grab it, we should throw a new error - if (!myAccountId || !myPrivateKey) { - throw new Error('Environment variables MY_ACCOUNT_ID and MY_PRIVATE_KEY must be present') - } - - // Create your Hedera Testnet/Mainnet client - let client - if (environment === 'testnet') { - client = Client.forTestnet() - } else { - client = Client.forMainnet() - } - - let privateKey: PrivateKey | undefined = undefined; - if (process.env.HEDERA_PRIVATE_KEY_TYPE === "ecdsa") { - console.info("Private key was declared to be ECDSA"); - privateKey = PrivateKey.fromStringECDSA(myPrivateKey); - } else { - if (process.env.HEDERA_PRIVATE_KEY_TYPE === "ed25519") { - console.info("Private key was declared to be ED25519"); - } else { - console.warn( - "Private key is assumed to be ed25519 because HEDERA_PRIVATE_KEY_TYPE is not set correctly or at all.", - { HEDERA_PRIVATE_KEY_TYPE: process.env.HEDERA_PRIVATE_KEY_TYPE } - ); - } - - privateKey = PrivateKey.fromStringED25519(myPrivateKey); - } - - // Set your account as the client's operator - client.setOperator(myAccountId, privateKey); - - // Set the default maximum transaction fee (in Hbar) - client.setDefaultMaxTransactionFee(new Hbar(100)) - - // Set the maximum payment for queries (in Hbar) - client.setDefaultMaxQueryPayment(new Hbar(50)) - - console.log('Client setup complete.') - - return client -} \ No newline at end of file diff --git a/contracts/scripts/deploy.sh b/contracts/scripts/deploy.sh new file mode 100644 index 0000000..921f9d2 --- /dev/null +++ b/contracts/scripts/deploy.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# Read the RPC URL +echo Enter your RPC URL \(script uses silent mode\;\ i.e. not printed to the console\): +echo Example: "https://eth-mainnet.alchemyapi.io/v2/XXXXXXXXXX" +read -s rpc + +# Read the private key +echo Enter your private key \(script uses silent mode\;\ i.e. not printed to the console\): +echo Example: "0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1" +read -s key + +# Read the contract name +echo Which contract do you want to deploy \(e.g. Greeter\)? +read contract + +# Read the constructor arguments +echo Enter the constructor arguments separated by spaces \(e.g. hello 0xacc4de8d4ca96c3f0c91b58f1d6c0d80cf8cc146 1\): +read -ra args + +if [ -z "$args" ] +then + forge create -i ./contracts/src/${contract}.sol:${contract} --rpc-url $rpc --private-key $key +else + forge create -i ./contracts/src/${contract}.sol:${contract} --rpc-url $rpc --private-key $key --constructor-args ${args} +fi diff --git a/contracts/scripts/deploy.ts b/contracts/scripts/deploy.ts index 4667593..d9fa33f 100644 --- a/contracts/scripts/deploy.ts +++ b/contracts/scripts/deploy.ts @@ -1,96 +1,40 @@ -import * as fs from "fs"; -import * as path from "path"; -import { - AccountId, - ContractCreateFlow, - ContractExecuteTransaction, ContractFunctionParameters, - AccountBalanceQuery -} from "@hashgraph/sdk"; -import {clientSetup} from "./client"; - -require("dotenv").config(); - -const operatorId = AccountId.fromString(process.env.HEDERA_ACCOUNT_ID!); - -const client = clientSetup() - -const main = async () => { - // Check account balance - console.log('\n----- Account Information -----'); - const accountBalance = await new AccountBalanceQuery() - .setAccountId(operatorId) - .execute(client); - - console.log(`💰 Account Balance:`); - console.log(` - ${accountBalance.hbars.toString()} (HBAR)`); - - // Deploy configuration - console.log('\n----- Deployment Configuration -----'); - console.log(`Operator Account: ${operatorId}`); - console.log(`Network: Testnet`); - console.log(`Metadata URI: ${process.env.NFT_METADATA_BASE_URL}`); - console.log(`HashScan Explorer: https://hashscan.io/testnet`); - - // Read Contract - console.log('\n----- Reading Contract -----'); - const artifactPath = path.join(__dirname, "../artifacts/contracts/NFTContract.sol/NFTContract.json"); - const contractJson = JSON.parse(fs.readFileSync(artifactPath, 'utf8')); - - const bytecode = contractJson.bytecode.startsWith('0x') - ? contractJson.bytecode.slice(2) - : contractJson.bytecode; - console.log(`Contract bytecode size: ${bytecode.length / 2} bytes`); - - // Deploy Contract - console.log('\n----- Deploying Contract -----'); - console.log('Initiating contract deployment...'); - const createContract = new ContractCreateFlow() - .setGas(4000000) // Increase if revert - .setBytecode(bytecode); // Contract bytecode - const createContractTx = await createContract.execute(client); - const createContractRx = await createContractTx.getReceipt(client); - const contractId = createContractRx.contractId; - console.log(`Contract deployed successfully!`); - console.log(`Contract ID: ${contractId}`); - console.log(`View Contract: https://hashscan.io/testnet/contract/${contractId}`); - - if (!contractId) { - throw new Error("No contract was created"); - } - - // Create NFT Collection - console.log('\n----- Creating NFT Collection -----'); - console.log('Initiating NFT collection creation...'); - const createToken = new ContractExecuteTransaction() - .setContractId(contractId) - .setGas(1000000) // Increase if revert - .setPayableAmount(10) // Increase if revert - .setFunction( - "createNft", - new ContractFunctionParameters() - .addString("Fall Collection") // NFT name - .addString("LEAF") // NFT symbol - .addString("Just a memo") // NFT memo - .addInt64(250) // NFT max supply - .addInt64(7000000) // Expiration: Needs to be between 6999999 and 8000001 - ); - const createTokenTx = await createToken.execute(client); - const createTokenRx = await createTokenTx.getRecord(client); - const tokenIdSolidityAddr = createTokenRx.contractFunctionResult!.getAddress(0); - const tokenId = AccountId.fromSolidityAddress(tokenIdSolidityAddr); - console.log(`NFT Collection created successfully!`); - console.log(`Collection Details:`); - console.log(` - Token ID: ${tokenId}`); - console.log(` - Name: Fall Collection`); - console.log(` - Symbol: LEAF`); - console.log(` - Max Supply: 250`); - console.log(`View Token: https://hashscan.io/testnet/token/${tokenId}`); - - // Summary - console.log('\n----- Deployment Summary -----'); - console.log(`Contract ID: ${contractId}`); - console.log(`Token ID: ${tokenId}`); - console.log(`\nAll operations completed successfully! 🎉\n`); -}; - -main(); \ No newline at end of file +import hre from "hardhat"; + +// Colour codes for terminal prints +const RESET = "\x1b[0m"; +const GREEN = "\x1b[32m"; + +function delay(ms: number) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +async function main() { + const constructorArgs = ["Hello, Hardhat!"]; + const contract = await hre.ethers.deployContract("Greeter", constructorArgs); + + await contract.waitForDeployment(); + const contractAddress = await contract.getAddress(); + + console.log("Greeter deployed to: " + `${GREEN}${contractAddress}${RESET}\n`); + + console.log( + "Waiting 30 seconds before beginning the contract verification to allow the block explorer to index the contract...\n", + ); + await delay(30000); // Wait for 30 seconds before verifying the contract + + await hre.run("verify:verify", { + address: contractAddress, + constructorArguments: constructorArgs, + }); + + // Uncomment if you want to enable the `tenderly` extension + // await hre.tenderly.verify({ + // name: "Greeter", + // address: contractAddress, + // }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/contracts/scripts/deploy_local.sh b/contracts/scripts/deploy_local.sh new file mode 100644 index 0000000..294f2a3 --- /dev/null +++ b/contracts/scripts/deploy_local.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +# Read the RPC URL +echo Enter your mainnet RPC URL to fork a local Hardhat node from \(script uses silent mode\;\ i.e. not printed to the console\): +echo Example: "https://eth-mainnet.alchemyapi.io/v2/XXXXXXXXXX" +read -s rpc + +## Fork the mainnet +echo Please wait 1 minute for Hardhat to fork the mainnet and run locally... +echo If this command fails, try running "yarn" to install Hardhat dependencies... +make -s mainnet-fork ETH_MAINNET_RPC_URL=$rpc & + +# Wait for Hardhat to fork the mainnet +sleep 60 + +# Read the contract name +echo Which contract do you want to deploy \(e.g. Greeter\)? +read contract + +# Read the constructor arguments +echo Enter the constructor arguments separated by spaces \(e.g. hello 0xacc4de8d4ca96c3f0c91b58f1d6c0d80cf8cc146 1\): +read -ra args + +if [ -z "$args" ] +then + forge create -i ./contracts/src/${contract}.sol:${contract} --rpc-url "http://localhost:8545" +else + forge create -i ./contracts/src/${contract}.sol:${contract} --rpc-url "http://localhost:8545" --constructor-args ${args} +fi diff --git a/contracts/scripts/flatten.sh b/contracts/scripts/flatten.sh new file mode 100644 index 0000000..b1edd78 --- /dev/null +++ b/contracts/scripts/flatten.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Read the contract name +echo Which contract do you want to flatten \(e.g. Greeter\)? +read contract + +# Remove an existing flattened contract +rm -rf flattened.sol + +# Flatten the contract +forge flatten ./contracts/src/${contract}.sol > flattened.sol diff --git a/contracts/scripts/interact.ts b/contracts/scripts/interact.ts new file mode 100644 index 0000000..fc19094 --- /dev/null +++ b/contracts/scripts/interact.ts @@ -0,0 +1,37 @@ +// An example script that shows how to interact programmatically with a deployed contract +// You must customise it according to your contract's specifications +import hre from "hardhat"; + +// Colour codes for terminal prints +const RESET = "\x1b[0m"; +const GREEN = "\x1b[32m"; + +async function main() { + const address = "0xB8d2BDd1C99A33b831553DA64F6215983bf0475a"; // Specify here your contract address + const contract = await hre.ethers.getContractAt("Greeter", address); // Specify here your contract name + + //////////////// + // PAYLOAD // + ////////////// + + const newGreeting = "Buongiorno!"; // Specify here the payload of the to-be-called function + + //////////////// + // SENDING // + ////////////// + + const tx = await contract.setGreeting(newGreeting); // Specify here the to-be-called function name + console.log("The transaction hash is: " + `${GREEN}${tx.hash}${RESET}\n`); + console.log("Waiting until the transaction is confirmed...\n"); + const receipt = await tx.wait(); // Wait until the transaction is confirmed + console.log( + "The transaction returned the following transaction receipt:\n", + receipt, + ); +} + +// To run it, invoke `npx hardhat run scripts/interact.ts --network ` +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/contracts/scripts/minter/add.ts b/contracts/scripts/minter/add.ts deleted file mode 100644 index 1393a1b..0000000 --- a/contracts/scripts/minter/add.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { - AccountId, - ContractExecuteTransaction, - ContractFunctionParameters, - ContractId, - Hbar, -} from "@hashgraph/sdk"; -import { clientSetup } from "../client"; - -// Get command line arguments -const [contractId, minterId] = process.argv.slice(2); - -if (!contractId || !minterId) { - console.error("Missing required arguments"); - console.error("Usage: npx ts-node addMinter.ts "); - console.error("Example: npx ts-node addMinter.ts 0.0.123456 0.0.789101"); - process.exit(1); -} - -const addMinter = async () => { - try { - // Create client and set operator - const client = clientSetup(); - - console.log("\n----- Adding New Minter -----"); - console.log(`Contract ID: ${contractId}`); - console.log(`Minter ID: ${minterId}`); - - // Convert IDs to correct format - const contractIdObj = ContractId.fromString(contractId); - const minterIdObj = AccountId.fromString(minterId); - const minterAddress = minterIdObj.toSolidityAddress(); - - // Create and execute the transaction - const addMinterTx = new ContractExecuteTransaction() - .setContractId(contractIdObj) - .setGas(1000000) - .setMaxTransactionFee(new Hbar(20)) - .setFunction( - "addMinter", - new ContractFunctionParameters().addAddress(minterAddress), - ); - - const txResponse = await addMinterTx.execute(client); - const receipt = await txResponse.getReceipt(client); - - console.log("\nMinter added successfully!"); - console.log("Transaction ID:", txResponse.transactionId.toString()); - - client.close(); - } catch (error) { - console.error("Error adding minter:", error); - throw error; - } -}; - -addMinter(); diff --git a/contracts/scripts/minter/remove.ts b/contracts/scripts/minter/remove.ts deleted file mode 100644 index 23145cf..0000000 --- a/contracts/scripts/minter/remove.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { - AccountId, - ContractExecuteTransaction, - ContractFunctionParameters, - ContractId, - Hbar, -} from "@hashgraph/sdk"; -import { clientSetup } from "../client"; - -// Get command line arguments -const [contractId, minterId] = process.argv.slice(2); - -if (!contractId || !minterId) { - console.error("Missing required arguments"); - console.error("Usage: npx ts-node removeMinter.ts "); - console.error("Example: npx ts-node removeMinter.ts 0.0.123456 0.0.789101"); - process.exit(1); -} - -const removeMinter = async () => { - try { - const client = clientSetup(); - - console.log("\n----- Removing Minter -----"); - console.log(`Contract ID: ${contractId}`); - console.log(`Minter ID: ${minterId}`); - - // Convert IDs to correct format - const contractIdObj = ContractId.fromString(contractId); - const minterIdObj = AccountId.fromString(minterId); - const minterAddress = minterIdObj.toSolidityAddress(); - - // Create and execute the transaction - const removeMinterTx = new ContractExecuteTransaction() - .setContractId(contractIdObj) - .setGas(1000000) - .setMaxTransactionFee(new Hbar(20)) - .setFunction( - "removeMinter", - new ContractFunctionParameters().addAddress(minterAddress), - ); - - const txResponse = await removeMinterTx.execute(client); - const receipt = await txResponse.getReceipt(client); - - console.log("\nMinter removed successfully!"); - console.log("Transaction ID:", txResponse.transactionId.toString()); - - client.close(); - } catch (error) { - console.error("Error removing minter:", error); - throw error; - } -}; - -removeMinter(); diff --git a/contracts/scripts/verify.sh b/contracts/scripts/verify.sh new file mode 100644 index 0000000..ef56dce --- /dev/null +++ b/contracts/scripts/verify.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +echo Which compiler version did you use to build? +read version +echo Selected compiler version: $version + +echo Which contract do you want to verify \(e.g. Greeter\)? +read contract +echo Selected contract name: $contract + +echo What is the deployed address? +read deployed +echo Selected contract address: $deployed + +echo What is the chain ID of the deployed address? +read id +echo Selected chain ID: $id + +echo Enter the constructor abi \(e.g. constructor\(string\)\): +read abi +echo Selected constructor abi: $abi + +echo Enter the constructor arguments separated by spaces \(e.g. 1 2 3\): +read -ra args +echo Selected constructor arguments: $args + +encoded=`cast abi-encode $abi $args` +echo ABI-encoded constructor arguments: ${encoded:2} + +echo Enter your Etherscan API key: +read -s etherscan + +if [ -z "$args" ] +then + forge verify-contract --chain-id $id --compiler-version $version $deployed ./contracts/src/${contract}.sol:${contract} $etherscan +else + forge verify-contract --constructor-args ${encoded:2} --chain-id $id --compiler-version $version $deployed ./contracts/src/${contract}.sol:${contract} $etherscan +fi diff --git a/contracts/slither.config.json b/contracts/slither.config.json new file mode 100644 index 0000000..ca75207 --- /dev/null +++ b/contracts/slither.config.json @@ -0,0 +1,11 @@ +{ + "compile_force_framework": "hardhat", + "hardhat_ignore_compile": false, + "detectors_to_exclude": "pragma,solc-version", + "fail_on": "none", + "exclude_informational": false, + "exclude_low": false, + "exclude_medium": false, + "exclude_high": false, + "filter_paths": "contracts/lib|contracts/test|contracts/src/Create2DeployerLocal.sol|@openzeppelin|hardhat/console.sol|xdeployer" +} diff --git a/contracts/test/Greeter.test.ts b/contracts/test/Greeter.test.ts new file mode 100644 index 0000000..5a2a104 --- /dev/null +++ b/contracts/test/Greeter.test.ts @@ -0,0 +1,39 @@ +import { expect, assert } from "chai"; +import hre from "hardhat"; +import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; +import { mine, time } from "@nomicfoundation/hardhat-network-helpers"; +import { Greeter } from "../typechain-types"; + +describe("Greeter", function () { + let deployerAccount: SignerWithAddress; + let greeter: Greeter; + + beforeEach(async function () { + greeter = await hre.ethers.deployContract( + "Greeter", + ["Hello, Hardhat!"], + deployerAccount, + ); + await greeter.waitForDeployment(); + }); + + it("Should return the new greeting once it's changed", async function () { + expect(await greeter.greet()).to.equal("Hello, Hardhat!"); + + const setGreetingTx = await greeter.setGreeting("Hola, mundo!"); + + // Wait until the transaction is mined + await setGreetingTx.wait(); + + expect(await greeter.greet()).to.equal("Hola, mundo!"); + }); + + // Showcase test on how to use the Hardhat network helpers library + it("Should mine the given number of blocks", async function () { + const blockNumberBefore = await time.latestBlock(); + + await mine(100); + + assert.equal(await time.latestBlock(), blockNumberBefore + 100); + }); +}); diff --git a/contracts/tsconfig.json b/contracts/tsconfig.json index 5a4ded0..fa33003 100644 --- a/contracts/tsconfig.json +++ b/contracts/tsconfig.json @@ -1,13 +1,30 @@ { "compilerOptions": { - "target": "es2016", + "target": "es2021", "module": "commonjs", + "allowJs": true, + "strict": true, "esModuleInterop": true, + "outDir": "dist", + "declaration": true, "forceConsistentCasingInFileNames": true, - "strict": true, "skipLibCheck": true, - "outDir": "dist" + "resolveJsonModule": true }, - "include": ["src"], - "files": ["src/index.ts"] + "include": [ + "./scripts/**/*.js", + "./scripts/**/*.ts", + "./deploy/**/*.js", + "./deploy/**/*.ts", + "./test/**/*.js", + "./test/**/*.ts", + "./typechain-types/**/*.ts" + ], + "files": [ + "hardhat.config.ts", + "deploy-args.ts", + "eslint.config.js", + "arguments.js", + ".solcover.js" + ] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c4b7fd..c6fc4ce 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,27 +8,126 @@ importers: contracts: devDependencies: - '@hashgraph/sdk': - specifier: ^2.56.0 - version: 2.56.0 - '@nomicfoundation/hardhat-toolbox': - specifier: ^4.0.0 - version: 4.0.0(p67fii2qccywfvwt5kjh7igmde) + '@eslint/js': + specifier: ^9.19.0 + version: 9.19.0 + '@matterlabs/hardhat-zksync-deploy': + specifier: ^1.6.0 + version: 1.6.0(encoding@0.1.13)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(zksync-ethers@6.15.4(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@matterlabs/hardhat-zksync-ethers': + specifier: 1.2.1 + version: 1.2.1(bufferutil@4.0.9)(encoding@0.1.13)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)(zksync-ethers@6.15.4(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@matterlabs/hardhat-zksync-solc': + specifier: ^1.2.5 + version: 1.2.5(encoding@0.1.13)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@matterlabs/hardhat-zksync-verify': + specifier: ^1.7.1 + version: 1.7.1(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(encoding@0.1.13)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-chai-matchers': + specifier: ^2.0.8 + version: 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': + specifier: ^3.0.8 + version: 3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-foundry': + specifier: ^1.1.3 + version: 1.1.3(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ignition': + specifier: ^0.15.9 + version: 0.15.9(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@nomicfoundation/hardhat-ignition-ethers': + specifier: ^0.15.9 + version: 0.15.9(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.9(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.9(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ledger': + specifier: ^1.0.3 + version: 1.0.3(bufferutil@4.0.9)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@nomicfoundation/hardhat-network-helpers': + specifier: ^1.0.12 + version: 1.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-verify': + specifier: ^2.0.12 + version: 2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/ignition-core': + specifier: ^0.15.9 + version: 0.15.9(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@openzeppelin/contracts': + specifier: ^5.2.0 + version: 5.2.0 + '@tenderly/hardhat-tenderly': + specifier: ^2.5.2 + version: 2.5.2(@types/node@22.10.10)(bufferutil@4.0.9)(encoding@0.1.13)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@truffle/dashboard-hardhat-plugin': + specifier: ^0.2.15 + version: 0.2.15(bufferutil@4.0.9)(encoding@0.1.13)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@typechain/ethers-v6': + specifier: ^0.5.1 + version: 0.5.1(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3) + '@typechain/hardhat': + specifier: ^9.1.0 + version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3))(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.3)) + '@types/chai': + specifier: ^4.3.20 + version: 4.3.20 + '@types/mocha': + specifier: ^10.0.10 + version: 10.0.10 '@types/node': - specifier: ^22.10.6 - version: 22.10.6 - dotenv: - specifier: ^16.4.7 - version: 16.4.7 + specifier: ^22.10.10 + version: 22.10.10 + chai: + specifier: ^4.5.0 + version: 4.5.0 + eslint: + specifier: ^9.19.0 + version: 9.19.0(jiti@2.4.1) + eslint-config-prettier: + specifier: ^10.0.1 + version: 10.0.1(eslint@9.19.0(jiti@2.4.1)) + ethers: + specifier: ^6.13.5 + version: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.18 - version: 2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3) + version: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + hardhat-abi-exporter: + specifier: ^2.10.1 + version: 2.10.1(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + hardhat-contract-sizer: + specifier: ^2.10.0 + version: 2.10.0(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + hardhat-gas-reporter: + specifier: ^2.2.2 + version: 2.2.2(bufferutil@4.0.9)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) + prettier: + specifier: ^3.4.2 + version: 3.4.2 + prettier-plugin-solidity: + specifier: ^1.4.2 + version: 1.4.2(prettier@3.4.2) + solhint: + specifier: ^5.0.5 + version: 5.0.5(typescript@5.7.3) + solidity-coverage: + specifier: ^0.8.14 + version: 0.8.14(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@22.10.6)(typescript@5.7.3) + version: 10.9.2(@types/node@22.10.10)(typescript@5.7.3) + typechain: + specifier: ^8.3.2 + version: 8.3.2(typescript@5.7.3) typescript: specifier: ^5.7.3 version: 5.7.3 + typescript-eslint: + specifier: ^8.21.0 + version: 8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3) + xdeployer: + specifier: ^3.1.10 + version: 3.1.10(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + zksync-ethers: + specifier: ^6.15.4 + version: 6.15.4(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10)) frontend: dependencies: @@ -50,13 +149,13 @@ importers: version: 0.86.2(svelte@5.17.4) '@sveltejs/adapter-auto': specifier: ^3.3.1 - version: 3.3.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1))) + version: 3.3.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1))) '@sveltejs/kit': specifier: ^2.15.2 - version: 2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)) + version: 2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)) '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)) + version: 5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)) '@tikz/hedera-mirror-node-ts': specifier: ^3.0.0 version: 3.0.0(axios@1.7.9) @@ -68,13 +167,13 @@ importers: version: 10.0.1(eslint@9.18.0(jiti@2.4.1)) eslint-plugin-svelte: specifier: ^2.46.1 - version: 2.46.1(eslint@9.18.0(jiti@2.4.1))(svelte@5.17.4)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3)) + version: 2.46.1(eslint@9.18.0(jiti@2.4.1))(svelte@5.17.4)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) globals: specifier: ^15.14.0 version: 15.14.0 hashconnect: specifier: ^3.0.13 - version: 3.0.13(react@18.3.1) + version: 3.0.13(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10) lucide-svelte: specifier: ^0.471.0 version: 0.471.0(svelte@5.17.4) @@ -110,16 +209,19 @@ importers: version: 8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.3) vite: specifier: ^6.0.7 - version: 6.0.7(@types/node@22.10.6)(jiti@2.4.1) + version: 6.0.7(@types/node@22.10.10)(jiti@2.4.1) vite-plugin-node-polyfills: specifier: ^0.22.0 - version: 0.22.0(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)) + version: 0.22.0(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)) web3: specifier: ^4.16.0 - version: 4.16.0(typescript@5.7.3)(zod@3.24.1) + version: 4.16.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) packages: + '@adraffy/ens-normalize@1.10.0': + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + '@adraffy/ens-normalize@1.10.1': resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} @@ -130,12 +232,152 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@1.2.2': + resolution: {integrity: sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@1.2.2': + resolution: {integrity: sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-lambda@3.734.0': + resolution: {integrity: sha512-ro7xNp2zuc3Qn5gz6TVrb+KD915t4YVlTqhWqSPbOcGdq6H3zSaWyPhD3uZdudd0ejzcu8sBXJqFD2MKWtl/AQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sso@3.734.0': + resolution: {integrity: sha512-oerepp0mut9VlgTwnG5Ds/lb0C0b2/rQ+hL/rF6q+HGKPfGsCuPvFx1GtwGKCXd49ase88/jVgrhcA9OQbz3kg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/core@3.734.0': + resolution: {integrity: sha512-SxnDqf3vobdm50OLyAKfqZetv6zzwnSqwIwd3jrbopxxHKqNIM/I0xcYjD6Tn+mPig+u7iRKb9q3QnEooFTlmg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-env@3.734.0': + resolution: {integrity: sha512-gtRkzYTGafnm1FPpiNO8VBmJrYMoxhDlGPYDVcijzx3DlF8dhWnowuSBCxLSi+MJMx5hvwrX2A+e/q0QAeHqmw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-http@3.734.0': + resolution: {integrity: sha512-JFSL6xhONsq+hKM8xroIPhM5/FOhiQ1cov0lZxhzZWj6Ai3UAjucy3zyIFDr9MgP1KfCYNdvyaUq9/o+HWvEDg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-ini@3.734.0': + resolution: {integrity: sha512-HEyaM/hWI7dNmb4NhdlcDLcgJvrilk8G4DQX6qz0i4pBZGC2l4iffuqP8K6ZQjUfz5/6894PzeFuhTORAMd+cg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-node@3.734.0': + resolution: {integrity: sha512-9NOSNbkPVb91JwaXOhyfahkzAwWdMsbWHL6fh5/PHlXYpsDjfIfT23I++toepNF2nODAJNLnOEHGYIxgNgf6jQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-process@3.734.0': + resolution: {integrity: sha512-zvjsUo+bkYn2vjT+EtLWu3eD6me+uun+Hws1IyWej/fKFAqiBPwyeyCgU7qjkiPQSXqk1U9+/HG9IQ6Iiz+eBw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-sso@3.734.0': + resolution: {integrity: sha512-cCwwcgUBJOsV/ddyh1OGb4gKYWEaTeTsqaAK19hiNINfYV/DO9r4RMlnWAo84sSBfJuj9shUNsxzyoe6K7R92Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.734.0': + resolution: {integrity: sha512-t4OSOerc+ppK541/Iyn1AS40+2vT/qE+MFMotFkhCgCJbApeRF2ozEdnDN6tGmnl4ybcUuxnp9JWLjwDVlR/4g==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-host-header@3.734.0': + resolution: {integrity: sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-logger@3.734.0': + resolution: {integrity: sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.734.0': + resolution: {integrity: sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-user-agent@3.734.0': + resolution: {integrity: sha512-MFVzLWRkfFz02GqGPjqSOteLe5kPfElUrXZft1eElnqulqs6RJfVSpOV7mO90gu293tNAeggMWAVSGRPKIYVMg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/nested-clients@3.734.0': + resolution: {integrity: sha512-iph2XUy8UzIfdJFWo1r0Zng9uWj3253yvW9gljhtu+y/LNmNvSnJxQk1f3D2BC5WmcoPZqTS3UsycT3mLPSzWA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/region-config-resolver@3.734.0': + resolution: {integrity: sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/token-providers@3.734.0': + resolution: {integrity: sha512-2U6yWKrjWjZO8Y5SHQxkFvMVWHQWbS0ufqfAIBROqmIZNubOL7jXCiVdEFekz6MZ9LF2tvYGnOW4jX8OKDGfIw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/types@3.734.0': + resolution: {integrity: sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-endpoints@3.734.0': + resolution: {integrity: sha512-w2+/E88NUbqql6uCVAsmMxDQKu7vsKV0KqhlQb0lL+RCq4zy07yXYptVNs13qrnuTfyX7uPXkXrlugvK9R1Ucg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-locate-window@3.723.0': + resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-user-agent-browser@3.734.0': + resolution: {integrity: sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==} + + '@aws-sdk/util-user-agent-node@3.734.0': + resolution: {integrity: sha512-c6Iinh+RVQKs6jYUFQ64htOU2HUXFQ3TVx+8Tu3EDF19+9vzWi9UukhIMH9rqyyEXIAkk9XL7avt8y2Uyw2dGA==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/util-utf8-browser@3.259.0': + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/runtime@7.26.7': + resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==} + engines: {node: '>=6.9.0'} + + '@balena/dockerignore@1.0.2': + resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} + + '@bytecodealliance/preview2-shim@0.17.0': + resolution: {integrity: sha512-JorcEwe4ud0x5BS/Ar2aQWOQoFzjq/7jcnxYXCvSMh0oRm0dQXzOA+hqLDBnOMks1LLBA7dmiLLsEBl09Yd6iQ==} + '@chainsafe/is-ip@2.0.2': resolution: {integrity: sha512-ndGqEMG1W5WkGagaqOZHpPU172AGdxr+LD15sv3WIUvT5oCFUrG1Y0CW/v2Egwj4JXEvSibaIIIqImsm98y1nA==} '@chainsafe/netmask@2.0.0': resolution: {integrity: sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg==} + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -320,6 +562,10 @@ packages: resolution: {integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@9.19.0': + resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@2.1.5': resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -328,6 +574,9 @@ packages: resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ethereumjs/common@2.5.0': + resolution: {integrity: sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==} + '@ethereumjs/rlp@4.0.1': resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} @@ -338,6 +587,9 @@ packages: engines: {node: '>=18'} hasBin: true + '@ethereumjs/tx@3.3.2': + resolution: {integrity: sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==} + '@ethereumjs/util@8.1.0': resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} engines: {node: '>=14'} @@ -351,6 +603,9 @@ packages: '@ethersproject/abstract-signer@5.7.0': resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + '@ethersproject/address@5.6.1': + resolution: {integrity: sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==} + '@ethersproject/address@5.7.0': resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} @@ -445,6 +700,10 @@ packages: '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + '@grpc/grpc-js@1.12.5': + resolution: {integrity: sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA==} + engines: {node: '>=12.10.0'} + '@grpc/grpc-js@1.8.2': resolution: {integrity: sha512-5cqCjUvDKJWHGeu1prlrFOUmjuML0NequZKJ38PsCkfwIqPnZq4Q9burPP3It7/+46wpl0KsqVN3s6Te3B9Qtw==} engines: {node: ^8.13.0 || >=10.10.0} @@ -551,6 +810,10 @@ packages: '@internationalized/date@3.6.0': resolution: {integrity: sha512-+z6ti+CcJnRlLHok/emGEsWQhe7kfSmEW+/6qCzvKY67YPh7YOBfvc7+/+NXq+zJlbArg30tYpqLjNgcAYv2YQ==} + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -572,6 +835,42 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + + '@ledgerhq/cryptoassets@9.13.0': + resolution: {integrity: sha512-MzGJyc48OGU/FLYGYwEJyfOgbJzlR8XJ9Oo6XpNpNUM1/E5NDqvD72V0D+0uWIJYN3e2NtyqHXShLZDu7P95YA==} + + '@ledgerhq/devices@8.4.4': + resolution: {integrity: sha512-sz/ryhe/R687RHtevIE9RlKaV8kkKykUV4k29e7GAVwzHX1gqG+O75cu1NCJUHLbp3eABV5FdvZejqRUlLis9A==} + + '@ledgerhq/domain-service@1.2.16': + resolution: {integrity: sha512-ppsPEytiHSRgRDJGEfdK3j57tocElhZ9sf5W/6QQ8rXWTJtfoUyL/iOu5PZwgnf6BHUzx/i8dwhLNQegLZ+8PQ==} + + '@ledgerhq/errors@6.19.1': + resolution: {integrity: sha512-75yK7Nnit/Gp7gdrJAz0ipp31CCgncRp+evWt6QawQEtQKYEDfGo10QywgrrBBixeRxwnMy1DP6g2oCWRf1bjw==} + + '@ledgerhq/hw-app-eth@6.33.6': + resolution: {integrity: sha512-QzYvr5FNEWWd70Vg04A2i8CY0mtPgJrrX7/KePabjXrR8NjDyJ5Ej8qSQPBTp2dkR4TGiz5Y7+HIcWpdgYzjzg==} + + '@ledgerhq/hw-transport-mocker@6.29.4': + resolution: {integrity: sha512-CLDIpQ/eqU8qrCYGY9MyHa+oMgqs6PuNkWtqbcaS4AzNx8L/9bv7y8CZwCjxX6oB/2ZEq42RlL6oZ6Ou3oHnoQ==} + + '@ledgerhq/hw-transport-node-hid-noevents@6.30.5': + resolution: {integrity: sha512-nOPbhFU87LgLERVAQ+HhxV8E8c+7d8ptllkgiJUc4QwL2z9zkIOAEtgdvCaZ066Oi9XGnln/GF1oAgByYnYDPw==} + + '@ledgerhq/hw-transport-node-hid@6.29.5': + resolution: {integrity: sha512-2bAp4K50V1kdCufU9JdQPcw4aLyvA+yQRJU/X39B+PC+rnis40gEbqNh0henhzv876sXdbNk6G/MkDWXpwDIow==} + + '@ledgerhq/hw-transport@6.31.4': + resolution: {integrity: sha512-6c1ir/cXWJm5dCWdq55NPgCJ3UuKuuxRvf//Xs36Bq9BwkV2YaRQhZITAkads83l07NAdR16hkTWqqpwFMaI6A==} + + '@ledgerhq/logs@6.12.0': + resolution: {integrity: sha512-ExDoj1QV5eC6TEbMdLUMMk9cfvNKhhv5gXol4SmULRVCx/3iyCPhJ74nsb3S0Vb+/f+XujBEj3vQn5+cwS0fNA==} + + '@ledgerhq/types-live@6.57.0': + resolution: {integrity: sha512-rgbWDSak3bgy7F4F6zjZzgNLoi4sQLLlJ4zHMtcVge3qVC6mirYkAetekfgqPif8CVbCXMQjX2qxo9u4CTstoQ==} + '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -581,6 +880,30 @@ packages: '@lit/reactive-element@1.6.3': resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} + '@matterlabs/hardhat-zksync-deploy@1.6.0': + resolution: {integrity: sha512-yaOfhw7hmLOriBc+TnHrFOVKyi79XFqJN5D1Z4T6CadaSNLeq7pgBV81kkgVzaCJVoA/La2RGxPowsG7riZGbw==} + peerDependencies: + ethers: ^6.12.2 + hardhat: ^2.22.5 + zksync-ethers: ^6.11.2 + + '@matterlabs/hardhat-zksync-ethers@1.2.1': + resolution: {integrity: sha512-J/ZpGx2Ig9AUxsKbE4IqpQ6hetqO7RPRFaSrdIcEWzurSYWb40Ih/HkQD03f5cSAjzhQEKaNlyVofefqLGkdZg==} + peerDependencies: + ethers: ^6.12.2 + zksync-ethers: ^6.11.2 + + '@matterlabs/hardhat-zksync-solc@1.2.5': + resolution: {integrity: sha512-iZyznWl1Hoe/Z46hnUe1s2drBZBjJOS/eN+Ql2lIBX9B6NevBl9DYzkKzH5HEIMCLGnX9sWpRAJqUQJWy9UB6w==} + peerDependencies: + hardhat: ^2.22.5 + + '@matterlabs/hardhat-zksync-verify@1.7.1': + resolution: {integrity: sha512-FtibELgllkyAZORDW4/s/7XSC5DaqAXG0KXMqGipQyXuIXQ9l1kpaHMpoEtHvQL7xxmkgZqCcSZgATnKl91nDg==} + peerDependencies: + '@nomicfoundation/hardhat-verify': ^2.0.8 + hardhat: ^2.22.5 + '@melt-ui/svelte@0.86.2': resolution: {integrity: sha512-wRVN603oIt1aXvx2QRmKqVDJgTScSvr/WJLLokkD8c4QzHgn6pfpPtUKmhV6Dvkk+OY89OG/1Irkd6ouA50Ztw==} peerDependencies: @@ -732,37 +1055,50 @@ packages: ethers: ^6.1.0 hardhat: ^2.0.0 + '@nomicfoundation/hardhat-foundry@1.1.3': + resolution: {integrity: sha512-30Ezc3hlZ4pC5Z/9W9euW5uoPKKQQKaecLETHJH8BPpd30zYOooy6HfjmcTY1/taOQjlwirOdNO7tHlje8Qcgw==} + peerDependencies: + hardhat: ^2.17.2 + + '@nomicfoundation/hardhat-ignition-ethers@0.15.9': + resolution: {integrity: sha512-9PwwgLv3z2ec3B26mK0IjiFezHFFBcBcs1qKaRu8SanARE4b7RvrfiLIy8ZXE7HaxgPt32kSsQzehhzAwAIj1Q==} + peerDependencies: + '@nomicfoundation/hardhat-ethers': ^3.0.4 + '@nomicfoundation/hardhat-ignition': ^0.15.9 + '@nomicfoundation/ignition-core': ^0.15.9 + ethers: ^6.7.0 + hardhat: ^2.18.0 + + '@nomicfoundation/hardhat-ignition@0.15.9': + resolution: {integrity: sha512-lSWqhaDOBt6gsqMadkRLvH6HdoFV1v8/bx7z+12cghaOloVwwn48CPoTH2iXXnkqilPGw8rdH5eVTE6UM+2v6Q==} + peerDependencies: + '@nomicfoundation/hardhat-verify': ^2.0.1 + hardhat: ^2.18.0 + + '@nomicfoundation/hardhat-ledger@1.0.3': + resolution: {integrity: sha512-AwdfyZbF1p87xDTTzJJbnTlu3fyDSkyYjtkC5L5CZ9LYOXpsEp4cuUo26v0oGl6XutPN31HxUXbBbNPfhGcgFg==} + peerDependencies: + hardhat: ^2.16.0 + '@nomicfoundation/hardhat-network-helpers@1.0.12': resolution: {integrity: sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA==} peerDependencies: hardhat: ^2.9.5 - '@nomicfoundation/hardhat-toolbox@4.0.0': - resolution: {integrity: sha512-jhcWHp0aHaL0aDYj8IJl80v4SZXWMS1A2XxXa1CA6pBiFfJKuZinCkO6wb+POAt0LIfXB3gA3AgdcOccrcwBwA==} - peerDependencies: - '@nomicfoundation/hardhat-chai-matchers': ^2.0.0 - '@nomicfoundation/hardhat-ethers': ^3.0.0 - '@nomicfoundation/hardhat-network-helpers': ^1.0.0 - '@nomicfoundation/hardhat-verify': ^2.0.0 - '@typechain/ethers-v6': ^0.5.0 - '@typechain/hardhat': ^9.0.0 - '@types/chai': ^4.2.0 - '@types/mocha': '>=9.1.0' - '@types/node': '>=16.0.0' - chai: ^4.2.0 - ethers: ^6.4.0 - hardhat: ^2.11.0 - hardhat-gas-reporter: ^1.0.8 - solidity-coverage: ^0.8.1 - ts-node: '>=8.0.0' - typechain: ^8.3.0 - typescript: '>=4.5.0' - '@nomicfoundation/hardhat-verify@2.0.12': resolution: {integrity: sha512-Lg3Nu7DCXASQRVI/YysjuAX2z8jwOCbS0w5tz2HalWGSTZThqA0v9N0v0psHbKNqzPJa8bNOeapIVSziyJTnAg==} peerDependencies: hardhat: ^2.0.4 + '@nomicfoundation/ignition-core@0.15.9': + resolution: {integrity: sha512-X8W+7UP/UQPorpHUnGvA1OdsEr/edGi8tDpNwEqzaLm83FMZVbRWdOsr3vNICHN2XMzNY/xIm18Cx7xGKL2PQw==} + + '@nomicfoundation/ignition-ui@0.15.9': + resolution: {integrity: sha512-8lzbT7gpJ5PoowPQDQilkwdyqBviUKDMoHp/5rhgnwG1bDslnCS+Lxuo6s9R2akWu9LtEL14dNyqQb6WsURTag==} + + '@nomicfoundation/slang@0.18.3': + resolution: {integrity: sha512-YqAWgckqbHM0/CZxi9Nlf4hjk9wUNLC9ngWCWBiqMxPIZmzsVKYuChdlrfeBPQyvQQBoOhbx+7C1005kLVQDZQ==} + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': resolution: {integrity: sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==} engines: {node: '>= 12'} @@ -795,6 +1131,65 @@ packages: resolution: {integrity: sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==} engines: {node: '>= 12'} + '@nomiclabs/hardhat-docker@2.0.2': + resolution: {integrity: sha512-XgGEpRT3wlA1VslyB57zyAHV+oll8KnV1TjwnxxC1tpAL04/lbdwpdO5KxInVN8irMSepqFpsiSkqlcnvbE7Ng==} + + '@npmcli/agent@2.2.2': + resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@npmcli/fs@3.1.1': + resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/redact@2.0.1': + resolution: {integrity: sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@openzeppelin/contracts@5.2.0': + resolution: {integrity: sha512-bxjNie5z89W1Ea0NZLZluFh8PrFNn9DH8DQlujEok2yjsOlraUPKID5p1Wk3qdNbf6XkQ1Os2RvfiHrrXLHWKA==} + + '@openzeppelin/defender-sdk-base-client@2.1.0': + resolution: {integrity: sha512-YxrOgjESsbmxArLoe8kRA6lKwz/Qm/OtaZBfquzAg+w0jgOG9ogFuXA3NI6w2sVw1w/PzI1dWKe30u62p5vLXw==} + + '@openzeppelin/defender-sdk-deploy-client@2.1.0': + resolution: {integrity: sha512-tg1EIqFVQ59UNbEV7a5XHVvsGM1dL0tVrwXMB4EzlDnDRS70l6jjeCgl6d0SUQqK8Cob1AzjdLn9+Ax+oFcceQ==} + + '@openzeppelin/defender-sdk-network-client@2.1.0': + resolution: {integrity: sha512-ebtSmihHMlcjFTtXyB/IFr+CjCcjdW0nV+ijG24SNnRvOaHn2BNORs6CwhdEZc8ok9YHWnKouGKdfzmxX+mp/A==} + + '@openzeppelin/hardhat-upgrades@3.9.0': + resolution: {integrity: sha512-7YYBSxRnO/X+tsQkVgtz3/YbwZuQPjbjQ3m0A/8+vgQzdPfulR93NaFKgZfMonnrriXb5O/ULjIDPI+8nuqtyQ==} + hasBin: true + peerDependencies: + '@nomicfoundation/hardhat-ethers': ^3.0.0 + '@nomicfoundation/hardhat-verify': ^2.0.0 + ethers: ^6.6.0 + hardhat: ^2.0.2 + peerDependenciesMeta: + '@nomicfoundation/hardhat-verify': + optional: true + + '@openzeppelin/upgrades-core@1.42.1': + resolution: {integrity: sha512-8qnz2XfQrco8R8u9NjV+KiSLrVn7DnWFd+3BuhTUjhVy0bzCSu2SMKCVpZLtXbxf4f2dpz8jYPQYRa6s23PhLA==} + hasBin: true + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} + '@polka/url@1.0.0-next.28': resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} @@ -947,12 +1342,18 @@ packages: '@scure/bip32@1.1.5': resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} + '@scure/bip32@1.3.2': + resolution: {integrity: sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==} + '@scure/bip32@1.4.0': resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} '@scure/bip39@1.1.1': resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} + '@scure/bip39@1.2.1': + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} + '@scure/bip39@1.3.0': resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} @@ -984,8 +1385,220 @@ packages: resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} engines: {node: '>=6'} - '@solidity-parser/parser@0.14.5': - resolution: {integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==} + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@sindresorhus/is@5.6.0': + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@11.2.2': + resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==} + + '@sinonjs/fake-timers@13.0.5': + resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} + + '@sinonjs/samsam@8.0.2': + resolution: {integrity: sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==} + + '@sinonjs/text-encoding@0.7.3': + resolution: {integrity: sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==} + + '@smithy/abort-controller@4.0.1': + resolution: {integrity: sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==} + engines: {node: '>=18.0.0'} + + '@smithy/config-resolver@4.0.1': + resolution: {integrity: sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==} + engines: {node: '>=18.0.0'} + + '@smithy/core@3.1.1': + resolution: {integrity: sha512-hhUZlBWYuh9t6ycAcN90XOyG76C1AzwxZZgaCVPMYpWqqk9uMFo7HGG5Zu2cEhCJn7DdOi5krBmlibWWWPgdsw==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.0.1': + resolution: {integrity: sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-codec@4.0.1': + resolution: {integrity: sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-browser@4.0.1': + resolution: {integrity: sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-config-resolver@4.0.1': + resolution: {integrity: sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-node@4.0.1': + resolution: {integrity: sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-universal@4.0.1': + resolution: {integrity: sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.0.1': + resolution: {integrity: sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-node@4.0.1': + resolution: {integrity: sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==} + engines: {node: '>=18.0.0'} + + '@smithy/invalid-dependency@4.0.1': + resolution: {integrity: sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@4.0.0': + resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-content-length@4.0.1': + resolution: {integrity: sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-endpoint@4.0.2': + resolution: {integrity: sha512-Z9m67CXizGpj8CF/AW/7uHqYNh1VXXOn9Ap54fenWsCa0HnT4cJuE61zqG3cBkTZJDCy0wHJphilI41co/PE5g==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.0.3': + resolution: {integrity: sha512-TiKwwQTwUDeDtwWW8UWURTqu7s6F3wN2pmziLU215u7bqpVT9Mk2oEvURjpRLA+5XeQhM68R5BpAGzVtomsqgA==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-serde@4.0.1': + resolution: {integrity: sha512-Fh0E2SOF+S+P1+CsgKyiBInAt3o2b6Qk7YOp2W0Qx2XnfTdfMuSDKUEcnrtpxCzgKJnqXeLUZYqtThaP0VGqtA==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-stack@4.0.1': + resolution: {integrity: sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==} + engines: {node: '>=18.0.0'} + + '@smithy/node-config-provider@4.0.1': + resolution: {integrity: sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.0.2': + resolution: {integrity: sha512-X66H9aah9hisLLSnGuzRYba6vckuFtGE+a5DcHLliI/YlqKrGoxhisD5XbX44KyoeRzoNlGr94eTsMVHFAzPOw==} + engines: {node: '>=18.0.0'} + + '@smithy/property-provider@4.0.1': + resolution: {integrity: sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@5.0.1': + resolution: {integrity: sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-builder@4.0.1': + resolution: {integrity: sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.0.1': + resolution: {integrity: sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.0.1': + resolution: {integrity: sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.0.1': + resolution: {integrity: sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.0.1': + resolution: {integrity: sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.1.2': + resolution: {integrity: sha512-0yApeHWBqocelHGK22UivZyShNxFbDNrgREBllGh5Ws0D0rg/yId/CJfeoKKpjbfY2ju8j6WgDUGZHYQmINZ5w==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.1.0': + resolution: {integrity: sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.0.1': + resolution: {integrity: sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.0.0': + resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-browser@4.0.0': + resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-node@4.0.0': + resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@4.0.0': + resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + engines: {node: '>=18.0.0'} + + '@smithy/util-config-provider@4.0.0': + resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-browser@4.0.3': + resolution: {integrity: sha512-7c5SF1fVK0EOs+2EOf72/qF199zwJflU1d02AevwKbAUPUZyE9RUZiyJxeUmhVxfKDWdUKaaVojNiaDQgnHL9g==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.0.3': + resolution: {integrity: sha512-CVnD42qYD3JKgDlImZ9+On+MqJHzq9uJgPbMdeBE8c2x8VJ2kf2R3XO/yVFx+30ts5lD/GlL0eFIShY3x9ROgQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.0.1': + resolution: {integrity: sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-hex-encoding@4.0.0': + resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-middleware@4.0.1': + resolution: {integrity: sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.0.1': + resolution: {integrity: sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.0.2': + resolution: {integrity: sha512-0eZ4G5fRzIoewtHtwaYyl8g2C+osYOT4KClXgfdNEDAgkbe2TYPqcnw4GAWabqkZCax2ihRGPe9LZnsPdIUIHA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-uri-escape@4.0.0': + resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@4.0.0': + resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + engines: {node: '>=18.0.0'} + + '@smithy/util-waiter@4.0.2': + resolution: {integrity: sha512-piUTHyp2Axx3p/kc2CIJkYSv0BAaheBQmbACZgQSSfWUumWNW+R1lL+H9PDBxKJkvOeEX+hKYEFiwO8xagL8AQ==} + engines: {node: '>=18.0.0'} '@solidity-parser/parser@0.19.0': resolution: {integrity: sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA==} @@ -1076,13 +1689,128 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@tikz/hedera-mirror-node-ts@3.0.0': - resolution: {integrity: sha512-rv/3B8w7C6FS70OyUv8od4+K6ruC4AI4Da9IOSHvxMbc/5z0Jq91ZAgZPd6aQNkK8b4agxsfdtudhzj4t34zdg==} - peerDependencies: - axios: ^1.7.4 + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@tenderly/api-client@1.1.0': + resolution: {integrity: sha512-kyye7TQ+RbDbJ7bSUjNf/O9fTtRYNUDIEUZQSrmNonowMw5/EpNi664eWaOoC00NEzxgttVrtme/GHvIOu7rNg==} + peerDependencies: + ts-node: '*' + typescript: '*' + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + + '@tenderly/hardhat-integration@1.1.1': + resolution: {integrity: sha512-VHa380DrKv+KA1N4vbJGLDoghbVqMZ4wEozbxRfCzlkSs5V1keNgudRSUFK6lgfKhkoAWRO+dA8MZYnJOvUOkA==} + peerDependencies: + hardhat: ^2.22.6 + + '@tenderly/hardhat-tenderly@2.5.2': + resolution: {integrity: sha512-JCG1UkFBRZE2fL8g4jfbKUsju7gK3Dg6CxksJO9Db9ckM1EkL4wCY9G5KTLwh/UL0cT04J8ZK1RmaZ6hG8wfKA==} + + '@tikz/hedera-mirror-node-ts@3.0.0': + resolution: {integrity: sha512-rv/3B8w7C6FS70OyUv8od4+K6ruC4AI4Da9IOSHvxMbc/5z0Jq91ZAgZPd6aQNkK8b4agxsfdtudhzj4t34zdg==} + peerDependencies: + axios: ^1.7.4 + + '@truffle/compile-common@0.9.8': + resolution: {integrity: sha512-DTpiyo32t/YhLI1spn84D3MHYHrnoVqO+Gp7ZHrYNwDs86mAxtNiH5lsVzSb8cPgiqlvNsRCU9nm9R0YmKMTBQ==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/compile-solidity@6.0.79': + resolution: {integrity: sha512-sdKYTrXwNr70p17MOzkV277ayNA7evECPFRGTvi6qDea697EXTqq694coH1ffmSjArhrqpinMMenF1v421A/AA==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/config@1.3.61': + resolution: {integrity: sha512-L4uyG47V+k0NrSoVJ9D+hp2jcMstihW1QlNuXiu5g3mU24BjrozlJT34DFkczh/TtRceLjdrQJKA8WJCMICutw==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/contract-sources@0.2.1': + resolution: {integrity: sha512-C7l+lySN2V327s0CAX52mN4h3ag1WpIn6l45hsB92GKhY1t5h5txPUXvuKamQpalQWCTLfMS4+YbtN0AxPxCug==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/dashboard-hardhat-plugin@0.2.15': + resolution: {integrity: sha512-xYmth6dT/L2EIRjgO6jchXFRcaPO7ZTbZzoX6QibEKm21GzZTNPPmPOXgcZF7LW9gDa+9qzJqfvs1RLiiHgQGg==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + peerDependencies: + hardhat: ^2.17.1 + + '@truffle/dashboard-message-bus-client@0.1.12': + resolution: {integrity: sha512-pI9G0La9tTstb2J2wxUZIMx6H+ZF0XBlsGN3HBkffr4edT0oT12WMCK9GxmKE22Q5VnpXl7wGjatRSEx0C9qDQ==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/dashboard-message-bus-common@0.1.7': + resolution: {integrity: sha512-jN7q8LBmwQRldSzT/YJE33mnDLrp3EFFDuZyLwtQGInlfcRTXcr5yPY42jxr3Ln19dQe2Chx3I6dWtDByeKLIQ==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/error@0.2.2': + resolution: {integrity: sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/events@0.1.25': + resolution: {integrity: sha512-5elJxNXPVuXDMOoIcCVox0sz95ovRhRbte/H9ht18vyOvtualb4bTjwYyRoWw6Y7j0pom0tPI3OLZWqCdKQNdA==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/expect@0.1.7': + resolution: {integrity: sha512-YWLdtIDA2Xl7RdkmurQw2KCV/b59KJJ2Csm4GYNPAsnngvVOH6qvHjqm1JNyDzBN7AzqT+Tb3s8RdD+EZC3HJw==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/from-hardhat@0.2.20': + resolution: {integrity: sha512-AcdsPP5D4+dji2l3EHMmR8mNa04XP3zri8l2OmAHowpfj0r19/c2HBniY9FvoXza3tgq4p17DFccNKL49QUATQ==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/interface-adapter@0.5.37': + resolution: {integrity: sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/profiler@0.1.53': + resolution: {integrity: sha512-3+wfDaa0JdHlZpjJaNjgsi6vJfeq4osPz146uNYhDH5ilnDGAG1OMrjnuCbkpG3/oXycKsUZFMnVtkbCbbaISw==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/promise-tracker@0.1.7': + resolution: {integrity: sha512-NiPXNJvdei8MRZRUjEZoL0Y7TPDR1TaeCfGUgB3md6Q7TBiqSKo2p5OT36JO106B2j57SLmXOiDn8fLb+u2sjA==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/provider@0.3.13': + resolution: {integrity: sha512-W9yZO0ZUwA0LhFvf7+NNNXVSCOd4x5pTbFiXUVURjyqp7f4YooLAqnlLPSpV+6qwIwThc+86CeLlOiFslYdDIA==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@truffle/spinners@0.2.5': + resolution: {integrity: sha512-emYyLEuoY62MQV/RNjyVIuTPEjMyIA0WiYMG2N3yfh8OSjD/TC0HRc2oyDWtVkNNox/5D2tH2m5fFB8HOt80FQ==} + engines: {node: ^16.20 || ^18.16 || >=20} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + '@trufflesuite/spinnies@0.1.1': + resolution: {integrity: sha512-jltEtmFJj6xmQqr85gP8OqBHCEiId+zw+uAsb3DyLLRD17O6sySW6Afa2Z/jpzSafj+32ssDfLJ+c0of1NLqcA==} + + '@ts-morph/common@0.23.0': + resolution: {integrity: sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} '@tsconfig/node12@1.0.11': resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} @@ -1114,15 +1842,15 @@ packages: '@types/bn.js@5.1.6': resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/chai-as-promised@7.1.8': resolution: {integrity: sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==} '@types/chai@4.3.20': resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} - '@types/concat-stream@1.6.1': - resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} - '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} @@ -1132,15 +1860,18 @@ packages: '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/form-data@0.0.33': - resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} - '@types/glob@7.2.0': resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + '@types/lru-cache@5.1.1': resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} @@ -1150,18 +1881,15 @@ packages: '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} - '@types/node@10.17.60': - resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.10.6': - resolution: {integrity: sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==} + '@types/node@22.10.10': + resolution: {integrity: sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==} '@types/node@22.7.5': resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} - '@types/node@8.10.66': - resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} - '@types/pbkdf2@3.1.2': resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} @@ -1171,12 +1899,18 @@ packages: '@types/qs@6.9.18': resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/secp256k1@4.0.6': resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + '@types/w3c-web-usb@1.0.10': + resolution: {integrity: sha512-CHgUI5kTc/QLMP8hODUHhge0D4vx+9UiAwIGiT0sTy/B2XpdX1U5rJt6JSISgr6ikRT7vxV9EVAFeYZqUnl1gQ==} + '@types/ws@8.5.3': resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} @@ -1188,6 +1922,14 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/eslint-plugin@8.21.0': + resolution: {integrity: sha512-eTH+UOR4I7WbdQnG4Z48ebIA6Bgi7WO8HvFEneeYBxG8qCOYgTOFPSg6ek9ITIDvGjDQzWHcoWHCDO2biByNzA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/parser@8.20.0': resolution: {integrity: sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1195,10 +1937,21 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/parser@8.21.0': + resolution: {integrity: sha512-Wy+/sdEH9kI3w9civgACwabHbKl+qIOu0uFZ9IMKzX3Jpv9og0ZBJrZExGrPpFAY7rWsXuxs5e7CPPP17A4eYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/scope-manager@8.20.0': resolution: {integrity: sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.21.0': + resolution: {integrity: sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/type-utils@8.20.0': resolution: {integrity: sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1206,16 +1959,33 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/type-utils@8.21.0': + resolution: {integrity: sha512-95OsL6J2BtzoBxHicoXHxgk3z+9P3BEcQTpBKriqiYzLKnM2DeSqs+sndMKdamU8FosiadQFT3D+BSL9EKnAJQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/types@8.20.0': resolution: {integrity: sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.21.0': + resolution: {integrity: sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.20.0': resolution: {integrity: sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/typescript-estree@8.21.0': + resolution: {integrity: sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/utils@8.20.0': resolution: {integrity: sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1223,10 +1993,21 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/utils@8.21.0': + resolution: {integrity: sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/visitor-keys@8.20.0': resolution: {integrity: sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.21.0': + resolution: {integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@walletconnect/auth-client@2.1.2': resolution: {integrity: sha512-ubJLn+vGb8sTdBFX6xAh4kjR5idrtS3RBngQWaJJJpEPBQmxMb8pM2q0FIRs8Is4K6jKy+uEhusMV+7ZBmTzjw==} engines: {node: '>=16'} @@ -1364,6 +2145,10 @@ packages: '@walletconnect/window-metadata@1.0.1': resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} + JSONStream@1.3.2: + resolution: {integrity: sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA==} + hasBin: true + abbrev@1.0.9: resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} @@ -1376,10 +2161,28 @@ packages: zod: optional: true + abitype@1.0.0: + resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + abortcontroller-polyfill@1.7.8: + resolution: {integrity: sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1413,16 +2216,31 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + amazon-cognito-identity-js@6.3.12: + resolution: {integrity: sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg==} + amdefine@1.0.1: resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} engines: {node: '>=0.4.2'} @@ -1438,10 +2256,6 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-regex@3.0.1: - resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} - engines: {node: '>=4'} - ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} @@ -1450,6 +2264,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -1458,8 +2276,13 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - antlr4ts@0.5.0-alpha.4: - resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + antlr4@4.13.2: + resolution: {integrity: sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==} + engines: {node: '>=16'} anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} @@ -1486,34 +2309,46 @@ packages: resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==} engines: {node: '>=8'} + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - array-uniq@1.0.3: - resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} - engines: {node: '>=0.10.0'} - - asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - asn1.js@4.10.1: resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + asn1js@3.0.5: resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} engines: {node: '>=12.0.0'} + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + ast-parents@0.0.1: + resolution: {integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==} + astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} + async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + async@1.5.2: resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} @@ -1528,10 +2363,35 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} + atomically@1.7.0: + resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} + engines: {node: '>=10.12.0'} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + + axios-retry@3.9.1: + resolution: {integrity: sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w==} + + axios@0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + + axios@0.27.2: + resolution: {integrity: sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==} + + axios@1.5.0: + resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==} + + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} + axios@1.7.9: resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} @@ -1548,6 +2408,9 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + bech32@1.1.4: resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} @@ -1558,9 +2421,21 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bl@1.2.3: + resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + blakejs@1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + bn.js@4.11.6: resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} @@ -1570,6 +2445,13 @@ packages: bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + boxen@5.1.2: resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} engines: {node: '>=10'} @@ -1587,6 +2469,9 @@ packages: brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + brotli-wasm@2.0.1: + resolution: {integrity: sha512-+3USgYsC7bzb5yU0/p2HnnynZl0ak0E6uoIm4UW4Aby/8s8HFCq6NCfrrf1E9c3O8OCSzq3oYO1tUVqIi61Nww==} + browser-resolve@2.0.0: resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} @@ -1631,15 +2516,29 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer-to-arraybuffer@0.0.5: + resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==} + buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + buffer@4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + + buildcheck@0.0.6: + resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==} + engines: {node: '>=10.0.0'} + builtin-status-codes@3.0.0: resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} @@ -1647,6 +2546,30 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + cacache@18.0.4: + resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==} + engines: {node: ^16.14.0 || >=18.0.0} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-lookup@6.1.0: + resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==} + engines: {node: '>=10.6.0'} + + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + call-bind-apply-helpers@1.0.1: resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} engines: {node: '>= 0.4'} @@ -1674,10 +2597,18 @@ packages: caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + cbor@10.0.3: + resolution: {integrity: sha512-72Jnj81xMsqepqdcSdf2+fflz/UDsThOHy5hj2MW5F5xzHL8Oa0KQ6I6V9CwVUPxg5pf+W9xp6W2KilaRXWWtw==} + engines: {node: '>=18'} + cbor@8.1.0: resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} engines: {node: '>=12.19'} + cbor@9.0.2: + resolution: {integrity: sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==} + engines: {node: '>=16'} + chai-as-promised@7.1.2: resolution: {integrity: sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==} peerDependencies: @@ -1709,13 +2640,28 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + cids@0.7.5: + resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==} + engines: {node: '>=4.0.0', npm: '>=3.0.0'} + deprecated: This module has been superseded by the multiformats module + cipher-base@1.0.6: resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} engines: {node: '>= 0.10'} + class-is@1.1.0: + resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -1724,10 +2670,18 @@ packages: resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} engines: {node: '>=6'} - cli-table3@0.5.1: - resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + cliui@5.0.0: resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} @@ -1741,10 +2695,20 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + code-block-writer@13.0.3: + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -1780,10 +2744,21 @@ packages: resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==} engines: {node: '>=8.0.0'} + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1791,6 +2766,13 @@ packages: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} + conf@10.2.0: + resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} + engines: {node: '>=12'} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + consola@3.4.0: resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} engines: {node: ^14.18.0 || >=16.10.0} @@ -1801,9 +2783,23 @@ packages: constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-hash@2.5.2: + resolution: {integrity: sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + cookie-es@1.2.2: resolution: {integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==} + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} @@ -1812,12 +2808,36 @@ packages: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + cpu-features@0.0.10: + resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} + engines: {node: '>=10.0.0'} + crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} @@ -1835,6 +2855,9 @@ packages: create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + cross-fetch@4.1.0: resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} @@ -1866,6 +2889,14 @@ packages: engines: {node: '>=4'} hasBin: true + d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -1876,6 +2907,26 @@ packages: death@1.1.0: resolution: {integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==} + debounce-fn@4.0.0: + resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} + engines: {node: '>=10'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -1897,6 +2948,14 @@ packages: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} + decompress-response@3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + deep-eql@4.1.4: resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} engines: {node: '>=6'} @@ -1912,10 +2971,21 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -1923,10 +2993,19 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + delete-empty@3.0.0: + resolution: {integrity: sha512-ZUyiwo76W+DYnKsL3Kim6M/UOavPdBJgDYWOmuQhYaZvJH0AXAHbUNyEDtRbBra8wqqr686+63/0azfEk1ebUQ==} + engines: {node: '>=10'} + hasBin: true + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -1941,12 +3020,20 @@ packages: destr@2.0.3: resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-browser@5.2.0: resolution: {integrity: sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA==} detect-browser@5.3.0: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + devalue@5.1.1: resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} @@ -1975,10 +3062,33 @@ packages: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} + docker-modem@1.0.9: + resolution: {integrity: sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw==} + engines: {node: '>= 0.8'} + + docker-modem@5.0.6: + resolution: {integrity: sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==} + engines: {node: '>= 8.0'} + + dockerode@2.5.8: + resolution: {integrity: sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw==} + engines: {node: '>= 0.8'} + + dockerode@4.0.4: + resolution: {integrity: sha512-6GYP/EdzEY50HaOxTVTJ2p+mB5xDHTMJhS+UoGrVyS6VC+iQRh7kZ4FRpUYq6nziby7hPqWhOrFFUFTMUZJJ5w==} + engines: {node: '>= 8.0'} + + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + domain-browser@4.22.0: resolution: {integrity: sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==} engines: {node: '>=10'} + dot-prop@6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} + dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} @@ -1990,6 +3100,18 @@ packages: duplexify@4.1.3: resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + eip55@2.1.1: + resolution: {integrity: sha512-WcagVAmNu2Ww2cDUfzuWVntYwFxbvZ5MvIyLZpMjTTkjD6sCvkGOiS86jTppzu9/gWsc8isLHAeMBWK02OnZmA==} + elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -1999,15 +3121,33 @@ packages: elliptic@6.6.1: resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + emittery@0.4.1: + resolution: {integrity: sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==} + engines: {node: '>=6'} + emoji-regex@7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encode-utf8@1.0.3: resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -2019,6 +3159,12 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -2031,6 +3177,20 @@ packages: resolution: {integrity: sha512-BPOBuyUF9QIVhuNLhbToCLHP6+0MHwZ7xLBkPPCZqK4JmpJgGnv10035STzzQwFpqdzNFMB3irvDI63IagvDwA==} engines: {node: '>= 0.4'} + es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + + es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + esbuild@0.24.2: resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} engines: {node: '>=18'} @@ -2040,6 +3200,9 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -2101,9 +3264,23 @@ packages: jiti: optional: true + eslint@9.19.0: + resolution: {integrity: sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + esm-env@1.2.2: resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + espree@10.3.0: resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2148,13 +3325,18 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - eth-gas-reporter@0.2.27: - resolution: {integrity: sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==} - peerDependencies: - '@codechecks/client': ^0.1.0 - peerDependenciesMeta: - '@codechecks/client': - optional: true + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eth-ens-namehash@2.0.8: + resolution: {integrity: sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==} + + eth-lib@0.1.29: + resolution: {integrity: sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==} + + eth-lib@0.2.8: + resolution: {integrity: sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==} ethereum-bloom-filters@1.2.0: resolution: {integrity: sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==} @@ -2179,11 +3361,14 @@ packages: resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} engines: {node: '>=10.0.0'} + ethers@4.0.49: + resolution: {integrity: sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==} + ethers@5.7.2: resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} - ethers@6.13.4: - resolution: {integrity: sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA==} + ethers@6.13.5: + resolution: {integrity: sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ==} engines: {node: '>=14.0.0'} ethjs-unit@0.1.6: @@ -2194,10 +3379,16 @@ packages: resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} engines: {node: '>=6.5.0', npm: '>=3'} + event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} + eventemitter3@4.0.4: + resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==} + eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -2208,12 +3399,36 @@ packages: evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - fast-copy@3.0.2: - resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + fast-base64-decode@1.0.0: + resolution: {integrity: sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==} + + fast-copy@3.0.2: + resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -2234,6 +3449,10 @@ packages: fast-uri@3.0.5: resolution: {integrity: sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==} + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true + fastq@1.18.0: resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} @@ -2253,6 +3472,9 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -2261,10 +3483,18 @@ packages: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + find-replace@3.0.0: resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} engines: {node: '>=4.0.0'} + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} @@ -2288,6 +3518,9 @@ packages: flatted@3.3.2: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + fmix@0.1.0: + resolution: {integrity: sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==} + focus-trap@7.6.4: resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==} @@ -2303,8 +3536,22 @@ packages: for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - form-data@2.5.2: - resolution: {integrity: sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + form-data-encoder@1.7.1: + resolution: {integrity: sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==} + + form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + + form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} form-data@4.0.1: @@ -2315,9 +3562,31 @@ packages: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + fp-ts@1.19.3: resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fs-extra@4.0.3: + resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} + fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -2330,8 +3599,16 @@ packages: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} - fs-readdir-recursive@1.1.0: - resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} + fs-minipass@1.2.7: + resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs-minipass@3.0.3: + resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -2355,18 +3632,28 @@ packages: resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} engines: {node: '>= 0.4'} - get-port@3.2.0: - resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} - engines: {node: '>=4'} - get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + ghost-testrpc@0.0.2: resolution: {integrity: sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==} hasBin: true + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2375,6 +3662,10 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + glob@5.0.15: resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} deprecated: Glob versions prior to v9 are no longer supported @@ -2400,6 +3691,9 @@ packages: resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} engines: {node: '>=6'} + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -2422,6 +3716,21 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + got@12.1.0: + resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==} + engines: {node: '>=14.16'} + + got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -2436,10 +3745,33 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - hardhat-gas-reporter@1.0.10: - resolution: {integrity: sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==} + har-schema@2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + + har-validator@5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + + hardhat-abi-exporter@2.10.1: + resolution: {integrity: sha512-X8GRxUTtebMAd2k4fcPyVnCdPa6dYK4lBsrwzKP5yiSq4i+WadWPIumaLfce53TUf/o2TnLpLOduyO1ylE2NHQ==} + engines: {node: '>=14.14.0'} peerDependencies: - hardhat: ^2.0.2 + hardhat: ^2.0.0 + + hardhat-contract-sizer@2.10.0: + resolution: {integrity: sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA==} + peerDependencies: + hardhat: ^2.0.0 + + hardhat-deploy@0.11.45: + resolution: {integrity: sha512-aC8UNaq3JcORnEUIwV945iJuvBwi65tjHVDU3v6mOcqik7WAzHVCJ7cwmkkipsHrWysrB5YvGF1q9S1vIph83w==} + + hardhat-gas-reporter@2.2.2: + resolution: {integrity: sha512-xlg3d00wrgUvP2S5tw3Zf6nO7OyS5crK3P6/ZP69i24pz4grM+6oFHGW/eJPSGqiDWBYX+gKp9XoqP4rwRXrdQ==} + peerDependencies: + hardhat: ^2.16.0 hardhat@2.22.18: resolution: {integrity: sha512-2+kUz39gvMo56s75cfLBhiFedkQf+gXdrwCcz4R/5wW0oBdwiyfj2q9BIkMoaA0WIGYYMU2I1Cc4ucTunhfjzw==} @@ -2484,6 +3816,9 @@ packages: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} engines: {node: '>=4'} + hash.js@1.1.3: + resolution: {integrity: sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==} + hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} @@ -2513,16 +3848,35 @@ packages: hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} - http-basic@8.1.3: - resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} - engines: {node: '>=6.0.0'} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} - http-response-object@3.0.2: - resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==} + http-https@1.0.0: + resolution: {integrity: sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http-signature@1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} https-browserify@1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} @@ -2531,13 +3885,25 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + idb-keyval@6.2.1: resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} + idna-uts46-hx@2.3.1: + resolution: {integrity: sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==} + engines: {node: '>=4.0.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -2545,6 +3911,9 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + immer@10.0.2: + resolution: {integrity: sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==} + immutable@4.3.7: resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} @@ -2555,6 +3924,10 @@ packages: import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + imul@1.0.1: + resolution: {integrity: sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==} + engines: {node: '>=0.10.0'} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -2577,9 +3950,20 @@ packages: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + io-ts@1.10.4: resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} @@ -2587,6 +3971,9 @@ packages: resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} engines: {node: '>= 0.4'} + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -2599,6 +3986,11 @@ packages: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2611,6 +4003,9 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + is-generator-function@1.1.0: resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} engines: {node: '>= 0.4'} @@ -2623,10 +4018,17 @@ packages: resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} engines: {node: '>=6.5.0', npm: '>=3'} + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + is-ipfs@8.0.4: resolution: {integrity: sha512-upkO6a8WgBSZMMmuPzmF2NQLWXtiJtHxdEfEiMWrOzCKoZ+XEiM0XlK4fFMfo/PyiRmPMJ4PsNrXyvJeqMrJXA==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + is-nan@1.3.2: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} engines: {node: '>= 0.4'} @@ -2635,6 +4037,10 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -2646,14 +4052,28 @@ packages: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} + is-retry-allowed@2.2.0: + resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} + engines: {node: '>=10'} + is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -2674,11 +4094,30 @@ packages: isomorphic-unfetch@3.1.0: resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: ws: '*' + isows@1.0.3: + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} + peerDependencies: + ws: '*' + + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + iter-tools@7.5.3: + resolution: {integrity: sha512-iEcHpgM9cn6tsI5MewqxyEega9KPbIDytQTEnu6c0MtlQQhQFofssYuRqxCarZgUdzliepRZPwwwflE4wAIjaA==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jiti@2.4.1: resolution: {integrity: sha512-yPBThwecp1wS9DmoA4x4KR2h3QoslacnDR8ypuFM962kI4/456Iy1oHx2RAgh4jfZNdn0bctsdadceiBUgpU1g==} hasBin: true @@ -2690,6 +4129,12 @@ packages: js-base64@3.7.7: resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + js-cookie@2.2.1: + resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} + + js-sha3@0.5.7: + resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==} + js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} @@ -2704,15 +4149,30 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-schema-typed@7.0.3: + resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2720,15 +4180,34 @@ packages: resolution: {integrity: sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==} engines: {node: '>=7.10.1'} + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + jsonschema@1.5.0: resolution: {integrity: sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==} + jsprim@1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + + just-extend@6.2.0: + resolution: {integrity: sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==} + keccak@3.0.4: resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} engines: {node: '>=10.0.0'} @@ -2743,6 +4222,10 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -2750,6 +4233,10 @@ packages: known-css-properties@0.35.0: resolution: {integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==} + latest-version@7.0.0: + resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} + engines: {node: '>=14.16'} + levn@0.3.0: resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} engines: {node: '>= 0.8.0'} @@ -2762,6 +4249,9 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + lit-element@3.3.3: resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} @@ -2774,6 +4264,10 @@ packages: locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -2792,6 +4286,10 @@ packages: lodash.clonedeep@4.5.0: resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} @@ -2821,6 +4319,14 @@ packages: loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -2838,8 +4344,15 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - markdown-table@1.1.3: - resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} + make-fetch-happen@13.0.1: + resolution: {integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==} + engines: {node: ^16.14.0 || >=18.0.0} + + markdown-table@2.0.0: + resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} + + match-all@1.2.6: + resolution: {integrity: sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==} math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} @@ -2848,14 +4361,25 @@ packages: md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} @@ -2875,11 +4399,39 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + mime@3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} hasBin: true + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@3.1.0: + resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} + engines: {node: '>=8'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -2900,6 +4452,56 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass-collect@2.0.1: + resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass-fetch@3.0.5: + resolution: {integrity: sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@2.9.0: + resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@1.3.3: + resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + mkdirp-promise@5.0.1: + resolution: {integrity: sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==} + engines: {node: '>=4'} + deprecated: This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that. + mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -2909,6 +4511,11 @@ packages: engines: {node: '>=10'} hasBin: true + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + mnemonist@0.38.5: resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} @@ -2917,6 +4524,9 @@ packages: engines: {node: '>= 14.0.0'} hasBin: true + mock-fs@4.14.0: + resolution: {integrity: sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==} + motion@10.16.2: resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} @@ -2928,15 +4538,46 @@ packages: resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} engines: {node: '>=10'} + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + multibase@0.6.1: + resolution: {integrity: sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==} + deprecated: This module has been superseded by the multiformats module + + multibase@0.7.0: + resolution: {integrity: sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==} + deprecated: This module has been superseded by the multiformats module + + multicodec@0.5.7: + resolution: {integrity: sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==} + deprecated: This module has been superseded by the multiformats module + + multicodec@1.0.4: + resolution: {integrity: sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==} + deprecated: This module has been superseded by the multiformats module + multiformats@13.3.1: resolution: {integrity: sha512-QxowxTNwJ3r5RMctoGA5p13w5RbRT2QDkoM+yFlqfLiioBp78nhDjnRLvmSBI9+KAqN4VdgOVWM9c0CHd86m3g==} multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + multihashes@0.4.21: + resolution: {integrity: sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==} + + murmur-128@0.2.1: + resolution: {integrity: sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==} + + nan@2.22.0: + resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==} + + nano-json-stream-parser@0.1.2: + resolution: {integrity: sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==} + nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2947,18 +4588,53 @@ packages: engines: {node: ^18 || >=20} hasBin: true + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + ndjson@2.0.0: + resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==} + engines: {node: '>=10'} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + + nise@6.1.1: + resolution: {integrity: sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==} + + node-abi@3.73.0: + resolution: {integrity: sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==} + engines: {node: '>=10'} + + node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + node-addon-api@3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + node-addon-api@5.1.0: resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + node-addon-api@6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -2990,6 +4666,11 @@ packages: resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} hasBin: true + node-hid@2.1.2: + resolution: {integrity: sha512-qhCyQqrPpP93F/6Wc/xUR7L8mAJW0Z6R7HMQV8jCHHksAxNDe/4z4Un/H9CpLOT+5K39OPyt9tIQlavxWES3lg==} + engines: {node: '>=10'} + hasBin: true + node-stdlib-browser@1.3.0: resolution: {integrity: sha512-g/koYzOr9Fb1Jc+tHUHlFd5gODjGn48tHexUK8q6iqOVriEgSnd3/1T7myBYc+0KBVze/7F7n65ec9rW6OD7xw==} engines: {node: '>=10'} @@ -3006,10 +4687,29 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + normalize-url@8.0.1: + resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + engines: {node: '>=14.16'} + + npm-package-arg@11.0.3: + resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==} + engines: {node: ^16.14.0 || >=18.0.0} + + npm-registry-fetch@17.1.0: + resolution: {integrity: sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==} + engines: {node: ^16.14.0 || >=18.0.0} + number-to-bn@1.7.0: resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} engines: {node: '>=6.5.0', npm: '>=3'} + oauth-sign@0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -3033,6 +4733,9 @@ packages: obliterator@2.0.5: resolution: {integrity: sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==} + oboe@2.1.5: + resolution: {integrity: sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==} + ofetch@1.4.1: resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} @@ -3046,9 +4749,21 @@ packages: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + opentype.js@1.3.4: resolution: {integrity: sha512-d2JE9RP/6uagpQAVtJoF0pJJA/fgai89Cc50Yp0EJHk+eLp6QQ7gBoblsnubRULNY132I0J1QKMJ+JTbMqz4sw==} engines: {node: '>= 8.0.0'} @@ -3062,9 +4777,16 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + ordinal@1.0.3: resolution: {integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==} + original-require@1.0.1: + resolution: {integrity: sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A==} + os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} @@ -3072,6 +4794,18 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -3080,6 +4814,10 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -3104,10 +4842,21 @@ packages: resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} engines: {node: '>=14.16'} + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-json@8.1.1: + resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} + engines: {node: '>=14.16'} + pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -3119,8 +4868,16 @@ packages: resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} engines: {node: '>= 0.10'} - parse-cache-control@1.0.1: - resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} + parse-headers@2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -3144,6 +4901,21 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-starts-with@2.0.1: + resolution: {integrity: sha512-wZ3AeiRBRlNwkdUxvBANh0+esnt38DLffHDujZyRHkqkaKHTglnY2EP5UX3b8rdeiSutgO4y9NEJwXezNP5vHg==} + engines: {node: '>=8'} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -3158,6 +4930,9 @@ packages: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3204,6 +4979,14 @@ packages: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} + pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + pngjs@3.4.0: resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} engines: {node: '>=4.0.0'} @@ -3257,7 +5040,12 @@ packages: preact@10.4.1: resolution: {integrity: sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q==} - prelude-ls@1.1.2: + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} + engines: {node: '>=10'} + hasBin: true + + prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -3281,6 +5069,12 @@ packages: vue-tsc: optional: true + prettier-plugin-solidity@1.4.2: + resolution: {integrity: sha512-VVD/4XlDjSzyPWWCPW8JEleFa8JNKFYac5kNlMjVXemQyQZKfpekPMhFZSePuXB6L+RixlFvWe20iacGjFYrLw==} + engines: {node: '>=18'} + peerDependencies: + prettier: '>=2.3.0' + prettier-plugin-svelte@3.3.3: resolution: {integrity: sha512-yViK9zqQ+H2qZD1w/bH7W8i+bVfKrD8GIFjkFe4Thl6kCT9SlAsXVNmt3jCvQOCsnOhcvYgsoVlRV/Eu6x5nNw==} peerDependencies: @@ -3297,6 +5091,10 @@ packages: engines: {node: '>=14'} hasBin: true + proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -3313,8 +5111,19 @@ packages: progress-events@1.0.1: resolution: {integrity: sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw==} - promise@8.3.0: - resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} protobufjs@7.2.5: resolution: {integrity: sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==} @@ -3324,21 +5133,35 @@ packages: resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + proxy-compare@2.5.1: resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + pump@1.0.3: + resolution: {integrity: sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==} + pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + punycode@2.1.0: + resolution: {integrity: sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==} + engines: {node: '>=6'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3365,10 +5188,22 @@ packages: engines: {node: '>=10.13.0'} hasBin: true + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + qs@6.13.1: resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} engines: {node: '>=0.6'} + qs@6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + + query-string@5.1.1: + resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} + engines: {node: '>=0.10.0'} + query-string@7.1.3: resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} engines: {node: '>=6'} @@ -3383,6 +5218,10 @@ packages: quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} @@ -3392,14 +5231,30 @@ packages: randomfill@1.0.4: resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -3439,13 +5294,25 @@ packages: resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} engines: {node: '>=6'} - req-cwd@2.0.0: - resolution: {integrity: sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==} - engines: {node: '>=4'} + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - req-from@2.0.0: - resolution: {integrity: sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==} - engines: {node: '>=4'} + registry-auth-token@5.0.3: + resolution: {integrity: sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + request@2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -3458,9 +5325,8 @@ packages: require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - resolve-from@3.0.0: - resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} - engines: {node: '>=4'} + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} @@ -3477,6 +5343,25 @@ packages: engines: {node: '>= 0.4'} hasBin: true + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -3484,6 +5369,11 @@ packages: rfc4648@1.5.4: resolution: {integrity: sha512-rRg/6Lb+IGfJqO05HZkN50UtY7K/JhxJag1kP23+zyMfrvoB0B7RWv06MbOzoc79RgCdNTiUaNsTT1AJZ7Z+cg==} + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} @@ -3499,6 +5389,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} @@ -3524,6 +5417,12 @@ packages: resolution: {integrity: sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==} hasBin: true + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + scrypt-js@2.0.4: + resolution: {integrity: sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==} + scrypt-js@3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} @@ -3547,9 +5446,21 @@ packages: engines: {node: '>=10'} hasBin: true + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + servify@0.1.12: + resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} + engines: {node: '>=6'} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -3560,6 +5471,9 @@ packages: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} + setimmediate@1.0.4: + resolution: {integrity: sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==} + setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} @@ -3602,10 +5516,38 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@2.8.2: + resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + + sinon-chai@3.7.0: + resolution: {integrity: sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==} + peerDependencies: + chai: ^4.0.0 + sinon: '>=4.0.0' + + sinon@18.0.1: + resolution: {integrity: sha512-a2N2TDY1uGviajJ6r4D1CyRAkzE9NNVlYOV1wX5xQDuAk0ONgzgRl0EjCQuRCPxOwp13ghsMwt9Gdldujs39qw==} + sirv@3.0.0: resolution: {integrity: sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==} engines: {node: '>=18'} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -3614,11 +5556,35 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + solc@0.8.21: + resolution: {integrity: sha512-N55ogy2dkTRwiONbj4e6wMZqUNaLZkiRcjGyeafjLYzo/tf/IvhHY5P5wpe+H3Fubh9idu071i8eOGO31s1ylg==} + engines: {node: '>=10.0.0'} + hasBin: true + solc@0.8.26: resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} engines: {node: '>=10.0.0'} hasBin: true + solhint@5.0.5: + resolution: {integrity: sha512-WrnG6T+/UduuzSWsSOAbfq1ywLUDwNea3Gd5hg6PS+pLUm8lz2ECNr0beX609clBxmDeZ3676AiA9nPDljmbJQ==} + hasBin: true + + solidity-ast@0.4.59: + resolution: {integrity: sha512-I+CX0wrYUN9jDfYtcgWSe+OAowaXy8/1YQy7NS4ni5IBDmIYBq7ZzaP/7QqouLjzZapmQtvGLqCaYgoUWqBo5g==} + solidity-coverage@0.8.14: resolution: {integrity: sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA==} hasBin: true @@ -3649,10 +5615,16 @@ packages: spark-md5@3.0.2: resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==} + split-ca@1.0.1: + resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} + split-on-first@1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} engines: {node: '>=6'} + split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -3660,6 +5632,22 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + ssh2@1.16.0: + resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==} + engines: {node: '>=10.16.0'} + + sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + ssri@10.0.6: + resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + stacktrace-parser@0.1.10: resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} engines: {node: '>=6'} @@ -3677,6 +5665,10 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + strict-uri-encode@2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} @@ -3684,10 +5676,6 @@ packages: string-format@2.0.0: resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} - string-width@2.1.1: - resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} - engines: {node: '>=4'} - string-width@3.1.0: resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} engines: {node: '>=6'} @@ -3696,19 +5684,22 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + string.prototype.codepointat@0.2.1: resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - strip-ansi@4.0.0: - resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} - engines: {node: '>=4'} - strip-ansi@5.2.0: resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} engines: {node: '>=6'} @@ -3717,14 +5708,25 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + strip-hex-prefix@1.0.0: resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} engines: {node: '>=6.5.0', npm: '>=3'} + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + supports-color@3.2.3: resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} engines: {node: '>=0.8.0'} @@ -3766,12 +5768,8 @@ packages: resolution: {integrity: sha512-ne4IhhVBwzpUByjo1ocxQnqRoWsRilc9Ry1j+0uPWhHmg4jS/nnlSwYYfx7Ium8okCZ4hYM89rg0B5G0hQzk+g==} engines: {node: '>=18'} - sync-request@6.1.0: - resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} - engines: {node: '>=8.0.0'} - - sync-rpc@1.3.6: - resolution: {integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==} + swarm-js@0.1.42: + resolution: {integrity: sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==} tabbable@6.2.0: resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} @@ -3784,9 +5782,33 @@ packages: resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} - then-request@6.0.2: - resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==} - engines: {node: '>=6.0.0'} + tar-fs@1.16.4: + resolution: {integrity: sha512-u3XczWoYAIVXe5GOKK6+VeWaHjtc47W7hyuTo3+4cNakcCcuDmlkYiiHEsECwTkcI3h1VUgtwBQ54+RvY6cM4w==} + + tar-fs@2.0.1: + resolution: {integrity: sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==} + + tar-fs@2.1.2: + resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} + + tar-stream@1.6.2: + resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} + engines: {node: '>= 0.8.0'} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar@4.4.19: + resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==} + engines: {node: '>=4.5'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} thread-stream@0.15.2: resolution: {integrity: sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==} @@ -3794,6 +5816,16 @@ packages: thread-stream@2.7.0: resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + timed-out@4.0.1: + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} + engines: {node: '>=0.10.0'} + timers-browserify@2.0.12: resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} engines: {node: '>=0.6.0'} @@ -3804,6 +5836,9 @@ packages: tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + tiny-typed-emitter@2.1.0: + resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} + tinyglobby@0.2.10: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} @@ -3812,6 +5847,9 @@ packages: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} + to-buffer@1.1.1: + resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3827,6 +5865,10 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + tough-cookie@2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -3845,6 +5887,9 @@ packages: peerDependencies: typescript: '>=3.7.0' + ts-morph@22.0.0: + resolution: {integrity: sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==} + ts-node@10.9.2: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true @@ -3871,15 +5916,25 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tslog@4.9.3: + resolution: {integrity: sha512-oDWuGVONxhVEBtschLf2cs/Jy8i7h1T+CpdkTNWQgdAF7DhRo2G8vMCgILKe7ojdEkLhICWgI1LYSSKaJsRgcw==} + engines: {node: '>=16'} + tsort@0.0.1: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} tty-browserify@0.0.1: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tweetnacl-util@0.15.1: resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + tweetnacl@1.0.3: resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} @@ -3891,6 +5946,10 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + type-detect@4.1.0: resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} engines: {node: '>=4'} @@ -3907,12 +5966,22 @@ packages: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + typechain@8.3.2: resolution: {integrity: sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==} hasBin: true peerDependencies: typescript: '>=4.3.0' + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} @@ -3923,6 +5992,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' + typescript-eslint@8.21.0: + resolution: {integrity: sha512-txEKYY4XMKwPXxNkN8+AxAdX6iIJAPiJbHE/FpQccs/sxw8Lf26kqwC3cn0xkHlW8kEbLhkhCsjWuMveaY9Rxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + typescript@5.7.3: resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} @@ -3959,6 +6035,9 @@ packages: uint8arrays@5.1.0: resolution: {integrity: sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==} + ultron@1.1.1: + resolution: {integrity: sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -3972,12 +6051,24 @@ packages: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} + undici@6.21.1: + resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} + engines: {node: '>=18.17'} + unenv@1.10.0: resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} unfetch@4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} + unique-filename@3.0.0: + resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + unique-slug@4.0.0: + resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -4052,15 +6143,26 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-set-query@1.0.0: + resolution: {integrity: sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==} + url@0.11.4: resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} engines: {node: '>= 0.4'} + usb@2.9.0: + resolution: {integrity: sha512-G0I/fPgfHUzWH8xo2KkDxTTFruUWfppgSFJ+bQxz/kVY2x15EQ/XDB7dqD1G432G4gBG4jYQuF3U7j/orSs5nw==} + engines: {node: '>=10.20.0 <11.x || >=12.17.0 <13.0 || >=14.0.0'} + use-sync-external-store@1.2.0: resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} @@ -4070,13 +6172,38 @@ packages: util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + + uuid@2.0.1: + resolution: {integrity: sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + + uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + valtio@1.11.2: resolution: {integrity: sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw==} engines: {node: '>=12.20.0'} @@ -4089,6 +6216,25 @@ packages: react: optional: true + varint@5.0.2: + resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + + viem@2.7.14: + resolution: {integrity: sha512-5b1KB1gXli02GOQHZIUsRluNUwssl2t4hqdFAzyWPwJ744N83jAOBOjOkrGz7K3qMIv9b0GQt3DoZIErSQTPkQ==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + vite-plugin-node-polyfills@0.22.0: resolution: {integrity: sha512-F+G3LjiGbG8QpbH9bZ//GSBr9i1InSTkaulfUHFa9jkLqVGORFBoqc2A/Yu5Mmh1kNAbiAeKeK+6aaQUf3x0JA==} peerDependencies: @@ -4145,10 +6291,41 @@ packages: vm-browserify@1.1.2: resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} + web3-bzz@1.10.0: + resolution: {integrity: sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==} + engines: {node: '>=8.0.0'} + + web3-core-helpers@1.10.0: + resolution: {integrity: sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==} + engines: {node: '>=8.0.0'} + + web3-core-method@1.10.0: + resolution: {integrity: sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==} + engines: {node: '>=8.0.0'} + + web3-core-promievent@1.10.0: + resolution: {integrity: sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==} + engines: {node: '>=8.0.0'} + + web3-core-requestmanager@1.10.0: + resolution: {integrity: sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==} + engines: {node: '>=8.0.0'} + + web3-core-subscriptions@1.10.0: + resolution: {integrity: sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==} + engines: {node: '>=8.0.0'} + + web3-core@1.10.0: + resolution: {integrity: sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==} + engines: {node: '>=8.0.0'} + web3-core@4.7.1: resolution: {integrity: sha512-9KSeASCb/y6BG7rwhgtYC4CvYY66JfkmGNEYb7q1xgjt9BWfkf09MJPaRyoyT5trdOxYDHkT9tDlypvQWaU8UQ==} engines: {node: '>=14', npm: '>=6.12.0'} @@ -4157,46 +6334,90 @@ packages: resolution: {integrity: sha512-w3NMJujH+ZSW4ltIZZKtdbkbyQEvBzyp3JRn59Ckli0Nz4VMsVq8aF1bLWM7A2kuQ+yVEm3ySeNU+7mSRwx7RQ==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-eth-abi@1.10.0: + resolution: {integrity: sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==} + engines: {node: '>=8.0.0'} + web3-eth-abi@4.4.1: resolution: {integrity: sha512-60ecEkF6kQ9zAfbTY04Nc9q4eEYM0++BySpGi8wZ2PD1tw/c0SDvsKhV6IKURxLJhsDlb08dATc3iD6IbtWJmg==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-eth-accounts@1.10.0: + resolution: {integrity: sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==} + engines: {node: '>=8.0.0'} + web3-eth-accounts@4.3.1: resolution: {integrity: sha512-rTXf+H9OKze6lxi7WMMOF1/2cZvJb2AOnbNQxPhBDssKOllAMzLhg1FbZ4Mf3lWecWfN6luWgRhaeSqO1l+IBQ==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-eth-contract@1.10.0: + resolution: {integrity: sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==} + engines: {node: '>=8.0.0'} + web3-eth-contract@4.7.2: resolution: {integrity: sha512-3ETqs2pMNPEAc7BVY/C3voOhTUeJdkf2aM3X1v+edbngJLHAxbvxKpOqrcO0cjXzC4uc2Q8Zpf8n8zT5r0eLnA==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-eth-ens@1.10.0: + resolution: {integrity: sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==} + engines: {node: '>=8.0.0'} + web3-eth-ens@4.4.0: resolution: {integrity: sha512-DeyVIS060hNV9g8dnTx92syqvgbvPricE3MerCxe/DquNZT3tD8aVgFfq65GATtpCgDDJffO2bVeHp3XBemnSQ==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-eth-iban@1.10.0: + resolution: {integrity: sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==} + engines: {node: '>=8.0.0'} + web3-eth-iban@4.0.7: resolution: {integrity: sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-eth-personal@1.10.0: + resolution: {integrity: sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==} + engines: {node: '>=8.0.0'} + web3-eth-personal@4.1.0: resolution: {integrity: sha512-RFN83uMuvA5cu1zIwwJh9A/bAj0OBxmGN3tgx19OD/9ygeUZbifOL06jgFzN0t+1ekHqm3DXYQM8UfHpXi7yDQ==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-eth@1.10.0: + resolution: {integrity: sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==} + engines: {node: '>=8.0.0'} + web3-eth@4.11.1: resolution: {integrity: sha512-q9zOkzHnbLv44mwgLjLXuyqszHuUgZWsQayD2i/rus2uk0G7hMn11bE2Q3hOVnJS4ws4VCtUznlMxwKQ+38V2w==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-net@1.10.0: + resolution: {integrity: sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==} + engines: {node: '>=8.0.0'} + web3-net@4.1.0: resolution: {integrity: sha512-WWmfvHVIXWEoBDWdgKNYKN8rAy6SgluZ0abyRyXOL3ESr7ym7pKWbfP4fjApIHlYTh8tNqkrdPfM4Dyi6CA0SA==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-providers-http@1.10.0: + resolution: {integrity: sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==} + engines: {node: '>=8.0.0'} + web3-providers-http@4.2.0: resolution: {integrity: sha512-IPMnDtHB7dVwaB7/mMxAZzyq7d5ezfO1+Vw0bNfAeIi7gaDlJiggp85SdyAfOgov8AMUA/dyiY72kQ0KmjXKvQ==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-providers-ipc@1.10.0: + resolution: {integrity: sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==} + engines: {node: '>=8.0.0'} + web3-providers-ipc@4.0.7: resolution: {integrity: sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-providers-ws@1.10.0: + resolution: {integrity: sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==} + engines: {node: '>=8.0.0'} + web3-providers-ws@4.0.8: resolution: {integrity: sha512-goJdgata7v4pyzHRsg9fSegUG4gVnHZSHODhNnn6J93ykHkBI1nz4fjlGpcQLUMi4jAMz6SHl9Ibzs2jj9xqPw==} engines: {node: '>=14', npm: '>=6.12.0'} @@ -4209,10 +6430,18 @@ packages: resolution: {integrity: sha512-PXosCqHW0EADrYzgmueNHP3Y5jcSmSwH+Dkqvn7EYD0T2jcsdDAIHqk6szBiwIdhumM7gv9Raprsu/s/f7h1fw==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-shh@1.10.0: + resolution: {integrity: sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==} + engines: {node: '>=8.0.0'} + web3-types@1.10.0: resolution: {integrity: sha512-0IXoaAFtFc8Yin7cCdQfB9ZmjafrbP6BO0f0KT/khMhXKUpoJ6yShrVhiNpyRBo8QQjuOagsWzwSK2H49I7sbw==} engines: {node: '>=14', npm: '>=6.12.0'} + web3-utils@1.10.0: + resolution: {integrity: sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==} + engines: {node: '>=8.0.0'} + web3-utils@1.10.4: resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} engines: {node: '>=8.0.0'} @@ -4225,6 +6454,10 @@ packages: resolution: {integrity: sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg==} engines: {node: '>=14', npm: '>=6.12.0'} + web3@1.10.0: + resolution: {integrity: sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==} + engines: {node: '>=8.0.0'} + web3@4.16.0: resolution: {integrity: sha512-SgoMSBo6EsJ5GFCGar2E/pR2lcR/xmUSuQ61iK6yDqzxmm42aPPxSqZfJz2z/UCR6pk03u77pU8TGV6lgMDdIQ==} engines: {node: '>=14.0.0', npm: '>=6.12.0'} @@ -4232,6 +6465,10 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + websocket@1.0.35: + resolution: {integrity: sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==} + engines: {node: '>=4.0.0'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -4281,9 +6518,24 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@3.3.3: + resolution: {integrity: sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@7.4.6: resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} engines: {node: '>=8.3.0'} @@ -4308,6 +6560,18 @@ packages: utf-8-validate: optional: true + ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} @@ -4332,6 +6596,27 @@ packages: utf-8-validate: optional: true + xdeployer@3.1.10: + resolution: {integrity: sha512-LLpxuUjy0AXeEH9gFHqZ/IOvzjkMLRrWscUBuvx7s0MQuqNALBnHl7WkaTJqsGAgIagwFuxz/XU1jsVzpVroKA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@nomicfoundation/hardhat-ethers': ^3.0.8 + ethers: ^6.13.5 + hardhat: ^2.22.18 + + xhr-request-promise@0.1.3: + resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} + + xhr-request@1.1.0: + resolution: {integrity: sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==} + + xhr@2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + + xmlhttprequest@1.8.0: + resolution: {integrity: sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==} + engines: {node: '>=0.4.0'} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -4343,6 +6628,16 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + yaeti@0.0.6: + resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} + engines: {node: '>=0.10.32'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -4392,11 +6687,25 @@ packages: zimmerframe@1.1.2: resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + zksync-ethers@6.15.4: + resolution: {integrity: sha512-HyxuIfSs+axbk5gB+Nd7fjlVU1+c2IuZ5eJKNG1HLLRhJZsHLigR3AVS3FjTN/9fO/tToIeadxpZbu5M6NNb5A==} + engines: {node: '>=18.9.0'} + peerDependencies: + ethers: ^6.7.1 + + zksync-web3@0.14.4: + resolution: {integrity: sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==} + deprecated: This package has been deprecated in favor of zksync-ethers@5.0.0 + peerDependencies: + ethers: ^5.7.0 + zod@3.24.1: resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} snapshots: + '@adraffy/ens-normalize@1.10.0': {} + '@adraffy/ens-normalize@1.10.1': {} '@adraffy/ens-normalize@1.11.0': {} @@ -4406,13 +6715,399 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@chainsafe/is-ip@2.0.2': {} - - '@chainsafe/netmask@2.0.0': + '@aws-crypto/crc32@5.2.0': dependencies: - '@chainsafe/is-ip': 2.0.2 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 - '@cspotcode/source-map-support@0.8.1': + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-locate-window': 3.723.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@1.2.2': + dependencies: + '@aws-crypto/util': 1.2.2 + '@aws-sdk/types': 3.734.0 + tslib: 1.14.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@1.2.2': + dependencies: + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-lambda@3.734.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.734.0 + '@aws-sdk/credential-provider-node': 3.734.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.734.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.734.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.734.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.1 + '@smithy/eventstream-serde-browser': 4.0.1 + '@smithy/eventstream-serde-config-resolver': 4.0.1 + '@smithy/eventstream-serde-node': 4.0.1 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.2 + '@smithy/middleware-retry': 4.0.3 + '@smithy/middleware-serde': 4.0.1 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.2 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.2 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.3 + '@smithy/util-defaults-mode-node': 4.0.3 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-stream': 4.0.2 + '@smithy/util-utf8': 4.0.0 + '@smithy/util-waiter': 4.0.2 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.734.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.734.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.734.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.734.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.734.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.1 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.2 + '@smithy/middleware-retry': 4.0.3 + '@smithy/middleware-serde': 4.0.1 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.2 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.2 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.3 + '@smithy/util-defaults-mode-node': 4.0.3 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/core': 3.1.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/signature-v4': 5.0.1 + '@smithy/smithy-client': 4.1.2 + '@smithy/types': 4.1.0 + '@smithy/util-middleware': 4.0.1 + fast-xml-parser: 4.4.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.734.0': + dependencies: + '@aws-sdk/core': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.734.0': + dependencies: + '@aws-sdk/core': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/node-http-handler': 4.0.2 + '@smithy/property-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.2 + '@smithy/types': 4.1.0 + '@smithy/util-stream': 4.0.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.734.0': + dependencies: + '@aws-sdk/core': 3.734.0 + '@aws-sdk/credential-provider-env': 3.734.0 + '@aws-sdk/credential-provider-http': 3.734.0 + '@aws-sdk/credential-provider-process': 3.734.0 + '@aws-sdk/credential-provider-sso': 3.734.0 + '@aws-sdk/credential-provider-web-identity': 3.734.0 + '@aws-sdk/nested-clients': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@smithy/credential-provider-imds': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-node@3.734.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.734.0 + '@aws-sdk/credential-provider-http': 3.734.0 + '@aws-sdk/credential-provider-ini': 3.734.0 + '@aws-sdk/credential-provider-process': 3.734.0 + '@aws-sdk/credential-provider-sso': 3.734.0 + '@aws-sdk/credential-provider-web-identity': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@smithy/credential-provider-imds': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-process@3.734.0': + dependencies: + '@aws-sdk/core': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.734.0': + dependencies: + '@aws-sdk/client-sso': 3.734.0 + '@aws-sdk/core': 3.734.0 + '@aws-sdk/token-providers': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.734.0': + dependencies: + '@aws-sdk/core': 3.734.0 + '@aws-sdk/nested-clients': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/middleware-host-header@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.734.0': + dependencies: + '@aws-sdk/core': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.734.0 + '@smithy/core': 3.1.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.734.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.734.0 + '@aws-sdk/middleware-host-header': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.734.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.734.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.734.0 + '@smithy/config-resolver': 4.0.1 + '@smithy/core': 3.1.1 + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/hash-node': 4.0.1 + '@smithy/invalid-dependency': 4.0.1 + '@smithy/middleware-content-length': 4.0.1 + '@smithy/middleware-endpoint': 4.0.2 + '@smithy/middleware-retry': 4.0.3 + '@smithy/middleware-serde': 4.0.1 + '@smithy/middleware-stack': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/node-http-handler': 4.0.2 + '@smithy/protocol-http': 5.0.1 + '@smithy/smithy-client': 4.1.2 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.3 + '@smithy/util-defaults-mode-node': 4.0.3 + '@smithy/util-endpoints': 3.0.1 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/region-config-resolver@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.1 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.734.0': + dependencies: + '@aws-sdk/nested-clients': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.734.0': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + '@smithy/util-endpoints': 3.0.1 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.723.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-browser@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.1.0 + bowser: 2.11.0 + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-node@3.734.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@aws-sdk/util-utf8-browser@3.259.0': + dependencies: + tslib: 2.8.1 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/runtime@7.26.7': + dependencies: + regenerator-runtime: 0.14.1 + + '@balena/dockerignore@1.0.2': {} + + '@bytecodealliance/preview2-shim@0.17.0': {} + + '@chainsafe/is-ip@2.0.2': {} + + '@chainsafe/netmask@2.0.0': + dependencies: + '@chainsafe/is-ip': 2.0.2 + + '@colors/colors@1.5.0': + optional: true + + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 @@ -4498,6 +7193,11 @@ snapshots: eslint: 9.18.0(jiti@2.4.1) eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.4.1(eslint@9.19.0(jiti@2.4.1))': + dependencies: + eslint: 9.19.0(jiti@2.4.1) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.1': {} '@eslint/config-array@0.19.1': @@ -4528,6 +7228,8 @@ snapshots: '@eslint/js@9.18.0': {} + '@eslint/js@9.19.0': {} + '@eslint/object-schema@2.1.5': {} '@eslint/plugin-kit@0.2.5': @@ -4535,10 +7237,20 @@ snapshots: '@eslint/core': 0.10.0 levn: 0.4.1 + '@ethereumjs/common@2.5.0': + dependencies: + crc-32: 1.2.2 + ethereumjs-util: 7.1.5 + '@ethereumjs/rlp@4.0.1': {} '@ethereumjs/rlp@5.0.2': {} + '@ethereumjs/tx@3.3.2': + dependencies: + '@ethereumjs/common': 2.5.0 + ethereumjs-util: 7.1.5 + '@ethereumjs/util@8.1.0': dependencies: '@ethereumjs/rlp': 4.0.1 @@ -4575,6 +7287,14 @@ snapshots: '@ethersproject/logger': 5.7.0 '@ethersproject/properties': 5.7.0 + '@ethersproject/address@5.6.1': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/address@5.7.0': dependencies: '@ethersproject/bignumber': 5.7.0 @@ -4682,7 +7402,7 @@ snapshots: dependencies: '@ethersproject/logger': 5.7.0 - '@ethersproject/providers@5.7.2': + '@ethersproject/providers@5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@ethersproject/abstract-provider': 5.7.0 '@ethersproject/abstract-signer': 5.7.0 @@ -4703,7 +7423,7 @@ snapshots: '@ethersproject/transactions': 5.7.0 '@ethersproject/web': 5.7.1 bech32: 1.1.4 - ws: 7.4.6 + ws: 7.4.6(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -4813,10 +7533,15 @@ snapshots: '@floating-ui/utils@0.2.9': {} + '@grpc/grpc-js@1.12.5': + dependencies: + '@grpc/proto-loader': 0.7.13 + '@js-sdsl/ordered-map': 4.4.2 + '@grpc/grpc-js@1.8.2': dependencies: '@grpc/proto-loader': 0.7.13 - '@types/node': 22.10.6 + '@types/node': 22.10.10 '@grpc/proto-loader@0.7.13': dependencies: @@ -4867,13 +7592,13 @@ snapshots: tweetnacl: 1.0.3 utf8: 3.0.0 - '@hashgraph/hedera-wallet-connect@1.0.6': + '@hashgraph/hedera-wallet-connect@1.0.6(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@hashgraph/sdk': 2.56.0 '@walletconnect/qrcode-modal': 1.8.0 '@walletconnect/types': 2.11.2 '@walletconnect/utils': 2.17.3 - '@walletconnect/web3wallet': 1.16.1 + '@walletconnect/web3wallet': 1.16.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -4920,7 +7645,7 @@ snapshots: '@grpc/grpc-js': 1.8.2 '@hashgraph/cryptography': 1.4.8-beta.5 '@hashgraph/proto': 2.14.0-beta.3 - axios: 1.7.9 + axios: 1.7.9(debug@4.4.0) bignumber.js: 9.1.2 bn.js: 5.2.1 crypto-js: 4.2.0 @@ -4945,7 +7670,7 @@ snapshots: '@grpc/grpc-js': 1.8.2 '@hashgraph/cryptography': 1.4.8-beta.10 '@hashgraph/proto': 2.16.0-beta.4 - axios: 1.7.9 + axios: 1.7.9(debug@4.4.0) bignumber.js: 9.1.2 bn.js: 5.2.1 crypto-js: 4.2.0 @@ -4978,6 +7703,15 @@ snapshots: dependencies: '@swc/helpers': 0.5.15 + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -5000,6 +7734,88 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@js-sdsl/ordered-map@4.4.2': {} + + '@ledgerhq/cryptoassets@9.13.0': + dependencies: + invariant: 2.2.4 + + '@ledgerhq/devices@8.4.4': + dependencies: + '@ledgerhq/errors': 6.19.1 + '@ledgerhq/logs': 6.12.0 + rxjs: 7.8.1 + semver: 7.6.3 + + '@ledgerhq/domain-service@1.2.16(debug@4.4.0)': + dependencies: + '@ledgerhq/errors': 6.19.1 + '@ledgerhq/logs': 6.12.0 + '@ledgerhq/types-live': 6.57.0 + axios: 1.7.7(debug@4.4.0) + eip55: 2.1.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - debug + + '@ledgerhq/errors@6.19.1': {} + + '@ledgerhq/hw-app-eth@6.33.6(debug@4.4.0)': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ledgerhq/cryptoassets': 9.13.0 + '@ledgerhq/domain-service': 1.2.16(debug@4.4.0) + '@ledgerhq/errors': 6.19.1 + '@ledgerhq/hw-transport': 6.31.4 + '@ledgerhq/hw-transport-mocker': 6.29.4 + '@ledgerhq/logs': 6.12.0 + axios: 1.7.9(debug@4.4.0) + bignumber.js: 9.1.2 + crypto-js: 4.2.0 + transitivePeerDependencies: + - debug + + '@ledgerhq/hw-transport-mocker@6.29.4': + dependencies: + '@ledgerhq/hw-transport': 6.31.4 + '@ledgerhq/logs': 6.12.0 + rxjs: 7.8.1 + + '@ledgerhq/hw-transport-node-hid-noevents@6.30.5': + dependencies: + '@ledgerhq/devices': 8.4.4 + '@ledgerhq/errors': 6.19.1 + '@ledgerhq/hw-transport': 6.31.4 + '@ledgerhq/logs': 6.12.0 + node-hid: 2.1.2 + + '@ledgerhq/hw-transport-node-hid@6.29.5': + dependencies: + '@ledgerhq/devices': 8.4.4 + '@ledgerhq/errors': 6.19.1 + '@ledgerhq/hw-transport': 6.31.4 + '@ledgerhq/hw-transport-node-hid-noevents': 6.30.5 + '@ledgerhq/logs': 6.12.0 + lodash: 4.17.21 + node-hid: 2.1.2 + usb: 2.9.0 + + '@ledgerhq/hw-transport@6.31.4': + dependencies: + '@ledgerhq/devices': 8.4.4 + '@ledgerhq/errors': 6.19.1 + '@ledgerhq/logs': 6.12.0 + events: 3.3.0 + + '@ledgerhq/logs@6.12.0': {} + + '@ledgerhq/types-live@6.57.0': + dependencies: + bignumber.js: 9.1.2 + rxjs: 7.8.1 + '@leichtgewicht/ip-codec@2.0.5': {} '@lit-labs/ssr-dom-shim@1.3.0': {} @@ -5008,6 +7824,80 @@ snapshots: dependencies: '@lit-labs/ssr-dom-shim': 1.3.0 + '@matterlabs/hardhat-zksync-deploy@1.6.0(encoding@0.1.13)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(zksync-ethers@6.15.4(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@matterlabs/hardhat-zksync-solc': 1.2.5(encoding@0.1.13)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + chai: 4.5.0 + chalk: 4.1.2 + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + fs-extra: 11.3.0 + glob: 10.4.5 + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + lodash: 4.17.21 + sinon: 18.0.1 + sinon-chai: 3.7.0(chai@4.5.0)(sinon@18.0.1) + ts-morph: 22.0.0 + zksync-ethers: 6.15.4(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + transitivePeerDependencies: + - encoding + - supports-color + + '@matterlabs/hardhat-zksync-ethers@1.2.1(bufferutil@4.0.9)(encoding@0.1.13)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)(zksync-ethers@6.15.4(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10)))': + dependencies: + '@matterlabs/hardhat-zksync-deploy': 1.6.0(encoding@0.1.13)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(zksync-ethers@6.15.4(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))) + '@matterlabs/hardhat-zksync-solc': 1.2.5(encoding@0.1.13)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + chai: 4.5.0 + chalk: 4.1.2 + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + zksync-ethers: 6.15.4(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + transitivePeerDependencies: + - bufferutil + - c-kzg + - encoding + - supports-color + - ts-node + - typescript + - utf-8-validate + + '@matterlabs/hardhat-zksync-solc@1.2.5(encoding@0.1.13)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))': + dependencies: + '@nomiclabs/hardhat-docker': 2.0.2(encoding@0.1.13) + chai: 4.5.0 + chalk: 4.1.2 + debug: 4.4.0(supports-color@8.1.1) + dockerode: 4.0.4 + fs-extra: 11.3.0 + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + proper-lockfile: 4.1.2 + semver: 7.6.3 + sinon: 18.0.1 + sinon-chai: 3.7.0(chai@4.5.0)(sinon@18.0.1) + undici: 6.21.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@matterlabs/hardhat-zksync-verify@1.7.1(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(encoding@0.1.13)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/address': 5.7.0 + '@matterlabs/hardhat-zksync-solc': 1.2.5(encoding@0.1.13)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-verify': 2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + axios: 1.7.9(debug@4.4.0) + cbor: 9.0.2 + chai: 4.5.0 + chalk: 4.1.2 + debug: 4.4.0(supports-color@8.1.1) + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + semver: 7.6.3 + sinon: 18.0.1 + sinon-chai: 3.7.0(chai@4.5.0)(sinon@18.0.1) + transitivePeerDependencies: + - encoding + - supports-color + '@melt-ui/svelte@0.86.2(svelte@5.17.4)': dependencies: '@floating-ui/core': 1.6.9 @@ -5168,58 +8058,88 @@ snapshots: '@nomicfoundation/ethereumjs-rlp': 5.0.4 ethereum-cryptography: 0.1.3 - '@nomicfoundation/hardhat-chai-matchers@2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3)))(chai@4.5.0)(ethers@6.13.4)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3))': + '@nomicfoundation/hardhat-chai-matchers@2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(chai@4.5.0)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))': dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3)) + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) '@types/chai-as-promised': 7.1.8 chai: 4.5.0 chai-as-promised: 7.1.2(chai@4.5.0) deep-eql: 4.1.4 - ethers: 6.13.4 - hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3) + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) ordinal: 1.0.3 - '@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3))': + '@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))': dependencies: debug: 4.4.0(supports-color@8.1.1) - ethers: 6.13.4 - hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3) + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) lodash.isequal: 4.5.0 transitivePeerDependencies: - supports-color - '@nomicfoundation/hardhat-network-helpers@1.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3))': + '@nomicfoundation/hardhat-foundry@1.1.3(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))': dependencies: - ethereumjs-util: 7.1.5 - hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3) + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + picocolors: 1.1.1 - '@nomicfoundation/hardhat-toolbox@4.0.0(p67fii2qccywfvwt5kjh7igmde)': + '@nomicfoundation/hardhat-ignition-ethers@0.15.9(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-ignition@0.15.9(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10))(@nomicfoundation/ignition-core@0.15.9(bufferutil@4.0.9)(utf-8-validate@5.0.10))(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))': dependencies: - '@nomicfoundation/hardhat-chai-matchers': 2.0.8(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.4)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3)))(chai@4.5.0)(ethers@6.13.4)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3)) - '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.4)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3)) - '@nomicfoundation/hardhat-network-helpers': 1.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3)) - '@nomicfoundation/hardhat-verify': 2.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3)) - '@typechain/ethers-v6': 0.5.1(ethers@6.13.4)(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3) - '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4)(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3))(ethers@6.13.4)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3))(typechain@8.3.2(typescript@5.7.3)) - '@types/chai': 4.3.20 - '@types/mocha': 10.0.10 - '@types/node': 22.10.6 - chai: 4.5.0 - ethers: 6.13.4 - hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3) - hardhat-gas-reporter: 1.0.10(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3)) - solidity-coverage: 0.8.14(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3)) - ts-node: 10.9.2(@types/node@22.10.6)(typescript@5.7.3) - typechain: 8.3.2(typescript@5.7.3) - typescript: 5.7.3 + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ignition': 0.15.9(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@nomicfoundation/ignition-core': 0.15.9(bufferutil@4.0.9)(utf-8-validate@5.0.10) + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + + '@nomicfoundation/hardhat-ignition@0.15.9(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + dependencies: + '@nomicfoundation/hardhat-verify': 2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/ignition-core': 0.15.9(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@nomicfoundation/ignition-ui': 0.15.9 + chalk: 4.1.2 + debug: 4.4.0(supports-color@8.1.1) + fs-extra: 10.1.0 + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + json5: 2.2.3 + prompts: 2.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@nomicfoundation/hardhat-ledger@1.0.3(bufferutil@4.0.9)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + dependencies: + '@ledgerhq/errors': 6.19.1 + '@ledgerhq/hw-app-eth': 6.33.6(debug@4.4.0) + '@ledgerhq/hw-transport': 6.31.4 + '@ledgerhq/hw-transport-node-hid': 6.29.5 + '@nomicfoundation/ethereumjs-util': 9.0.4 + chalk: 2.4.2 + debug: 4.4.0(supports-color@8.1.1) + env-paths: 2.2.1 + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + fs-extra: 7.0.1 + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + io-ts: 1.10.4 + ora: 5.4.1 + transitivePeerDependencies: + - bufferutil + - c-kzg + - supports-color + - utf-8-validate + + '@nomicfoundation/hardhat-network-helpers@1.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))': + dependencies: + ethereumjs-util: 7.1.5 + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) - '@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3))': + '@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))': dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/address': 5.7.0 cbor: 8.1.0 debug: 4.4.0(supports-color@8.1.1) - hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3) + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) lodash.clonedeep: 4.5.0 picocolors: 1.1.1 semver: 6.3.1 @@ -5228,6 +8148,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@nomicfoundation/ignition-core@0.15.9(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/address': 5.6.1 + '@nomicfoundation/solidity-analyzer': 0.1.2 + cbor: 9.0.2 + debug: 4.4.0(supports-color@8.1.1) + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + fs-extra: 10.1.0 + immer: 10.0.2 + lodash: 4.17.21 + ndjson: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@nomicfoundation/ignition-ui@0.15.9': {} + + '@nomicfoundation/slang@0.18.3': + dependencies: + '@bytecodealliance/preview2-shim': 0.17.0 + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': optional: true @@ -5259,11 +8201,118 @@ snapshots: '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.2 '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.2 - '@polka/url@1.0.0-next.28': {} + '@nomiclabs/hardhat-docker@2.0.2(encoding@0.1.13)': + dependencies: + dockerode: 2.5.8 + fs-extra: 7.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color - '@protobufjs/aspromise@1.1.2': {} + '@npmcli/agent@2.2.2': + dependencies: + agent-base: 7.1.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 10.4.3 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color - '@protobufjs/base64@1.1.2': {} + '@npmcli/fs@3.1.1': + dependencies: + semver: 7.6.3 + + '@npmcli/redact@2.0.1': {} + + '@openzeppelin/contracts@5.2.0': {} + + '@openzeppelin/defender-sdk-base-client@2.1.0(encoding@0.1.13)': + dependencies: + '@aws-sdk/client-lambda': 3.734.0 + amazon-cognito-identity-js: 6.3.12(encoding@0.1.13) + async-retry: 1.3.3 + transitivePeerDependencies: + - aws-crt + - encoding + + '@openzeppelin/defender-sdk-deploy-client@2.1.0(debug@4.4.0)(encoding@0.1.13)': + dependencies: + '@openzeppelin/defender-sdk-base-client': 2.1.0(encoding@0.1.13) + axios: 1.7.9(debug@4.4.0) + lodash: 4.17.21 + transitivePeerDependencies: + - aws-crt + - debug + - encoding + + '@openzeppelin/defender-sdk-network-client@2.1.0(debug@4.4.0)(encoding@0.1.13)': + dependencies: + '@openzeppelin/defender-sdk-base-client': 2.1.0(encoding@0.1.13) + axios: 1.7.9(debug@4.4.0) + lodash: 4.17.21 + transitivePeerDependencies: + - aws-crt + - debug + - encoding + + '@openzeppelin/hardhat-upgrades@3.9.0(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(encoding@0.1.13)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))': + dependencies: + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@openzeppelin/defender-sdk-base-client': 2.1.0(encoding@0.1.13) + '@openzeppelin/defender-sdk-deploy-client': 2.1.0(debug@4.4.0)(encoding@0.1.13) + '@openzeppelin/defender-sdk-network-client': 2.1.0(debug@4.4.0)(encoding@0.1.13) + '@openzeppelin/upgrades-core': 1.42.1 + chalk: 4.1.2 + debug: 4.4.0(supports-color@8.1.1) + ethereumjs-util: 7.1.5 + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + proper-lockfile: 4.1.2 + undici: 6.21.1 + optionalDependencies: + '@nomicfoundation/hardhat-verify': 2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + transitivePeerDependencies: + - aws-crt + - encoding + - supports-color + + '@openzeppelin/upgrades-core@1.42.1': + dependencies: + '@nomicfoundation/slang': 0.18.3 + cbor: 10.0.3 + chalk: 4.1.2 + compare-versions: 6.1.1 + debug: 4.4.0(supports-color@8.1.1) + ethereumjs-util: 7.1.5 + minimatch: 9.0.5 + minimist: 1.2.8 + proper-lockfile: 4.1.2 + solidity-ast: 0.4.59 + transitivePeerDependencies: + - supports-color + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@2.3.1': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + '@polka/url@1.0.0-next.28': {} + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} '@protobufjs/codegen@2.0.4': {} @@ -5365,6 +8414,12 @@ snapshots: '@noble/secp256k1': 1.7.1 '@scure/base': 1.1.9 + '@scure/bip32@1.3.2': + dependencies: + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.9 + '@scure/bip32@1.4.0': dependencies: '@noble/curves': 1.4.2 @@ -5376,6 +8431,11 @@ snapshots: '@noble/hashes': 1.2.0 '@scure/base': 1.1.9 + '@scure/bip39@1.2.1': + dependencies: + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.9 + '@scure/bip39@1.3.0': dependencies: '@noble/hashes': 1.4.0 @@ -5430,9 +8490,332 @@ snapshots: '@sentry/types': 5.30.0 tslib: 1.14.1 - '@solidity-parser/parser@0.14.5': + '@sindresorhus/is@4.6.0': {} + + '@sindresorhus/is@5.6.0': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@11.2.2': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@sinonjs/fake-timers@13.0.5': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@sinonjs/samsam@8.0.2': + dependencies: + '@sinonjs/commons': 3.0.1 + lodash.get: 4.4.2 + type-detect: 4.1.0 + + '@sinonjs/text-encoding@0.7.3': {} + + '@smithy/abort-controller@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/config-resolver@4.0.1': + dependencies: + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.1 + tslib: 2.8.1 + + '@smithy/core@3.1.1': + dependencies: + '@smithy/middleware-serde': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-stream': 4.0.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.0.1': + dependencies: + '@smithy/node-config-provider': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + tslib: 2.8.1 + + '@smithy/eventstream-codec@4.0.1': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.1.0 + '@smithy/util-hex-encoding': 4.0.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-browser@4.0.1': dependencies: - antlr4ts: 0.5.0-alpha.4 + '@smithy/eventstream-serde-universal': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-config-resolver@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-node@4.0.1': + dependencies: + '@smithy/eventstream-serde-universal': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-universal@4.0.1': + dependencies: + '@smithy/eventstream-codec': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.0.1': + dependencies: + '@smithy/protocol-http': 5.0.1 + '@smithy/querystring-builder': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 + + '@smithy/hash-node@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/middleware-content-length@4.0.1': + dependencies: + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.0.2': + dependencies: + '@smithy/core': 3.1.1 + '@smithy/middleware-serde': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + '@smithy/url-parser': 4.0.1 + '@smithy/util-middleware': 4.0.1 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.0.3': + dependencies: + '@smithy/node-config-provider': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/service-error-classification': 4.0.1 + '@smithy/smithy-client': 4.1.2 + '@smithy/types': 4.1.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-retry': 4.0.1 + tslib: 2.8.1 + uuid: 9.0.1 + + '@smithy/middleware-serde@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.0.1': + dependencies: + '@smithy/property-provider': 4.0.1 + '@smithy/shared-ini-file-loader': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.0.2': + dependencies: + '@smithy/abort-controller': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/querystring-builder': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/property-provider@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/protocol-http@5.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + '@smithy/util-uri-escape': 4.0.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + + '@smithy/shared-ini-file-loader@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/signature-v4@5.0.1': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-middleware': 4.0.1 + '@smithy/util-uri-escape': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.1.2': + dependencies: + '@smithy/core': 3.1.1 + '@smithy/middleware-endpoint': 4.0.2 + '@smithy/middleware-stack': 4.0.1 + '@smithy/protocol-http': 5.0.1 + '@smithy/types': 4.1.0 + '@smithy/util-stream': 4.0.2 + tslib: 2.8.1 + + '@smithy/types@4.1.0': + dependencies: + tslib: 2.8.1 + + '@smithy/url-parser@4.0.1': + dependencies: + '@smithy/querystring-parser': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-base64@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-body-length-node@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-buffer-from@4.0.0': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-config-provider@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-defaults-mode-browser@4.0.3': + dependencies: + '@smithy/property-provider': 4.0.1 + '@smithy/smithy-client': 4.1.2 + '@smithy/types': 4.1.0 + bowser: 2.11.0 + tslib: 2.8.1 + + '@smithy/util-defaults-mode-node@4.0.3': + dependencies: + '@smithy/config-resolver': 4.0.1 + '@smithy/credential-provider-imds': 4.0.1 + '@smithy/node-config-provider': 4.0.1 + '@smithy/property-provider': 4.0.1 + '@smithy/smithy-client': 4.1.2 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-endpoints@3.0.1': + dependencies: + '@smithy/node-config-provider': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-hex-encoding@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-middleware@4.0.1': + dependencies: + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-retry@4.0.1': + dependencies: + '@smithy/service-error-classification': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 + + '@smithy/util-stream@4.0.2': + dependencies: + '@smithy/fetch-http-handler': 5.0.1 + '@smithy/node-http-handler': 4.0.2 + '@smithy/types': 4.1.0 + '@smithy/util-base64': 4.0.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-uri-escape@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-utf8@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-waiter@4.0.2': + dependencies: + '@smithy/abort-controller': 4.0.1 + '@smithy/types': 4.1.0 + tslib: 2.8.1 '@solidity-parser/parser@0.19.0': {} @@ -5516,14 +8899,14 @@ snapshots: '@stablelib/random': 1.0.2 '@stablelib/wipe': 1.0.1 - '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)))': + '@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)))': dependencies: - '@sveltejs/kit': 2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)) + '@sveltejs/kit': 2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)) import-meta-resolve: 4.1.0 - '@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1))': + '@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 5.1.1 @@ -5537,27 +8920,27 @@ snapshots: sirv: 3.0.0 svelte: 5.17.4 tiny-glob: 0.2.9 - vite: 6.0.7(@types/node@22.10.6)(jiti@2.4.1) + vite: 6.0.7(@types/node@22.10.10)(jiti@2.4.1) - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)) debug: 4.4.0(supports-color@8.1.1) svelte: 5.17.4 - vite: 6.0.7(@types/node@22.10.6)(jiti@2.4.1) + vite: 6.0.7(@types/node@22.10.10)(jiti@2.4.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1))': + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)))(svelte@5.17.4)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)) debug: 4.4.0(supports-color@8.1.1) deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 svelte: 5.17.4 - vite: 6.0.7(@types/node@22.10.6)(jiti@2.4.1) - vitefu: 1.0.5(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)) + vite: 6.0.7(@types/node@22.10.10)(jiti@2.4.1) + vitefu: 1.0.5(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)) transitivePeerDependencies: - supports-color @@ -5565,9 +8948,240 @@ snapshots: dependencies: tslib: 2.8.1 + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 + + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + + '@tenderly/api-client@1.1.0(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)': + dependencies: + axios: 0.27.2 + cli-table3: 0.6.5 + commander: 9.5.0 + dotenv: 16.4.7 + js-yaml: 4.1.0 + open: 8.4.2 + prompts: 2.4.2 + tslog: 4.9.3 + optionalDependencies: + ts-node: 10.9.2(@types/node@22.10.10)(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - debug + + '@tenderly/hardhat-integration@1.1.1(@types/node@22.10.10)(bufferutil@4.0.9)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + dependencies: + '@tenderly/api-client': 1.1.0(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3) + axios: 1.7.9(debug@4.4.0) + dotenv: 16.4.7 + fs-extra: 10.1.0 + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + hardhat-deploy: 0.11.45(bufferutil@4.0.9)(utf-8-validate@5.0.10) + npm-registry-fetch: 17.1.0 + semver: 7.6.3 + ts-node: 10.9.2(@types/node@22.10.10)(typescript@5.7.3) + tslog: 4.9.3 + typescript: 5.7.3 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bufferutil + - debug + - supports-color + - utf-8-validate + + '@tenderly/hardhat-tenderly@2.5.2(@types/node@22.10.10)(bufferutil@4.0.9)(encoding@0.1.13)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@nomicfoundation/hardhat-ignition': 0.15.9(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(bufferutil@4.0.9)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@nomicfoundation/hardhat-verify': 2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@openzeppelin/hardhat-upgrades': 3.9.0(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(encoding@0.1.13)(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + '@openzeppelin/upgrades-core': 1.42.1 + '@tenderly/hardhat-integration': 1.1.1(@types/node@22.10.10)(bufferutil@4.0.9)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + dotenv: 16.4.7 + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - aws-crt + - bufferutil + - debug + - encoding + - hardhat + - supports-color + - utf-8-validate + '@tikz/hedera-mirror-node-ts@3.0.0(axios@1.7.9)': dependencies: - axios: 1.7.9 + axios: 1.7.9(debug@4.4.0) + + '@truffle/compile-common@0.9.8': + dependencies: + '@truffle/error': 0.2.2 + colors: 1.4.0 + + '@truffle/compile-solidity@6.0.79(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': + dependencies: + '@truffle/compile-common': 0.9.8 + '@truffle/config': 1.3.61(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@truffle/contract-sources': 0.2.1 + '@truffle/expect': 0.1.7 + '@truffle/profiler': 0.1.53 + axios: 1.5.0(debug@4.4.0) + axios-retry: 3.9.1 + debug: 4.4.0(supports-color@8.1.1) + fs-extra: 9.1.0 + iter-tools: 7.5.3 + lodash: 4.17.21 + node-abort-controller: 3.1.1 + original-require: 1.0.1 + require-from-string: 2.0.2 + semver: 7.6.3 + solc: 0.8.21(debug@4.4.0) + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@truffle/config@1.3.61(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': + dependencies: + '@truffle/error': 0.2.2 + '@truffle/events': 0.1.25(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@truffle/provider': 0.3.13(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + conf: 10.2.0 + debug: 4.4.0(supports-color@8.1.1) + find-up: 2.1.0 + lodash: 4.17.21 + original-require: 1.0.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@truffle/contract-sources@0.2.1': + dependencies: + debug: 4.4.0(supports-color@8.1.1) + glob: 7.2.3 + transitivePeerDependencies: + - supports-color + + '@truffle/dashboard-hardhat-plugin@0.2.15(bufferutil@4.0.9)(encoding@0.1.13)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': + dependencies: + '@truffle/config': 1.3.61(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@truffle/dashboard-message-bus-client': 0.1.12(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@truffle/from-hardhat': 0.2.20(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@truffle/dashboard-message-bus-client@0.1.12(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@truffle/dashboard-message-bus-common': 0.1.7 + '@truffle/promise-tracker': 0.1.7 + axios: 1.5.0(debug@4.4.0) + debug: 4.4.0(supports-color@8.1.1) + delay: 5.0.0 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + node-abort-controller: 3.1.1 + tiny-typed-emitter: 2.1.0 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@truffle/dashboard-message-bus-common@0.1.7': {} + + '@truffle/error@0.2.2': {} + + '@truffle/events@0.1.25(bufferutil@4.0.9)(utf-8-validate@5.0.10)': + dependencies: + '@truffle/dashboard-message-bus-client': 0.1.12(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@truffle/spinners': 0.2.5 + debug: 4.4.0(supports-color@8.1.1) + emittery: 0.4.1 + web3-utils: 1.10.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@truffle/expect@0.1.7': {} + + '@truffle/from-hardhat@0.2.20(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': + dependencies: + '@truffle/compile-common': 0.9.8 + '@truffle/compile-solidity': 6.0.79(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@truffle/config': 1.3.61(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + debug: 4.4.0(supports-color@8.1.1) + find-up: 2.1.0 + semver: 7.6.3 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@truffle/interface-adapter@0.5.37(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': + dependencies: + bn.js: 5.2.1 + ethers: 4.0.49 + web3: 1.10.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@truffle/profiler@0.1.53': + dependencies: + '@truffle/contract-sources': 0.2.1 + '@truffle/expect': 0.1.7 + debug: 4.4.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@truffle/promise-tracker@0.1.7': {} + + '@truffle/provider@0.3.13(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': + dependencies: + '@truffle/error': 0.2.2 + '@truffle/interface-adapter': 0.5.37(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + debug: 4.4.0(supports-color@8.1.1) + web3: 1.10.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@truffle/spinners@0.2.5': + dependencies: + '@trufflesuite/spinnies': 0.1.1 + + '@trufflesuite/spinnies@0.1.1': + dependencies: + chalk: 4.1.2 + cli-cursor: 3.1.0 + strip-ansi: 6.0.1 + + '@ts-morph/common@0.23.0': + dependencies: + fast-glob: 3.3.3 + minimatch: 9.0.5 + mkdirp: 3.0.1 + path-browserify: 1.0.1 '@tsconfig/node10@1.0.11': {} @@ -5577,29 +9191,36 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@typechain/ethers-v6@0.5.1(ethers@6.13.4)(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3)': + '@typechain/ethers-v6@0.5.1(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3)': dependencies: - ethers: 6.13.4 + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) lodash: 4.17.21 ts-essentials: 7.0.3(typescript@5.7.3) typechain: 8.3.2(typescript@5.7.3) typescript: 5.7.3 - '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.4)(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3))(ethers@6.13.4)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3))(typechain@8.3.2(typescript@5.7.3))': + '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3))(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.3))': dependencies: - '@typechain/ethers-v6': 0.5.1(ethers@6.13.4)(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3) - ethers: 6.13.4 + '@typechain/ethers-v6': 0.5.1(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3) + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) fs-extra: 9.1.0 - hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3) + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) typechain: 8.3.2(typescript@5.7.3) '@types/bn.js@4.11.6': dependencies: - '@types/node': 22.10.6 + '@types/node': 22.10.10 '@types/bn.js@5.1.6': dependencies: - '@types/node': 22.10.6 + '@types/node': 22.10.10 + + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 22.10.10 + '@types/responselike': 1.0.3 '@types/chai-as-promised@7.1.8': dependencies: @@ -5607,38 +9228,36 @@ snapshots: '@types/chai@4.3.20': {} - '@types/concat-stream@1.6.1': - dependencies: - '@types/node': 22.10.6 - '@types/cookie@0.6.0': {} '@types/dns-packet@5.6.5': dependencies: - '@types/node': 22.10.6 + '@types/node': 22.10.10 '@types/estree@1.0.6': {} - '@types/form-data@0.0.33': - dependencies: - '@types/node': 22.10.6 - '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.10.6 + '@types/node': 22.10.10 + + '@types/http-cache-semantics@4.0.4': {} '@types/json-schema@7.0.15': {} + '@types/keyv@3.1.4': + dependencies: + '@types/node': 22.10.10 + '@types/lru-cache@5.1.1': {} '@types/minimatch@5.1.2': {} '@types/mocha@10.0.10': {} - '@types/node@10.17.60': {} + '@types/node@12.20.55': {} - '@types/node@22.10.6': + '@types/node@22.10.10': dependencies: undici-types: 6.20.0 @@ -5646,25 +9265,29 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/node@8.10.66': {} - '@types/pbkdf2@3.1.2': dependencies: - '@types/node': 22.10.6 + '@types/node': 22.10.10 '@types/prettier@2.7.3': {} '@types/qs@6.9.18': {} + '@types/responselike@1.0.3': + dependencies: + '@types/node': 22.10.10 + '@types/secp256k1@4.0.6': dependencies: - '@types/node': 22.10.6 + '@types/node': 22.10.10 '@types/trusted-types@2.0.7': {} + '@types/w3c-web-usb@1.0.10': {} + '@types/ws@8.5.3': dependencies: - '@types/node': 22.10.6 + '@types/node': 22.10.10 '@typescript-eslint/eslint-plugin@8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.3))(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.3)': dependencies: @@ -5683,6 +9306,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/type-utils': 8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.21.0 + eslint: 9.19.0(jiti@2.4.1) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 8.20.0 @@ -5695,11 +9335,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.21.0 + debug: 4.4.0(supports-color@8.1.1) + eslint: 9.19.0(jiti@2.4.1) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.20.0': dependencies: '@typescript-eslint/types': 8.20.0 '@typescript-eslint/visitor-keys': 8.20.0 + '@typescript-eslint/scope-manager@8.21.0': + dependencies: + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/visitor-keys': 8.21.0 + '@typescript-eslint/type-utils@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.7.3) @@ -5711,8 +9368,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3) + debug: 4.4.0(supports-color@8.1.1) + eslint: 9.19.0(jiti@2.4.1) + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.20.0': {} + '@typescript-eslint/types@8.21.0': {} + '@typescript-eslint/typescript-estree@8.20.0(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 8.20.0 @@ -5727,6 +9397,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.21.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/visitor-keys': 8.21.0 + debug: 4.4.0(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 2.0.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@2.4.1)) @@ -5738,18 +9422,34 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@2.4.1)) + '@typescript-eslint/scope-manager': 8.21.0 + '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.7.3) + eslint: 9.19.0(jiti@2.4.1) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.20.0': dependencies: '@typescript-eslint/types': 8.20.0 eslint-visitor-keys: 4.2.0 - '@walletconnect/auth-client@2.1.2': + '@typescript-eslint/visitor-keys@8.21.0': + dependencies: + '@typescript-eslint/types': 8.21.0 + eslint-visitor-keys: 4.2.0 + + '@walletconnect/auth-client@2.1.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@ethersproject/hash': 5.7.0 '@ethersproject/transactions': 5.7.0 '@stablelib/random': 1.0.2 '@stablelib/sha256': 1.0.1 - '@walletconnect/core': 2.17.3 + '@walletconnect/core': 2.17.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 @@ -5757,7 +9457,7 @@ snapshots: '@walletconnect/time': 1.0.2 '@walletconnect/utils': 2.17.3 events: 3.3.0 - isomorphic-unfetch: 3.1.0 + isomorphic-unfetch: 3.1.0(encoding@0.1.13) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -5789,13 +9489,13 @@ snapshots: '@walletconnect/window-metadata': 1.0.0 detect-browser: 5.2.0 - '@walletconnect/core@2.11.2': + '@walletconnect/core@2.11.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/heartbeat': 1.2.1 '@walletconnect/jsonrpc-provider': 1.0.13 '@walletconnect/jsonrpc-types': 1.0.3 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/jsonrpc-ws-connection': 1.0.14 + '@walletconnect/jsonrpc-ws-connection': 1.0.14(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 '@walletconnect/relay-api': 1.0.11 @@ -5805,7 +9505,7 @@ snapshots: '@walletconnect/types': 2.11.2 '@walletconnect/utils': 2.11.2 events: 3.3.0 - isomorphic-unfetch: 3.1.0 + isomorphic-unfetch: 3.1.0(encoding@0.1.13) lodash.isequal: 4.5.0 uint8arrays: 3.1.1 transitivePeerDependencies: @@ -5831,13 +9531,13 @@ snapshots: - uploadthing - utf-8-validate - '@walletconnect/core@2.17.1': + '@walletconnect/core@2.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/jsonrpc-ws-connection': 1.0.14 + '@walletconnect/jsonrpc-ws-connection': 1.0.14(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 '@walletconnect/relay-api': 1.0.11 @@ -5872,13 +9572,13 @@ snapshots: - uploadthing - utf-8-validate - '@walletconnect/core@2.17.3': + '@walletconnect/core@2.17.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-types': 1.0.4 '@walletconnect/jsonrpc-utils': 1.0.8 - '@walletconnect/jsonrpc-ws-connection': 1.0.16 + '@walletconnect/jsonrpc-ws-connection': 1.0.16(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@walletconnect/keyvaluestorage': 1.1.1 '@walletconnect/logger': 2.1.2 '@walletconnect/relay-api': 1.0.11 @@ -5962,22 +9662,22 @@ snapshots: '@walletconnect/jsonrpc-types': 1.0.4 tslib: 1.14.1 - '@walletconnect/jsonrpc-ws-connection@1.0.14': + '@walletconnect/jsonrpc-ws-connection@1.0.14(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/safe-json': 1.0.2 events: 3.3.0 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - '@walletconnect/jsonrpc-ws-connection@1.0.16': + '@walletconnect/jsonrpc-ws-connection@1.0.16(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/safe-json': 1.0.2 events: 3.3.0 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -6066,9 +9766,9 @@ snapshots: dependencies: tslib: 1.14.1 - '@walletconnect/sign-client@2.11.2': + '@walletconnect/sign-client@2.11.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: - '@walletconnect/core': 2.11.2 + '@walletconnect/core': 2.11.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.1 '@walletconnect/jsonrpc-utils': 1.0.8 @@ -6100,9 +9800,9 @@ snapshots: - uploadthing - utf-8-validate - '@walletconnect/sign-client@2.17.1': + '@walletconnect/sign-client@2.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@walletconnect/core': 2.17.1 + '@walletconnect/core': 2.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@walletconnect/events': 1.0.1 '@walletconnect/heartbeat': 1.2.2 '@walletconnect/jsonrpc-utils': 1.0.8 @@ -6343,14 +10043,14 @@ snapshots: - ioredis - uploadthing - '@walletconnect/web3wallet@1.16.1': + '@walletconnect/web3wallet@1.16.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10)': dependencies: - '@walletconnect/auth-client': 2.1.2 - '@walletconnect/core': 2.17.1 + '@walletconnect/auth-client': 2.1.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@walletconnect/core': 2.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@walletconnect/jsonrpc-provider': 1.0.14 '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/logger': 2.1.2 - '@walletconnect/sign-client': 2.17.1 + '@walletconnect/sign-client': 2.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@walletconnect/types': 2.17.1 '@walletconnect/utils': 2.17.1 transitivePeerDependencies: @@ -6391,6 +10091,11 @@ snapshots: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 + JSONStream@1.3.2: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + abbrev@1.0.9: {} abitype@0.7.1(typescript@5.7.3)(zod@3.24.1): @@ -6399,10 +10104,22 @@ snapshots: optionalDependencies: zod: 3.24.1 + abitype@1.0.0(typescript@5.7.3)(zod@3.24.1): + optionalDependencies: + typescript: 5.7.3 + zod: 3.24.1 + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 + abortcontroller-polyfill@1.7.8: {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 @@ -6429,11 +10146,17 @@ snapshots: transitivePeerDependencies: - supports-color + agent-base@7.1.3: {} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -6448,6 +10171,16 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + amazon-cognito-identity-js@6.3.12(encoding@0.1.13): + dependencies: + '@aws-crypto/sha256-js': 1.2.2 + buffer: 4.9.2 + fast-base64-decode: 1.0.0 + isomorphic-unfetch: 3.1.0(encoding@0.1.13) + js-cookie: 2.2.1 + transitivePeerDependencies: + - encoding + amdefine@1.0.1: optional: true @@ -6461,12 +10194,12 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-regex@3.0.1: {} - ansi-regex@4.1.1: {} ansi-regex@5.0.1: {} + ansi-regex@6.1.0: {} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -6475,7 +10208,9 @@ snapshots: dependencies: color-convert: 2.0.1 - antlr4ts@0.5.0-alpha.4: {} + ansi-styles@6.2.1: {} + + antlr4@4.13.2: {} anymatch@3.1.3: dependencies: @@ -6496,11 +10231,9 @@ snapshots: array-back@4.0.2: {} - array-union@2.1.0: {} + array-flatten@1.1.1: {} - array-uniq@1.0.3: {} - - asap@2.0.6: {} + array-union@2.1.0: {} asn1.js@4.10.1: dependencies: @@ -6508,12 +10241,18 @@ snapshots: inherits: 2.0.4 minimalistic-assert: 1.0.1 + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + asn1js@3.0.5: dependencies: pvtsutils: 1.3.6 pvutils: 1.1.3 tslib: 2.8.1 + assert-plus@1.0.0: {} + assert@2.1.0: dependencies: call-bind: 1.0.8 @@ -6524,21 +10263,69 @@ snapshots: assertion-error@1.1.0: {} + ast-parents@0.0.1: {} + astral-regex@2.0.0: {} + async-limiter@1.0.1: {} + + async-retry@1.3.3: + dependencies: + retry: 0.13.1 + async@1.5.2: {} asynckit@0.4.0: {} at-least-node@1.0.0: {} - atomic-sleep@1.0.0: {} + atomic-sleep@1.0.0: {} + + atomically@1.7.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + aws-sign2@0.7.0: {} + + aws4@1.13.2: {} + + axios-retry@3.9.1: + dependencies: + '@babel/runtime': 7.26.7 + is-retry-allowed: 2.2.0 + + axios@0.21.4(debug@4.4.0): + dependencies: + follow-redirects: 1.15.9(debug@4.4.0) + transitivePeerDependencies: + - debug + + axios@0.27.2: + dependencies: + follow-redirects: 1.15.9(debug@4.4.0) + form-data: 4.0.1 + transitivePeerDependencies: + - debug + + axios@1.5.0(debug@4.4.0): + dependencies: + follow-redirects: 1.15.9(debug@4.4.0) + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug - available-typed-arrays@1.0.7: + axios@1.7.7(debug@4.4.0): dependencies: - possible-typed-array-names: 1.0.0 + follow-redirects: 1.15.9(debug@4.4.0) + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug - axios@1.7.9: + axios@1.7.9(debug@4.4.0): dependencies: follow-redirects: 1.15.9(debug@4.4.0) form-data: 4.0.1 @@ -6556,20 +10343,60 @@ snapshots: base64-js@1.5.1: {} + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + bech32@1.1.4: {} bignumber.js@9.1.2: {} binary-extensions@2.3.0: {} + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bl@1.2.3: + dependencies: + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + blakejs@1.2.1: {} + bluebird@3.7.2: {} + bn.js@4.11.6: {} bn.js@4.12.1: {} bn.js@5.2.1: {} + body-parser@1.20.3: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + bowser@2.11.0: {} + boxen@5.1.2: dependencies: ansi-align: 3.0.1 @@ -6596,6 +10423,8 @@ snapshots: brorand@1.1.0: {} + brotli-wasm@2.0.1: {} + browser-resolve@2.0.0: dependencies: resolve: 1.22.10 @@ -6668,8 +10497,16 @@ snapshots: buffer-from@1.1.2: {} + buffer-to-arraybuffer@0.0.5: {} + buffer-xor@1.0.3: {} + buffer@4.9.2: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + isarray: 1.0.0 + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -6680,10 +10517,58 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bufferutil@4.0.9: + dependencies: + node-gyp-build: 4.8.4 + + buildcheck@0.0.6: + optional: true + builtin-status-codes@3.0.0: {} bytes@3.1.2: {} + cacache@18.0.4: + dependencies: + '@npmcli/fs': 3.1.1 + fs-minipass: 3.0.3 + glob: 10.4.5 + lru-cache: 10.4.3 + minipass: 7.1.2 + minipass-collect: 2.0.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + p-map: 4.0.0 + ssri: 10.0.6 + tar: 6.2.1 + unique-filename: 3.0.0 + + cacheable-lookup@5.0.4: {} + + cacheable-lookup@6.1.0: {} + + cacheable-lookup@7.0.0: {} + + cacheable-request@10.2.14: + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.1 + responselike: 3.0.0 + + cacheable-request@7.0.4: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + call-bind-apply-helpers@1.0.1: dependencies: es-errors: 1.3.0 @@ -6709,10 +10594,18 @@ snapshots: caseless@0.12.0: {} + cbor@10.0.3: + dependencies: + nofilter: 3.1.0 + cbor@8.1.0: dependencies: nofilter: 3.1.0 + cbor@9.0.2: + dependencies: + nofilter: 3.1.0 + chai-as-promised@7.1.2(chai@4.5.0): dependencies: chai: 4.5.0 @@ -6761,23 +10654,42 @@ snapshots: dependencies: readdirp: 4.1.1 + chownr@1.1.4: {} + + chownr@2.0.0: {} + ci-info@2.0.0: {} + cids@0.7.5: + dependencies: + buffer: 5.7.1 + class-is: 1.1.0 + multibase: 0.6.1 + multicodec: 1.0.4 + multihashes: 0.4.21 + cipher-base@1.0.6: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + class-is@1.1.0: {} + clean-stack@2.2.0: {} cli-boxes@2.2.1: {} - cli-table3@0.5.1: + cli-cursor@3.1.0: dependencies: - object-assign: 4.1.1 - string-width: 2.1.1 + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 optionalDependencies: - colors: 1.4.0 + '@colors/colors': 1.5.0 cliui@5.0.0: dependencies: @@ -6803,8 +10715,16 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + + clone@1.0.4: {} + clsx@2.1.1: {} + code-block-writer@13.0.3: {} + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -6841,8 +10761,14 @@ snapshots: table-layout: 1.0.2 typical: 5.2.0 + commander@10.0.1: {} + commander@8.3.0: {} + commander@9.5.0: {} + + compare-versions@6.1.1: {} + concat-map@0.0.1: {} concat-stream@1.6.2: @@ -6852,24 +10778,80 @@ snapshots: readable-stream: 2.3.8 typedarray: 0.0.6 + conf@10.2.0: + dependencies: + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + atomically: 1.7.0 + debounce-fn: 4.0.0 + dot-prop: 6.0.1 + env-paths: 2.2.1 + json-schema-typed: 7.0.3 + onetime: 5.1.2 + pkg-up: 3.1.0 + semver: 7.6.3 + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + consola@3.4.0: {} console-browserify@1.2.0: {} constants-browserify@1.0.0: {} + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-hash@2.5.2: + dependencies: + cids: 0.7.5 + multicodec: 0.5.7 + multihashes: 0.4.21 + + content-type@1.0.5: {} + cookie-es@1.2.2: {} + cookie-signature@1.0.6: {} + cookie@0.4.2: {} cookie@0.6.0: {} + cookie@0.7.1: {} + copy-to-clipboard@3.3.3: dependencies: toggle-selection: 1.0.6 + core-util-is@1.0.2: {} + core-util-is@1.0.3: {} + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig@8.3.6(typescript@5.7.3): + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.7.3 + + cpu-features@0.0.10: + dependencies: + buildcheck: 0.0.6 + nan: 2.22.0 + optional: true + crc-32@1.2.2: {} create-ecdh@4.0.4: @@ -6896,9 +10878,15 @@ snapshots: create-require@1.1.1: {} - cross-fetch@4.1.0: + cross-fetch@3.2.0(encoding@0.1.13): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + cross-fetch@4.1.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -6937,12 +10925,33 @@ snapshots: cssesc@3.0.0: {} + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + + dashdash@1.14.1: + dependencies: + assert-plus: 1.0.0 + data-uri-to-buffer@4.0.1: {} dateformat@4.6.3: {} death@1.1.0: {} + debounce-fn@4.0.0: + dependencies: + mimic-fn: 3.1.0 + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + debug@4.4.0(supports-color@8.1.1): dependencies: ms: 2.1.3 @@ -6955,6 +10964,14 @@ snapshots: decode-uri-component@0.2.2: {} + decompress-response@3.3.0: + dependencies: + mimic-response: 1.0.1 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + deep-eql@4.1.4: dependencies: type-detect: 4.1.0 @@ -6965,12 +10982,20 @@ snapshots: deepmerge@4.3.1: {} + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + defer-to-connect@2.0.1: {} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 es-errors: 1.3.0 gopd: 1.2.0 + define-lazy-prop@2.0.0: {} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 @@ -6979,8 +11004,17 @@ snapshots: defu@6.1.4: {} + delay@5.0.0: {} + delayed-stream@1.0.0: {} + delete-empty@3.0.0: + dependencies: + ansi-colors: 4.1.3 + minimist: 1.2.8 + path-starts-with: 2.0.1 + rimraf: 2.7.1 + depd@2.0.0: {} dequal@2.0.3: {} @@ -6992,10 +11026,14 @@ snapshots: destr@2.0.3: {} + destroy@1.2.0: {} + detect-browser@5.2.0: {} detect-browser@5.3.0: {} + detect-libc@2.0.3: {} + devalue@5.1.1: {} diff@4.0.2: {} @@ -7022,8 +11060,52 @@ snapshots: dependencies: '@leichtgewicht/ip-codec': 2.0.5 + docker-modem@1.0.9: + dependencies: + JSONStream: 1.3.2 + debug: 3.2.7 + readable-stream: 1.0.34 + split-ca: 1.0.1 + transitivePeerDependencies: + - supports-color + + docker-modem@5.0.6: + dependencies: + debug: 4.4.0(supports-color@8.1.1) + readable-stream: 3.6.2 + split-ca: 1.0.1 + ssh2: 1.16.0 + transitivePeerDependencies: + - supports-color + + dockerode@2.5.8: + dependencies: + concat-stream: 1.6.2 + docker-modem: 1.0.9 + tar-fs: 1.16.4 + transitivePeerDependencies: + - supports-color + + dockerode@4.0.4: + dependencies: + '@balena/dockerignore': 1.0.2 + '@grpc/grpc-js': 1.12.5 + '@grpc/proto-loader': 0.7.13 + docker-modem: 5.0.6 + protobufjs: 7.4.0 + tar-fs: 2.0.1 + uuid: 10.0.0 + transitivePeerDependencies: + - supports-color + + dom-walk@0.1.2: {} + domain-browser@4.22.0: {} + dot-prop@6.0.1: + dependencies: + is-obj: 2.0.0 + dotenv@16.4.7: {} dunder-proto@1.0.1: @@ -7039,6 +11121,19 @@ snapshots: readable-stream: 3.6.2 stream-shift: 1.0.3 + eastasianwidth@0.2.0: {} + + ecc-jsbn@0.1.2: + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + + ee-first@1.1.1: {} + + eip55@2.1.1: + dependencies: + keccak: 3.0.4 + elliptic@6.5.4: dependencies: bn.js: 4.12.1 @@ -7069,12 +11164,25 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + emittery@0.4.1: {} + emoji-regex@7.0.3: {} emoji-regex@8.0.0: {} + emoji-regex@9.2.2: {} + encode-utf8@1.0.3: {} + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -7086,6 +11194,12 @@ snapshots: env-paths@2.2.1: {} + err-code@2.0.3: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -7094,6 +11208,26 @@ snapshots: dependencies: es-errors: 1.3.0 + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + + es6-promise@4.2.8: {} + + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 + esbuild@0.24.2: optionalDependencies: '@esbuild/aix-ppc64': 0.24.2 @@ -7124,6 +11258,8 @@ snapshots: escalade@3.2.0: {} + escape-html@1.0.3: {} + escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} @@ -7146,7 +11282,11 @@ snapshots: dependencies: eslint: 9.18.0(jiti@2.4.1) - eslint-plugin-svelte@2.46.1(eslint@9.18.0(jiti@2.4.1))(svelte@5.17.4)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3)): + eslint-config-prettier@10.0.1(eslint@9.19.0(jiti@2.4.1)): + dependencies: + eslint: 9.19.0(jiti@2.4.1) + + eslint-plugin-svelte@2.46.1(eslint@9.18.0(jiti@2.4.1))(svelte@5.17.4)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)): dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@2.4.1)) '@jridgewell/sourcemap-codec': 1.5.0 @@ -7155,7 +11295,7 @@ snapshots: esutils: 2.0.3 known-css-properties: 0.35.0 postcss: 8.5.0 - postcss-load-config: 3.1.4(postcss@8.5.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3)) + postcss-load-config: 3.1.4(postcss@8.5.0)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)) postcss-safe-parser: 6.0.0(postcss@8.5.0) postcss-selector-parser: 6.1.2 semver: 7.6.3 @@ -7220,8 +11360,56 @@ snapshots: transitivePeerDependencies: - supports-color + eslint@9.19.0(jiti@2.4.1): + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@9.19.0(jiti@2.4.1)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.10.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.19.0 + '@eslint/plugin-kit': 0.2.5 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0(supports-color@8.1.1) + escape-string-regexp: 4.0.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.1 + transitivePeerDependencies: + - supports-color + esm-env@1.2.2: {} + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + espree@10.3.0: dependencies: acorn: 8.14.0 @@ -7258,26 +11446,32 @@ snapshots: esutils@2.0.3: {} - eth-gas-reporter@0.2.27: + etag@1.8.1: {} + + eth-ens-namehash@2.0.8: dependencies: - '@solidity-parser/parser': 0.14.5 - axios: 1.7.9 - cli-table3: 0.5.1 - colors: 1.4.0 - ethereum-cryptography: 1.2.0 - ethers: 5.7.2 - fs-readdir-recursive: 1.1.0 - lodash: 4.17.21 - markdown-table: 1.1.3 - mocha: 10.8.2 - req-cwd: 2.0.0 - sha1: 1.1.1 - sync-request: 6.1.0 + idna-uts46-hx: 2.3.1 + js-sha3: 0.5.7 + + eth-lib@0.1.29(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + bn.js: 4.12.1 + elliptic: 6.6.1 + nano-json-stream-parser: 0.1.2 + servify: 0.1.12 + ws: 3.3.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + xhr-request-promise: 0.1.3 transitivePeerDependencies: - bufferutil - - debug + - supports-color - utf-8-validate + eth-lib@0.2.8: + dependencies: + bn.js: 4.12.1 + elliptic: 6.6.1 + xhr-request-promise: 0.1.3 + ethereum-bloom-filters@1.2.0: dependencies: '@noble/hashes': 1.7.0 @@ -7337,7 +11531,19 @@ snapshots: ethereum-cryptography: 0.1.3 rlp: 2.2.7 - ethers@5.7.2: + ethers@4.0.49: + dependencies: + aes-js: 3.0.0 + bn.js: 4.12.1 + elliptic: 6.5.4 + hash.js: 1.1.3 + js-sha3: 0.5.7 + scrypt-js: 2.0.4 + setimmediate: 1.0.4 + uuid: 2.0.1 + xmlhttprequest: 1.8.0 + + ethers@5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/abstract-provider': 5.7.0 @@ -7357,7 +11563,7 @@ snapshots: '@ethersproject/networks': 5.7.1 '@ethersproject/pbkdf2': 5.7.0 '@ethersproject/properties': 5.7.0 - '@ethersproject/providers': 5.7.2 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@ethersproject/random': 5.7.0 '@ethersproject/rlp': 5.7.0 '@ethersproject/sha2': 5.7.0 @@ -7373,7 +11579,7 @@ snapshots: - bufferutil - utf-8-validate - ethers@6.13.4: + ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@adraffy/ens-normalize': 1.10.1 '@noble/curves': 1.2.0 @@ -7381,7 +11587,7 @@ snapshots: '@types/node': 22.7.5 aes-js: 4.0.0-beta.5 tslib: 2.7.0 - ws: 8.17.1 + ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -7396,8 +11602,15 @@ snapshots: is-hex-prefixed: 1.0.0 strip-hex-prefix: 1.0.0 + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-target-shim@5.0.1: {} + eventemitter3@4.0.4: {} + eventemitter3@5.0.1: {} events@3.3.0: {} @@ -7407,10 +11620,60 @@ snapshots: md5.js: 1.3.5 safe-buffer: 5.2.1 + expand-template@2.0.3: {} + + express@4.21.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + ext@1.7.0: + dependencies: + type: 2.7.3 + + extend@3.0.2: {} + + extsprintf@1.3.0: {} + + fast-base64-decode@1.0.0: {} + fast-copy@3.0.2: {} fast-deep-equal@3.1.3: {} + fast-diff@1.3.0: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7429,6 +11692,10 @@ snapshots: fast-uri@3.0.5: {} + fast-xml-parser@4.4.1: + dependencies: + strnum: 1.0.5 + fastq@1.18.0: dependencies: reusify: 1.0.4 @@ -7446,16 +11713,34 @@ snapshots: dependencies: flat-cache: 4.0.1 + file-uri-to-path@1.0.0: {} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 filter-obj@1.1.0: {} + finalhandler@1.3.1: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + find-replace@3.0.0: dependencies: array-back: 3.1.0 + find-up@2.1.0: + dependencies: + locate-path: 2.0.0 + find-up@3.0.0: dependencies: locate-path: 3.0.0 @@ -7479,6 +11764,10 @@ snapshots: flatted@3.3.2: {} + fmix@0.1.0: + dependencies: + imul: 1.0.1 + focus-trap@7.6.4: dependencies: tabbable: 6.2.0 @@ -7491,12 +11780,22 @@ snapshots: dependencies: is-callable: 1.2.7 - form-data@2.5.2: + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + forever-agent@0.6.1: {} + + form-data-encoder@1.7.1: {} + + form-data-encoder@2.1.4: {} + + form-data@2.3.3: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - safe-buffer: 5.2.1 form-data@4.0.1: dependencies: @@ -7508,8 +11807,32 @@ snapshots: dependencies: fetch-blob: 3.2.0 + forwarded@0.2.0: {} + fp-ts@1.19.3: {} + fresh@0.5.2: {} + + fs-constants@1.0.0: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@4.0.3: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -7529,7 +11852,17 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 - fs-readdir-recursive@1.1.0: {} + fs-minipass@1.2.7: + dependencies: + minipass: 2.9.0 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs-minipass@3.0.3: + dependencies: + minipass: 7.1.2 fs.realpath@1.0.0: {} @@ -7555,18 +11888,28 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 - get-port@3.2.0: {} - get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 es-object-atoms: 1.0.1 + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + + get-stream@6.0.1: {} + + getpass@0.1.7: + dependencies: + assert-plus: 1.0.0 + ghost-testrpc@0.0.2: dependencies: chalk: 2.4.2 node-emoji: 1.11.0 + github-from-package@0.0.0: {} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -7575,6 +11918,15 @@ snapshots: dependencies: is-glob: 4.0.3 + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + glob@5.0.15: dependencies: inflight: 1.0.6 @@ -7619,6 +11971,11 @@ snapshots: kind-of: 6.0.3 which: 1.3.1 + global@4.4.0: + dependencies: + min-document: 2.19.0 + process: 0.11.10 + globals@14.0.0: {} globals@15.14.0: {} @@ -7640,6 +11997,52 @@ snapshots: gopd@1.2.0: {} + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + + got@12.1.0: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 5.0.1 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 6.1.0 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + form-data-encoder: 1.7.1 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 2.0.1 + + got@12.6.1: + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + graceful-fs@4.2.10: {} + graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -7666,19 +12069,83 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - hardhat-gas-reporter@1.0.10(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3)): + har-schema@2.0.0: {} + + har-validator@5.1.5: + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + + hardhat-abi-exporter@2.10.1(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)): + dependencies: + '@ethersproject/abi': 5.7.0 + delete-empty: 3.0.0 + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + + hardhat-contract-sizer@2.10.0(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)): + dependencies: + chalk: 4.1.2 + cli-table3: 0.6.5 + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + strip-ansi: 6.0.1 + + hardhat-deploy@0.11.45(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@ethersproject/solidity': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@types/qs': 6.9.18 + axios: 0.21.4(debug@4.4.0) + chalk: 4.1.2 + chokidar: 3.6.0 + debug: 4.4.0(supports-color@8.1.1) + enquirer: 2.4.1 + ethers: 5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + form-data: 4.0.1 + fs-extra: 10.1.0 + match-all: 1.2.6 + murmur-128: 0.2.1 + qs: 6.13.1 + zksync-web3: 0.14.4(ethers@5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + hardhat-gas-reporter@2.2.2(bufferutil@4.0.9)(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10))(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1): dependencies: - array-uniq: 1.0.3 - eth-gas-reporter: 0.2.27 - hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3) + '@ethersproject/abi': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/units': 5.7.0 + '@solidity-parser/parser': 0.19.0 + axios: 1.7.9(debug@4.4.0) + brotli-wasm: 2.0.1 + chalk: 4.1.2 + cli-table3: 0.6.5 + ethereum-cryptography: 2.2.1 + glob: 10.4.5 + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + jsonschema: 1.5.0 + lodash: 4.17.21 + markdown-table: 2.0.0 sha1: 1.1.1 + viem: 2.7.14(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) transitivePeerDependencies: - - '@codechecks/client' - bufferutil - debug + - typescript - utf-8-validate + - zod - hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3): + hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 @@ -7723,9 +12190,9 @@ snapshots: tsort: 0.0.1 undici: 5.28.4 uuid: 8.3.2 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - ts-node: 10.9.2(@types/node@22.10.6)(typescript@5.7.3) + ts-node: 10.9.2(@types/node@22.10.10)(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - bufferutil @@ -7760,19 +12227,24 @@ snapshots: readable-stream: 3.6.2 safe-buffer: 5.2.1 + hash.js@1.1.3: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + hash.js@1.1.7: dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 - hashconnect@3.0.13(react@18.3.1): + hashconnect@3.0.13(bufferutil@4.0.9)(encoding@0.1.13)(react@18.3.1)(utf-8-validate@5.0.10): dependencies: '@hashgraph/cryptography': 1.4.7 - '@hashgraph/hedera-wallet-connect': 1.0.6 + '@hashgraph/hedera-wallet-connect': 1.0.6(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@hashgraph/sdk': 2.41.0 - '@walletconnect/auth-client': 2.1.2 + '@walletconnect/auth-client': 2.1.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@walletconnect/modal': 2.6.2(react@18.3.1) - '@walletconnect/sign-client': 2.11.2 + '@walletconnect/sign-client': 2.11.2(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) '@walletconnect/types': 2.11.2 buffer: 6.0.3 ts-typed-events: 3.0.0 @@ -7825,12 +12297,11 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - http-basic@8.1.3: + hosted-git-info@7.0.2: dependencies: - caseless: 0.12.0 - concat-stream: 1.6.2 - http-response-object: 3.0.2 - parse-cache-control: 1.0.1 + lru-cache: 10.4.3 + + http-cache-semantics@4.1.1: {} http-errors@2.0.0: dependencies: @@ -7840,9 +12311,30 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-response-object@3.0.2: + http-https@1.0.0: {} + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + http-signature@1.2.0: + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.2 + sshpk: 1.18.0 + + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + http2-wrapper@2.2.1: dependencies: - '@types/node': 10.17.60 + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 https-browserify@1.0.0: {} @@ -7853,16 +12345,34 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + optional: true + idb-keyval@6.2.1: {} + idna-uts46-hx@2.3.1: + dependencies: + punycode: 2.1.0 + ieee754@1.2.1: {} ignore@5.3.2: {} + immer@10.0.2: {} + immutable@4.3.7: {} import-fresh@3.3.0: @@ -7872,6 +12382,8 @@ snapshots: import-meta-resolve@4.1.0: {} + imul@1.0.1: {} + imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -7887,10 +12399,21 @@ snapshots: interpret@1.4.0: {} + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + io-ts@1.10.4: dependencies: fp-ts: 1.19.3 + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + ipaddr.js@1.9.1: {} + iron-webcrypto@1.2.1: {} is-arguments@1.2.0: @@ -7898,6 +12421,8 @@ snapshots: call-bound: 1.0.3 has-tostringtag: 1.0.2 + is-arrayish@0.2.1: {} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -7908,12 +12433,16 @@ snapshots: dependencies: hasown: 2.0.2 + is-docker@2.2.1: {} + is-extglob@2.1.1: {} is-fullwidth-code-point@2.0.0: {} is-fullwidth-code-point@3.0.0: {} + is-function@1.0.2: {} + is-generator-function@1.1.0: dependencies: call-bound: 1.0.3 @@ -7927,6 +12456,8 @@ snapshots: is-hex-prefixed@1.0.0: {} + is-interactive@1.0.0: {} + is-ipfs@8.0.4: dependencies: '@multiformats/mafmt': 12.1.6 @@ -7935,6 +12466,8 @@ snapshots: multiformats: 13.3.1 uint8arrays: 5.1.0 + is-lambda@1.0.1: {} + is-nan@1.3.2: dependencies: call-bind: 1.0.8 @@ -7942,6 +12475,8 @@ snapshots: is-number@7.0.0: {} + is-obj@2.0.0: {} + is-plain-obj@2.1.0: {} is-reference@3.0.3: @@ -7955,12 +12490,22 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + is-retry-allowed@2.2.0: {} + is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.18 + is-typedarray@1.0.0: {} + is-unicode-supported@0.1.0: {} + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isarray@0.0.1: {} + isarray@1.0.0: {} isarray@2.0.5: {} @@ -7971,16 +12516,36 @@ snapshots: isomorphic-timers-promises@1.0.1: {} - isomorphic-unfetch@3.1.0: + isomorphic-unfetch@3.1.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) unfetch: 4.2.0 transitivePeerDependencies: - encoding - isomorphic-ws@5.0.0(ws@8.18.0): + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + isomorphic-ws@5.0.0(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + isows@1.0.3(ws@8.13.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - ws: 8.18.0 + ws: 8.13.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + isstream@0.1.2: {} + + iter-tools@7.5.3: + dependencies: + '@babel/runtime': 7.26.7 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 jiti@2.4.1: optional: true @@ -7989,6 +12554,10 @@ snapshots: js-base64@3.7.7: {} + js-cookie@2.2.1: {} + + js-sha3@0.5.7: {} + js-sha3@0.8.0: {} js-tokens@4.0.0: {} @@ -8002,16 +12571,30 @@ snapshots: dependencies: argparse: 2.0.1 + jsbn@0.1.1: {} + + jsbn@1.1.0: {} + json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} + json-schema-traverse@0.4.1: {} json-schema-traverse@1.0.0: {} + json-schema-typed@7.0.3: {} + + json-schema@0.4.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json-stream-stringify@3.1.6: {} + json-stringify-safe@5.0.1: {} + + json5@2.2.3: {} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -8022,8 +12605,19 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonparse@1.3.1: {} + jsonschema@1.5.0: {} + jsprim@1.4.2: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + + just-extend@6.2.0: {} + keccak@3.0.4: dependencies: node-addon-api: 2.0.2 @@ -8038,10 +12632,16 @@ snapshots: kind-of@6.0.3: {} + kleur@3.0.3: {} + kleur@4.1.5: {} known-css-properties@0.35.0: {} + latest-version@7.0.0: + dependencies: + package-json: 8.1.1 + levn@0.3.0: dependencies: prelude-ls: 1.1.2 @@ -8054,6 +12654,8 @@ snapshots: lilconfig@2.1.0: {} + lines-and-columns@1.2.4: {} + lit-element@3.3.3: dependencies: '@lit-labs/ssr-dom-shim': 1.3.0 @@ -8072,6 +12674,11 @@ snapshots: locate-character@3.0.0: {} + locate-path@2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -8089,6 +12696,8 @@ snapshots: lodash.clonedeep@4.5.0: {} + lodash.get@4.4.2: {} + lodash.isequal@4.5.0: {} lodash.merge@4.6.2: {} @@ -8114,6 +12723,10 @@ snapshots: dependencies: get-func-name: 2.0.2 + lowercase-keys@2.0.0: {} + + lowercase-keys@3.0.0: {} + lru-cache@10.4.3: {} lru_map@0.3.3: {} @@ -8128,7 +12741,28 @@ snapshots: make-error@1.3.6: {} - markdown-table@1.1.3: {} + make-fetch-happen@13.0.1: + dependencies: + '@npmcli/agent': 2.2.2 + cacache: 18.0.4 + http-cache-semantics: 4.1.1 + is-lambda: 1.0.1 + minipass: 7.1.2 + minipass-fetch: 3.0.5 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.4 + proc-log: 4.2.0 + promise-retry: 2.0.1 + ssri: 10.0.6 + transitivePeerDependencies: + - supports-color + + markdown-table@2.0.0: + dependencies: + repeat-string: 1.6.1 + + match-all@1.2.6: {} math-intrinsics@1.1.0: {} @@ -8138,10 +12772,16 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 + media-typer@0.3.0: {} + memorystream@0.3.1: {} + merge-descriptors@1.0.3: {} + merge2@1.4.1: {} + methods@1.1.2: {} + micro-ftch@0.3.1: {} micromatch@4.0.8: @@ -8160,8 +12800,24 @@ snapshots: dependencies: mime-db: 1.52.0 + mime@1.6.0: {} + mime@3.0.0: {} + mimic-fn@2.1.0: {} + + mimic-fn@3.1.0: {} + + mimic-response@1.0.1: {} + + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} + + min-document@2.19.0: + dependencies: + dom-walk: 0.1.2 + minimalistic-assert@1.0.1: {} minimalistic-crypto-utils@1.0.1: {} @@ -8172,13 +12828,65 @@ snapshots: minimatch@5.1.6: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass-collect@2.0.1: + dependencies: + minipass: 7.1.2 + + minipass-fetch@3.0.5: + dependencies: + minipass: 7.1.2 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + + minipass-flush@1.0.5: + dependencies: + minipass: 3.3.6 + + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 + + minipass-sized@1.0.3: + dependencies: + minipass: 3.3.6 + + minipass@2.9.0: + dependencies: + safe-buffer: 5.2.1 + yallist: 3.1.1 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@1.3.3: + dependencies: + minipass: 2.9.0 - minimatch@9.0.5: + minizlib@2.1.2: dependencies: - brace-expansion: 2.0.1 + minipass: 3.3.6 + yallist: 4.0.0 - minimist@1.2.8: {} + mkdirp-classic@0.5.3: {} + + mkdirp-promise@5.0.1: + dependencies: + mkdirp: 1.0.4 mkdirp@0.5.6: dependencies: @@ -8186,6 +12894,8 @@ snapshots: mkdirp@1.0.4: {} + mkdirp@3.0.1: {} + mnemonist@0.38.5: dependencies: obliterator: 2.0.5 @@ -8213,6 +12923,8 @@ snapshots: yargs-parser: 20.2.9 yargs-unparser: 2.0.0 + mock-fs@4.14.0: {} + motion@10.16.2: dependencies: '@motionone/animation': 10.18.0 @@ -8226,24 +12938,96 @@ snapshots: mrmime@2.0.0: {} + ms@2.0.0: {} + ms@2.1.3: {} + multibase@0.6.1: + dependencies: + base-x: 3.0.10 + buffer: 5.7.1 + + multibase@0.7.0: + dependencies: + base-x: 3.0.10 + buffer: 5.7.1 + + multicodec@0.5.7: + dependencies: + varint: 5.0.2 + + multicodec@1.0.4: + dependencies: + buffer: 5.7.1 + varint: 5.0.2 + multiformats@13.3.1: {} multiformats@9.9.0: {} + multihashes@0.4.21: + dependencies: + buffer: 5.7.1 + multibase: 0.7.0 + varint: 5.0.2 + + murmur-128@0.2.1: + dependencies: + encode-utf8: 1.0.3 + fmix: 0.1.0 + imul: 1.0.1 + + nan@2.22.0: + optional: true + + nano-json-stream-parser@0.1.2: {} + nanoid@3.3.8: {} nanoid@5.0.9: {} + napi-build-utils@2.0.0: {} + natural-compare@1.4.0: {} + ndjson@2.0.0: + dependencies: + json-stringify-safe: 5.0.1 + minimist: 1.2.8 + readable-stream: 3.6.2 + split2: 3.2.2 + through2: 4.0.2 + + negotiator@0.6.3: {} + + negotiator@0.6.4: {} + neo-async@2.6.2: {} + next-tick@1.1.0: {} + + nise@6.1.1: + dependencies: + '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers': 13.0.5 + '@sinonjs/text-encoding': 0.7.3 + just-extend: 6.2.0 + path-to-regexp: 8.2.0 + + node-abi@3.73.0: + dependencies: + semver: 7.6.3 + + node-abort-controller@3.1.1: {} + node-addon-api@2.0.2: {} + node-addon-api@3.2.1: {} + node-addon-api@5.1.0: {} + node-addon-api@6.1.0: {} + node-domexception@1.0.0: {} node-emoji@1.11.0: @@ -8252,9 +13036,11 @@ snapshots: node-fetch-native@1.6.4: {} - node-fetch@2.7.0: + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 node-fetch@3.3.2: dependencies: @@ -8266,6 +13052,12 @@ snapshots: node-gyp-build@4.8.4: {} + node-hid@2.1.2: + dependencies: + bindings: 1.5.0 + node-addon-api: 3.2.1 + prebuild-install: 7.1.3 + node-stdlib-browser@1.3.0: dependencies: assert: 2.1.0 @@ -8304,11 +13096,37 @@ snapshots: normalize-path@3.0.0: {} + normalize-url@6.1.0: {} + + normalize-url@8.0.1: {} + + npm-package-arg@11.0.3: + dependencies: + hosted-git-info: 7.0.2 + proc-log: 4.2.0 + semver: 7.6.3 + validate-npm-package-name: 5.0.1 + + npm-registry-fetch@17.1.0: + dependencies: + '@npmcli/redact': 2.0.1 + jsonparse: 1.3.1 + make-fetch-happen: 13.0.1 + minipass: 7.1.2 + minipass-fetch: 3.0.5 + minizlib: 2.1.2 + npm-package-arg: 11.0.3 + proc-log: 4.2.0 + transitivePeerDependencies: + - supports-color + number-to-bn@1.7.0: dependencies: bn.js: 4.11.6 strip-hex-prefix: 1.0.0 + oauth-sign@0.9.0: {} + object-assign@4.1.1: {} object-inspect@1.13.3: {} @@ -8331,6 +13149,10 @@ snapshots: obliterator@2.0.5: {} + oboe@2.1.5: + dependencies: + http-https: 1.0.0 + ofetch@1.4.1: dependencies: destr: 2.0.3 @@ -8343,10 +13165,24 @@ snapshots: on-exit-leak-free@2.1.2: {} + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + once@1.4.0: dependencies: wrappy: 1.0.2 + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + opentype.js@1.3.4: dependencies: string.prototype.codepointat: 0.2.1 @@ -8370,12 +13206,34 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + ordinal@1.0.3: {} + original-require@1.0.1: {} + os-browserify@0.3.0: {} os-tmpdir@1.0.2: {} + p-cancelable@2.1.1: {} + + p-cancelable@3.0.0: {} + + p-limit@1.3.0: + dependencies: + p-try: 1.0.0 + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -8384,6 +13242,10 @@ snapshots: dependencies: yocto-queue: 0.1.0 + p-locate@2.0.0: + dependencies: + p-limit: 1.3.0 + p-locate@3.0.0: dependencies: p-limit: 2.3.0 @@ -8407,8 +13269,19 @@ snapshots: p-timeout@6.1.4: {} + p-try@1.0.0: {} + p-try@2.2.0: {} + package-json-from-dist@1.0.1: {} + + package-json@8.1.1: + dependencies: + got: 12.6.1 + registry-auth-token: 5.0.3 + registry-url: 6.0.1 + semver: 7.6.3 + pako@1.0.11: {} parent-module@1.0.1: @@ -8424,7 +13297,16 @@ snapshots: pbkdf2: 3.1.2 safe-buffer: 5.2.1 - parse-cache-control@1.0.1: {} + parse-headers@2.0.5: {} + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parseurl@1.3.3: {} path-browserify@1.0.1: {} @@ -8438,6 +13320,17 @@ snapshots: path-parse@1.0.7: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-starts-with@2.0.1: {} + + path-to-regexp@0.1.12: {} + + path-to-regexp@8.2.0: {} + path-type@4.0.0: {} pathe@1.1.2: {} @@ -8452,6 +13345,8 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.11 + performance-now@2.1.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -8462,7 +13357,7 @@ snapshots: pinata-web3@0.5.4: dependencies: - axios: 1.7.9 + axios: 1.7.9(debug@4.4.0) form-data: 4.0.1 is-ipfs: 8.0.4 node-fetch: 3.3.2 @@ -8532,6 +13427,12 @@ snapshots: dependencies: find-up: 5.0.0 + pkg-up@3.1.0: + dependencies: + find-up: 3.0.0 + + pluralize@8.0.0: {} + pngjs@3.4.0: {} pngjs@5.0.0: {} @@ -8542,13 +13443,13 @@ snapshots: dependencies: postcss: 8.5.0 - postcss-load-config@3.1.4(postcss@8.5.0)(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3)): + postcss-load-config@3.1.4(postcss@8.5.0)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3)): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.5.0 - ts-node: 10.9.2(@types/node@22.10.6)(typescript@5.7.3) + ts-node: 10.9.2(@types/node@22.10.10)(typescript@5.7.3) postcss-safe-parser@6.0.0(postcss@8.5.0): dependencies: @@ -8571,6 +13472,21 @@ snapshots: preact@10.4.1: {} + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.0.3 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.73.0 + pump: 3.0.2 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.2 + tunnel-agent: 0.6.0 + prelude-ls@1.1.2: {} prelude-ls@1.2.1: {} @@ -8589,6 +13505,12 @@ snapshots: prettier: 3.4.2 typescript: 5.7.3 + prettier-plugin-solidity@1.4.2(prettier@3.4.2): + dependencies: + '@solidity-parser/parser': 0.19.0 + prettier: 3.4.2 + semver: 7.6.3 + prettier-plugin-svelte@3.3.3(prettier@3.4.2)(svelte@5.17.4): dependencies: prettier: 3.4.2 @@ -8598,6 +13520,8 @@ snapshots: prettier@3.4.2: {} + proc-log@4.2.0: {} + process-nextick-args@2.0.1: {} process-warning@1.0.0: {} @@ -8608,9 +13532,23 @@ snapshots: progress-events@1.0.1: {} - promise@8.3.0: + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + + prompts@2.4.2: dependencies: - asap: 2.0.6 + kleur: 3.0.3 + sisteransi: 1.0.5 + + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + + proto-list@1.2.4: {} protobufjs@7.2.5: dependencies: @@ -8624,7 +13562,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.10.6 + '@types/node': 22.10.10 long: 5.2.4 protobufjs@7.4.0: @@ -8639,13 +13577,22 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.10.6 + '@types/node': 22.10.10 long: 5.2.4 + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + proxy-compare@2.5.1: {} proxy-from-env@1.1.0: {} + psl@1.15.0: + dependencies: + punycode: 2.3.1 + public-encrypt@4.0.3: dependencies: bn.js: 4.12.1 @@ -8655,6 +13602,11 @@ snapshots: randombytes: 2.1.0 safe-buffer: 5.2.1 + pump@1.0.3: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + pump@3.0.2: dependencies: end-of-stream: 1.4.4 @@ -8662,6 +13614,8 @@ snapshots: punycode@1.4.1: {} + punycode@2.1.0: {} + punycode@2.3.1: {} pvtsutils@1.3.6: @@ -8693,10 +13647,22 @@ snapshots: pngjs: 5.0.0 yargs: 15.4.1 + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + qs@6.13.1: dependencies: side-channel: 1.1.0 + qs@6.5.3: {} + + query-string@5.1.1: + dependencies: + decode-uri-component: 0.2.2 + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + query-string@7.1.3: dependencies: decode-uri-component: 0.2.2 @@ -8710,6 +13676,8 @@ snapshots: quick-format-unescaped@4.0.4: {} + quick-lru@5.1.1: {} + radix3@1.1.2: {} randombytes@2.1.0: @@ -8721,6 +13689,8 @@ snapshots: randombytes: 2.1.0 safe-buffer: 5.2.1 + range-parser@1.2.1: {} + raw-body@2.5.2: dependencies: bytes: 3.1.2 @@ -8728,10 +13698,30 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + react@18.3.1: dependencies: loose-envify: 1.4.0 + readable-stream@1.0.34: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -8776,13 +13766,40 @@ snapshots: reduce-flatten@2.0.0: {} - req-cwd@2.0.0: + regenerator-runtime@0.14.1: {} + + registry-auth-token@5.0.3: + dependencies: + '@pnpm/npm-conf': 2.3.1 + + registry-url@6.0.1: dependencies: - req-from: 2.0.0 + rc: 1.2.8 - req-from@2.0.0: + repeat-string@1.6.1: {} + + request@2.88.2: dependencies: - resolve-from: 3.0.0 + aws-sign2: 0.7.0 + aws4: 1.13.2 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.3 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 require-directory@2.1.1: {} @@ -8790,7 +13807,7 @@ snapshots: require-main-filename@2.0.0: {} - resolve-from@3.0.0: {} + resolve-alpn@1.2.1: {} resolve-from@4.0.0: {} @@ -8806,10 +13823,31 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retry@0.12.0: {} + + retry@0.13.1: {} + reusify@1.0.4: {} rfc4648@1.5.4: {} + rimraf@2.7.1: + dependencies: + glob: 7.2.3 + ripemd160@2.0.2: dependencies: hash-base: 3.1.0 @@ -8848,6 +13886,10 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + sade@1.8.1: dependencies: mri: 1.2.0 @@ -8883,6 +13925,12 @@ snapshots: which: 1.3.1 wordwrap: 1.0.0 + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + scrypt-js@2.0.4: {} + scrypt-js@3.0.1: {} secp256k1@4.0.4: @@ -8899,10 +13947,47 @@ snapshots: semver@7.6.3: {} + send@0.19.0: + 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 + transitivePeerDependencies: + - supports-color + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + + servify@0.1.12: + dependencies: + body-parser: 1.20.3 + cors: 2.8.5 + express: 4.21.2 + request: 2.88.2 + xhr: 2.6.0 + transitivePeerDependencies: + - supports-color + set-blocking@2.0.0: {} set-cookie-parser@2.7.1: {} @@ -8916,6 +14001,8 @@ snapshots: gopd: 1.2.0 has-property-descriptors: 1.0.2 + setimmediate@1.0.4: {} + setimmediate@1.0.5: {} setprototypeof@1.2.0: {} @@ -8970,12 +14057,46 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-concat@1.0.1: {} + + simple-get@2.8.2: + dependencies: + decompress-response: 3.3.0 + once: 1.4.0 + simple-concat: 1.0.1 + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + + sinon-chai@3.7.0(chai@4.5.0)(sinon@18.0.1): + dependencies: + chai: 4.5.0 + sinon: 18.0.1 + + sinon@18.0.1: + dependencies: + '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers': 11.2.2 + '@sinonjs/samsam': 8.0.2 + diff: 5.2.0 + nise: 6.1.1 + supports-color: 7.2.0 + sirv@3.0.0: dependencies: '@polka/url': 1.0.0-next.28 mrmime: 2.0.0 totalist: 3.0.1 + sisteransi@1.0.5: {} + slash@3.0.0: {} slice-ansi@4.0.0: @@ -8984,6 +14105,33 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 + smart-buffer@4.2.0: {} + + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@8.1.1) + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + + socks@2.8.3: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + solc@0.8.21(debug@4.4.0): + dependencies: + command-exists: 1.2.9 + commander: 8.3.0 + follow-redirects: 1.15.9(debug@4.4.0) + js-sha3: 0.8.0 + memorystream: 0.3.1 + semver: 5.7.2 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + solc@0.8.26(debug@4.4.0): dependencies: command-exists: 1.2.9 @@ -8996,7 +14144,34 @@ snapshots: transitivePeerDependencies: - debug - solidity-coverage@0.8.14(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3)): + solhint@5.0.5(typescript@5.7.3): + dependencies: + '@solidity-parser/parser': 0.19.0 + ajv: 6.12.6 + antlr4: 4.13.2 + ast-parents: 0.0.1 + chalk: 4.1.2 + commander: 10.0.1 + cosmiconfig: 8.3.6(typescript@5.7.3) + fast-diff: 1.3.0 + glob: 8.1.0 + ignore: 5.3.2 + js-yaml: 4.1.0 + latest-version: 7.0.0 + lodash: 4.17.21 + pluralize: 8.0.0 + semver: 7.6.3 + strip-ansi: 6.0.1 + table: 6.9.0 + text-table: 0.2.0 + optionalDependencies: + prettier: 2.8.8 + transitivePeerDependencies: + - typescript + + solidity-ast@0.4.59: {} + + solidity-coverage@0.8.14(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)): dependencies: '@ethersproject/abi': 5.7.0 '@solidity-parser/parser': 0.19.0 @@ -9007,7 +14182,7 @@ snapshots: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3))(typescript@5.7.3) + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) jsonschema: 1.5.0 lodash: 4.17.21 mocha: 10.8.2 @@ -9043,11 +14218,43 @@ snapshots: spark-md5@3.0.2: {} + split-ca@1.0.1: {} + split-on-first@1.1.0: {} + split2@3.2.2: + dependencies: + readable-stream: 3.6.2 + split2@4.2.0: {} - sprintf-js@1.0.3: {} + sprintf-js@1.0.3: {} + + sprintf-js@1.1.3: {} + + ssh2@1.16.0: + dependencies: + asn1: 0.2.6 + bcrypt-pbkdf: 1.0.2 + optionalDependencies: + cpu-features: 0.0.10 + nan: 2.22.0 + + sshpk@1.18.0: + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + + ssri@10.0.6: + dependencies: + minipass: 7.1.2 stacktrace-parser@0.1.10: dependencies: @@ -9069,15 +14276,12 @@ snapshots: stream-shift@1.0.3: {} + strict-uri-encode@1.1.0: {} + strict-uri-encode@2.0.0: {} string-format@2.0.0: {} - string-width@2.1.1: - dependencies: - is-fullwidth-code-point: 2.0.0 - strip-ansi: 4.0.0 - string-width@3.1.0: dependencies: emoji-regex: 7.0.3 @@ -9090,8 +14294,16 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + string.prototype.codepointat@0.2.1: {} + string_decoder@0.10.31: {} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -9100,10 +14312,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - strip-ansi@4.0.0: - dependencies: - ansi-regex: 3.0.1 - strip-ansi@5.2.0: dependencies: ansi-regex: 4.1.1 @@ -9112,12 +14320,20 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed: 1.0.0 + strip-json-comments@2.0.1: {} + strip-json-comments@3.1.1: {} + strnum@1.0.5: {} + supports-color@3.2.3: dependencies: has-flag: 1.0.0 @@ -9175,15 +14391,23 @@ snapshots: magic-string: 0.30.17 zimmerframe: 1.1.2 - sync-request@6.1.0: - dependencies: - http-response-object: 3.0.2 - sync-rpc: 1.3.6 - then-request: 6.0.2 - - sync-rpc@1.3.6: + swarm-js@0.1.42(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: - get-port: 3.2.0 + bluebird: 3.7.2 + buffer: 5.7.1 + eth-lib: 0.1.29(bufferutil@4.0.9)(utf-8-validate@5.0.10) + fs-extra: 4.0.3 + got: 11.8.6 + mime-types: 2.1.35 + mkdirp-promise: 5.0.1 + mock-fs: 4.14.0 + setimmediate: 1.0.5 + tar: 4.4.19 + xhr-request: 1.1.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate tabbable@6.2.0: {} @@ -9202,19 +14426,65 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - then-request@6.0.2: + tar-fs@1.16.4: dependencies: - '@types/concat-stream': 1.6.1 - '@types/form-data': 0.0.33 - '@types/node': 8.10.66 - '@types/qs': 6.9.18 - caseless: 0.12.0 - concat-stream: 1.6.2 - form-data: 2.5.2 - http-basic: 8.1.3 - http-response-object: 3.0.2 - promise: 8.3.0 - qs: 6.13.1 + chownr: 1.1.4 + mkdirp: 0.5.6 + pump: 1.0.3 + tar-stream: 1.6.2 + + tar-fs@2.0.1: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + + tar-fs@2.1.2: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + + tar-stream@1.6.2: + dependencies: + bl: 1.2.3 + buffer-alloc: 1.2.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + readable-stream: 2.3.8 + to-buffer: 1.1.1 + xtend: 4.0.2 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + tar@4.4.19: + dependencies: + chownr: 1.1.4 + fs-minipass: 1.2.7 + minipass: 2.9.0 + minizlib: 1.3.3 + mkdirp: 0.5.6 + safe-buffer: 5.2.1 + yallist: 3.1.1 + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + text-table@0.2.0: {} thread-stream@0.15.2: dependencies: @@ -9224,6 +14494,14 @@ snapshots: dependencies: real-require: 0.2.0 + through2@4.0.2: + dependencies: + readable-stream: 3.6.2 + + through@2.3.8: {} + + timed-out@4.0.1: {} + timers-browserify@2.0.12: dependencies: setimmediate: 1.0.5 @@ -9235,6 +14513,8 @@ snapshots: tiny-inflate@1.0.3: {} + tiny-typed-emitter@2.1.0: {} + tinyglobby@0.2.10: dependencies: fdir: 6.4.2(picomatch@4.0.2) @@ -9244,6 +14524,8 @@ snapshots: dependencies: os-tmpdir: 1.0.2 + to-buffer@1.1.1: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -9254,6 +14536,11 @@ snapshots: totalist@3.0.1: {} + tough-cookie@2.5.0: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + tr46@0.0.3: {} ts-api-utils@2.0.0(typescript@5.7.3): @@ -9271,14 +14558,19 @@ snapshots: dependencies: typescript: 5.7.3 - ts-node@10.9.2(@types/node@22.10.6)(typescript@5.7.3): + ts-morph@22.0.0: + dependencies: + '@ts-morph/common': 0.23.0 + code-block-writer: 13.0.3 + + ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.10.6 + '@types/node': 22.10.10 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -9297,12 +14589,20 @@ snapshots: tslib@2.8.1: {} + tslog@4.9.3: {} + tsort@0.0.1: {} tty-browserify@0.0.1: {} + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + tweetnacl-util@0.15.1: {} + tweetnacl@0.14.5: {} + tweetnacl@1.0.3: {} type-check@0.3.2: @@ -9313,6 +14613,8 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-detect@4.0.8: {} + type-detect@4.1.0: {} type-fest@0.20.2: {} @@ -9321,6 +14623,13 @@ snapshots: type-fest@0.7.1: {} + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + type@2.7.3: {} + typechain@8.3.2(typescript@5.7.3): dependencies: '@types/prettier': 2.7.3 @@ -9337,6 +14646,10 @@ snapshots: transitivePeerDependencies: - supports-color + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + typedarray@0.0.6: {} typescript-eslint@8.20.0(eslint@9.18.0(jiti@2.4.1))(typescript@5.7.3): @@ -9349,6 +14662,16 @@ snapshots: transitivePeerDependencies: - supports-color + typescript-eslint@8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.21.0(@typescript-eslint/parser@8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3) + '@typescript-eslint/parser': 8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3) + '@typescript-eslint/utils': 8.21.0(eslint@9.19.0(jiti@2.4.1))(typescript@5.7.3) + eslint: 9.19.0(jiti@2.4.1) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + typescript@5.7.3: {} typical@4.0.0: {} @@ -9381,6 +14704,8 @@ snapshots: dependencies: multiformats: 13.3.1 + ultron@1.1.1: {} + uncrypto@0.1.3: {} undici-types@6.19.8: {} @@ -9391,6 +14716,8 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 + undici@6.21.1: {} + unenv@1.10.0: dependencies: consola: 3.4.0 @@ -9401,6 +14728,14 @@ snapshots: unfetch@4.2.0: {} + unique-filename@3.0.0: + dependencies: + unique-slug: 4.0.0 + + unique-slug@4.0.0: + dependencies: + imurmurhash: 0.1.4 + universalify@0.1.2: {} universalify@2.0.1: {} @@ -9424,15 +14759,27 @@ snapshots: dependencies: punycode: 2.3.1 + url-set-query@1.0.0: {} + url@0.11.4: dependencies: punycode: 1.4.1 qs: 6.13.1 + usb@2.9.0: + dependencies: + '@types/w3c-web-usb': 1.0.10 + node-addon-api: 6.1.0 + node-gyp-build: 4.8.4 + use-sync-external-store@1.2.0(react@18.3.1): dependencies: react: 18.3.1 + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.4 + utf8@3.0.0: {} util-deprecate@1.0.2: {} @@ -9445,10 +14792,22 @@ snapshots: is-typed-array: 1.1.15 which-typed-array: 1.1.18 + utils-merge@1.0.1: {} + + uuid@10.0.0: {} + + uuid@2.0.1: {} + + uuid@3.4.0: {} + uuid@8.3.2: {} + uuid@9.0.1: {} + v8-compile-cache-lib@3.0.1: {} + validate-npm-package-name@5.0.1: {} + valtio@1.11.2(react@18.3.1): dependencies: proxy-compare: 2.5.1 @@ -9456,39 +14815,126 @@ snapshots: optionalDependencies: react: 18.3.1 - vite-plugin-node-polyfills@0.22.0(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)): + varint@5.0.2: {} + + vary@1.1.2: {} + + verror@1.10.0: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + + viem@2.7.14(bufferutil@4.0.9)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1): + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/bip32': 1.3.2 + '@scure/bip39': 1.2.1 + abitype: 1.0.0(typescript@5.7.3)(zod@3.24.1) + isows: 1.0.3(ws@8.13.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + ws: 8.13.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + vite-plugin-node-polyfills@0.22.0(rollup@4.30.1)(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.30.1) node-stdlib-browser: 1.3.0 - vite: 6.0.7(@types/node@22.10.6)(jiti@2.4.1) + vite: 6.0.7(@types/node@22.10.10)(jiti@2.4.1) transitivePeerDependencies: - rollup - vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1): + vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1): dependencies: esbuild: 0.24.2 postcss: 8.5.0 rollup: 4.30.1 optionalDependencies: - '@types/node': 22.10.6 + '@types/node': 22.10.10 fsevents: 2.3.3 jiti: 2.4.1 - vitefu@1.0.5(vite@6.0.7(@types/node@22.10.6)(jiti@2.4.1)): + vitefu@1.0.5(vite@6.0.7(@types/node@22.10.10)(jiti@2.4.1)): optionalDependencies: - vite: 6.0.7(@types/node@22.10.6)(jiti@2.4.1) + vite: 6.0.7(@types/node@22.10.10)(jiti@2.4.1) vm-browserify@1.1.2: {} + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + web-streams-polyfill@3.3.3: {} - web3-core@4.7.1: + web3-bzz@1.10.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@types/node': 12.20.55 + got: 12.1.0 + swarm-js: 0.1.42(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + web3-core-helpers@1.10.0: + dependencies: + web3-eth-iban: 1.10.0 + web3-utils: 1.10.0 + + web3-core-method@1.10.0: + dependencies: + '@ethersproject/transactions': 5.7.0 + web3-core-helpers: 1.10.0 + web3-core-promievent: 1.10.0 + web3-core-subscriptions: 1.10.0 + web3-utils: 1.10.0 + + web3-core-promievent@1.10.0: + dependencies: + eventemitter3: 4.0.4 + + web3-core-requestmanager@1.10.0(encoding@0.1.13): + dependencies: + util: 0.12.5 + web3-core-helpers: 1.10.0 + web3-providers-http: 1.10.0(encoding@0.1.13) + web3-providers-ipc: 1.10.0 + web3-providers-ws: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-core-subscriptions@1.10.0: + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.10.0 + + web3-core@1.10.0(encoding@0.1.13): + dependencies: + '@types/bn.js': 5.1.6 + '@types/node': 12.20.55 + bignumber.js: 9.1.2 + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-core-requestmanager: 1.10.0(encoding@0.1.13) + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-core@4.7.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10): dependencies: web3-errors: 1.3.1 web3-eth-accounts: 4.3.1 web3-eth-iban: 4.0.7 - web3-providers-http: 4.2.0 - web3-providers-ws: 4.0.8 + web3-providers-http: 4.2.0(encoding@0.1.13) + web3-providers-ws: 4.0.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) web3-types: 1.10.0 web3-utils: 4.3.3 web3-validator: 2.0.6 @@ -9503,6 +14949,11 @@ snapshots: dependencies: web3-types: 1.10.0 + web3-eth-abi@1.10.0: + dependencies: + '@ethersproject/abi': 5.7.0 + web3-utils: 1.10.0 + web3-eth-abi@4.4.1(typescript@5.7.3)(zod@3.24.1): dependencies: abitype: 0.7.1(typescript@5.7.3)(zod@3.24.1) @@ -9514,6 +14965,22 @@ snapshots: - typescript - zod + web3-eth-accounts@1.10.0(encoding@0.1.13): + dependencies: + '@ethereumjs/common': 2.5.0 + '@ethereumjs/tx': 3.3.2 + eth-lib: 0.2.8 + ethereumjs-util: 7.1.5 + scrypt-js: 3.0.1 + uuid: 9.0.1 + web3-core: 1.10.0(encoding@0.1.13) + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + web3-eth-accounts@4.3.1: dependencies: '@ethereumjs/rlp': 4.0.1 @@ -9524,12 +14991,26 @@ snapshots: web3-utils: 4.3.3 web3-validator: 2.0.6 - web3-eth-contract@4.7.2(typescript@5.7.3)(zod@3.24.1): + web3-eth-contract@1.10.0(encoding@0.1.13): + dependencies: + '@types/bn.js': 5.1.6 + web3-core: 1.10.0(encoding@0.1.13) + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-core-promievent: 1.10.0 + web3-core-subscriptions: 1.10.0 + web3-eth-abi: 1.10.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth-contract@4.7.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1): dependencies: '@ethereumjs/rlp': 5.0.2 - web3-core: 4.7.1 + web3-core: 4.7.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) web3-errors: 1.3.1 - web3-eth: 4.11.1(typescript@5.7.3)(zod@3.24.1) + web3-eth: 4.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) web3-eth-abi: 4.4.1(typescript@5.7.3)(zod@3.24.1) web3-types: 1.10.0 web3-utils: 4.3.3 @@ -9541,14 +15022,28 @@ snapshots: - utf-8-validate - zod - web3-eth-ens@4.4.0(typescript@5.7.3)(zod@3.24.1): + web3-eth-ens@1.10.0(encoding@0.1.13): + dependencies: + content-hash: 2.5.2 + eth-ens-namehash: 2.0.8 + web3-core: 1.10.0(encoding@0.1.13) + web3-core-helpers: 1.10.0 + web3-core-promievent: 1.10.0 + web3-eth-abi: 1.10.0 + web3-eth-contract: 1.10.0(encoding@0.1.13) + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth-ens@4.4.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1): dependencies: '@adraffy/ens-normalize': 1.11.0 - web3-core: 4.7.1 + web3-core: 4.7.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) web3-errors: 1.3.1 - web3-eth: 4.11.1(typescript@5.7.3)(zod@3.24.1) - web3-eth-contract: 4.7.2(typescript@5.7.3)(zod@3.24.1) - web3-net: 4.1.0 + web3-eth: 4.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) + web3-eth-contract: 4.7.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) + web3-net: 4.1.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) web3-types: 1.10.0 web3-utils: 4.3.3 web3-validator: 2.0.6 @@ -9559,6 +15054,11 @@ snapshots: - utf-8-validate - zod + web3-eth-iban@1.10.0: + dependencies: + bn.js: 5.2.1 + web3-utils: 1.10.0 + web3-eth-iban@4.0.7: dependencies: web3-errors: 1.3.1 @@ -9566,11 +15066,23 @@ snapshots: web3-utils: 4.3.3 web3-validator: 2.0.6 - web3-eth-personal@4.1.0(typescript@5.7.3)(zod@3.24.1): + web3-eth-personal@1.10.0(encoding@0.1.13): + dependencies: + '@types/node': 12.20.55 + web3-core: 1.10.0(encoding@0.1.13) + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-net: 1.10.0(encoding@0.1.13) + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth-personal@4.1.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1): dependencies: - web3-core: 4.7.1 - web3-eth: 4.11.1(typescript@5.7.3)(zod@3.24.1) - web3-rpc-methods: 1.3.0 + web3-core: 4.7.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + web3-eth: 4.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) + web3-rpc-methods: 1.3.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) web3-types: 1.10.0 web3-utils: 4.3.3 web3-validator: 2.0.6 @@ -9581,16 +15093,34 @@ snapshots: - utf-8-validate - zod - web3-eth@4.11.1(typescript@5.7.3)(zod@3.24.1): + web3-eth@1.10.0(encoding@0.1.13): + dependencies: + web3-core: 1.10.0(encoding@0.1.13) + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-core-subscriptions: 1.10.0 + web3-eth-abi: 1.10.0 + web3-eth-accounts: 1.10.0(encoding@0.1.13) + web3-eth-contract: 1.10.0(encoding@0.1.13) + web3-eth-ens: 1.10.0(encoding@0.1.13) + web3-eth-iban: 1.10.0 + web3-eth-personal: 1.10.0(encoding@0.1.13) + web3-net: 1.10.0(encoding@0.1.13) + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth@4.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1): dependencies: setimmediate: 1.0.5 - web3-core: 4.7.1 + web3-core: 4.7.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) web3-errors: 1.3.1 web3-eth-abi: 4.4.1(typescript@5.7.3)(zod@3.24.1) web3-eth-accounts: 4.3.1 - web3-net: 4.1.0 - web3-providers-ws: 4.0.8 - web3-rpc-methods: 1.3.0 + web3-net: 4.1.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + web3-providers-ws: 4.0.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + web3-rpc-methods: 1.3.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) web3-types: 1.10.0 web3-utils: 4.3.3 web3-validator: 2.0.6 @@ -9601,10 +15131,19 @@ snapshots: - utf-8-validate - zod - web3-net@4.1.0: + web3-net@1.10.0(encoding@0.1.13): + dependencies: + web3-core: 1.10.0(encoding@0.1.13) + web3-core-method: 1.10.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-net@4.1.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10): dependencies: - web3-core: 4.7.1 - web3-rpc-methods: 1.3.0 + web3-core: 4.7.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + web3-rpc-methods: 1.3.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) web3-types: 1.10.0 web3-utils: 4.3.3 transitivePeerDependencies: @@ -9612,15 +15151,29 @@ snapshots: - encoding - utf-8-validate - web3-providers-http@4.2.0: + web3-providers-http@1.10.0(encoding@0.1.13): + dependencies: + abortcontroller-polyfill: 1.7.8 + cross-fetch: 3.2.0(encoding@0.1.13) + es6-promise: 4.2.8 + web3-core-helpers: 1.10.0 + transitivePeerDependencies: + - encoding + + web3-providers-http@4.2.0(encoding@0.1.13): dependencies: - cross-fetch: 4.1.0 + cross-fetch: 4.1.0(encoding@0.1.13) web3-errors: 1.3.1 web3-types: 1.10.0 web3-utils: 4.3.3 transitivePeerDependencies: - encoding + web3-providers-ipc@1.10.0: + dependencies: + oboe: 2.1.5 + web3-core-helpers: 1.10.0 + web3-providers-ipc@4.0.7: dependencies: web3-errors: 1.3.1 @@ -9628,21 +15181,29 @@ snapshots: web3-utils: 4.3.3 optional: true - web3-providers-ws@4.0.8: + web3-providers-ws@1.10.0: + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.10.0 + websocket: 1.0.35 + transitivePeerDependencies: + - supports-color + + web3-providers-ws@4.0.8(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@types/ws': 8.5.3 - isomorphic-ws: 5.0.0(ws@8.18.0) + isomorphic-ws: 5.0.0(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)) web3-errors: 1.3.1 web3-types: 1.10.0 web3-utils: 4.3.3 - ws: 8.18.0 + ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate - web3-rpc-methods@1.3.0: + web3-rpc-methods@1.3.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10): dependencies: - web3-core: 4.7.1 + web3-core: 4.7.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) web3-types: 1.10.0 web3-validator: 2.0.6 transitivePeerDependencies: @@ -9650,11 +15211,11 @@ snapshots: - encoding - utf-8-validate - web3-rpc-providers@1.0.0-rc.4: + web3-rpc-providers@1.0.0-rc.4(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10): dependencies: web3-errors: 1.3.1 - web3-providers-http: 4.2.0 - web3-providers-ws: 4.0.8 + web3-providers-http: 4.2.0(encoding@0.1.13) + web3-providers-ws: 4.0.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) web3-types: 1.10.0 web3-utils: 4.3.3 web3-validator: 2.0.6 @@ -9663,8 +15224,28 @@ snapshots: - encoding - utf-8-validate + web3-shh@1.10.0(encoding@0.1.13): + dependencies: + web3-core: 1.10.0(encoding@0.1.13) + web3-core-method: 1.10.0 + web3-core-subscriptions: 1.10.0 + web3-net: 1.10.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + web3-types@1.10.0: {} + web3-utils@1.10.0: + dependencies: + bn.js: 5.2.1 + ethereum-bloom-filters: 1.2.0 + ethereumjs-util: 7.1.5 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + web3-utils@1.10.4: dependencies: '@ethereumjs/util': 8.1.0 @@ -9692,22 +15273,37 @@ snapshots: web3-types: 1.10.0 zod: 3.24.1 - web3@4.16.0(typescript@5.7.3)(zod@3.24.1): + web3@1.10.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10): + dependencies: + web3-bzz: 1.10.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + web3-core: 1.10.0(encoding@0.1.13) + web3-eth: 1.10.0(encoding@0.1.13) + web3-eth-personal: 1.10.0(encoding@0.1.13) + web3-net: 1.10.0(encoding@0.1.13) + web3-shh: 1.10.0(encoding@0.1.13) + web3-utils: 1.10.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + web3@4.16.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1): dependencies: - web3-core: 4.7.1 + web3-core: 4.7.1(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) web3-errors: 1.3.1 - web3-eth: 4.11.1(typescript@5.7.3)(zod@3.24.1) + web3-eth: 4.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) web3-eth-abi: 4.4.1(typescript@5.7.3)(zod@3.24.1) web3-eth-accounts: 4.3.1 - web3-eth-contract: 4.7.2(typescript@5.7.3)(zod@3.24.1) - web3-eth-ens: 4.4.0(typescript@5.7.3)(zod@3.24.1) + web3-eth-contract: 4.7.2(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) + web3-eth-ens: 4.4.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) web3-eth-iban: 4.0.7 - web3-eth-personal: 4.1.0(typescript@5.7.3)(zod@3.24.1) - web3-net: 4.1.0 - web3-providers-http: 4.2.0 - web3-providers-ws: 4.0.8 - web3-rpc-methods: 1.3.0 - web3-rpc-providers: 1.0.0-rc.4 + web3-eth-personal: 4.1.0(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)(zod@3.24.1) + web3-net: 4.1.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + web3-providers-http: 4.2.0(encoding@0.1.13) + web3-providers-ws: 4.0.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + web3-rpc-methods: 1.3.0(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) + web3-rpc-providers: 1.0.0-rc.4(bufferutil@4.0.9)(encoding@0.1.13)(utf-8-validate@5.0.10) web3-types: 1.10.0 web3-utils: 4.3.3 web3-validator: 2.0.6 @@ -9720,6 +15316,17 @@ snapshots: webidl-conversions@3.0.1: {} + websocket@1.0.35: + dependencies: + bufferutil: 4.0.9 + debug: 2.6.9 + es5-ext: 0.10.64 + typedarray-to-buffer: 3.1.5 + utf-8-validate: 5.0.10 + yaeti: 0.0.6 + transitivePeerDependencies: + - supports-color + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -9777,15 +15384,76 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + wrappy@1.0.2: {} - ws@7.4.6: {} + ws@3.3.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + async-limiter: 1.0.1 + safe-buffer: 5.1.2 + ultron: 1.1.1 + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@7.4.6(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.13.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + + xdeployer@3.1.10(@nomicfoundation/hardhat-ethers@3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)))(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)): + dependencies: + '@nomicfoundation/hardhat-ethers': 3.0.8(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(hardhat@2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10)) + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + hardhat: 2.22.18(bufferutil@4.0.9)(ts-node@10.9.2(@types/node@22.10.10)(typescript@5.7.3))(typescript@5.7.3)(utf-8-validate@5.0.10) + + xhr-request-promise@0.1.3: + dependencies: + xhr-request: 1.1.0 - ws@7.5.10: {} + xhr-request@1.1.0: + dependencies: + buffer-to-arraybuffer: 0.0.5 + object-assign: 4.1.1 + query-string: 5.1.1 + simple-get: 2.8.2 + timed-out: 4.0.1 + url-set-query: 1.0.0 + xhr: 2.6.0 - ws@8.17.1: {} + xhr@2.6.0: + dependencies: + global: 4.4.0 + is-function: 1.0.2 + parse-headers: 2.0.5 + xtend: 4.0.2 - ws@8.18.0: {} + xmlhttprequest@1.8.0: {} xtend@4.0.2: {} @@ -9793,6 +15461,12 @@ snapshots: y18n@5.0.8: {} + yaeti@0.0.6: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + yaml@1.10.2: {} yargs-parser@13.1.2: @@ -9869,4 +15543,12 @@ snapshots: zimmerframe@1.1.2: {} + zksync-ethers@6.15.4(ethers@6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ethers: 6.13.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + zksync-web3@0.14.4(ethers@5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ethers: 5.7.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) + zod@3.24.1: {} From 08d9d5025d10ed571bc69f12b25ca3dfa55b47fb Mon Sep 17 00:00:00 2001 From: Marko Gracin Date: Tue, 28 Jan 2025 10:09:05 +0100 Subject: [PATCH 2/4] =?UTF-8?q?feat(contracts):=20=F0=9F=8E=B8=20add=20bas?= =?UTF-8?q?ic=20ERC20=20contract=20and=20deploy=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/.env.example | 9 + .../Create2DeployerLocal.json | 34 - .../contracts/src/Greeter.sol/Greeter.json | 5 - .../src/contracts/CreateX.sol/CreateX.json | 34 - .../contracts/src/Create2DeployerLocal.sol | 6 - contracts/contracts/src/ERC20.sol | 9 + contracts/contracts/src/Greeter.sol | 18 - contracts/contracts/src/NFTContract.sol | 137 +++ .../contracts/src/utils/ExpiryHelper.sol | 20 + .../src/utils/HederaResponseCodes.sol | 311 +++++++ .../src/utils/HederaTokenService.sol | 707 ++++++++++++++ .../src/utils/IHederaTokenService.sol | 869 ++++++++++++++++++ contracts/contracts/src/utils/KeyHelper.sol | 166 ++++ contracts/contracts/test/Greeter.t.sol | 19 - contracts/eslint.config.js | 47 - contracts/package.json | 3 + contracts/scripts/client.ts | 56 ++ contracts/scripts/deploy.sh | 26 - contracts/scripts/deploy.ts | 129 ++- contracts/scripts/deploy_local.sh | 29 - contracts/scripts/flatten.sh | 11 - contracts/scripts/interact.ts | 37 - contracts/scripts/minter/add.ts | 57 ++ contracts/scripts/minter/remove.ts | 56 ++ contracts/scripts/verify.sh | 38 - contracts/test/Greeter.test.ts | 39 - pnpm-lock.yaml | 5 + 27 files changed, 2502 insertions(+), 375 deletions(-) create mode 100644 contracts/.env.example delete mode 100644 contracts/abis/contracts/src/Create2DeployerLocal.sol/Create2DeployerLocal.json delete mode 100644 contracts/abis/contracts/src/Greeter.sol/Greeter.json delete mode 100644 contracts/abis/xdeployer/src/contracts/CreateX.sol/CreateX.json delete mode 100644 contracts/contracts/src/Create2DeployerLocal.sol create mode 100644 contracts/contracts/src/ERC20.sol delete mode 100644 contracts/contracts/src/Greeter.sol create mode 100644 contracts/contracts/src/NFTContract.sol create mode 100644 contracts/contracts/src/utils/ExpiryHelper.sol create mode 100644 contracts/contracts/src/utils/HederaResponseCodes.sol create mode 100644 contracts/contracts/src/utils/HederaTokenService.sol create mode 100644 contracts/contracts/src/utils/IHederaTokenService.sol create mode 100644 contracts/contracts/src/utils/KeyHelper.sol delete mode 100644 contracts/contracts/test/Greeter.t.sol delete mode 100644 contracts/eslint.config.js create mode 100644 contracts/scripts/client.ts delete mode 100644 contracts/scripts/deploy.sh delete mode 100644 contracts/scripts/deploy_local.sh delete mode 100644 contracts/scripts/flatten.sh delete mode 100644 contracts/scripts/interact.ts create mode 100644 contracts/scripts/minter/add.ts create mode 100644 contracts/scripts/minter/remove.ts delete mode 100644 contracts/scripts/verify.sh delete mode 100644 contracts/test/Greeter.test.ts diff --git a/contracts/.env.example b/contracts/.env.example new file mode 100644 index 0000000..38f89b1 --- /dev/null +++ b/contracts/.env.example @@ -0,0 +1,9 @@ +HEDERA_ACCOUNT_ID= +HEDERA_PRIVATE_KEY= +# the type of key used (ed25519 or ecdsa). we can't analyze the key to figure this out, so you need to provide what type your private key is. +HEDERA_PRIVATE_KEY_TYPE=ed25519 + +# testnet / mainnet +HEDERA_ENVIRONMENT=testnet + + diff --git a/contracts/abis/contracts/src/Create2DeployerLocal.sol/Create2DeployerLocal.json b/contracts/abis/contracts/src/Create2DeployerLocal.sol/Create2DeployerLocal.json deleted file mode 100644 index 527fc1d..0000000 --- a/contracts/abis/contracts/src/Create2DeployerLocal.sol/Create2DeployerLocal.json +++ /dev/null @@ -1,34 +0,0 @@ -[ - "error FailedContractCreation(address)", - "error FailedContractInitialisation(address,bytes)", - "error FailedEtherTransfer(address,bytes)", - "error InvalidNonceValue(address)", - "error InvalidSalt(address)", - "event ContractCreation(address indexed,bytes32 indexed)", - "event ContractCreation(address indexed)", - "event Create3ProxyContractCreation(address indexed,bytes32 indexed)", - "function computeCreate2Address(bytes32,bytes32) view returns (address)", - "function computeCreate2Address(bytes32,bytes32,address) pure returns (address)", - "function computeCreate3Address(bytes32,address) pure returns (address)", - "function computeCreate3Address(bytes32) view returns (address)", - "function computeCreateAddress(uint256) view returns (address)", - "function computeCreateAddress(address,uint256) view returns (address)", - "function deployCreate(bytes) payable returns (address)", - "function deployCreate2(bytes32,bytes) payable returns (address)", - "function deployCreate2(bytes) payable returns (address)", - "function deployCreate2AndInit(bytes32,bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", - "function deployCreate2AndInit(bytes,bytes,tuple(uint256,uint256)) payable returns (address)", - "function deployCreate2AndInit(bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", - "function deployCreate2AndInit(bytes32,bytes,bytes,tuple(uint256,uint256)) payable returns (address)", - "function deployCreate2Clone(bytes32,address,bytes) payable returns (address)", - "function deployCreate2Clone(address,bytes) payable returns (address)", - "function deployCreate3(bytes) payable returns (address)", - "function deployCreate3(bytes32,bytes) payable returns (address)", - "function deployCreate3AndInit(bytes32,bytes,bytes,tuple(uint256,uint256)) payable returns (address)", - "function deployCreate3AndInit(bytes,bytes,tuple(uint256,uint256)) payable returns (address)", - "function deployCreate3AndInit(bytes32,bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", - "function deployCreate3AndInit(bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", - "function deployCreateAndInit(bytes,bytes,tuple(uint256,uint256)) payable returns (address)", - "function deployCreateAndInit(bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", - "function deployCreateClone(address,bytes) payable returns (address)" -] diff --git a/contracts/abis/contracts/src/Greeter.sol/Greeter.json b/contracts/abis/contracts/src/Greeter.sol/Greeter.json deleted file mode 100644 index 52f774d..0000000 --- a/contracts/abis/contracts/src/Greeter.sol/Greeter.json +++ /dev/null @@ -1,5 +0,0 @@ -[ - "constructor(string)", - "function greet() view returns (string)", - "function setGreeting(string)" -] diff --git a/contracts/abis/xdeployer/src/contracts/CreateX.sol/CreateX.json b/contracts/abis/xdeployer/src/contracts/CreateX.sol/CreateX.json deleted file mode 100644 index 527fc1d..0000000 --- a/contracts/abis/xdeployer/src/contracts/CreateX.sol/CreateX.json +++ /dev/null @@ -1,34 +0,0 @@ -[ - "error FailedContractCreation(address)", - "error FailedContractInitialisation(address,bytes)", - "error FailedEtherTransfer(address,bytes)", - "error InvalidNonceValue(address)", - "error InvalidSalt(address)", - "event ContractCreation(address indexed,bytes32 indexed)", - "event ContractCreation(address indexed)", - "event Create3ProxyContractCreation(address indexed,bytes32 indexed)", - "function computeCreate2Address(bytes32,bytes32) view returns (address)", - "function computeCreate2Address(bytes32,bytes32,address) pure returns (address)", - "function computeCreate3Address(bytes32,address) pure returns (address)", - "function computeCreate3Address(bytes32) view returns (address)", - "function computeCreateAddress(uint256) view returns (address)", - "function computeCreateAddress(address,uint256) view returns (address)", - "function deployCreate(bytes) payable returns (address)", - "function deployCreate2(bytes32,bytes) payable returns (address)", - "function deployCreate2(bytes) payable returns (address)", - "function deployCreate2AndInit(bytes32,bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", - "function deployCreate2AndInit(bytes,bytes,tuple(uint256,uint256)) payable returns (address)", - "function deployCreate2AndInit(bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", - "function deployCreate2AndInit(bytes32,bytes,bytes,tuple(uint256,uint256)) payable returns (address)", - "function deployCreate2Clone(bytes32,address,bytes) payable returns (address)", - "function deployCreate2Clone(address,bytes) payable returns (address)", - "function deployCreate3(bytes) payable returns (address)", - "function deployCreate3(bytes32,bytes) payable returns (address)", - "function deployCreate3AndInit(bytes32,bytes,bytes,tuple(uint256,uint256)) payable returns (address)", - "function deployCreate3AndInit(bytes,bytes,tuple(uint256,uint256)) payable returns (address)", - "function deployCreate3AndInit(bytes32,bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", - "function deployCreate3AndInit(bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", - "function deployCreateAndInit(bytes,bytes,tuple(uint256,uint256)) payable returns (address)", - "function deployCreateAndInit(bytes,bytes,tuple(uint256,uint256),address) payable returns (address)", - "function deployCreateClone(address,bytes) payable returns (address)" -] diff --git a/contracts/contracts/src/Create2DeployerLocal.sol b/contracts/contracts/src/Create2DeployerLocal.sol deleted file mode 100644 index cec327d..0000000 --- a/contracts/contracts/src/Create2DeployerLocal.sol +++ /dev/null @@ -1,6 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.23; - -import {CreateX} from "xdeployer/src/contracts/CreateX.sol"; - -contract Create2DeployerLocal is CreateX {} diff --git a/contracts/contracts/src/ERC20.sol b/contracts/contracts/src/ERC20.sol new file mode 100644 index 0000000..618a624 --- /dev/null +++ b/contracts/contracts/src/ERC20.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +// Compatible with OpenZeppelin Contracts ^5.0.0 +pragma solidity ^0.8.22; + +import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract MyToken is ERC20 { + constructor() ERC20("MyToken", "MTK") {} +} \ No newline at end of file diff --git a/contracts/contracts/src/Greeter.sol b/contracts/contracts/src/Greeter.sol deleted file mode 100644 index a420bf0..0000000 --- a/contracts/contracts/src/Greeter.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: Unlicense -pragma solidity ^0.8.28; - -contract Greeter { - string private greeting; - - constructor(string memory greeting_) { - greeting = greeting_; - } - - function greet() public view returns (string memory) { - return greeting; - } - - function setGreeting(string memory newGreeting) public { - greeting = newGreeting; - } -} diff --git a/contracts/contracts/src/NFTContract.sol b/contracts/contracts/src/NFTContract.sol new file mode 100644 index 0000000..b81333e --- /dev/null +++ b/contracts/contracts/src/NFTContract.sol @@ -0,0 +1,137 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.5.0 <0.9.0; + +import "./utils/HederaResponseCodes.sol"; +import "./utils/IHederaTokenService.sol"; +import "./utils/HederaTokenService.sol"; +import "./utils/ExpiryHelper.sol"; +import "./utils/KeyHelper.sol"; + +contract NFTContract is ExpiryHelper, KeyHelper, HederaTokenService { + address public owner; + + // Mapping to track authorized minters + mapping(address => bool) public authorizedMinters; + + // Mapping to track which wallet can claim which NFT serial number + mapping(int64 => address) public nftClaimRights; + // Mapping to track if an NFT has been claimed + mapping(int64 => bool) public claimed; + + // Events + event MinterAdded(address indexed minter); + event MinterRemoved(address indexed minter); + + constructor() { + owner = msg.sender; + // Make the owner an authorized minter by default + authorizedMinters[msg.sender] = true; + } + + modifier onlyOwner() { + require(msg.sender == owner, "Only owner can call this function"); + _; + } + + modifier onlyMinter() { + require(authorizedMinters[msg.sender], "Only authorized minters can call this function"); + _; + } + + // Function to add a new minter + function addMinter(address minter) external onlyOwner { + require(minter != address(0), "Invalid minter address"); + require(!authorizedMinters[minter], "Address is already a minter"); + authorizedMinters[minter] = true; + emit MinterAdded(minter); + } + + // Function to remove a minter + function removeMinter(address minter) external onlyOwner { + require(minter != owner, "Cannot remove owner as minter"); + require(authorizedMinters[minter], "Address is not a minter"); + authorizedMinters[minter] = false; + emit MinterRemoved(minter); + } + + // Function to check if an address is an authorized minter + function isMinter(address account) external view returns (bool) { + return authorizedMinters[account]; + } + + function createNft( + string memory name, + string memory symbol, + string memory memo, + int64 maxSupply, + int64 autoRenewPeriod + ) external payable onlyOwner returns (address) { + IHederaTokenService.TokenKey[] memory keys = new IHederaTokenService.TokenKey[](1); + keys[0] = getSingleKey(KeyType.SUPPLY, KeyValueType.CONTRACT_ID, address(this)); + + IHederaTokenService.HederaToken memory token; + token.name = name; + token.symbol = symbol; + token.memo = memo; + token.treasury = address(this); + token.tokenSupplyType = true; + token.maxSupply = maxSupply; + token.tokenKeys = keys; + token.freezeDefault = false; + token.expiry = createAutoRenewExpiry(address(this), autoRenewPeriod); + + (int responseCode, address createdToken) = HederaTokenService.createNonFungibleToken(token); + + if(responseCode != HederaResponseCodes.SUCCESS){ + revert("Failed to create non-fungible token"); + } + return createdToken; + } + + function mintNftForUser( + address token, + bytes[] memory metadata, + address allowedClaimer + ) external onlyMinter returns(int64) { + (int response, , int64[] memory serial) = HederaTokenService.mintToken(token, 0, metadata); + + if(response != HederaResponseCodes.SUCCESS){ + revert("Failed to mint non-fungible token"); + } + + // Assign claim rights to the specified wallet + nftClaimRights[serial[0]] = allowedClaimer; + + return serial[0]; + } + + function claimNft( + address token, + int64 serial + ) external returns(int) { + // Check if the caller is the allowed claimer for this NFT + require(nftClaimRights[serial] == msg.sender, "You are not authorized to claim this NFT"); + // Check if the NFT hasn't been claimed yet + require(!claimed[serial], "NFT has already been claimed"); + + int response = HederaTokenService.transferNFT(token, address(this), msg.sender, serial); + + if(response != HederaResponseCodes.SUCCESS){ + revert("Failed to transfer non-fungible token"); + } + + // Mark the NFT as claimed + claimed[serial] = true; + + return response; + } + + // View functions to check NFT status + function getClaimerAddress(int64 serial) external view returns (address) { + return nftClaimRights[serial]; + } + + function isNftClaimed(int64 serial) external view returns (bool) { + return claimed[serial]; + } +} \ No newline at end of file diff --git a/contracts/contracts/src/utils/ExpiryHelper.sol b/contracts/contracts/src/utils/ExpiryHelper.sol new file mode 100644 index 0000000..e353034 --- /dev/null +++ b/contracts/contracts/src/utils/ExpiryHelper.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.5.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "./HederaTokenService.sol"; + +abstract contract ExpiryHelper { + + function createAutoRenewExpiry( + address autoRenewAccount, + int64 autoRenewPeriod + ) internal pure returns (IHederaTokenService.Expiry memory expiry) { + expiry.autoRenewAccount = autoRenewAccount; + expiry.autoRenewPeriod = autoRenewPeriod; + } + + function createSecondExpiry(int64 second) internal pure returns (IHederaTokenService.Expiry memory expiry) { + expiry.second = second; + } +} \ No newline at end of file diff --git a/contracts/contracts/src/utils/HederaResponseCodes.sol b/contracts/contracts/src/utils/HederaResponseCodes.sol new file mode 100644 index 0000000..229dfb6 --- /dev/null +++ b/contracts/contracts/src/utils/HederaResponseCodes.sol @@ -0,0 +1,311 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.4.9 <0.9.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. +} \ No newline at end of file diff --git a/contracts/contracts/src/utils/HederaTokenService.sol b/contracts/contracts/src/utils/HederaTokenService.sol new file mode 100644 index 0000000..9bf73de --- /dev/null +++ b/contracts/contracts/src/utils/HederaTokenService.sol @@ -0,0 +1,707 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.5.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "./HederaResponseCodes.sol"; +import "./IHederaTokenService.sol"; + +abstract contract HederaTokenService { + address constant precompileAddress = address(0x167); + // 90 days in seconds + int32 constant defaultAutoRenewPeriod = 7776000; + + modifier nonEmptyExpiry(IHederaTokenService.HederaToken memory token) + { + if (token.expiry.second == 0 && token.expiry.autoRenewPeriod == 0) { + token.expiry.autoRenewPeriod = defaultAutoRenewPeriod; + } + _; + } + + /// Generic event + event CallResponseEvent(bool, bytes); + + /// Performs transfers among combinations of tokens and hbars + /// @param transferList the list of hbar transfers to do + /// @param tokenTransfers the list of transfers to do + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @custom:version 0.3.0 the signature of the previous version was cryptoTransfer(TokenTransferList[] memory tokenTransfers) + function cryptoTransfer(IHederaTokenService.TransferList memory transferList, IHederaTokenService.TokenTransferList[] memory tokenTransfers) internal + returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.cryptoTransfer.selector, transferList, tokenTransfers)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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, otherwise empty. + function mintToken(address token, int64 amount, bytes[] memory metadata) internal + returns (int responseCode, int64 newTotalSupply, int64[] memory serialNumbers) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.mintToken.selector, + token, amount, metadata)); + (responseCode, newTotalSupply, serialNumbers) = + success + ? abi.decode(result, (int32, int64, int64[])) + : (HederaResponseCodes.UNKNOWN, int64(0), new int64[](0)); + } + + /// 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) internal + returns (int responseCode, int64 newTotalSupply) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.burnToken.selector, + token, amount, serialNumbers)); + (responseCode, newTotalSupply) = + success + ? abi.decode(result, (int32, int64)) + : (HederaResponseCodes.UNKNOWN, int64(0)); + } + + /// 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) internal returns (int responseCode) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.associateTokens.selector, + account, tokens)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + function associateToken(address account, address token) internal returns (int responseCode) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.associateToken.selector, + account, token)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) internal returns (int responseCode) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.dissociateTokens.selector, + account, tokens)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + function dissociateToken(address account, address token) internal returns (int responseCode) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.dissociateToken.selector, + account, token)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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( + IHederaTokenService.HederaToken memory token, + int64 initialTotalSupply, + int32 decimals) nonEmptyExpiry(token) + internal returns (int responseCode, address tokenAddress) { + (bool success, bytes memory result) = precompileAddress.call{value : msg.value}( + abi.encodeWithSelector(IHederaTokenService.createFungibleToken.selector, + token, initialTotalSupply, decimals)); + + + (responseCode, tokenAddress) = success ? abi.decode(result, (int32, address)) : (HederaResponseCodes.UNKNOWN, address(0)); + } + + /// 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( + IHederaTokenService.HederaToken memory token, + int64 initialTotalSupply, + int32 decimals, + IHederaTokenService.FixedFee[] memory fixedFees, + IHederaTokenService.FractionalFee[] memory fractionalFees) nonEmptyExpiry(token) + internal returns (int responseCode, address tokenAddress) { + (bool success, bytes memory result) = precompileAddress.call{value : msg.value}( + abi.encodeWithSelector(IHederaTokenService.createFungibleTokenWithCustomFees.selector, + token, initialTotalSupply, decimals, fixedFees, fractionalFees)); + (responseCode, tokenAddress) = success ? abi.decode(result, (int32, address)) : (HederaResponseCodes.UNKNOWN, address(0)); + } + + /// 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(IHederaTokenService.HederaToken memory token) nonEmptyExpiry(token) + internal returns (int responseCode, address tokenAddress) { + (bool success, bytes memory result) = precompileAddress.call{value : msg.value}( + abi.encodeWithSelector(IHederaTokenService.createNonFungibleToken.selector, token)); + (responseCode, tokenAddress) = success ? abi.decode(result, (int32, address)) : (HederaResponseCodes.UNKNOWN, address(0)); + } + + /// 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( + IHederaTokenService.HederaToken memory token, + IHederaTokenService.FixedFee[] memory fixedFees, + IHederaTokenService.RoyaltyFee[] memory royaltyFees) nonEmptyExpiry(token) + internal returns (int responseCode, address tokenAddress) { + (bool success, bytes memory result) = precompileAddress.call{value : msg.value}( + abi.encodeWithSelector(IHederaTokenService.createNonFungibleTokenWithCustomFees.selector, + token, fixedFees, royaltyFees)); + (responseCode, tokenAddress) = success ? abi.decode(result, (int32, address)) : (HederaResponseCodes.UNKNOWN, address(0)); + } + + /// Retrieves fungible specific token info for a fungible token + /// @param token The ID of the token as a solidity address + /// @dev This function reverts if the call is not successful + function getFungibleTokenInfo(address token) internal returns (int responseCode, IHederaTokenService.FungibleTokenInfo memory tokenInfo) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.getFungibleTokenInfo.selector, token)); + IHederaTokenService.FungibleTokenInfo memory defaultTokenInfo; + (responseCode, tokenInfo) = success ? abi.decode(result, (int32, IHederaTokenService.FungibleTokenInfo)) : (HederaResponseCodes.UNKNOWN, defaultTokenInfo); + } + + /// Retrieves general token info for a given token + /// @param token The ID of the token as a solidity address + /// @dev This function reverts if the call is not successful + function getTokenInfo(address token) internal returns (int responseCode, IHederaTokenService.TokenInfo memory tokenInfo) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.getTokenInfo.selector, token)); + IHederaTokenService.TokenInfo memory defaultTokenInfo; + (responseCode, tokenInfo) = success ? abi.decode(result, (int32, IHederaTokenService.TokenInfo)) : (HederaResponseCodes.UNKNOWN, defaultTokenInfo); + } + + /// Retrieves non-fungible specific token info for a given NFT + /// @param token The ID of the token as a solidity address + /// @dev This function reverts if the call is not successful + function getNonFungibleTokenInfo(address token, int64 serialNumber) internal returns (int responseCode, IHederaTokenService.NonFungibleTokenInfo memory tokenInfo) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.getNonFungibleTokenInfo.selector, token, serialNumber)); + IHederaTokenService.NonFungibleTokenInfo memory defaultTokenInfo; + (responseCode, tokenInfo) = success ? abi.decode(result, (int32, IHederaTokenService.NonFungibleTokenInfo)) : (HederaResponseCodes.UNKNOWN, defaultTokenInfo); + } + + /// 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` + /// @dev This function reverts if the call is not successful + function getTokenCustomFees(address token) internal returns (int64 responseCode, + IHederaTokenService.FixedFee[] memory fixedFees, + IHederaTokenService.FractionalFee[] memory fractionalFees, + IHederaTokenService.RoyaltyFee[] memory royaltyFees) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.getTokenCustomFees.selector, token)); + IHederaTokenService.FixedFee[] memory defaultFixedFees; + IHederaTokenService.FractionalFee[] memory defaultFractionalFees; + IHederaTokenService.RoyaltyFee[] memory defaultRoyaltyFees; + (responseCode, fixedFees, fractionalFees, royaltyFees) = + success ? abi.decode + (result, (int32, IHederaTokenService.FixedFee[], IHederaTokenService.FractionalFee[], IHederaTokenService.RoyaltyFee[])) + : (HederaResponseCodes.UNKNOWN, defaultFixedFees, defaultFractionalFees, defaultRoyaltyFees); + } + + /// 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 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) internal returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.approve.selector, + token, spender, amount)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.transferFrom.selector, + token, from, to, amount)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.transferFromNFT.selector, + token, from, to, serialNumber)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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. + function allowance(address token, address owner, address spender) internal returns (int responseCode, uint256 amount) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.allowance.selector, + token, owner, spender)); + (responseCode, amount) = success ? abi.decode(result, (int32, uint256)) : (HederaResponseCodes.UNKNOWN, 0); + } + + /// 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) internal returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.approveNFT.selector, + token, approved, serialNumber)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) internal returns (int responseCode, address approved) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.getApproved.selector, + token, serialNumber)); + (responseCode, approved) = + success + ? abi.decode(result, (int32, address)) + : (HederaResponseCodes.UNKNOWN, address(0)); + } + + /// 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` + /// @dev This function reverts if the call is not successful + function isFrozen(address token, address account) internal returns (int64 responseCode, bool frozen){ + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.isFrozen.selector, token, account)); + (responseCode, frozen) = success ? abi.decode(result, (int32, bool)) : (HederaResponseCodes.UNKNOWN, false); + } + + /// 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` + /// @dev This function reverts if the call is not successful + function isKyc(address token, address account) internal returns (int64 responseCode, bool kycGranted){ + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.isKyc.selector, token, account)); + (responseCode, kycGranted) = success ? abi.decode(result, (int32, bool)) : (HederaResponseCodes.UNKNOWN, false); + } + + /// 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) internal returns (int64 responseCode){ + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.freezeToken.selector, token, account)); + (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) internal returns (int64 responseCode){ + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.unfreezeToken.selector, token, account)); + (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) internal returns (int64 responseCode){ + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.grantTokenKyc.selector, token, account)); + (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) internal returns (int64 responseCode){ + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.revokeTokenKyc.selector, token, account)); + (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) internal returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.setApprovalForAll.selector, + token, operator, approved)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) internal returns (int responseCode, bool approved) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.isApprovedForAll.selector, + token, owner, operator)); + (responseCode, approved) = + success + ? abi.decode(result, (int32, bool)) + : (HederaResponseCodes.UNKNOWN, false); + } + + /// 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. + /// @dev This function reverts if the call is not successful + function getTokenDefaultFreezeStatus(address token) internal returns (int responseCode, bool defaultFreezeStatus) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.getTokenDefaultFreezeStatus.selector, token)); + (responseCode, defaultFreezeStatus) = success ? abi.decode(result, (int32, bool)) : (HederaResponseCodes.UNKNOWN, false); + } + + /// 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. + /// @dev This function reverts if the call is not successful + function getTokenDefaultKycStatus(address token) internal returns (int responseCode, bool defaultKycStatus) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.getTokenDefaultKycStatus.selector, token)); + (responseCode, defaultKycStatus) = success ? abi.decode(result, (int32, bool)) : (HederaResponseCodes.UNKNOWN, false); + } + + /********************** + * ABI v1 calls * + **********************/ + + /// Initiates a Fungible Token Transfer + /// @param token The ID of the token as a solidity address + /// @param accountIds account to do a transfer to/from + /// @param amounts The amount from the accountId at the same index + function transferTokens(address token, address[] memory accountIds, int64[] memory amounts) internal + returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.transferTokens.selector, + token, accountIds, amounts)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) + internal returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.transferNFTs.selector, + token, sender, receiver, serialNumber)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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, int64 amount) internal + returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.transferToken.selector, + token, sender, receiver, amount)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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 serialNumber The serial number of the NFT to transfer. + function transferNFT(address token, address sender, address receiver, int64 serialNumber) internal + returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.transferNFT.selector, + token, sender, receiver, serialNumber)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) internal returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.pauseToken.selector, token)); + (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) internal returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.unpauseToken.selector, token)); + (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) internal returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.wipeTokenAccount.selector, token, account, amount)); + (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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) internal + returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.wipeTokenAccountNFT.selector, token, account, serialNumbers)); + (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// Operation to delete token + /// @param token The token address + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function deleteToken(address token) internal returns (int responseCode) + { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.deleteToken.selector, token)); + (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// Operation to update token keys + /// @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, IHederaTokenService.TokenKey[] memory keys) + internal returns (int64 responseCode){ + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.updateTokenKeys.selector, token, keys)); + (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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` + /// @dev This function reverts if the call is not successful + function getTokenKey(address token, uint keyType) + internal returns (int64 responseCode, IHederaTokenService.KeyValue memory key){ + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.getTokenKey.selector, token, keyType)); + IHederaTokenService.KeyValue memory defaultKeyValueInfo; + (responseCode, key) = success ? abi.decode(result, (int32,IHederaTokenService.KeyValue) ) : (HederaResponseCodes.UNKNOWN, defaultKeyValueInfo); + } + + + /// 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 isTokenFlag True if valid token found for the given address + /// @dev This function reverts if the call is not successful + function isToken(address token) internal returns (int64 responseCode, bool isTokenFlag) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.isToken.selector, token)); + (responseCode, isTokenFlag) = success ? abi.decode(result, (int32, bool)) : (HederaResponseCodes.UNKNOWN, false); + } + + /// 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 + /// @dev This function reverts if the call is not successful + function getTokenType(address token) internal returns (int64 responseCode, int32 tokenType) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.getTokenType.selector, token)); + (responseCode, tokenType) = success ? abi.decode(result, (int32, int32)) : (HederaResponseCodes.UNKNOWN, - 1); + } + + /// Operation to get token expiry info + /// @param token The token address + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + /// @return expiryInfo The expiry info of the token + /// @dev This function reverts if the call is not successful + function getTokenExpiryInfo(address token) internal returns (int responseCode, IHederaTokenService.Expiry memory expiryInfo){ + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.getTokenExpiryInfo.selector, token)); + IHederaTokenService.Expiry memory defaultExpiryInfo; + (responseCode, expiryInfo) = success ? abi.decode(result, (int32, IHederaTokenService.Expiry)) : (HederaResponseCodes.UNKNOWN, defaultExpiryInfo); + } + + /// Operation to update token expiry info + /// @param token The token address + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function updateTokenExpiryInfo(address token, IHederaTokenService.Expiry memory expiryInfo) internal returns (int responseCode){ + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.updateTokenExpiryInfo.selector, token, expiryInfo)); + (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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, IHederaTokenService.HederaToken memory tokenInfo) internal returns (int responseCode) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.updateTokenInfo.selector, token, tokenInfo)); + (responseCode) = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// 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 (int responseCode, bytes memory response) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.redirectForToken.selector, token, encodedFunctionSelector) + ); + + emit CallResponseEvent(success, result); + (responseCode, response) = success ? (HederaResponseCodes.SUCCESS, result) : (HederaResponseCodes.UNKNOWN, bytes("")); + } + + /// Update the custom fees for a fungible token + /// @param token The token address + /// @param fixedFees Set of fixed fees for `token` + /// @param fractionalFees Set of fractional fees for `token` + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function updateFungibleTokenCustomFees(address token, IHederaTokenService.FixedFee[] memory fixedFees, IHederaTokenService.FractionalFee[] memory fractionalFees) internal returns (int64 responseCode) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.updateFungibleTokenCustomFees.selector, token, fixedFees, fractionalFees)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } + + /// Update the custom fees for a non-fungible token + /// @param token The token address + /// @param fixedFees Set of fixed fees for `token` + /// @param royaltyFees Set of royalty fees for `token` + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function updateNonFungibleTokenCustomFees(address token, IHederaTokenService.FixedFee[] memory fixedFees, IHederaTokenService.RoyaltyFee[] memory royaltyFees) internal returns (int64 responseCode) { + (bool success, bytes memory result) = precompileAddress.call( + abi.encodeWithSelector(IHederaTokenService.updateNonFungibleTokenCustomFees.selector, token, fixedFees, royaltyFees)); + responseCode = success ? abi.decode(result, (int32)) : HederaResponseCodes.UNKNOWN; + } +} \ No newline at end of file diff --git a/contracts/contracts/src/utils/IHederaTokenService.sol b/contracts/contracts/src/utils/IHederaTokenService.sol new file mode 100644 index 0000000..51eb0c5 --- /dev/null +++ b/contracts/contracts/src/utils/IHederaTokenService.sol @@ -0,0 +1,869 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.4.9 <0.9.0; +pragma experimental ABIEncoderV2; + +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. + /// @custom:version 0.3.0 previous version did not include isApproval + struct AccountAmount { + // The Account ID, as a solidity address, that sends/receives cryptocurrency or tokens + 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. + /// @custom:version 0.3.0 previous version did not include isApproval + 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 + 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 + uint 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; + } + + /// Represents a pending airdrop of a token or NFT to a receiver + /// @param sender The address of the account sending the airdrop + /// @param receiver The address of the account receiving the airdrop + /// @param token The address of the token being airdropped + /// @param serial For NFT airdrops, the serial number of the NFT. For fungible tokens, this should be 0 + struct PendingAirdrop { + address sender; + address receiver; + address token; + int64 serial; + } + + /// Represents a unique NFT by its token address and serial number + /// @param nft The address of the NFT token + /// @param serial The serial number that uniquely identifies this NFT within its token type + struct NftID { + address nft; + int64 serial; + } + + /********************** + * 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 + /// @custom:version 0.3.0 the signature of the previous version was cryptoTransfer(TokenTransferList[] memory tokenTransfers) + 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, uint 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); + + /// Update the custom fees for a fungible token + /// @param token The token address + /// @param fixedFees Set of fixed fees for `token` + /// @param fractionalFees Set of fractional fees for `token` + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function updateFungibleTokenCustomFees(address token, IHederaTokenService.FixedFee[] memory fixedFees, IHederaTokenService.FractionalFee[] memory fractionalFees) external returns (int64 responseCode); + + /// Update the custom fees for a non-fungible token + /// @param token The token address + /// @param fixedFees Set of fixed fees for `token` + /// @param royaltyFees Set of royalty fees for `token` + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function updateNonFungibleTokenCustomFees(address token, IHederaTokenService.FixedFee[] memory fixedFees, IHederaTokenService.RoyaltyFee[] memory royaltyFees) external returns (int64 responseCode); + + /// @notice Airdrop one or more tokens to one or more accounts + /// @notice Recipients will receive tokens in one of these ways: + /// @notice - Immediately if already associated with the token + /// @notice - Immediately with auto-association if they have available slots + /// @notice - As a pending airdrop requiring claim if they have "receiver signature required" + /// @notice - As a pending airdrop requiring claim if they have no available auto-association slots + /// @notice Immediate airdrops are irreversible, pending airdrops can be canceled + /// @notice All transfer fees and auto-renewal rent costs are charged to the transaction submitter + /// @param tokenTransfers Array of token transfer lists containing token addresses and recipient details + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function airdropTokens(TokenTransferList[] memory tokenTransfers) external returns (int64 responseCode); + + /// @notice Cancels pending airdrops that have not yet been claimed + /// @param pendingAirdrops Array of pending airdrops to cancel + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function cancelAirdrops(PendingAirdrop[] memory pendingAirdrops) external returns (int64 responseCode); + + /// @notice Claims pending airdrops that were sent to the calling account + /// @param pendingAirdrops Array of pending airdrops to claim + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function claimAirdrops(PendingAirdrop[] memory pendingAirdrops) external returns (int64 responseCode); + + /// @notice Rejects one or more tokens by transferring their full balance from the requesting account to the treasury + /// @notice This transfer does not charge any custom fees or royalties defined for the tokens + /// @notice For fungible tokens, the requesting account's balance will become 0 and the treasury balance will increase by that amount + /// @notice For non-fungible tokens, the requesting account will no longer hold the rejected serial numbers and they will be transferred to the treasury + /// @param rejectingAddress The address rejecting the tokens + /// @param ftAddresses Array of fungible token addresses to reject + /// @param nftIDs Array of NFT IDs to reject + /// @return responseCode The response code for the status of the request. SUCCESS is 22. + function rejectTokens(address rejectingAddress, address[] memory ftAddresses, NftID[] memory nftIDs) external returns (int64 responseCode); +} \ No newline at end of file diff --git a/contracts/contracts/src/utils/KeyHelper.sol b/contracts/contracts/src/utils/KeyHelper.sol new file mode 100644 index 0000000..5696937 --- /dev/null +++ b/contracts/contracts/src/utils/KeyHelper.sol @@ -0,0 +1,166 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity >=0.5.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "./HederaTokenService.sol"; + +abstract contract KeyHelper { + using Bits for uint256; + address supplyContract; + + mapping(KeyType => uint256) keyTypes; + + enum KeyType { + ADMIN, + KYC, + FREEZE, + WIPE, + SUPPLY, + FEE, + PAUSE + } + enum KeyValueType { + INHERIT_ACCOUNT_KEY, + CONTRACT_ID, + ED25519, + SECP256K1, + DELEGETABLE_CONTRACT_ID + } + + constructor() { + keyTypes[KeyType.ADMIN] = 1; + keyTypes[KeyType.KYC] = 2; + keyTypes[KeyType.FREEZE] = 4; + keyTypes[KeyType.WIPE] = 8; + keyTypes[KeyType.SUPPLY] = 16; + keyTypes[KeyType.FEE] = 32; + keyTypes[KeyType.PAUSE] = 64; + } + + function getDefaultKeys() internal view returns (IHederaTokenService.TokenKey[] memory keys) { + keys = new IHederaTokenService.TokenKey[](2); + keys[0] = getSingleKey(KeyType.KYC, KeyValueType.CONTRACT_ID, ''); + keys[1] = IHederaTokenService.TokenKey( + getDuplexKeyType(KeyType.SUPPLY, KeyType.PAUSE), + getKeyValueType(KeyValueType.CONTRACT_ID, '') + ); + } + + function getAllTypeKeys(KeyValueType keyValueType, bytes memory key) + internal + view + returns (IHederaTokenService.TokenKey[] memory keys) + { + keys = new IHederaTokenService.TokenKey[](1); + keys[0] = IHederaTokenService.TokenKey(getAllKeyTypes(), getKeyValueType(keyValueType, key)); + } + + function getCustomSingleTypeKeys( + KeyType keyType, + KeyValueType keyValueType, + bytes memory key + ) internal view returns (IHederaTokenService.TokenKey[] memory keys) { + keys = new IHederaTokenService.TokenKey[](1); + keys[0] = IHederaTokenService.TokenKey(getKeyType(keyType), getKeyValueType(keyValueType, key)); + } + + function getCustomDuplexTypeKeys( + KeyType firstType, + KeyType secondType, + KeyValueType keyValueType, + bytes memory key + ) internal view returns (IHederaTokenService.TokenKey[] memory keys) { + keys = new IHederaTokenService.TokenKey[](1); + keys[0] = IHederaTokenService.TokenKey( + getDuplexKeyType(firstType, secondType), + getKeyValueType(keyValueType, key) + ); + } + + function getSingleKey( + KeyType keyType, + KeyValueType keyValueType, + bytes memory key + ) internal view returns (IHederaTokenService.TokenKey memory tokenKey) { + tokenKey = IHederaTokenService.TokenKey(getKeyType(keyType), getKeyValueType(keyValueType, key)); + } + + function getSingleKey( + KeyType keyType, + KeyValueType keyValueType, + address key + ) internal view returns (IHederaTokenService.TokenKey memory tokenKey) { + tokenKey = IHederaTokenService.TokenKey(getKeyType(keyType), getKeyValueType(keyValueType, key)); + } + + function getSingleKey( + KeyType firstType, + KeyType secondType, + KeyValueType keyValueType, + bytes memory key + ) internal view returns (IHederaTokenService.TokenKey memory tokenKey) { + tokenKey = IHederaTokenService.TokenKey( + getDuplexKeyType(firstType, secondType), + getKeyValueType(keyValueType, key) + ); + } + + function getDuplexKeyType(KeyType firstType, KeyType secondType) internal pure returns (uint256 keyType) { + keyType = keyType.setBit(uint8(firstType)); + keyType = keyType.setBit(uint8(secondType)); + } + + function getAllKeyTypes() internal pure returns (uint256 keyType) { + keyType = keyType.setBit(uint8(KeyType.ADMIN)); + keyType = keyType.setBit(uint8(KeyType.KYC)); + keyType = keyType.setBit(uint8(KeyType.FREEZE)); + keyType = keyType.setBit(uint8(KeyType.WIPE)); + keyType = keyType.setBit(uint8(KeyType.SUPPLY)); + keyType = keyType.setBit(uint8(KeyType.FEE)); + keyType = keyType.setBit(uint8(KeyType.PAUSE)); + } + + function getKeyType(KeyType keyType) internal view returns (uint256) { + return keyTypes[keyType]; + } + + function getKeyValueType(KeyValueType keyValueType, bytes memory key) + internal + view + returns (IHederaTokenService.KeyValue memory keyValue) + { + if (keyValueType == KeyValueType.INHERIT_ACCOUNT_KEY) { + keyValue.inheritAccountKey = true; + } else if (keyValueType == KeyValueType.CONTRACT_ID) { + keyValue.contractId = supplyContract; + } else if (keyValueType == KeyValueType.ED25519) { + keyValue.ed25519 = key; + } else if (keyValueType == KeyValueType.SECP256K1) { + keyValue.ECDSA_secp256k1 = key; + } else if (keyValueType == KeyValueType.DELEGETABLE_CONTRACT_ID) { + keyValue.delegatableContractId = supplyContract; + } + } + + function getKeyValueType(KeyValueType keyValueType, address keyAddress) + internal + pure + returns (IHederaTokenService.KeyValue memory keyValue) + { + if (keyValueType == KeyValueType.CONTRACT_ID) { + keyValue.contractId = keyAddress; + } else if (keyValueType == KeyValueType.DELEGETABLE_CONTRACT_ID) { + keyValue.delegatableContractId = keyAddress; + } + } +} + +library Bits { + uint256 internal constant ONE = uint256(1); + + // Sets the bit at the given 'index' in 'self' to '1'. + // Returns the modified value. + function setBit(uint256 self, uint8 index) internal pure returns (uint256) { + return self | (ONE << index); + } +} \ No newline at end of file diff --git a/contracts/contracts/test/Greeter.t.sol b/contracts/contracts/test/Greeter.t.sol deleted file mode 100644 index 2674b75..0000000 --- a/contracts/contracts/test/Greeter.t.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: Unlicense -pragma solidity ^0.8.28; - -import {Greeter} from "../src/Greeter.sol"; -import {Test} from "forge-std/Test.sol"; - -contract GreeterTest is Test { - Greeter public greeter; - - function setUp() public { - greeter = new Greeter("Hello, Hardhat!"); - } - - function testCreateGreeter() public { - assertEq(greeter.greet(), "Hello, Hardhat!"); - greeter.setGreeting("Hola, mundo!"); - assertEq(greeter.greet(), "Hola, mundo!"); - } -} diff --git a/contracts/eslint.config.js b/contracts/eslint.config.js deleted file mode 100644 index 00c241d..0000000 --- a/contracts/eslint.config.js +++ /dev/null @@ -1,47 +0,0 @@ -/* eslint-disable @typescript-eslint/no-require-imports */ -const eslint = require("@eslint/js"); -const tseslint = require("typescript-eslint"); -const eslintConfigPrettier = require("eslint-config-prettier"); -/* eslint-enable @typescript-eslint/no-require-imports */ - -module.exports = tseslint.config( - { - files: ["**/*.{js,ts}"], - extends: [ - eslint.configs.recommended, - ...tseslint.configs.recommended, - ...tseslint.configs.stylistic, - eslintConfigPrettier, - ], - plugins: { - "@typescript-eslint": tseslint.plugin, - }, - languageOptions: { - ecmaVersion: "latest", - parser: tseslint.parser, - parserOptions: { - project: true, - }, - }, - }, - { - ignores: [ - "node_modules/**", - "pnpm-lock.yaml", - "lib/**", - "cache/**", - "cache_hardhat/**", - "cache_hardhat-zk/**", - "artifacts/**", - "artifacts-zk/**", - "typechain-types/**", - "coverage/**", - "deployments/**", - "deployments-zk/**", - "deployments_tenderly/**", - "forge-artifacts/**", - "bin/**", - "out/**", - ], - }, -); diff --git a/contracts/package.json b/contracts/package.json index 2e1eadc..2f1d471 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -230,5 +230,8 @@ "typescript-eslint": "^8.21.0", "xdeployer": "^3.1.10", "zksync-ethers": "^6.15.4" + }, + "dependencies": { + "@hashgraph/sdk": "^2.56.0" } } diff --git a/contracts/scripts/client.ts b/contracts/scripts/client.ts new file mode 100644 index 0000000..a15136c --- /dev/null +++ b/contracts/scripts/client.ts @@ -0,0 +1,56 @@ +// https://docs.hedera.com/hedera/getting-started/environment-set-up + +import { Client, Hbar, PrivateKey } from '@hashgraph/sdk' +import {config} from "dotenv"; + +config(); + +export const clientSetup = () => { + // Grab your Hedera testnet account ID and private key from your .env file + const myAccountId = process.env.HEDERA_ACCOUNT_ID + const myPrivateKey = process.env.HEDERA_PRIVATE_KEY + const environment = process.env.HEDERA_ENVIRONMENT + + // If we weren't able to grab it, we should throw a new error + if (!myAccountId || !myPrivateKey) { + throw new Error('Environment variables MY_ACCOUNT_ID and MY_PRIVATE_KEY must be present') + } + + // Create your Hedera Testnet/Mainnet client + let client + if (environment === 'testnet') { + client = Client.forTestnet() + } else { + client = Client.forMainnet() + } + + let privateKey: PrivateKey | undefined = undefined; + if (process.env.HEDERA_PRIVATE_KEY_TYPE === "ecdsa") { + console.info("Private key was declared to be ECDSA"); + privateKey = PrivateKey.fromStringECDSA(myPrivateKey); + } else { + if (process.env.HEDERA_PRIVATE_KEY_TYPE === "ed25519") { + console.info("Private key was declared to be ED25519"); + } else { + console.warn( + "Private key is assumed to be ed25519 because HEDERA_PRIVATE_KEY_TYPE is not set correctly or at all.", + { HEDERA_PRIVATE_KEY_TYPE: process.env.HEDERA_PRIVATE_KEY_TYPE } + ); + } + + privateKey = PrivateKey.fromStringED25519(myPrivateKey); + } + + // Set your account as the client's operator + client.setOperator(myAccountId, privateKey); + + // Set the default maximum transaction fee (in Hbar) + client.setDefaultMaxTransactionFee(new Hbar(100)) + + // Set the maximum payment for queries (in Hbar) + client.setDefaultMaxQueryPayment(new Hbar(50)) + + console.log('Client setup complete.') + + return client +} \ No newline at end of file diff --git a/contracts/scripts/deploy.sh b/contracts/scripts/deploy.sh deleted file mode 100644 index 921f9d2..0000000 --- a/contracts/scripts/deploy.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -# Read the RPC URL -echo Enter your RPC URL \(script uses silent mode\;\ i.e. not printed to the console\): -echo Example: "https://eth-mainnet.alchemyapi.io/v2/XXXXXXXXXX" -read -s rpc - -# Read the private key -echo Enter your private key \(script uses silent mode\;\ i.e. not printed to the console\): -echo Example: "0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1" -read -s key - -# Read the contract name -echo Which contract do you want to deploy \(e.g. Greeter\)? -read contract - -# Read the constructor arguments -echo Enter the constructor arguments separated by spaces \(e.g. hello 0xacc4de8d4ca96c3f0c91b58f1d6c0d80cf8cc146 1\): -read -ra args - -if [ -z "$args" ] -then - forge create -i ./contracts/src/${contract}.sol:${contract} --rpc-url $rpc --private-key $key -else - forge create -i ./contracts/src/${contract}.sol:${contract} --rpc-url $rpc --private-key $key --constructor-args ${args} -fi diff --git a/contracts/scripts/deploy.ts b/contracts/scripts/deploy.ts index d9fa33f..e272a7d 100644 --- a/contracts/scripts/deploy.ts +++ b/contracts/scripts/deploy.ts @@ -1,40 +1,105 @@ -import hre from "hardhat"; +// https://docs.hedera.com/hedera/tutorials/token/create-and-transfer-an-nft-using-a-solidity-contract -// Colour codes for terminal prints -const RESET = "\x1b[0m"; -const GREEN = "\x1b[32m"; +import * as fs from "fs"; +import * as path from "path"; +import { + AccountId, + ContractCreateFlow, + ContractExecuteTransaction, + ContractFunctionParameters, + AccountBalanceQuery, +} from "@hashgraph/sdk"; +import { clientSetup } from "./client"; -function delay(ms: number) { - return new Promise((resolve) => setTimeout(resolve, ms)); -} +require("dotenv").config(); -async function main() { - const constructorArgs = ["Hello, Hardhat!"]; - const contract = await hre.ethers.deployContract("Greeter", constructorArgs); +const operatorId = AccountId.fromString(process.env.HEDERA_ACCOUNT_ID!); - await contract.waitForDeployment(); - const contractAddress = await contract.getAddress(); +const client = clientSetup(); - console.log("Greeter deployed to: " + `${GREEN}${contractAddress}${RESET}\n`); +const main = async () => { + // Check account balance + console.log("\n----- Account Information -----"); + const accountBalance = await new AccountBalanceQuery() + .setAccountId(operatorId) + .execute(client); + console.log(`💰 Account Balance:`); + console.log(` - ${accountBalance.hbars.toString()} (HBAR)`); + + // Deploy configuration + console.log("\n----- Deployment Configuration -----"); + console.log(`Operator Account: ${operatorId}`); + console.log(`Network: Testnet`); + console.log(`Metadata URI: ${process.env.NFT_METADATA_BASE_URL}`); + console.log(`HashScan Explorer: https://hashscan.io/testnet`); + + // Read Contract + console.log("\n----- Reading Contract -----"); + const artifactPath = path.join( + __dirname, + "../artifacts/contracts/src/NFTContract.sol/NFTContract.json", + ); + const contractJson = JSON.parse(fs.readFileSync(artifactPath, "utf8")); + + const bytecode = contractJson.bytecode.startsWith("0x") + ? contractJson.bytecode.slice(2) + : contractJson.bytecode; + console.log(`Contract bytecode size: ${bytecode.length / 2} bytes`); + + // Deploy Contract + console.log("\n----- Deploying Contract -----"); + console.log("Initiating contract deployment..."); + const createContract = new ContractCreateFlow() + .setGas(4000000) // Increase if revert + .setBytecode(bytecode); // Contract bytecode + const createContractTx = await createContract.execute(client); + const createContractRx = await createContractTx.getReceipt(client); + const contractId = createContractRx.contractId; + console.log(`Contract deployed successfully!`); + console.log(`Contract ID: ${contractId}`); console.log( - "Waiting 30 seconds before beginning the contract verification to allow the block explorer to index the contract...\n", + `View Contract: https://hashscan.io/testnet/contract/${contractId}`, ); - await delay(30000); // Wait for 30 seconds before verifying the contract - - await hre.run("verify:verify", { - address: contractAddress, - constructorArguments: constructorArgs, - }); - - // Uncomment if you want to enable the `tenderly` extension - // await hre.tenderly.verify({ - // name: "Greeter", - // address: contractAddress, - // }); -} - -main().catch((error) => { - console.error(error); - process.exitCode = 1; -}); + + if (!contractId) { + throw new Error("No contract was created"); + } + + // Create NFT Collection + console.log("\n----- Creating NFT Collection -----"); + console.log("Initiating NFT collection creation..."); + const createToken = new ContractExecuteTransaction() + .setContractId(contractId) + .setGas(1000000) // Increase if revert + .setPayableAmount(10) // Increase if revert + .setFunction( + "createNft", + new ContractFunctionParameters() + .addString("Fall Collection") // NFT name + .addString("LEAF") // NFT symbol + .addString("Just a memo") // NFT memo + .addInt64(250) // NFT max supply + .addInt64(7000000), // Expiration: Needs to be between 6999999 and 8000001 + ); + const createTokenTx = await createToken.execute(client); + const createTokenRx = await createTokenTx.getRecord(client); + const tokenIdSolidityAddr = + createTokenRx.contractFunctionResult!.getAddress(0); + const tokenId = AccountId.fromSolidityAddress(tokenIdSolidityAddr); + console.log(`NFT Collection created successfully!`); + console.log(`Collection Details:`); + console.log(` - Token ID: ${tokenId}`); + console.log(` - Name: Fall Collection`); + console.log(` - Symbol: LEAF`); + console.log(` - Max Supply: 250`); + console.log(`View Token: https://hashscan.io/testnet/token/${tokenId}`); + + // Summary + console.log("\n----- Deployment Summary -----"); + console.log(`Contract ID: ${contractId}`); + console.log(`Token ID: ${tokenId}`); + console.log(`\nAll operations completed successfully! 🎉\n`); +}; + +main(); diff --git a/contracts/scripts/deploy_local.sh b/contracts/scripts/deploy_local.sh deleted file mode 100644 index 294f2a3..0000000 --- a/contracts/scripts/deploy_local.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -# Read the RPC URL -echo Enter your mainnet RPC URL to fork a local Hardhat node from \(script uses silent mode\;\ i.e. not printed to the console\): -echo Example: "https://eth-mainnet.alchemyapi.io/v2/XXXXXXXXXX" -read -s rpc - -## Fork the mainnet -echo Please wait 1 minute for Hardhat to fork the mainnet and run locally... -echo If this command fails, try running "yarn" to install Hardhat dependencies... -make -s mainnet-fork ETH_MAINNET_RPC_URL=$rpc & - -# Wait for Hardhat to fork the mainnet -sleep 60 - -# Read the contract name -echo Which contract do you want to deploy \(e.g. Greeter\)? -read contract - -# Read the constructor arguments -echo Enter the constructor arguments separated by spaces \(e.g. hello 0xacc4de8d4ca96c3f0c91b58f1d6c0d80cf8cc146 1\): -read -ra args - -if [ -z "$args" ] -then - forge create -i ./contracts/src/${contract}.sol:${contract} --rpc-url "http://localhost:8545" -else - forge create -i ./contracts/src/${contract}.sol:${contract} --rpc-url "http://localhost:8545" --constructor-args ${args} -fi diff --git a/contracts/scripts/flatten.sh b/contracts/scripts/flatten.sh deleted file mode 100644 index b1edd78..0000000 --- a/contracts/scripts/flatten.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -# Read the contract name -echo Which contract do you want to flatten \(e.g. Greeter\)? -read contract - -# Remove an existing flattened contract -rm -rf flattened.sol - -# Flatten the contract -forge flatten ./contracts/src/${contract}.sol > flattened.sol diff --git a/contracts/scripts/interact.ts b/contracts/scripts/interact.ts deleted file mode 100644 index fc19094..0000000 --- a/contracts/scripts/interact.ts +++ /dev/null @@ -1,37 +0,0 @@ -// An example script that shows how to interact programmatically with a deployed contract -// You must customise it according to your contract's specifications -import hre from "hardhat"; - -// Colour codes for terminal prints -const RESET = "\x1b[0m"; -const GREEN = "\x1b[32m"; - -async function main() { - const address = "0xB8d2BDd1C99A33b831553DA64F6215983bf0475a"; // Specify here your contract address - const contract = await hre.ethers.getContractAt("Greeter", address); // Specify here your contract name - - //////////////// - // PAYLOAD // - ////////////// - - const newGreeting = "Buongiorno!"; // Specify here the payload of the to-be-called function - - //////////////// - // SENDING // - ////////////// - - const tx = await contract.setGreeting(newGreeting); // Specify here the to-be-called function name - console.log("The transaction hash is: " + `${GREEN}${tx.hash}${RESET}\n`); - console.log("Waiting until the transaction is confirmed...\n"); - const receipt = await tx.wait(); // Wait until the transaction is confirmed - console.log( - "The transaction returned the following transaction receipt:\n", - receipt, - ); -} - -// To run it, invoke `npx hardhat run scripts/interact.ts --network ` -main().catch((error) => { - console.error(error); - process.exitCode = 1; -}); diff --git a/contracts/scripts/minter/add.ts b/contracts/scripts/minter/add.ts new file mode 100644 index 0000000..1393a1b --- /dev/null +++ b/contracts/scripts/minter/add.ts @@ -0,0 +1,57 @@ +import { + AccountId, + ContractExecuteTransaction, + ContractFunctionParameters, + ContractId, + Hbar, +} from "@hashgraph/sdk"; +import { clientSetup } from "../client"; + +// Get command line arguments +const [contractId, minterId] = process.argv.slice(2); + +if (!contractId || !minterId) { + console.error("Missing required arguments"); + console.error("Usage: npx ts-node addMinter.ts "); + console.error("Example: npx ts-node addMinter.ts 0.0.123456 0.0.789101"); + process.exit(1); +} + +const addMinter = async () => { + try { + // Create client and set operator + const client = clientSetup(); + + console.log("\n----- Adding New Minter -----"); + console.log(`Contract ID: ${contractId}`); + console.log(`Minter ID: ${minterId}`); + + // Convert IDs to correct format + const contractIdObj = ContractId.fromString(contractId); + const minterIdObj = AccountId.fromString(minterId); + const minterAddress = minterIdObj.toSolidityAddress(); + + // Create and execute the transaction + const addMinterTx = new ContractExecuteTransaction() + .setContractId(contractIdObj) + .setGas(1000000) + .setMaxTransactionFee(new Hbar(20)) + .setFunction( + "addMinter", + new ContractFunctionParameters().addAddress(minterAddress), + ); + + const txResponse = await addMinterTx.execute(client); + const receipt = await txResponse.getReceipt(client); + + console.log("\nMinter added successfully!"); + console.log("Transaction ID:", txResponse.transactionId.toString()); + + client.close(); + } catch (error) { + console.error("Error adding minter:", error); + throw error; + } +}; + +addMinter(); diff --git a/contracts/scripts/minter/remove.ts b/contracts/scripts/minter/remove.ts new file mode 100644 index 0000000..23145cf --- /dev/null +++ b/contracts/scripts/minter/remove.ts @@ -0,0 +1,56 @@ +import { + AccountId, + ContractExecuteTransaction, + ContractFunctionParameters, + ContractId, + Hbar, +} from "@hashgraph/sdk"; +import { clientSetup } from "../client"; + +// Get command line arguments +const [contractId, minterId] = process.argv.slice(2); + +if (!contractId || !minterId) { + console.error("Missing required arguments"); + console.error("Usage: npx ts-node removeMinter.ts "); + console.error("Example: npx ts-node removeMinter.ts 0.0.123456 0.0.789101"); + process.exit(1); +} + +const removeMinter = async () => { + try { + const client = clientSetup(); + + console.log("\n----- Removing Minter -----"); + console.log(`Contract ID: ${contractId}`); + console.log(`Minter ID: ${minterId}`); + + // Convert IDs to correct format + const contractIdObj = ContractId.fromString(contractId); + const minterIdObj = AccountId.fromString(minterId); + const minterAddress = minterIdObj.toSolidityAddress(); + + // Create and execute the transaction + const removeMinterTx = new ContractExecuteTransaction() + .setContractId(contractIdObj) + .setGas(1000000) + .setMaxTransactionFee(new Hbar(20)) + .setFunction( + "removeMinter", + new ContractFunctionParameters().addAddress(minterAddress), + ); + + const txResponse = await removeMinterTx.execute(client); + const receipt = await txResponse.getReceipt(client); + + console.log("\nMinter removed successfully!"); + console.log("Transaction ID:", txResponse.transactionId.toString()); + + client.close(); + } catch (error) { + console.error("Error removing minter:", error); + throw error; + } +}; + +removeMinter(); diff --git a/contracts/scripts/verify.sh b/contracts/scripts/verify.sh deleted file mode 100644 index ef56dce..0000000 --- a/contracts/scripts/verify.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -echo Which compiler version did you use to build? -read version -echo Selected compiler version: $version - -echo Which contract do you want to verify \(e.g. Greeter\)? -read contract -echo Selected contract name: $contract - -echo What is the deployed address? -read deployed -echo Selected contract address: $deployed - -echo What is the chain ID of the deployed address? -read id -echo Selected chain ID: $id - -echo Enter the constructor abi \(e.g. constructor\(string\)\): -read abi -echo Selected constructor abi: $abi - -echo Enter the constructor arguments separated by spaces \(e.g. 1 2 3\): -read -ra args -echo Selected constructor arguments: $args - -encoded=`cast abi-encode $abi $args` -echo ABI-encoded constructor arguments: ${encoded:2} - -echo Enter your Etherscan API key: -read -s etherscan - -if [ -z "$args" ] -then - forge verify-contract --chain-id $id --compiler-version $version $deployed ./contracts/src/${contract}.sol:${contract} $etherscan -else - forge verify-contract --constructor-args ${encoded:2} --chain-id $id --compiler-version $version $deployed ./contracts/src/${contract}.sol:${contract} $etherscan -fi diff --git a/contracts/test/Greeter.test.ts b/contracts/test/Greeter.test.ts deleted file mode 100644 index 5a2a104..0000000 --- a/contracts/test/Greeter.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { expect, assert } from "chai"; -import hre from "hardhat"; -import { SignerWithAddress } from "@nomicfoundation/hardhat-ethers/signers"; -import { mine, time } from "@nomicfoundation/hardhat-network-helpers"; -import { Greeter } from "../typechain-types"; - -describe("Greeter", function () { - let deployerAccount: SignerWithAddress; - let greeter: Greeter; - - beforeEach(async function () { - greeter = await hre.ethers.deployContract( - "Greeter", - ["Hello, Hardhat!"], - deployerAccount, - ); - await greeter.waitForDeployment(); - }); - - it("Should return the new greeting once it's changed", async function () { - expect(await greeter.greet()).to.equal("Hello, Hardhat!"); - - const setGreetingTx = await greeter.setGreeting("Hola, mundo!"); - - // Wait until the transaction is mined - await setGreetingTx.wait(); - - expect(await greeter.greet()).to.equal("Hola, mundo!"); - }); - - // Showcase test on how to use the Hardhat network helpers library - it("Should mine the given number of blocks", async function () { - const blockNumberBefore = await time.latestBlock(); - - await mine(100); - - assert.equal(await time.latestBlock(), blockNumberBefore + 100); - }); -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c6fc4ce..6674ab1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,10 @@ settings: importers: contracts: + dependencies: + '@hashgraph/sdk': + specifier: ^2.56.0 + version: 2.56.0 devDependencies: '@eslint/js': specifier: ^9.19.0 @@ -4292,6 +4296,7 @@ packages: lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} From cbde11f0a08ab0b24edb609342d6f4ae3b9445fa Mon Sep 17 00:00:00 2001 From: Marko Gracin Date: Tue, 28 Jan 2025 14:35:22 +0100 Subject: [PATCH 3/4] =?UTF-8?q?feat(contracts):=20=F0=9F=8E=B8=20set=20sta?= =?UTF-8?q?rting=20point=20for=20ERC20=20contract?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/contracts/src/ERC20.sol | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/contracts/contracts/src/ERC20.sol b/contracts/contracts/src/ERC20.sol index 618a624..ba161d3 100644 --- a/contracts/contracts/src/ERC20.sol +++ b/contracts/contracts/src/ERC20.sol @@ -3,7 +3,17 @@ pragma solidity ^0.8.22; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; -contract MyToken is ERC20 { - constructor() ERC20("MyToken", "MTK") {} +contract Bidi is ERC20, Ownable, ERC20Permit { + constructor(address initialOwner) + ERC20("Bidi", "BIDI") + Ownable(initialOwner) + ERC20Permit("Bidi") + {} + + function mint(address to, uint256 amount) public onlyOwner { + _mint(to, amount); + } } \ No newline at end of file From 8285f85947383f8f9815077a4d4d9f552ec99438 Mon Sep 17 00:00:00 2001 From: Marko Gracin Date: Wed, 29 Jan 2025 14:30:11 +0100 Subject: [PATCH 4/4] =?UTF-8?q?feat(contracts):=20=F0=9F=8E=B8=20add=20dep?= =?UTF-8?q?loy=20scripts=20and=20custom=20functionality=20to=20ERC20=20con?= =?UTF-8?q?tract?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + .../src/NFTContract.sol/NFTContract.json | 21 ++ .../HederaTokenService.json | 6 + .../IHederaTokenService.json | 56 +++++ contracts/contracts/src/ERC20.sol | 225 +++++++++++++++++- contracts/scripts/deployERC20.ts | 82 +++++++ contracts/scripts/queryERC20.ts | 50 ++++ 7 files changed, 434 insertions(+), 9 deletions(-) create mode 100644 contracts/abis/contracts/src/NFTContract.sol/NFTContract.json create mode 100644 contracts/abis/contracts/src/utils/HederaTokenService.sol/HederaTokenService.json create mode 100644 contracts/abis/contracts/src/utils/IHederaTokenService.sol/IHederaTokenService.json create mode 100644 contracts/scripts/deployERC20.ts create mode 100644 contracts/scripts/queryERC20.ts diff --git a/.gitignore b/.gitignore index ec2acba..d6b2396 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ Thumbs.db .env.* !.env.example .vscode/ + +# IDE +.idea \ No newline at end of file diff --git a/contracts/abis/contracts/src/NFTContract.sol/NFTContract.json b/contracts/abis/contracts/src/NFTContract.sol/NFTContract.json new file mode 100644 index 0000000..600049f --- /dev/null +++ b/contracts/abis/contracts/src/NFTContract.sol/NFTContract.json @@ -0,0 +1,21 @@ +[ + "constructor()", + "event CallResponseEvent(bool,bytes)", + "event MinterAdded(address indexed)", + "event MinterRemoved(address indexed)", + "function addMinter(address)", + "function authorizedMinters(address) view returns (bool)", + "function claimNft(address,int64) returns (int256)", + "function claimed(int64) view returns (bool)", + "function createNft(string,string,string,int64,int64) payable returns (address)", + "function getClaimerAddress(int64) view returns (address)", + "function isMinter(address) view returns (bool)", + "function isNftClaimed(int64) view returns (bool)", + "function mintNftForUser(address,bytes[],address) returns (int64)", + "function nftClaimRights(int64) view returns (address)", + "function owner() view returns (address)", + "function redirectForToken(address,bytes) returns (int256, bytes)", + "function removeMinter(address)", + "function transferFrom(address,address,address,uint256) returns (int64)", + "function transferFromNFT(address,address,address,uint256) returns (int64)" +] diff --git a/contracts/abis/contracts/src/utils/HederaTokenService.sol/HederaTokenService.json b/contracts/abis/contracts/src/utils/HederaTokenService.sol/HederaTokenService.json new file mode 100644 index 0000000..1f3bc1b --- /dev/null +++ b/contracts/abis/contracts/src/utils/HederaTokenService.sol/HederaTokenService.json @@ -0,0 +1,6 @@ +[ + "event CallResponseEvent(bool,bytes)", + "function redirectForToken(address,bytes) returns (int256, bytes)", + "function transferFrom(address,address,address,uint256) returns (int64)", + "function transferFromNFT(address,address,address,uint256) returns (int64)" +] diff --git a/contracts/abis/contracts/src/utils/IHederaTokenService.sol/IHederaTokenService.json b/contracts/abis/contracts/src/utils/IHederaTokenService.sol/IHederaTokenService.json new file mode 100644 index 0000000..594760a --- /dev/null +++ b/contracts/abis/contracts/src/utils/IHederaTokenService.sol/IHederaTokenService.json @@ -0,0 +1,56 @@ +[ + "function airdropTokens(tuple(address,tuple(address,int64,bool)[],tuple(address,address,int64,bool)[])[]) returns (int64)", + "function allowance(address,address,address) returns (int64, uint256)", + "function approve(address,address,uint256) returns (int64)", + "function approveNFT(address,address,uint256) returns (int64)", + "function associateToken(address,address) returns (int64)", + "function associateTokens(address,address[]) returns (int64)", + "function burnToken(address,int64,int64[]) returns (int64, int64)", + "function cancelAirdrops(tuple(address,address,address,int64)[]) returns (int64)", + "function claimAirdrops(tuple(address,address,address,int64)[]) returns (int64)", + "function createFungibleToken(tuple(string,string,address,string,bool,int64,bool,tuple(uint256,tuple(bool,address,bytes,bytes,address))[],tuple(int64,address,int64)),int64,int32) payable returns (int64, address)", + "function createFungibleTokenWithCustomFees(tuple(string,string,address,string,bool,int64,bool,tuple(uint256,tuple(bool,address,bytes,bytes,address))[],tuple(int64,address,int64)),int64,int32,tuple(int64,address,bool,bool,address)[],tuple(int64,int64,int64,int64,bool,address)[]) payable returns (int64, address)", + "function createNonFungibleToken(tuple(string,string,address,string,bool,int64,bool,tuple(uint256,tuple(bool,address,bytes,bytes,address))[],tuple(int64,address,int64))) payable returns (int64, address)", + "function createNonFungibleTokenWithCustomFees(tuple(string,string,address,string,bool,int64,bool,tuple(uint256,tuple(bool,address,bytes,bytes,address))[],tuple(int64,address,int64)),tuple(int64,address,bool,bool,address)[],tuple(int64,int64,int64,address,bool,address)[]) payable returns (int64, address)", + "function cryptoTransfer(tuple(tuple(address,int64,bool)[]),tuple(address,tuple(address,int64,bool)[],tuple(address,address,int64,bool)[])[]) returns (int64)", + "function deleteToken(address) returns (int64)", + "function dissociateToken(address,address) returns (int64)", + "function dissociateTokens(address,address[]) returns (int64)", + "function freezeToken(address,address) returns (int64)", + "function getApproved(address,uint256) returns (int64, address)", + "function getFungibleTokenInfo(address) returns (int64, tuple(tuple(tuple(string,string,address,string,bool,int64,bool,tuple(uint256,tuple(bool,address,bytes,bytes,address))[],tuple(int64,address,int64)),int64,bool,bool,bool,tuple(int64,address,bool,bool,address)[],tuple(int64,int64,int64,int64,bool,address)[],tuple(int64,int64,int64,address,bool,address)[],string),int32))", + "function getNonFungibleTokenInfo(address,int64) returns (int64, tuple(tuple(tuple(string,string,address,string,bool,int64,bool,tuple(uint256,tuple(bool,address,bytes,bytes,address))[],tuple(int64,address,int64)),int64,bool,bool,bool,tuple(int64,address,bool,bool,address)[],tuple(int64,int64,int64,int64,bool,address)[],tuple(int64,int64,int64,address,bool,address)[],string),int64,address,int64,bytes,address))", + "function getTokenCustomFees(address) returns (int64, tuple(int64,address,bool,bool,address)[], tuple(int64,int64,int64,int64,bool,address)[], tuple(int64,int64,int64,address,bool,address)[])", + "function getTokenDefaultFreezeStatus(address) returns (int64, bool)", + "function getTokenDefaultKycStatus(address) returns (int64, bool)", + "function getTokenExpiryInfo(address) returns (int64, tuple(int64,address,int64))", + "function getTokenInfo(address) returns (int64, tuple(tuple(string,string,address,string,bool,int64,bool,tuple(uint256,tuple(bool,address,bytes,bytes,address))[],tuple(int64,address,int64)),int64,bool,bool,bool,tuple(int64,address,bool,bool,address)[],tuple(int64,int64,int64,int64,bool,address)[],tuple(int64,int64,int64,address,bool,address)[],string))", + "function getTokenKey(address,uint256) returns (int64, tuple(bool,address,bytes,bytes,address))", + "function getTokenType(address) returns (int64, int32)", + "function grantTokenKyc(address,address) returns (int64)", + "function isApprovedForAll(address,address,address) returns (int64, bool)", + "function isFrozen(address,address) returns (int64, bool)", + "function isKyc(address,address) returns (int64, bool)", + "function isToken(address) returns (int64, bool)", + "function mintToken(address,int64,bytes[]) returns (int64, int64, int64[])", + "function pauseToken(address) returns (int64)", + "function redirectForToken(address,bytes) returns (int64, bytes)", + "function rejectTokens(address,address[],tuple(address,int64)[]) returns (int64)", + "function revokeTokenKyc(address,address) returns (int64)", + "function setApprovalForAll(address,address,bool) returns (int64)", + "function transferFrom(address,address,address,uint256) returns (int64)", + "function transferFromNFT(address,address,address,uint256) returns (int64)", + "function transferNFT(address,address,address,int64) returns (int64)", + "function transferNFTs(address,address[],address[],int64[]) returns (int64)", + "function transferToken(address,address,address,int64) returns (int64)", + "function transferTokens(address,address[],int64[]) returns (int64)", + "function unfreezeToken(address,address) returns (int64)", + "function unpauseToken(address) returns (int64)", + "function updateFungibleTokenCustomFees(address,tuple(int64,address,bool,bool,address)[],tuple(int64,int64,int64,int64,bool,address)[]) returns (int64)", + "function updateNonFungibleTokenCustomFees(address,tuple(int64,address,bool,bool,address)[],tuple(int64,int64,int64,address,bool,address)[]) returns (int64)", + "function updateTokenExpiryInfo(address,tuple(int64,address,int64)) returns (int64)", + "function updateTokenInfo(address,tuple(string,string,address,string,bool,int64,bool,tuple(uint256,tuple(bool,address,bytes,bytes,address))[],tuple(int64,address,int64))) returns (int64)", + "function updateTokenKeys(address,tuple(uint256,tuple(bool,address,bytes,bytes,address))[]) returns (int64)", + "function wipeTokenAccount(address,address,int64) returns (int64)", + "function wipeTokenAccountNFT(address,address,int64[]) returns (int64)" +] diff --git a/contracts/contracts/src/ERC20.sol b/contracts/contracts/src/ERC20.sol index ba161d3..c9f27d5 100644 --- a/contracts/contracts/src/ERC20.sol +++ b/contracts/contracts/src/ERC20.sol @@ -1,19 +1,226 @@ // SPDX-License-Identifier: MIT -// Compatible with OpenZeppelin Contracts ^5.0.0 pragma solidity ^0.8.22; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import {ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; contract Bidi is ERC20, Ownable, ERC20Permit { - constructor(address initialOwner) - ERC20("Bidi", "BIDI") - Ownable(initialOwner) - ERC20Permit("Bidi") - {} - - function mint(address to, uint256 amount) public onlyOwner { - _mint(to, amount); + using SafeERC20 for IERC20; + + // Fee configuration using basis points (bps) + uint256 public feeBasisPoints; + address public feeRecipient; + uint256 public constant MAX_FEE_BASIS_POINTS = 10000; + uint256 private constant BASIS_POINTS_DENOMINATOR = 10000; + + // Collateral configuration + IERC20 public collateralToken; // HCHF + uint256 public lockedCollateral; // Amount of HCHF token locked + + // Events + event FeeUpdated(uint256 oldFeeBasisPoints, uint256 newFeeBasisPoints); + event FeeRecipientUpdated(address oldFeeRecipient, address newFeeRecipient); + event CollateralTokenSet(address oldToken, address newToken); + event CollateralLocked(address depositor, uint256 amount); + event TokensMinted(address receiver, uint256 amount); + event TokensUnwrapped(address unwrapper, uint256 amount); // New event for unwrapping + + /** + * @dev Constructor that sets up the BIDI token and its collateral + * @param initialOwner The address that will own and control the contract + * @param _collateralToken The address of the stablecoin to be used as collateral + */ + constructor(address initialOwner, address _collateralToken) + ERC20("Bidi", "BIDI") + Ownable(initialOwner) + ERC20Permit("Bidi") + { + feeBasisPoints = 100; // 1% + feeRecipient = initialOwner; + collateralToken = IERC20(_collateralToken); + } + + /** + * @dev Allows owner to change the collateral token address + * @param newCollateralToken The new collateral token address + */ + function setCollateralToken(address newCollateralToken) external onlyOwner { + require(lockedCollateral == 0, "Cannot change while collateral is locked"); + require(newCollateralToken != address(0), "Invalid token address"); + + address oldToken = address(collateralToken); + collateralToken = IERC20(newCollateralToken); + + emit CollateralTokenSet(oldToken, newCollateralToken); + } + + /** + * @dev Sets the fee percentage for transfers + * @param newFeeBasisPoints The new fee in basis points (100 = 1.00%) + */ + function setFee(uint256 newFeeBasisPoints) external onlyOwner { + require(newFeeBasisPoints <= MAX_FEE_BASIS_POINTS, "Fee exceeds maximum"); + + uint256 oldFeeBasisPoints = feeBasisPoints; + feeBasisPoints = newFeeBasisPoints; + + emit FeeUpdated(oldFeeBasisPoints, newFeeBasisPoints); + } + + /** + * @dev Sets the fee recipient address + * @param newFeeRecipient The address that will receive the fees + */ + function setFeeRecipient(address newFeeRecipient) external onlyOwner { + require(newFeeRecipient != address(0), "Fee recipient cannot be zero address"); + + address oldFeeRecipient = feeRecipient; + feeRecipient = newFeeRecipient; + + emit FeeRecipientUpdated(oldFeeRecipient, newFeeRecipient); + } + + /** + * @dev Deposits collateral and mints BIDI tokens + * @param collateralAmount Amount of collateral token to deposit + * @param addressTo Address to receive the minted BIDI tokens + * NOTE: Caller must first approve this contract to spend their collateral tokens + */ + function mintWithCollateral(address addressTo, uint256 collateralAmount) external onlyOwner { + require(collateralAmount > 0, "Amount must be greater than 0"); + require(addressTo != address(0), "Invalid receiver"); + + // Transfer collateral from owner to contract + collateralToken.safeTransferFrom(msg.sender, address(this), collateralAmount); + + // Update locked collateral amount + lockedCollateral += collateralAmount; + + // Mint equivalent amount of BIDI tokens (1:1 ratio) + _mint(addressTo, collateralAmount); + + emit CollateralLocked(msg.sender, collateralAmount); + emit TokensMinted(addressTo, collateralAmount); + } + + /** + * @dev Unwraps BIDI tokens back to collateral tokens + * @param amount Amount of BIDI tokens to unwrap + * NOTE: This function will burn BIDI tokens and return collateral tokens to the caller + */ + function unwrap(uint256 amount) external { + require(amount > 0, "Amount must be greater than 0"); + require(balanceOf(msg.sender) >= amount, "Insufficient BIDI balance"); + + // Burn BIDI tokens first + _burn(msg.sender, amount); + + // Update locked collateral amount + lockedCollateral -= amount; + + // Transfer collateral tokens back to the user + collateralToken.safeTransfer(msg.sender, amount); + + emit TokensUnwrapped(msg.sender, amount); + } + + /** + * @dev Returns the current fee configuration + * @return currentFeeBasisPoints The current fee in basis points (100 = 1.00%) + * @return currentFeeRecipient The current fee recipient address + */ + function getFeeInfo() external view returns (uint256 currentFeeBasisPoints, address currentFeeRecipient) { + return (feeBasisPoints, feeRecipient); + } + + /** + * @dev Returns collateral information + * @return token The collateral token address + * @return locked The amount of collateral locked + * @return supply The total supply of BIDI tokens + */ + function getCollateralInfo() external view returns ( + address token, + uint256 locked, + uint256 supply + ) { + return (address(collateralToken), lockedCollateral, totalSupply()); + } + + /** + * @dev Overrides the transfer function to include fee splitting (except for owner) + */ + function transfer(address to, uint256 amount) public override returns (bool) { + require(to != address(0), "Transfer to zero address"); + require(amount > 0, "Transfer amount must be greater than zero"); + + // If sender is owner, no fee is taken + if (msg.sender == owner()) { + return super.transfer(to, amount); + } + + // For all other transfers, apply fee + uint256 feeAmount = (amount * feeBasisPoints) / BASIS_POINTS_DENOMINATOR; + uint256 transferAmount = amount - feeAmount; + + // Transfer fee to fee recipient + if (feeAmount > 0) { + super.transfer(feeRecipient, feeAmount); + } + + // Transfer remaining amount to recipient + return super.transfer(to, transferAmount); + } + + /** + * @dev Overrides the transferFrom function to include fee splitting (except for owner) + */ + function transferFrom(address from, address to, uint256 amount) public override returns (bool) { + require(to != address(0), "Transfer to zero address"); + require(amount > 0, "Transfer amount must be greater than zero"); + + // If the token owner is the contract owner, no fee is taken + if (from == owner()) { + return super.transferFrom(from, to, amount); + } + + // For all other transfers, apply fee + uint256 feeAmount = (amount * feeBasisPoints) / BASIS_POINTS_DENOMINATOR; + uint256 transferAmount = amount - feeAmount; + + // Transfer fee to fee recipient + if (feeAmount > 0) { + super.transferFrom(from, feeRecipient, feeAmount); + } + + // Transfer remaining amount to recipient + return super.transferFrom(from, to, transferAmount); + } + + /** + * @dev Emergency function to rescue any ERC20 tokens accidentally sent to this contract + * @param tokenAddress The address of the token to rescue + * @param to The address that will receive the tokens + * @param amount The amount of tokens to rescue + * NOTE: Cannot be used to rescue locked collateral + */ + function rescueERC20( + address tokenAddress, + address to, + uint256 amount + ) external onlyOwner { + require(to != address(0), "Cannot rescue to zero address"); + require(amount > 0, "Amount must be greater than 0"); + + // If rescuing collateral token, ensure we maintain backing + if (tokenAddress == address(collateralToken)) { + uint256 excess = IERC20(tokenAddress).balanceOf(address(this)) - lockedCollateral; + require(amount <= excess, "Cannot rescue locked collateral"); + } + + IERC20(tokenAddress).safeTransfer(to, amount); } } \ No newline at end of file diff --git a/contracts/scripts/deployERC20.ts b/contracts/scripts/deployERC20.ts new file mode 100644 index 0000000..979ac9d --- /dev/null +++ b/contracts/scripts/deployERC20.ts @@ -0,0 +1,82 @@ +import * as fs from "fs"; +import * as path from "path"; +import { + AccountId, + ContractCreateFlow, + ContractFunctionParameters, + AccountBalanceQuery, +} from "@hashgraph/sdk"; +import { clientSetup } from "./client"; + +require("dotenv").config(); + +const collateralTokenId = AccountId.fromString( + process.env.COLLATERAL_TOKEN_ID!, +); +const operatorId = AccountId.fromString(process.env.HEDERA_ACCOUNT_ID!); +const client = clientSetup(); + +const main = async () => { + // Check account balance + console.log("\n----- Account Information -----"); + const accountBalance = await new AccountBalanceQuery() + .setAccountId(operatorId) + .execute(client); + + console.log(`💰 Account Balance:`); + console.log(` - ${accountBalance.hbars.toString()} (HBAR)`); + + // Deploy configuration + console.log("\n----- Deployment Configuration -----"); + console.log(`Operator Account: ${operatorId}`); + console.log(`Network: Testnet`); + console.log(`HashScan Explorer: https://hashscan.io/testnet`); + + // Read Contract + console.log("\n----- Reading Contract -----"); + const artifactPath = path.join( + __dirname, + "../artifacts/contracts/src/ERC20.sol/Bidi.json", + ); + const contractJson = JSON.parse(fs.readFileSync(artifactPath, "utf8")); + + const bytecode = contractJson.bytecode.startsWith("0x") + ? contractJson.bytecode.slice(2) + : contractJson.bytecode; + console.log(`Contract bytecode size: ${bytecode.length / 2} bytes`); + + // Deploy Contract + console.log("\n----- Deploying Contract -----"); + console.log("Initiating contract deployment..."); + const createContract = new ContractCreateFlow() + .setGas(1000000) + .setBytecode(bytecode) + .setConstructorParameters( + new ContractFunctionParameters() + .addAddress(operatorId.toSolidityAddress()) // initialOwner + .addAddress(collateralTokenId.toSolidityAddress()), // _collateralToken (HCHF?) + ); + + const createContractTx = await createContract.execute(client); + const createContractRx = await createContractTx.getReceipt(client); + const contractId = createContractRx.contractId; + console.log(`Contract deployed successfully!`); + console.log(`Contract ID: ${contractId}`); + console.log( + `View Contract: https://hashscan.io/testnet/contract/${contractId}`, + ); + + if (!contractId) { + throw new Error("No contract was created"); + } + + // Summary + console.log("\n----- Deployment Summary -----"); + console.log(`Contract ID: ${contractId}`); + console.log(`\nAll operations completed successfully! 🎉\n`); +}; + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/contracts/scripts/queryERC20.ts b/contracts/scripts/queryERC20.ts new file mode 100644 index 0000000..6acb0b4 --- /dev/null +++ b/contracts/scripts/queryERC20.ts @@ -0,0 +1,50 @@ +import { clientSetup } from "./client"; + +const { ContractCallQuery, ContractId } = require("@hashgraph/sdk"); +require("dotenv").config(); + +const contractIdArg = process.argv[2]; +if (!contractIdArg) { + console.error("Please provide a contract ID as an argument"); + console.error("Usage: node queryToken.js "); + process.exit(1); +} + +async function queryTokenDetails(contractIdString: string) { + const client = clientSetup(); + const contractId = ContractId.fromString(contractIdString); + + try { + const nameQuery = new ContractCallQuery() + .setContractId(contractId) + .setGas(100000) + .setFunction("name"); + + const symbolQuery = new ContractCallQuery() + .setContractId(contractId) + .setGas(100000) + .setFunction("symbol"); + + const totalSupplyQuery = new ContractCallQuery() + .setContractId(contractId) + .setGas(100000) + .setFunction("totalSupply"); + + const nameResult = await nameQuery.execute(client); + const symbolResult = await symbolQuery.execute(client); + const totalSupplyResult = await totalSupplyQuery.execute(client); + + console.log("Token Details:"); + console.log("--------------"); + console.log(`Contract ID: ${contractIdString}`); + console.log(`Name: ${nameResult.getString(0)}`); + console.log(`Symbol: ${symbolResult.getString(0)}`); + console.log(`Total Supply: ${totalSupplyResult.getUint256(0).toString()}`); + } catch (error) { + console.error("Error querying token details:", error); + } finally { + client.close(); + } +} + +queryTokenDetails(contractIdArg);